This appendix is intended for authors of existing (legacy)
projects who want to transition from using xsltproc to the PreTeXt-CLI.
Setup
We will assume you have the following:
An existing project, in a folder called PROJECT.
A Python installation at version 3.8 or newer.
The PreTeXt-CLI, installed using the instructions in .
For usage of the CLI, see .
The first thing we will do is to create a new folder.
Call this folder PROJECT-CLI, and put it at the same level as the PROJECT folder.
In a terminal (or in Python), enter the PROJECT-CLI directory,
and run the pretext new book command.
This will create the directory structure that the PreTeXt-CLI expects.
You now should see the following:
A project.ptx file
An assets folder
A generated-assets folder
A publication folder
A source folder
Within the source folder, there will be a file called main.ptx,
and within the publication folder, there will be a publisher file,
called publication.ptx.
Transferring files
In your original project, you probably have one folder containing your source,
and you may have other folders containing external files,
such as images, or code for interactive elements.
If you use additional XSL, such as a LaTeX style sheet,
you may have a folder for those files as well.
You want to copy your files as follows:
Copy all of your source files into PROJECT-CLI/source.
If you already have a file called main.ptx,
it is fine to let this file overwrite the one created by the pretext init command.
If you do not have such a file, you can either delete main.ptx,
or rename your top-level file to main.ptx.
Note: if you do not end up with a file called main.ptx,
or if your file with this name is not your top-level file,
see for details on how to edit the project.ptx file accordingly.
Copy each folder containing external assets such as images into the assets folder.
Note that you want to copy the folders and not the contents of those folders.
This should result in folders such as PROJECT-CLI/assets/images.
If applicable, copy over your xsl folder, and any other relevant folders.
But do not copy over your output or publication folders.
Updating docinfo, the publication file, and the project manifest
Open both your original publication.ptx file,
and the one created by the pretext init command.
The file created by pretext init will contain some directory management details, such as:
<source> <directories external="../assets" generated="../generated-assets"/></source>
If your publication file did not already have a source element,
copy this from the auto-generated publisher file into your own.
If it does, adjust your existing content to match the director structure needed by the PreTeXt-CLI.
When this is done, replace the publication file created by pretext init with your own.
If your docinfo contains a brandlogo,
you may need to change the source attribute from logo.png
to images/logo.png, where logo.png is the name of the file used for your brand logo.
This assumes that the file you use for your brand logo is contained in
PROJECT-CLI/assets/images/.
Next, we need to update the project.ptx file that was created by pretext init.
Opening the file, you will see there are several components: html,
latex, pdf, and subset.
The subset component is quite useful for editing:
specify an xml:id from your book (such as a chapter or section),
and you can use the command pretext build subset to do a partial build of your project.
In each component, ensure that the source tag points to the top level file of your project.
By default, this is source/main.ptx,
but if you kept a different file name during the step in ,
you will need to change this line to point to the correct file.
Similarly, ensure that the publication tag points to the correct publication file.
If you use any string parameters that cannot be transitioned to the publisher file,
you can add them in your project.ptx manifest.
For example, if you have WeBWorK problems and use the static preview feature,
your xsltproc executable would have contained
--stringparam webwork.divisional.static no
In the html section of project.ptx, you can add
<stringparam key="webwork.divisional.static" value="no"/>
You can also specify a WeBWorK server as a string parameter,
using key="server" , with value set to the server you use.
Finally, if there is any component for which you use additional XSL,
you can specify this in the manifest as well.
For example, if you have a LaTeX style sheet xsl/latex-style.xsl,
then in both the latex and pdf sections,
you should add the line
<xsl>xsl/latex-style.xsl</xsl>
See below for further details on using custom XSL.
Updating your custom XSL
Because the PreTeXt-CLI uses its own copy of ,
we have to change how the custom XSL imports the style sheets.
At time of writing, import of the entities.ent file,
which defines all the different components of ,
does not seem to work automatically. Our first step will be to make a copy of this file,
and place it in the xsl folder, next to our custom XSL style sheet.
If you still have a copy of the repository,
you can copy entities.ent from pretext/xsl.
If not, open a Python terminal, and then run:
from pretext import staticstatic.core_xsl('pretext-latex.xsl',as_path=True)
This will output the path to the XSL,
and in that folder you can find entities.ent and copy it to PROJECT-CLI/xsl.
Next, open your custom XSL file. You will need to change two lines.
First, you will have a line that looks something like
<!ENTITY % entities SYSTEM "../xsl/entities.ent"/>
Change the string ../xsl/entities.ent to simply entities.ent.
(Alternatively, instead of copying this file as above, you could enter the full path.)
Second, for each style sheet that you import, you will have a line that looks something like
<xsl:import href="../xsl/pretext-latex.xsl"/>
if you are using custom XSL for LaTeX.
Replace href="../xsl/pretext-latex.xsl" with pretext-href="pretext-latex.xsl" .
This tells the PreTeXt-CLI to import the XSL style sheet that it ships with.
At this point, you should be ready to try building your project with the PreTeXt-CLI.
The advice above is based on a particular case study, using APEX Calculus.
The requirements of your particular project may differ somewhat from the steps presented here.
As development proceeds on the PreTeXt-CLI, some of this advice may change.
In particular, in a future version,
it should no longer be necessary to make a copy of entities.ent.
================================================
FILE: doc/guide/appendices/cli-v1vsv2.xml
================================================
CLI versions 1 vs 2Oscar Levin
This appendix describes the differences between the PreTeXt-CLI version 1.x and 2.x.
Generally, projects started in version 1 of the CLI will continue to work in version 2.
The primary difference between the versions of the CLI is the format of the project manifest (project.ptx): in version 1, most properties were described as XML elements, where they are now given as attributes. The functions of each attribute for the version 2 manifest is described in . Here we illustrate how these relate to the legacy elements.
In we show a project manifest containing almost all options available. Then shows the same project manifest in version 2 format.
Example of version 1 project manifesthtmlsource/main.ptxpublication/publication.ptxoutput/webpdfsource/main.ptxpublication/publication.ptxoutput/printmybook.pdfhtmlsource/main.ptxpublication/rs-publication.ptxpublished/mydoc-idxsl/runestone.xsllatexpdflatexxelatexasysageconvertpdftopsnodefile2brl
]]>
Example of version 2 project manifest
]]>
One advantage of version 2 of the CLI is that many of the options are now optional, or can be applied at the project level to all targets. The example shown above can be further simplified, as shown in , since most values are the defaults anyway.
Simplified project manifest in version 2 format
]]>
Attributes for the project element that describe paths are common roots for any paths specified in target elements.
Notice that there is no longer a place to specify your executables in the manifest. This is because your executables are generally specific to a particular system, not a project. So instead, you specify executables in the file executables.ptx which is ignored by git. As with the version 2 manifest, the name or path to the executables are given as values of attributes. An example is shown in .
The project manifest can be further simplified by setting attributes for the project element. See for details.
Hopefully the examples above make it clear how the two versions compare for basic options. Below we list a few more differences between how you specify options in the version 1 and version 2 manifests.
ptx-version
For the CLI to know you are using a version 2 manifest, you must include the ptx-version attribute in the project element, with value 2.
string parameters
In version 1, you would specify string parameters as a sequence of stringparam elements, each with key and value attributes. In version 2, you use a single stringparams element with attributes for each key set to the value for the string parameter's value. See the example in
zipped output
In version 1, you could get a zipped version of your html output by setting the format of the target to html-zipped. In version 2, this is replaced by setting the compression attribute to zip in the target element.
Braille options
In version 2, you specify what embossing method you use for Braille formatted targets using the braille-mode attribute, with value either emboss or electronic.
WeBWorK Sets
In version 1, you could generate webwork sets using the "webwork-sets" format. In version 2, this is replaced by setting the format attribute to webwork in the target element. Such a target can be compressed using the compression attribute.
Local asymptote
In version 2, you can require that asymptote elements are generated using a local version of asymptote (instead of the server). You can specify this by setting the asy-method attribute to local, in either the target element, or as an attribute of project to use this method for all targets.
================================================
FILE: doc/guide/appendices/editors.xml
================================================
Text Editors, Spell Check
This appendix has information about using various text editors efficiently with source, along with suggestions for spell-checking. The choice of an editor that suits you is a big part of being a productive author. We are partial to Visual Studio Code because it is available free, is open-source, has a range of features, has community support (plug-ins), and has cross-platform support (Linux, Mac, and Windows). So we lead with Visual Studio Code, but also include Sublime Text, Emacs, XML Copy Editor, and vi/vim. A summary table of schema-aware editors can be found at .
Visual Studio CodeOscar Levin
VS Code is a free and open source, cross platform text editor from Microsoft. The package PreTeXt-tools provides highlighting and snippets for by extending the XML language support of VS Code.
Sublime TextDave Rosoff
Sublime Text is a fast cross-platform editor with thousands of user-contributed packages implemented in its Python API. It is not free or open-source, although most of the user-contributed packages are both. Development is active as of December2024. However after build 4180 of Sublime Text 4, the PreTeXt support is broken.
Here we outline several of the most important Sublime Text features that will help you to minimize your typing overhead and work more efficiently with your project. We also introduce the no longer maintained PreTeXtual package designed to help authors work more efficiently.
Sublime Text 2, 3 and 4 are available for an unlimited evaluation period, but a license must be purchased for continued use.
Settings
Sublime Text settings are stored and managed in a collection of JSON files as key-value pairs, in files that have a .sublime-settings extension. You change the settings by visiting these files and editing the values away from their defaults.
To edit your Sublime Text settings, you can use the Preferences/Settings User menu (Sublime Text/Preferences on OS X). Make sure that when you go to edit Settings, you always choose the User option. Changes to Default settings files will be overwritten when Sublime Text updates. It is recommended to use the Default files to see what settings are available to change. There are a lot, and not all are documented.
All Sublime Text users should be aware that a particular view (buffer) may receive settings in several different ways, e.g., from global default settings, from global OS-specific settings, from package-provided settings, from user-provided settings, and so on.
Key bindings are also stored in files with a similar format. There
are only a limited number of keyboard shortcuts available, although Sublime Text does support multi-step shortcuts like Emacs. If you find that you wish to reassign shortcuts, this is certainly possible through the Preferences/Key Bindings User menu (Sublime Text/Preferences on OS X).
Package Control
Sublime Text's Python API exposes a lot of the Sublime Text internals to plugin and package authors. Packages extend Sublime Text's functionality, much like Emacs major modes. A package usually consists of some Python scripts that define Sublime Text events and actions, some text-based configuration files (XML/JSON/YAML files defining language syntax, symbol recognition, custom snippet insertion triggers and contexts, keybindings for new and old commands, ), and perhaps some other stuff too. These typically get bundled into a .zip archive that is disguised with the unusual extension .sublime-package. These archives live in the Packages directory, accessible via the Preferences menu (the Sublime Text/Preferences menu on OS X). Sublime Text monitors the Packages directory for changes and reloads all affected plugins on the fly.
The first thing you should do after installing Sublime Text is install the Package Control package. This package manager operates within Sublime Text to automatically fetch updates for packages you have installed (unless you disable this feature). You can also list currently installed packages, find new packages to investigate, remove packages,
Thousands of user-contributed packages are available for easy installation via Package Control. It is possible to maintain packages by hand, since most package authors publish via GitHub, but Package Control is the universally recommended method of obtaining, managing, and removing packages for your installation.
Visit the Package Control download site.
Find the Sublime Text console command (make sure the correct version of Sublime Text is selected) and copy it to the clipboard.
Open the Sublime Text console (Ctrl-`) and paste the command into the window that appears, then press Enter.
Having installed Package Control, you can use the command palette to deploy its commands, such as Install Package, List Packages, and Remove Package. See the documentation for more. A few packages that are especially useful are recommended throughout this section, and summarized in .
Project Management
Like many modern editors, Sublime Text has good project management features. These allow files that are part of a larger project to work together. For example, Sublime's Goto Anything command allows quick access to any file in a project. The Find in Project command permits users to search and replace (with or without regular expressions) across an entire project. Matches are displayed in a text buffer and double-clicking opens the relevant file at the appropriate position.
The sidebar provides a convenient view of all of the files and directories in a projector, if you like, a filtered view, where files of your choice are excluded. The MBXTools package () also makes some use of project-specific settings in order to provide some of its functionality.
The Open Folder Command
The easiest way to make use of the project management functionality is to store related files in a single directory and its subdirectories. If you then use the File/Open Folder command, the entire directory is opened and all its subdirectories and files are shown in the sidebar. You can toggle the sidebar with either the command palette or directly with Ctrl+K, Ctrl+B (Cmd+K, Cmd+B on OS X).
By making use of this command you are already using project management, even if you never save your project. Sublime Text always has an implicit project open if you don't open an explicit one. This is good enough for many users a lot of the time, since it provides the most useful feature (Find/Find in Project). The Goto/Go To Symbol in Project command is also useful, but not fully implemented in MBXTools (). Some of the benefits of explicit project management are outlined below.
Explicit Projects
To save your project explicitly, use the Project menu to choose Save As Project and choose an appropriate name and location. For a XML project, this would probably be the same name and location as the document root file. Use the Project menu commands to open and close your project.
There are a few benefits to using an explicit project to group files.
You can group together files and folders in different parts of the file system, instead of being restricted to subtrees.
You can have project-specific settings that are different from Sublime Text's defaults and different from your user preferences ().
Sublime's project workspaces will remember which files you had open when you last closed the project, and at which positions.
If you get very fancy, you can have multiple workspaces for the same project, with different filters and views for different purposes.
It is fine to include .sublime-project files in Git repositories, but .sublime-workspace files should never be so included (according to the Sublime Text documentation).
Using the Sidebar
The project sidebar allows you to view the entire directory tree (rooted at the folder you opened with the Open Folder command), or, if you've opened an explicit project as described above, all of its files and folders. You can use the sidebar to copy, move, rename, delete, and duplicate files, for example, as well as opening them.
The package SideBarEnhancements is highly recommended (install via Package Control). It makes the sidebar much more useful.
An alternative to the sidebar that Emacs users especially will find helpful is the dired package. The link is to a git repository since the package is no longer available from Package Control. This package allows you to browse the directory tree in a Sublime Text buffer. You can rename and move files within itusing all your favorite Sublime commands, including multiple selections (). You might also try the SublimeFileBrowser package, which is actively maintained, available in Package Control, and seems to provide similar functionality.
Multiple selections
Multiple selections are the single most useful and irreplaceable feature of Sublime Text, the one that will keep you coming back. From the documentation:
Any praise about multiple selections is an understatement.
The base functionality of multiple selections is simple. Hold down the Ctrl key (Cmd on OS X), and click somewhere in the open view to get a second cursor. Continue to add more cursors. All of them will behave together when you type: text will be inserted, most snippets or other text commands function as usual, etc. Even mouse commands work in an intuitive way with multiple selections.
It is hard to explain exactly what makes multiple selections so powerful. You just have to try it for yourself. Here is a typical example. In a structured document, many bits of text occur quite frequentlyelement and attribute names, for example. You may want to update several occurrences of a fragment at oncemaking several identical changes. Sublime's Quick Add Next command (Ctrl+D/Cmd+D) makes this a snap.
Place the caret somewhere in the word you'd like to modify.
Use Quick Add Next to expand your (empty) selection to the current word.
Use Quick Add Next again to add the next instance to the selection, which will then typically be disconnected.
Continue to Quick Add Next as many times as you like. Use Quick Skip Next (Ctrl+K, Ctrl+D/Cmd+K, Cmd+D) to jump over instances you would like to leave alone. If you go too far and select in error, hit Ctrl+U/Cmd+U to undo.
Make your modification, only one time.
Another example that occurs frequently when authoring XML is when you use the Wrap with Tag snippet (Alt+Shift+W/Ctrl+Shift+W). This snippet wraps the selection(s) in a p tag, with the tag name highlighted in both the start and end tags. If the p element is not what you wanted, just type. Both tags are replaced. This is a huge benefit to the XML author that makes essential use of multiple selections, even though you are barely aware of this as you use the feature.
Column selection allows you to select a rectangular area of a file.
This is unbelievably useful when editing a structured document. There
are lots of ways to do it (see the Sublime Text documentation for an almost exhaustive list), but the most frequently used is to hold down Shift while clicking and dragging with the right mouse button (on OS X, hold down Option while dragging with the right mouse button). See the documentation for keyboard-based shortcuts.
Column selection becomes even more useful when used in combination with the keyboard shortcuts for moving and selecting, such as Ctrl+Shift+Right (select to end of word) and Shift+End (select to end of line).
Yet another example of the appallingly great utility of multiple selection comes when copying and pasting from a different file format. Suppose you have copied some lines of text and wish each such line to become a list item in your source.
Use column selection, as described above, to select each line individually.
Use Wrap with Tag to wrap each of the selected lines with matched begin/end li tags, all at once.
Now you have to select the lines again, to wrap them with matched begin/end p tags. First, hit Shift+End to select to end of line.
If your lines are wrapped, you may need to hit Shift+End again to get to the end of the wrapped lines.
Now you've selected too far: the </li> are selected as well. Hold down Ctrl+Shift and hit the left arrow twice (unselect by word). (After a little practice, steps like this seem automatic.)
Use Wrap with Tag to wrap each of the selected lines with matched begin/end p tags, all at once.
This does take a little mouse-work, but the keystroke savings can be considerable. (The Emmet package, described in , provides an even quicker way to do this task and much more complicated ones.)
There are so many incredibly handy ways to use multiple selections that we will forgo any further examples to leave the reader the pleasure of discovering her own favorites. One particularly helpful package is Text Pastry, which provides some auto-numbering and text insertion commands that work nicely with multiple selections. There are also a handful of packages that extend multiple selection functionality, such as PowerCursors and MultiEditUtils. PowerCursors allows you to add cursors and manipulate them without using the mouse. MultiEditUtils provides additional text processing commands designed to work with multiple selections.
Emmet
Emmet is the most downloaded plugin for Sublime Text (1.82 million installs via Package Control). It is mostly used by HTML and CSS authors and provides a lot of functionality for them. It is also useful for writing XML, as we see below. The main benefits of working with Emmet are ease of tag creation, manipulation, and removal.
Emmet by default overrides Sublime's binding for the Tab key, endowing it with new behavior (the command Expand Abbreviation). This new behavior is to create a matching XML tag pair for whatever word is to the left of the caret, or with whatever words are selected. For example, if you were to type ol and press the Tab key, the resulting text would be<ol></ol>with the caret positioned between the two newly created tags. Pressing Tab a further time moves the caret to the right of the end tag.
Emmet will produce any word it does not recognize into a matched tag pair when the Expand Abbreviation command is run. Some XML elements are empty, though. Within a matched tag pair, the command Split/Join Tag (Ctrl+Shift+`/Cmd+Shift+`) will contract it into an empty tag, removing any text between the existing begin and end tags. (If the caret is inside a tag for an empty element, this command replaces the empty element with a matching begin/end tag pair.)
The default behavior (creating tag pairs whenever Tab is pressed) interferes with Sublime Text's usual Tab-completion, which may be undesirable. It may be disabled by setting"disabled_keymap_actions": "expand_abbreviation_by_tab"in the Preferences/Package Settings/Emmet/Settings User file. The functionality of Expand Abbreviation will still be available through Ctrl+E.
For a more involved example of abbreviations, suppose you have pasted the items of an ordered list. Now you need to structure it with ol, li, and so on.
Lists are often good.
You can provide list items with <c>@xml:id</c>.
You probably don't want to number them, though.
The desired output is:
<ol>
<li xml:id="item1">Lists are often good.</li>
<li xml:id="item2">You can provide list items with <c>@xml:id</c>.</li>
<li xml:id="item3">You probably don't want to number them, though.</li>
</ol>
Using Emmet, one produces it by executing the Wrap as you Type command (Ctrl+Shift+G/Ctrl+W) and entering the following expression in the minibuffer.
ol>li[xml:id=item$]*>p
The > symbol denotes a child element, the square brackets (with or without assignment) denote an attribute list, the $ provides the line-based numbering, and the * specifies wrapping each selected line with the indicated subtree (so each line is wrapped with lip, instead of the entire selection).
Emmet can produce a large hierarchy of nested XML tags at various levels using this abbreviation syntax. For example, suppose you know that you will need to produce a tag structure of the following form.
Upon typing this string and placing the caret to the right of it, hit Ctrl+E (or Tab, if you didn't disable the Emmet default). The entire tree structure is created immediately, with tab stops for the missing attribute values and for each matching begin/end pair.
The Expand Abbreviation As You Type command allows you to tweak such abbreviations interactively. Hit Ctrl+Alt+Enter and type the expression above into the minibuffer at the bottom of the window, watching the tree appear as you type.
Emmet is a very powerful package that can do much more than is outlined here. However, it is by default mostly adapted to writing CSS and HTML. Customizing it to work more directly with is an ongoing project. You can discover more about Emmet by examining the Emmet documentation or poking around in the Settings and Keymap files.
PreTeXtuala Sublime Text package for
PreTeXtual is a Sublime Text package designed to assist authors using . It is no longer supported and will not work in the latest version of Sublime Text 4.
The package owes its inspiration and much of its code to the excellent LaTeXTools package. Please let the author know of any bugs you find or any features you would like to see included in MBXTools by creating a GitHub issue.
Installationvia Package Control
It is recommended to install PreTeXtual via Package Control. If you have not installed Package Control yet, you should do that first (and restart Sublime Text afterwards).
After Package Control is installed, use the Install Package command to search for the PreTeXtual package, and select it from the Quick Panel to install. This method of installation allows Package Control to automatically update your installation and show you appropriate release notes.
via git
You may also install PreTeXtual via git. Change directories into your Packages folder. To find the Packages folder, select Browse Packages from the Preferences menu (from the Sublime Text 4 menu on OS X). Make sure you are in the Packages folder and notPackages/User.
Then, rungit clone https://github.com/daverosoff/PreTeXtual.gitand restart Sublime Text (probably not necessary).
Usage
You can activate the package features by enabling the syntax. The syntax definition looks for .mbx or .ptx file extensions. If your files end with .xml, you will either need to add a comment to the first line of each file (after the XML declaration):<!-- PTX -->or you will need to enable the syntax manually using the command palette. To enable it manually, open a file and press Ctrl+Shift+P (Cmd+Shift+P on OS X) and type pretext. Select Set Syntax: PreTeXt from the list of options.
You should see the text PreTeXt in the lower right corner if you have the status bar visible (command palette: Toggle Status Bar).
There are only a few features implemented so far.
If you have some sectioning in your PTX file, hit Ctrl+R (Cmd+R on OS X) to run the Go To Symbol command. You should see a panel showing all the divisions' xml:id names.
If you have been using xml:id to label your stuff, try typing <xref ref=" (the beginning of a cross-reference). Sublime Text should show you a panel containing all xml:id values along with the elements they go with. Choose one to insert it at the caret and close the xref tag. Alternatively, type ref and hit Tab to activate the xref snippet. Then hit Ctrl+l followed by x or Ctrl+l followed by Ctrl+Space to bring up the completions menu. There are several variants of the ref snippet, namely refa, refp, and refpa.
Type chp, sec, ssec, or sssec and hit Tab to activate the division snippets. A blank title element is provided and the cursor positioned within it. As you type, the xml:id field for the division is filled with similar text mirroring the title you are entering.
Known issues
When manually adding an xref (not using the snippets or autocomplete), you will frequently see a spurious Unrecognized format error.
The ref snippet does not bring up the quick panel. Should it?
Recursive search through included files for labels is not yet implemented.
This will only work for xref completion, not Go To Symbol.
Nothing has been tested on OS X or Linux.
Recommended Packages
Package Control
Emmet
SideBarEnhancements
PowerCursors
MultiEditUtils
Text Pastry
Git or SublimeGit
SublimeLinter
MBXTools
Aspell
Aspell is a spell-checker which you can easily configure to skip every piece of text used as a name of an XML element, and to skip elements that are likely to contain text that is not really made up of words and sentences. For example, the element chapter might not be flagged by some mainstream spell checkers, but most likely the element mdash will be flagged by every spell checker, including the default configuration of Aspell. And your m elements are full of , not words. Unfortunately, Aspell will not follow your xi:xinclude directives, so you need to run it against each of your files if you have modularized your source. A command-line invocation would like like:aspell -c ~/aota/src/fish.xml
Installation on Linux should be straightforward through your distribution's package manager. On a Mac, the executable, and a dictionary for your language, can be installed easily via MacPorts (). Recent improvements on Windows (ca. 2019-06-06) perhaps imply that WSL or the Ubuntu Linux install may provide an easy avenue. Please report steps that result in a successful Windows installation, so we can include them here.
Configuration is achieved via a hidden file at the top of your home directory, namely .aspell.conf. A Mac will try to keep you away from hidden files, which are the ones whose name begins with a period. Let SublimeText give you an assist here. In we show a first run at a useful configuration file. You definitely want to add the SGML filter, since this is what tells Aspell that you are working on XML filesSGML is the precursor of XML., so that all element names, attributes, etc. will not be checked. The remainder is a suggested list of elements to skip. Suggestions for additions are welcome here.
Aspell Configuration File
add-filter sgml
# elements with lots of code
# but not "pre", since it is like a "p"
add-sgml-skip c
add-sgml-skip cd
add-sgml-skip program
add-sgml-skip console
add-sgml-skip sage
# image formats
add-sgml-skip latex-image
add-sgml-skip asymptote
add-sgml-skip sageplot
# elements that display XML elements
add-sgml-skip tag
add-sgml-skip tage
add-sgml-skip attr
# initialisms and friends
add-sgml-skip init
add-sgml-skip acro
add-sgml-skip abbr
# math (latex)
add-sgml-skip m
add-sgml-skip me
add-sgml-skip men
add-sgml-skip md
add-sgml-skip mdn
add-sgml-skip usage # in "notation"
# not really content, by and large
add-sgml-skip docinfo
You can run Aspell in a sort of batch, non-interactive mode by adding the -a switch and then providing your source on standard input and directing results from standard output. But I do not find it very useful.
emacs
Jason Underdown reports on 2016-05-12 that emacs' nXML mode works well with a schema, and Mitch Keller reports on 2021-04-18 that specifically a RELAX-NG schema may be used. The two versions of the RELAX-NG schema for can be found atpretext/schema/pretext.rngpretext/schema/pretext.rncThe first is the real version, while the second is an entirely equivalent (compact) syntax that is meant to be a bit more human-readable, so perhaps either may be employed.
On 2021-04-18, Mitch Keller reports success with placing the following schemas.xml file in his source file directories. Note that you may need to adjust the path in the uri attribute, and the pattern attribute implies that Mitch has used a .ptx suffix for all his source filenames. If you are already using emacs, you should have no trouble making the necessary adjustments.
]]>
You simply put your cursor at any point in the document, start a new tag with < and then call the completion-at-point function (I bound it to the key-chord: C-<return>) to get a list of possible completions. Or you can start typing a few characters to narrow the list of possibilities. It will also let you know if the element you are trying to insert is invalid.
Jason Underdown
XML Copy Editor
Michael Doob reports on 2017-02-03 that XML Copy Editor works well, in particular on Windows. This is an open source program, for Windows and a variety of popular Linux distributions, that supports both DTD and RELAX-NG schemas. It is less of a general programmer's editor and more like dedicated tools for working strictly with XML documents.
vi, vimUsing vi and together
Any smart editor, and vi is no exception, allows the addition of new commands
to make repetitive tasks easier. Since creating documents
with markup often is repetitive, it makes sense to
explore the techniques of creating additional commands in vi to make editing
easier.
The expectation for this section is that the reader is able to
use vi to create and edit files, but no greater depth of knowledge
is assumed. The term vi is meant to be inclusive, that is,
it includes vim, gvim and the like.
Modes of vi: Command, Normal, and Insert
One of the most fundamental properties of vi is that every editing task
may be accomplished using the keyboard. For different editing contexts,
it is advantageous to have the keyboard strokes have different meaning;
these different interpretations are called the modes of vi.
Here are the pertinent modes of vi:
Normal mode: This mode is for changing position within the file.
For example, j moves down, 2w moves forward two words,
and -2} moves backwards two paragraphs. It is also used for block
operations on text:
-3dd is used to delete three previous lines,
or 2.yy will yank the next two sentences.
Usually vi starts in normal mode.
Insert mode: This mode is for inserting new text into the file.
Typing Galloping Gertie leapt into the air. causes that text
to be inserted at the current position in the file.
Command mode: This mode is to execute commands.
Typing /abc in normal mode initiates a forward search for the
first occurrence of
abc via the command mode. Similarly :w will use command
mode to write out the current working material (buffer) to the disk.
Now a quick review of the keys used to move between modes:
From a given position in a file in Normal mode, using
i or a will change to Insert mode and
insert text before or after that position.
Similarly, I or A will insert text in front of or
directly following the current line,
and O or o will insert text above or below
the current line. Returning to Normal mode is done using
Esc.
If /, ?, or : is typed when in
normal mode, a small one-line window opens up (called the command line)
to receive text. This entered text is terminated by Enter.
The / or ? initiates a forward or backward search
for the entered text. The : sends the entered text to the
vi program for further processing.
An exclamation point prefix ! in Command mode
sends that command to the operating system.
For example, entering :!date will cause the results
of the operating system command date to be displayed
on the command line. In addition the percent character
% gets expanded to the name of the file being edited.
If your operating system uses ls -l to list file information,
then :!ls -l % will give the properties of the file being edited.
Using :set
The Command mode in vi allows users to change their interaction with the editor.
(Remember that entering : changes to Command mode,
and any text string entered in Command mode is terminated by Enter.)
For example, entering :set number will cause line numbers to appear on
the left.
They are not in the file itself, of course, but are there for the convenience
of the user.
Entering :set nonumber will remove these line numbers.
Similarly :set autoindent will cause a new line to preserve the
indentation of the previous one and :set expandtab will replace the tab
character by an appropriate number of spaces (both are very useful for writing
documents).
Some useful set commands are given in .
Some useful parameters for the set commandCommandResulting change:set autoindentA new line preserves indentation:set expandtabInserted tabs converted to spaces:set rows=nSet number of lines displayed :set columns=nSet the display size of each line:set listShow tabs and carriage returns :set tabstops=nTab inserts n spaces :set Show all current settings
A little editing etiquette
The xml files used with are ordinary text files.
This makes it easy for coauthors to email them back and forth in order
to expand and improve the content. There are a few potential problems,
and hence some useful precautions.
If a Tab is entered and not expanded to spaces, different editors may
display the text with different alignments.
If there are extra spaces at the end of a line, there may be odd line wrapping.
Fortunately, these are easy to avoid.
A tab character may be found in the usual manner for searches:
:/Tab will find the next tab;
it can be removed and replaced by spaces.
A space before the end of a line can be found with the search
:/Space$
(vi will interpret $ as the end of a line rather than
as a dollar sign). The spaces at the end of the line can then
be removed.
There is another feature of vi that is helpful in this respect.
Using :set list will make the tab and end of line characters visual
as ^I and $.
This makes the appropriate deletions easy. It is good editing etiquette to do so.
Abbreviations
The :abbreviation command allows the replacement of longer expressions
by shorter ones. Try this: in Command mode enter
:abbreviate ups University of Puget Sound
and then (in Insert mode) type
I enjoyed my visit to the ups.
If all goes well, the abbreviation is expanded and the
text is
I enjoyed my visit to the University of Puget Sound.
Now suppose you want to write
My favourite letter of the Greek alphabet is upsilon.
Looks like trouble with the last word, but in fact all is well.
Abbreviations are not expanded until the next character after the
abbreviation is read. If the next character after
the abbreviation is either a letter or a number, no expansion
takes place. Careful observation of the original example reveals that
the abbreviation is not expanded until the period is entered.
Here is another example: You want to write I love pushups.
What about the end of the last word? No problem!
The ups is expanded only if it is at the beginning of a word.
Amusingly enough, when in Command mode, the abbreviate command
can itself be abbreviated to ab.
The choice of an abbreviation is essentially arbitrary. However, if
desiring an abbreviation within
I enjoyed my visit to the Technische Hogeschool Eindhoven,
it would be folly to use :ab the Technische Hogeschool Eindhoven.
The abbreviation should be mnemonic, but avoid actual words.
Now consider the following problem: what if the Enter key
is one of the desired characters in the abbreviation? Since that key
terminates Command mode, it appears impossible.
Not so! The characters <enter> (that's seven of them) will be
replaced by a single character equivalent to Enter.
There are other characters that are treated in the same manner:
Text equivalents to keyboard entriesDesired keyText equivalent (not case sensitive)Enter<enter> or <cr> Backspace<bs> Insert<ins> Delete<del> Esc<esc> <left> <right> <up> <down> Home<home> End<end> Ctrl+x<C-x> Alt + y<M-y>
Here is a useful example:
Define the abbreviation
ab gm <m></m><left><left><left><left>
and then enter (in Insert mode)
It follows from gm\log(\theta)=0 that gm\theta=1.
It will (almost) be expanded to
It follows from <m>\log(\theta)=0</m> that <m>\theta=1</m>.
That's almost because it is necessary to move the cursor past the
</m> when leaving the mathematics input. It's pretty easy to see how
this abbreviation works. The first seven characters <m></m>
are expanded unchanged and then the cursor moves to the left four times to put it
right where it needs to be to enter the mathematics. Careful observation
will reveal a little trick used in this example: gm is followed by
a \ and so terminated the abbreviation correctly. If the variable were x,
then inputting gmx would not work. A workaround: enter a Space after
the gm. This terminates the abbreviation and it will work as desired. (Actually,
there will be an extra space before the x, which causes no ill effect, but if
true perfection is desired, using gmSpaceBackspace
will eliminate it.)
When :ab is used, it is in effect in all modes. When abbreviations
are for Input mode only (as is the present case), then iab: may be used
and is usually preferable.
Here is another useful (nonmathematical) example.
Define (for use in Input mode)
:iab gp <p><cr></p><up>.
Then entering gpEnter on a new line will create three lines
appearing like:
<p>
</p>
That is, the first and third line start and end a paragraph and the cursor,
represented by | is
at the beginning of the second line. If autoindent is set,
(see ),
the line indentations are preserved. With this definition, the frequent
task of starting a new paragraph appropriately formatted
may be carried out using only three key strokes.
A further example:
:iab gcom <!--<CR><CR>--><Up>
is useful to entering comments. Starting a line with
gcom Tab will help create nicely indented comments.
Want to know what abbreviations are in effect? Just enter :ab
and they will be listed.
Maps
Maps, like abbreviations, are shortcuts that save extra key strokes.
There is a difference in method: the map command uses
key bindings that (re)define the meanings of key strokes.
For example, inputting (while in Normal mode)
:map <C-X> :w<CR> will define (map) the
Ctrl +X key combination so that it is equivalent
to typing the rest of the definition, :w<CR>.
This three-key sequence, of course, just changes to Command mode,
writes the current buffer to disk, and returns to Normal mode.
Presumably this newly defined key binding is meant to be invoked in Normal mode.
To do so in Insert mode would be a mistake;
to avoid this, there is an nmap command that defines key binding
for Normal mode only. Similarly, there is an imap command for Insert mode only.
Thus defining a key binding using :nmap <C-X> :w<CR>
will make it valid only in Normal mode.
Unlike abbreviations, the binding takes effect the moment the key is pressed.
There is a cute technique to use the same binding in Normal and Insert modes.
The key binding
:imap <C-X> <esc><C-X>a
defines a binding for Insert mode. The first character,
<esc>, changes to Normal mode; the next character,
<C-X>, will use the the Normal mode definition of
<C-X>. The final character a returns to the
previous position in Insert mode.
We can make special use of the special characters
! and %
as described at the end of .
The author using usually edits an xml file, say myfile.xml .
This file is then processed using xsltproc in conjunction with an xsl
file, say myfile.xsl.
Often the xsl file is pretext-html.xsl or pretext-latex.xsl.
The usual command used by the author is xsltproc myfile.xsl myfile.xml.
With this in mind, we could define a map:
:nmap <C-X> !xsltproc myfile.xsl myfile.xml<CR>
so that the xml file could be processed with a single keystroke.
Even better:
:nmap <C-X> :w<cr>:!xsltproc myfile.xsl %<CR>
defines a map that first writes the file being edited to disk and then
processes it with xsltproc. This command is independent of the
particular file being edited.
A final somewhat complicated but very useful definition:
imap <C-A> <Esc>yiwi<<Esc>ea></<Esc>pa><Esc>F<i
which is a truly cryptic sequence of key strokes. Here is what they do:
Key strokesInterpretation<esc>Leave input modeyiwSave (yank) word above cursori<Insert <<esc>Go to to Normal modeeMove to end of worda></<esc>append ></ and return
to Normal modepPaste the saved worda><Esc>append > and leave Insert modeF<Move to preceding <iGo to Insert mode
The effect of this map: Entering abc<C-A> will change
abc to <abc>|</abc> where | is the
position of the cursor.
To list all of your defined maps, just use :map.
Saving abbreviations and maps
The abbreviations and maps defined during an editing session disappear when
the session is over. There are a number of ways to retain them over different
sessions.
Ephemeral use in one file:
For most versions of vi, after entering Command mode the history may be
accessed using the \(\uparrow\) key. Backing up to the previous
definition of an abbreviation or map and pressing Enter
will reinstate the definition. The line can also be edited if changes are desired
(very useful while developing new abbreviations and maps). This history
is preserved between editing sessions.
Repeated use in several files in one directory:
The abbreviations and maps can be saved in a text file, say mymaps.txt.
A line within the file might look like
:ab ups University of Puget Sound
Vi is then started with the -s mymaps.txt option
to initialize the definitions.
Repeated use for files in different directories:
Put the abbreviations and maps in the file .vimrc
(_vimrc for Windows) in your home directory.
Spell Checking Output
While browsing your HTML output, it is possible to have the web browser's native
spell checker highlight spelling errors. Create a bookmark with the following for
its URL (all at once on one line, there are three lines here just for clarity):
javascript:document.body.contentEditable=!document.body.isContentEditable;document.designMode=(document.designMode === 'on') ? 'off' : 'on';void 0
Now when viewing a page and you click this bookmarklet, JavaScript will change
browser settings so that the native spell checker highlights spelling errors. This
is done by making the text content of the page editable, which is normally what is
needed for the browser's spell checker to kick in. While this is active, you will
not be able to click most links and buttons. Click the bookmarklet again to toggle
things back to how they were.
Some browsers may have extensions that you can install for spell checking the
content of a page. For example, Chrome has
Webpage Spell-Check.
================================================
FILE: doc/guide/appendices/gfdl-pretext.xml
================================================
GNU Free Documentation License
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
This License is a kind of copyleft, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The Document, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as you. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
A Modified Version of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
A Secondary Section is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
The Invariant Sections are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
The Cover Texts are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
A Transparent copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not Transparent is called Opaque.
Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
The Title Page means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, Title Page means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
The publisher means any person or entity that distributes copies of the Document to the public.
A section Entitled XYZ means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as Acknowledgements, Dedications, Endorsements, or History.) To Preserve the Title of such a section when you modify the Document means that it remains a section Entitled XYZ according to this definition.
The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and you may publicly display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
State on the Title page the name of the publisher of the Modified Version, as the publisher.
Preserve all the copyright notices of the Document.
Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
Include an unaltered copy of this License.
Preserve the section Entitled History, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled History in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the History section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
For any section Entitled Acknowledgements or Dedications, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
Delete any section Entitled Endorsements. Such a section may not be included in the Modified Version.
Do not retitle any existing section to be Entitled Endorsements or to conflict in title with any Invariant Section.
Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
You may add a section Entitled Endorsements, provided it contains nothing but endorsements of your Modified Version by various parties for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled History in the various original documents, forming one section Entitled History; likewise combine any sections Entitled Acknowledgements, and any sections Entitled Dedications. You must delete all sections Entitled Endorsements.
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an aggregate if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
8. TRANSLATION
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
If a section in the Document is Entitled Acknowledgements, Dedications, or History, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.
10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See .
Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License or any later version applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.
11. RELICENSING
Massive Multiauthor Collaboration Site (or MMC Site) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A Massive Multiauthor Collaboration (or MMC) contained in the site means any set of copyrightable works thus published on the MMC site.
CC-BY-SA means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.
Incorporate means to publish or republish a Document, in whole or in part, as part of another Document.
An MMC is eligible for relicensing if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.
The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.
ADDENDUM: How to use this License for your documents
To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
Copyright (C) YEAR YOUR NAME.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the with Texts. line with this:
with the Invariant Sections being LIST THEIR TITLES, with the
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
Authoring a textbook without revision control is like driving without a seat belt. Sooner or later, you will wish you had used it. git is a popular program for revision control for software projects, and works quite well with , though not perfectly. Notes here are designed to help. For more on git itself, in the context of authoring a book, see Git for Authors, by Robert Beezer and David Farmer at pretextbook.org/gfa/html.
Word Wrap
git is designed for code, where a newline often expresses the end of a statement. In , it might make sense to author an entire (long) paragraph without any newlines. If so, a line-oriented file diff is not so useful. Fortunately, git has a flag, --word-diff, which does an excellent job of displaying small edits precisely.
Messages for Commits and Merges
When you make a commit or merge, you can supply a message at the command line with the -m argument. Otherwise you get thrown into an editor, with the default being vi, which can be hard to get out of if you have not used it before. Better, as Joe Fields suggests, is to tell git which editor you want to use. To set pico as the default editor, the one-time command-line incantation would be:git config --global core.editor "pico" You can also directly edit the configuration file at ~/.gitconfig. More suggestions can be found on this thread on StackOverflow at stackoverflow.com/questions/2596805.
================================================
FILE: doc/guide/appendices/glossary.xml
================================================
alt textalt text
A text description of an image or other visual content.
Its purpose is to describe content to readers who are unable to see the page.
AMSMathAMSMath
A package containing a wide variety of common math symbols.
AsymptoteAsymptote
A package for drawing graphs, diagrams or pictures which may be used with or .
attributeattribute
In XML, tags can have attributes, which provide more information about the element. For example,
in <section permid="dWf"> the tag is section,
the attribute is permid, and the value of that attribute is dWf.
BibTeXBibTeX
A package for typesetting bibliographies.
branchbranch (git)
In git, the files in a repository can exist in multiple versions which are independent
of each other, but are able to be merged. Each independent version is a branch
commitcommit (git)
In git, the act of declaring that changes to the files in a branch are now a permanent part of that branch.
copyleftcopyleft
An arrangement whereby software or artistic work may be used,
modified, and distributed freely on condition that anything derived from it is bound by the same condition.
Creative CommonsCreative CommonsCC
An organization which has created several open licenses for creative works.
The Creative Commons licenses are: CC BY, CC BY-SA, CC BY-ND, CC BY-NC, CC BY-NC-SA,
and CC BY-NC-ND. The strings
BY, SA, ND, and NC represent, respectively,
Attribution, Share Alike, No Derivatives, and Noncommercial.
D3.jsD3.js
A JavaScript library for animating data.
The name comes from Data Driven Documents.
DesmosDesmos
A graphing calculator that can be embedded in a Web page.
divisiondivision
In , a
part,
chapter,
section,
subsection,
subsubsection,
appendix, or
paragraphs of a document,
other similar components such as
readingquestions,
exercises, or
glossary, as well as various similar content markup outside the
main content.
DVIDVI
A file format intermediate between and PS or PDF.
Stands for Device Independent.
EPSEPS
Encapsulated Postscript: a form of Postscript designed to hold a fragment of a page, to be included
in a larger document.
escape characterescape (character)
Every markup language has escape characters which play a special role.
In XML there are two escape characters: & and <.
In there are 10 escape characters: # $ % & \ ^ _ { } and ~.
FontAwesomeFontAwesome
A package containing many popular icons.
GeoGebraGeoGebra
An interactive environment particularly suited for constructing demonstrations in Euclidean geometry.
GFDLGFDL
GNU Free Documentation License: a copyleft license for manuals, textbooks,
and other written materials.
GIFGIF
Graphics Interchange Format: a lossless bitmap image format.
gitgit
A version control system which is is used to track changes to computer files.
Git is particularly useful for large projects involving multiple authors.
GitHubGitHub
A commercial website which hosts repositories for software projects, with the assumption
that users use git to transfer material between GitHub and other systems.
GPLGPL
GNU General Public License: a copyleft license which gives users the right to
run, study, share and modify software.
HTMLHTML
Hypertext Markup Language: the markup language used to describe the content of Web pages.
JavaScriptJavaScript
A computer language in common use for interactivity in Web pages.
JPEGJPEGjpgJPEG
A method for compressing digital images, where the amount of compression can be adjusted,
allowing for a tradeoff between image size and image quality. Named for
the Joint Photographic Experts Group, which developed the standard. Files with JPEG
compression usually have the extension .jpg.
JupyterJupyter
An interactive computing environment designed to support a wide variety of computer languages.
Named after the languages Julia, Python and R.
A Jupyter notebook is a Web-based environment running Jupyter,
typically accessed through a browser.
JSXGraphJSXGraph
A JavaScript library for interactive geometry, function plotting, and data visualization.
knowlknowl
Similar to a hyperlink, except the referenced material appears inside
the current Web page.
Usually indicated by a dotted underline.
Pronounced knoll as in a knoll is a small hill.
A markup language used for books and papers with lots of mathematics, which is built on . uses as an intermediate format to produce PDF and print output.
main branchmain branch
In git, the name of the default branch.
MarkdownMarkdown
A plain text markup language which is easy to use, is limited in its capabilities
(compared to or , for example), but can convert to many other formats.
markup languagemarkup language
A computer language that uses tags to define the content of a document. XML, HTML, Markdown, and are examples of markup languages.
master branchmaster branch
In git, the former name of the default branch.
Currently main is the preferred.
MathJaxMathJax
A JavaScript package for converting math to presentation MathML or other visual formats.
MBXMBX
was once known as MathBook XML, commonly abbreviated as MBX. This abbreviation appears in many historical references.
MP3MP3
A format for storing audio content.
MP4MP4
A format for storing video content.
MyOpenMathMyOpenMath
A free and open online homework system.
OggOgg
A format for storing video content.
origin repositoryorigin repository
In git, the default name for the remote repository from which the local repository was cloned.
PDFPDF
Portable Document Format: a file format designed for printing documents, where the appearance of
the pages is identical on all devices.
PDFLaTeXPDFLaTeX
One of the available programs to convert to PDF.
pgfplotspgfplots
A package for drawing graphs of functions.
PNGPNG
Portable Network Graphics: a raster image format that supports lossless data compression.
PNG offers a similar functionality to GIF but is not subject to patent protection.
A page description language and file format designed for printing documents.
The markup language and document preparation system for creating the next generation of textbooks.
And the generation after that.
PSTricksPSTricks
A package for drawing diagrams and pictures.
pullpull (git)
In git, the process of transferring information from a remote repository to a local repository.
pull requestpull request
In git, a suggestion that the changes to the files in one branch be merged into another branch
(typically in another repository).
pushpush (git)
In git, the process of transferring information from a local repository to a remote repository.
PythonPython
A general-purpose programming language, noted for making it easy (compared to other programming
languages) for a programmer to read the code written by someone else.
Sage is written in Python.
QR codeQR code
Quick Response code: a type of two-dimensional bar code,
usually consisting of a grid of small black-and-white squares.
RR (programming language)
A programming language and software environment for statistics;
available in Sage.
SageSage
An open source computer algebra system for a wide range of symbolic and numerical mathematical computations.
Sage cellSagecell
A text box in which the user can run Sage commands, designed to be included
in a Web page.
Sage interactSageinteract
A interactive demonstration, with sliders and boxes to adjust parameters,
created as a single Python function in Sage.
siunitxsiunitx
A package for typesetting scientific units.
SVGSVG
Scalable Vector Graphics: an XML vector image format for two-dimensional graphics.
tagtag
In XML, tags are enclosed in angle brackets and are used to describe the contents of a document.
For example, if All about even was the title of a book about numbers that are multiples of 2,
then the XML source of that book might mark up the title using the title tag,
as <title>All about even</title>.
In XML, most tags occur in pairs which surround their content, with the closing tag beginning
with a slash/. However, some tags which do not contain content are are self-closing,
meaning that they end with a slash, such as <mdash/> and <pretext/>.
A typesetting language with high-quality automatic line- and page-breaking, specifically designed for mathematics.
three.jsthree.js
A JavaScript library for animating 3-dimensional graphics on a Web page.
TikZTikZ
A package for drawing diagrams and pictures.
unicodeunicode
The accepted standard for encoding text in any language.
upstream repositoryupstream repository (git)
In git, the usual name for the remote repository from which the local repository was originally forked.
URLURL
Uniform Resource Locator: the web address of a Web page (or other online content)
consisting of a domain name, optionally followed by strings separated by slashes (/)
which indicate specific content in the domain.
VimeoVimeo
A commercial website for hosting videos.
WebMWebM
A format for storing video content.
An open-source online homework system for math and sciences courses.
Wolfram CDFWolfram CDFCDF
Wolfram Computable Document Format: a system for creating interactive demonstrations
hosted in the Wolfram Cloud.
One of the available programs to convert to DVI or PDF, the executable is xelatex.
XMLXML
eXstensible Markup Language: the base syntax for the language.
Angle brackets enclose matching begin and end tags. Tags can nest hierarchically, and can have attributes.
HTML is another markup language that uses XML syntax.
XSLXSL
eXstensible Stylesheet Language: the language that describes how to convert XML to other formats.
's XSL stylesheets are used to convert XML to , HTML, ePub, and other formats.
xsltprocxsltproc
A command-line program which takes as input an XSL file and and XML file, using the contents of the XSL
file to transform the contents of the XML file. It is now preferred to use the CLI for transforming.
xypicxypic
A package for drawing simple commutative diagrams.
Journals supported by PreTeXtFull Journal NameCodeAMS journalsamsElsevier journalselsevierSpringer Nature journalsspringer-natureTaylor Francis journalstaylor-francisAnnals of Pure and Applied Logicann-pure-appl-logicBulletin (New Series) of the American Mathematical Societybull-amer-math-socConformal Geometry and Dynamicsconform-geom-dynElectronic Journal of Combinatoricselectron-j-combinExperimental Mathematicsexp-mathJournal of Algebraic Geometryj-algebraic-geomJournal of the American Mathematical Societyj-amer-math-socMathematics of Computationmath-compQuarterly of Applied Mathematicsquart-appl-mathProceedings of the American Mathematical Societyproc-amer-math-socRepresentation Theoryrepresent-theoryTheory of Probability and Mathematical Statisticstheory-probab-math-statistTransactions of the American Mathematical Societytrans-ams
================================================
FILE: doc/guide/appendices/journals.xml
================================================
List of Supported Journal Styles
This appendix contains the list of supported journals and their short name codes. To specify
one of these journals, use the publication file. See .
The code for a journal is taken from the list of abbreviations used by MathSciNet available at https://mathscinet.ams.org/msnhtml/serials.pdf.
================================================
FILE: doc/guide/appendices/latex-conversion.xml
================================================
Conversion from
As part of the UTMOST project, we offer a service to help convert existing textbooks from to . The service is free if you are planning to release your book with an open license. The conversion will only be 95 percent correct, but that means it will take you 20 times less effort than converting it yourself.
Before converting your book, familiarize yourself with to the point of being able to compile the sample article and sample book into HTML and PDF. Check that you can edit the source files and the resulting output files behave as expected. That way, you will be on familiar ground when you finish the last 5 percent of the conversion.
The actual conversion will be done by David Farmer from the American Institute of Mathematics. The first hurdle is to get your files to David. The preferred method is:
Put your entire source into a GitHub repository. Do not edit or restructure in any way, nor provide just a subset for testing, since this only complicates the process. You do not need to include the image files.
If the repository is private, make David a collaborator so he can access it. (GitHub username: davidfarmer.)
Email farmer@aimath.org with your request for conversion, including the URL of your repository and a brief description of your project.
When the first draft of the conversion is ready, you will receive a pull request from David via GitHub. Go ahead and accept it, and now your repository will have new files that are the source.
Spend some time to review the files carefully, looking for consistent mis-interpretations of your intent. Convert to HTML and PDF and see how they look. There may be some back-and-forth with you explaining what your was trying to do, and David improving the conversion to .
At some point it will be up to you to take ownership of the source and finish the conversion.
This service is for authors who wish to consider having as the official source of their textbook. It is not feasible to maintain source and expect to have all of the features of .
liblouis is an open-source library for low-level translation of phrases into braille, supporting many, many languages. We rely on Python bindings for this library to translate all of the literary text (non-math) to braille for a document, so this is an essential piece of the pipeline. Once installed, its use is transparent. This appendix outlines two alternative installation methods, current as of 2025-12-19, on Linux, Mac, and Windows Subsystem for Linux. Contributions of adjustments for other operating systems are welcome.
Installing as a system package
For many operating systems, one may install the liblouis Python bindings as a system package. For instance, on Debain/Ubuntu systems and Windows Subsystem for Linux, run
# sudo apt install python3-louis
and on Mac
# brew install liblouis
To test the bindings, the following should complete successfully in a Python interpreter
>>> import louis
If you are following best practices by using a Python virtual environment for your project, you will need to give the environment access to system packages since liblouis is now installed as a system package. You can do this when creating the virtual environment using
# python3 -m venv /path/to/venv --system-site-packages
If you have an existing virtual environment configured for your project, you may alternatively edit one line in the file pyvenv.cfg in the virtual environment's main directory:
include-system-site-packages = true
Installing from source
While the python3-louis system package appears to be updated frequently, if you need a more recent version of liblouis or simply feel a little more adventurous, you may wish to install liblouis directly from source following these instructions:
Download the liblouis-X.YY.0.tar.gz archive from the downloads page. Releases are tracked at the GitHub release page. The liblouisutdml package is not necessary.
tar -xvf liblouis-X.YY.0.tar.gz into a scratch directory like /tmp.
Switch to being root (sudo) and cd into the directory created by the extraction.
In your terminal run# ./configure --enable-ucs4# make# make installThe ucs4 flag enables 32-bit Unicode support, which is necessary for running tests later.
Read /tmp/liblouis-X.YY.0/python/README.md and perform two steps, still as root, from within the directory structure in /tmp: install the bindings into your Python distribution and run the Python tests. Instructions for setting up a Python virtual environment are also available in that file.
I do not do anything special to clean-up afterwards, and of course, my /tmp goes away on the next reboot. I also do not do anything special when installing the next version, I just follow the same procedure as a fresh install.
This appendix explains how to install necessary software on Apple's Mac.
Java
The jing and trang schema tools () require the Java Development Kit (JDK). These instructions come from Mitch Keller and Jane Butterfield on 2019-07-23. You may need to change some version numbers over time.
Install Java on MacOS
From get an open source JDK. In other words, not the proprietary version from Oracle.
Unzip the file you download until you have a directory called jdk-12.0.1.jdk. Put that directory somewhere useful. We will pretend that you put it in your home directory and that your user is called jane, which means that the directory is now at /Users/jane/jdk-12.0.1.jdk.
In a Terminal, runexport JAVA_HOME=/Users/jane/jdk-12.0.2.jdk/Contents/Homeadjusted appropriately. A good check is to get this same directory back from the commandecho $(/usr/libexec/java_home)
If you are doing this to install jing and trang, then, in the same Terminal window, cd into the jing-trang directory and run ./ant.
================================================
FILE: doc/guide/appendices/node-npm.xml
================================================
Node and npmNodenpm
To run a Javascript program outside a web browser requires a program that can interpret the Javascript language. A popular choice is node.js, whose executable is simply node. Programs designed for execution by node often build on other programs. These are all organized in packages, which can be managed by the Node Package Manager, known as npm for short. A basic purpose of npm is to manage versions and dependencies among packages.
So the first step is to install both node and npm on your system. Instructions for installing node and npm can be found at nodejs.org. These programs are meant to be cross-platform, so once you do these two operating-system-specific installations, we can proceed with generic instructions.
Now node should be on your path, and you can try which node to see if your operating system can locate it automatically. If not, then you will need to edit your personal copy of the pretext.cfg configuration file to have the node key provide a path to the executable (see ).
Some useful npm commands are listed below, in the form of examples. These commands depend on running in a package a folder containing a file named package.json. So before trying to run any of them, make sure to navigate to such a folder (e.g. script/mjsre or script/cssbuilder). In particular, note npm install which must be run before using a script.
When using node with git (see ), you generally should should check package.json and package-lock.json into source control, but ignore the entire node_modules folder.
Useful npm commandsnpm installInstall the packages listed in the package.json file to the folder node_modules. This is required one time before you use a package.npm listFull tree of installed packages (local)npm list mathjax-fullJust one packagenpm view speech-rule-engine versionAvailable version
uses the well-known syntax for mathematics. One fundamental reason for this choice is that the MathJax Javascript library is so capable at rendering inside of an HTML web page. Of course, it is not hard to render syntax inside of output! But what about output formats that are not processed by or Javascript, such as EPUB or braille? That is where running MathJax offline (locally) comes into play.
MathJax and Speech Rule EngineSpeech Rule Engine
MathJax is packaged as a node.js program. A component of MathJax is Speech Rule Engine (SRE), which converts to text that represents a spoken version of the mathematics, and to Nemeth braille, a braille code for expressing mathematics.
Any node.js script requires installing Node. See for instructions on doing so. Once Node is installed, you can use the following instructions to complete the installation of MathJax and the SRE.
Follow the directions here exactly. Do not free-style and think some modification will have a better or identical result. In a terminal, set your working directory withcd /path/to/pretext/script/mjsre
Install both packages at the same time with a single command:./update-sreIt is possible you will need to make this simple script executable. On Unix-style systems (Linux, Mac OS) this can be done with the chmod command. As this is a bash script, Windows users must use Window's Subsystem for Linux or examine the contents of the script to run the commands manually.
The update-sre script is supplied by . It will create a file and a directory:/path/to/pretext/script/mjsre/package-lock.json/path/to/pretext/script/mjsre/node_modulesNeither will be tracked by git. Since SRE changes faster than MathJax, this will replace MathJax's expectation for a version of SRE with a potentially newer version. So do not be alarmed if it appears MathJax is missing a dependency, that is intentional.
Now you have copies of MathJax and SRE that can be used by the pretext/pretext script to process mathematics offline into useful formats for conversions to EPUB, Kindle, and braille.
Mathematics Representations
Once MathJax is installed properly, the pretext/pretext script will be able to produce an EPUB version of your project. The script will first analyze your document, isolating all of the mathematics. These are then processed by MathJax and produce a file of representations of the mathematics, either as SVG images or as MathML versions. These representations are then inserted properly into the eventual output. This process is all automatic but explains why it is possible to produce two different types of EPUB. A good test of your installation is to use the pretext/pretext script to make an EPUB () or the script can be used to simply produce structured files of these alternate representations (see or paragraph just below).
With SRE also installed, text (speech) becomes a possible representation, as well as Nemeth braille. This makes possible an EPUB version that is all text, and there are online sites that will turn this EPUB into an audio book (of not very good quality). The braille representations are one component of the production of braille output. (, )
If you use the pretext/pretext script with a math component, and a format of svg or mathml, you will produce a file of these representations, structured by XML (naturally). These files are not much use by themselves, but may be of interest.
While the majority of the processing of your text is accomplished with XSL transforms, we rely on Python for numerous other tasks and conveniences. So, sooner or later, you will want, or need, to get Python working on your system. Part of our attraction to Python is that is very popular and so should run very similarly (identically?) on a variety of systems: Linux, Mac, and Windows. So the quicker we can get you to a platform-neutral setup, the better.
On Linux and Mac, you will likely have at least some version of Python already installed. On Windows, you may need to explicitly install it. (We hope to provide some more careful advice here for Windows users. For now, see and .)
Python 2 is no longer being developed and is officially dead. That does not mean you do not have it on your system. And for older systems, it may well be the default. requires at least Python 3.8.5 (current as of 2022-08-31). At a command-line, or in a terminal or console, or at a command-prompt, trypython --versionand if the result is unacceptable, then trypython3 --versionRemember which variant you needwe will just routinely use the generic python.
Python Virtual Environment
There is a very good chance your system has a version of Python
installed already since various other programs rely on it. You will be much happier if various Python programs you need for do not get entangled with your Python programs installed as system software. And if we need to help you debug some related problems we will ask you to work in a virtual environment anyway. We will follow a primer that has been recommended by Brad Miller, founder of Runestone Interactive. See that page for more details.
These are condensed instructions without much explanation.
Do not install the old-school virtualenv module.
Make a directory anywhere you like named virtual-python and change into it.
python3 -m venv ptx makes a virtual environment named ptx. (Requires Python 3.6 or later.)
Done. But how do you use it?
To activate your virtual environment, be sure you are in the virtual-python directory.
For Mac or Linux, with a bash shell gosource ptx/bin/activate(ptx) $
There are other scripts for other shells, take a look around.
For Windows, goptx/Scripts/activate.bat(ptx) >Notice that your prompt has changed to remind you that now anything you do with Python will be sandboxed in this virtual environment and not get mixed up with your system Python.
Now you can do any Python-related task using your virtual environment, and can change directories if desired.
When you are finished with your virtual environment, on Mac or Linux with a bash shell you simply go(ptx) $ deactivate$
For Windows, similarly(ptx) > deactivate>
We have one report, on a Mac, of deactivation dropping you into a different virtual environment named (base). A way to leave that virtual environment is to run(base) $ conda deactivateThis appears to be due to Anaconda somehow creating a default base environment initially. If you have this experience and find a simple solution, please report it. Some details at Stack Overflow 54429210 may be helpful.
PIP Install
PIP, in the open source tradition of recursive acronyms,
stands for PIP Installs Packages. This package manager helps you obtain software and keep it up-to-date. There are three packages that are indispensable for use with so you can practice doing installations now via your virtual environment.
If you have installed the -CLI already using pip, then all the programs below are already installed. Otherwise (for example, if you are using xsltproc) you will need to install the following manually.
To install all required additional python libraries, in your virtual environment, navigate to the pretext directory and run
(ptx) $ pip install
You can also install individual libraries, as in
(ptx) $ pip install lxml
With lxml, you have a collection of Python routines that interface with the same base libraries for XSL processing as the xsltproc executable. A second library is requests which moderates communications with online servers and is necessary to communicate with WeBWorK servers and with a YouTube server that provides thumbnail images for static versions of videos. The pdfCropMargins package provides a tool that will crop images during their production with the pretext script. The pyMuPDF library then converts the PDF that was cropped to SVG and PNG images. Finally, playwright uses a Chromium headless browser to take static screenshots of interactive elements of your project.
Note that right after you install playwright then you want to run playwright installone time only. This will install three web browsers (Chromium, Firefox, WebKit) and FFMPEG where they should only be available to this package.
PIP-installable Python Packages
PackagePurposelxml
XSL processing
requests
Communication with online servers
pdfCropMargins
Crop images during production
playwright
Automatic screenshots of interactive elements
pyMuPDF
Convert images to SVG and PNG
================================================
FILE: doc/guide/appendices/references.xml
================================================
The Chicago Manual of Style. Fifteenth Edition, The University of Chicago Press. 2003.
Knuth, Donald E., Literate Programming. The Computer Journal, 1983, .
Fred Leise, Kate Mertes, Nan Badgett, Indexing for Editors and Authors: A Practical Guide to Understanding Indexes, American Society of Indexers, 2008
================================================
FILE: doc/guide/appendices/schema-install.xml
================================================
Schema Tools
This appendix has technical information about tools that work with the RELAX-NG schema and our additional validation stylesheet. See for a more general overview.
Jing and Trang
These tools come from James Clark, an author of the RELAX-NG syntax. trang is a converter between different formats for schemas. An author should not ever need it. Though a developer might find it useful, and it is a by-product of the jing-trang install described below.
jing is our recommendation for RELAX-NG validation by authors, and works very well.
jing and trang are packaged (separately) for Debian/Ubuntu Linux, see . Reports of other similarly easy installations for other operating systems, to be included here, are especially welcome. We have employed the Debian/Ubuntu versions and also versions built from source, see .
jing on Ubuntu and CoCalc
CoCalc runs Ubuntu when you create a terminal window. The necessary Ubuntu Linux (Debian) package is also named jing and is installed as part of the CoCalc setup. So on Ubuntu, you need to install this package, and on CoCalc you will need to copy over the schema/pretext.rng version of the schema. If you have a CoCalc subscription, it would be even better if you made a clone of the PreTeXt repository, so it would be trivial to update and always have the latest version of the schema in your CoCalc account.
Now it is straightforward to execute jing:jing /path/to/pretext.rng aota.xml
Presumably something similar to the above will work for any Linux distribution that has packages for jing.
Note that if you have modularized your source files (see ), you only need to provide the top-level file as an argument to jing. In particular, the subsidiary files are certain to fail validation since they do not have a pretext root element.
Install jing from Source
If you cannot install this tool easily as part of your system, you can still follow the notes below to build from source. Many authors have done this successfully. Installation notes for jing and trang follow.
Clone
Clone the git repository at with the commandgit clone https://github.com/relaxng/jing-trangwhich assumes you have a command-line version of git installed. You will end up with a new jing-trang directory, which you will certainly want outside of your files and outside of your project files.
readme.md
Follow the instructions in the readme.md found at the top level of the jing-trang distribution, observing the following notes keyed to the four steps. These helpful notes come courtesy of the experiences of Jahrme Risner, Mitch Keller, Bruce Yoshiwara, Ken Levasseur, and Jessica Sklar on a variety of operating systems.
It is necessary to have a developer's version of java on your machine. Try which java to see if one is already available. Any output here might help in the next step. References here to the JDK is the Java Development Kit. There are specific directions for MacOS () and Windows ().
You will need to have the JAVA_HOME environment variable set correctly. You can try echo ${JAVA_HOME} in a Linux console to see if it produces anything sensible and/or consistent with Step 1. Ken Levasseur notes that on MacOS you can goecho $(/usr/libexec/java_home)and the output is what you set to the JAVA_HOME variable.
On Windows you may need to set Environmental Variables in the Windows System Properties GUI, both here and in Step 4.
Setting your working directory to the root directory of the jing-trang distribution should not cause any particular difficulties.
You may need to install the ANT tool, almost certainly on Windows. Again, on Windows you may need to set an ANT_HOME environment variable. On Linux, this may be all set for you already as a system tool.
The README suggests changing slashes on Windows. But you may already be using a shell that gives Unix-like behavior. So try both directions, if necessary. Also, the README suggests running ./ant test (or .\ant test). Doing this on Windows may yield a BUILD FAILED message, but jing may still work.
Results
Change into the build subdirectory. You may have more files here, but the two you really want are jing.jar and trang.jar. So if you have these, you are in good shape.
If you have modularized your source files () then you need one more library. Look in the top-level lib directory (a peer of build) for xercesImpl.jar. You have two and a half choices now.
Copy lib/xercesImpl.jar into build.
Or make a symbolic link to the third JAR archive. Be sure you are in build and goln -s ../lib/xercesImpl.jarwhich will just make your operating system think this third archive is in the build directory.
A third option would be to adjust/augment some classpath information below and send us a report of success. We have not tested this approach.
Now you are ready to use jing to validate a document. Note that the commands below require the XML version of the schema, which is the non-compact version. Also, these are the commands if you build jing-trang from source. If you install a system-supplied version, then consult the man pages, or similar, for syntax which is likely much easier and direct.
For a document contained in a single file, run (with suitable working directory and path prefixes).java -jar jing-trang/build/jing.jar pretext.rng my-book.xmlFor a document modularized across several files using the xinclude mechanism, issue as one single command line (again, with suitable working directory and path prefixes). This presumes you have moved or symlinked the lib/xercesImpl.jar file into the build directory. Do not leave any spaces around the equals-sign, we have split that line there for readability, so the -D option should not have any spaces in its argument.java -classpath jing-trang/build-Dorg.apache.xerces.xni.parser.XMLParserConfiguration= org.apache.xerces.parsers.XIncludeParserConfiguration-jar jing-trang/build/jing.jar pretext.rng my-book.xmlIt may go without saying that scripting this task will make you more likely to do it as often as is necessary and you will save yourself much time, and a little frustration, in the process.
Jahrme Risner provides the following setup he uses to make it very convenient to regularly validate his sources. This is a shell script, which a Linux user might add to their ~/.bashrc file. Note that we have again split the line with the -D option at the equals-sign, without a line-continuation character. Do not do that in your version.ptx-check() { java\ -classpath ~/GitHub/jing-trang/build\ -Dorg.apache.xerces.xni.parser.XMLParserConfiguration= org.apache.xerces.parsers.XIncludeParserConfiguration\ -jar ~/GitHub/jing-trang/build/jing.jar\ ~/GitHub/pretext/Schema/pretext.rng "$1"}Then he can simply go~ $ ptx-check my-book.xmlat anytime. Note that you might have to provide or adjust some of the paths above for your situation. And there are other ways to script tasks like this.
Validation Plus
The second step of validation is our validation-plus stylesheet. Fortunately, there is nothing to install. Use it just like the conversions you have already been doing. In the distribution, in the schema directory you will find pretext-validation-plus.xsl. This is a stylesheet, unique to , which will carefully analyze your source to find any exceptions that the RELAX-NG schema was not designed to catch. You use the stylesheet like any other,xsltproc ~/pretext/schema/pretext-validation-plus.xsl ~/books/aota/animals.xmlwith suitably adjusted paths, and be sure to provide the -xinclude switch if your source is modularized across multiple files (). No news is good news, but each exception found should provide enough explanation for you to locate, and correct, the problem. These messages are under 's control, so please report any that are not helpful enough. That's iteasy.
================================================
FILE: doc/guide/appendices/welcome.xml
================================================
Welcome to the Community
Thank-you for your interest in , and welcome! This appendix is meant to answer some questions you may have about how this open-source project is organized, how you can get help, and how you can contribute back.
is not and it is not Word. Some features of those languages are intentionally missing, but more importantly, the mind-set expected of authors is completely different. One of the most important distinctions is that treats the author, the publisher, and the reader (which might be an instructor) as separate entitieseven when those are all the same person.
Newcomers to should focus on the author role. Make sure the structure of your book is marked-up properly. If something looks wrong in your output, assume it is a problem with the source markup. If the source is correct but the output does not look as you wish, leave that as a problem for the publisher, to be addressed after you have finished writing the content.
Help and Support
There is a documentation area at the project website. Presumably, that is where you found this Guide. This is what another software project might call the User's Manual. So start here. Re-read on the project philosophy and the principles in at regular intervals. is meant to inform you of the features of , without getting into all the details. It will frequently refer you to for all those details.
PreTeXt is fundamentally a specification of a set of elements and attributes, a topic discussed in . This chapter also discusses validation. Once comfortable, but before authoring lots of material, take the time to get validation working, and use it regularly. Do not save it for last.
There are many examples available in an area on the website. Compare source to the resulting output (in both directions). The sample article is not always pretty, since it is used for testing, but it does try to have one of everything.
When the above is not sufficient, the pretext-support Google Group is the right place to ask questions. If you are trying to determine which elements to use to accomplish something, provide some context. Do not ask, How do I print a line of text upside-down? Instead say, I am writing a monograph on mammalian vision, and I'd like the reader to use a mirror to view a line of text written upside down. What is the best way to do that? (I think the answer would be: make an image and include that, rather than trying to get reflected text.) Sometimes a quick search of the Goggle Group may yield insights. Overall, do your best not to be a Help Vampire.
Weekly Drop-Ins
Since May2020 there has been a standing weekly online gathering of authors and developers on Friday afternoons. And now there is a companion session on Tuesday afternoons, and a Getting Started session on Mondays. A weekly schedule of these, and other activities, is posted to the pretext-announce Google Group, so look there for particulars. Once in a while there are scheduled discussions on development topics or seminars on topics of interest to authors and developers (such as building an index, see ). But mostly there is no agenda and no schedule. Come late, leave early, drop-in, drop-out. If you are present, then you are implicitly available to help someone with questions, even if you are working on something yourself. The rest of us may lurk and/or join in. We can use break-out rooms if a subgroup wants to run a discussion, work on a targeted project, or help somebody get started one-on-one. The model is the hotel lobby after dinner at a workshop, but you provide your own contraband.
So this is a great place to discuss a support question (likely with the person who wrote the code!) or a place to get involved with development.
Feature Requests and Reporting Problems
We use the issue tracker at the GitHub site as an organized to-do list. You do not need to know anything about git to use this forum. Just make a new issue, or make a comment on an existing issue. Frequently, a discussion on the groups will culminate with the creation of a new issue. It is nice to have a link from the discussion to the issue, and vice-versa.
If you are asked to create an issue in response to a discussion you initiated, please consider doing so. It will save the other volunteers just a bit of time to work on other parts of . And you will also get email-for-life as the issue is discussed and eventually closed. It is a very helpful contribution.
As you gain more experience, you will identify bugs, obsolete instructions, typos, Search the issues to see if there is something relevant you can add. For example, your particular version of a bug might provide the key insight into identifying the cause. When you are certain something is wrong, and there is no need to discuss it in the groups, feel free to go straight to making an issue. For something like a list of typos, make a single issue and just keep editing your initial post.
If you have some structural problem, see if you can reproduce it by adding into the minimal example, and post that entire source file. If the rendering in HTML is a bit off or you think it exhibits a bug, be sure to post a link to a live example, not just a verbal description and definitely not a screenshot. If you need an easy, quick, free, temporary location to host one file or your whole project as HTML, try Netlify Drop.
If you are posting code snippets, and copying out of an editor using Dark Mode, try ctrl-shift-V when you paste and perhaps the Dark Mode color scheme will go awaymaking it easier for some to read.
Contributing
As a project that is licensed openly, we welcome contributions. And this does not necessarily mean you need to learn our primary language, XSL. For ideas, find the issues on GitHub that have the label contributor project. As one example, it would be very helpful if a member of the community would create and maintain a Wikipedia page. That is a skill that is very distinct from the other skills used to create and maintain other parts of the project. See Issue #207.
The documentation is authored in , so you know how to create additions, clean-up obsolete parts, and fix typos. If you know git and GitHub, then a pull request (on a new branch!) is a very economical way for us to manage contributions. Even if you do not know GitHub, we can easily accept files written in that contain changes to the documentation. For example, files supporting localization to new languages (see ) are ideal for simply submitting an entire file. (Send files to us by email, or post as attachments on one of the Google groups.)
Conversions are written in XSL, a declarative language. It has a steep learning curve, but is very powerful for an application like this. Start small, and we do not mind helping you along with suggestions and critiques. Do not, do not, begin an ambitious task unless your skills are up to it.
When you have gained significant experience as an author, and have a good feel for the questions asked by other authors due to your material participation in the pretext-support group, then it may be time to apply to be part of the pretext-dev group. This where design discussions are held and nasty bugs are squashed collectively.
Personal Email
How do we put this politely? Personal email to the core developers should be your last resort. We are not unfriendlyjust the opposite. We would love to hear from you, but in the groups. Here is the rationale:
You may get a better answer from somebody who is not the most active developer, but understands your particular need better than anybody else. You will never get that answer with a personal email.
Developers teach university courses, travel to professional meetings, sleep at night, take naps, turn off their email for big coding pushes, and sometimes travel in the wilderness and are offline for days at a time. You are likely to get quick responses from the core developers through the groups, but if they are not available a personal email may get a slower response. (I am inclined to answer posts on the groups before I work through personal email.)
Many contributors prefer to provide help in a public forum because their efforts are then more widely recognized.
Your question and its answer are searchable by others. (The groups and issues are public.) A personal email is no help to anybody else.
We prefer to make as many decisions as possible openly. So a discussion on a public group or site is there for all to see, now and later.
We depend on granting agencies for much of our funding. Membership in groups, forks on GitHub, activity in the groups, number of issues, and number of contributors to the repository, are all crude measures of the health of the project. Personal emails add nothing to those measures.
Everybody who has committed their big writing project to likes to see an active, responsive, friendly community supporting its use and growth. Just by asking a necessary question, you can add to that community.
We understand that nobody likes to pop their head up and ask a stupid question. But it is counterproductive to do personally what we can do better collectively. The groups are friendly forums (we will enforce that if we ever have to) and everybody there made an initial post once. And the group members largely enjoy sharing their advice, experience, and knowledge. So, please make a contribution simply by saving the personal emails for that which is really personal. Thanks, and we'll look forward to chatting with you on the groups!
================================================
FILE: doc/guide/appendices/windows-cli.xml
================================================
Installing the -CLI on WindowsSean Fitzpatrick
The -CLI is the simplest way for authors to get started using ,
and it is the recommended method on all systems, including Windows.
Details on using the CLI can be found starting in .
Setting up the -CLI on Windows is considerably simpler than the method presented in ,
but there is still some effort required.
In particular, you will have to install several pieces of software to get your system ready for using .
If you prefer a video walkthrough, one is provided below.
The video is approximately 40 minutes in length, but it goes through the entire installation process,
from adding the necessary software, to setting up GitHub.
Software prerequisites
We begin with the programs you will want to have installed prior to using the -CLI.
All software can be downloaded free of charge, and is relatively easy to install.
VSCode
VSCode is short for Visual Studio Code.
This is a text editor developed by Microsoft; we recommend it not because it plays well with Windows (although it does),
but because of the availability of the pretext-tools add-on, which will let you run the -CLI without leaving the editor.
To install, the editor, first download the installer from the VSCode website.
Screenshot of the VSCode website, showing where to click to download the installer
When running the installer, be sure that the Add to PATH option is selected:
Screenshot of the VSCode installer program, showing where to click to ensure the program is added to the Windows system environment variables
You should now have VSCode installed on your system.
Python
One difficulty with using on Windows is the fact that Python is not core software, and there are many different ways to install install.
The recommended method for installing Python is to get it directly from .
Other Python installations, such as Anaconda, or even Miniconda, include a lot of extras that we don't need.
To install Python, simply download the installer from the Python website.
Screenshot of the python.org webpage, showing where to access the installer download
When you run the installer, be sure to check off the box to add Python to the Windows PATH during installation.
This will ensure that Python commands can be run from the command line without needing to provide the path to the Python program.
Screenshot of the Python installer program, showing the box that needs to be checked to ensure it is added to the system environment variables
Git for Windows
The next piece of software we need to install is Git for Windows.
This will provide tools for allowing us to interact with textbook source on GitHub.
More importantly, it provides us with the Git Bash terminal,
which is what we will be running all of the commands for .
You can get Git for Windows at .
The installation process for Git for Windows can seem quite complicated,
as there are a lot of options, and many of them are quite technical.
You can safely choose the defaults throughout, unless there is a particular setting you're familiar with that you wish to change.
The only thing you might want to do is change the default editor.
Since we have already installed VSCode, we can choose to use that instead of an editor like Emacs or Nano that you may be unfamiliar with.
Screenshot of the Git for Windows installation program, showing how to select VSCode as the default text editor
Other software
A number of additional programs may be needed to assist in processing your book, depending on what elements your book contains.
You will almost certainly need to be able to process , either to produce the PDF version of your book,
or to process images for the HTML version of your book.
There are two ways to install on Windows: MikTeX,
or TeXLive.
Although TeXLive is the default distribution for Linux and MacOS platforms,
most Windows users find MikTeX easier to use, since it comes with package management software to assist with automatically installing needed packages.
One thing to keep in mind: with MikTeX, you must run an initial update from the MikTeX package manager before it will work correctly.
Screenshot of the Windows system property control panel, showing how to access the Environment Variables
Screenshot of the Environment Variables control panel, showing how to access and edit the Path
Screenshot of the interface for editing the Windows Path to add a new program
Sage
If your book includes Sage components, such as sageplot (but not Sage Cells),
you will need to install Sage to process them.
Sage is available at .
Click on the download button, and follow the instructions in the installer.
GitHub Desktop
If you find it difficult to manage git from the command line,
GitHub provides a graphical user interface for the Windows environment,
called GitHub Desktop.
This provides a point-and-click interface for synchronizing your local changes with GitHub.
Installing the CLI
You now have all the necessary software installed.
Next, we need to set up Git Bash, and install the -CLI.
Setting up Git Bash
One change that you will want to make right away is setting the default working directory for Git Bash.
In your home folder (C:\Users\Sean in our example), look for a file called .bashrc.
If it doesn't already exist, open Git Bash, navigate to this folder, and type touch .bashrc to create the file.
Open the file (it is a plain text file), and add the line cd C:/Users/Sean,
where you should replace the directory with the one you want to use.
Next, we need to set up SSH authentication, for more efficient communication with GitHub.
We assume that you already have a GitHub account; it not, you should create one at .
There are existing instructions available online at
docs.github.com.
To begin with, please follow the instructions provided there for generating an SSH key using Git Bash, and adding it to GitHub.
There is one aspect of the instructions that is not quite correct.
When you get to the step for adding the ssh key to the ssh agent,
the instructions will tell you to add your SSH key to the SSH agent using a relative path, with a line such as ssh-add ~/.ssh/id_ed25519.
You must use a full path here. Instead, type ssh-add /c/Users/Sean/.ssh/id_ed25519,
where as usual you should replace Users/Sean with your own directory.
There is one more step you will want to complete.
The ssh-agent program will not start automatically when you open Git Bash.
To change this, we follow the instructions provided at .
In the file /c/Users/Sean/.ssh, open the config file (or create it using the touch command in Git Bash if it doesn't already exist),
and add the following lines:
Host github.com Hostname github.com IdentityFile ~/.ssh/id_rsa
Note that the second and third lines are indented by one space.
Note also that this assumes an RSA key, but you may have chosen a different encryption method.
You may, for example, want to replace id_rsa with id_ed25519.
In the file /c/Users/Sean/.bash_profile, (again, create it if it does not already exist) add the following lines:
test -f ~/.profile && . ~/.profiletest -f ~/.bashrc && . ~/.bashrc
In the file /c/Users/Sean/.ssh, we need to add the following script, which will automatically start the ssh-agent.
# Start SSH Agent
#----------------------------
SSH_ENV="$HOME/.ssh/environment"
function run_ssh_env {
. "${SSH_ENV}" > /dev/null
}
function start_ssh_agent {
echo "Initializing new SSH agent..."
ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo "succeeded"
chmod 600 "${SSH_ENV}"
run_ssh_env;
ssh-add ~/.ssh/id_rsa;
}
if [ -f "${SSH_ENV}" ]; then
run_ssh_env;
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_ssh_agent;
}
else
start_ssh_agent;
fi
You should now be set up to work with GitHub on your Windows machine.
When you clone a GitHub repository containing a book, be sure to choose the SSH option rather than HTML.
Installing the CLI
Finally, we are ready to install the -CLI. This is perhaps the easiest step of the whole process.
From the Git Bash terminal, first type which python to confirm that Python has been successfully added to the PATH.
You should see the path to your Python program if things are working correctly.
If you don't, you may need to reinstall Python, or you can manually add it.
To install the CLI, simply type pip install pretext.
Congratulations! You are now ready to start using on your Windows machine.
If you did not do so previously, there is one additional step you may want to take.
In VSCode, go to File, then Preferences, then Extensions in the menu, or type Ctrl-Shift-X.
In the search bar that comes up, type pretext-tools, and install the package that comes up.
This will equip VSCode with syntax highlighting for .ptx files, as well as some automatic tag completion.
(For example, typing thm and then the Tab key will automatically insert the XML markup for a theorem.)
Additionally, from the command palette, (View, then Command Palette in the menu, or Ctrl-Shift-P)
if you type pretext, you will see some built-in options for building your book using the CLI.
================================================
FILE: doc/guide/appendices/windows-wsl.xml
================================================
Windows Subsystem for Linux
Windows Subsystem for Linux is no longer the recommended method for Windows users.
Instead, consider using either the web-based GitHub solution described in
or the handy -CLI as discussed in .
developers who use
Windows may be interested in the information in this appendix but do note that some information may be out of date.
The Windows Subsystem for Linux (WSL)
may be installed on computers running Windows 10.
Several distributions of Linux are available.
We will use Ubuntu as an example; working with other distributions is quite similar.
The latest news and announcements about WSL may be found at
.
Installing WSL
If you have Windows 10 with OS Build greater than 16215 (August 2016),
then installing WSL is not difficult. Just follow the
(reasonably straightforward) instructions given by Microsoft at the address
.
Upon completion of the installation, you should
be able to use the bash command from the PowerShell window,
have your own WSL userid (distinct from Windows),
have your own WSL password (distinct from Windows).
Installing software
The default configuration of WSL does not have the software needed
for creating documents with .
The program xsltproc is used to create your readable documents.
It is installed with the command sudo apt-get install xsltproc.
You are now ready to set up .
Putting on your computer
Here are the steps necessary to get the software onto
your computer:
Make a new directory mkdir pretext
Make your own clone of the repository
git clone https://github.com/PreTeXtBook/pretext.git
Move to the new directory cd pretext
Initialize the new directory with git pull
This last command synchronizes your files with those in the official repository.
You should run it frequently to keep your files up to date.
The simplest example
Here is a brief description of the use of WSL to create
readable files.
You, as the author, create the xml file.
The system will contain an appropriate xsl file that translates
your xml file to something readable.
Several editors come with WSL by default including
nano, pico, vi, and vim.
In addition, editing is possible using notebook.exe.
Here are the steps to follow:
Type the command cd to align yourself in your home directory.
Use one of the editors to create a file called hw.xml
(you could use the command nano hw.xml), and add
the following text:
<?xml version="1.0" encoding="UTF-8" ?>
<pretext>
<article xml:id="hw">
<p>Hello, World!</p>
</article>
</pretext>
Run the command
xsltproc pretext/xsl/pretext-html.xsl hw.xml
Upon completion, your should have a file called hw.html.
You now want to view the hw.html file in a browser,
This is done with the command explorer.exe hw.html.
The edit-xsltproc-view cycle just given may seem daunting at first blush.
Some things that can help:
Pressing the up arrow when at the command line displays the previously
executed commands. Hitting the enter key while such a command is displayed
executes it. This saves a lot of retyping.
It is possible to define aliases to shorten commands. Your local Linux guru can
show how this is done.
It is possible to define scripts to shorten multiple commands.
Your local Linux guru can show how this is done.
================================================
FILE: doc/guide/appendices/windows.xml
================================================
Windows Installation NotesDave Rosoff
The recommended method for setting up on Windows now uses the -CLI. For instructions on setting up the CLI, see . This appendix explains how to install the older toolchain using xsltproc, and is intended primarily for developers. It has been tested on Windows 7, 8, and 10. We assume that none of the listed tools or equivalents have been previously installed. That may complicate matters. This is especially true if you use Cygwin, or if you have already installed Python on your machine. compatibility with existing Python installations is addressed elsewhere in this document ().
If you have Windows 10, be sure to read about WSL in , which could be a whole lot easier to setup and maintain.
Setup
In this section, we do some initial setup, establish notation, and issue warnings. Some of the steps in this process are dangerous. Typos could lead to an unstable system, or possibly even to unrecoverable system errors. Double-check everything.
Notation
Strings enclosed in <angle brackets> are variables whose values you should substitute in typed expressions. <username>, for example, should be replaced with your Windows username (, mine is drosoff). Throughout this installation process it is very important to pay attention to the direction of slashes / and backslashes \.
Initial Windows setup
It is easier to see what is happening if your Windows file browser is not set up to hide file extensions from you. Disable the hide file extensions behavior before proceeding. In Windows 7/8, this can be done through the Control Panel. In Windows 10, there is a checkbox somewhere in the ribbon for it.
Initial Windows Setup
On Windows 7 or 8:
Open the Start Menu and type Control Panel. Select the Control Panel entry from the popup list.
Type Folder Options into the search box in the Control Panel window. Select Folder Options when it appears.
Select the View tab.
Uncheck the box for Hide extensions for known file types.
Click OK until there are no more OKs to click.
On Windows 10:
Open the Start Menu (icon shaped like a Window at the bottom left, typically). Select the File Explorer option, right above Settings, from the popup list.
Click on this, and then select View from the ribbon lists of options along the top.
After clicking this, on the right there should be a check box for File Name Extensions. Click this box; that should do it.
A word on path names
An appallingly large fraction of the difficulties of using GNU/Linux-based utilities with Windows come from the differences in formatting path names. Windows path names begin with a drive letter (usually C) and a colon. Like all path names, they describe a path in a rooted tree. The root directory (folder) in Windows is called \, a backslash. Note the direction carefully. Children of the root node are either subdirectories or files in the root directory (leaves). The path to my downloads folder is:
C:\Users\drosoff\Downloads\
The trailing backslash is often unnecessary, but it is an easy way to see immediately whether a path name refers to a file or to a directory. Windows path names are not case-sensitive.
Linux/Mac OS X path names are quite similar, but lack drive letters, start with an explicit reference to the root, use forward slashes, and are case-sensitive (more or less so, in Mac's case). A path to a typical Linux user's download folder might be
/home/typical.username/Downloads
Again, Linux pathnames are case-sensitive and Mac OS X pathnames are typically case-preserving. The Git Bash shell for Windows is an emulation of a Linux environment, and the utilities within it expect path names that follow Linux conventions. So we conform to this expectation as follows.
Remove the colon, but keep the drive letter.
All backslashes \ become slashes /.
Add an initial slash preceding the drive letter.
The path name to my Windows download folder becomes
/c/users/drosoff/Downloads
Even though Git Bash is pretending to be a Linux shell, path names are still the underlying Windows path names, and therefore are not case sensitive. You can verify this using tab-completion.
Path names that begin with the drive letter (Windows) or the root / (Linux/Mac OS X) are called absolute path names. Their referents do not depend on the location from which the path name is invoked. Relative path names, on the other hand, begin in the so-called current working directory. A relative pathname might look something like this:
../../examples/sample-article/sample-article.xml
The symbol .. is a shortcut for the parent of the current directory. Thus, the relative path name above means from where we are, ascend two levels, then descend into the examples and sample-article subdirectories, and find the file sample-article.xml.
Path names that contain spaces are evil, and should be avoided in many cases. Unfortunately, all Windows default program installation locations contain at least one space (directory name Program Files). This does not appear to cause problems, except when installing ImageMagick (). To be extra careful, you could always choose an installation location that is free of space characters.
Do I have 64-bit Windows?
Find out on Windows 7:
Open the start menu and type Computer. Right-click the Computer item in the popup menu.
Select Properties from the drop-down menu.
Read in the right-hand side of the pane to find the System heading.
From the System type entry, read whether you have a 32- or a 64-bit OS.
Now you are ready to begin installing the various pieces of the puzzle. The first one, xsltproc (), is the most annoying. You might want to go get a snack or another cup of coffee.
Installing xsltprocxsltproc binaries
This is the most annoying part of the installation. Obtain four zip archives from Igor Zlatkovic's FTP site that hosts the most recent Libxml binaries for Windows. At the time of this writing, the 64-bit binaries were considered experimental. I have had no trouble using the 32-bit binaries on my 64-bit Windows 7 system, so I suggest that all users download the most recent 32-bit version of the following libraries:
xsltproc Zip Files
iconv (filename something like iconv-1.9.2.win32.zip)
libxml2 (filename something like libxml2-2.7.8.win32.zip)
libxslt (filename something like libxslt-1.1.26.win32.zip)
zlib (filename something like zlib-1.2.5.win32.zip)
We only need a handful of files from these archives. So the simplest thing is to leave them in your Downloads folder and grab what we need. Create a new folder C:\xsltproc (it can be anywhere, as long as it's a new location). We'll call this location <xsltproc> in case you named your folder something different.
Extract the following files from the four zip archives you downloaded above into <xsltproc>:
xsltproc Extracted Zip Files
From iconv-*.win32.zip:
iconv-*.win32\bin\iconv.dll
From libxml2-*.win32.zip:
libxml2-*.win32\bin\libxml2.dll
libxml2-*.win32\bin\xmllint.exe
From libxslt-*.win32.zip:
libxslt-*.win32\bin\libexslt.dll
libxslt-*.win32\bin\libxslt.dll
libxslt-*.win32\bin\xsltproc.exe
From zlib-*.win32.zip:
zlib-*.win32\bin\zlib1.dll
Change PATH environment variable
Note: if you prefer not to meddle with this, it can be avoided. Now, we need to make sure your system can find these files when we need them.
Path Environment Variable for xsltproc
Open the Start menu and start typing Edit the system environment variables. Select this option when it becomes visible.
Click the Environment Variables button near the bottom of the dialog.
In the bottom part of the dialog labeled System environment variables, look for a variable named PATH. You may need to scroll.
If you do not find one, create it using the New... button. Make sure to use all capital letters. (This really shouldn't happen. Make sure you are editing the system environment variables, not the user environment variables.)
If you do find the PATH variable, select it and click the Edit... button.
Regardless of which of steps 1 and 2 you followed, now you should see a dialog with two text fields. Your variable name should be PATH.
If you created this variable, populate the second field with the full path name of <xsltproc>, the location where you put the seven files from Igor's zip archives. For me this looks like C:\xsltproc.
If you are editing the PATH variable, place the cursor in the existing value and press the End key, so that the cursor moves to the back of the line. The PATH string is a ;-delimited list of full path names, so append the string <xsltproc>; (note the semicolon) to the existing value. If you named <xsltproc> as we suggested above, then the last part of your PATH variable is now C:\xsltproc;.
Click OK to save changes.
Congratulations, you have successfully installed xsltproc.
Note that you have installed the xmllint utility as part of this procedure. This utility will allow some text editors to lint your files, that is, to automatically detect and highlight errors, and perhaps even to explain them.
Installing git
In this section we install the git version control system and some tools to interact with it, including a fairly full-featured emulation of the bash command line shell. I strongly recommend you use the Git Bash shell or another bash emulation, so that you can use Linux commands referenced elsewhere.
Steps to install gitgit Installation
Visit the official git (download starts automatically) and obtain the latest binary for your system.
Find the installer in your Download location and run it.
Choose whatever location you like for the git installation folder. I recommend you use the default.
At the Adjusting your PATH environment dialog, select either of the first two items. I recommend the second, Add git executable to Windows PATH. This will allow you to use git from within other Windows programs, such as Sublime Text or other text editors, which can be extremely convenient. If you are apprehensive about adding git to the Windows PATH, select the first option. I do not recommend the third option.
Accept the default options for all the remaining prompts.
Changing the path with .bashrc
In , we promised that you could avoid messing with the Windows environment variables. If you install something else later that wants to use xsltproc, then this might not be the best idea. But if you are only going to use it from within Git Bash, then this will work fine.
From the Git Bash command prompt, enter this line of text and hit Enter. Do not make any typos. You should substitute your value of <xsltproc> where indicated, but make sure to conform to the conventions at the end of regarding Windows path names in Git Bash. (I warned you this was going to be annoying.)echo "export PATH=<xsltproc>:$PATH" >> ~/.bashrcYou may get a message from Git Bash the next time you run it about .bash_profile, which you may safely ignore.
Congratulations, you have successfully installed git.
Installing Anaconda
Anaconda is a well-regulated development environment for Python under Windows, and I recommend it for users who do not already have Python installed. The essential pretext script has to support both Python 2 and Python 3. Therefore we make no recommendation about which Python version to choose.
If you already have a working Python installation, skip to .
You have some choice with your Anaconda installation. It actually supports the installation of several independent Pythons side-by-side (since both 2.7 and 3.x are in active use, this is more reasonable than it seems). If you do not need Python for anything else or are simply a minimalist, Miniconda is also an option. Miniconda installs no packages, but these can be installed via the conda utility at the command line later.
Download either Miniconda, Python 2.7, or Python 3.5 from the .
Run the installer and accept all the default suggestions.
Congratulations, you have successfully installed Python.
If you do not care about images, you can stop here. Much of the functionality is already present. However, to use the pretext/pretext script to create SVG images from sources like PDF/PNG images, Sage, Asymptote, or TikZ, you need to install ImageMagick using the directions in .
Installing ImageMagick
Visit the and grab a binary. If you have a 64-bit Windows installation (), use the recommended version. If you have a 32-bit installation, find the version whose filename is obtained from that of the recommended version by substituting x86 for x64. For example, if the recommended version's filename is:
ImageMagick-7.0.1-6-Q16-x64-dll.exe
then a good choice for a 32-bit Windows would be
ImageMagick-7.0.1-6-Q16-x86-dll.exe
imagemagick Installation
Run the installer from your download location.
Accept the license agreement.
Choose a default installation location that has no spaces in its folder name. The default choice Program Files causes problems because of path name issues. I chosec:\ImageMagick-7.0.1-Q16\It matters because the ImageMagick utility convert is used by the pretext script to convert your images into different formats. The pretext script will have a lot of trouble with path names that contain spaces.
When confronted with Select additional tasks, make sure that the boxes for Add application directory to your system path and Install legacy utilities are checked.
If you like, carry out the procedure to verify your installation.
Congratulations, you have successfully installed ImageMagick.
Installing jing
The jing utility for schema validation can be installed in Windows.
To install, first make sure Java is installed on your machine.
You can either install the official Oracle JDK from
or, if you prefer an open license, .
Download the .zip file, and extract to a folder such as C:\Java.
(Avoid installing to the Program Files folder due to the space in the folder name.)
Next, follow the installation instructions in ,
ignoring the BUILD FAILED message. You will almost certainly want
to copy the file xercesImpl.jar from the lib. folder into build.
If you are using Git Bash for processing, you may want to set up a command shortcut
to avoid the rather lengthy command given in , especially
if you have modularized source. Before proceeding, make sure that you have configured
your Windows environment variables to include a path to Java.
For example, if you installed JDK 12.0.1 in C:\Java you will want the path
C:\Java\jdk-12.0.1\bin.
As suggested in , you can set up a command in .bashrc.
Git Bash on Windows requires a .bash-profile to load .bashrc.
Open Git Bash and change to your user directory: cd /c/Users/your.name.
Windows does not like file names beginning with a period, so if they do not already
exist, you'll need to create them in Git Bash. Do touch .bash-profile and
touch .bashrc to create the files. Use your favorite text editor to add the line
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
to .bash-profile
You can then create the ptx-check command as in .
Absolute paths are recommended. Using the Git Bash syntax for Windows paths,
your definition in .bashrc will look something like the following:
ptx-check() { java\ -classpath /c/jing-trang/build\ -Dorg.apache.xerces.xni.parser.XMLParserConfiguration= org.apache.xerces.parsers.XIncludeParserConfiguration\ -jar /c/jing-trang/build/jing.jar\ /c/PreTeXt/pretext/schema/pretext.rng "$1"}
The above assumes that jing-trang is installed at C:\jing-trang
and that PreTeXt has been cloned at C:\PreTeXt\pretext.
Adjust your paths as needed. You can now run validation from Git Bash using
ptx-check ~/path/to/project/index.ptx > jing_report.txt
and the jing_report.txt file will be created in your working directory.
What's Missing
Development of a Windows-compatible pretext script () is mostly complete. If you need help with pretext, contact Dave Rosoff. There are still a few use cases that haven't been tested, mostly those to do with Asymptote.
A Windows installer for Sage is available from several mirrors at
.
The installer provides Sage Math, the Sage Math Shell,
and the Sage Math Notebook (Jupyter).
If you find any problems or bugs, please let us know at the Support group in Google Groups, or email drosoff AT collegeofidaho DOT edu.
In this chapter we gather advice on authoring. In some cases it is discipline-specific.
Writing Your Student-Friendly Math TextbookKathy Yoshiwara
So you are writing a math textbook. You love your subject enough to put in the hours, and you probably have some ideas on how the standard presentation can be improved. You care about good pedagogy and want to engage your students.
You know that writing a text for undergraduates requires a different style from writing a research paper or a scholarly article for colleagues. But how to achieve that style? A good first step is to adjust your linguistic goal from
Elegant Argument
to
Illuminating Explanation
We can examine this strategy in three areas:
Language
Layout or Format
Content
Language
In the exposition, it is useful to adopt an informal voice. But, perhaps counter-intuitively, that does not mean a conversational voice. In conversation, you have gestures and tone of voice to help convey meaning: what are the main points, what are helpful hints, what are asides, and what are social interactions.
None of these prompts are available when communicating in print. The author must shape the material so that the reader can navigate the ideas on his or her own. It is best to be as brief and direct as possible. After writing a section or so, go back and omit any unnecessary words or phrases. For example, before presenting an Example, there is no need to say Here is an example to illustrate the ideas we have just discussed. Subconsciously, the reader must absorb and then jettison this comment as unimportant. Doing so constantly leads to reader fatigue.
Often an explanation can be improved just by (judiciously) making it shorter. In addition, while trying to understand a new concept, most students will not find helpful our philosophical musings or historical anecdotes. These can be presented in a sidebar or addendum. Do try to relate new ideas to previous ones and show how they fit into the overall scheme, but avoid references such as we'll need this for our later study of (whatever).
The principles of good writing for any format apply equally to textbooks, mathematical or otherwise. Usually, active voice is more effective than passive voice, and a positive form is clearer than a negative one. Strunk and White's classic The Elements of Style and, more recently, George Gopen's reader expectation approach are standard resources for techniques of composition. (Although sometimes their advice is contradictory, which just goes to show that no rule is appropriate in every situation.) Steven Pinker's The Sense of Style is also useful.
Layout or Format
In a textbook, it is good practice to deliver material in digestible portions. Try to keep blocks of uninterrupted text rather short. Break up the exposition visually with boxes, Examples, Cautions, Notes, and so on. Use bulleted or numbered lists to highlight important points. Consider whether it would be more effective to start a particular section with a motivating example, or perhaps with a few sentences explaining how the new topic arises naturally, or in some other way.
Instead of opening your textbook with a Chapter 0 type catalog of all the notation and terminology needed in the entire book, it would be kinder to students to introduce new notation and terminology as needed. Also, it is not necessary to front-load all the information about a topic at one time; let students absorb and practice the fundamental ideas, then return later to elaborate, generalize, or present exceptions. Resist the temptation to proceed too quickly to general or abstract statements. Most people grasp abstract ideas more easily if they first see specific and concrete examples.
Choosing effective examples helps make your text student-friendly. A simple example has greater impact than a complicated one. If you are introducing asymptotes, the graph of
y=\dfrac{x-3}{x-2}
is a better example than
y=\dfrac{x^2-9}{x^2-x-2}
. It is also better than
y=\dfrac{1}{x}
because the latter may lead students to believe that asymptotes are identified with the coordinate axes. If you are introducing subgroups, do not limit your examples to subgroups of cyclic groups. Always consider your example from the students' point of view! Is your example too general or too specific? Are there confounding features that may distract from the intended message?
What about proofs? These days a good background in mathematics is necessary for a wide variety of occupations, so that only a small number of your students may be headed to graduate school in mathematics, even in junior or senior level classes. Here is a good place to strive for illuminating rather than elegant.
Content
Choosing and organizing the material for your textbook requires more thought than any other aspect of the creative process. To make your textbook truly student-friendly, you may want to rethink the traditional or standard order of content. If you are used to presenting material by topic, you might want to consider how better to make connections or to take advantage of sound pedagogical principles.
For example, forty years ago high school algebra was taught by first covering all the one-variable material and then (if time permitted) considering graphs and other two-variable topics. Now it is considered more effective to study graphs throughout the course. Linear algebra courses used to start with the study of vector spaces. Now many texts prefer to begin with systems of linear equations. In trigonometry, maybe we can start with just three trig functions instead of six; maybe we can work in one quadrant first, then add the second quadrant, before treating all four.
In a sense, textbooks drive the curriculum. Think of the innovations introduced in the calculus renewal movement that are now incorporated into most calculus texts: the catalog of functions, the rule of four, the inclusion of conceptual exercises. Many instructors, especially adjunct or part-time instructors, rely on their textbooks to shape their courses. You have a real opportunity to influence the direction of your field and to shape the way it is taught. Now get to work.
Technical questions first, followed by questions about markup.
On my local machine, why is the not working?
The could be a knowl that appears empty.
Or a sage cell that appears empty.
Or an interactive element of some sort that seems broken.
Or any component of the HTML page that is fancy.
Viewing an HTML file on your own computer is not the same as visiting
it on a website. There is no web server, so you should assume that
things will be different.
The cause of the difficulty is that some web browsers will behave
differently when viewing a local file compared with viewing it on a website.
If there are other resources to fetch (for example, the content of a knowl)
the browser may consider it a security risk to fetch them while viewing
a local file.
Try viewing your HTML file using a different browser, and you may find that
the feature is working there. However the real test is to transfer the
files to an actual web server, or to set up a local web server so that local
files operate in the usual way.
To set up a local server, see .
How do I install xsltproc on Ubuntu or Debian Linux?
sudo apt-get install xsltproc
How do I install pdf2svg?
As of July 2024, you no longer need pdf2svg to process latex-images; we now use the python pyMuPDF library instead.
Why is there no tag for bold?
Because the first principle of
is that the markup captures the structure of the document,
not the appearance.
A better question is: why do you want to print something in bold?
Is it emphasis? (See em.)
Is it the volume number of a journal? (See journal.)
Do you want to SHOUT? Try alert. And so on. There are lots of good answers, some of which are not yet implemented. We would love to hear about elements you need that are about expressing content, and not about altering presentation. See Principle.
Can I create source in Microsoft Word or Google Docs?
Unlikely. is designed around XML markup, so using a text editor to create a text file is the intended process for creating source. When you create a file with other word processors it is likely to use different characters in some places, such as smart quotes, and convert other things you type, such as converting three periods into a single ellipsis character. And if you make font changes, such as italics for emphasis, that will not translate directly to .
Perhaps you know somebody technically-minded you want to convert your word-processor files for you? First, this is a tedious job. Second, they may not accurately translate your intent. Third, you cannot make any edits and you will be reliant on them alone to maintain your project for you.
If you insist on authoring with a traditional word-processor, then you should. But you will get whatever output that tool provides, and miss out on the benefits of the semantic markup that allows us to create all the various output formats provides.
Why do I get no output and some warnings about bugs?
There is a good chance you have modularized your source files and have not included an xi:include for each modularized file. (See .)
If that was your mistake, then you should have seen a warning.
Please check to see if there was a warning you missed. (If not, we can improve the warning if you tell us how your source was organized. So please do, since we would love to hear about it.)
I don't like surprises and have not updated in months. Why do I now have a problem?
We almost never release mistaken code that breaks output produced from valid source (). And when we have, the cause is usually a small typo, or something that gets fixed easily and quickly. We do sometimes make backwards-incompatible changes, but you always get warnings, often the changes can wait, there are announcements on the mailing lists, and whenever possible, we update tools that automate the changes.
As volunteers, we cannot support problems from old versions, and sometimes we have to implement changes in reaction to third-party software (like MathJax), which is beyond our control. So while development is rapid, we implore you to remain on the dev branch of the repository and git pull regularly. Such as daily, with your morning coffee as you sit down to write, or with your last compilation of the evening. You will have far fewer unpleasant surprises this way, and we can help you better.
We understand that is a moving target, but we are iterating to a better state, and it is best to have everybody along for the whole ride.
I have not updated in months, so I did a pull, and now I have a bunch of warnings. How do I catch up?
Changes on our end which produce new warnings are almost always announced on the pretext-announce Google Group. This is a very low-traffic, announcement-only list, so you could skim the messages you missed. Also, read warnings carefully, as they often have explicit suggestions about what to do next.
There are lots of different blocks, but my project needs one that does not exist.
We do not support creating new blocks. But you can repurpose an existing one. See .
How do I put mathematics into my list markers?
List markers are an organizational device for grouping small bits of information. It is not appropriate to use mathematics in this situation. (Even if list item labels allow such a construction.) The alternative is to use a description list, with a dl element. Put your mathematics in the title and put the associated content into the remainder of the li. Or, put titles on the list items of an ordered or unordered list, and include mathematics there.
I have errors when I try to validate my markup, but everything looks okay when I make the HTML and the PDF. Should I be worried?
Occasionally the schema lags behind the code, so your first step is to
post to pretext-support@googlegroups.com to find out if it is
a problem with the schema.
Possibly there is another way to accomplish what you want, and that
markup will fit the schema.
Or maybe what you are doing meets the common and reasonable
test and can become a feature request. The discussion on
pretext-support should provide an answer.
Why are theorems, definitions, examples, remarks, etc.all numbered using the same counter?
The following is an argument in favor of using common counters for blocks of similar appearance. The argument is stronger in the context of using a printed copy of the book, where physical page flipping is necessary, but also applies to scrolling through a (long) page in a web browser.
Suppose your professor gave you a note to review Example 2.4.7 in your textbook. The 2.4 is useful information directing you to Chapter 2, Section 4. You can tell by the 7 that the example is probably not right at the beginning of the section, so you open to the middle of the section. You find yourself on a page with no examples, but you do see Remark 2.4.11. What do you do: flip forward or flip backward?
If examples and remarks are numbered using separate counters, you have no information about which way to go. You need to make a random decision, and flip pages until you find another example that you can use as a guidepost. And examples might be rare and sparse, so it may take quite a bit of page flipping to find that guidepost. You may end up at Example 2.4.8, telling you that you need to flip backward now. But how far? Will it be one page earlier or twenty?
For a more expansive discussion along these lines, see .
Also, as an author, recognize that there is a very flexible mechanism for making lists of objects that may be included in the backmatter (or elsewhere). To continue the example here, you could make a list of all the examples in the book, and a separate list of all the remarks. Each list would be in the order of appearance, include the number (and a title if you provide one). In HTML output, each is a knowl which will quickly provide the content (independent of location), and also provides an in-context link to take you to the location for surrounding material. This useful feature requires very little additional effort, especially if you title your blocks as you author them.
Why do I have errors?
If you have errors when you run pdflatex or xelatex,
that is more likely to be caused by a problem with your installation
than with . It is difficult to make legitimate
that fails to compile; an exception being math markup inside a math element
(m, md, and friends).
To check your installation, run pdflatex -version.
If it reports something older than TeX Live 2017,
then updating may help. If the trouble seems to be coming from a
particular package, then check which version of the package is being used.
For example, if the tasks package is causing a problem,
run kpsewhich tasks.sty in the directory where you are
compiling the . If the package is in your personal
texmf tree, that may be the problem.
If the PDF is created without errors, but something looks wrong in the PDF,
then probably the source markup is wrong. Validate your source
against the schema (see ), and also carefully examine the HTML output.
If that does not reveal the problem, seek expert help.
I have great output, so why does validation produce hundreds of errors?
Success with a tool like the -CLI (see ), in terms of no errors and great-looking output, does not mean your source is correct. XSLT processing can be forgiving, and many invalid constructions just work, and look great. But that is no guarantee this situation will continue, or the same happy accidents occur for a conversion to a different output format.
We do raise some errors during processing with the -CLI, but error-checking your input is a job for a validator, so in theory we should not ever produce any errors during a conversion. So strive for having 100% valid source, not simply great-looking results. See and .
I'd like to keep using markup for mathematics, in other words, $$ and \[\]
If you were somehow able to mix-in a dollar sign into your document, how would you then write The bus ride cost me $2.50? The solution, \$, is not going to help you. It is a shortcoming of that so many characters have special meanings in certain circumstances.
If you insist, you can still author using $$ and \[\], and before processing do a global search-and-replace. But converting a leading $ to <m> and a trailing $ to </m> will drive you mad unless you are really good with regular expressions. So perhaps better to use \( and \) for inline mathematics and search-and-replace will go better. I count six key presses for that, including the shifts for the parentheses, while it just takes me seven key presses for the PreTeXt m element, when I use an editor that auto-completes elements with a two-key combination.
We realize change is hardwe used for thirty years. But we believe the long-term advantages of markup are worth the short-term rearrangements.
Why not ? Why ?
was first released in 1978. There was no Internet, no HTML, no Unicode, and no YouTube. There have been many attempts to convert / to more modern document formats. They are not hard to findnone is satisfactory. We know because we have spent many years trying to adapt them to our purposes.
Many laud for its ability to separate content from presentation. The key word is ability. It is possible to use in a purely semantic way. But it very rarely happens in practice. And we suspect that when it does, the result looks much like XML anyway, such as the use of many \begin{}/\end{} pairs. allows authors enough freedom that it is impossible to accurately discern intent in a totally automated way.
By contrast, an XML vocabulary defined by a schema (i.e.) forces authors to communicate intent and denies authors the opportunity to micro-manage presentation. The result is automated conversions to many useful output formats with no extra effort from the author, including future conversions to formats not yet imagined. And XSL, once understood, is a robust and powerful tool for the sorts of text-manipulation tasks necessary.
Why do I have an extra period at the end of a title?
Author your titles without punctuation at the end meant for spacing or separation (period, colon, semi-colon, hyphen). Do include punctuation which imparts meaning (question-mark, exclamation-point). will then add separation (a period, or spacing), as needed, in all the places where it is required. But will respect your question-marks and exclamation-points.
If you think you have an additional punctuation character that conveys meaning at the end of a title, please bring it to our attention.
I'm a little confused about the less-than character, the ampersand, and escape characters in general
When you process XML, the less-than character, <, is a signal that the name of an opening or closing tag is coming next. How do you prevent this if you really need the character, especially for something like computer code? Answer: you use the escaped version, <. The ampersand is known as an escape character. It is a signal to the processor to escape from its usual rules. But, I hear you say, we just gave the ampersand character a special meaning, now how do I get that character when I need to say I went to the A&P store.? Simplethere is an escaped version, &.
So think of < and & as being the characters < and &. End of story. These two concessions should work throughout your source and in every conversion. Every markup language needs, and uses, an escape character, but XML and have you covered and really only need these two (infrequent) exceptions.
It is worth repeating: think of the escaped versions of the characters as actually being the characters themselves. That is the way the XML processor sees them and uses them. For more, see , , , , and .
Postscript: XML has the escaped characters >, &apos, and " for >, ', and " (respectively). But they are rarely (never?) necessary within .
Extra-credit homework: think about how some of the above was authored and then look at the source to grade your own work.
The titles of my description list are long, and the formatting is really bad.
Use shorter titles? Read too about the width hint for list items within .
Or convert your list to an ol or ul. The titles will now render more like their own paragraphs.
My math looks great in one output format ( or HTML) but is causing errors or looks bad in another output format (HTML or ). What's up?
There are subtle and minor variations and restrictions around the interpretation of syntax by itself and the MathJax Javascript routines for rendering in a web page. Work backwards from for details.
I would like to use a standard package in my Sage code
See for an explanation.
I would like to use a (large) data file in my Sage code
See for an explanation.
Processing my project takes a long time. Can I comment out some parts?
First, we know some aspects of processing are inefficient and therefore slow for large projects. We are working on it.
Your source is not a program, nor is it , which can also be a program. So the idea of commenting out code, or mimicking conditional use of 's \include{} command, are injurious to your source. Processing expects to see all of it. Some aspects of producing output demand it.
We have the notion of a version which can eliminate some (large) portions of your source in controlled ways (see ). Processing tools, such as the -CLI and the pretext/pretext Python script support the notion of restricting some processing to a subtree of your source, without hiding parts of your source from the processor. See for how to do this with the pretext/pretext Python script.
================================================
FILE: doc/guide/author/overview.xml
================================================
Overview of Features
This chapter is a high-level view of the important concepts, features and design decisions that go into the creation of . For careful exact descriptions of details, we will direct you to one of the many sections in the chapter. So this chapter should make you aware of what is possible and expand on the philosophy described earlier in , while also giving you examples of many basic constructions you can use to get started quickly.
Structure
A document is a nested sequence of structural divisionsstructural division. For a book, these would go part, chapter, section, subsection, and subsubsection. Using part is optional, but a book must always use chapter (or else it is not a book!). No skipping over divisions. For example, you cannot divide a section directly into several subsubsections without an intervening subsection.
An article starts divisions from section, though it may choose to have no divisions at all. paragraphs are exceptional. They lack a full set of features, but can be used to divide anything, in books or in articles, though they are always terminal since you cannot divide them further. You will have noticed that we prefer the generic term divisiondivisionstructural division (rather than section) since a section is a very particular division.
A division may be unstructured, in which case you fill it with paragraphs and lists and figures and theorems and so on. But if you choose to structure a division it must look like the following:
An optional introduction
One or more divisions of the next finer granularity
An optional conclusion.
Either version may have a single exercises division at the end, or other specialized divisions. The structured version may have more than one exercises, and more than one of each of the types of specialized divisions. For example a references is a second example of a specialized division. (See .)
The introduction and conclusion divisions are meant to be short, and may not contain any other numbered tag. No exercises, theorems, listings, etc. If you want to have an introductory division with any of the numbered elements you are free to omit the introduction and use the next finer subdivision with a title of Introduction.
Every division tag can carry an xml:id attribute, and it is a good practice to (a) provide one, (b) use a very short list of words describing the content, and (c) adopt a consistent pattern of your choosing. Do not use numbers, you may later regret it. These are optional, and with practice you will learn how best to use them. See just below for more on this.
The exercises and references tags are special divisions, see and .
This explanation is expanded and reiterated at and is worth reading earlier rather than later.
Paragraphsparagraph
Once you have divisions, what do you put into them? Most likely, paragraphsparagraph. We use long, exact names for tags that are used infrequently, like subsubsection. But for frequently used elements, we use abbreviated tags, often identical to names used in HTML. So a paragraph is delimited by simply the p tag.
Lots of things can happen in paragraphs, some things can only happen in a paragraph, and some things are banned in paragraphs. Inside a paragraph, you can emphasize some text (em), you can quote some text (q), you can mark a phrase as being from another language (foreign), and much more. You can use almost any character your keyboard can produce, but need to be careful with the three XML exceptional characters: ampersand (&), less than (<), and rarely, greater than (>). (See .) You must put a list inside a paragraph, and all mathematics () will occur inside a paragraph. You cannot put a table or a figure in a paragraph, and many other structured components are prohibited in paragraphs.
Paragraphs are also used as part of the structure of other parts of your document. For example, a remark could be composed of several p. As you get started with , remember that much of your actual writing will occur inside of a p and you will have a collection of tags you can use there to express your meaning to your readers.
So early in your writing project, familiarize yourself with the components of a paragraph detailed in .
Blocksblocksenvironmentsblocks
Besides paragraphs () the most common object to include in a division is what we informally refer to as a block. These are self-contained units of text, almost always set-off visually, and likely with a number and a title. If you know , you may be in the habit of calling these environments. Mathematical results are one example, and you can start at to learn more. There are others that are more general-purpose, such as remark and example. While fundamentally different from these blocks that are textual with reflowable lines, objects like figure and table () or program and console () are blocks, even if their contents are more rigid or spatial. For a more precise description, see .
Cross-Referencescross-reference
Cross-references in a document are easy, powerful and flexible. So it is worth familiarizing yourselves with them early, here and then ahead in .
Any element that you place a xml:id on can become the target of a cross-referencecross-reference. This could be a division, a remark, a bibliographic entry, or a figure. So for example, suppose your source had <subsection xml:id="subsection-flowers"> and someplace else you wrote <xref ref="subsection-flowers" />. Then at the latter location you would get a reference to the Subsection that discusses flowers. In print this might just be the number for the subsection, but in various electronic output formats, these cross-references can be very powerful interactive ways to explore the content. And the mechanism is always the same, pair up an xml:id on a target with a ref on an xref cross-reference.
Since the value of an xml:id is also used in a variety of ways, such as to construct some file names, some care should be taken in how you author them. We limit the possible characters to letters and numbers (a-z, A-Z, 0-9), with hyphens and underscores (-_) available as word-separators. Our advice is to stick to lowercase letters, though we are not yet aware of any problems with case-insensitivity. So in short, use kebab-case or snake-case for your xml:id values.
For more, see because cross-references have many features. But first, here are two features you do not want to miss. In the early stages of writing, you can author <xref provisional="subsection-flowers" /> to point to a subsection you are contemplating (but have not written yet) and you will get various polite reminders to get that straightened out eventually (see for details). Also the default behavior is to automatically provide the generic name of the target, so you will get something like Subsection 4.3.2 without ever typing the Subsection part. If you move the target, the generic name will adjust if necessary, and if you switch to one of the supported languages, the generic name will switch language (see .
Titlestitle
Divisions always require titles, you accomplish this with a titletitle tag first thing. Almost everything that you can use in a paragraph can be used in a title, but a few constructions are banned, such as a displayed mathematical equation (for good reason). Try to avoid using footnotes in titles, even if we have tried to make them possible.
Since titles migrate to other places, such as a Table of Contents, there are options for variants of a title, such as a short version, or a markup-free version. Some (major) titles may also be structured as a sequence of line elements to control line-breaks for long titles.
Many, many other structures admit titles. Experiment, or look at specific descriptions of the structure you are interested in. Titles are integral to , much like cross-references. Titles migrate to the Table of Contents, get used in page headers for print output, can be used in lists (such as a List of Figures), and can be used as the text of a cross-reference, instead of a number. You might be inclined to not give a remark a title, but it would definitely be good practice to do so (study ). For more details consult .
Mathematicsmathematics
With experience, you may realize that utilizes three principal languages. One is the narrative of everyday sentences and paragraphs. Most of what you write in a paragraph, or a table cell, or a title, or a caption, or an index heading, is in this language. Then there is the structural language, which is the majority of the elements in , such as chapter, theorem, or figure. Then finally, there is the language of mathematical symbols and notation.
A key design decision is that mathematical symbols, expressions and equations are authored using syntax. More precisely, we support the symbols and constructions provided by MathJax, which quite closely follows the amsmath package maintained by the American Mathematical Society. Neither you nor I want to write MathML by hand!
The symbols and macros supported by MathJax can be found at their Supported commands documentation. Look here to see which parts of may be used in your mathematical expressions.
For inline mathematicsmathematicsinline mathematics, use the short m tag within a p (or within a title or caption). For example, <m>\alpha^2 + \beta^4</m> will do what you expect, in print and in electronic outputs. To get a single equation, centered, with some vertical separation before and after, use the md tag (math display) in the same way within a p, but do not try using it within a title. For example, <md>\rho = \alpha^2 + \beta^4</md>. If you want your equation numbered, add the number attribue with the value set to yes.
There is a way to incorporate your own (simple) custom macros within mathematics (only). They will be effective in your print and electronic outputs, and can be employed in graphics languages like TikZ and Asymptote. You can also author multi-line display mathematicsmathematicsdisplay mathematics using the md tag, but now it should contain a equence of mrow elements holding syntax. We defer the details to .
Imagesimage
You can include an image via the imageimage tag, using the source attribute to provide a filename, likely prefixed by a relative path from the top-level of the appropriate directory. Read for details on how to set these directories correctly. If you are starting a new project, using the -CLI (with the command pretext new book, for example), then most of the setup portion is done for you and the top-level directory for images that are created external to the project is called assets, and it is a sibling of the source directory. It is your responsibility to locate that file properly relative to this directory, and that the file format is compatible. So, for example, suppose your source contained <image source="images/butterflies.jpg"/>. Then you would want to have a directory named images below wherever you set the external top-level directory, and you would place the butterflies.jpg file inside of the images directory.
The width attribute can be used to control the size of the image. Widths are expressed as a percentage of the available width, such as width="60%". Instead of a width, you can also specify margins and the width will be deduced.
The optional rotate attribute controls the angular rotation of the image about its center, for example image/@rotate="30" will rotate the image 30 counterclockwise.
You may want to wrap your image in a figure to have it centered, and to have some vertical separation above and below. A figure must also have a caption, and the figure will be numbered.
You can also place an anonymous image (no caption, no number) almost anywhere you might place a paragraph (but not within a paragraph). Note also that the sidebyside tag provides some very flexible options for placing several images () together, or combining figures with subcaptions.
If you wish to construct technical diagrams, with editable source, and perhaps including the use of macros, provides support for authoring with graphics languages such as Asymptote, TikZ, PGF, PSTricks, and xy-pic in addition to using Sage code to describe a plot or image. In most cases output can be obtained as smoothly-scalable SVG images, in addition to other formats like PDF or PNG. Making all this happen is one of the more technical aspects of , so read the details in along with frequent references there to the pretext script described in .
For accessibility, every image should either have a description or it should
explicitly declare itself to be a decorative image setting decorative to
the value yes. Descriptions are of two types. A shortdescription
should minimally describe the important information in the image that is not already
present in the surrounding text. It should have no element children except possibly
var children. This content will be used as the alt attribute
for the HTML img. Some screen readers may cut off reading this content after
the first 100140 characters, therefore you should keep this element short.
A description element should be structured with p and
tabular children and has no technical limit on length. It may describe the
image more completely. The content of the description should describe the
image, but should not be necessary for a sighted reader to take in the important
features of the image. (If there are features of the image that need to be explained to
all readers, this should happen in the main body of the text.) An image may
have one or both types of description, but it is incorrect to have neither unless
decorative is set to value yes.
Listslist
Ordered lists (numbered)listordered list, unordered lists (bullets)listunordered list and description lists (defined terms)listdescription list are all supported, and syntax generally follows HTML. Lists usually live within a paragraph (p), though there are limited exceptions. Their structure is given by the ol, ul, dl tags (respectively). These can specify a variety of options for the labels via attributes, as described in .
List items, for any of the three types, are delimited with the li tag. What is different from HTML is that the contents of a list item may be structured, with paragraphs (p) being the most likely and frequent element. So to nest lists you begin a paragraph in a list item of the outer list, then begin the inner list within that paragraph. However, a simple list item may be authored just like you were authoring within a paragraph, much like writing sentences elsewhere. A structured list item may begin with title for ordered and unordered lists, and is mandatory for a description list. In this latter case, the text of the title will become the text that is being described (the label of the list item). For the optional uses, the title will be rendered as its own paragraph, with a different font (perhaps italics or oblique). A description list cannot be contained within another list. In other words, it is a top-level list.
Lists are more complicated than they appear, so be sure to read the details at before you start designing really involved lists.
Exercisesexercise
Textbooks in many disciplines have exercises for the reader. In there are five places where you can set a question for the reader to pursue.
Divisional
There is a special exercisesexercisedivisional exercise division and an exercise placed there is then known as a divisional exercise. This division supports extra features designed for exercises, such as an exercisegroup for short exercises with common instructions. The exercises division can be used at any level. In other words, it can be a peer of any other division.
Inline
Immediately within any division, you can interrupt the narrative with an inline exercise.exerciseinline exercise It will be rendered similar to a theorem or other block, with a number, and a optional title.
Reading Question
Another specialized division, reading-questions, can be used to house exercise designed to test or guide a reader's comprehension of the material in that division.
Worksheet
The main component of a worksheet is an exercise (). Notably the exercises in a worksheet may be arranged with a sidebyside element ().
Project
A project is similar to an inline exercise, other than the type name and the fact that it can run on a separate counter from theorems, figures, etc. (When running on a separate counter, the same counter is used for activity, exploration, and investigation.)
If an exercise is simply a statement of the question, then it may be authored with paragraphs (p) and similar elements. If an exercise has hints, answers, or solutions, then it must be structured with a statement, followed by (possibly several) optional hint, answer and/or solution. Conceptually, an answer is a short final result, while a solution provides details about the route to the answer. Each of these four components is structured further, with paragraph-like elements, and the exercise itself may have a title. A title is strongly encouraged for inline exercises, and nearly-mandatory if you plan to have inline exercises rendered in knowls in a conversion to HTML.
There is a wide variety of interactive exercise types you may specify, such as multiple choice, Parson problems, matching, and more. See for descriptions of each type and the details of markup for each.
You need (and want) to have the hints, answers and solutions grouped with the statement as you author, but there is a lot of flexibility on making these available at the location of the exercise, or in the back matter. See for more.
An inline exercise typically gets a fully qualified unique number and is rendered similar to an example or a remark. A divisional exercise (including reading questions and worksheet exercises) only gets a sequential number, though this can be overridden with the number attribute if you want to maintain stable numbering in response to edits. (Be careful, once you override the sequential numbering, you probably need to manually specify every subsequent number, so save overrides for when your project matures.)
Within a run of divisional exercises a subgroup can be delimited as an exercisegroup, which requires an introduction and allows a conclusion to explain some commonality. A title is optional, and a default will be provided otherwise. An exercisegroup should be rendered in some way that makes it clear to the reader that they are a group.
Programs and Consolesprogramconsole
If you are writing about computer science, or more general scientific or engineering topics, you may wish to include sample computer programs, or command-line sessions. A program will contain a complete computer program, or a portion of the code from a program, while a pf (program fragment) will display a chunk of code inline with the text. Some program can execute in an online output format, while others are both editable and executable. This behavior depends on the language used and the host employed. A console holds a command-line session. These elements feature monospace fonts, preservation of whitespace, and syntax highlighting. These may also be placed in a listing to be more prominent, or as the target of a cross-reference. See for details.
Worksheetsworksheet
Another division is a worksheet. It is similar to a chapter, section, and so on, but with some variations to support a worksheet or in-class activity. Here we recognize the primacy of printed output (perhaps to bring into a classroom), and the online version is a less-capable representation.
There is no limit to what you can place in a worksheet division: objectives, an introduction, theorems, figures, images, and so on. But the principal element is an exercise, which mostly behaves like an exercise in an exercises division, but with additional capabilities.
An exercise in a worksheet can have a specified width when included in a sidebyside, and in any case may have a specified additional blank working space of specified height. Page breaks can be specified, and the four margins on a page can be independently controlled. So if you want to create ancillary worksheets for your project, and you like to use all of the space on a printed page, then there is some layout control to support that.
Notice that all of this layout control is an exception to the philosophy of . So in particular, margins and working space do not appear in the HTML output. We do give a visual indication where a page break in a worksheet is placed. An author might wish to collect all of the worksheets in a book, for printing as an activity book, and so there are plans (2018-08-11) to support and automate that process. Details for authoring worksheets can be found in .
Referencesreference
Like exercises, a references division may go anywhere a more typical division could go. This allows for things like a Further Reading list at the end of every chapter of a book. These are populated with biblio items that are individual bibliographic entries. Support is presently very minimal, but is planned to improve.
Some elements in are containers, meaning they do not stand by themselves, but are meant to be filled with other elements. Other elements are atomic, meaning they cannot be decomposed into smaller elements. A canonical example is the case of a figure, which is a container meant to be filled with other elements. One such element is an image, which is atomic. Note that the figure can be filled with other items, and that an image may appear inside other elements, including as a child of a division, perhaps as a peer within a run of paragraphs. A purpose of the container is typically to provide a number and some text (a title, caption, or similar) as identification or description, in addition to indicating to conversions the necessity for some visual formatting (such as small amounts of separating vertical space above and below). Note that an author provides the caption, while provides the vertical spacing.
Here we provide very brief descriptions of these four containers. Be sure to consult the in-depth topics for more details on specifics. Generally, the common thread here is that these containers contain text or graphic elements that has a two-dimensional quality to it. To different degrees the content is rigid. Unlike a paragraph, which could be unwound into a single (linear) long sequence of characters, something about the contents of these containers would be lost if stretched out in one dimension. To reflect this rigid two-dimensional flavor, we refer to these objects (and their containers) as planar.
A figure is the most general planar container. It can hold an image, a audio, a video, and more. A caption is authored early as metadata, but will likely render below. A title can be used for cross-references or in lists of figures, but may not render where authored.
See for full details.
A table is the container for a tabular, an atomic element which is the only allowed content of a table. A title is the identifying information, and renders above the rows and columns of the table. A variety of notes (to appear below the table) are possible (not implemented as of 2021-12-10). The elements we provide to describe a table are heavily influenced by the discussion in Chicago Manual of Style, which is worth reading if your project has many important tables. See for full details.
A listing is a container for computer code or programs, to support projects in computer science and other technical disciplines. These languages often rely on indentation (Python) or even exact column numbers of text (FORTRAN), hence a planar quality. Other languages can be written syntactically-correct as one long reflowable line (C, Pascal), but are impractical to do so as part of an exposition. So the allowed content is a program or console, which will respect indentation, use monospace fonts, and include syntax highlighting. Otherwise, a listing is very similar to a figure in how a caption and title are handled. See for full details.
A list may not be what you think it is. An actual list (be it ordered, unordered, or description) is a common and popular device for organizing information. Start at for details on lists. Since these lists are considered part of a sentence (within a paragraph), or a part of a paragraph, it is hard to create a cross-reference to them. So when you have a list that is important to mention elsewhere, you can create a named list with the list element, a container that has an optional introduction, followed by a actual list, and then an optional conclusion. An example might be a laboratory procedure, such as the steps necessary to dissect a frog. Like a table this element should have a title, and will be given a number. Using a new line for each new list item, and conveying nesting with indentation gives a list a planar quality. See for full details.
We use a table to summarize these similar containers.
Containers for Planar Content
FigureTableListingListElementfiguretablelistinglistContentsvarioustabularprogram, orconsoleintroductionol, ul, or dlconclusionTitleCaptionNotesDetails
An advantage of XML syntax is that very few characters are reserved for the language's use, and thus very few characters need to be escaped. Of course, there is always the need to escape the escape character.
The escape character for XML is the ampersand, &. The other dangerous character is the left angle bracket, the less than, <. If you like to be symmetric, you can also handle the right angle bracket, the greater than, >, similarly. Single and double quotation marks are used to delimit attributes, so are part of the XML specification, but do not present difficulties in narrative text.
These first two characters are interpreted by the XML processor very early in the analysis of your source. So they need to be authored specially via the XML entities& and <. In practice, escaping > is rarely necessary. So fundamentally within there are just two characters to type carefully or exceptionally.
If you consistently follow the prescription in the previous paragraph you will avoid a descent into escape-character hell and avoid a lot of head-scratching. In particular, you should have no need of the <![CDATA[]]> mechanism of XML, so please just forget we even mentioned it. But see if you are curious, or want a more thorough discussion.
Quality typography is more expansive than the limited capabilities of computer keyboards, whose history is rooted in the machines known as typewriters. Some characters are never present on a keyboard (e.g., a pilcrow), while others are ambiguous. Is a diagonal line a slash used to separate information (either/or), or is it a solidus used to form a simple fraction such as 34? is a sample of how addresses this. (The last two are the technical exceptions imposed by using a markup language, see .) See for a more comprehensive and detailed discussion.
Nontrivial Characters
To get this:Type this:To get this:Type thisellipsisfillin<icon name="gear"/><icon name="wrench"/>PrtScn<kbd>PrtScn</kbd><kbd name="shift"/>ndashmdashregisteredcopyrightpermillepilcrowsection-markmidpointtrademarkswungdashtimesplusminussolidusobelusdegreeprimedblprime&&<<
Verbatim and Literal Textverbatim textliteral text
Typesetting literal text, usually in a monospace font, can sometimes be tricky. For short bits of such text, as part of a sentence in a paragraph, or in a caption or title, use the c tag, which is short for code. For much longer blocks of literal text, with line breaks that are to be preserved, use the cd element within a paragraph (code display). Outside a paragraph, most anywhere you could place a regular paragraph, use the pre tag, which is short for pre-formatted.
For the content of a pre element, the indentation will be preserved, though an equal amount of leading whitespace will be stripped from every line, so as to keep the code shifted left as far as possible.
The behavior of these two tags is to preserve characters exactly. Certainly the ASCII character set will behave as expected, and Unicode characters will migrate successfully to output formats based on HTML. As mentioned in the ampersand and left angle bracket will confuse the initial XML processing. So use the XML entities & and < to represent these characters to the conversion tool, the -CLI. See for further details.
Sage
SageSage is an open source library of computational routines for symbolic, exact and numerical mathematics. It is designed to be a viable free open source alternative to Magma, Maple, Mathematica, and Matlab. contains extensive support for including example Sage into your document.
A typical use of the sage tag is to include an input element, followed by an output element. The content of the input element may be presented statically in PDF output, or dynamically as a Sage CellSage cell in an output format based on HTML. Of course, for output as a CoCalc or Jupyter worksheet, the Sage code is presented in the worksheet's native format.
The content of the output element is included in PDF output, but not in dynamic instances, since it can be re-computed. Notably, there is a conversion which pairs input and output into a single file in the format used by Sage's doctest framework. So if expected output is provided, it becomes automatic to identify when Sage has diverged from your expectations, and you can adjust your examples accordingly.
The Sage Cell Server can also be configured to interpret different languages, because Sage by default contains everything needed to evaluate code in these languages. This is done by providing a language attribute, where possible values are sage, gap, gp, html, macaulay2, maxima, octave, python, r, and singular. The default is sage.
Note that the dynamic formats (including the Sage Cell) may run Sage interacts, so that is possible to embed interactive demonstrations into your dynamic output formats.
Interactives
We strive to make it simple for authors to incorporate interactive demonstrations in the online output of their projects. Of course, this prompts the question of what to do with this content in less-capable formats like PDF or braille.
The interactive element provides a consistent way to specify these demonstrations. There are many possibilities, but perhaps they can be grouped mostly into three broad classes.
Server Hosted
Interactive demonstrations hosted at external sites, such as those from GeoGebra or Desmos, can be included simply by providing the appropriate identifying information, much like the way you would specify a YouTube video ().
Source Code
Some interactives can be described by source code that you include in your source. Examples include JessieCode, CircuitJS, and Sage Interacts. We also support GeoGebra this way. This is similar to how we employ Sage Cells, but without as much specialization.
Roll Your Own
If you know HTML, CSS, and Javascript, you can provide your own routines and libraries to incorporate any sort of demonstration you can imagine and can code.
See for details.
For output formats where executing an interactive would be impossible, we manufacture a static version. This includes a screenshot of the demonstration (automatically generated, or supplied by the author) and a Quick Response (QR) code that will point to a standaloneHTML page that contains the interactive. Again, see for details.
Side-by-Side Panelsside-by-side panel
A sidebysideside-by-side panel is a useful organization of elements in a horizontal layout, and so begins to blur the line between content and presentation. While we default to organizing information in a vertical sequence, it is often desirable to organize smaller elements adjacent to each other horizontally. Specifically, images, tabular, figures, tables, paragraphs, and more, may all be combined and there is good control over vertical and horizontal alignment. Captioning, both overall and individually, is especially flexible. An sbsgroup (side-by-side groupside-by-side group) collects multiple sidebyside to stack vertically, which allows for displays in grids. See for details.
Mathematical Resultsmathematicsmathematical resultsmathematicsmathematical resultstheorem-like elements
Definitions, theorems, corollaries, are supported by the tags: theorem, corollary, lemma, algorithm, proposition, claim, fact, definition, conjecture, axiom, and principle. Each may have a title (strongly encouraged), and then contains a statement which is a sequence of paragraphs and other elements. As appropriate, some of these elements (such as a lemma) may contain an optional proof (or several), while other elements may not have a proof (such as a conjecture).
A definition is a natural place to define notation as well (see ), and to use the term tag to identify the terminology being defined.
In order to assist readers locating numbered items, these items are all numbered consecutively in a group that includes examples, remarks and inline exercises.
Front Matterfront matter
In the beginning of your book or article you can have a frontmatterfront matter element that contains various items that would precede your first chapter or section (respectively). Possibilities include bibinfo (to hold bibliographic information about your document), titlepage, colophon, biography, abstract, dedication, acknowledgement, foreword, and preface. Some of these may be duplicated (e.g., several prefaces for multiple editions), many of these items are restricted to books (e.g., a foreword), and some items are restricted to articles (e.g., an abstract). The schema () will help you place them in the right order in your source. See for details.
The frontmatter is also employed in other types of documents, such as a slideshow, in similar, but not identical, ways.
Back Matterback matter
Similar to front matter, there is material you might wish to include after your book's final chapter or your article's final section. Possibilities to place in a backmatterback matter include appendix, references, glossary, solutions, index, and colophon. There are empty tags you can place into an appendix to generate lists of notation, or lists of particular elements of your choice, such as a list of figures. A similar empty element actually generates the index, index-list, but you will almost always want to place it into the index division. See for details on the back matter generally. Also, be sure to read about the powerful and flexible automatic list feature (), which is not restricted to just the back matter.
Index and Notation Entriesindexnotationnotation listlistof notation
Construction of an indexindex and a list of notationnotation is accomplished by placing information into your text in the appropriate places in the right way.
The idx tags denote an index entryindexindex entry. These should be placed within the element that they describe. By this we mean that an idx element can be placed within a theorem to refer to just that theorem, or it might be placed within a subsection to refer to that subsection. When you do this, a natural place to place the idx is right after the title and similar metadata. In this way, electronic versions of your work can have an index that is more informative than a traditional index that uses just page numbers, since it will be apparent while reading and using the index just what type of object the entry refers to. (See the end of this Guide in an electronic format for an example, ). Note that the text contained within the idx tags does not actually appear in the articleit only serves to mark the location the index entry points to. You can have several levels of headings by structuring your idx element with up to three h tags (h for heading). Additionally, you can use see or seealso for cross-references within the index.
See for more details and the finer points of creating index entries.
A similar device is used to create a list of notation for a technical (mathematical) work.
Place a notation element as close as possible to the place where notation is first introduced. If you use the definition tag for your definitions, then this is a very natural place to also introduce notation. Inside of notation use the usage tag to include a short example of the notation in use, wrapped in an m tag and use syntax (as usual). The description tag should contain a very short description in words of what the notation is for. So center of a group would be a good description to accompany the usage Z(G).
See for more details and the finer points of creating notation entries.
Exercises exercise
It is possible to include /PG problems in your source. These can be authored
using , included from local PG files, or referenced from a host
course. A static version of the exercise will be rendered in your static output formats
such as /PDF. A live version will be rendered in HTML output. If the HTML
is hosted on a Runestone server, the student's progress completing the live exercises
can be tracked. You can also extract the problems into a single archive suitable for
uploading into a course. This is a big topic, so see the dedicated
for details.
MyOpenMath Exercisesmyopenmath exercise
MyOpenMath is a hosted online homework system with hundreds of thousands
of prebuilt questions. These questions can be embedded in PreTeXt using the
myopenmath tag. See for details.
In the web output, the MyOpenMath question will be embedded and
interactive though not tied to any student or faculty account. In static output,
a static version of the question will be included. Note that there are some
limitations on which problems will display correctly in web and static output. See for best practices.
STACK ExercisesSTACK exercise
STACK is an online assessment system, and these exercises can be embedded in a document. STACK is an acronym for System for Teaching and Assessment using a Computer algebra Kernel. See for details.
URLs and External ReferencesURLexternal referenceexternal referenceURL
The url tag always requires an href attribute. Usually this will be a complete address for some external web page, or other external resource. The visual attribute is sometimes mandatory, but sometimes optional. It should provide a simplified version of the URL for use in print, or similar situations. Finally, you can provide content for the url element, which will become the clickable text in most realizations.
If the url element is empty (no content), then the value of the href attribute or the optional visual attribute will be the link text, with a preference for the latter. When you instead provide content, you can use elements much like any other piece of text that would occur in a paragraph. In this case, a visual attribute is now highly recommended, as an alternative to the content, providing information about the actual URL for non-electronic formats like print. A default version of the value of the href attribute will be used in its absence. This visual version of the URL will appear in a trailing parenthetical for print PDF versions.
See for an example and full details. There is a similar dataurl element for pointing to supporting files, see .
Videovideo
Videosvideo, either author-hosted, via a URL, or hosted on YouTube, may be embedded in a document that is converted to HTML, and may be optionally popped-out to view on another page. For a YouTube video, it is simplicity itself, as an author need only supply the identification string, and all the details of the embedding are handled by . See for details.
Scientific Unitsscientific unitsSI unitsscientific unitsunitsscientific units
If you are writing about science or engineering, or even if you are not, there is extensive support for scientific unitsscientific units. So, for example, you could author a force in metric units as
We are interested in helping authors produce documents with open licenses around the entirety of the world. provides infrastructure for doing so (or internationalization) in accordance with guidelines of the W3C Internationalization (I18n) Activity at W3C (www.w3.org).
In order to actually adapt to another language (localization), there are two requirements:
A file for localization into the desired locale.
The author adds an xml:lang attribute on the pretext element.
See for more details.
Accessibilityaccessibilityweb accessibility
The Web Accessibility Initiative at W3C (www.w3.org) says:
The Web is fundamentally designed to work for all people, whatever their hardware, software, language, culture, location, or physical or mental ability. When the Web meets this goal, it is accessible to people with a diverse range of hearing, movement, sight, and cognitive ability.
Thus the impact of disability is radically changed on the Web because the Web removes barriers to communication and interaction that many people face in the physical world. However, when websites, web technologies, or web tools are badly designed, they can create barriers that exclude people from using the Web.
Since we are interested in helping authors produce documents with open licenses, and we concentrate on employing open standards for the HTML output we create, we are ideally positioned to help you easily create highly-accessible documents. There are many technical features which happen automatically, and there are some features which we make available for your use as an author and which only an author can provide, or elect to use. Before getting too deep into your project, review for full details and ways you can make the HTML version of your document more accessible, and more useful for a wider audience.
Slidesslides
In addition to articles and books, support for authoring slideshows is also available,
but is experimental (so tags and attributes are subject to change).
Currently, support for producing Reveal.js
and Beamer
slideshows is available. Details on authoring may be found in ,
and publishing details are in .
Also, future support for annotating books and articles to export slides
is in the works, but not yet available.
Literate Programmingliterate programming
If you know what literate programming is, then you may not be surprised to learn that provides excellent support primarily with two additional elements: fragment and fragref.
If you have never heard of literate programming, it is a way to mix code and documentation for a computer program in a single file. But rather than typographically simple code comments, you have the full power of every other feature in and all of the possible output formats. Furthermore, you can arrange your code in an order that might make more sense to a human (top-down, bottom-up, a mixture, or ) and will rearrange the code into an order that the compiler or interpreter understands.
So the idea is that from one file you get a program for the compiler, and a beautiful, typeset explanation for a human reader in any format supports. An accessible introduction is Knuth's description of his WEB system for the Pascal programming language , or many more resources are at the literate programming site. Full details on the implementation are at .
================================================
FILE: doc/guide/author/processing.xml
================================================
Processing, Tools and Workflow
This chapter explains in full detail how to convert your source into various output formats, using both the simple -CLI as well as other methods to combine your source file with an XSL stylesheet that might provide greater flexibility and control. It expands on the simple cloud-based workflow in , providing options for a local installation and processing.
Options for Processing
There are currently three supported options for converting (processing) your source:
The -CLI: very easy and friendly, but somewhat limited in customization. Requires Python 3.10 or later. Documentation appears in , and throughout the Guide as needed.
The script (sometimes referred to as pretext/pretext): a Python script that has a large variety of utilities to process your source and its components. Requires Python 3.6 or later. This script is very useful for development and for users who prefer a Swiss Army Knife approach to their tools. In rare cases this may be needed to test new features that have not yet been exposed in the -CLI. See .
xsltproc: an executable program that directly converts XML using a specified XSL file. The command-line program is easily available on Linux and MacOS, but harder to install on Windows (using Windows Subsystem for Linux is probably your best bet). Demonstrations of use in this Guide are being phased-out but will be collected in .
The -CLI, can be installed on the command-line using the command pip install pretext, see . To use options 2 and 3 above, you will need to get a copy of from its GitHub repository. This can be done using the command git clone https://github.com/PreTeXtBook/pretext.git, or by downloading a zip file directly from the repository.
Wherever the functionality of the -CLI allows it, instructions in this guide will use that method. We will collect corresponding processing instructions using xsltproc in . Information on the use of the script can be found in . These tools are especially useful when developing new features for , so they are housed in the .
If you prefer to use online, cloud-based tools, all of the processing options are available when using a Github Codespace or similar online platform. If you already use and have a license for CoCalc, it should have all the tools ready to go (although you will likely want to update the CLI).
The -CLICLIOscar Levin
Here we will outline the functionality of the -CLI. Instructions for using the CLI without any local installation can be found in . An easy first step toward getting PreTeXt working locally would be to download VS Code and install the pretext-tools extension (which will install the -CLI for you, assuming you have an appropriate version of python available).
command-lineterminalconsole
We will work at the command-line inside of a
terminal or console. If you do not know what this is, it will seem very primitive at first. This will be called a Command Prompt or PowerShell in Windows or a Terminal on a Mac. In Linux it may be known as a console or a shell. Whenever the guide says to enter something on the command line or in a terminal, or just to enter the command, this is what we are talking about.
Installing
Before you can install locally, make sure you have the following software on your computer, or else install it using instructions easily searched for online.
Python, version 3.10 or later. In a terminal, type python --version to ensure you are already set up. On MacOS or Linux, your command for python might be called python3, so also try python3 --version.
To use an HTML theme other than the default, you will need Node.js, version 18 or later. You can check if you have it installed by running node --version in your terminal.
To produce a pdf, or to generate tikz images from source, you need . Try xelatex --version to see if you already have this.
Any text editor. Visual Studio Code is an excellent choice (and has an extension, PreTeXt-tools, with specific language support), but other editors such as SublimeText, atom, emacs, vi, etc. can also be used. See .
Now we can install . Open a terminal and type the following:
pip install pretext[all]
If this fails, try:
python -m pip install pretext[all]
(or, if python3 worked above, do python3 -m pip install pretext[all].)
The python -m helps in case Python is on your PATH but pip is not. This is a useful fix for the rest of the commands listed for the -CLI.
Including the [all] at the end of the instillation command will install both optional dependencies with the CLI: pelican for generating a static landing page if you wish to deploy multiple targets, and prefigure, to include accessible prefigure graphics. You could install just one of these using pip install pretext[prefigure], for example. If something goes wrong, you can always just include the required dependencies with pip install pretext.
Newer Linux distributions and MacOS versions may give an error or warning when using pip outside of a virtual environment. It is likely best practice to use a virtual environment, especially if you use python for other projects. Some instructions are available in .
Alternatively, you can use pipx to install the CLI with pipx install pretext, which will create and manage a virtual environment for you.
To verify that the CLI is installed, type pretext --version (or python -m pretext --version) and you should get back a number (2.13.5, for example).
CLI--help
For quick hints about what you can do, the CLI has built-in help. You can access this by entering pretext --help or pretext build --help (replacing build with new or view or generate etc.).
Upgrading
This documentation will assume you have version 1.0 or later of the CLI. You can upgrade the CLI to the most recent version through PIP using the command:
pip install pretext --upgrade
Versions of the CLI starting with 2.12 also allow you to simply run pretext upgrade to get the most recent version.
If you want to experiment with bleeding-edge features, you can install a nightly development version of the CLI by running:
pip install pretext --upgrade --pre
If you ever want to downgrade to previous version, you can do that with pip as well. For example, to install version 2.20.1:
pip install pretext=="2.20.1"
If you installed the -CLI before version 1.0, you need to manually uninstall the package pretextbook (which is what the CLI was called during early development). Run pip uninstall pretextbook and then pip install pretext te get caught up.
Starting a New Project: pretext newnewpretext newCLInew
To generate a new book or article, from the folder in which you want to project located, type:
pretext new book
This creates a new book in the folder new-pretext-project (which you can safely rename). For a new article, use pretext new article. You might also try pretext new demo to get a project that shows off more features available, or pretext new course for a collection of course documents. pretext new slideshow will create a new project with a simple slideshow template.
Inside the new-pretext-project folder, you will find the following folders and files:
assets
A folder to place static (external) assets, such as images or data files, that you will include in your project, for example, with image source="frog.jpg".
generated-assets
A folder that will hold assets (such as images) generated from source, using the pretext build or pretext generate commands. You should not manually edit any contents of this folder.
publication
A folder to hold your publication files used to customize how your output looks. One publication file is included, but you can have as many as you want. See .
source
A folder to hold all your source files. These are the main files you will edit to control the content of your project.
project.ptx
An XML file called the project manifest. This specifies options for converting your source into different target outputs. We will describe the contents of this file in .
README.md
A file that you can use to describe your project.
requirements.txt
A simple text file that contains the version of the CLI that is initially used to build the project. If you upgrade the CLI, you will be warned to also update the version in this file once you know that things build as expected.
Once you build your project, you will get a folder called output and possibly one called .cache (which stores cached generated assets). Do not edit the contents of these folders manually; such changes will be overwritten anyway.
Additional files and folders will be generated if your project is managed by git (for example, if you use GitHub). You can expect to see a file .gitignore and folders .devcontainer and .github.
Whenever you upgrade your installation of the CLI, you should run pretext update from inside your project folder. Doing so will update any managed files that you have not edited. This can be useful to get the latest features.
To convert your source into one of the available output formats, say HTML, run the command:
pretext build web
Here web is the name of one of the targets in the project manifest (project.ptx). To build different targets, replace it with the name of another target, as in pretext build print.
You can also build the first (default) target of the manifest by omitting the target: just type pretext build.
After you convert your source into, say HTML, you can view the output using the command:
pretext view web
This will direct you to open a file running in a local server (that the CLI started for you) at a provided address (perhaps ). Once you have run pretext view once, you can navigate to other output targets by navigating to a different url (maybe ) or just rerun the pretext view command with a different target name.
Running pretext view will attempt to open your default program for the type of file you are opening. You can prevent this attempt using the --no-launch flag.
Assuming you ran this command in a terminal, the easiest way to continue working is to open a new terminal tab to run pretext build again; the local server will continue in the original terminal until you stop it with CTRL+C.
When using pretext view, your project is only viewable on your local machine (even if you are working in a Codespace or on CoCalc). To make the output available to the public, you will need to copy the output to a web server, or use the pretext deploy command, described below.
Hosting your project: pretext deployhostingCLIdeploydeploypretext deploy
When you are ready to share your project with the world, you can copy the contents of the output/web (or whatever you called the output of your html build) to any webserver. A convenient free option is to use GitHub Pages, and the CLI makes this especially easy.
If you already track your source files using GitHub, all you need to do is enter the following command:
pretext deploy
If you watch the terminal, you will either get directions for how to set up your repository, or will simply be told what the live website for your project is.
Behind the scenes, this command copies the contents of the output folders you want to deploy to a folder output/stage, and then moves the entire contents of that folder to the gh-pages branch of your github repository. If you have not already created a gh-pages branch, the CLI will create one for you. If you have not already set up your repository to track your source files, the CLI will walk you through the steps you need to get set up.
If you don't have your project set up with GitHub yet, the CLI will try to walk you through the process.
Sometimes authentication with GitHub can be tricky. Especially on Macs, it appears that conflicts can arise if you use different methods for authenticating in different applications. A fix that seems to work is to open Keychain Access, search for github and delete some or all of the entries you find (GitHub api seems to be a culprit). You will need to reauthenticate then, but after that, it should work.
You can deploy multiple targets, starting with the 2.0 release of the CLI. To do this, you will need to specify a deploy-dir attribute in your project manifest for each target you want to deploy. Additionally, you should create a folder in the root of your project called site and create a landing page for your project. The site folder and the output folders for each specified project will all be copied to output/stage. We recommend using the flag --stage-only so you can preview you complete site before deploying it.
Some elements require special processing: exercises, prefigure, latex-image, sageplot, and asymptote images, as well as previews for embedded youtube videos or interactive elements. We call these elements assets or generated assets.
Prior to version 1.7 of the CLI, you would need to run pretext generate -t [target] (where [target] is the name of a target, like web) in order to generate assets. Since then, you can still do this, but it is usually not necessary: whenever you build a target, the CLI will automatically generate any assets that are out of date. If you want to force the generation of assets, you can use the -g flag when building (e.g., pretext build web -g). If you really don't want to automatically regenerate assets, you can use the --no-generate flag when building (e.g., pretext build web --no-generate).
If you want to generate assets without building (or if you are using an older version of the CLI), the following instructions can help you limit what you generate.
You can limit which sorts of assets you generate. For example, if you edit a few latex-image elements, you can just generate these (for the first target in the manifest) with pretext generate latex-image. To get the same assets for a different target, use the -t flag (e.g., pretext generate -t print prefigure). If you want to generate all assets for a specific target, use the --all-assets flag (e.g., pretext generate -t web --all-assets). This will generate all assets for the specified target, regardless of whether they are out of date or not.
Valid choices for what types of assets you can generate in this specific way are: webwork, prefigure, latex-image, sageplot, asymptote, interactive, youtube, codelense, and datafile.
To be even more precise, if the element you wish to generate has an xml:id, you can generate just that element using the -x flag. For example, if your latex-image has id img-circle, generate it with pretext generate -x img-circle
Finally, there might be times you would like to get all output formats for the assets you are generating. You can accomplish this using the --all-formats flag on pretext generate. Different output formats require different asset formats; to get just those formats for a particular target, you can use the -t flag to specify a target name.
The project manifest: project.ptxproject manifestmanifestCLIproject manifestproject.ptx
The project manifest, always named project.ptx, contains information about each target you will build. Prior to version 2.0 of the CLI, it also contained the names of executables of external tools that might be needed for building targets and generating assets. (In 2.0 and later, if you need to change the default names or paths to executables, you will use a separate executables.ptx file.)
The CLI looks for this file, so you should have only one. If you have a project that was not created using pretext new, you can get a copy of the file by running pretext init. You can also get the most recent template version of the manifest by running pretext init --refresh, which will create a new versions of the files (and create a .bak backup version for those you have modified so you can compare then and update accordingly).
While we use the .ptx extension, the manifest is not technically a document, since it does not agree with the schema. However, it must have a specific structure to be used with the CLI. An example of a simple manifest is given in . Note this is version 2 manifest; for a comparison of legacy manifests and the current format, see .
Example of a very simple project manifest.
]]>
The manifest contains a single project element with a ptx-version attribute. This attribute is required and must be set to 2 for the CLI to recognize the file as a valid manifest. Additional optional attributes of project can also be specified, which we will describe below. The project element has a single child, targets, which contains a list of target elements.
CLItargets
Each target must have a name attribute. The name (e.g., web, print) is what you specify when you run build, view, or generate for a specific target (so pretext build web, pretext view web or pretext generate -t web).
CLIformat
The second required attribute of target is format, which must be one of html, pdf, latex, custom, epub, kindle, or braille (although the last three of these are still experimental, as of 9/1/2023).
With just these attributes, as with the manifest in , the CLI assumes your project uses default values throughout. The following defaults are constructed from the default value for an attribute of the root project element with the default value for an attribute of a particular target element. Each of the two pieces can be overridden. The net default folders are:
The source is source/main.ptx.
The publication file is publication/publication.ptx.
Output is stored in output/ (with each target in a subfolder identical to the target's name).
The staging directory to preview deploys is output/stage.
Again, each of these can be modified using the appropriate attribute of either the root project element or a particular target element.
In and we give all the attributes you can have on the project and target elements, respectively. Some attributes can be specified for both elements. In such cases, the values will be paths, and the path given in the target's attribute will be relative to the path given in the project's attribute. This can be useful, for example, if all targets have publication files in the same folder, but the files for some targets are different.
All paths described in are given relative to the root of your project (the location of the project.ptx file).
Attributes available for the project element.
AttributeDescriptionptx-version
Required. Must have value 2.
source
Optional, default: source. Path to folder holding main source file.
publication
Optional, default: publication. Path to folder holding publication file.
output-dir
Optional, default: output. Path to folder in which output files/folders for each target will be created.
site
Optional, default: site. Path to folder holding user-provided landing page for deploying multiple targets.
stage
Optional, default: output/stage. Path to folder where deployable targets will be collected before they are deployed.
xsl
Optional, default: xsl. Path to folder holding custom xsl files.
asy-method
Optional, default: server. Valid values: server or local. Used to specify whether asymptote images should be generated using the server asymptote version or a local asymptote install.
generated-cache
Optional, default: .cache. Path to folder holding cached versions of some generated assets.
cname
Optional, default: None. The custom domain you want to use for a deployed target through github pages. Only needed if you set a custom domain.
Any file paths described in attributes of a target element are relative to a corresponding attribute value from the root project element.
Attributes available for the target elements.
AttributeDescriptionname
Required. The name you use when executing a CLI command.
format
Required. Valid values: html, pdf, latex, epub, kindle, braille, webwork, and custom. The format the target will be built into.
source
Optional, default: main.ptx. Path to the root source file of the project (relative to the value of the source of project).
publication
Optional, default: publication.ptx. Path to publication file (relative to the value of publication attribute of project).
output-dir
Optional, default: the value of name. Path to folder in which output files/folders will be created (relative to the value of output-dir attribute of project).
output-filename
Optional, default: generated by pretext. Only valid for formats that produce a single output file. Path to output file to be built (relative to the value of output-dir of the same target element).
deploy-dir
Optional, no default. Path to subdirectory of deployed site where this target will live. If deploying multiple targets, then this attribute must have a value for it to be deployed.
xsl
Optional, no default. Required when format is custom. Path to custom XSL file (relative to the value of xsl attribute of project).
latex-engine
Optional, default: xelatex. Valid values: xelatex, pdflatex, or latex. Only used on targets that build with latex, to specify what latex command to call in that step.
latex-source
Optional, default: no. Valid values: yes or no. Only used on pdf format targets. If yes, the LaTeX source file will be included in the output directory. Equivalent to using the --latex flag with pretext build.
braille-mode
Optional, default: emboss. Valid values: emboss or electronic. Only used when format is braille, to specify the mode for braille.
platform
Optional, no default. Only valid when format is html. Valid values: runestone. Used to specify that the target will be hosted on Runestone.
compression
Optional, no default. Only valid when format is webwork or html and platform is not runestone. Valid values: scorm or zip. Results in output being compressed (as .zip file), and if the value is scorm, the required scorm manifest is also include in the archive.
asy-method
Optional, default: server. Valid values: server or local. Overrides the asy-method attribute on project.
standalone
Optional, default: no. Valid values: yes or no. If yes, the target will be built as a standalone document. This will place the output adjacent to the source file, unless output-dir is specified. Useful for creating a target for which you will specify a different source file (using the -i flag when building).
Example Project Manifest
To illustrate how the relative paths work, with attributes on both project and targets elements, consider the following manifest:
]]>
Here, the web target, with format html, will build from the root file "src/main.ptx", using the publication file "publication/publication.ptx", and will place the output in the folder "out/web".
The print target, with format pdf, will build from the file "src/main-print.ptx", using the publication file "publication/pub/publication.ptx", and will place the output in the folder "out/print".
stringparamCLIstringparamxmlid-rootCLIxmlid-root
In addition to the attributes available for target elements, there is one optional child element, stringparams, which can be used to specify string parameter options (see ). These are specified using an attribute for the name of the string parameter, and the value of the attribute is the value of the string parameter. Multiple string parameters are set using multiple attributes on the single stringparams element. For example,
<stringparams author.tools="yes" html.css.extra="external/custom-style.css" />
ExecutablesCLIexecutables
uses several external tools to build and generate assets. The CLI will automatically find these tools if they are installed in the default location for your operating system. If you have installed them in a non-standard location, you can specify the path to the executable in a executables.ptx file, at the root of your project. In we give the defaults and formatting of such a file.
Example of version 2 executables file
]]>
Prior to version 2 of the CLI, these executables were contained in the project.ptx file. If you are using a version prior to 2.0, see .
Using outside of a projectstandalone files
Most of the time you will want to set up a project folder that will hold all the files you need for your project, including the project.ptx and publication.ptx configuration files, your possibly modular source files, and external assets. However, it is also possible to use to process a single file, similar to how you might with . Starting with the CLI version 2.19.0, this can be done easily.
Suppose a colleague sends you a file mypaper.ptx which you save to your ~/Desktop folder. You can process this file using the following command.
pretext build pdf -i ~/Desktop/mypaper.ptx
This will create a mypaper.pdf file in the ~/Desktop folder (i.e., adjacent to the source .ptx file).
You can also get portable HTML output using pretext build html -i ~/Desktop/mypaper.ptx, which will create a folder mypaper_html in the ~/Desktop folder. Note that often a portable HTML build will result in a single .html file, so this can easily be shared with others or uploaded to a web server.
Getting help
CLI-v debug
In addition to checking pretext --help, pretext build --help, pretext view --help, etc, you have a few options when you run into trouble. If you are getting errors that don't make sense, even after trying follow the suggestion of the error messages, look at the time-stamped log files inside the logs folder (or the cli.log file if you are using a CLI version prior to 2.0), which includes debug-level log messages. You can also run the CLI using this higher level of verbosity using the -v debug option, which must go right after pretext command, before the subcommands (build, deploy, etc.). That is, enter the following for example,
pretext -v debug build web
pretext supportCLIsupport
You can also ask for help on the google support group. When you post there, please run pretext support from inside your project's folder and copy the output into your help request.
For a large project, such as a book, you will likely want to split up your source into logical units, such as chapters and sections.
The -CLI supports an inclusion mechanism automatically (see for what you need to do different for xsltproc).
Suppose your book on animals has a chapter on mammals with a section on monkeys. Then you need to do the following:
For the file containing the chapter tag for the chapter on mammals, place the attribute
xmlns:xi="http://www.w3.org/2001/XInclude"
on the outermost tag in the file.
Within the chapter element for the chapter on mammals, add the line <xi:include href="monkeys.xml" /> to pull in the section on monkeys at that location. The href attribute can point to a file in a subdirectory, but will be interpreted relative to the location of the file containing the mammal chapter element.
Several comments are in order.
Begin small and start a project without using modular files. Modularizing seems to add a layer of complexity that sometimes obscures other beginner's errors. So get comfortable with a single source file before branching out.
The XML specification requires that a source file only contain a single outermost element. So for example, two chapter elements cannot go into the same file as simultaneous outermost elements.
There will always be a main file that contains the pretext element as its single outermost element. In this Guide we will call this the top-level file.top-level file
Any file that uses an xi:include element will need the xml:ns declaration on the outermost element. So in our animal book example, the top-level file, which presumably includes several chapter files, would need this declaration on the pretext element.
In practice, there is not a lot to be gained by creating a subdirectory structure mirroring your modularizationall your source files can go into one big directory and the XML hierarchy will take care of the organization. I do sometimes like to name my files accordingly, so for example chapter-mammals.xml and section-monkeys.xml.
When you validate your source (see and ) you will always point to the top-level source file (the one with the pretext tags).
The book generated by pretext new demo has modular source, so is a nice starting point to see how this works. Other examples are the sample book in examples/sample-book amply demonstrates different ways to modularize parts of a project (but in no way should be taken as best practice in this regard). This guide, in doc/author-guide is a simple example of modular source files, and might be a good template to follow for your book.
See for some of the finer points of this topic.
Verifying your Source
A schemaschema, in our case a RELAX-NG schema, is a formal specification of an XML vocabularyschemaXML vocabularyXML vocabulary (the allowed tags and attributes), and how they relate to each other. So, for example, the restrictions that say you cannot nest a book inside of a chapter, nor can you nest a subsection in a chapter without an intervening section, are expressed and enforced by the schema. One of the beauties of the schema is that it is written using a very specific syntax and then there are tools that use a schema as input. In particular, a source file that conforms to the schema is said to be validvalid schema. You should strive to always, always, always have valid source files, and therefore you want to regularly verify that this is the case.
You can find the schema in the schema folder of the GitHub repository. The version we author and maintain is pretext.xml, which is used to create pretext.rnc, which uses the compact syntax of the RELAX-NG specification. By providing the schema and your source to a program called a validatorvalidator you can check if your source is valid, and if not, why. See for the details on doing this.
The -CLI also has some basic validating capability: after running pretext build, open the .error_schema.log file in the main folder of your project to see validation errors.
If you author source that is valid , then a conversion of your source to another format should succeed. And maybe in the future, somebody will create a new conversion to a new output format, and your source should still produce faithful output, with no extra effort from you. Think of the schema as a contract between authors of source files and developers of converters. This is different than performing a conversion and getting good-looking outputthat can just be a happy accident and your source may not succeed with some other conversion.
We cannot stress enough the importance of setting up and performing regular validation and preventing many consistent errors of the same type. You will learn what elements are allowed where, and which are not, from the messages produced by validation errors. And when a conversion fails, or produces spectacularly incorrect output, validating your source should be your first reaction. Always.
The other beauty of a schema is that you can supply it to a text editor () and then you will get context-sensitive help that greatly assists you in using only the tags and attributes that are allowed in a given location of your source. XML Copy Editor is the one editor like this we have tried, but we do not have extensive experience.
We have devoted an entire chapter () to amplifying this introduction and providing more details, such as where to find details on installing a validator.
Customizations
There are some aspects of your output that are entirely divorced from the actual content, and are presumably all about how that content is presented. Two good examples are the size of the font used in /PDF/print output, and the granularity of web pages in HTML output (by this we mean, is each web page a whole chapter, a whole section, a whole subsection?). Producing output with varying values of these parameters does absolutely nothing to change your content in any way, and so should not be a part of your writing, nor a concern while you concentrating on your writing.
Therefore, many aspects of how your writing is presented is accomplished by your publisher. Note that this is very different from your role as the author of your project. When your project is mature then you can consult with your publisher about how to best present your project to your audience. An entire part of this guide is devoted to this process (), but if you are curious, the first part of can serve as an introduction.
Directory Management
Organizing your source files, external assets (like images) and other support files, can become a challenge as your project grows. supports managing external and generated files (including images), but this requires some setup and understanding of the correct way to specify assets in your source. This section explains both those steps.
If you are starting a new project, using the -CLI (with the command pretext new book, for example), then most of the setup portion is done for you.
External and Generated Files
Early in your writing project, you will decide you want to add images, embedded YouTube videos, interactive demonstrations, or other enhancements that are more than just words on the page. Some of these objects will be created outside of your project, such as a photograph. But some images are described within your project, such as a diagram authored using the TikZ package, and will help generate different versions of the diagram in different file formats for use in output formats that are not . For an embedded YouTube video we provide tools that will automatically get you a thumbnail preview image from a YouTube server, which will then appear in your non-interactive PDF version. We describe the photograph as external, since it comes from somewhere else, independent of anything you authored in your source. In contrast, an SVG image of your TikZ diagram for HTML output, and a preview image of a YouTube video for use in a print version, are described as generated since they are dependent on what you have put in your source, and automates almost all of their creation for you.
As these files are added to your project, you want to organize them in a specific (but flexible) way. First, make a directory (folder) for your external files. You can use any name you like, including external. Within reason you can place it wherever you want. Natural choices are as a peer of a source directory that holds your files, or as a subdirectory of your project's top-level directory that may hold all your files. You can also organize this directory with subdirectories of your own choice, if that helps you stay organized.
Similarly, you need a separate directory for your generated files. As above, it can be named anything, including generated, and you can place it almost anywhere (close by). But now, it must have a precise directory structure, described below in , according to what sort of generation produced the files.
After you have read this section, see the discussion of generated and external files in for some good examples of why this flexibility is useful.
Managing Directories
The name, and location of the external and generated directories (both of them, always) are then specified in a publication file (see for the precise specification). The values of these attributes are relative pathnames to the directories, relative to the location of the main file for your project. Let us take a look at an example.
Sample Directory Management
Suppose you are M.Jones, the author of the AOTA project, and so you might have the following directory and file structure. There is some sort of overall path from the root of your entire filesystem to your project, so on Linux this path could be/home/mjones/books/and on other operating systems it will be slightly different, but those differences are not relevant here. Inside of books there would be an aota directory for the AOTA project, structured as follows. We are most interested in the ext and gen directories.aota source aota.ptx alligators.ptx dogs.ptx publication print.ptx online.ptx epub.ptx ext photos slow-alligator.jpeg fast-whippet.png movies alligator-chases-whippet.mp4 data deer-weights.csv gen latex-image marsupial-life-cycle.svg youtube sloth.jpg
In your publication files you would then have the entry, as a sub-element of the source element,<directories external="../ext" generated="../gen"/>Notice that we have deliberately named our directories ext and gen as part of this illustration, so that they are not identical to the attribute names on the directories element. The two attribute values are relative to the location of the main file, in this case aota.ptx. The two periods, .., mean to go up a level, here to the aota directory, then the slash indicates a step down to either gen or ext. Note that latex-image and youtube within genmust be specified exactly that way. Now every production tool can deduce where your files are.
How do you specify in your source which file to use where? Suppose you want your two (external) photographs to be used in a sidebyside element. You would author<sidebyside widths="50% 30%"> <image source="photos/slow-alligator.jpeg"/> <image source="photos/fast-whippet.jpeg"/><sidebyside/>Notice that the values of your source attributes do not include ext or ../ext. This gives you the freedom to move your ext directory or rename it, and then you only change the publication file and not your source. The decision to have the subdirectories photos and movies are not easily changed, since they will be in your source, but they may have value for the organization of your project.
The chase video is of your own creation, you have included it as part of your project's files, and will be hosting it on your web server, where the rest of your HTML version is made available for viewing. You might author<figure xml:id="fig-chase"> <caption>Alligator chases whippet</caption> <video source="movies/alligator-chases-whippet.mp4"/><figure/>
The situation with the generated files is presently a bit more complicated, but will eventually be transparent to an author. The marsupial life cycle diagram has been authored in your source using the language from the TikZ package, which is delimited as a latex-image element. When building a PDF from output this is a no-brainer just puts your TikZ code into the file. But how about HTML output? The pretext/pretext script will manufacture a standalone version of this image and then convert it to an SVG, and this version will work very well in the online version of your project. What do you author?<figure xml:id="fig-life-cycle"> <caption>Marsupial Life Cycle</caption> <latex-image xml:id="marsupial-life-cycle"> -- some TiKZ code here -- </latex-image><figure/>With the right options to the pretext/pretext script, the file marsupial-life-cycle.svg will be generated. Presently, you must explicitly tell the script to place the output in the directory/home/mjones/books/gen/latex-imagebut we plan to make this the default behavior. Or you could generate the file anywhere, and move it to the latex-image subdirectory of gen. Notice how much of the process of creating a companion SVG image (which excels in a web browser) is automated, and how the xml:id attribute and the directories in the publication file are used to keep everything coordinated. The latex-image directory is not negotiable, it is the home for every image authored using a latex-image element (see ).
The slow sloth video was created by somebody else and posted to YouTube as a super slo-mo 240fps video. You authored it within a figure simply by using the ID of the video on YouTube.<figure xml:id="fig-sloth"> <caption>Slow Sloth</caption> <video xml:id="sloth" youtube="DJWEqYcxUl8"/><figure/>With the right options to the pretext/pretext script, the file sloth.jpg will be generated by requesting a thumbnail preview from YouTube's servers. Note how this content is generated from your source (precisely, the YouTube ID) through an automated process. Presently, you must explicitly tell the script to place the output in the directory/home/mjones/books/gen/youtubebut we plan to make this the default behavior. The youtube directory is not negotiable, it is the home for every server-generated preview image for an embedded YouTube video (see ). (Note that any video may have an author-provided image as its preview, and then this would be considered an external file.)
As you can tell from the above, different output formats have different expectations for additional files and when producing an output, there may be different expectations for where exactly where to find files. A good example is the EPUB format, which despite being basically an HTML format, is still very rigorous about names, formats, and locations for image files. With the above procedures you provide just enough information for to handle the remainder of the complexity for you, without you becoming an expert with the EPUB standard. So the pretext/pretext script can automatically produce PDF, HTML, EPUB, Kindle, and braille, each in a single step.
We have skirted one finer point of all this. How does an author know if a file is external or generated and what are the supported subdirectories of the generated directory? A source attribute will almost always point to a file that belongs in the external directory. An exception is the preview attribute which is used to specify static images to use in outputs like PDF or print to represent more dynamic objects employed in more-capable electronic formats (videos, audio, interactives). (Please alert us to other exceptions!) The list below describes the subdirectories of the generated directory. The files that belong in these directories are all generated by the pretext/pretext script using aspects of your authored source.
Subdirectories of the Generated Directory
asymptote
Images described by Asymptote code in an asymptote element.
dynamic_subs
XML files needed for dynamic fill-in-the-blank exercises.
latex-image
Images described by code in a latex-image element.
mermaid
Images described by Mermaid code in a mermaid element.
prefigure
Images described by PreFigure code in a prefigure element.
preview
Static images of dynamic content, created with automatic screenshots via a headless web server.
problems
MyOpenMath problems in static forms.
qrcodes
QR codes for PDF files that point to live versions of some interactive elements.
sageplot
Images described by Sage code in a sageplot element.
trace
Program trace data for codelens elements
youtube
Static images for YouTube videos, automatically downloaded from YouTube servers.
Just one more obscure situation to address, requiring a peek under the hood. Occasionally there are external files used in ways that cannot see them and provide the management necessary. One example is a file of data points used to generate a plot using the latex-image element. Suppose we have a file/home/mjones/books/ext/data/deer-weights.csvas shown in . We will use this inside of a latex-image element employing PGF code with a table {}; construction. As part of building the output, this file will be copied to a temporary directory asexternal/data/deer-weights.csvNote that your ext has been converted to external as files are copiedthat is not a typo. is not going to examine all your code and try to guess where you have requested a file. So you need to author\addplot table {external/data/deer-weights.csv};
using the filename created after the copy. Then the compilation will locate the file successfully. The external directory after the file copy is not negotiable, that is what is always used.
Backward-Compatibility and Migration
Directory management was added in the middle of 2021. For projects existing at that time, it is an opt-in feature. In other words, existing projects can still be built by moving additional files in the same ways as always, so long as you do not have a directories element in your publication file.
However, it is absolutely necessary to opt-in to directory management (via the publication file) if you want to build EPUB or Kindle formats. You will also then be able to build PDF and HTML output with a single invocation of the pretext/pretext script, without any extra effort to place additional files in the right places.
New projects should definitely adopt directory management as their project develops. New features and tools will assume this. We now describe how existing projects can migrate.
Previously there was not a firm distinction between external and generated files, though they were specified differently in source. Many authors placed both types of files into a single directory, and since the default for locating generated files was a directory called images, this was often the single directory employed. Thus, external files would be specified with a source attribute such as<image source="images/bobcat.jpg"/>A solution, if a bit clunky, is to make a new directory named ext and copy images and its contents to become a subdirectory of ext. Then place a relative path to ext in the external attribute in your publication file. This means you will not have to edit your source at all. At some later time, you could remove all references to images in your source and move the files themselves directly into ext.
For generated files it will be a bit more involved. You need a new directory, such as gen, and you need to add it to your publication file with the right relative path. Then you will need to create as many of the relevant directories from as necessary, as subdirectories of gen. Populate these subdirectories with the relevant files, which may have been located in images before you started migrating. There was a string parameter, directory.images, that could be used to specify an alternative directory to the default, images. That parameter is now announced as deprecated, but will still be effective until your project opts-in.
As another short-term option for Mac or Linux users, it is possible to take previously existing resource directories and make symbolic links from a previous image directory, such as my_images, to the names provided here. In that case, assuming the directory structure provided here, a command like ln -s my_images external (issued in the directory containing my_images) would create the correct symbolic link.
Creating Images with InkscapeInkscapevector graphicsInkscape
A strength of is the ability to create diagrams and images with editable source code, embedded alongside your other source material (, ). But sometimes you want, or need, to be more artistic. Inkscape is a great tool for creating images. It ticks all the boxes: open source, mature, cross-platform, standards-compliant. Bethany Llewellyn helped research Inkscape capabilities for this section.
Inkscape's native file format is Scalable Vector Graphics (SVG). As the name suggests, this translates into excellent support for vector graphics. (See and for the distinction.) Why use Inkscape?
SVG files are small and scale smoothly when you zoom in on a web page. So this format is our top choice for how images are realized in the HTML output. They will also work well in formats based on HTML, such as EPUB.
The SVG format is how Inkscape works with images internally. The file format it calls Inkscape SVG is valid SVG, along with additional information to make editing better and/or easier. So any author may come back and easily edit an image saved in this format.
Inkscape will export easily and efficiently to Portable Document Format (PDF), another vector format. This is our top choice for realizing images in output, which will become print or PDF output.
SVG is an XML format, just like .
When would you use Inkscape?
Your image is more free-form and artistic than what a source language like TikZ or Asymptote will provide, and you do not need to embed any mathematical symbols.
You do not want to learn some new source language (there is a significant learning curve for most of these).
You want to annotate screenshots (see ).
Note that when you save an image as SVG from within Inkscape, you have two choices: Plain SVG and Inkscape SVG. The latter contains additions to the former which make subsequent editing better and/or easier. So, you can choose to use Plain as the format used for your HTML output, and it will be smaller and provide great performance. But you can also make an Inkscape version of the same name, and distribute it with your source files in a different directory, so you and others can edit it easily later.
Annotated Screenshot
Suppose you want to include a screenshot of some application, and point out some aspect of it.
View the application on the highest-resolution monitor you can get your hands on. Not a laptop and not a phone.
Zoom in, so the area of interest fills as much of the screen as possible. You are trying to capture as many pixels as possible.
Use a screen-capture tool that allows you to save the result as Portable Network Graphics (PNG). This is a lossless format, and you may be able to elect a high level of compression as part of the file-saving process.
The only raster format explicitly supported by Inkscape is PNG. So you can import the screenshot into Inkscape, and use the tools there to add arrows, red ovals, etc. to highlight key parts of the image.
Save the result as PNG, since it already has a significant raster component, for use in HTML conversions. And save again as PDF for use in print and PDF output.
Images Described in Source
We believe it is important to preserve a record of how diagrams and other graphics are produced. This can be easy when a graphics language is employed to describe the graphical elements, rather than creating a bit-mapped image with some other interface. So we have asymptote, latex-image, and sageplot for elements holding code to produce diagrams or imagesimage.
The upside to this is that small edits to the code can easily accomplish minor changes or corrections necessary for the images. The macros provided by an author can be used in the text and in a diagram, leading to greater consistency between the two. Finally, starting from source, we can do the best possible job of producing image formats that are compatible with the document output formats and which scale smoothly in PDFs and in web browsers.
The downside is that processing these images requires various helper programs, such as pdflatex and sage. This requires installing the helper program and perhaps setting the path to it on your system. This is done inside the project.ptx manifest as children as the executables element.
Whenever you need to process images described in your source, run pretext generate. This will build the correct image output file for your specified target (use -t [target]). If you would like to build additional image formats, you can add --all-formats to the command.
Author Toolsauthor tools
While your writing project is getting underway, you may want to go in several directions at once. We have two devices, and three reports, which can help you manage this.
You may want to make a forward-reference to some future, not-yet-written material. So you can go<xref provisional="a reminder of future material"/>in your source. In your output, you will get a temporary place-holder of sorts.
Comments in the source code of a computer program, labeled TODO, is a common device to help a programmer remember tasks that need to be completed. You can use a similar device in your source. Use an XML comment, delimited by <!-- and -->, and make the first four non-blank characters spell todo, using any combination of lower- and upper-case you like. Your Author's Report (next) will look even better if you follow that with a colon and a space, but this is not required. So, for example, go<!-- ToDo: include a section on salamanders and their life-cycle --> As an XML comment, you can place this anywhere. Contents need to be plain characters, no XML will be active here. Remember to escape the two XML characters, and also be aware that -- is banned in comments outside of the delimiters.
Use the author.toolsauthor.tools parameter set equal to yes and your and HTML output will be annotated. (See for more on parameters.) Provisional cross-references and todo-comments will be visible and highlighted, and in particular, the output will display an abundance of extra information (maybe too much). The -specific publication file entry for draft mode will activate the draft option (see ). The intent here is to make a rough draft, for an author or collaborator only, reporting as much as possible that is incomplete, pending, or hidden, in the usual output.
For users of xsltproc, the authors-report.xsl stylesheet, found in the xsl/utilities directory, will report all of the provisional cross-references and all of the properly prefixed todo-comments. See .
Keeping Your Source Up-to-Date
Once in a while it becomes necessary to adjust how the vocabulary is arranged, which involves adding or removing elements or attributes, or changing their behavior. When elements or attributes are removed, or their relationships with other elements change, we say that certain items or behaviors are deprecateddeprecated. Fortunately, we can often automate the changes.
When there is a deprecation, a warning is added so that any conversion will report the presence of the old use in the console. Sometimes we can preserve the old behavior, so there is no rush to make changes to your source. Sometimes a change needs to be more urgent. And frequently old behaviors do not get updates or bug-fixes. Our warnings provide advice and information about what you need to do. There are also announcements on public discussion groups, clearly marked as deprecations. Also, the schema will change as part of any deprecation, so the old elements or old use will be reported.
For some suggestions about how to automate the process of adjusting your source, see .
Testing HTML Output Locally
Certain complicated parts of HTML output will not always function when you look at output by just opening files in your web browser. These include knowls, Sage cells, and YouTube videos. This is a consequence of security policies and so will vary from browser to browser. A solution is to run a web server on your own machine, which is much easier than it sounds.
In fact, this is exactly what the -CLI does when you type the following command.
pretext view web
You can replace web with any target name, although it is really HTML builds that benefit from this feature. The CLI uses python to spin up a local web server so you can see a copy of your output by going to the URL the CLI gives as output (usually , although if you are working in a GitHub codespace, this will be different).
There are two useful options that can be used with pretext view to speed up authoring. First, the -b flag will build your source before starting the server (i.e., runs pretext build in the background). Similarly, the -g flag will generate assets prior to viewing.
It is also possible to specify whether your server is public or private (on your local network) with the -a option, and to specify a port other than 8128 with the -p option. (Run pretext view --help for more.)
Another option, in the case where you know where your output lives (such as when you use the pretext/pretext script) is to use Python itself to start a simple web server. Ideally, first set your working directory to the location of your HTML output. Then in a console, at a command-line:
python3 -m http.server
Which tells you to open your browser using the address http://0.0.0.0:8000/. Ctrl-C in the terminal will kill the server when you are done. See the Python documentation for more options.
Testing HTML Output Globally
Just like testing files locally can sometimes be misleading, testing on your own server can sometimes be misleading. For example, on some university campuses, frequently accessed content (your textbook!) can be cached. So when you update your files, it might not look like anything has changed. An easy, free, quick solution is to place your HTML temporarily at Netlify Drop as a double-check on the source of any problems.
This can also be a great solution if you do not have a server setup and want help from the community with your HTML output. (See .)
Doctesting Sage Code
Adding computer code to your textbook is a tricky proposition. You can propose that it is merely an illustration, and not meant to have all the necessary details, or you can make it exact, correct and executable, and then risk inevitable changes to render your code obsolete. At least you have the option of editing and reposting online versions quickly and easily.
One of our main motivations for this project was mixing in code from the powerful, open source, mathematical software project, Sage (). When you add example Sage code to illustrate mathematical ideas, you are then encouraged to also include expected output in the output element. Here comes one of the powerful advantages of XML source and XSL processing.
This process currently requires xsltproc, and is described in .
The pretext/xsl/pretext-sage-doctest.xsl stylesheet, used in the usual way, will create one, or several file(s), in exactly the format Sage expects for automated testing. So all your words are gone, and all your Sage input and output is packaged so Sage can run all the input and compare the results to the expected output. See for details on obtaining more than one file.
We have many years' experience testing hundreds of non-trivial Sage examples from textbooks, for linear algebra and abstract algebra. Roughly every six months, we discover ten to twenty examples that fail. Frequently the failures are trivial (usually output gets re-ordered), but some are significant changes in behavior that leads us to re-word surrounding guidance in the text, and in a few cases the failures have exposed bugs introduced into Sage. It has been relatively easy to do this maintenance on a regular basis, and if it had not been done, the accumulated errors would be enough to greatly degrade confidence in the accuracy of the examples.
Exact details for this process can be found in . Note that Sage is really just a huge Python library, so it might be possible to test pure Python code with this facility, but we have not tested this at all. Similar support for other languages can be considered if requested for use in a serious project.
This Guide, along with the sample article and sample book distributed with the source, provide a wealth of examples of how to author in . However, at some point, you will undoubtedly encounter a situation where some of your text fails to appear in your output or the -CLI produces an error. Those are good moments to start investigating the formal specifications of the vocabulary, as most likely you tried to use something in a way incompatible with those specifications. This chapter will help you understand, and work with, the formal specification of .
RELAX-NG Schema
A schemaschema is a set of patterns which describe how the elements of a language may be combined. The vocabulary is described by a RELAX-NG schema, which is included in the distribution. (RELAX-NGRELAX-NG stands for REgular LAnguage for XML Next Generation and is pronounced relaxing.) In general terms, the schema tells you which elements are available, which attributes they may carry, and which other elements they may contain. You can then infer where you can place an element. The schema also indicates if an element is required or optional, if it may be repeated, or if it needs to appear in a prescribed order with other elements, and may limit attribute values.
Besides providing a concise formal description of the vocabulary, your XML source and the RELAX-NG schema can be provided to tools which will automatically validate your source against the formal definition. The best validatorsvalidator will provide accurate and helpful messages about errors in your source. Further, some editing tools will use a schema to provide context-sensitive assistance on available elements and attributes as you write, sparing you typographical errors, misplaced elements, and the need to frequently context-switch in order to consult reference material.
The schema does not tell you anything about how an element or attribute will behave. But hopefully there is not much ambiguity about the behavior of the content of a title element nested within a chapter element. You would not be surprised to see that content duplicated in the Table of Contents of a book. The purpose of this guide, and other documentation, is to help you understand what to expect. It is better to think of the schema as a contract between you and the developers of conversion tools. If your source conforms to the schema, then a conversion tool will produce reasonable output that conveys the structure and meaning of your writing. Twenty years from now, when GEFF is the dominant document format, a conversion of your source will preserve your meaning, while also taking advantage of the amazing features of GEFF. (GEFF stands for Great Electronic Format of the Future.)
In summary, the RELAX-NG schema
is the formal specification of the vocabulary,
is a key input to validation,
can be incredibly helpful in the editing process, and
provides guidance to implementors of conversions.
As such, we are very deliberate about changes, and hope over time to make changes only very rarely.
Validation Plusvalidationadditional
The RELAX-NG schema is very good at specifying parent-child relationships, in other words, which elements can nest directly under/within other elements. But we have situations where the possible elements depend on grandparents, great-grandparents, or older ancestors. An example is the var element, which is only useful if it is contained somewhere within a webwork element. You can describe these situations with RELAX-NG, but it becomes cumbersome and redundant. So our strategy is to allow some prohibited situations in the RELAX-NG schema, and use an additional stylesheet to identify the prohibited situations. Continuing our example, the RELAX-NG schema makes it appear that var can be used many places, but the validation-plus stylesheet provides a helpful message indicating you have used it outside the context of a problem.
You have put a lot of time and effort into your source, and we want to help you make the best possible output. A little more effort from you will allow us to make the fine distinctions that produce really high-quality output. So this stylesheet is our best attempt to help you make the very best possible source. It is full of (automated) advice and warnings.
To use this stylesheet, simply apply it at the command-line with xsltproc like any other stylesheet.xsltproc -xinclude -o report.txt schema/pretext-validation-plus.xsl aota/animals.xmlThe output will be a text file that indicates the suspect element by its location in the document tree.
You may get lots of output on first use, especially if your source was born somewhere else, not meant for use by . We could make improvements in managing all this output, but for now we have one suggestion. Sorting on the actual messages realyed, rather than a hodgepodge of messages in document order, can help you identify consistent situations that you might be able to fix in bulk. First, apply the stylesheet again, but now use the stringparam single.line.output set to the value yes (). As you suspect, this will put all the output on one line, and the message text will be in the third field, which can be used by the command-line utility sort,cat report.txt | sort -k 3 > report-sorted.txt
We once used Schematron for this purpose. Its author, Rick Jelliffe, says Schematron is a feather duster to reach the corners that other schema languages cannot reach. Our additional stylesheet is similar.
Why do we have two tools for validation? We have explained the necessity of an extra stylesheet. Why not describe the entire grammar in this stylesheet? The reason is that RELAX-NG is a recognized standard, and so can be converted to other formats, and may also be utilized by XML editors or integrated development environments (IDE) to provide features like code completion. Besides, it would be very tedious to provide all the code for checking everything that is possible and everything that is not.
Versions of the Schemaliterate programming
The schema is born within a document, schema/pretext.xml, where surrounding text provides documentation and guidance on implementation. The literate programming support in (start at ) is used to produce a file, schema/pretext.rnc, which is a RELAX-NG specification in compact syntax. HTML and PDF versions are available on the website as documentation. We provide some guidance below on reading the compact syntax.
The compact syntax is a faithful representation of the more verbose XML syntax. And vice-versa, so it is possible to translate back-and-forth between the two syntaxes. In practice, we convert the compact version to the XML version, producing a file schema/pretext.rng. Some tools require this latter (100% equivalent) version. We perform this conversion with trangtrang, an open source program written by James Clark, one of the authors of RELAX-NG. (trang stands for TRAnslator for relax NG.) The compact syntax is often indicated as RNC and the XML syntax is often indicated as RNG.
XSDXSD (XML Schema Definition), from the World Wide Web Consortium (W3C), is an alternative to the RELAX-NG syntax. It cannot express as many situations as the RELAX-NG syntax, but we have created the schema in a way that trang can convert to an XSD specification without introducing any more-permissive approximations. But the XSD version seems to have a few small inaccuracies, and in particular should not be used for validation. That said, schema/pretext.xsd may be useful for tools ( editors) that require it.
The files pretext.xml, pretext.rnc, pretext.rng, and pretext.xsd are all provided in the schema directory under revision control, and are updated by the schema/build.sh script when changes are made to pretext.xml. So as an author, you do not need to install or run trang and should just link to the (continually updated) copies in your pretext directory.
We once provided a document type definitiondocument type definition (DTDDTDdocument type definition) as a description of the vocabulary. Mitch Keller wrote an excellent initial version of this chapter to help others understand similar principles in the context of the DTD. However, the DTD was not sufficiently flexible to handle elements that behave differently in different locations, such as an introduction to a chapter versus an introduction to an exercisegroup. As further evidence, trang will knowingly refuse to convert the schema to a DTD since the DTD syntax is not sufficiently expressive to describe .
If you are interested in conversions, more tools can be found at and we have information on installation in . We would be pleased to learn more about authors' experiences with other converters.
Reading RELAX-NG Compact Syntax
The compact syntax might remind you of Java or C++ syntax. We do not provide a tutorial here, but do provide some hints on the various delimiters and special symbols, which may make it fairly easy to see your way through to the meaning. The fundamental object of the schema is a patternpattern, and named patternsnamed patternpatternnamed pattern can be reused in order to reuse common patternscommon patternpatterncommon pattern and modularize the description. One approach to validation is to remove portions of your source that match required patterns until only optional material remains. Notice that if you were to chase your way through substituting the named patterns with their employment, you would have a single (large) pattern which every possible document would match, and by definition an XML document that does not match is not . (OK, that is a slight exaggeration, see .)
RELAX-NG Compact Syntax Summaryelement foo { }Define foo and childrenattribute bar { }Define bar and valuestextSequence of characters (any length)mixed { }Mixed-content, characters interleaved in patternExactly one (required)+One or more (required)*Zero or more (optional)?Zero or one (optional),Sequence, in prescribed order|Choice&Sequence, any order( )Grouping=Define named pattern|=Accumulate named pattern as a choice
Validation
We cannot stress enough the importance of validatingvalid schema your source early and frequently. Error conditions and messages can be built into processing (we have some anyway), but they are much better accommodated by tools built for just this purpose. If your processing with the -CLI suddenly fails, or if chunks of your content fail to materialize, it is highly likely that a validation check will tell you where the problem lies. If you integrate regular checks into your workflow, then sudden problems can be traced to recent changes. (Perhaps paired with using git bisect, in the extreme. You are using revision control, aren't you?)
We use jingjing for the first step, RELAX-NG validation. This is an open source companion to the trang converter described above. As a Java program, it should be cross-platform. It is also packaged for Debian and Ubuntu Linux, and is available in a GitHub codespace. It provides messages keyed to the line number and character number of your source, and the messages are very clear and informative. See notes on installation in . We would be pleased to learn more about authors' experiences with other validators.
You might get a lot of error messages the first time you use jing. If so, it might be that many of them are the same situation. If you pipe the output of jing through sort -k 2 then the output will group similar messages together.
Previously, we used xsltproc as the XSLT processor. We no longer recommend this option for authors, who should be using the -CLI. However, if you still use xsltproc, then you likely automatically also have the xmllintxmllint program, which will perform validation with RELAX-NG schema. Our experience is that it bails out at the first warning, or at least does not process the remainder of the current subtree, and that the error messages are often very misleading. We will not support questions about validation based on output from xmllint.
The second step is easier, since it is an XSL transform. In other words, it is just another stylesheet, which you run against your source, with a processor like xsltproc. This stylesheet encoding additional restrictions is unique to and will report exceptions that are too difficult to express with RELAX-NG. So validation is two complementary steps. See for the exact syntax for using this stylesheet.
Schema Browser
Through the efforts of Jason Siefkin, and other contributors, we have a schema browser that lets you easily and naturally explore the schema through web pages, many with example uses. Look for a link in the Documentation section of the website.
Do not be intimidated by the list of roughly 300 elements available in the All Tags panel. Many are configuration options, many are special-purpose, and many you will never use. (Someday we will do lexical analysis on a substantial range of texts to see just which elements do get used most frequently). We hope to document elements which have complicated restrictions that cannot be expressed with the parent-child relationships of the schema as part of this tool.
An excellent way to contribute to is to help flesh out aspects of the schema browser with more, and better, information for all authors.
Editor Support for Schema
We collect summary information about editors that make use of schema. See for more specific information, links, .
Schema Support in EditorsEditorFormatsNotesVisual Studio CodeRNGValidation and completion, open sourceemacsRNCSchema-sensitive editing, open sourceXML Copy EditorRNG, XSDValidation, tag completion, open sourceoXygenRNC, RNGValidation and completion, commercial
This long chapter provides the main documentation for a variety of the features of . Some sections are just stubs and need to be written. Requests for sections to prioritize are welcome, though some sections are waiting for features to stabilize.
Paragraphs
Much of your writing will happen in paragraphs, delimited by the simple tag, p. You are reading one right now. They are a basic building block of divisions, and also a basic building block of other structures. For example, an ordered list, ol, contains a sequence of list items, li, and a typical list item might be a sequence of paragraphs. (Do not confuse this element with the anomalous paragraphs subdivision, ).
Paragraphs are a choke-point of sorts. Many tags can only be used within paragraphs, and many others cannot be used within paragraphs. Notice too, that we do a certain amount of manipulation of whitespace in a paragraph, in ways that you may not even notice.
The following subsections together contain allowed, or encouraged, markup within a paragraph. Many of these may be used in captions and titles, but some of the more complicated constructions (which appear later here) cannot be used in captions or titles.
One more comment: typewriters, computer keyboards, and the ASCII character set have together conspired to limit the full range of characters that typographers and printers have used historically. A case in point is the hyphen, which is a single key on a keyboard. However, there are at least three common dashes of differing lengths (hyphen, en dash, and em dash), and in the context of mathematics or a computer program, the hyphen might be the binary operation of subtraction or the unary operation of negation. Another example is the upright, or dumb, quote mark that is a single key on a keyboard, while careful typography will employ smart, or curly, quote marks that have left and right variants. (Sometimes called 66 and 99 based on their shape.) will help you navigate this complexity, but you will want to use keyboard characters or markup appropriately. So if you care about communicating clearly, and making your writing easy for a reader to use, absorb the details that follow and the philosophy they implement.
We will say it again. is a markup language, and our various output formats (, HTML, EPUB, Jupyter notebooks) in turn employ markup languages. These use different escape characters and give different characters special meanings. Our job is to insulate you from this variety, so you can concentrate on authoring your ideas.
We begin with some simple grouping elements which contain several excellent examples of the importance and utility of careful markup. There is a plethora of empty tags for individual characters, and these are very important (see ). We defer them to the end of this section, since they are not as instructive, but do not think this means they are an afterthought. They can be extremely critical for successful conversions. Also do not miss in the conclusion of this section.
Simple Markup in Paragraphs
Beyond empty tags that translate to various characters, there are relatively simple tags that can call attention to various portions of a sentence, or generate more complicated constructions than described above.
Most, if not all, of the markup in this subsection may also be used within titles and captions, though they might lose some of their features when used in a title, especially when the title is duplicated in other contexts, such as a Table of Contents.
q, quotes, group
This is the first of several grouping tags, using characters with left and right variants, and some of the most common markup in your writing. Presentation uses double quote marks that are smart quotes, meaning that they look different in their opening and closing variants. (See blockquote for extensive runs of quoted text that can stand alone, and which can carry an attribution.)
sq, single quotes, group
Perhaps less-often used than q, so a couple more characters to type. Presentation is paired single-quotes, opening and closing.
angles, angle brackets, group
Left and right angle brackets to enclose a phrase. This is not for creating a set of generators in mathematics, use the appropriate mathematics tag and syntax for that. Note also that the characters used here are definitely distinct from the inequality symbols, < and >.
dblbrackets, double square brackets, group
Double left and right square brackets to enclose a phrase. This is not for grouping expressions in mathematics, use the appropriate mathematics tag and syntax for that. These are used in the analysis of texts to note various restorations or deletions. Inquire if you feel there should be more semantic markup for this purpose.
em, emphasis, important
Use this element to surround characters in a phrase that is to be emphasized. This will typically be rendered in italics, though this choice is left to the implementation of a particular conversion. See also, alert.
If you are new to using a markup language, this is a place to stop and think. As a author you are never able to say, I want this text to appear in italics. Rather, you specify that certain text has a certain purpose or meaning. Emphasis is a way of calling attention to a portion of a sentence or paragraph. A font change (to italic) is a common and effective device. But a particular format might have a better, or different, way to achieve this. Perhaps in an electronic format, the letters are animated and dance up and down. (Just kidding. But you may be reminded of frequent blinking text in the early days of web design, supported by a non-standard blink element.) Seriously, now would be a good time to review .
alert, alert, critical
Use this to heavily emphasize something to a greater degree than just emphasis. Maybe think of it as SHOUTING. Bold italic font, or a bright color, or both, would be normal choices for presentation. Overuse of this tag will dilute its effectiveness.
term, terminology, larvae
Use this to identify a word or phrase that is being defined, in contrast to actually using a structured definition. Typical presentation is a bold font. Caution: the use of this tag is to communicate a defined term and converters may make use of this interpretation, given the importance of definitions in scholarly work. It would be considered tag abuse to use this tag to simply bold a word or phrase for some other reason, perhaps as an alternative to em or alert.
foreign, foreign words, idioms, phrases, Hola
This tag is used to identify words or phrases from a language other than the main one used for the overall document. It is best practice to use a xml:lang attribute to identify the language, since this will assist screen readers and hyphenation algorithms. We may also recognize the need for a different script (font). Usual presentation is italics for languages using a Latin script. This should not be used for entire paragraphs as a way of assisting with a translation of an entire document.
Note that when we use italics for emphasis and to point out foreign words or phrases, there is a loss of information in our output. In other words, we can no longer reliably (in an automated way) convert our output back to equivalent PreTeXt source from its visual representations. C'est la vie. See again.
pubtitle, articletitle, titles of books and articles
These provide the ability to typographically distinguish the title of another work, and are not a replacement for careful bibliographies and citations. Use pubtitle for longer, complete works, such as books, plays, or entire websites. Use articletitle for shorter, component works, such as a chapter of a book, a research article, or a single webpage.
Presentation for a longer work will be italics or an oblique (slanted) font, and for a shorter work, the title will simply be quoted.
An abbreviation is a condensed or shortened version of some word or phrase, such as Mr. for Mister. Converters should take care with periods (full stop) inside an abbr as distinguished from the end of a sentence (which may not always be clear given the absence of a tag delimiting sentences). An initialism is an abbreviation read as a sequence of letters, often the first letter of words in a phrase, such as HTML for HyperText Markup Language. An acronym is much like an initialism, but the letters are read as a pronounceable word (which sometimes actually enters the language as a word, such as radar which began as RAdio Detection And Ranging). An example is SCUBA which stands for Self-Contained Underwater Breathing Apparatus. Initialisms and acronyms may be presented in a small-capitals font or as regular capitals reduced in size.
delete, insert, stale, editing assistance, gone, new, old
These denote portions of a text that is being changed in some way, presumably as part of an editing process. Conceivably, they could be managed by some other tool acting on your source. Stale text is that which is slated for removal eventually, but is left in place so that it may be consulted. There is no support presently for actually deleting or incorporating text, though that would be a reasonable feature request.
Red and green, for leaving and entering, are natural choices for presentation. But in consideration of those readers who cannot always distinguish different colors, other devices, such as strikethrough or underlining, should also be employed.
These are tags for when we write about and need to discuss tags, empty tags, and attributes. Given how we design tags the content of these elements should only be the 26 lower-case letters and a dash/hyphen. These should render in ways that make the three types of language elements obvious without much further discussion. Just a bit self-serving, but not unjustified.
These are not meant for more elaborate constructions. For example, an attribute-value pair should not be authored as
<attr>data="/home/data"</attr>
and instead I would write
set the <attr>data</attr> attribute to the value <c>/home/data</c>
Similarly, do not use the tag element for long XPath constructions like
<tag>docinfo/prefigure-preamble/line</tag>
The c or cd element will likely work better.
taxon, scientific names, Escherichia coli
This element may surround a full scientific name, resulting in presentation in italics. There are subelements genus and species which may be used to delineate those components.
A ncbi attribute on taxon accepts an identifier from the National Center for Biotechnology Information. Feature requests for ways to make this more useful are welcome.
fn, footnotesfootnotes
A footnote can be inserted in a paragraph and a mark will be left behind. Where the content of the footnote goes depends on the capabilities of the output format. Because a footnote allows you to begin a new piece of text anywhere, it can be difficult to handle technically. For this reason it is banned from places like titles and its possible content is limited (for openers, no paragraphs).
A footnote is the farthest thing from structured writing that we can think of. It can go anywhere. Resist the temptation to use it, and your writing will improve. We frequently entertain the thought of making footnotes impossible in . See the aside element for a possible alternative.
m, mathematics, x^2+y^2
Simple, inline expressions using mathematical notation may be used in paragraphs, and in titles and captions. The syntax is . See for full details.
c, code, verbatim text, literal text, import
Short bursts of raw, or verbatim, text can be wrapped in the c element. Strictly speaking, code is a misnomer, as the text may be anything you need to communicate exactly as one would type it at a keyboard or as input to a computer program. Anything longer than a handful of characters, or needing accurate line breaks should consider the cd, pre, program or console tags. If you like to have your source word-wrapped with hard line-breaks (newline characters), we will replace those for you with a space character. This is the only modification made to the content of a c element.
Presentation is normally a monospaced sans serif font, perhaps of a slightly heavier weight, and designed for the job with features such as unambiguous zeros (versus the letter oh). See for details.
email, email address, nobody@example.com
Very similar to the c tag, this may be used to get a monospace presentation of an email address, possibly as an active link in some formats.
Cross-References and Paragraphs
There are several devices for creating cross-references. Generally, these are unwise (or banned) in titles, and if allowed may be inactive in certain portions of an electronic output format (such as when migrating to a Table of Contents).
url, linking external resources
This is a cross-reference to some item separate and distinct for your document.
A Uniform Resource Locator (URL) is, loosely speaking, an Internet address for some item. Capabilities for providing links to such items are provided and take into account usability in different output formats. See for full details on how to use url for links to external resources.
Note also that this tag is meant for external resources, so see the xref element (below) or for ways to link internally ( within your document).
xref, cross-references
This is a cross-reference to some item contained within your document.
Extensive and intuitive capabilities for cross-referencing are a primary feature of . Typical use is an empty tag with the ref attribute specifying the value of an xml:id on the target of the cross-reference. This should work easily without much more instruction, but familiarize yourself with the details in to get the most out of some the available options.
idx, index target
This indicates that the containing structure (theorem, example, etc.), or top-level paragraph, should be the target of an entry of the index (a special sort of cross-reference). See and for general details.
notation, index target
This indicates that the containing definition, or top-level paragraph, should be the target of an entry of the list of notation (a special sort of cross-reference). See and for general details.
Structured Markup in Paragraphs
There are three categories of items which typically are structured further, and which are almost entirely restricted to appearing in a paragraph. Given their complexity, details are covered in other sections of this guide.
Lists
With only one major exception (and three minor ones), a list must appear within a paragraph. See for an introduction and for precise details.
Display Mathematics
Displayed mathematics, which is a single equation or a sequence of (aligned) equations, can only be placed within a paragraph. The relevant tag is md. It can hold a single expression or be structured with mrow elements. See for an introduction and for precise details.
Display Verbatim
The cd tag, by analogy with the md tag for displayed mathematics, may be used to display one or more lines of verbatim text (such as a series of commands), possibly structured with the cline tag. See for an introduction and for precise details.
This should not be confused with the pre, console, or program tags, which have slightly different uses, and all of which must be used outside of a paragraph.
Characters in Paragraphs
Some keyboard characters are unambiguous, for example, the percent sign, %. Other keyboard characters are poor replacements for several different characters. Is a slash, /, being used to separate information/ideas, or is it a solidus being used to form a fraction such as 34? Other characters, such as per-mille, , are not present on keyboards at all. We organize this section according to these types of distinctions.
Unambiguous Keyboard Characters
The keyboard characters `, ~, !, @, #, $, %, ^, *, (, ), _, =, +, [, ], {, }, \, |, :, ;, and , are entered as-is and are only rendered one way. Easy.
Of course, the fifty-two Latin letters, and ten decimal digits, are also in this category. If you have an international, or bilingual, or country-specific keyboard, then common accented versions of Latin letters (as used in Europe and the Western Hemisphere) may also be used directly from your keyboard.
XML is a markup language, which in part means that some keyboard characters are co-opted to signal the start of markup. For XML this character is the less-than symbol, <. It signals the start of a tag, and then an opening tag ends with a greater-than symbol, >, while a closing tag has an extra / right after the <.
This begs the question: if a < is used in our XML source to signal the start of a tag, then how did we get one to appear here in this sentence without mistakenly starting a tag? Once a markup language gives some characters special meanings, then there needs to be an escape character. For XML the escape character is the ampersand, &. So to author the < and > symbols, we type escaped versions: < and >.
I hear you now say, But now we just took the & out of the running and gave it a special meaning. How do we get an ampersand? Easy, use the escaped version: &.
So the short answer is: never, ever type the < or & keyboard characters in isolation. The very beginning of the processing of XML () will fail fatally on these characters. Instead, always use the sequences < and & and then very early the XML processing will convert them to characters, without interpreting them as signals for aspects of the markup.
It does not seem necessary to author > as >, though there is no real harm in doing so. The two other characters with escaped versions are the single and double quotes, ' and ", which have escaped version of ' and " (respectively). These are only necessary for attribute values, and we have been careful to design so that they are not necessary.
Excessive Escaped Characters
If you know another markup language, such as , , Markdown, JSON, or PGML, think about how many characters have been given special meanings, and the subsequent necessity to use escaped versions. And if you want to write about computer languages, realize that each such language also gives certain keyboard characters special meanings.
XML only has five exceptional characters, and in your daily use, really only requires you to be aware of two, the minimum necessary for a markup language.
A CDATA Section is Never Necessary
We hate to mention it, but sooner or later, we need to have an uncomfortable discussion about the misunderstood CDATA section, and risk confusing the rest of this subsubsection. And this is the place. But you can come back later, if you wish.
You will read other places about very special markup known as a CDATA section. The name stands for character data, which means all characters, no markup. Think of it as switching off the XML processing for a while, so in particular, &, <, > no longer have any special meaning at all. That could be nice, but realize that now there is no opportunity to have any markup present using XML syntax, since it is ineffective.
A CDATA section is always a convenience and is never necessary.
When would it be convenient? Maybe you have some inside an md with a large matrix that uses lots of ampersands to separate the entries. Inside a CDATA you can author it with bare & rather than a plethora of & or \amp. But you lose the ability to include an xref in that CDATA, so you need to be surgical about its scope. Perhaps a Tikz diagram in a latex-image has a multitude of <-> or a chunk of Sage code in an input has a lot of finitely-generated algebraic structures authored as R.<x> = ... (which is not even legal Python syntax either!). These places where there is little, or no, markup could be convenient places to use a CDATA. Be sure to read the warning at in before you go all-in.
Ambiguous Keyboard Characters
Some keyboard characters have a primary interpretation, and are imitations of other typographic characters. Your output will be of higher quality if you understand these distinctions and employ the proper variant.
Ambiguous Keyboard Characters and AlternativesKeyboardPrimaryNotes/(forward) slashsolidus is a fraction bar, 'apostrophersq is a right single quote, `backticklsq is a right single quote, .periodabbreviations and end-of-sentence-hyphenSee dashes, and arithmetic"upright double quotelq is , rq is
Note that the four quote marks (left/right, single/double) are meant for the actual characters. Always use the grouping constructions described above (q and sq) when grouping a phrase with quote marks. Note, too, that there is never a good reason to use the keyboard quote character (") unless you are creating some sort of verbatim text, such as a program listing or describing literal keyboard input.
When creating print or PDF via a period may get different trailing space depending on location and context, generally being its use in abbreviations or to conclude a sentence. We do not yet have this dual-use under control.
Extraordinary Characters
Some characters or symbols are typically not available on a keyboard, so we provide empty elements. Many of these may be entered directly into your source as Unicode characters, and they will do well in your HTML output. However, these may fail entirely if you create print or PDF via using the pdflatex engine. Furthermore, even for HTML output there may be several Unicode characters that are very similar.
So again, for the best quality output be aware of these elements and use them. Please suggest additions if you do not find what you need and are resorting to Unicode characters.
ellipsis, , ellipsis
Typically three low dots with no intervening space, to indicate a continuation. This will always perform better than three consecutive periods.
midpoint, , midpoint
A small centered (vertically) dot, which can be used to separate pieces of information, especially in displayed text ( outside of paragraphs). Not to be confused with a bullet preceding a list item, or multiplication in mathematics.
swungdash, , swung dash
Another decorative separator, not to be confused with the keyboard tilde character since it is wider and thicker.
permille, , per mille
Like per cent, but now a number expressed as its product with 1000 (rather than with 100).
pilcrow, , pilcrow, paragraph mark
Mark used historically to indicate the start of an internal paragraph, and in a more modern use, to indicate a permalink.
section-mark, , section mark
Used to prefix the number of a section, or other division. (So the word section is being used generically here.)
copyright, , copyright
The symbol used in publishing, legal, or business contexts. For a project, copyright information can be specified within the bibinfo portion of the frontmatter.
trademark, , trademark
The symbol used in legal or business contexts.
registered, , registered
The symbol used in legal or business contexts.
Extraordinary Characters and Their Empty ElementsCharacterNameElementellipsisellipsismidpointmidpointswung dashswungdashper-millepermillepilcrowpilcrowsection-marksection-markcopyrightcopyrighttrademarktrademarkregisteredregistered
Accented Characters
The second 128 Unicode characters (hex 80 to FF) contain many of the most frequently-used accented characters in Western languages, along with niceties such as the German eszett, ß, or the Scandinavian æsc, æ, an a-e ligature. Like the fifty-two Latin letters (part of the first 128 Unicode characters), these may be used as-is. They may be present on your keyboard, or you may need to learn keyboard shortcuts or specifics of your operating system to enter them as Unicode characters. In a pinch, you can often cut-and-paste a few characters from web pages.
This table is indexed by the Unicode number, in hexadecimal notation. The first 32 of the 128 (U+0080U+009F) are control codes and U+00A0 is a non-breaking space, so is invisible, while U+00AD is a soft hyphen (which we have not implemented and so is excluded).
If you are writing about technical subjects, then you will want to avail yourself of 's extensive support for mathematics. Otherwise, you may wish to write really simple arithmetic within sentences without extra formatting. Notice that there is no provision for preventing line-breaks in the midst of these expressions.
So you can author (26)3+1015 = -1, but that is about the limit of the complexity of expressions you should author without using the extensive capabilities designed for mathematics, rather than arithmetic. Note that the spaces around the equal sign have been supplied in the source, but no spaces have been provided around the operators. Also, the minus sign and the negative are slightly different because the subtraction uses the minus element, while the negative answer uses a plain keyboard hyphen/dash.
Using the m element instead, the above is (2\times 6)\div 3+10-15=-1. Note the more careful spacing, and the appropriate symbols for subtraction and negation, with no special care in the syntax used in the source.
Note also that the plus sign, + and the equals sign, =, can be provided in text as the unambiguous keyboard characters.
The degree, prime, dblprime elements support simple coordinates with degrees, minutes, seconds, or temperature, or distance in feet and inches. We parked the car at 36160.83N, 1223547.27W, and since it was 93F, we walked 5053.6 so we could swim in the bay.
minus, , minus, subtraction, negation
For simple arithmetic expressions in text, this symbol may be used. Note that the keyboard hyhpen (or dash) might be acceptable for your purposes, but they are different.
times, , times, multiplication
For simple arithmetic expressions in text, this symbol may be used. Or it may be used to specify dimensions, as in I bought a 24 at the lumber yard.
solidus, , solidus, virgule, fraction bar
For simple arithmetic expressions in text, this symbol may be used to form a fraction. It should appear to have a significantly shallower slope than the forward slash, /.
obelus, , obelus, division sign
For simple arithmetic expressions in text, this symbol may be used to indicate division.
plusminus, , plus-minus sign
For simple arithmetic expressions in text, this symbol may be used to indicate a tolerance or a choice of two values, one the negative of the other.
degree, , degree symbol
A raised open circle for temperature or for angles used in coordinates.
prime, , prime symbol
A straight mark that is placed like an exponent. For use in coordinates or statements of linear measure in feet and inches. Not an apostrophe, and not mathematics (like, say, not to denote a derivative).
dblprime, , double prime symbol
Two straight marks that are placed like an exponent. For use in coordinates or statements of linear measure in feet and inches. Not an apostrophe, and not mathematics (like, say, not to denote a second derivative).
Separatorsndash, , en dash
A dash, the width of a lowercase n, or exactly half the width of the em dash. This is typically used to express a range, such as 1955<ndash />1975, with no intervening spaces. It is often expressed as two hyphens when typed. Bringhurst suggests an ndash surrounded by spaces thusly when setting off phrases.
mdash, , em dash
A dash, the width of a lowercase m, or twice the width of the en dash. This is typically used to express a secondary part of a phrase, much like the use of a semi-colon or parentheses.
Style guides suggest that there should be no spaces, before or after, an em dash, while some allow for a thin space on either side. You should always leave no space around an mdash element in your source. Then a publication file entry can be used to elect the automatic addition of a thin space, should your publisher so desire. See for the syntax of the publisher file entry.
nbsp, non-breaking space
A space, but which ties two words together and discourages a line break when formatted, such as Summer<nbsp />1967. This can also be used to discourage a period in an abbreviation from being interpreted as the end of a sentence, such as C.R.<nbsp />Darwin.
midpoint, swungdash, , , midpoint, swung dash
These can be usedas more decorativeseparators.
Keyboard Keyskeyboard keyskeyskeyboard
If you are writing a software manual, or writing about how to use a calculator as part of a science textbook, then you might want to make it very clear which keys to press on a keyboard. The kbd element can hold content like Z or Caps Lock and your output will have a very nice looking keyboard key with the desired label. For example, Z and Caps Lock. For keys labeled with graphics, like the arrow keys, instead of content, provide the name attribute with a value from the following table. Request additions to this table if you are using this feature (2019-11-22).
Keyboard Keys Specified by name Attributeleftrightupdownentershiftsolidusplusminustimesleft-parenobelussquaredinverseright-paren
User-Interface Icons
When writing about software, you may wish to call attention to icons used in the interface. Similar to graphical keyboard keys, use the icon element with a name attribute with a value from the following table. See for information about using icons as part of output.
Conveniences for frequently-mentioned accessories to .
fillin, , fill-in blank
A fill in the blank blank. May be used in normal text or within mathematics contexts. The characters attribute may be used to hint at how long the line will be. Here we have set characters to the value 5.
If used inside math, a fill attribute (in lieu of characters) may be some string of math that will be used to determine width, height, and depth of the blank. In text, the default value of 10 is used for characters. In math, the default value of XXX is used for fill.
If used in normal text, a rows and/or cols attribute may be present, each a positive integer. When either is greater than one, there will be an indication that the expected content to fill in the blank is a rowscols array.
ie, eg, ca, vs, etc, , , , ,
A small collection of frequently-used Latin abbreviations, with attempts to handle the tricky periods wisely in output. Strictly speaking is not Latin, but we include it for completeness. Tags are always lowercase, no punctuation, usually two letters.
TagRealizationMeaningadanno Domini, in the year of the Lordamante meridiem, before middaybcEnglish, before Christcacirca, aboutegexempli gratia, for exampleetalet alia, and othersetcet caetera, and the restieid est, in other wordsnbnota bene, note wellpmpost meridiem, after middaypspost scriptum, after what has been writtenvsversus, againstvizvidelicet, namelySI Units
Système international (d'unités) (International System of Units) is a system of measurement used universally in science. has comprehensive support for this system and its notation and abbreviations. See for a short introduction and for detailed descriptions of the relevant elements and their use.
, , , , , music notation
Notes, chords, and other notation may appear within sentences as part of a discussion. See for detailed descriptions of the relevant elements.
Understand the Importance of Careful Markup
There is a lot of detailed information in this section. Much of it is critically important. If you are new to thinking in terms of markup (rather than WYSIWYG tools), it might be overwhelming, a lot to digest, and hard to separate the wheat from the chaff. Careful here means using the necessary markup, not using it for other purposes different than its intent (tag abuse), planning ahead for different output formats, but not becoming a slave to over-doing it.
So come back here often for a re-read. And keep in mind that is designed around principles (), and that it is markup () which enables multiple outputs () and effective and beautiful online versions ().
BlocksblocksIntroduction to Blocks
A division (), that is not further subdivided, is primarly, but not exclusively, composed of paragraphs and blocks. We document the types of blocks here, even though we do not intend to ever provide a rigorous definition of the term. Here is a list of characteristics, which is not prescriptive.
Characteristics of a Block
Visually set-off from a run of plain paragraphs. Often earning a number, and ideally provided a title or caption ().
Reflowable lines of text, such as an example, or a more rigid, more spatial, more planar object, such as a figure or table.
Usually a child of a division (). But see just below.
Typically a block does not contain another block, except that the more planar ones can appear as part of a more textual one.
When numbered, all blocks generally run consecutively. (In -speak, on the same counter.) Numbering FIGURE-LIKE and PROJECT-LIKE independently is in transition at this writing (2021-07-07).
Depending on the output format of your document, some block types may be initially hidden to improve the visual flow. The reader must click on the heading for the block to reveal its contents. You can change this behavior by configuring your publication file. See . We will make note of the elements that are hidden by default for HTML output.
The following is somewhat general, and we have not extensively cross-referenced to the particular types of blocks, so use the Table of Contents or the Index to learn more specifics.
Isomorphic Blocks
The structure of a block is described carefully in the schema (). There are approximately forty blocks that are arranged into ten groups, within which they behave identically, except for their displayed names. An exception is the group of four figure-like items which are very similar, but have differences beyond just their displayed names. These groupings are defined in the xsl/entities.ent file, which we summarize in the next table. The category name is taken from the entities file, and the notes are meant to describe the distinctive capabilities of the category.
A worked problem meant as exposition. It can be structured with task, hint, answer, and solution just like an exercise or PROJECT-LIKE, but the hint, answer, and solution cannot be electively removed from output, and they do not migrate to collections of solutions elsewhere. Hidden by default for HTML output formats.
PROJECT-LIKE
project, activity, exploration, investigation
These are similar to an exercise, but the name suggests a slightly different undertaking, and they cannot be placed in an exercises division. The current default is that they are numbered independently from other blocks, but this is planned to switch to elective behavior. The hint, answer, and solution behave more like those for an exercise and can be removed from output, and can migrate to collections of solutions.
FIGURE-LIKE
figure, table, listing, list
An object that is a container for other atomic objects, which are typically somewhat rigid (not reflowable) or two-dimensional. Typically with a number, and provided with a title or caption. But each is slightly different in what it can contain and how it is rendered. A table can only hold a tabular, while a listing is meant for program and console. A list is not the list itself, but a container for one of the three possible lists (see and especially ). A figure is the most liberal, allowing a wide variety of contents, with image being the prototypical example. These are not designed with the expectation that they can be renamed.
A mathematical statement, which does not have a proof.
DEFINITION-LIKE
definition
A definition of a (mathematical) object.
ASIDE-LIKE
aside, biographical, historical
Parenthetical content that is structured beyond what a footnote can contain.
COMPUTATION-LIKE
computation, technology, data
For descriptions of activities or data for use with computers, calculators, or other devices.
GOAL-LIKE
objectives, outcomes
These are structured primarily as lists, and may only appear early (objectives) or late (outcomes) within a division.
Other Blocks
There are other blocks which can be achieved using just one element. Examples are poem and assemblage. An exercise can take on different behaviors, depending on its placement (see ). One such placement is as a child of a division, which we call an inline exercise, and this would be regarded as a block, very similar to a PROJECT-LIKE. Inline exercises are hidden by default in HTML output.
A paragraph (p) can appear many places and is a primary component of blocks. But when it is a child of a division, it shares some charateristics with other blocks. There are a number of peers of a p which would then also qualify: pre, blockquote, image, video, program, console, and tabular. None of these can have a title or number, making them less useful, but widening the possibilities for placement.
Renaming Blocksrenaming blocks
A common desire of authors new to is a new block. Authors extending to add a new one is not supported, and it is not even straightforward for a developer to provide comprehensive support for a new block. One of the reasons for multiple versions of blocks, with common behaviors, is that you can appropriate one for use with your project and give it a new name. So for example, a biology textbook might want to use activity for a laboratory, but rename it to Laboratory. Of course, this means you will forego having any Activity in your book. (But if you are the first to write a biology textbook in perhaps you should talk to us about a real laboratory element that behaves well for all the physical and biological sciences!) Here is the procedure:
Choose a block from that has behavior similar to your intended use, and which you do not forsee using as-is in your project.
In the docinfo section use a rename element. The content should be the new name (Laboratory above), while the element attribute should be the name of the element renamed (activity above).
The xml:lang attribute should be used to specify a value of the code for use with documents authored in languages other than US English. If absent, the default vslue en-US is used. Multiple rename elements for the same element, in different languages, is supported.
So, continuing and extending our example, an author would use<rename @element="activity" xml:lang="fr-FR">Laboratoire</rename>
The most popular block to rename is exercise. We have exercises inside exercises divisions, which we call divisional exercises, and exercises inside divisions, which we call inline exercises. It is possible to have one of each that have identical numbers. So in cross-references the former is an Exercise, while the latter is a Checkpoint. If you only have inline exercises, you might prefer that they be called Exercise rather than Checkpoint. For the element attribute of the rename element, use a pseudo-element, in this case inlineexercise. Other pseudo-elements which can be used to distinguish the various types of exercises are: divisionexercise, worksheetexercise, and readingquestion.
Choose the element you rename carefully, trying to match it to the purpose of your content. It can be useful for other purposes, such as automatic lists (), and you may decide later to use other properties of the element you have chosen.
(*) Exercises, Inline and DivisionalVerbatim and Literal Text
This section expands on parts of . For descriptions of more involved uses, such as program listings and console sessions, see and .
The tags described here contain only raw characters. By that we typically mean the first 128 characters of the ASCII code. Unicode characters are likely to migrate to HTML output just fine, but results for output will be variable. The restriction to character data has two consequences. First, any markup mistakenly included will have its content silently ignored and dropped. Second, you need to observe the rules on exceptional characters and escaped characters for XML for literal text, which are mercifully simple.
In your source, use & for an &, use < for <, and optionally use > for >. Otherwise, every other ASCII character will render faithfully across all possible formats.
See for more detail and explanation.
Short, Inline, Verbatim Textverbatim textliteral text
The c tag is a mnemonic for code, but is really meant to be any chunk of literal characters that you want to emphasise that way. So a typewriter font of fixed-width characters would be a typical presentation. It is meant for use within a sentence or caption (inline) so its use is limited to those situations, and others that are similar, such as a title or a cell of a table. Typically these pieces of text do not hyphenate words, and so can lead to spillover into a right margin. In these situations, consider options below for longer pieces of text.
There is also a pf tag, which is a mnemonic for program fragment. It is used in the same way as c, but will apply syntax highlighting so that the displayed text matches the formatting of a program See for more information.
Longer, Inline, Verbatim Text
For longer pieces of verbatim text, use the cd tag, which is short for code display, analogous to the md for mathematics. It is used within sentences of a paragraph and will be presented with a vertical break above and below, but without interrupting the paragraph. Because of the display presentation, it cannot be used other places, such as a title, where a vertical gap is not appropriate. All of the previous discussion about exceptional characters applies for this tag.
You have two options in use. You may author inline with the rest of a sentence, with no extra newlines or whitespace before, after, or within the content. The result will be a single displayed line.
Or you may structure the content using one, or more, of the cline tag, which is meant to be similar to the line tag used elsewhere. You should still take care to not place any extra whitespace before or after the cd element, but in between the cline you may use as much visual formatting of your source as you wish, especially if you like your source to mirror your output.
Blocks of Verbatim Text
If you want to isolate large chunks of verbatim text outside of paragraphs, the pre tag is the one to use. It can be used as a peer of paragraphs (and other structures) as a child of a division, or it can be placed into a listing to receive a caption, title and number.
You can structure the contents with cline in exactly the same manner as for cd. But you may find this tedious. Instead, you can make the content of pre a sequence of lines separated by newlines. So that you can preserve the indentation of your source, the line closest to the left margin is taken to actually be the left margin, and a corresponding amount of leading whitespace will be removed from every line. This will work well if you recognize two caveats. First, results will be unpredictable if you mix spaces and tabs for indentation. Sticking with spaces is best. Second, if your first characters of content immediately follow the pre tag then there is no leading whitespace and it is as if that line is already at the left margin. Then subsequent indentation may seem too severe to you.
As previously mentioned, and discuss the console and program tags which are more specific, and hence more capable. Review the possibilities before you decide between pre, console, and program.
Cross-References and Citationscross-referencecitation
When you read a novel, you would likely read it cover-to-cover (in one sitting?) and then put it away and never read it again. But for a textbook, you may read cover-to-cover, but you may also frequently skip around, especially at exam time. And once read, it might become a reference work for you, since you know it so well. So years later you might come back looking for something. Cross-references help with all this, so use them liberally. Recognize that an index is really just a specialized way to provide an abundance of cross-references.
Creating a Cross-Reference
It is a two-step process to make a cross-reference.
Put an xml:id attribute on any element you think you might want to reference later. Be organized about the values of these attributes, and in particular do not number them, as this has no place in your source, and you do not want to maintain the changing numbers over the life of your project. See the advice in about banned characters. Some elements do not accept this attribute because the element has nothing to identify it (no number, no title). Typically these are containerscontainer such as sidebyside, statement, or ol. In these cases, put the attribute on the closest enclosing element.
To make a cross reference, you create an xref element with a ref attribute with the same value as xml:id attribute on the element you want to reference.
Simple. It is meant to be, so you can use it liberally. But we also know authors want some flexibility.
Use xml:id Frequently
Use the xml:id attribute liberally, on any object you might want to reference later, and on every division. It is easier to do as you author and will be very valuable later. (Trust us on this one.) Develop a system so you can recall them predictably, but keep them readable. Don't use numbers, they will change. Then make frequent cross-references. They are relatively easy for you and will be incredibly useful for each and every one of your many readers, over and over and over again.
Text of a Cross-Reference
By default, a cross-reference will visually be text like Theorem 5.2. Depending on your output format, it may have various devices to help you locate that theorem. Maybe a page number, or it is a hyperlink, or the whole theorem is the content of a knowl. You can change the default look of cross-references by setting the text attribute in docinfo/cross-references. But you can also change the visual appearance of a cross-reference on a case-by-case basis. Add a text attribute to your xref element to override the document-wide setting. The first column of this table lists the possible attribute values, either document-wide, or on a per-cross-reference basis. The second column has live cross-references to a section of an earlier chapter (that is far away). The third column has live cross-references to another section of this chapter (which is close by). For the fourth column, we have placed content (Extra) into the xref element as an override of, or addition to, some of the text for the cross-references of the preceding column. Study the table and then read some more explanation following. Note that type-global is the default.
Cross-reference visual text stylestextFar AwayClose ByWith Contenttype-localExtratype-globalExtratype-hybridExtralocalExtraglobalExtrahybridExtratype-local-titleExtratype-global-titleExtraphrase-globalWarningphrase-hybridWarningtitleWarningcustomExtra
Note that local/global describes the uniqueness of the number (and is affected by your choice of numbering schemes), while type refers to an automatic prefix of the number. The text of the type will vary according to the document's language. If a cross-reference and its target are close to each other, a number like 5.8.2.4 might be overkill, when just a 4 would suffice. A hybrid scheme will use the shorter number whenever it makes sense. There are two phrase schemes, and it should be clear what text title will produce (though realize there must be a title for the object, possibly a default provided by ). Finally, if desired, the text can be customized with any text you like.
You can also override the text used in a cross-reference link. You do this by providing content to the xref element. In other words, do not use an empty tag, but put some (simple) text in the element. Generally, this additional text becomes a prefix of a number or a replacement of a type. It is better to use these overrides, since in electronic formats, the text of the override will be incorporated into the clickable portion of the resulting link, making a larger item to hit. Recognize that this extra content will not benefit from automatic internationalization.
Here are careful examples of providing content inside the xref element, where we have provided the content Division in the live examples. The list is not exhaustive.
Cross-reference text overridestextExample'global'Division'type-global'Division'custom'Division
Variations
There are some variant uses for the xref tag.
Replace ref by provisional and give it a value with some simple text like subsection on eagle habitat and you will get reminders that once you write this future subsection you need to link it in right here. This is just a convenience for authors during the early stages of a writing project (see for details).
Replace ref by the pair first and last. Provide attribute values just as you would for ref. The code will check that the targets have the exact same tag, and that the order is correct. You will get a link that looks like a range, separated by an en dash. As a link, only first will be used for the linking mechanism (, one link is generated, not two). Experiment with text and content overrides.
The ref attribute may be a list of xml:id, separated by commas or by spaces. Then you will get back a list of cross-references. This is meant for a list of citations, producing a look like [5, 9, 22], but it makes no restriction to this case. Use it generally, but it is unlikely to get any more capable. If you want a different list, just use multiple xref and format as you desire.
You can create many different combinations with the text options and the variants. Here is one example. You want to say Chapters. As a range you use the variant with two references. You would get Chapter out front automatically with the type-global scheme, but a plural form makes more sense. So you use that text as an override. We could use either type-global or global to get the same text, and possibly type-hybrid depending on the place where you built the cross-reference. So possibly, one of these schemes might be your document-wide setting and you do not need to specify it now. Here is what we just used:<xref first="start-here" last="schema" text="global">Chapters</xref>
You can place a cross-reference into a title element, but a particular conversion is free to simply render it as text, and not as an active link.
Finally, there is fairly robust error-checking to protect against typographical errors in the attribute values that need to match up for all this to work. Also, there is a check that the xml:id are unique. But all this checking happens at processing-time, not at the validation step. Any suggestions for improvements that make these checks even more robust are welcome.
Citationscitation
Citations are just specialized cross-references to biblio elements, and so behave the same way as other cross-references. However they will always visually look like [23], and there is no notion of type name.
Equations
Similar to citations, references to equations (md and mrow elements) will visually look like (4.2), where the type name is implied by the parentheses. Notice that you cannot cross-reference a bare md element that is not numbered nor an md element structured with mrow (it is just a container, filled with mrow that you can target if you give them numbers). Consult for details about controlling the numbering of equations within an md.
Lists
Roughly, you can target a list item for a cross-reference, but not the list itself, since it is a container. See for precise details about using list content as the target of a cross-reference. Note also, that an entire named list may be the target of a cross-reference, see . Here we concentrate on the text of the cross-reference itself.
First, note that if you cross-reference a list item of an anonymous list, there is a very real possibility that the number will be ambiguous, and there is no option for text will save you, and never can be. See the middle column of for the demonstration. We assiduously try to make it impossible to ever create ambiguous text for cross-references, especially in consideration of print output. Use the feature carefully.
Take Care Referencing Anonymous Lists
Cross-references to list items of anonymous lists can easily be ambiguous and then useless for readers of print. Keep such a cross-reference close to its target, ideally within the same list, and/or perhaps using additional, unambiguous clues about location (which you expect will survive later editing):
See of this list.
See in the list appearing in .
The local option, discussed generally above, behaves differently for a cross-reference to a list item of an ordered list that is contained in a named list. As seen in the table just below, the local portion of the number is the part that comes from the list item, without the part that comes from the location of the list block.
Cross-references to list items, visual text stylestextNamed ListAnonymous ListWith Contenttype-localExtratype-globalExtratype-hybridExtralocalExtraglobalExtrahybridExtraphrase-globalWarningWarningphrase-hybridWarningWarningtitleWarningcustomExtra
The hybrid options employ a different definition of when the distance between a cross-reference and its target is close enough that the number can be shortened, without becoming ambiguous. When an xref and its target are part of the same list, then the common part of the number derived from the list is not needed. To illustrate we need to make a small list with cross-references contained within.
Small test
(type-global) Flowers are not .
(type-hybrid) Fish are not .
(hybrid) Bacteria are not .
(phrase-global) Fungi are not .
(phrase-hybrid) Trees are not .
Mammals.
Be Rational About Numbering Variations
With distinct numbering schemes for divisions, theorems, figures, equations, and citations, along with ten different text styles for a cross-reference, plus variants, per-cross-reference settings, and text overrides, there is a huge supply of combinations. Likely you can create some really ugly cross-references. Use the flexibility sensibly.
Divisions
A divisiondivision (or more carefully, a structural divisionstructural division) is a structured component of a book or article that would be recognized by most any reader. They are essential to the organization of a project. Notice that we use the generic term division, since a section is just one example of a division.
Divisions are book, article, part, chapter, section, subsection, subsubsection, and paragraphs. Their use is fairly intuitive, though there are some restrictions, so please read on.
A book must contain at least one part or at least one chapter, which may contain section, subsection, and subsubsection. A part simply contains a sequence of chapter and functions in two user-selectable ways: structural ( numbering will reset), or decorative (merely inserting a decorative page between two chapters and sectioning the Table of Contents).
An article is simpler and shorter than a book. It might be really simple and have no divisions at all, or it may have sections. It cannot have chapters, as that would be a book. Within a section, subsections and subsubsections may follow.
Divisions must nest properly and may not be skipped. So a section cannot contain a chapter and a subsection may not be contained in a chapter without an intervening section.
A division must contain a title, and may contain one or more index entries (see ), which should appear before anything else. Any division may be unstructured, with just a sequence of top-level contenttop-level content such as paragraphs, figures, lists, theorems, Or a division may be structured, and in this case it must follow a prescribed pattern. There may be a single, optional introduction, filled with top-level content, followed by a sequence of at least one of the appropriate divisions, ending with a single, optional conclusion, filled with top-level content. It is an error to begin with a run of top-level content inside a division and then begin to use divisions. (The solution is to make the initial content an introduction and/or one or several divisions.)
A book may be structured into parts. After the frontmatter and before the backmatter there may be a sequence of part. These elements may carry a title, and not much else, besides a substantial sequence of chapter. The main effect is to get an extra level of division in the Table of Contents. For print and PDF there is an entire page devoted to the title and number of the part. The default numbering is decorative, which means that the chapters are numbered consecutively from the start of the book and do not reset to one at the start of each part. It is as if the parts were not even there. The alternative is that parts are structural. Now each part begins with Chapter 1. There are other more subtle differences, such as cross-references use a part number if, and only if, the trip from the cross-reference to its target crosses a boundary of two parts. The two approaches to part structure may be set via the publication file, see .
There are exceptions to the above. For one, paragraphs is an anomalous division, as a sort of lightweight sectioning command. It may appear in any division, at any location within a division, it may not be divided further (it is a leaf of the document tree), it never gets a number, and its title is formatted in a subsidiary way. I especially like to use this in a two- or three-page article that has no other divisions at all. It is also very useful as a way to subdivide portions of the front matter (), such as a preface. Typical presentation has the title in bold, without much change in font size (if at all), inline with the first paragraph, and perhaps a bit of vertical space as it begins and ends. Despite the name, it may contain more than just paragraphs, so may contain any top-level-content that would go in any other division.
There are six divisions that have specialized functions, and therefore have less generic names than ones like chapter or section. They are exercises, reading-questions, solutions, references, glossary, and worksheet. They have some features in common, such as having a title, but each is different from the other in substantial ways.
Generally, a specialized division may be placed within any other division (), and it will behave like a subdivision of that division. Some may be placed in the back matter and may behave as a version relevant to the entire document. This section describes the specifics for each type of specialized division.
(*) References (Lists of Works Cited)Glossaryglossary
A glossary is a list, in alphabetical order, of foreign or unfamiliar words, along with definitions.
A glossary division may be placed inside any main matter division, and at most once in the backmatter. In either event, the Chicago Manual of Style indicates that it should be placed right before a references.
After a title, index entries, and other metadata, a glossary division may begin with an optional headnote, which can use paragraphs to explain anything unusual about the construction of a particular glossary.
The remainder of a glossary is a sequence of items to explain. Typically these are words, phrases, initialisms, or acronyms. Each item is a glossary item, enclosed in a shorthand gi element. The element must lead with a title, which is the term being explained. will provide a period after each defined word, so there should not be any punctuation in your source at this location. The term should not have any markup, unless the markup is used in every occurence of the term in the text. Similarly, a term is capitalized only if it is capitalized routinely in the text.
The explanation itself follows, typically in a sequence of paragraphs, but unnumbered items, such as an image may also be used. It is the author's responsibility to create the list in alphabetical order. Automatic groupss (according to initial letter) are a pending feature request, perhaps especially for a final, overall, back matter glossary, much like an index. See GitHub #1971.
Many of the preceding recommendations can be found in Chicago Manual of Style. For an example, see the glossary in the back matter of this Guide.
(*) WorksheetsTitlestitle
Divisions always need titles, you accomplish this with a titletitle tag first thing. Almost everything that you can use in a paragraph can be used in a title, but a few constructions are banned, such as a displayed mathematical equation (for good reason). Try to avoid using footnotes in titles, even if we have tried to make them possible.
A division will also support a single optional shorttitle and/or a single optional plaintitle. The full title will be used where the division is born, but in other places where the title is used for navigation, such as a Table of Contents, print page header, or HTML summary page, when horizontal space may be at a premium, the shortitle will be used preferentially.
A plaintitle is similar, but slightly different, so you might want both. In limited situations, markup does not travel well in certain conversions. The best example is mathematics, which might be in a title of a division, and then in a conversion to HTML, will fail to render in the tab of a browser, or the list of open tabs for a browser window. Two examples<title><m>q</m>-crystalline cohomology</title><title><m>\delta</m>-rings</title> will automatically do a nice job for you with the first, but the second will retain \delta in a browser tab. However, you can add a plaintitle element where the \delta can be replaced by a Unicode delta (U+03B4), which will used preferentially and be fine in HTML output.
To avoid confusing your readers, use these alternate titles sparingly, and ideally only when you have a really, really, really long title and then use a short title that is easily recognizable as a variant of the long title, or when markup is behaving poorly in situations such as a browser tab. Your first option should be to ask if your long title must absolutely be so long, or if the markup is strictly necessary.
Many, many other structures admit titles. Experiment, or look at specific descriptions of the structure you are interested in. Titles are very integral to , much like cross-references. Titles migrate to the Table of Contents, get used in page headers for print output, can be used in lists (such as a List of Figures), and can be used as the text of a cross-reference, instead of a number. You might not be inclined to give a remark a title, but it would be good practice to do so. If you use knowls in your HTML output for structures such as example (or if somebody else may someday choose to), then your readers will be spared a lot of confusion if you supply informative titles for each. Your electronic outputs will be much more useful to your readers if you routinely title every structure that allows it (perhaps excepting exercise which can be known by their number).
If a title is very long, the line element can be used to indicate how the title should appear on multiple lines. Note: does not apply to all output formats.
titlevery longline
Provide Informative Titles Liberally
Provisions for titles in many situations is a key feature. And then they are used for various purposes to benefit readers. A good example is when the HTML conversion is used to place content in a knowl, a unit of content that begins hidden, but can be revealed (and hidden again) with one click of a mouse. Since a reader cannot see the content originally, we will migrate a title into the clickable text. But we cannot read your mindit is your job as the author to provide a title, and to provide a good one.
Even if you are not yet sure what a knowl is, and even if you think you do not want to use them, there are other good reasons to have a title (such as automatic lists, see ). Constructing them on-the-fly is much easier than making a big chore out of going back and doing it later.
Bad
Example 5.10
Better
Example 5.10 A cool lizard trick.
Best
Example 5.10 Various colors and markings of a chameleon.
Mathematicsmathematics
As mentioned in the overview, , we use syntax for mathematics. In order to allow for quality display in HTML, and other electronic formats, this limits us to the subset of supported by the very capable MathJax Javascript library. Generally this looks like the amsmathamsmath package maintained by the American Mathematical Society at their AMS-LaTeX page. For a complete and precise list of what MathJax supports, see MathJax's Supported / commands. Once you have digested this more general section, be sure to also consult for some very specific suggestions.
Inline Mathematics
Use the m to place variables or very short expressions within a sentence of a paragraph, the content of a title, a cell of a table, a footnote, or other similar locations of sentence-like text. You cannot cross-reference this text, nor make a knowl with it. Though you can typically cross-reference a containing element.
Do not use -isms like \displaystyle to try to end-run the inline nature. It will just lead to poor results.
Keep Inline Mathematics Short
Longer mathematical expressions in an m element can lead to awkward line breaks, both in HTML output, and especially in PDF generated from . And complicated fractions or integrals can introduce abnormal line-spacing that is distracting to a reader. As a rough rule-of-thumb, keep an inline expression shorter than a moderately-long regular word and avoid tall constructions. This should allow 's line-breaking algorithms the best chance of success.
So a simple, short equality such as x=2 should not cause a problem, but if you want to claim that the probability distribution of the normal distribution has the right scaling factors, \int_{-\infty}^{\infty}\frac{1}{\sigma\sqrt{2\pi}}e^{-\frac{1}{2}\frac{\left(x-\mu\right)^2}{\sigma}} dx = 1, there is a good chance it will do less harm to your paragraph of you display it
\int_{-\infty}^{\infty}\frac{1}{\sigma\sqrt{2\pi}}e^{-\frac{1}{2}\frac{\left(x-\mu\right)^2}{\sigma}} dx = 1
using the md element described next.
One-Line Display Mathematics
The md element can be used for longer expressions or a single equation. Typically you will get vertical separation above and below, and the contents will be centered. See below about concluding periods (and other punctuation), and alignment. To number the expression, use the number attribute with the value set to yes. And once numbered, the expression can be the target of a cross-reference (xref), if you also add a xml:id attribute.
A symbolic local tag may instead be requested with the tag attribute, using the same set of symbol names as on an mrow; see . Since a tag stands in for a number, the tag and number attributes are mutually exclusive on a one-line md.
Multi-line Display Mathematics
We begin with the md element, but now used as a container. Within the container, content, on a per-line basis, goes into a mrow element. You can think of mrow as being very similar to a one-line md that does not have additional structure. In a align environment, the \\ marks the end of a displayed line. In each mrow delimits a displayed line, and there are no \\s. Use \amp to mark the alignment point. aligned math\amp, math alignment
On any given mrow you can place the number attribute, with allowable values of yes and no. These will typically be used to override the behavior you might place on the md container, via an overall number attribute, but there is no harm if they are redundant. A given line of the display may be the target of a cross-reference (xref) via an xml:id attribute, though the numbering flexibility means you can try (and fail) to target an unnumbered equation.
An mrow may have a tag attribute in place of a number attribute. This will create a number on the equation which is just a symbol. This is meant for situations where you do not want to use numbers, and the resulting cross-reference is local. In other words, the xref and its target are not far apart, such as maybe within the same example or the same proof. Allowable values for the attribute are:star, dstar, tstar,dagger, ddagger, tdagger,daggerdbl, ddaggerdbl, tdaggerdbl,hash, dhash, thash,maltese, dmaltese, tmalteseThese are the names of symbols, with prefixes where the prefix d means double, and the prefix t means triple. Cross-references to these tagged equations happens in the usual way and should behave as expected. See and for more on cross-references.
Finally, the default is to not number displayed expressions. If you want every displayed expression numbered, or you find yourself electing to number the majority of the displayed expressions, then there is a global default. In your docinfo element, put a equations attribute on the numbering element, and set its value to yes, rather than the default no.
Exceptional Characters
The macros, \amp, \lt, and \gt are always available within these mathematics elements, so that you can avoid the exceptional XML characters &, < and >. See for this same information, but in the broader context of your entire document.
Text in Mathematics
Once in a while, you need a little bit of regular text within an expression and you do not want it to look like a product of a bunch of one-letter variables. Use the \text{} macro for these. Only. Other ways of switching out of math-mode and into some sort of regular text will appear inferior, and can raise errors in certain conversions.
Do place surrounding spaces inside the \text{} macro.
Do not place any mathematics inside the \text{} macro.
Do not use the \mbox{} macro as a substitute.
Do not use font-changing commands (\rm) as a substitute.
For example,<me>f(x) = \begin{cases} x^2 \amp \text{if } x\gt 0\\ -7 \amp \text{otherwise} \end{cases}</me>produces
f(x) = \begin{cases}x^2\amp\text{if }x\gt 0\\-7\amp\text{otherwise}\end{cases}. This example amply illustrates the use of macros for XML exceptional characters (twice), appropriate use of the \text{} macro (twice), spaces in the \text{} macro (once), sentence-ending punctuation (see the source, the period is not inside the md element) and yes, we did think twice about the \\ (an exception to the rule).
Color in Mathematics
There is a temptation to use color to indicate or highlight portions of mathematics, especially for electronic outputs where color is easy and cheap. But before you leap, how will this work in black-and-white printed output? How will it work for a blind reader using a screen-reader or a braille version?
With careful use of grouping ({...}) you can make the two behaviors of \color effective. For example, go:{\color{blue}{x^2}}
Cross-References in Display Mathematics
A cross-reference is achieved with the xref element, see . You can place an xref inside a mrow, and remarkably, it will do the right thing. This is one of only two XML elements you can mix-in with syntax. A typical use is to provide a justification or explanation for a step in a proof, derivation, or simplification. And it works best with alignment, see below.
Alignment in Display Mathematics
Displayed mathematics is implemented with the AMS-align environment. Ampersands are used to control this, so use the \amp macro for these. The first ampersand in a line or row is an alignment point, typically a symbol, like an equality. The next ampersand is a column separator, then the next is an alignment point, then a column separator, then The moral of the story is you should have n alignment points, with n-1 column separators, for a total of 2n-1 ampersandsalways an odd number.
For example,<md> <mrow>A \amp = B \amp D \amp = E \amp \amp \text{Because}</mrow> <mrow> \amp = C \amp \amp = F \amp \amp <xref ref="txo" /></mrow></md>produces
A \amp = B \amp D \amp = E \amp \amp\text{Because} \amp = C \amp \amp = F \amp \amp.
Sometimes you want several short equations on one line. Do not use the bare md. Instead use a single mrow inside an md, and use alignment to spread them out evenly.
For multi-line display mathematics with no ampersands present, each line will be centered. This is implemented with the AMS-gather environment.
You can fool the alignment behavior by hiding all your ampersands in macro definitions, so there is the optional alignment attribute for the md element, in order to force the right kind of alignment. Allowable values are gather, align, and alignat. The latter is similar to align, but no space is automatically provided between columns. You can leave it that way, or explicitly add your own. For example, this allows you to precisely arrange individual terms of a system of linear equations, especially when terms with zero coefficients are omitted. When using the alignat option tries to count ampersands to see how many columns you intend, since needs this number (we are not sure why). This detection can be fooled too, especially if you have something like a matrix with lots of ampersands for other purposes. So set the alignat-columns attribute to the number of intended columns, if necessary.
If you have many aligned equation in a single md, but want to add a short sentence or two somewhere in the middle, place it in an intertext element, and keep it simple. Just some words and punctuation, plus maybe some elements like em or q, but nothing like a list. In PDF output constructed via the alignment will be preserved across the break for the intertext (since this feature is inspired by 's \intertext{} macro). Unfortunately, this is too complicated in other (electronic) output formats, so we just do the best we can to preserve your intent. Perhaps some day, MathJax will be more capable, and we can make your source do better.
Commutative Diagrams
Commutative diagrams may be authored using the AMSamscd package. While restricted in some ways, such as the lack of sloped or curved arrows, it has one important advantage over more general drawing tools. Support for HTML output comes from MathJax, and hence has accessible versions included in the output.
Typical use would be within an md element, so starting with \begin{CD}. Despite this being multi-line output, we have not chosen to integrate it within the more general md/mrow structure, but that decision can be revisited.
Fill-In Blanks in Mathematics
The other mix-in XML element is fillin. It may use a fill attribute with some math string to determine width, height, and depth of the blank. Or it may use a characters attribute that takes an integer value to hint at the width.
Page Breaks for Tall Display Mathematics
For print output, do nothing additional and will do its best to break your display between lines. You can turn this behavior off by setting the break attribute on the md to the value no. Once you do this, you can then selectively allow a page break after a given mrow by setting the break attribute on the mrow to the value yes.
Your Macros
These go in the docinfo section, wrapped in a macrosmacro element. Keep them simpleone or two arguments, and one-line definitions. This is not the place to be fancy, and not the place to try to end-run the structural aspects of . The idea is to define something like \adjoint{A} for the matrix A to be a superscript asterisk, and later you can change your mind and use a superscript dagger instead. Keep in the spirit of and use readable, semantic macros. For example, do not use \a{A} for the adjoint of A. Repeating: keep your macros simmple, and to a single line.
will use your macros correctly for print and for HTML, after erasing whitespace from the left margin, and stripping comments.
The name of your macros also cannot contain any numbers, otherwise MathJax will silently fail and may not read any subsequent macros you might have. This is important because will place custom macros for you at the end of your own, defined at , to be used. Those would fail to be processed by MathJax if your own macros caused it to stop reading.
Semantic Macros
We have resisted using overly-verbose MathML for mathematics, or worse, inventing our own XML vocabulary for mathematics. syntax generally works great, but to work even better within an author needs to take a few extra steps. Your work will translate better to a variety of formats, and will be easier to maintain, with well-designed macros. A well-designed macro will convey the mathematical meaning of the object to a reader of your source, without them looking at your definition of the macro. In situations where a mathematical object might be written with different notation, it should be trivial to change the macro's definition and preserve the mathematical meaning. For example, consider two versions of a binomial coefficient:
&{n\choose r} & &\operatorname{C}(n,r)which could both equally well be the realization of \binomial{n}{r}.
Here we describe some notation which often carries multiple mathematical meanings and/or may be created with in multiple ways.
Vertical Bars
Vertical bars are used for a variety of mathematical objects. Paired to create functions of expressions: absolute value, \left\lvert x-1\right\rvert; norm of a vector, \left\lVert \mathbf{v}\right\rVert; cardinality of a set, \left\lvert X\right\rvert; and the determinant of a matrix, \left\lvert A^k\right\rvert. As relations: division, a\mid b; parallel lines L_1\parallel L_2. Sets are another use: E=\left\{x\in{\mathbb Z}\,\middle\vert\, x\equiv 0\pmod 2\right\}.
\vert, \Vert, \lvert, \rvert, \lVert, \rVert are the delimiters, where l and r refer to left and right, and the capitalized versions are a pair of vertical lines. The qualifiers \left and \right can be used to have the length of the bar grow to match what it encloses. Note that there is a \middle that we have used above with \vert for the set E, and we have added space on either side. \mid and \parallel are relations, used above to indicate divisibility and parallel lines, and so automatically get an extra bit of spacing on either side.
When using \left or \right in isolation, \left. or \right. can be used to define a group that only has a bar on one end. For example:\int_0^1\,\sin^{-1}(x)\,dx = \left.\frac{1}{\sqrt{1-x^2}}\right\rvert_{x=0}^{x=1}.
Times
The times symbol sees many uses that are different: dimensions, multiplication, and more complicated products (such as a Cartesian product of two sets). Macros \product, \times, and by could carry different meanings, even if each one is defined by the \times symbol, \times. For example:
Chess is played on an <m>8 \by 8</m> grid, which
contains <m>8 \times 8 = 64</m> little squares.
If <m>G</m> and <m>H</m> are finite groups, then
<m>\card(G \product H) = \card(G) \times \card(H)</m>.
Punctuation After Display Math
If a chunk of displayed math concludes a sentence, then the sentence-ending punctuation should appear at the conclusion of the display. (And certainly not at the start of the first line after the display!) But do not author the punctuation within the mathematics element, put it afterwards, where it logically belongs.
More specifically, place a sentence-ending period (say) immediately after the closing of an md element. will place the period in your output in the right place and in the right way. (By using 's \text{} macro, if you are curious to know the details.) Here is an example. The XML source<md> <mrow>(a+b)^2</mrow></md>. Now...will render as(a+b)^2. Now
This all applies more generally to clause-ending punctuation, such as a comma. Take notice of the requirement that the punctuation must be immediately after the closing tag of the math element, otherwise it will not migrate properly. For example, do not interrupt the flow with whitespace, or an XML comment, or anything else.
For inline mathematics (the m element) the same authoring principle holds, though you would likely do this naturally. Author the punctuation outside the element, where it will remain.
Here is a technical subtlety that will demonstrate some of the inner machinery of and our conversions. In your work, locate a theorem that has some numbered display mathematics (md) which is at the end of a sentence, and which you have authored as described above. In HTML output, test a cross-reference (xref) to the theorem and you will see the period for the end of the sentence at the end of the display, where it should be. Now test a cross-reference (xref) to one of the numbered equations. First, the knowl will contain the entire display, to provide context, but it also will not contain the period, since the rest of the sentence is not in the knowl and so the period is not necessary.
Authoring Punctuation after Mathematics
Always follow the instructions in about placing all punctuation following mathematics after the math element, not inside it. will do the right thing for display math for you. But furthermore, there are some special situations where the output format is not visual, such as braille or audio, where the placement of the punctuation is both different and important to not confuse reader. You can help ensure your various outputs are of the highest quality by observing these sorts of details.
Lists of Mathematical Expressions
It is common to make lists of expressions, equations, or identities. Think of the definitions of trigonometric functions, a collection of antiderivatives, or a compendium of generating functions.
In these situations, author a list item, li, within an ol or ul, by using only the necessary m element. Do not use an intervening p, and do not include any adjacent text. Whitespace is OK. Then will add 's \displaystyle command to improve the visual appearance of the mathematics, and so you do not need to.
If you prefer to not have this behavior, insert an intervening p, and output will be identical, but without the \displaystyle.
Note that any text, other than whitespace, outside the m tag will disable this feature, including punctuation. However, according to the Chicago Manual of Style, Items carry no closing punctuation unless they consist of complete sentences. So that comma at the end of your equation probably doesn't belong there anyway.
, which we use as the syntax for mathematics, allows extensive customization through packages, which are enabled through a \usepackage{} macro. Packages also provide extensive customization or control over the document structure. Thus, provides support for additional packages to enhance mathematical content, but does not have any facility beyond this (e.g. to influence or support document structure).
We use to create PDF and print output. For most other electronic formats, we use MathJax to embed mathematics onto a web page or to make images of mathematics used in EPUB, and so on. MathJax has extensions, which mimic certain packages. For a list of supported extensions see MathJax's TeX/LaTeX Extension List. Note that some of these extensions are technical (not supporting mathematical syntax) and some we load already as part of setting up MathJax, so carefully evaluate how a given package is selected to support certain macros.
Suppose there is a math-mode macro you would like to use. We will illustrate with the \cancelto macro that is part of the fairly standard cancel package. It will draw an arrow through a mathematical formula, with a replacement value. Conveniently, MathJax has a cancel extension, and this extension also defines the \cancelto macro. You need to check this, as a package and a MathJax extension are not guaranteed to define the same collection of macros. Nor are the two guaranteed to have the same name (though this is best practice).
To make the \cancelto macro available and active in your mathematical elements (m or md) add the following to your docinfo element:
<math-package latex-name="cancel" mathjax-name="cancel"/>Now you may freely use the \cancelto macro in your mathematics, confident that it will render correctly in all output formats.
Note that both attributes latex-name and mathjax-name must be present. They may be identical (as above, and typical) or they may be different (rare). There are situations where one might be empty. Of course, you can use these macros in other definitions of mathematics macros you might make (). However, we do not guarantee the absence of conflicts with other packages in use, even if employed by . Nor do we support debugging such conflicts.
If there are macros you desire, but without a MathJax implementation, then there is not much we can do, short of suggesting you write your own extension (not recommended, see A Custom Extension). There are some workarounds which we may document shortly.
Mathematics in Titles
Titles are a key feature of , and migrate to various places in different conversions, where they might be mixed with bold text, or where they do not render properly. Please report any substandard situations. A good example of this phenomenon is mathematics in division titles, where we provide a plaintitle alternate. See for a complete discussion.
Extras
We were once in the business of supporting extra macros for mathematics, but have discontinued that practice (in a mostly backward-compatible way).
We are moving away from built-in automatic support for the \sfrac{}{} macro. As of 2023-10-18 you may use this macro, but results will just look like regular inline fractions. However, you can get superior typesetting in PDF output by loading the xfrac package with the following in docinfo:<math-package latex-name="xfrac" mathjax-name=""/>See the for more details.
Historically, we provided good internal support for the extpfeil package of extensible arrows, even though the version has some severe shortcomings. As of 2023-10-19, it is now an author's responsibility to elect this package, along with the reliable MathJax extension of the same name. And as of 2026-03-04 we have removed all attempts at backward-compatibility. Add to docinfo:<math-package latex-name="extpfeil" mathjax-name="extpfeil"/>See the for more details. Note that this package can have several adverse impacts on the conversion to PDF via .
Notes
As mentioned at the start of this section, your use of needs to also be supported by MathJax so that it may be rendered as part of an HTML page displayed in a web broswer. In addition to the information at the start of , this subsection has some notes that may help you navigate this situation.
Generally, MathJax supports commands available in the amsmath package.
You can construct, and use, your own macros, but only for mathematics, not for document structure or document management. See .
Support for loading extra packages is extremely limited. See .
The \matrix{} command, and its friends (such as \pmatrix{}) are not supported by , despite being recognized by MathJax. So use environments like \begin{matrix} and \begin{pmatrix} (with their corresponding \end{}, of course) and you will get accurate results for both formats.
Mathematics Best Practicesmathematicsbest practices
This section addresses some finer points of authoring mathematics with , motivated in large part by helping MathJax create the most accessible output possible, which in many instances will also create a superior typographical result across all conversions. We try to provide justification and explanation, though that might not be easy in all cases. Some are definitely technical, and we are only aware of them from authors' experience and reports. Many are meant to help in the conversion to braille. This is an incomplete list so additional reports and additions are welcome.
Large Numbers
Using a separator to aid in reading a large number should avoid using a space as a separator. So 234{,}766{,}544 or 234.766.544 is preferable to 234\,766\,544. We have used braces around the commas in the first instance, and a thin space, \, , in the last instance.) For 234{,}766{,}544, braces around each comma prevents automatic trailing space that would normally be desirable in a list of numbers. In other words, author as:<m>234{,}766{,}544</m>Here is the version with commas and no effort to distinguish the big number from a list of smaller numbers: 234,766,544.
Ratios
If you really intend to communicate a ratio with a colon, keep it super-simple, like 3:2 or a:b. Do not wrap it in parentheses or other decorations, since then the colon will be communicated literally in braille. For example, the index of a subgroup, [G:H], will not be confused with a ratio, due to the brackets. But (4:5) will not be output in a conversion to braille in a way that communicates that it is a ratio. If you keep your ratios simple, braille output will use special syntax designed for ratios.
Function and Operator Names
Common mathematical functions, like \sin (\sin) and \det (\det), are built into , well-known, and commonly used. Compare with the versions authored as simple sequences of letters sin and det, which interprets (and typesets) as a product of three individual variables.
Instead, use the \DeclareMathOperator macro as we will illustrate. Suppose you want to discuss the set of homomorphisms from the vector space U to the vector space V, \Hom{U}{V}. Define the macros
\DeclareMathOperator{\homop}{Hom}\newcommand{\Hom}[2]{\homop\left(#1,\,#2\right)} and employ as \Hom{U}{V}, which yields \Hom{U}{V}. Compare with the no-macro, no-special-care, version, Hom(U,V). Grouping Hom as a unit will prevent from rendering it as a product of three variables, use the correct font, and will preserve the meaning in Nemeth braille. Notice that the \homop macro is never used in your source.
Directly contradicting this general advice, Sean Fitzpatrick reports on 2021-01-06 that the macro construction
\newcommand{\foo}{\operatorname{foo}}
behaves better in Asymptote diagrams than
\DeclareMathOperator{\foo}{foo}
So perhaps you need to define a second macro for use in Asymptote diagrams.
Permutations in Cycle Notation
The permutation in cycle notation, (1246)(35), is difficult to distinguish from a product of two integers and gets entirely different treatment than intended as Nemeth braille. And when the points of the permutation group involve multiple digits, some other notation will become necessary anyway. Commas work, as in (1,2,4,6)(3,5). Or if commas look too cluttered, then spaces are possible, as in (1\;2\;4\;6)(3\;5), where we have used the medium space, \; .
Text in Math
We have discussed this one already, but it is important for a conversion to braille. If you use a word inside of math, such as describing a condition for membership in a set, put any spaces inside of a \text{} macro, not on either side of it. So \text{ and } is preferable to \ \text{and}\ . Similarly, do not put any math inside a \text{} macro. For example,\text{ for -3 \lt x \lt -2 }will lead to poor results due to the inequalties mixed in with the text. A better version would be\text{ for }-3 \lt x \lt -2and now the numbers will be treated as mathematics. Review for more details.
Math as Text
Do not use symbols from mathematics in non-mathematical situations such as the construction 73^\circ to indicate a temperature in degrees, outside of a mathematical or scientific setting, such as in a poem about springtime weather. In this particular case, we provide a degree element that can be used in non-mathematical contexts, so we can get 73, which will behave well in a variety of conversions (and can also be used for latitude and longitude in your poem). Similarly, we advocate writing ordinal numbers with text on the baseline, rather than a construction like 2^\mathrm{nd}. So use 1st, 2nd, 3rd, 4th, etc.
Avoid Nesting
It may seem convenient to nest custom macro definitions. For example:
\newcommand{\makered}[1]{{\color{red}{#1}}}\newcommand{\MAKERED}[1]{\textbf{\makered{#1}}}
The second macro definition uses the first macro. At least one conversion isolates macro defintions for use only on an as-needed basis. So here, if the author used \MAKERED without also using \makered close nearby, it would lead to an issue under that conversion, because \makered would be locally undefined. So we recommend defining each macro from the ground up. In this case:
\newcommand{\MAKERED}[1]{\textbf{\color{red}{#1}}}
This also contradicts our advice above on operator names.
Listslistlistlabel
A list is an unusual construction, even if everybody knows exactly what one is. We view the list itself as a container of various chunks of text, while those chunks of text are the list items. Each item has a marker to identify it.
Markup and processing is complicated by the possibility of a list item containing a list, resulting in nested lists. We simplify this problem by requiring that a list appear within a paragraph (p), see . One of the three exceptions is the possibility to place a list into a block that earns a caption and a number, using the list element, see .
The final subsection contains some examples that you may wish to consult as you read this section.
Ordered, Unordered, Description Lists
An ordered list has items with markers that are naturally ordered (usually numerically or alphabetically). We borrow from HTML, and use the ol tag to construct an ordered list. Some commentators suggest an ordered list should only be used when the order of the content is important. So the steps in a recipe would belong in an ordered list, but the shopping list when you go to the store need not be an ordered list.
An unordered list has items with markers that have no inherent order and so are usually symbols like circles, disks, squares, We borrow from HTML, and use the ul tag to construct an unordered list.
A description list has items that have short pieces of text as their markers. We borrow from HTML, and use the dl tag to construct a description list. However, unlike the HTMLdl, the items in a description list are tagged with li. A title element within each li provides the term to be described (the dt in HTML terms) and the remaining elemens of the li provides the description (the dd in HTML.)
Ordered lists are used as part of objectives () and exercises (). Any of the three lists may occur inside the list element (below, ). Otherwise, a list must occur within a paragraph, p. This means that to place a list within a list item of another list, the list item must contain a paragraph.
List Markers
Do nothing, and your ordered and unordered lists will get sensible default markers. They are consistent in the following sense. If your list has two items, and each of the two items contains a list, then these two lists will use the same type of marker.
For a description list, you author each marker as part of each list item, as discussed below in the discussion of list items.
If you want to change how an ordered list is marked, then you use the marker attribute on the ol, whose value is a format code. This string contains one of five codes (a single character), which may be surrounded by other characters, excluding the five codes. For example marker="(A)" will produce uppercase letters wrapped in parentheses: (A), (B), (C), . The extra formatting works well in a conversion to , but is not possible technically in a conversion to HTML, so it should be considered decorative, and not relied upon for meaning. The formatting does not carry through to the numbers of list items in cross-references.
If you want to change how an unordered list is marked, then you use the marker attribute on the ul, whose value is a format code. This string contains one of three codes in the table below. Then every item of the list will have that symbol as its marker.
Ordered List MarkersCodeRealization1Arabic numeralsaLowercase lettersiLowercase Roman numeralsAUppercase lettersIUppercase Roman numerals0Arabic numerals, from zero
Unordered List MarkersCodeRealizationdiscFilled small circle, aka a bulletcircleSmall circlesquareA square
Default marker types are assigned to each level of nested lists in the order shown in the table, and cycle back to the top of the table if necessary, though zero-based Arabic numerals will be skipped for ordered lists.
Start with the defaults, and experiment as needed. See the examples below for some extreme (and unwise) customizations of markers.
For a description list, possible markers are more varied than what you can express within an attribute. So the list item must have a title element (see below). This should be very short text, and may contain inline mathematics. It is often rendered in bold, so be aware that some markup may get lost. Perhaps for obvious reasons, do not include footnotes, cross-references, or display mathematics. The dl element has a width attribute, with possible values narrow, medium, and wide. The default is narrow. This is a hint about how much text you have in these markers, and in certain presentations may make better use of horizontal space on a page.
List Items
So now you have a list all organized as a container. What do you put in it? List items, using the li tag, again borrowed from HTML, and independent of the type of list.
A list item could be really simple, maybe just one or two words. Then you can use, and conceptualize, an li element as not much different from a p element, and the rules about content are not much different. Even several full sentences, with some intermediate displayed mathematics, is fine.
But once you want two paragraphs in a list item, then you need to structure the contents of the item. So a list item might have five paragraphs in it, requiring five p elements. Notice that this is how you nest lists. Make a list item, include a paragraph, then put the subsidiary list into the paragraph. Indeed, this is the only way to nest lists. A consequence of this is that the only way to have an unstructured list item is if it is a terminal item, like the leaf of a tree.
Other items may be interspersed among the paragraphs of a list item, such as a chunk of verbatim text delimited by a pre tag. But anything with a number, such as a figure or remark is banned, in part because the consequences for numbering and organization become too complicated. Imagine a remark, and a paragraph of the remark has a list. Fine so far. But if the items of that list can again contain remarks, the possibilities become endless. You should be able to include non-textual items, like an image, and work is underway to improve this. You can use a sidebyside in a structured list item, which can in turn hold an image, tabular, or similar. But you cannot place items in such a sidebyside that are numbered, so a figure or table is not possible. A general rule is no numbered components in a list item. Computational components, such as sage are also banned from list items due to the difficulty of converting them into electronic computational notebooks with a relatively flat structure.
A list item of a description list must have a title element, to provide the text of the marker. Now that the list item has some structure, the remainder must also be structured, typically with some paragraphs, as discussed above. In other words, the earlier option of employing an li element just like a p element is not available in a description list. Further, given the complexity of presenting a description list, it can only be a top-level list. It can contain the two other types nested within its list items.
For ordered and unordered lists, you may optionally include a title when you have structured the li. This will be rendered as a heading of sorts for the list item, though the only distinction might be a change to an italic or oblique font. As an example, this might be a good way to author a Frequently Asked Questions (FAQ).
Note that a list item holding only an m element will get special treatment. See .
Cross-References to List Content
Note that a list is a container, so it cannot be the target of a cross-reference, and so the three types of lists cannot have an xml:id attribute. But you may well be able to point at some other structure (, a remark) with a paragraph containing a list of interest. If this seems overly restrictive, read below about named lists.
By contrast, a list item, li, is not a container, and does contain content. Further, a list item of an ordered list has a marker that is natural text for a cross-reference. So in this situation, the list item can have an xml:id attribute. But note that the number of a list item of an ordered list, which is nested inside a list item of an unordered list, is not defined, so a cross-reference by number can fail.
The number of a list item, mostly for the purposes of a cross-reference, is the concatenation of all of the individual markers in the containing lists, outermost first. For example, from the example lists below, the list item with content Walleye has number . These are indivisible, there is no way to get a component, excepting leading subsequences obtained by using an xml:id on a containing list item. Note that the format codes never become part of the number.
Lists in Columnslistcolumns
You can control the number of columns used to layout an ordered or unordered list (but not a description list). On the ol or ul use a cols attribute with values 2 through 6. (1 is the default.)
We do not yet (2018-03-28) have enough technical confidence to allow an author to specify a row-major order versus a column-major order for the layout. So understand that this is can be an implementation choice for a particular conversion, and can vary across implementations. If this is critical to conveying meaning, and not an aesthetic preference, then maybe consider using a table or tabular ().
Use Only a Few Columns for Lists
Anything more than three columns tends to get very crowded horizontally. Think twice about using more than that, and realize that six columns should be a ridiculously generous upper limit, and not a promise of good behavior in final output.
Exceptional Lists
We use the tags for lists in a few situations outside of anonymous lists inside paragraphs and named lists. These include the items within an objectives, subparts of an exercise, and within panels of a side-by-side. See those topics to learn about subtle differences in use.
Examples of Lists
To illustrate this section, we offer three too-elaborate examples. Take these as compact examples of what is possible, and not best practice in your writing. We also use these to illustrate cross-references to list items, see .
We have a paragraph that begins with anonymous list of species that live in water (maybe partially), which necessarily is placed inside a paragraph. The roman numerals purposely do not have any extra adornment in the version (but may for HTML output).
Amphibians
Frog
Salamander
Newt
Toad
Freshwater Sport Fish
Walleye
Bass
Exquisite Fish
Trout
Saltwater Sport Fish
Salmon
Halibut
Marlin
Within the same paragraph, we transition to an unordered, two-column, list of some germs:
Bacteria
Staphylococci
Streptococci
Salmonella
Viruses
Varicellovirus
Orthopoxvirus
This sentence concludes our (small) paragraph on small and large organisms.
A named list, only to test cross-references.
A two-deep ordered list
A and i
A and ii
B and a
B and b
A Test Title
B and c
C and I
C and II
C and III
An example of a description list, anonymously in a paragraph.
Red
The color of the sun at sunset.
Blue
The color of a clear sky.
Aqua
The color of shallow tropical waters.
x^2 + y^2
Definitely not a color
Best Practice
Lists are a very attractive device. Hopefully the discussion above has convinced you that they are more complicated than they first appear. Think carefully before using one, and consider if some other structure (paragraphs, sidebyside, a subdivision) might do a better job of organizing and communicating your meaning. And if a list is really necessary, consider if it should be named or anonymous, heavily-nested or nearly-flat, with columns, or with long or short content in the items. Cross-references from the items of a list to more complicated structures is another device that works well.
has markup for a variety of interactive problem types, described individually in the subsections to follow. Generally, for a regular HTML build (), these will be interactive, informing the reader when their answer is correct, and providing feedback when their answer is not correct. When HTML is built to host on a Runestone server (), then student progress as part of a course will be recorded on the server. Some features, which will be noted below, such as execution of computer code, is more capable on a Runestone server.
Generally, an interactive exercise is authored much like a regularexercise () with statement, hint, answer, solution. However, there is also some additional markup which serves as a signal that the exercise is more than a short-answer, or free-response, question. Usually, but not always, this signal is an additional element following statement. One consequence of this is that all but one type of interactive exercise will require a statement element to contain the question text.
Each type of interactive question has a static version for use in output formats like print, PDF, or braille. Details are given below. Note that since the ability for instant evaluation of a reader's answer means an author provides the solution and other feedback, this can then be incorporated into a static version as an automatically-generated answer and/or solution (in addition to any others an author provides). Note that an author can provide a hint for use in all output formats, but there are not any automatically-generated hint for static versions of interactive problems. Visibility of these solutions can be controlled via the mechanism applicable to all exercises, see .
Note the opportunity to provide feeback to the reader using a feedback element in various locations. These are generally optional, but highly encouraged as a way to improve the quality of your reader's experience.
These interactive questions are enabled by software from Runestone Academy () and have extra capabilities when the online version of our output is hosted on Runestone servers. But you must use a label attribute. This is described more carefully next, so that we can make reference to it from other locations.
Use label attribute for Runestone Components
Many of our interactive exercises and programming environments are powered by software from Runestone Academy (). Not suprisingly, when you build online HTML for hosting on Runestone servers these components have more features than otherwise. This is managed by locating each component in a (massive) database. And so each exercise needs an identifier.
You accomplish this by placing a unique value in a label attribute on an outermost element, such as an exercise, task, project, video, program, etc. You should choose these strings carefully, as they should not be changed, lest the database entries become confused. Under the hood, we get the content of docinfo/document-id element, and the edition attribute of document-id, to form a database identifier such as AATA_2_easy-exercise. The document-id distinguishes your book from other books, and the edition allows you some flexibility. In other words, if you declare a new edition, you can change some of your label as part of that process and you will get new database entries while preserving the old.
Short answer: before hosting your project on Runestone, decide on permanent values for document-id, edition, and all necessary label. (We expect to add a warning for Runestone builds when these values are not set.)
A True/False exercise must have a statement element, and this element must have a correct attribute, whose value is yes or no (there is no default value). That's it. The presence of the correct attribute is the signal that this is a True/False exercise.
The text of the statement is the assertion the reader must determine is true or not. The correct attribute is how an author describes if the statment is true (yes) or false (no). This is enough information for a conversion to formulate a version of the question. An optional feedback element may follow the statement, and should provide more than a binary explanation of the exercise.
Presentation as an interactive element will vary cosmetically, according to the output type targeted.
A static version gets an automatic answer that is simply True or False. The automatic solution is the same, plus the content of feedback.
A multiple-choice exercise is signaled by a choices element (plural) following a statement and preceding an optional hint. The choices element is structured by a sequence of choice elements, whose content is a potential answer for the reader to choose. So the statement is the prompt or question, and the choice are the possible answers.
At least one choice has an attribute correct set to the value yes. The default value of correct is no. There may be several correct answers, indicated with this attribute. The presentation as an exercise with one answer or many is automatic. However, in the event there is exactly one correct answer, but you wish the reader to consider the possibility of multiple correct answers, you may set the multiple-correct attribute on the choices element to yes. The default value is no.
Each choice element must be further structured with a statement and a feedback, which each can contain items such as paragraphs (p). In this way, the highly-encouraged feedback can be associated with each correct and incorrect choice.
The order of the choice as authored, is the order they will be given in a static version. To present the choices in different orders in an interactive version, set the randomize attribute on the choices element to yes.
An automatic answer for the static version is simply the list markers for the correct choices. An automatic solution has an indication for each choice if it is correct or incorrect, along with the choice's feedback.
Parsons problems are named for Dale Parsons, one of their creators, along with Patricia Haden. They could also be called mixed-up blocks. A reader is presented with a set of blocks containing text, either computer code or natural language, and their goal is to assemble the blocks into a correct order. This could be a computer problem with a stated purpose, or could be a logical argument such as proof, or it could be a procedure such as a recipe. An interactive drag-and-drip interface is a very efficient presentation for a reader.
Similar to multiple-choice exercises, a statement is followed by a blocks element containing a sequence of block elements. The blocks element is the signal that this is a Parsons problem. The overall exercise element may have several attributes:
numbered set to left or right indicates the blocks should be numbered, and on which side the numbers go. The default value is no.
language set to natural indicates the text of the blocks is natural language, while the use of a computer language should be indicated by naming the actual language employed. A list of languages will soon be added in . The default is natural.
indentation set to hide indicates that a computer code exercise will not include indentation common to each line of a block. In other words, the problem is slightly harder, as the interactive interface will require the reader to adjust the block horizontally to provide common indentation for the block. The default is show.
adaptive set to yes enables an adaptive mode: after three incorrect attempts, the problem will offer help. After continued failures, the problem will be incrementally simplified: distractors will be removed, one at a time. For coding problems, requirements for indentation may be removed.
A block that has natural content is authored as usual, with a sequence of paragraphs (p) or similar. If the content is a computer language, then it should be authored as a sequence of lines, using the cline element, which allows for precise interpretation of indentation and non-standard characters. Include all indentation necessary for each line, no matter how indentation is set. The content of the blocks, arranged properly, should form a syntactically correct program. If the reader is to provide indentation, will strip away the common amount of indentation.
A block may be a distractor, meaning it is not to be used at all in the solution. Indicate this with a correct attribute on the block set to no (the default being yes). Furthermore, a given block of the solution can be authored with several alternatives, only one of which is correct. Indicate this by structuring a block with a sequence of choice. Each choice should be authored similarly to a block, and the one correct choice should have the correct attribute set to yes (the default being no).
The blocks should be authored in the correct order and the interactive interface will control the randomization. A block that is a distractor may be placed in any location amidst the other blocks. Each block should have an @order attribute that is a whole number, counting from 1. This is the fixed, mixed-up, order that will be presented in any static rendition. In static versions, sequences of blocks are in lists, which are numbered if the attribute has been set, but the left/right distinction is lostall numbers are to the left. An automatic answer is provided if blocks are numbered, and it is just the block numbers in the correct order. An automatic solution is always generated with the text of the blocks listed in the correct order. For an exercise with computer code, the program element and the exercise's language attribute will produce a syntax-highlighted listing.
There is no provision for a feedback element. Further explanation may be provided in a hint, answer, or solution. Also, a good interactive interface can provide assistance to a reader by telling them if they have too few or too many blocks, or combining or removing blocks, and so on.
It is possible to specify a partial ordering of blocks using the name and depends attributes of block. name is used to assign the block a string identifier. depends should be a space-separated list of the name of each block that must precede the current block. The interactive version of the exercise will mark as correct any ordering of blocks that is valid according to the described dependencies. Static versions of the answer will only display the cannonical answer as determined by the order of the blocks in the source document.
If a Parsons problem that has a language set to a value that is valid for an activecode (), it can be made runnable in interactive versions of the book - when the student completes the exercise, they can run the code they built. To do so, define a program element as a sibling to the blocks. The program can have all of the normal attributes for an activecode, but does not need the interactive attribute to be set. It should have an empty body as the student work will be used as its contents. If it is necessary to add additional code to the program, you can add either or both a program-preamble and program-postamble element as siblings to the program. The program-preamble will be placed before the student's code, and the program-postamble will be placed after the student's code. Both elements can have an indent with some text to use as the indentation for every line in the block; use this to align the added code to the expected format of a correct answer.
A horizontal Parsons problem is very similar to the traditional vertical problems just described in . Except they are horizontal. Which means the blocks are very short (a word or symbol) and they are rearranged by the reader to form a horizontal bit of text. They are ideal for constructing a single line of computer code, such as a regular expression, or a short sentence. While similar, they have a few features which are different.
To indicate a horizontal problem, set the layout attribute on the blocks element to the value horizontal. The default value is vertical and so is not necessary for the traditional versions.
The syntax for blocks is the same, and they are authored in an order that yields a correct answer. The use of an order attribute on each block indicates a rearrangment to be used for a static version. Blocks may be reused. To do this, place an xml:id on a single instance of a block to be reused. Then, to indicate its reuse as part of a correct version, use a ref attribute on a block. Since the duplicate instance is not shown to the reader, the use of order and ref is mutually-exclusive. You can set the reuse attribute on the blocks element to the value yes to force the interface to allow the reader to reuse blocks, even if there is no duplication in the correct version. Otherwise, the interface reacts to the presence or absence of blocks with the ref attribute.
Distractors may be included in the same manner as for vertical Parsons problems, by setting the correct attribute on a block to the value no. The default is yes. It does not make much sense to indicate a reusable block (in either form) as a distractor, so don't.
Another option on the blocks element is the randomize attribute. The default value is yes. When the value is set to no, then the blocks are always presented to the reader in the same order, which is the one given by the order attribute.
As of 2022-11-28, the implemenation of these problems assumes that the blocks rearrange to be computer code. So you can set the language attribute on the exercise element to natural, but it will not have much effect. Markup like em on the text of a block will be unpredictable, as will attempts to use mathematics. And the text of blocks will always be in a monospaced font, perhaps with some syntax highlighting if language is set properly.
A matching exercise asks a reader to pair a premise with a response. Similar to multiple-choice exercises and Parsons problems, a matches element follows a statement and this is the signal. The matches element is structured as a sequence of match elements, each of which has a premise element and the matching response element. Since the content of each premise and response is best kept short and simple as a phrase, the elements may also be simple phrases without the additional structure of p elements, or similar. That's it.
An interactive interface should randomize at least one of the lists of premises and responses, consulting the authored version for the correct pairings. For a static version, an author should put an order element on each match whose value is a whole number, starting from 1. Then the premise will appear in the authored order, while the response will be re-ordered according to the attribute.
A single feedback element may be given, as a peer of statement, in addition to authored hint, answer, or solution. For a static version an automatic solution presents the problem in the order the match were authored.
Clickable Area Exercisesclickable area exercisesinteractive exercisesclickable areaexerciseinteractiveclickable areaselect text exercisesinteractive exercisesselect textexerciseinteractiveselect text
Clickable Area is a misnomer, assuming an interactive version of this type of problem. Perhaps Select Text would be better. In any event area is not meant to connote a geometric notion, instead this is about a sequence of characters, either in natural language or in computer code.
A statement is a prompt, describing which sort of areas should be selected by the reader. Such as: Locate all the nouns in the following paragraph. This is followed by an areas element, which is the signal for this type of exercise. The areas element holds either (a) paragraphs or similar, or (b) a sequence of cline, understood to be program code. In the latter case, a language attribute on the areas element will enable the right syntax highlighting in some output formats.
Within the content of the areas element an area element can be used to surround a run of characters. These cannot cross XML boundaries, such as a cline or p. A correct attribute, with values yes or no, indicates the text is to be selected (clicked on) or that it is a distractor (tempting to click on). The default is yes, so only distractors need to be indicated.
A single overall feedback may be placed following the areas element.
Now an interactive version will allow the reader to click on and off the marked areas of text, and provide information about which are correct and which are not, in addition to general feedback.
Generally, a static version of the problem will not be clickable. wink So your prompt might say something generic like select or locate since a reader might work the problem on paper by circling or underlining the areas. A static version includes an automatic answer which is a list of the correct areas as text, followed by a list of the incorrect areas as text. An automatic solution repeats the text in the areas element, and uses (accessible) visual cues to note the correct and incorrect text.
A fill-in-the-blank problem allows the reader to submit free text that is evaluated for correctness. The signal for a fill-in problem is a statement containing a sequence of fillin elements with a sibling evaluation element. Randomized elements to appear in the statement and solution and to be used in evaluation of reader responses requires the presence of an additional setup element that is also a sibling to the statement. The presence of the setup provides the ability for the statement and evaluation of the responses to incorporate random, dynamically generated elements.
The body of the statement is the same as for any exercise-like statement, with the addition of two elements of markup. A fillin is placed at the location a blank would be required for the reader's response. Details for this element are described in the next paragraph. When the question includes a setup, content can reference the string or TeX representation of the object (if defined) by using a eval element, where the name of the object is provided by a object attribute.
The fillin element is required to have an answer attribute that contains an answer that would be evaluated as correct, in the case that the question has a known, static, valid answer, or an ansobj attribute that contains the variable name of a dynamically generated object representing a correct answer, in the case that the problem has an associated setup. In addition, the fillin is required to have a @mode that characterizes the mode by which the submitted answer will be parsed. Current possible modes are string, number, and math (only for the dynamic implementation). The fillin element may have a width attribute specifying the number of characters for the static-version blank. For questions that involve dynamic evaluation, a name attribute may be used to identify a variable name that will reference the reader's response during dynamic evaluation of other blanks. (A standard ans variable will always be available in the context of each individual response's evaluation.)
The evaluation block will have a sequence of evaluate elements, one associated with each of the corresponding fillin elements appearing in the statement. By default, the association is by order. If each fillin has an associated name, the association does not need to be in order. Within each evaluate element, there will be a sequence of test elements that define a comparison rule for the test and the associated feedback provided when the test evaluates as true. Default behavior is that the answer or ansobj attribute of the corresponding fillin is used for comparison to evaluate a correct response. If the author wishes to override this default or wishes to provide specific feedback for a correct response which will also be used for the automatic solution for static versions, the author will identify one test element with the attribute correct="yes".
Within each test, the author needs to specify which type of comparison will be used. For non-dynamic questions, three comparisons are available: numcmp, strcmp, and jscmp. For dynamic questions that include setup, additional options include mathcmp comparisons involving math objects and logic elements to construct more complex boolean tests involving these objects, described later. Feedback that is provided to the reader when the comparison is true, beyond saying the response is correct/incorrect, is provided in a feedback element which can itself contain structured text including eval elements to reference dynamically generated objects.
A numcmp and a strcmp can specify that the comparison should be to match the provided answer for the corresponding fillin by including the attribute use-answer="yes". Otherwise, these comparisons must specify the value being compared. A numcmp provides this with an attribute value that indicates the matching value. If the numcmp includes the optional tolerance attribute, any response in the range of from the given value plus or minus the tolerance will be accepted. Alternatively, the numcmp can directly provide a min and max attribute to specify an arbitrary interval. A strcmp that does not include the use-answer will have content that defines a matching string or more generally a matching regular-expression. By default, augments the provided string to match the entire response after stripping leading and trailing white space. The attribute strip="no" overrides this behavior so that, for example, the match can look for the presence of a pattern within the response rather than matching the entire response. In addition, the attribute case="insensitive" makes the regular expression ignore case during the comparison.
A comparison involving jscmp allows the author to provide arbitrary Javascript code that will evaluate to either true/false or a string containing feedback for a valid match, where the reader's evaluated response is available as a variable ans and all of the reader's responses are in an array ans_array. This allows custom evaluation that can allow the evaluation of one blank to depend on what was answered in another blank. The Javascript is evaluated in the context of a local, anonymous function. Nevertheless, the author should take care that no commands are included that invoke mutable side-effects.
To create dynamic, randomizable versions of a fill-in-the-blank question, a setup element is required as a sibling of the statement and evaluation elements. For the interactive version of these questions, the problem will created with a random number generator initialized with a seed that is stored by the Runestone Component for the reader. This results in the reader seeing the same version the next time they open the question. A button allowing the reader to request a new randomized version changes the seed and regenerates the question. Static representations need to provide consistent versions each time, so the setup requires a seed attribute.
Within the setup, the author provides statements that will initialize Javascript objects that will be accessible in the statement, solution, and evaluation elements. The author can provide Javascript code within a setupScript child of the setup. It is likely that the script contents will need to be escaped to avoid XML conflicts, for example by individually escaping problematic characters or surrounding the code with <![CDATA[...]]>. In the context in which the script runs, there is an object v representing the dynamic variable namespace. Any object that the author wants to access should be created as a member of that object, such as v.myObject = .... The name myObject could then be used (without reference to v) in an ansobj attribute of a fillin, in an object attribute of an eval or directly in a jscmp comparison.
To provide randomization, a random number generator based on the current seed is available in the setupScript using the object name RNG. The RNG object includes the following methods for generating various types of random values.
RNG.random(): Uniform random values between 0 and 1.
RNG.randSign(): Random values +1 and -1.
RNG.randInt(a,b): Random integer from a,a+1,a+2,\ldots,b.
RNG.randUniform(a,b): Random floating value a < x < b.
RNG.randDiscrete(a,b,dx,nonzero): Random value x from a,a+dx,a+2dx,\ldots with x \le b. If nonzero=true (optional parameter), then x=0 is excluded.
Using this generator will ensure that subsequent visits by the reader to the question will see the same version.
If the author wishes for reader responses to be parsed to assess format prior to evaluating correctness, setupScript should include a declaration of an entry v.types. The value can either be a single parser function applied to all blanks or an array of separate parser functions, one for each fillin. A parser function takes a string representing the response for the blank and returns the parsed object. If there is an error in the structure of the response, the function should throw new TypeError(errMsg), and the errMsg will be provided as feedback for the response without performing any of the tests.
The Runestone Component that implements interactivity takes the HTML generated from the statement after the setup is processed and performs substitutions of any eval elements. The recomputed HTML is then inserted into live webpage. A postRenderScript entry in setup can be used as a second script that runs as a call-back after this substitution occurs. Such a script would be useful if the script requires access to the actual webpage elements and not just defining objects for the evaluation context.
Math Objects in Dynamic Problems
A Javascript library that supports some mathematical objects in the dynamic setup and evaluation of fill-in-the-blank problems. In order to access these objects, an XML-interface is provided to interact with the objects in the setup and evaluation elements. Any fillin elements expecting to parse as mathematical objects should use mode="math" and assign ansobj to the name of a dynamic expression object created in setup that represents a correct answer.
For the setup stage, a sequence of de-object elements can be used to define mathematical dynamic expression objects. Each de-object will have a name attribute representing the object name. The mathematical nature of the de-object is indicated with a context attribute. Currently supported expression types are to represent numbers using context="number" and formulas using context="formula".
The content of the de-object element is an XML element that defines the actual expression. The following choices are available, described in the following paragraphs:
de-random: create a randomly generated number
de-number: create a number by providing its value or formula
de-expression: create an expression or formula involving variables by directly providing a formula or by performing a substitution or a derivative on a previously-defined expression object
de-evaluate: create a number by evaluating an expression object by replacing each variable with a specified number value
As elements are defined in sequence, formulas used at any stage may include the name of any previously generated object as a valid symbol in the formula.
To define a random number, use a de-random element. The same random number generation routines provided by the RNG object are accessible through this element using a distribution attribute and additional attributes for the distribution parameters, some of which come with default values.
distribution="uniform": Parameters are min=0, max=1 as decimal values. Gives a value from the interval (\mathrm{min},\mathrm{max}.
distribution="sign": No parameters. Gives \pm 1 as possible values.
distribution="integer": Parameters are min, max as integer values. Value is an integer chosen inclusively between \mathrm{min} and \mathrm{max}.
distribution="discrete": Parameters include min, max, by="1", and nonzero="yes". Values chosen from the sequence \mathrm{min} + k \cdot \mathrm{by}, k=0, 1, 2, \ldots that are not greater than \mathrm{max}.
In practice, all distributions can be obtained using just the uniform and discrete distributions.
To define a number by formula, including defining rational numbers as fractions, use a de-number element. The content of the element should be a single number or a formula that results in a constant value. Symbols of previously defined numbers as well as mathematical constants like pi or e may be part of the formula. Any undefined symbols will result in an error.
To define an expression using a formula that might involve variables, use a de-expression with mode="formula". The content of the element can be a mathematical formula that includes both numbers and variables. Previously defined numbers and expressions can be used in the formula by referencing their object name.
To define an expression that is the partial derivative of another expression with respect to a variable, use de-expression with mode="derivative. Such an expression must have a formula child that contains an object representing the original expression. The content can be either a eval with object to reference a previously-defined object or a separate de-expression defining an expression not saved as a separate object. In addition, the element must contain a variable element with name indicating the name of the variable of differentiation.
Formula evaluation and substitution follow a similar pattern. Formula evaluation to compute a number is performed with a de-evaluate element, which requires that every variable in the expression is assigned a specific numerical value. Formula substitution is like function composition and allows for any subset of the involved variables to be assigned either number or expression values and uses de-expression with mode="substitution". In either event, the element requires a formula child element to specify a starting expression using a eval element to specify a previously-defined de-object or a de-expression element to generate a new formula expression. For each variable that will be replaced by a value or another expression, we will include a variable with name specifying which variable is being replaced. The content of the variable element can be an eval to reference an existing object or any of the elements that can be used to generate a de-object.
Automatic reduction and simplification can be applied to elements created by de-evaluate and de-expression by including the attribute reduce="yes". Elements created by de-number always reduce the resulting number. Reductions include reducing arithmetic involving numerical values and simple algebraic identities. The identities that are applied include the following where u and w represent any expression:
u \pm 0 \rightarrow u
0 \cdot u \rightarrow 0 \rightarrow u
0 \div u \rightarrow 0 \rightarrow u
1 \cdot u \rightarrow u \rightarrow u
-1 \cdot u \rightarrow -u \rightarrow u
u \div 1 \rightarrow u \rightarrow u
u^1 \rightarrow u \rightarrow u
u^0 \rightarrow 1 \rightarrow u
1^u \rightarrow 1 \rightarrow u
u+(-u) \rightarrow 0
u-u \rightarrow 0
u+-w \rightarrow u-w
u-(-w) \rightarrow u+w
-(-u) \rightarrow u
u\cdot(-w) \rightarrow -u \cdot w
u \div (-w) \rightarrow -u \div w
(-u)+(-w) \rightarrow -(u+w)
For the evaluation block, two comparison elements are accessiblemathcmp for testing whether two math objects are equivalent and logic for constructing compound tests involving simple Boolean logical operations. The mathcmp comparison is performed by numerically evaluating the two expressions being compared over a range of values for each variable present and verifying that they are numerically within a comparison tolerance.
To compare the reader's submitted response to the provided correct answer with mathcmp, use use-answer="yes". To compare the submitted response to any other object, the mathcmp element should have a single evaluated math object as content, which could include a newly generated expression using de-expression that is based on the submitted responses. To compare two different math objects, the mathcmp should have two math objects. For convenience, there are some implicit representations available as well, illustrated in .
Possible structures for using mathcmp within a test. The de-expression would be replaced by any valid construction as described for the setup.
]]>
Compound logical structures are created using the logic element in the place of a comparison. To specify which operation is being used, the op attribute is set to one of op="and", op="or", or op="not". The operations are considered n-ary, meaning that the contents should be one or more comparison elements, which might include additional logic. The op="and" will evaluate as true when all of the children comparisons evaluate as true. The op="or" will evaluate as true when at least one of the children comparisons evaluates as true. The op="not" is technically implemented as the negation of op="and", and so will evaluate as true when at least one of the children comparisons evaluates as false. In the absence of any logic, there is always an implicit op="and" so that any sequence of comparisons within a single test, all comparisons are required to evaluate as true.
Static Representations
A static version will include an automatic solution which fills in each blank with the correct answer that is provided by the fillin. The feedback text specified in the evaluation that associated with a correct response for each of the fillin blanks are then provided in sequence. Consequently, the author should ensure that the feedback for a test with correct="yes" makes sense in the context of a back-of-the-book solution and not just as immediate feedback in an interactive setting.
If the author provides an optional solution element, this text will also be included as a solution. This solution may contain eval elements in the same manner as described for the statement element. The automatic solution can be disabled by including include-automatic="no" as an attribute of the solution.
To build the static version, needs to generate the dynamic substitution rules. Each dynamic question that includes setup is processed using its corresponding static seed to evaluate the potential substitutions. The resulting substitutions are stored in one of the generated files. Using the -CLI, the substitution file is generated using the command pretext generate dynamic-subs -t static-target where static-target is replaced by a static project target such as PDF.
As of 2022-06-14 a major effort is underway to provide comprehensive markup for fill-in-the-blank problems. Until then, there is transitional markup intended only to supply a migration path for projects originally authored for Runestone servers (). So (a) our documentation is sparse, and (b) there will be no backward-compatible improvements. So in particular, new projects should wait for the new markup. Also, studying examples may be a useful way to augment what is described here.
A statement is enriched with empty var elements which will render as the blanks in the problem.
The signal for a fill-in problem is a setup element containing a sequence of var elements. Each var contains a sequence of condition elements that describe possible values (via regular expressions) which might appear in a blank. The first condition describes the correct answer(s), and then the subsequent conditions are descriptions of probable incorrect answers. Each condition has a feedback. So the first condition to match an entry provided via a blank will be noted as correct or incorrect, and its feedback will be relayed.
The var of the statement and the var of the setup are in a 1-1 correspondence, which establishes how the setup is associated with a blank. The var in the statement may have a width attribute whose value controls how many characters would be visible in the blank.
A static version will include an automatic solution which fills in each blank with a correct answer, and then duplicates the feedback text, in order.
Coding Exercises and Projectscoding exercisesinteractive exercisescodingexerciseinteractivecoding
A Coding Exercise is formed by placing a program element after the statement of an exercise. The main distinction is that this is a signal that the interactivity is provided by the program, and therefore the exercise will not be understood as a short answer exercise (). For this reason, the program should be requested as one of the interactive realizations (, ).
The identical construction may be used with any PROJECT-LIKE () such as an activity. As of 2022-06-17 this only applies to the form that uses a statement, but will soon also apply to task within PROJECT-LIKE.
Realize that it is always possible to place a programinside of a statement, and if there is no program that is after the statement (or another signal for an interactive exercise) then the exercise will be classified as a short-answer exercise. It may be instructive to understand that in a static realization, a program at the end of a statement may be visually identical to an exercise where the program is after the statement, even though the former is a short-answer exercise and the latter is a coding exercise (which will render differently for different output formats and hosting platforms).
Short Answer questions might also be known as Free Response questions, or Essay questions. A exercise, or a PROJECT-LIKE that is not structured by task, is implicitly of this nature. But you still need to signal that you wish such a problem to be interactive, typically with a text box where the student can enter an answer. So, similar to other types of exercises, add a response element immediately after the statement. (We expect to add attributes for this element to influence the behavior of the text box.)
In an online setting, it is a simple matter to provide a place for a reader to type in an answer, response, or essay. But then what? Until artificial intelligence is brought to bear, somebody (not something), such as an instructor for a course of enrolled students, will need to read a response and provide a score and/or comments that can be saved and distributed back to the students. So the first prerequisite is that HTML output is being built for a capable platform. As of 2022-06-15, this means a Runestone server (), but it could easily also be a server.
An author can also supply an attachment attribute on the exercise element. When set to yes the short answer question will allow the student to upload a single document in support of their answer. This document might be a diagram or an entire essay in PDF format.
A publisher can control when a response area is created in HTML output (). The default is to only have this area present when it is possible for a response to be graded and scored. However, an option will cause a response box to be created always. A reader can reflect on the question by typing in a response, and the text will be saved on that particular device only. When it is impossible for a response to be graded, placeholder text will warn the reader.
Timed Assessmentstimed assessments
A collection of exercise may be optionally selected to be part of a timed assessment. A timed assessment will show each exercise separately with a navigation mechanism to allow the student to move from exercise to exercise. A student may flag an exercise for later review if they are unsure of their answer. When a student completes the assessment they will receive varying amounts of feedback on their performance, depending on how the assessment is configured.
To enable this behavior, place a time-limit attribute on the exercises element, with a value indicating the time limit in seconds. In addition you can allow the student to pause the timer by including pause attribute on the exercises element with a value of yes, You can control the amount of feedback provided to the student with two additional attributes. results and feedback. If the results attribute is set to yes, the student will receive a summary of their performance after completing the assessment. If the feedback attribute is set to yes, the student will receive feedback on their answers.
For books that will be hosted on Runestone Academy, you should include a label attribute on the exercises element to provide a short name for the assessment. This label will be used to identify the assessment in the gradebook. It will also allow you as the instructor to reset the exam for a student to give them another try if they need it for any reason, including some kind of technical glitch with their browser as they are taking the exam.
Group Work Exercisesgroup work exercises
A collection of exercise may be optionally selected for work by a group of readers. This behavior is only available when hosted on a Runestone server. We re-purpose a worksheet specialized division for groups of such exercises.
To enable this behavior, place a groupwork attribute on a worksheet element, with a value of yes. Then all of the contained exercise will be provided by Runestone as group work.
Exercises and their Solutions
As described in an exercise can be placed in many different locations, and a project has similar features. It is critical to understand that you want to author any hints, answers, or solutions immediately following the statement of an exercise. If your source is public, and you would like to keep some aspects of the solutions private, then read for some practical advice. See as well for information on creating a standalone Solutions Guide. We concentrate here on techniques for controlling visibility and location of the components of exercises within your primary output.
Exercises, Original Versions
In a conversion to HTML, a hint to an exercise renders nicely in a knowl, right below the exercise statement. For a conversion to /PDF/print, you might wish to display a hint, visibly, as part of the exercise, or you may wish to park the hint in a Hints to Exercises division in the back matter. To control visibility of the components of exercises (and projects) there are twenty switches you can use. See for more.
Exercises, Solutions Versions
Exercises, and their components may be duplicated easily, to provide a back matter appendix with solutions, or within each division. For example, you can easily create an end-of-chapter division with solutions to every inline exercise throughout the chapter and solutions to all the divisional exercises from each section of the chapter.
The solutions element will create an entire division, semi-automatically. You can provide a title, an introduction, and conclusion. The remaining content is statements, hints, answers, and solutions to exercises (and projects).
If solutions is a child of backmatter, then an appendix will be generated, and covering exercise from the entire book or article. If solutions is a child of a division, then a new subdivision is created and the scope is all exercise for the division. So, for example, a solutions placed inside a chapter will render as a division that looks like a section and will include components of all the exercises (at any level) contained within the chapter.
An optional attribute is scope, whose value is the xml:id of a division. Then it is this division which is scanned for exercises and their solutions (rather than defaulting to the enclosing parent of the solutions). This allows for much greater flexibility. For a simple example, suppose a chapter contains two exercises, and you want to have two solutions within the chapter, each covering just one of the exercises. This can be accomplished with scope, and you can arrange the four divisions (two exercises and two solutions) however you wish within the chapter.
An author filters the types of exercises, and their components, through attributes of the solutions element. For examplereading="hint answer"would cause every exercise within each reading-questions to have its hint and answer displayed, but not its statement nor its solution. These are the attribute names and the possible values.
Attributes (left) and Values (right) for solutions elementinlinestatementdivisionalhintreadinganswerworksheetsolutionproject
Note that the worksheet filter only refers to exercise within any worksheet. This is because worksheets are built around exercise that are slightly different than others, such as allowing workspace, and being allowed in a sidebyside for layout purposes. Similarly, a project (or more precisely PROJECT-LIKE) is a child of a division, and so can appear inside a worksheet, or outside of a worksheet. The project filter applies equally to both instances.
So, source like<section> <title>Tropical Bird of Paradise<title> ... <solutions worksheet="hint solution" project="hint answer"> <title>Hints and Solutions to Worksheets and Projects<title> </solutions></section>would generate an entire subsection in the section on Birds of Paradise, containing with hints and solutions to every exercise in any worksheet in the section, and hints and answers for every project, located anywhere (including in subsections, subsubsections, and worksheets). There is a great deal of flexibility, though not every imaginable scenario may be possible.
An admit attribute specifies some feature of an exercise's serial number
to determine whether its components are admitted into the solutions division.
(For example, the serial number of Exercise 1.2.3 is 3.)
Presently, the only options are odd, even, and the default all.
So, source like
<solutions divisional="answer" admit="odd">
would generate a subsection with answers to only the odd-numbered divisional exercises.
ImagesimageRaster Images
A raster imageraster imageimageraster image is an image described pixel-by-pixel, with different colors and intensities. Photographs are good examples. Common formats are Portable Network Graphics (PNG) and Joint Photographic Experts Group (JPEG, JPG), which will both work with pdflatex and modern web browsers. JPEG is a good choice for photographs since they are compressed on the assumption they will be viewed by a human, while PNG is a lossless format and good for line art, diagrams and similar images (if you do not have vector graphics versions, see below).
To use these images, you simply provide the complete filename, with a relative path. A subdirectory such as images is a good choice for a place to put them. It is your responsibility to place these images where the output will find them or where the HTML output will find them. Your source would look like:
]]>
Typically you would wrap this in a figure that might have an xml:id attribute for cross-references, with or without a caption. There is no height attribute, so the aspect ratio of your image is your responsibility outside of . The width attribute is a percentage of the available width of the text (outside of a sidebyside panel).
You should also provide a description and/or shortdescription
as a child of the image, or else explicitly declare the image to be
decorative with an attribute decorative set to yes.
A shortdescription should be text-only (but perhaps with var
children) and be less than 100140 characters long. A description
should be structured with p and tabular elements. For example:
Five crocodiles partially submerged.
Five crocodiles are in a pond. Three of them have their eyes above
the water line, looking in the direction of the camera. The other
two are in the background and only their tails are visible above
the water line.
]]>
See for advice on writing effective image descriptions.
Vector Graphics
An image is a vector graphicvector graphicimagevector graphic if the file describes the geometric shapes that constitute the image. So a simple diagram would be a good candidate, but a photograph would not. Popular formats are Portable Document Format (PDF) and Scalable Vector Graphics (SVG). You will get the best results with PDF images in output and SVG images for HTML. The principal advantage of these formats is that they scale (big or small) smoothly, along with fonts. This is critical when you cannot predict the screen size for a reader of an electronic version.
Unless you describe these images with a language (see ), you are responsible for providing the PDF and SVG versions. The pdf2svg utility is very useful if you have PDF images only. To have these different images used for different output formats, you simply follow the instructions above, but do not include a file extension. This alerts the conversion to use the best possible choice for any given output, and to embed it correctly. So presuming you made available the files images/toad-life-cycle.pdf and images/toad-life-cycle.svg, the following example would incorporate the PDF version with output and the SVG version for HTML output.
The four stages of a toad's life.
]]>
Vector graphics images can be created with source code in different languages () or with applications, such as Inkscape (). If you are creating non-technical graphics that have lots of geometric shapes and simple text (a look like a movie poster), then using a tool like Inkscape is a great choice since its native file format is an enhanced version of SVG and a faithful PDF is easy to create.
Images Described by Source Code
There are various languages which may be used to describe diagrams, geometric objects, or data plots. A key strategy enabled by is to put these specifications of such images directly in your document's source rather than losing track of them over time.
So we have various elements which are children of image that hold these source code descriptions. Then provides techniques for realizing these in the best formats for various devices and print. So if you are accustomed to the idea of a source attribute pointing to a file, think of these elements as alternative specifications.
Asymptote
Asymptote is a vector graphics language that produces high-quality output in WebGL, SVG, PNG, and PDF formats. You can describe 2-D or 3-D objects, and the 3-D objects are interactive in online output as HTMLWebGL files. may be used, and your macros are automatically available for use.
Authoring is straight-forward. Inside an image include a child asymptote to hold the code. For example:
<image>
<description>A histogram of Gaussian data.</description>
<asymptote label="gaussian-histogram">
import graph;
import stats;
size(400,200,IgnoreAspect);
int n=10000;
real[] a=new real[n];
for(int i=0; i < n; ++i) a[i]=Gaussrand();
draw(graph(Gaussian,min(a),max(a)),blue);
// Optionally calculate "optimal" number
// of bins a la Shimazaki and Shinomoto.
int N=bins(a);
histogram(a,min(a),max(a),N,normalize=true,low=0,lightred,black,bars=false);
xaxis("$x$",BottomTop,LeftTicks);
yaxis("$dP/dx$",LeftRight,RightTicks(trailingzero));
</asymptote>
</image>
Here is the result. Look elsewhere for examples of 3-D output from Asymptote.
A histogram of Gaussian data.
import graph;
import stats;
size(400,200,IgnoreAspect);
int n=10000;
real[] a=new real[n];
for(int i=0; i < n; ++i) a[i]=Gaussrand();
draw(graph(Gaussian,min(a),max(a)),blue);
// Optionally calculate "optimal" number
// of bins a la Shimazaki and Shinomoto.
int N=bins(a);
histogram(a,min(a),max(a),N,normalize=true,low=0,lightred,black,bars=false);
xaxis("$x$",BottomTop,LeftTicks);
yaxis("$dP/dx$",LeftRight,RightTicks(trailingzero));
Notes:
Notice the necessity of escaping the less-than in the for-loop. See .
Setting a label on the asymptote tag is necessary to have a stable name for graphics files that will be generated.
The description is an important part of making your output accessible.
Notice the use of for the label on the vertical axis. All of your macros defined in docinfo are available for use, so you can keep notation consistent.
You need to produce PDF versions of your diagrams for use in a conversion to .
You need to produce HTML versions of your diagrams for use in a conversion to an electronic format based on HTML. For a 2-D diagram these are a thin wrapper around an SVG image. For a 3-D diagram these are interactive WebGL objects.
It is very important to note that these HTML versions contain the height and width of the diagram and these are queried by a conversion of your document to HTML format in order to compute the aspect ratio. Therefore they need to be available with your other source files (typically in an images directory). So in a very real sense these files become part of your source.
You may want to produce SVG versions of your diagrams for conversion to EPUB, and PNG versions for conversion to the EPUB precursor for Kindle format.
PDF versions produced by the pretext script will not include the RPC extensions. So rotatable 3D images rendered by the proprietary viewer, Adobe Acrobat, are not created, consistent with our open source philosophy.
Colors in Asymptote can be hard-coded using rgb syntax. Colors can also be defined at the top of an Asymptote file, to be referred to later. You may wish to produce PDF in both color (electronic) and black and white (print on demand) formats, and you probably do not want to maintain parallel source for both versions. Rather than writing (for example) pen p=rgb(0,0,.7); in your Asymptote code, you can write pen p=curvepen1;. Then, in the docinfo section of your document, you can add an asymptote-preamble and include the line pen curvepen1=rgb(0,0,.7);. Once you are ready to produce your black and white version, you need only change the definition of curvepen1 in your asymptote-preamble.
One note of caution: if your preamble includes Asymptote code that only works once certain libraries are loaded, you must include lines to import those libraries in your preamble. For example, to define a material you must first have the line import three;.
Asymptote may be run as a program installed locally, but the project also has an on-demand online server written by Supakorn Jamie Rassameemasmuang. By default, the pretext/pretext script () will interface automatically with this server to create your diagrams. Furthermore, Asymptote provides a very useful web application written by Pedram Emami. This is a great place to learn, experiment, and iterate as you become more skilled at building high-quality graphics to illustrate the concepts in your document.
Build 3-D Asymptote Figures
If your project uses geometric or mathematical objects that are three-dimensional, invest some time in learning the Asymptote vector graphics language. The interactive diagrams for your HTML output produced by Asymptote, in WebGL format, are outstanding and will greatly enhance your project. (And the other static formats are similarly excellent.) The pretext/pretext script will create these diagrams, in the necessary formats, with no extra software by using an online server.
Images in Syntax
There are a variety of packages for authoring a diagram, plot, or graph. Examples include: TikZ, PGF, Xy-pic, and PSTricks. Generally, the latex-image tag allows you to incorporate this code into your source and realizes these descriptions as images in your output.
For output the procedure is transparent simply incorporates the preamble information and the image's code in the correct places in the output, scaled to fit whatever space is described on the image element. Then traditional processing will do the right thing. For output to other non- formats, such as HTML or EPUB, we need some help from the CLI to generate other formats. This tool will isolate the image's code and bundle it up with the necessary preamble to make a complete single-purpose file. Once converted by to a PDF version, other tools can convert the image into other formats, such as SVG. In this way, you can use packages for describing images, use mathematically-correct labels in syntax, and use your own macros for consistency in notation, yet also employ the resulting images in more modern output formats. Note that as of 2020-07-24, limited testing indicates that PSTricks needs to be processed with the xelatex engine, and the pstricks-add package might also be necessary. Any updates, especially using pdflatex would be appreciated. Finally, processing with xelatex might be necessary if your labels use Unicode characters.
Much like the asymptote tag, the latex-image tag is used as a child of image and can be thought of as an alternative to the source attribute of image. Adding a label to the latex-image tag will ensure a stable file name for the graphics files that will be produced. The contents need to be a complete specification of the image. For example, a TikZ image will typically begin with \begin{tikzpicture}. Inside of your document's docinfo you will likely need to employ a latex-image-preamble element to hold necessary \usepackage commands and any global settings, such as the style for tick-marks and labels on axes of graphs. The source code in this next example is greatly abbreviated and mildly edited, see the source for the complete example.
Images authored in TikZ are the most popular. Text (nodes) in a TikZ picture are at whatever the current font size is. The other parts of the picture (lines, circles, rays, etc.; the line art) can be scaled as part of an overall scale factor. The point being, the scale factor will not scale the text simultaneously. It is not unlike a map application on your mobile device. The name of a road is too small to read, so you zoom in on the map, making the street bigger, but the name stays in the same font size and is still unreadable. This means some manual labor is involved when you place a TikZ picture into a document.
For many authors, the goal is to have the text in their TikZ picture have the same size as the surrounding text, both in a PDF and in HTML. We now explain how to accomplish this consistently.
Preparation
Well before designing many TikZ images, answer the following questions.
For your output, what will the overall font size be?
For your output, what will the width of the text block be? Note that this will normally be computed by , dependent on your chosen font size. A larger font will mean a greater width. You can generate the source file and look early in the preamble to see what width is being used. It is also possible that you may be setting this with yourself (). The ratio of line width to font size is always 34:1.
TikZ in
Every image in may be constrained by width and/or margins, or may be restricted to a panel of a sidebyside with a certain width. So the TikZ code you author will create an image that is then scaled by to fit the constraints (much as any other image is scaled). Except this is done in a way that scales both the font and the line art. Your main goal is to have this scaling use a scale factor of 1.0. Which, of course, sounds like a waste of effort, but it is critical for how the image behaves in HTML (next).
To accomplish this unit scaling, follow this procedure for each TikZ picture.
Determine the width of the TikZ picture itself, in physical units of length. Typically, the lengths used for larger portions are described in centimeters. But note that an overall scale factor is sometimes applied for convenience (or as a result of poor planning!). Also, the default unit length (centimeters) can be changed. Note also, that text may push out to the right and left, defining the boundaries on the sides, and these lengths can be hard to compute or predict.
Recall the width of your text (above). Recognize that list items will be indented (reducing width), and perhaps there are multiple indents if a list has multiple levels.
Now you want the width of your picture as a percentage of the overall available width. By default, your overall width will be points, and your picture width will be in centimeters. You may be familiar with a big point (or desktop publishing point) which is 72 points to the inch. however uses 72.27 points to the inch, which makes a point equal to 0.03514598 centimeters. Convert to whatever common unit makes sense to you, since it is the dimension-less ratio you are after.
Use this percentage as the width attribute on the image (with a percent sign).
Now produce a PDF and you will find that the font in the surrounding text, and the font in image, will match identically. I like to check this carefully by zomming in on the PDF and using an on-screen pixel ruler to check the heights of identical letters. KRuler is one such example for Linux, suggestions for other operating systems are welcome.
Note that in practice you will envision your picture as large or small, and you will begin with some overall physical width in mind, relative to the line width.
TikZ in HTML
For HTML output, the goal is to not edit your source. In other words to not change the width attributes that have been so carefully computed and to not edit the TikZ code. But you will want to maintain fidelity with the surrounding font.
HTML output is designed to behave very similarly (not identically) to how output behaves. In other words, the ratio of line width to font size is 34:1. In this way, line length and font size are such that a long paragraph will usually have an identical number of lines in (at any font size) and in HTML.
Our tools produce Scalable Vector Graphics (SVG) versions of TikZ pictures for use in HTML output. Being scalable means a reader can zoom in without any pixelation of the images. This is helpful for those with low vision, or if some fine point of a picture needs to be examined closely. It also means an SVG can be scaled by any factor when placed in HTML. However, the work done for a unit scaling for output will continue to provide the correct scaling for HTML! (Provided the text width used for the PDF production is the one automatically computed from the font size via the 34:1 ratio.)
Case Study: Scaling a TikZ picture
The source below describes a simple TikZ picture, nd is followed by the picture itself. The rectangle is 8 centimeters wide. The Guide is produced as a PDF with 10 point text and a text width of 6.5 inches. (This is too wide for comfortable reading, and contrary to our recommendations. See .) Normally, a choice of 10 point text would result in a width of 340 point, or about 4.7 inches.
So we compute the fraction of the available width required, as a percentage:
\frac{8\text{ cm}}{6.5\text{ in}} =
\frac{8\text{ cm}\left(\frac{1\text{ in}}{2.54\text{ cm}}\right)}{6.5\text{ in}} =
0.4846 = 48.46\%
and we use that as the width of the image.
\begin{tikzpicture}
% 1 cm is default unit of length
% a rectangle: 8 cm wide, 6 cm tall
\draw[draw=black, thick] (4,2) rectangle (-4,-2);
\node at (-2, 1) {Foo};
\node at ( 2, 1) {Bar};
\node at (-2, -1) {Baz};
\node at ( 2, -1) {Qux};
\end{tikzpicture}
]]>
Some characters for comparison: FooBarBazQux
\begin{tikzpicture}
% 1 cm is default unit of length
% a rectangle: 8 cm wide, 6 cm tall
\draw[draw=black, thick] (4,2) rectangle (-4,-2);
\node at (-2, 1) {Foo};
\node at ( 2, 1) {Bar};
\node at (-2, -1) {Baz};
\node at ( 2, -1) {Qux};
\end{tikzpicture}
In the PDF version, the text matches between the image and the surrounding text almost identically. We could slide the image right and left by adjusting the margins (the default is to be centered). But if we want the image bigger and smaller, we need to adjust the TikZ code and recompute the width attribute.
Now for HTML we need to produce an SVG version that is a close match. The HTML version is a close match for built with a computed text width (for any font size). We do not want to change the percentage of the width devoted to the TikZ picture, and we do not want to change the TikZ code itself. If we had not chosen a different text width (the 6.5 inches, versus a computed 340 point), then we could generate the SVG by supplying the same publication file, so as to use the same font size. However, our text width is 38% larger in the version,
\frac{6.5\text{ in}}{340\text{ pt}} =
\frac{6.5\text{ in}\left(\frac{72.27\text{ pt}}{1\text{ in}}\right)}{340\text{ pt}} = 1.3816
The font size needs to increase by a similar percentage,
10\text{ pt}\times 1.3816 = 13.816\text{ pt}\approx 14\text{ pt}
So we generate the SVG image with a different publication file, giving a font size of 14 point. The HTML font in the text may be very different from the font used in the TikZ picture, but their sizes are nearly identical. Note that our use of only supports 8 different font sizes, so it was fortuitous in this example that the 38% increase was so close to the supported 14 point font size. Note also, that since we used a different text width for the PDF, the resulting 40% increase in the font size for the SVG could play havoc with text that has been placed carefully not to overlap other components of the picture.
There are myriad ways to scale and transform a TikZ picture. You might choose to intentionally use a smaller font size than the surrounding text, as in . Or, fidelity with the surrounding text might not be important to you. Or you might prefer that images perform better in HTML. But hopefully the above discussion and example provide enough insight into how the various constructions behave. The important points are:
TikZ uses physical units for the overall width of a picture, and nodes have text using the ambient font size of the file (unless prescribed otherwise).
scales a TikZ picture uniformly (text and line art) to fit into constraints given in the source.
The SVG version of a TikZ picture is also uniformly scalable and at the same width as the original will have text of the correct font size. However, when used in HTML output, it is scaled on the assumption that the ratio of the line width to the font size is 34:1. This is the default width computed by for all supported font sizes. Changes in this ratio for PDF production requires an equivalent change in font size during SVG construction, via the publication file.
Images in Sage Syntax
Sometimes the necessary computations for an image are not part of the capabilities of whatever system is actually realizing the image. We have good support for Sage in other parts of your document, and Sage has an extremely wide variety of computational capabilities, in addition to letting you program your own computations in Python syntax with the full support of the Sage library. Rather than translating Sage output as input to some other graphics program, we simply capture the graphics output from Sage. So if your graphics are derived from non-standard, or intensive, computation this might be your best avenue.
Use the sageplot element, in a manner entirely similar to the asymptote element and the latex-image element, as a child of image, and containing the necessary Sage code to construct the image. There is one very important twist. The last line of your Sage code must return a Sage Graphics object. The pretext/pretext script () and -CLI () will isolate this last line, use it as the right-hand side of an assignment statement, and the Sage .save() method will automatically be called to generate the image in a file. Like asymptote and latex-image, putting a label on the sageplot tag will determine the name of this file. Note that there are four different file types, depending on if the graphic is 2D or 3D, and the output format of the conversion.
The variant attribute of the sageplot element may be 2d or 3d, since is not capable of analyzing your Sage code. The default value is 3d so can be skipped for 2D plots. For technical reasons, it is also necessary to specify the aspect ratio of a graphic for the 3D case using the aspect attribute. The value can be a positive real number (decimal) or a ratio of two positive integers separated by a colon. The default is a square (1.0 or 1:1).
Note that the PNG images in the 3D case are not very good. This needs help on the Sage side. And since 3D images in HTML output are inserted via an HTMLiframe they can misbehave if you do not get the aspect ratio close to right. On the plus side, the 3D HTML images may be manipulated interactively with keyboard arrow keys, a mouse scroll wheel, and by dragging with a mouse using both a left and a right mouse press. Note that EPUB output used to make a Kindle book needs to use PNG images for both the 2D and 3D cases.
Pay very careful attention to the requirement that the last line of your code evaluates to be a graphics object. In particular, while show() might appear to do the right thing during testing, it evaluates to Python's None object and that is just what you will get for your image. The example below illustrates creating two graphics objects and combining them into an expression on the last line that evaluates to the graphics object that will be created in the desired graphics files.
Negative multiple of a curve
Plot of x^4 - 1 and its negative.
f(x) = x^4 - 1
g(x) = -x^4 + 1
up = plot(f, (x, -1.5, 1.5), color='blue', thickness=2)
down = plot(g, (x, -1.5, 1.5), color='red', thickness=2)
up + down
]]>
This will result in:
Negative multiple of a curve
Plot of x^4 - 1 and its negative.
f(x) = x^4 - 1
g(x) = -x^4 + 1
up = plot(f, (x, -1.5, 1.5), color='blue', thickness=2)
down = plot(g, (x, -1.5, 1.5), color='red', thickness=2)
up + down
Note the necessity of using the pretext script () to independently invoke Sage, no matter what sort of output is being created for your document.
Mermaid
Mermaid is a Markdown-inspired tool for authoring various kinds of diagrams. One kind of diagram - a git commit visualization - is shown below. For a full listing of diagram types, see the Mermaid Documentation. The Mermaid live editoris a great tool for testing the syntax of your mermaid diagrams.
You can specify global settings for diagrams via an entry in the publication files, see . The available options are the same as the ones available in the config frontmatter section of a diagram. Note that the neutral theme will produce grayscale images, which could be useful for controlling the cost of a print-on-demand version.
To author a Mermaid diagram, use a image that contains a mermaid element. A label on the mermaid element will be used to construct a filenameyou will want to utilize this feature.
Mermaid has two layout enginesthe default and elk. The ELK engine often does a better job with complex diagrams. You can specify it as a default by setting common/mermaid/@layout-engine to "elk", or by using standard Mermaid config frontmatter as shown in below.
Mermaid Class Diagram using ELK layout engine
Image FormatsPreferred Image Formats
The best formats for images, in order, are:
SVG
Vector graphics format ideal for HTML output formats. Scalable and compact. Converts to other formats, such as PDF.
PDF
Vector graphics format ideal for print and PDF output formats. Good tools exist to convert back-and-forth between SVG and PDF.
PNG
Lossless and compressible format for raster images. May be used for both HTML and PDF outputs.
JPEG
Compressed lossy format which works well for photographs. May be used for both HTML and PDF outputs. PNG should be preferred when there is a choice, except in the case of a photograph. Converting between these formats is unlikely to be an improvement.
Image Archives
As an instructor, you might want to recycle images from a text for a classroom presentation, a project handout, or an examination question. As an author, you can elect to make images files available through links in the HTML version, and it is easy and flexible to produce those links automatically.
First, it is your responsibility to manufacture the files. For making different formats, the pretext script can sometimes help (). The Image Magick convert command is a quick way to make raster images in different formats, while the pdf2svg executable is good for converting vector graphics PDFs into SVGs (although now the pretext script uses the pyMuPDF library for these tasks instead). Also, to make this easy to specify, different versions of the same image must have identical paths and names, other than the suffixes. Finally, the case and spelling of the suffix in your source must match the filename (jpg versus JPEG). OK, those are the ground rules.
For links for a single image, add the archive attribute to the image element, such as<image ... archive="pdf svg">to get two links for a single image.
To have every single image receive an identical collection of links, in docinfo/images place an archive element whose content is the space-separated list of suffixes/formats.<archive>png JPEG tex ods</archive>will provide four links on every image, including a link to an OpenDocument spreadsheet.
For a collection of images that is contained within some portion of your document, you can place an xml:id on the enclosing element and then in docinfo/images place<archive from="the-xml-id-on-the-portion">svg png</archive>to get two links on every image only in that portion (chapter, subsection, side-by-side, ). The from attribute is meant to suggest the root of a subtree of your hierarchical document. If you use this, then do not use the global form that does not have from.
You may accumulate several of the above semi-global semi-local forms in succession. An image will receive links according to the last archive whose from subtree contains the image. So the strategy is to place general, large subtree, specifications early, and use refined, smaller subtree specifications later. For example,<archive from="the-xml:id-on-a-chapter">svg png</archive><archive from="the-xml:id-on-the-introduction">jpeg</archive><archive from="the-xml:id-on-a-section-within" />will put two links on every image of a chapter, but just one link on images in the introduction, and no links at all on every image image within one specific section. Again, do not mix with the global form. You can use the root document node (book) for from to obtain a global treatment, but it is unnecessary (and inefficient) to provide empty content for the root node as first in the listthe same effect is the default behavior.
Notice that this facility does not restrict you to providing files of the same image, or even images at all. You could choose to make data files available for each data plot you provide, as spreadsheets, or text files, or whatever you have, or whatever you think your readers need.
Finally, archive may be a bit of a misnomer, since there is no historical aspect to any of this. Maybe repository would be more accurate. Though for a history textbook, it might be a perfect name.
Copies of Images
Sometimes you want to use the same image more than once. Putting it in a figure and then making a cross-reference (xref) can work well in HTML output since it will be available as a knowl. However in a static format (PDF, print) the reader will need to chase the cross-reference.
For a raster image, you can just point to the file again with the source attribute. You are free to wrap it in a figure and thus change the caption. It will get a new number as a new figure, and you will need to assign a new unique xml:id attribute. Maybe appending -copy-2, or similar, to the xml:id will be helpful.
If you have a figure generated from source code (such as in TikZ) you really do not want to edit and maintain two copies that may not stay in sync. Instead, you can place the code into a file and xinclude it twice. Study carefully, and note that this is an excellent place to take advantage of setting the parse attribute to text (no need to escape problematic XML characters). Notice that when you generate images, you will have two image files with identical contents, but different names. This is no place for false optimization. Bits are cheap and your time is valuable. It is far more important to only maintain a single copy of the source, than to be caught up with the waste of having two copies of the same file (and which are managed for you). We demonstrate this with the sample book, since it is all set up with the xinclude mechanism. See the two plots of the 8-th roots of unity in the complex numbers section of the chapter on cyclic groups.
ConsolesconsoleContent and Placement of Consoles
A console is a transcript of an interactive session in a terminal or console at a command-line. It is a sequence of the following elements, in this order, possibly repeated many times as a group: input, and output. The output is optional. The content of these two elements is treated as verbatim text (see ), subject to all the exceptions for exceptional characters (see ). A prompt attribute on the input can be supplied to provide a system prompt distinct from the actual commands. The default prompt is a dollar sign followed by a space. If it is more convenient prompt may be supplied on the console, to be used in each enclosed input. If you do not want any prompts at all, just use an empty value for prompt. A continuation attribute may also be supplied at the input or console. If present, it will apply to the start of each input line following the first.
A console may be wrapped in a listing, see . This will behave similar to a figure, with the caption displayed below, and a number assigned. So, in particular, if your program is important enough to cross-reference, it is an enclosing listing that serves as the target.
Programs and Program FragmentsprogramContent and Placement of ProgramsContent and Placement
A program will be treated as verbatim text (see ), subject to all the exceptions for exceptional characters (see ). Indentation will be preserved, though an equal amount of leading whitespace will be stripped from every line, so as to keep the code shifted left as far as possible. So you can indent your code consistently along with your XML indentation. For this reason it is best to indent with spaces, and not tabs. A mix will almost surely end badly, and in some programming languages tabs are discouraged (e.g. Python).
The text contents of a program can be surrounded with code, but that is only necessary if you have other elements inside of the program like preamble or tests used by an interactive program (see below for details).
A program or console may be wrapped in a listing, see . This will behave similar to a figure, with the title displayed above, and a number assigned. So, in particular, if your program or console is important enough to cross-reference, it is an enclosing listing that serves as the target.
The language attribute may be used to get some degree of language-specific syntax highlighting and/or interactive behavior. The current known languages are:
basic
c
cpp
go
java
javascript
lua
pascal
perl
python
python3
r
s
sas
sage
splus
vbasic
vbscript
clojure
lisp
clisp
elisp
scheme
racket
sql
llvm
matlab
octave
ml
ocaml
fsharp
css
latex
html
tex
xml
xslt
In some output formats, notably HTML, the syntax highlighter can add lines or highlight individual lines of code. Highlighting lines is not supported for output. To display line numbers, set the line-numbers attribute to yes. To highlight particular lines, set highlight-lines to a comma-separated list consisting of individual lines and/or ranges indicated with dashes. Some examples are: 5, 2,5, 2,5-8,10-15,15.
For interactive versions hosted on Runestone servers, the label attribute is critical, just like for interactive exercises. So be certain to read .
Finally, when authoring programs, it may be helpful to keep the source code as plain text in separate files. This can avoid the need to manually escape characters that have special meaning in XML and can facilitate testing and updating the code samples. See for how to do so.
Default Attributes for Programs
Book-level default values for some program attributes can be set in docinfo/programs. If a value for an attribute is set in that location, it will be used for any program that lacks the corresponding attribute.
The following attributes can be given default values - some only are applicable to interactive programs (see and ): compiler-args, linker-args, interpreter-args, download, language, linenumbers, and timelimit.
Program Fragments
Fragments of a program can be added inline with text using the pf. A program fragment will be displayed similar to a c, but will be syntax highlighted to match a program. The language to interpret the fragment as can be specified with language or by relying on a document level default for programs (see ).
Interactive Programs, CodeLens
CodeLens is an interactive version of a computer program, which can be visualized by stepping through the code one statement at a time, watching output, variables, and other data structures change. So it is similar to a debugger, except the reader does not set breakpoints or modify program data on-the-fly. This is possible automatically for several different languages when your HTML is hosted on a Runestone server (). This may also be accomplished in browser when hosted on any old generic web server. The catch is that for a generic server a publisher must generate trace data in advance, typically with the PreTeXt-CLI (). Place the interactive attribute on a program element with the value codelens to elect this behavior (no is the default value). Also, be sure to specify a language from the supported languages: Python, Java, C, and C++. Consult below for a summary of various combinations. When an output format does not support an interactive CodeLens instance, the fallback is a static program listing. The program should have an xml:id that will be used as a unique identifier for the generated trace file needed by the codelens.
Sometimes, there is uninteresting setup to get through before the portion of the program the author wants to illustrate. The author can use starting-step to specify the instruction number that the interactive should start at. Code before that will be fast-forwarded through and execution will begin at the indicted step. Note that starting-step is a Step number in the execution sequence, not a line number in the source code. You may have to run the Codelens once to find the right step to start at.
An author may add checkpoints to a Codelens that will ask the user a question when execution reaches a particular line of the program. To do so, add one or more checkpoints. The checkpoint should have a line specifying what line to ask it on and either an answer or answer-variable attribute to indicate the correct answer (see the next paragraph for more on these). The checkpoint must have a child prompt with the question to ask the reader and optionally may have a child feedback element with Simple markup can be used to format the contents of both the prompt and the feedback.
To determine if the user's answer is correct, the answer or answer-variable will be used. answer will be compared directly to the user response via simple string comparison. An answer-variable will be compared to the current value of a variable in the program. This is especially useful for checkpoints inside a loop or function that will be asked multiple times with a different correct answer each time. To specify the name of a variable, use globals.x (for globally scoped variables) or current_frame.x (for locally scoped ones). More advanced names (array elements, object members, etc...) can be decoded by examining the trace file generated for the codelens. Find the line that will contain the checkpoint, and examine the globals field or the encoded_locals field of the last stack frame in that line.
For examples, see the Codelens section of the Sample Book on Runestone.
ActiveCode is an interactive environment where a reader may work on code through repeated edit-compile-test cycles. Code can be provided by an author as a complete program to be modified, a partial program to be completed, or nothing at all. One good example is that maybe header files, import statement, and similar are provided, and a skeleton of a main entry-point procedure is also provided. Then a reader can concentrate on the more conceptual parts of the programming. Some languages will be executable in browser on any old generic web server, while others must be on a Runestone server () where a Jobe Server is running to support the execution.
Place the interactive attribute on a program element with the value activecode to elect this behavior (no is the default value). Also, be sure to specify a language from the supported languages. Consult below for a summary of various combinations. When an output format does not support an interactive ActiveCode instance, the fallback is a static program listing.
Labels and XML IDs
Properly placing labels and xml:id's can get tricky for programs. Understanding the purpose of these two different identifiers is important:
xml:ids are used to link to a program from other parts of the book source code. Any program that you want to use as the target of an add-files or include attribute in some other program must have a unique (within the book) xml:id.
labels are used to provide an identifer for items in the Runestone database. They too should be unique within a book. But a program that is a direct child of an exercise-like element is considered to be a programming exercise. Programming exercises do not need a label as they are included in the database as part of the exercise.
So best practices are:
Every program should have a label attribute unless it is the direct child of an exercise like element. In that case, the label goes on the exercise and the program does not get a label. It is OK to leave a label off of a non-interactive program no other programs try to link to it (e.g. addfiles).
Any program you want to link to from other places should get an xml:id. It always goes on the program itself.
It is perfectly fine to use the same value for both label and xml:id, although xml:ids are more restrictive in terms of what characters are allowed.
Inside the program of an ActiveCode, you can use the following elements:
preamble
Code that will be part of the program but not available for editing by the user and precedes the contents of code. This code will be visible unless the visible is set to no.
Note that the contents of this element will be combined with the code before the indentation is adjusted. So any code in this block must be indented to the same baseline as the contents of code.
code
The body of the program that will be editable by the user.
postamble
Code that will be part of the program but not available for editing by the user and follows the contents of code. This code will be visible unless the visible is set to no.
Note that the contents of this element will be combined with the code before the indentation is adjusted. So any code in this block must be indented to the same baseline as the contents of code.
tests
Tests may take the form of either structured input-output tests (see ) or as a block of code that will be added after the code (as well as any postamble). The assumption is that code in tests is doing unit testing that the user should not see, so this code will be hidden unless the visible is set to yes.
This code is processed by PreTeXt separately from the code, so indentation does not need to be consistent between it code and tests.
Some languages have support for unit testing frameworks. If you use one of them, the results of the tests will be parsed and displayed to the user as a visual results table. The following languages have support for unit testing frameworks:
python supports unittest
java supports junit
c and cpp support doctest (which tends to build and run significantly faster) and catch
stdin
If this element is provided, a text box will be created for the user to enter text that will be fed to the program via the stdin stream. If the stdin has text content, that will be provided to the user as a default input. Multiple lines of input are permissable. The text will be sanitized in the same way that the program itself is.
Here is a sample of a program with preamble and postamble. For more examples, see the Activecode section of the Sample Book
There are a wealth of attributes that can be used to control the behavior of ActiveCode. (These are in addition to the standard ones allowed for for program. see for those.) Below is a list of the extra attributes available. Any attribute that lists other elements for inclusion will take a list of xml:ids for those elements.
autorun
If set to yes the program will run on page load.
chatcodes
Set to yes to enable users to talk about this code snippet with others.
codelens
In languages that support Codelens (see ), there will be a button that allows the user to run the program via Codelens. Set this to no to remove it. This may be desireable if you know the code uses features that are not supported by Codelens (e.g. turtle graphics or image).
compiler-args
(C/C++ only) A comma separated list of strings to be passed to the compiler. Ex: -Wall, -std=c++17. A book-level default can be specified - see .
extra-compiler-args
(C/C++ only) A comma separated list of strings to be passed to the compiler in addition to the compiler-args. Mostly of interest to add an argument to a particular program without overriding any book-level default arguments.
database
(SQL only) SQL based programs can make use of an SQLite database file. Use this attribute to specify the file to load as a string relative to the external top-level directory.
filename
For server based programs. What name to use when the code from this file is written to the server. This is generally only required if using the add-files attribute on some other program to make the contents of this program available (as a .h file for example).
download
Set to yes to enable users a download button that triggers downloading of the user code to a file. A book-level default can be specified - see .
hidecode
Set to yes to initially hide the code. When code is hidden, the 'Run' button is also disabled. To run the code, a user either presses 'Show Code', then 'Run'.
You might use this if you want to put an ActiveCode block in the page in order to include
it in another ActiveCode block, but you don't need or want students to see it right away. Or to hide the code of an ActiveCode with autorun where you initially want to focus on the output instead of the program.
include
A comma separated string identifying one or more other ActiveCodes that are to be prepended to this program when it is run.
This allows you to write examples that build on each other without having to duplicate all the code in each successive block. For example, if you write a function definition in one ActiveCode, you can include it in a later ActiveCode block that has code to call the function without having to visibly include the definition.
add-files
(Server based code only) A comma separated string identifying one or more other programs or Datafiles by xml:id that are to be made available to this code. Each of those elements should have an filename.
For server based programs, the other elements will be copied into files based on their filename attributes.
This allows you to split code into multiple files and thus create more complex interconnections than when using include.
compile-also
(C/C++ only) A comma separated string identifying one or more other programs by xml:id that are also to be compiled when this program is compiled. They will be assumed to also be a part of the add-files collection. Each of those programs should have an filename.
interpreter-args
(Python2/3/Java/octave only. Only applies to Python that is run on the server. See .) A comma separated list of strings to be passed to the compiler. Ex: -Xrs, -Xss8m, -Xmx200m. A book-level default can be specified - see .
language
Same options as program. A book-level default can be specified - see .
linker-args
(C/C++ only) A comma separated list of strings to be passed to the compiler. Ex: -lm, -g. A book-level default can be specified - see .
timelimit
A maximum time allowed, in milliseconds, for a program to compile and run. If not provided, the default is 25000 (25 seconds). A book-level default can be specified - see .
Tests for Interactive Programs
There are currently two ways to make automated tests for ActiveCode programs. The first way is to simply provide code in the tests element of the program as described in . It will be assumed this code is unit tests and it will be run automatically with the user's submission.
Below is an example of unit tested Python. For more examples, see the Coding Exercises section of the Sample Book
The second way to automatically test code is to provide a set of structured input-output pair tests. For each test, the program will be run and fed the specified input. Then the program output will be compared against the test output to decide if the program handled the test correctly. This mechanism is useful for testing simple programs without functions and for languages that do not have a unit testing framework. A particular program can only have one of these two testing mechanisms.
IO tests are generally only available for programs that run on a Runestone server. (See for a list of which languages support IO tests.). To preview them, see the Coding Exercises section of the Sample Book hosted on Runestone
Structured IO tests are added as iotests to the tests element. Each iotest element must have a single input and output element. The input element contains the input that will be fed to the program, and the match element contains the expected output of the program. Indentation for both will be normalized in the same way that programs are (so multiple-line sample output can be indented in your source document).
When evaluated, the program output and test output will have leading and trailing spaces removed. Other than that spacing, the two must match exactly to be considered a "passed" test.
Interactive Program Capabilities
This table lists which types of interactivity are available on various combinations of servers and programming languages. The entry AC + CL means that both ActiveCode and CodeLens instances are available, but the ActiveCode instance will have a CodeLens button enabled. Although tests can be used to append code to any program, only in situations listed as UT below will the test output be parsed and interpreted by the server
Note that python is generic Python with the standard libraries (version 3.x). On the other hand python3 is a Runestone server installation (only) with a number of additional popular Python packages available, such as numpy and pandas.
In concert with interactive programs (see ) you can define a file of data that may be employed by those programs. The necessary element is datafile. It requires a label. To allow programs to link to the datafile, it will also need an xml:id (which can be the same as the label). A filename is also required and is the name the file is known by in an ActiveCode program. Do not try to impose any sort of directory structure on this name. Just a filename. In the case of a text file (see below), the editable attribute is optional. The value no is the default, with yes as the other option. The attributes rows and cols are optional for text files, and default to 20 and 60 respectively. Finally, a non-editable text file (only) may have its contents hidden by setting the hide attribute to yes, rather than the default value of no.
Where might you place a datafile? Lots of places are possible, such as in an example or a programming exercise, close to an ActiveCode program. So, in expository material or in activities for readers to work through. The purpose-built COMPUTATION-LIKE block, data, which will get you a heading, number, title, cross-reference target, etc. (see ), is an option if the file itself needs more prominence or dedicated explanation. Notice that this feature is very powerful, and thus requires a bit of machinery to support. If you just want to point your reader to a file (and leave them to work with it outside of your project), either globally or locally, the read about the dataurl element at .
Text as Data Files
Inside of a datafile place an pre element. There are then two options: provide the contents of the text file right in your source file, as you might for other preformatted text, or supply a source attribute whose value is the name of an external text file you provide. The former is appropriate for toy examples, while the latter may be used for serious files with many lines, or with long lines. Note that if you provide the file as the content of the pre element, it can be indented to match your source file indentation, and will undergo some manipulation, such as removing leading whitespace, and ensuring a final newline, but preserving any relative indentation. If provided via a source attribute, there is no manipulation.
Such a text file may be declared editable by the reader, presumably to allow them to witness the resulting behavior of a some employing program. The rows and cols attributes describe the viewport into the file provided in the HTML output. Typically scrollbars will allow the reader to survey all of a large file. In static outputs, the first few lines are shown, given by the value of rows, and lines are truncated according to the value of cols.
Images as Data Files
Inside of a datafile place an image element with a source attribute. As usual, this attribute should be the name of an external file you provide. Most common formats are supported, but it is important to use standard extensions, so the format can be discerned. Now this file may be explored programmatically by opening the file using the name provided in filename.
Keep the size of the image small, say 300400 pixels in each direction. You may also supply the usual layout controls, such as width, and these will be consulted in the formation of output formats. Ideally, you should use a width that scales the image to look something like its native resolution, since part of an image-processing exercise may depend on this aspect of the input. HTML output uses a 600 pixel overall width, so a percentage can be computed based on this parameter.
Notes on Data Files
Some notes that apply to each type of data file.
Note that the name of the data file in a source attribute need not have any resemblance to the new name given to the file via the filename attribute. In other words, the reader will never know (or care) what source was.
Whenever the source attribute is used, there needs to be an advance step performed by the CLI
or the pretext/pretext script () to generate an auxillary file (yes, a third file!) to aid the transistion from an external file to a file that can be used by the reader in programs.
For a program to use a data file, it must be able to find the appropriate file. This is accomplished by specifying an add-files attribute on the program element that is a list (separated by commas or space) of the xml:id's for files that are available for use in the program. For programs that run strictly in the browser as opposed to on a Runestone server (see for what languages run in the browser), a program may be able to open a file by name without specifying its xml:id in the add-files. However, for all programs, best practice is to make sure that the xml:id of any datafile a program should have access to is correctly listed in that program's add-files
In all cases, for an HTML build the contents of the data file live within an HTML page, as text for a text file, and as a base-64 encoding for an image file. Hence for a non-Runestone build, any employing program must be on the same page, and an author should think ahead about the granularity of how a project might be chunked into pages ().
In a build for use on Runestone Academy (), the file will be in the Runestone database and usuable throughout.
Figures
A figure is the most generic and flexible container for planar content. But be sure to read so you are aware of the other possibilities. A figure has a caption, which will typically render below the content (even if authored early as metadata) and serves to provide an extra description of the content. So it may be several sentences long. There is also a title, which is typically not rendered as part of the figure. Instead it is used for cross-references, or in a list of figures, to identify the figure. So it should be very short and might just be a phrase, such as Life Cycle of a Salamander.
An image is likely the most frequent content in a figure. But you may also place a video, audio, sidebyside, or sbsgroup. Once completely implemented, an interactive is another possibility. (See for more about the side-by-side construction.)
A special situation is when a figure is a panel of a sidebyside, which is itself inside a figure. Then the interior figure is subnumbered. For example, the exterior figure might be Figure 4.12, and if a panel of the sidebyside is the second interior figure it will be Figure 4.12(b). For example,<figure> <caption>Salamanders at different life stages</caption> <sidebyside> <figure> <caption>Hatchling</caption> <image source="salamader-hatchling.jpg"/> </figure> <figure> <caption>Juvenile</caption> <image source="salamader-juvenile.jpg"/> </figure> <figure> <caption>Adult</caption> <image source="salamader-adult.jpg"/> </figure> </sidebyside></figure>could result in the entire figure being Figure 4.12 and then the juvenile salamander photograph would be inside of Figure 4.12(b).
Tables and Tabulars
A table is a container that houses a tabular, which is the actual rows and columns of table entries.
Note that tabular may be constructed using the Complex Table Editor tool online and then exported in syntax. This produces verbose syntax that is usually equivalent to much simpler syntax once you understand the borders and alignment considerations below.
Tablestable
A table is similar to other blocks in () and is most similar to a figure. It will earn a number, which is likely to be a part of the text of a cross-reference pointing to the table. Rather than a caption, it will have a title. The main difference is that the principal content must be a tabular. Only.
Tabulartabular
A tabular is the actual headers, rows, and columns of a table. As discussed above, a typical use is to place it inside a table, though it can be placed all by itself, typically in among a run of paragraphs.
Fundamentally a tabular is a sequence of row and each row is a sequence of cell, which could also be called table entries.
Table Cellstablecelltableentrycelltable
A given cell can span multiple columns, by providing the colspan attribute with a value that is a positive number, the cell will extend to occupy additional columns.
Table Rowstablerowrowtable
A row of a table is a sequence of cell elements. Each row should occupy the same number of cells, when considering the colspan, as discussed above.
To achieve column headers, you indicate that a row contains headers. Typically, the contents of every cell in this row will then be rendered in bold, or some other style. The row element accepts a header attribute with possible values of no (the default), yes, or vertical. The latter is useful if space is at a premium (which always seems to be the case with tables), and the cells of a column are narrow and the header is long. Note that only the first (top) rows can be treated as column headers and these rows must be contiguous. If you think you need column headers mid-tabular, maybe you really have two tables?
Table Columnstablecolumncolumntable
Prior to all of the row within a tabular, there may be a sequence of empty col elements. Having these is optional, but once there is one, then there needs to be as many as the number of columns of the table. These elements do not have any content that appears in the table, but are used to hold attributes that influence the borders or alignment of the cells within a column. These are described below.
So it should now be clear that, after much consideration, that we have chosen a row first approach to describing a table.
To encourage good style, we only support row headers as the first column. So this is a property of the entire tabular. So the attribute row-headers on tabular can have values no and yes, with the former as default. Note that major and minor row headers should be accomplished in the first column by using indentation for the minor headers. Please make a feature request if you would find this useful.
Table Borders and Rulestablerowrowtabletableruleruletable
You can view each cell of your table as having four borders. Or you can imagine rows and columns separated by horizontal or vertical rules. These additions to your table do not change the arrangement of information into rows and columns (a doubly-indexed data set), though you may think it makes the presentation clearer. But less is actually more.
Vertical Rules in Tables
One of the goals of is to gently guide authors towards good choices in the design of their documents, even if we do not claim to know it all ourselves. Take a close look at . What's missing? No vertical rules. Try living without them, you will not really miss them. If you think you need to divide a table into two halves, maybe you really need two tables (and then see the side-by-side capabilities, ).
In the documentation for his excellent package, booktabs, Simon Fear gives two rules for what he calls formal tables: (1) Never, ever use vertical rules, and (2) Never use double rules. We have resisted the temptation to enforce the former and have provided an alternative to the second (three thicknesses). He refers to using tables for layout as creating tableau. If you are finicky about the look of your work, the first three pages of the documentation is recommended reading.
A given cell can have a border on its bottom edge, and on its right edge. This is accomplished with the bottom and right attributes. The possible values are minor, medium, and major, which control thickness. (Not every conversion can produce three distinct thicknesses, so this should be considered a hint to the conversion.) A value of none is the default behavior when the attribute is not used, but can be given explicitly.
How to get a left border on the first cell of a row? The row element allows a left attribute which will put a border on the left end of the row, which is also the left border of the first cell.
How to get a top border on a cell? Put a bottom border on the cell above it. But what if the cell is already in the top row and has no cell above it? The relevant col element allows a top attribute which will place the necessary border on the top-row cell.
Borders and rules verge on presentation, so we are not concerned about which cell a border (or rule) belongs to. So, generally bottom and right can be used in many places, and the exceptional top and bottom maybe used to get the missing border n+1 for a vertical or horizontal sequence of n cells.
The attributes described for cells may also be used on row, col, and tabular. For example a thick horizontal rule after two rows of headers could be accomplished with<row header="yes">...</row><row header="yes" bottom="major">...</row>We will not detail all the combinations that are possible, so experiment and you should be able to create any rational look (and some irrational ones).
The horizontal alignment of the contents of a cell can be influenced by the halign attribute with values left, right, center, and for paragraph cells,justify. Similarly the valign attribute will influence the vertical alignment through values top, middle, and bottom. Default alignments are left and middle.
To align the cells of an entire row, col, or tabular identically, place the relevant attribute on the relevant element. Note that these choices can be overridden by different values on individual consituents.
A cell of a table may contain more text that fits onto one line. If you know exactly where you want the line-breaks to be, then structure the entire cell as a sequence of line elements.
Or, if you want the contents of a cell to look and feel more like a paragraph (or several), structure the cell as a sequence of p, which can contain the usual content of a p, excepting larger content such as display mathematics or lists. Now, in this case, you must constrain the width of the cell's column, to force the line-breaking necessary to render a paragraph as several lines. Use the relevant col element, and specify a percentage of the tabular's overall width, like this:
<col width="40%"/>
A paragraph cell can be right-justified with the halign attribute set to justify. But be aware that if the column is skinny, this can lead to awkward inter-word spaces.
Breakable Tabularstablebreakabletabularbreakable
A tabular may be specified as breakable, inside of a table or not. Use the attribute break set to yes. (The default is no.) This only affects conversions to formats with page breaks, such as PDF. Usually the motivation will be a table or tabular that is too long for a page, but even a shorter table can be allowed to page break.
As of 2022-07-28 this is effective for simple tables, but introduces some variations for more complex constructions. This is implemented with the longtable package, which suggests it may take up to four passes with to obtain the final version. It is also not effective for a tabular that is a side-by-side panel. Consult the sample article for examples where more progress is necessary.
Table Philosophy
The Chicago Manual of Style says:
A table offers an excellent means of presenting a large number of individual similar facts so that they are easy to scan and compare. A simple table can give information that would require several paragraphs to present textually, and it can do so more clearly. A table should be as simple as the material allows and understandable on its own; even a reader unfamiliar with the material presented should be able to make general sense of a table.
If you review the twenty tables presented in Chapter 13 of CMOS, that are of the type we implement, you will notice several things.
Only the first column is ever used for row headings.
Cells do not span multiple rows. (There is no analogue for colspan.)
Column headings appear at the top, other than cut-in heads, which have a very particular form. (We have not implemented these, but would entertain a feature request.)
While our implementation allows for some presentational elements (borders, rules, alignment) our conversions will presume your table hews to the purposes described by CMOS. In particular, it is not a device for spatial layout of complex elements. You might find that the sidebyside and sbsgroup layout devices will suit that purpose better (see ).
Tables are Difficult
Width is always at a premium, and then when a tabular has more than a few columns, the width becomes even more dear. When a cell has text that looks like a phrase or a sentence, rather than numerical data or symbols, it can be even harder to pack it all in. A common example is a schedule of talks at a small professional conference where each time slot (rows) might have two or three talks simultaneously in parallel sessions (columns).
We offer paragraph cells which automatically break lines, but you need to specify a width on the col as a percentage to indicate where line-breaking happens. For manual line-breaking, a cell can be structured entirely by line elements.
The next complication is that the used for PDF output tends to make columns as wide as necessary and will not break lines without the devices mentioned in the previous paragraph. The HTML output can sometimes be a bit more forgiving and flexible. So we suggest building the output first and getting that right, and then the HTML is likely to follow along and not need much futher refinement.
In contrast to most of , you may need to experiment, refine your approach, iterate, and maybe do things contrary to usual best practices elsewhere. For example, the clickables for URLs and knowls might need to be short and less-informative in order to save some width. Abbreviations, initialisms, and acronyms can also save some width.
Summary: Table Reference
Finally, we summarize the available options for a table witha table. Because it would take too much text to describe fully.
This table describes how to construct tables via the tabular element. The table element may be used to enclose the raw table, so as to associate a title and get vertical separation with horizontal centering.
The tabular element contains a sequence of row elements, and must contain at least one. Each row contains a sequence of cell elements and must have the same number in each row (acccounting for the use of the colspan attribute). The contents of the cell elements are the text to appear in entries of the table.
A sequence of col elements may optionally be used. But if one appears, then there must be the right number for the width of the table. They are empty elements always, and just carry information about their respective column.
Where the body of the table below has an entry, it means the attribute may be used on the element, and affects the range of the tabular described by the element. Employment of an attribute on elements to the right in the table will supersede use on elements to the left. Generally, every cell has right and bottom borders, but only cells at the left side of the table have a left border and only cells across the top have a top border. Only one cell has four borders.
A listing is really a specialized type of figure, whose purpose is to hold computer code. It has an optional title which is rendered above the listing. However, the enclosed planar content is limited to a program or console (see and ).
Named Listslistnamednamed listlistanonymousanonymous list
As mentioned above, it is not possible to have a list be the target of a cross-reference. Should an entire list be so important that you need to point to it from elsewhere, then make it a named list by wrapping it in the list tag.
This element can begin with an optional introduction, then has a single, required list, which may be any of the three types. It concludes with an optional conclusion. It can have an xml:id attribute, which in a way is the whole raison d'être for this construction. It will be numbered when rendered, and so also requires a title. You might think of this as similar to a tablebits of information organized spatially, via indentation and line breaks.
Since this element associates a number, title, to an entire list, we call it a named list. What should we call a list that is authored within a paragraph and cannot be the target of a cross-reference? We call it an anonymous list when we want to make the distinction.
Sage
Until we can expand this section, get some ideas from . We will also collect a few items here, to be cleaned-up later.
For online output formats, sometimes the output of a Sage command can be overwhelming, and a bit complicated to parse. Many objects in Sage also have a representation, which can be used to create a superior output format (for some purposes). Begin a cell with the magic:%display latexExperiment with the following Sage code on the next lineintegral(x^9*cos(x), x)Boom! Very nice. Try replacing latex with None, plain, ascii_art, or unicode_art.
Sage Cell Server Design
The ability to execute, and edit, chunks of Sage code is provided by a distinct project, the Sage Cell Server. Simplifying somewhat, the Sage code a reader sees (or has edited!) is shipped out to a running instance of Sage (on a server somewhere) and the code is executed there. The results of that computation are shipped back to the reader for display below the code.
Two implications of this design are
It is not within your power to add additional packages for the supported languages.
You cannot read a (data) file hosted on your project's site.
Fortunately, there are workarounds.
If your code needs a Python package, or an R package, or similar, and it is a standard open source package, then make a request on the Sage Cell Google Group. Likely, it can be added/installed.
Unfortunately, the ability to read files anywhere on the internet was abused, so this capability had to be restricted to a finite list of servers. These include DropBox and GitHub where you might find it convenient to place files supporting your code. Note that for GitHub, you likely want to use a URL which is a raw file such as for the repository README file, written with Markdown.
Interactives
TODO: until then examine copious examples in the sample article.
Side-by-Side Panelsside-by-side panel
Documents, pages, and screens tend to run vertically from top to bottom. But sometimes you want to control elements laid out horizontally. A sidebyside is designed to play this role. It is best thought of as a container, enclosing panelspanelside-by-side panelside-by-side panelpanel, and specifying their layout. Examples include three images, all the same size and equally spaced. Or a poem occupying two-thirds of the available width, with commentary adjacent in the remaining third. Or an image next to a table. But the most common use may be a single image (with no caption, and hence no number), whose width and horizontal placement are controlled by the layout.
See the schema for the exact items that are allowed in a sidebyside. To author, just place these items within sidebyside in the order they should appear, left to right. Then you add attributes to the sidebyside element to affect placement.
Instead of placing a width attribute on each item, instead place this on the sidebyside element. A single width will use the same value for each panel. For different widths, use the plural form widths and provide a space-separated list of percentages. The default is to give each panel the same width, and as large as possible, which will result in no gap between panels.
The margins can be specified with the margins attribute, which if given as a single percentage will be used for both the left and right sides. You may also specify asymmetric left and right margins with two percentages, separated by a space, in the same attribute. An additional option is to use the value auto which will set each margin to half of the (common) space between panels. This is also the default. In the case of a single panel, the left margin, right margin, and panel width should all add up to 100%.
Once the widths and margins are known, any additional available width is used to create a common distance separating panels. (Which is not possible when there is just a single panel.)
Independent of horizontal positioning, individual panels may be aligned vertically. The attribute is valigns and its value is a space-separated list of top, middle, and bottom. The singular version, valign, is used to give every panel the same alignment, using the same keywords. The default is to have every panel at the top.
We could give lots of examples, but instead it might be best to just experiment. Error-checking is very robust, so it is hard to get it too wrong. OK, we will do just one to help explain. Suppose a sidebyside contains three panels and has layout parameters given by<sidebyside widths="20% 40% 25%" margins="auto" valign="middle">Then there will be 15% of the width left to space out the panels. The two gaps are each 5% of the width, and the remaining 5% is split between the margins at 2.5% each. And the vertical midlines of each panel are all aligned.
For a single panel with no attributes, the panel will occupy 100% of the width. A single panel with a specified width will get equal (auto) margins, resulting in a centered panel.
Captioned itemsside-by-side panelpanelcaptioned item as panels deserve special mention. These will continue to be numbered consecutively, with one exception. If you place a sidebyside inside of a figure, then the figure will be numbered, and the captioned items inside the sidebyside will be sub-captionedside-by-side panelpanelsub-captioned item. In other words, the second captioned panel of a sidebyside inside Figure 5.2 would be referenced as Figure 5.2.b.
An sbsgroup (side-by-side group) contains only sidebyside, which are displayed in order. However, all of the layout parameters allowed on a sidebyside may be used on an sbsgroup. This might allow a collection of fifteen images to be laid out in three rows of five images each, with widths and spacing identical for each row because the parameters are specified on the sbsgroup element. In this way, simple grids can be constructed. Note that any layout parameters given on an enclosed sidebyside will take priority over those given on the sbsgroup. Captioning behavior extends to an entire sbsgroup.
Since sidebyside and sbsgroup are containers they cannot be referenced and so do not have an xml:id. However, you can reference their individual contents if they are captioned, and you can reference an enclosing figure.
Generally, a sidebyside or sbsgroup can be placed as a child of a division, or within various blocks, such as proof for example. See the schema for (evolving) specifics.
It should be clear now that a sidebyside is more about presentation than most elements, though there is some semantic information being conveyed by grouping the panels with one another.
Front Matter
A single frontmatter element can be placed early in your book or article. It is optional, but likely highly desirable. The following subsections describe the items that may be employed within the frontmatter. Most are optional, and some may be repeated. An article differs in that it must contain a bibinfo and titlepage and then may only contain an abstract. Generally, these divisions will get default titles, localized in the language of your document, but these defaults may also be replaced by giving a title element. None of these divisions themselves is numbered, so precluding any content within that might normally be numbered. So, for example, no figure may be included. But you could choose to include an image, perhaps within a biography.
If a component of the front matter cannot be numbered, how best to subdivide something like a preface? This is a good use of the paragraphs element. It allows for a (minimal) title, but cannot be subdivided further. See the later part of for more about this exceptional element.
These elements must appear in your source in the order given below, and will appear in your ouput in the same order, which is a generally accepted order used in the production of books. So, for example, even if you author an acknowledgement between two preface, your output may (will?) place the Acknowledgement before the first Preface.
Exceptions to the above general information are noted below.
Bibliographic Information
Required. The bibinfobibinfo element may contain metadata about your document, including author, editor, credit, date, keywords, edition, website and copyright. Additional elements to capture bibliographic information are planned. This is an exception to the divisions described next, as this is a mini-database of sorts, which contains various pieces of information which get used different ways, but primarly via the titlepage element.
Authors and editors
Each author and editor should be described in their own author or editor element, which are structured identically (in output, authors are listed first, followed by editors, sometimes using less prominent formatting). An author can be designated as the corresponding author using the corresponding attribute.
The name of an author or editor should be enclosed in a personname element. Following this, affiliation information can be provided either by using elements department, institution, and location (each of which can be further structured with line tags), or by enclosing these in an affiliation element. (Grouping affiliation details is useful when an author might have multiple affiliations.)
An author or editor can also have an email, biography, or support element. The support element can be used to describe funding sources particular to that author as required by some journals. Notice that the support element could also be a child of bibinfo itself, in which case it would appear as applying to the entire document, not just an individual author.
Keywords
Many journals require papers to contain a list of keywords or subject classification codes. These are both captured by the keywords element. This groups a collection of keyword elements, each of which is a single keyword or subject classification code.
To distinguish between author-provided keywords and subject classification codes, the keywords element can have attributes authority and variant. As of 2025-02-18, the values of these attributes that are recognized are given in .
Recognized keyword attribute valuesTypeauthorityvariantAuthor-provided keywordsauthor or nonenoneMath Subject Classification (MSC) codesmsc2020 or 2010 or etc.
For subject classification codes, to distinguish between primary or secondary codes, the keyword element can have the optional attribute primary (with value yes or no). Put primary="yes" on the first primary keyword, and primary="no" on the first secondary keyword. Alternatively, using secondary="yes" on the first secondary keyword is also acceptable.
If you are writing a paper that needs a different classification from those currently available, please submit a request.
Title Page
Optional, but usually desirable. When present, the titlepage should contain a single empty element titlepage-items, that will collect the appropriate elements from bibinfo to generate a titlepage. So, this is an exception to the following list of divisions, as its production is automatic.
Abstract
Optional, and only available for an article.
Colophon
Optional; only available within a book. The front colophon. (There is also a back colophon, see ). Sometimes this is also called the copyright page. The colophon element can be given a label to produce a specific file name in HTML builds. The only allowable (and required) child of the colophon is the empty element colophon-items, which will automatically bring in appropriate elements from bibinfo. So, like the titlepage, this is an exception due to its automatic production.
Biographies
Multiple biography elements, perhaps one per author. The title can be used in the case of multiple authors to distinguish one from another.
Dedication
A single dedication element, that might include multiple dedications (perhaps by different authors). The content is simply a sequence of p, with multiple elementts for multiple dedications.
Acknowledgements
A single acknowledgement element (note spelling), that becomes a division, and so can contain paragraphs, lists, etc. The Chicago Manual of Style suggests that if these are short, they may be contained in a preface.
Forewords
As of 2021-07-16 the foreword element is not fully implemented. Please make a feature request if you need it.
A foreword is written by somebody other than the author. The name of the writer of the foreword needs to be includedat the end is a good location.
Prefaces
Multiple prefaces are a distinct possibility, and in this case providing a different title for each would be essential. Examples might include: Preface to the Third Edition, How to Use this Book, or To the Student. More ad-hoc material, such as a translator's note, can be handled as a preface.
Understand the Role of a Preface
Chicago Manual of Style begins with Material normally contained in an author's preface includes reasons for undertaking the work, method of research, Note that a preface is not introductory content and is not an introduction. It is written from the author's point-of-view, and may include information about why they are qualified to write on the topic of the book. If there are several editions, the prefaces to the newer editions are placed first. See the related .
(*) Back Matter(*) Appendices
Automatic lists () can appear anywhere, but an appendix is a very natural place to place one.
The back colophon, what most authors think of as the colophon. (There is also a front colophon, see ).
Index
Continuing our basic discussion from , we discuss some details of making and using index entries. We will begin with how you procedurally author an index entry with syntax, and then move to general principles about how to use these constructions to create an effective index. So these two subsections are intimately linked.
Syntax and Placement of Index EntriesCapitalization of Index Entries
The headings (entries) of an index are authored entirely in lower-case, unless it is a proper noun (name, place, ) which would normally be capitalized in the middle of a sentence. We are not able to provide any enforcement of this advice, nor any assistance. It is the author's responsibility to provide quality source material in this regard. We do sort entries so that an entry with an initial capital letter arrives at the right location in the index.
Where you place an idx entry is critical. With output, you will get the traditional page number as a locator in your index. With HTML output we can be more careful. We will look to see which sort of structure contains the idx. Maybe it is an example or a subsection. If so, the index will contain a locator that is a knowl of the example, or a link to the subsection. The distinction is the size of the object, we do not knowl divisions. The exception is a paragraph (p) that is a child of a division, and then the locator is a knowl of the entire paragraph. Remember that a knowl contains an in-context link which can take the reader to the original location of the content in the knowl.
A lot happens in a paragraph, especially when producing HTML. Sometimes an idx can get in the way. Our recommendation is to put idx entries between sentences, and not at the start or end of the paragraph. They can be authored with each on their own line. If you do not need the specificity of a paragraph, then locate the appropriate structure and author the idx right after the title (or where one would be).
A cross-reference in an index is a pointer to another index entry.
cross-referenceindexindexcross-reference
These are rendered as See and See also. You can add see and seealso elements within an idx, so long as it is structured with h. Then it is placed after the last h. A see cross-reference is a direct pointer to another entry in the index. It cannot have a locator as well. When you build the HTML output, we will recognize this situation and produce a warning. A see also cross-reference is an additional pointer, and so it must have a locator to go with it (you will author two idx with identical headings, the first without a seealso to create the locator, the second with the seealso to create the cross-reference. Again, when you build the HTML output, we will recognize a seealso without a locator and produce a warning.
Follow these directions and will format cross-references for you, in the style suggested by the Chicago Manual of Style for HTML output, and according to 's style for print and PDF.
(2019-03-04) We have consciously not said anything specific about what to place inside a see or seealso element. At this writing, you need to supply the text. Of course, this is error-prone and you will need to consult CMOS for formatting guidance. But we have plans to do this the way. First, the ref/xml:id mechanism will be used to automatically create the correct text for the cross-reference, both content and format. Second, these will become live links in electronic formats.
Certain index entries do not sort very well, especially entries that begin with mathematical notation. Our first advice is to avoid this situation, but sometimes it is necessary. The sortby attribute on an h element can contain simple text that will be used to override the content shown to the reader during the sorting of the index.
Advice on Indexingindexadvice on
An index is a navigational aid for your readers (and you).
We do not assume that a reader remembers where anything is,
nor that the Table of Contents is a replacement for part of the index.
Some readers of the index may not have even read your book yet,
and are looking to get a feel for the range of topics as part of the decision of whether or not to read your book at all,
or if it will be useful to have.
It should be comprehensive, including everything substantive.
Indexing is a job for a skilled professional, and most authors produce poor indexes.
The tips in this section will help you avoid the most common pitfalls.
We follow recommendations from the Chicago Manual of Style,
Indexing for Editors and Authors: A Practical Guide to Understanding Indexes,
and Pilar Wyman of Wyman Indexing.
Terminology
The basic element of an index is an entry, which consists of
a piece of information and its locator. For example:
normal subgroup, 37
is an entry indicating that information about normal subgroup
can be found on page 37.
Indexes are (usually) organized alphabetically, with a
main heading
aligned with the left margin, and progressively indented subheadings below
the main heading.
Often it is desirable to place the same locator under more than one heading,
known as double posting. For example, a desirable addition to the
sample entry above is
subgroup, 28
normal, 37 .
An alternative to double posting is cross referencing, using
see and see also. Typically cross references are used to
avoid repeating a large number of entries, or to direct the reader to related topics.
An index may start with a headnote giving advice about using the index.
Typically a headnote is not necessary unless the index has some unusual features.
Basic principles
The purpose of an index is to point the reader to information.
Point to, not repeat.
For example, acronyms should be indexed at the location where they are defined,
not at every place they appear, and it is not necessary to define the acronym within the index.
People and places should be indexed when information is given about them,
not every time they are mentioned.
A good index has multiple ways to find the same information. Being redundant is desirable,
because it increases the chance the reader finds what they seek in the first place they look.
Indexing is best done after the text has been written. Adding index entries while writing
the text may seem to be a labor-saving device, but if you are not an experienced indexer,
those entries will only be a small fraction of the final index.
Topics should be indexed in multiple ways. If a term is defined, you should also think
of other words the reader might search for. For example, you may define limit point
and consistently use only that term, but an index entry for accumulation point with a
see limit point locator would be appropriate.
Use disambiguation to distinguish identical terms with different meanings.
For example
Both of those entries should also be double posted under the main headings of group
and ring, respectively. No disambiguation is needed for those entries.
Singular or plural forms of nouns should reflect the language in the text.
So if a chapter is titled Mammals,
then use a heading mammals.
And if the chapter is titled The Mammal Class,
then use a heading mammal.
An index is typically as long as 5% of the main text.
With many figures, or other structures creating additional whitespace,
the percentage may be lower. If your primary output is online,
length may not be an issue. For print, there are strategies for pruning an index.
Once you have finished the text, and then finished the index,
it is time for a thorough review of the index.
There will be places for consolidation, often due to using variants of particular words.
You may wish to remove subheadings which all appear within the range given in the heading.
For example,
could have all of its subheadings removed, especially if space is an issue.
Common pitfalls
Sometimes it takes less than one second to determine that an index is poor.
If a quick glance reveals that the index consists mostly of main headings
with very few subheadings, then few readers will find it to be useful.
Double posting, which may mean more than literally two entries with the same locator,
will help readers find what they are looking for. Most of those entries will
be in subheadings.
Another instantly recognizable problem is too many locators in one entry. This entry
asymptote, 37, 48
is probably fine. But once you have three or more locators in an entry, then
your index may be improved by adding some subheadings. If the locators in the above
example refer separately to horizontal and vertical, then probably two subheadings
would be more useful than two undifferentiated locators in one entry.
An additional problem which can be seen at a glance if you know what to look for,
is the absence of any main headings with a large number of subheadings. On almost
any subject there are topics which are addressed repeatedly. This should be
reflected in the structure of the index. For example, in a group theory textbook
there should be several entries under group, examples. In an introductory
calculus book the index should help the reader locate the derivative of many
different elementary functions.
Index headings should be nouns, not adjectives. An adjective may be important,
and you should use it, but it should not be the entire content of a heading
since it is not an idea by itself. But it may be a subheading. For example,
suppose you have a paragraph on highland sheep.
Then both of the following should appear in your index,
since a reader might consult both locations.
highland sheep, 45
sheep
highland, 45
Notationnotationnotation listlistof notation
We continue the introduction at . A notation list, like an index, is a specialized collection of cross-references. So some of the philosophy here applies equally well to the idx and index-list elements, and vice-versa. (See .)
To generate a list of notation employed in a book or article, use the notation-list element. This empty element belongs in an appendix. Likely it is the only content, or you might include some preliminary material. The title of the appendix is up to you and is not automatic.
Some authors like to make definitions inside of paragraphs, ideally using a term element. This is a natural place for a notation element. So this approach gives an author a lot of flexibility in location.
Other authors like to make definitions using the definition element, since it creates a heading and number, allows a title, and can easily serve as the target of a cross-reference. So this is another good place for a notation element. But now, associate it clearly with the definition by placing it in the metadata, early on, after the title. And not in some subsequent paragraph. The reason will be clear in just a bit.
How is a notation element constructed? It has two elements. The usage should be a sample piece of mathematics using the necessary symbols, and wrapped in a singlem element. The second element is description and should be a short phrase, or sentence-like material, decoding the sample usage, and may include m elements. The reader sees nothing in the output at the location of the notation element.
The automatically-generated notation list is then a three-column table, in the order of appearance, with the sample usage, the description, and a locator. For output derived from , such as print or PDF, the locator will be the page number of wherever you placed the notation element. For HTML the locator is much betterit is a knowl, for either a paragraph or for an entire definition. The latter possibility explains why it is better to place the notation element inside a definition, if possible, rather than in a paragraph that is a constituent of a definition.
Automatic Lists
Sometimes it is useful to have an automatic list of various elements of one kind in a book, other than the ones already available in a document. The predefined ones include an index (see ) and a list of notation (see ). Examples of lists one might wish to create could include lists figures, computational listings, or theorems.
There is a very flexible way to make a list of various blocks (or perhaps other items) in your text. Use an empty list-of element as a child of a division. A very natural use would be to create an appendix for the sole purpose of holding one such list. This is why this feature is frequently used in the back matter. But you could place an automatic list many other places.
We will illustrate with an example. Suppose you know your book has theoretical results only in theorem and lemma elements. So, for example, you never use corollary elements. Then you could author
List of Results
]]>
The result will be a link to every theorem and lemma in the entire book, using a clickable with its type, number and title. See for an example. In HTML output the clickables will usually be knowls, which is especially handy. The list will be organized with the titles of the chapters as headings. The divisions attribute can have several types of divisions listed, such as both chapterandsection. The empty attribute set to yes indicates that a division heading should be used even if there is nothing on the list contained within. The default for empty is no.
This feature is best used when the items in the list have been authored with titles, which greatly increases the utility of the list for your reader. Review if this advice is new to you.
There is a scope attribute, which should be the name of an element which is a division containing the location of the list-of element. Then the list is restricted to items within the specified division. For example, if you have the list-of inside a subsection built for this purpose, and you use @scope="section" then the list will have all the items from throughout the section containing the list.
There are four types of exercises, based on their location: inline, divisional, worksheet, and reading questions. These may be specified inside elements by the pseudo-elements: 'inlineexercise', 'divisionexercise', 'worksheetexercise', 'readingquestion'. (These are just strings meant for this purpose, and are not real elements.)
There may be an argument for a ref attribute that would behave similar to scope. Make a feature request if you need it?
MyOpenMath Exercisesmyopenmath exercise
MyOpenMath is a hosted online homework system with hundreds of thousands
of prebuilt questions.
In the web output, the MyOpenMath question will be embedded and
interactive though not tied to any student or faculty account. In static output,
a static version of the question will be included. Note that there are some
limitations on which problems will display correctly in web and static output. Best practices are below.
To include a MyOpenMath question, you'll first need an account on
MyOpenMath.com
where you can browse the question libaries and look up the question ID.
Then in your PreTeXt document include a myopenmath element
with a problem attribute with the MyOpenMath question ID.
To further control the web behavior of the embedded question, you can
optionally include a params attribute containing a comma-separated
list of parameters, like maxtries=1,showhints=0, which can include:
maxtries
(default 0): Set to more than 0 to set the max tries on a
question part before it gets disabled, and before a scaffolded
question will move on to the next part.
hidescoreval
(default 0): Set to 1 to hide the "score: #" that displays
after submitting a question. Score markers (check or x) will
still show.
showansafter
(default 1, or maxtries if set): Set to have the answer show
after this many tries. Set to 0 to have answers never show.
showhints
(default 3): Set to 0 to suppress help features, like hints
and video buttons.
allowregen
(default 1): setting this to 1 will show a "Try another version"
button after submitting.
submitall
(default 0): Set to 1 for all parts to get submitted, regardless of whether all parts are answered.
seed
(default random): To set a specific seed (1-9999) to force a
specific version of the question to display
While almost all problems will display correctly in web output and many will display correctly in static output, it is recommended that you avoid using problems with the following features. Note, you can usually make a copy of the problem, edit out the offending feature, and use your substitute.
Scaffolded problems
Problems with extensive formatting (e.g., use of an html table to control display)
Lists containing images or line breaks (<br/>)
If you really love a MyOpenMath problem that does not display correctly, you might contact support; likely someone knows how to produce a conforming version.
STACK ExercisesSTACK exercise
STACK is an assessment system with online interactive exercioses. This section will soon have instructions on how to embed these exercises.
URLs and External ReferencesURLexternal referenceURLs to External Web Pages
The url element is used to point to external web pages, or other online resources (as distinct from other internal portions of your current document, which is accomplished with the xref element, ). The href attribute is always necessary, as it contains the full and complete address of the external page or resource. Include everything the URL needs, such as the protocol, since this will be most reliable, and as you will see it never needs to be visible. The element always allows, and then employs, a visual attribute for a provided more-friendly version of the address. Finally, the content of the element, which becomes the clickable text in electronic formats, can be authored with the full range of markup generally available in a title or sentence. A typical use might look like<url href="https://example.com/" visual="example.com">Demo Site</url>This will render as Demo Site. If a url has content, and no visual attribute is given, then the href will be placed in a trailing parenthetical for print versions of PDF, though there will be an attempt to remove standard protocols. Compare
<url href="https://example.com/">Demo Site</url>which will render as Demo Site versus<url href="mailto:nobody@example.com">Bouncing Email</url>which will render as Bouncing Email.
If you do not provide any content for a url element, then the clickable text will be the actual URL with a preference for the (optional) visual attribute, rather than the mandatory href attribute. This should be considered as disruptive to the flow of your text, and so a poor alternative to the content version just discussed (see ). But it might be a good choice in something like a list of interesting web sites. Whether or not a simplified version of the address, via the visual attribute, is desirable will depend on the application. As an example, using the optional visual attribute we have<url href="https://example.com/" visual="example.com"/>This will render as . Note that for the print version of PDF, there is no trailing parenthetical since the visual version is already apparent.
If you want to squelch the automatic trailing parenthetical for the print version of PDF on a url element with content, you can explicitly set the visual attribute to an empty string as visual="". This signal will inhibit the automatic trailing parenthetical. This should be a very rare occurence, since you are denying readers of some formats from seeing even a hint of the actual URL.
A url inside a title has been accounted for, but should be used with caution.
As with the rest of we have taken care to handle all of the exceptional characters that might arise in a url. So author normally, using the necessary keyboard characters, only taking care with the two XML characters, < and &, which need escaping (see ). Use percent-encodingpercent encodingpercent encodingURL encoding (aka URL encodingURLURL encoding) for the href attribute, if necesary, to include special characters, such as spaces. See below for a common need for the ampersand character, and a further caution about percent-encoding of URLs.
Finally, for conversion to /PDF output it gets extremely tricky to handle all the various meanings of certain escape characters in URLs in more complicated contexts (such as tables, footnotes, and titles), so there may be some special cases where the formatting is off or you get an error when compiling your . We have anticipated most of these situations, but we always appreciate reports of missed cases.
Data URLsURLdatadata URL
A dataurl element is very similar to the url element just described. The purpose is to point to an actual file that will be of use to your readers. What actual happens when a reader clicks on it is dependent on the format of the output and that reader's environment. Maybe the file will be downloaded, or maybe a particular application will open the file. That part is out of our hands. Use an href attribute in the same way as for url, and the content and the visual attribute also behave similarly.
The one key differerence is that you can also use a source attribute in place of href and point to a file that you provide as part of your project (not unlike providing a photographic image via the image element). Place the file in your collection of external files (see ) and provide the path to your file from below the directory of external files in the source attribute. For HTML output, will do the rest. For more static formats, you can set a base URL (see ) and you will get a complete URL that points to the instance of your file hosted with the rest of your HTML output.
Notice that this element provides limited functionality, at best just a hyperlink to a file. For data files that you want a reader's in-browser computer program to process, read about the datafile element at .
Visual URLsURLvisual
By a visual URL we mean a version of a URL that is simpler than the realURL, but that provides enough information that a reader can type the URL into some other device with a minimum of effort, and with success. Consider that your project may someday be a print (hardcopy) book, or that your project will be converted to braille for a blind reader. These are some ideas about making a URL simpler. We welcome more ideas.
Remove standard/default protocols like http:// and https:// which most browsers will furnish in their absence.
Sites like StackExchange list posts with a long identifying number, followed by something that looks like the title. In practice, the number is enough.
Experiment with dropping a trailing slashthey are frequently unnecessary.
Often a leading www. in a domain name is not necessary.
Try providing just a domain name in place of a top-level landing page, it will often redirect to a longer URL.
You could use a URL shortener, though some thought should be given to its longevity. Will you remember where your short URLs point once they are no longer functional? Safer to have your long URLs in an href in your source, and use to make them friendlier.
Craft URLs Carefully
Your writing will be smoother, and easier on your readers, if you do not interrupt a sentence with a long URL, unless somehow it is really of interest and relevant right there. So provide content (the clickable text) when you use the url element (rather than an empty url). This obligates you to provide a visual attribute, which feels a little like a tedious exercise. But this will be very welcome to some of your readers, those who are unable or prefer not to use electronic formats. Just above (), we provide suggestions for crafting these to be more pleasing, but still useful, versions of URLs.
Characters in URLsURLquery string
A URL can have a query string, which has a list of parameters following a question-mark. The parameters are separated by ampersands (&), which will need to be escaped, so as to not confuse the XML processor. So use & anywhere the ampersand character is necessary, such as a source attribute, or a monospace version of a URL achieved with a c element. Also, the question-mark character should not be URL-encoded (%3F) (despite advice just given above), so if necessary edit it to be the actual character. General advice about exceptional characters in XML source can be found in .
Videovideo
A video is a natural way to enhance a document when rendered in an electronic format, such as HTML web pages. It might be additional information that is hard to communicate with text (marine invertebrates swimming), a lecture or presentation that augments your text, or even some artistic work, such as a symphony legally hosted on YouTube, when you could never hope to get copyright clearance yourself.
supports videos you own and distribute with your source, videos shared openly on the Internet via stable URLs, and videos available on YouTube. Go straight to to the end of this section to see how easy it is to incorporate a YouTube video.
HTML5 web browsers are able to play video files in three formats, summarized in the following table.
HTML5 video formatsFormatExtensionReferenceOgg, Theora.oggFree and open, WikipediaWebM.webmRoyalty-free, WikipediaMPEG-4.mp4Patent encumbered, Wikipedia
Video Element
The videovideo element is used to embed a video in output formed from HTML. Subsections below describe the different ways to indicate the source of the video. The video may be placed inside a figure or can be a panel of a sidebyside. The former will have a caption, be numbered, and hence can be the target of a cross-reference (xref). The latter is anonymous, but allows for horizontal layout, and combinations with other panels.
Size is controlled by a width attribute expressed as a percentage (on the video element when used in a figure, or as part of the sidebyside layout parameters). Height is controlled by giving the aspect ratioaspect ratioaspect ratiovideovideoaspect ratio with the aspect attribute on the video element. The value can be a ratio expressed like 4:3 or a decimal number computed from the width divided by the height, such as 1.333. The default for videos is a 16:9 aspect ratio, which is very common, so you may not need to specify this attribute.
Options include specifying a start and an end in seconds as integers (no units) if you only want to highlight a key portion of a video. The play-at attribute can take the following values
embed
Play in place (the default action).
popout
Play in new window or tab, at 150% width.
select
Provide the reader the choice of the other two options.
In an educational setting, sometimes the preview images provided by YouTube can be distracting, or for an author-provided video you may wish to provide your own preview image. The preview attribute can take on the following values
generic
supplies a Play-button image.
default
Whatever the video playback provides. This is identical to simply not including attribute at all
Path to an image file
Typically, this will be a relative path, starting with images/. This image will be used as preview for the online version and the print version.
Author-Provided Videos
If you own and possess your video content, then you can distribute it with your source, and it can be hosted as part of your HTML output. Then the source should be a relative file name that points to the file containing the video. If you are able to provide more than one of the three formats in , then you can provide the filename without an extension. If a browser cannot play one format, it may be able to play another. will write the code to make that happen, preferentially in the order of the table (more open formats first!). In other words, you can provide files in more than one format and increase the likelihood that a reader's browser will find a format it can playback.
Network-Hosted Videos
If a video is shared openly on the Internet, you can simply provide the full URL in the href attribute. All the other attributes are the same as for the author-provided case, above. Read for some considerations when authoring a URL, since there are a few gotchas.
You can frequently discover the URL of a video by first playing it, and then using a context menu ( via a right-click) to reveal an option to copy the video's location. However, note that there are various techniques sites use to make such a URL temporary, or otherwise unusable. So do some research about potential uses and test carefully. Our example below is provided from a United States government site.
Also, some video-sharing sites do their best to never make it easy to access the video as a file, so the construction described here will not be successful. Instead, they have links to Share or to Embed which will run their own (proprietary) player in your web browser. YouTube and Vimeo are two popular examples, and we provide explicit support, see for YouZTube, while Vimeo is similar. For other sites, you have limited success with the interactive element, with a construction such as:
<interactive iframe="https://www.dailymotion.com/embed/video/x8mc0pr"/>
Here is one example of a network-hosted video in MP4 format (from the HTML5 Video Test Page at Tek Eye):
Jōren Falls, Kano River, Japan
YouTube Videos
For a video hosted at YouTube, find the 11-character identification string in the address of a video you are viewing. It will look something like hAzdgU_kpGo. Then, instead of the source attribute, simply provide this identification string as the youtube attribute, such asyoutube="hAzdgU_kpGo"That's it. All of the options above are then implemented and realized with YouTube's embedded player.
This can be a great way to incorporate popular or artistic content, legally, which might be difficult or costly to acquire through copyright clearance.
The Eagles, Hotel California
Mozart, Piano Sonata in C Major, K. 545, II
The pretext script () may be used to download the provided preview images for YouTube videos (only). Filenames will be formed from the xml:id of the video element. These will be used in static versions of output, such as print. Once custom preview images are implemented for author-hosted video, their static representation will improve.
Additionally, a YouTube playlist can be included in one of two ways. You may set the youtube attribute to be a space-separated list of several video IDs (an itemized playlist). Alternatively, you may set the youtubeplaylist attribute to a YouTube playlist ID (a named playlist). At present, a named playlist will not get a thumbnail image from Youtube, and either the generic thumbnail will be used or you can supply your own preview.
YouTube Playlist
Make a feature-request if a scheme similar to the one for YouTube, but for some other video-hosting service, would be useful for your project.
Note that when a project is hosted at Runestone Academy () a YouTube video becomes an activity that is part of a student's reading assignement. So just like an interactive exercise, it needs a label attribute. See for more.
(*) Music
TODO: Scholarly works discussing music may use notes and chords in text, and displays of sheet music are easily supported. (TODO: add some discussion to .)
(*) Units of MeasureUnicode CharactersUnicode characters
supports (and encourages) the use of Unicode characters. Here are some relevant comments.
Unicode characters will migrate well to any output format based on HTML. Most browsers will have a variety of fonts with glyphs to realize these characters.
will not always behave as smoothly. For openers, you definitely will want to use the xelatex engine to build a PDF. Then you need to be sure your system has a font with the necessary characters and you make the font known to xelatex. We are working out the details of the best way to accomplish this.
How do you get a Unicode character into your source? In part this is specific to your operating system and editor, so is outside the scope of this guide, but we have hints below for popular operating systems.
You can always place a Unicode character in your source using XML syntax. The first thing an XML parser will do is convert this syntax into a character. The number of the SECTION SIGN in hexadecimal is A7, so the syntax § is identical to the character §. Of course, this will get tedious fast.
The Full Unicode Input utility at www.cs.tut.fi/~jkorpela/fui.html8 will allow you to specify a chunk of 256 consecutive Unicode numbers and then you can click on characters to make a string of several or many. You can cut/paste these into your source, or convert the whole lot to XML syntax all at once.
Unicode characters have standardized names. You can find these, and more information, including font support, at the Unicode section of FileFormat.info. If you are struggling to find a specific character, then using this site's name in a search will often quickly locate what you need. Be sure to experiment with the test pages there for browser and font support (including checking your local configuration).
Warning: do not use Unicode characters as a way to get mathematical symbols (that is delegated to our use of syntax). And do not use Unicode when we have provided an empty element for a character. These empty elements are conveniences, which spare you from looking up Unicode numbers and make your source more readable. We also sometimes fine-tune these characters in ways that are not possible if you embed them as Unicode. An example is <times />, for use outside of a strictly mathematical setting: I bought a 24 at the lumberyard.
Unicode Support in OSX
Mitch Keller reports on 2017-01-12 a way to get some popular characters with OSX. Use the Keyboard preference pane under System Preferences. In there, you can enable Show Keyboard, Emoji, & Symbols Viewers in menu barOnce you activate the keyboard viewer, you get a keyboard on your screen. When you hold down opt, it shows you what other symbol you would get if you push opt+letter. For instance, opt+w gives an upper-case Greek sigma and opt+= gives a not-equals sign (neither of which we can handle when processing the latex version of this guide). To get ä, you type opt+u and then hit a. This is illustrated by the keys for diacritical marks being highlighted in orange while holding opt. The shift key can have an effect to produce variations of some characters, such as quote marks (dumb versus smart).
(*) Unicode Support in Linux(*) Unicode Support in WindowsBraille Best Practicesbraillebest practices
This is an evolving list of best practices for authoring (and publishing) so that a conversion to braille is as useful as possible for the blind reader.
Many recommendations for mathematics will be useful to any reader, but perhaps even moreso for a blind reader, so read . Recommendations here may also improve your project for all readers. See for more about the mechanics of producing output as braille.
Division Numbering
Braille uses various devices to indicate division headings, since font weight, size, and color are not available. These include starting on a new page, centering text, preceding with a blank lines, standard levels of indentation (4 or 6 cells), and combinations of these devices.
In a conversion from , the text of each heading is the number of the division, followed by the title. So the formatting and the presence of a hierarchical number are together good clues that a new division is starting. And the number of parts in the hierarchical number will also serve as a precise indicator of the depth of the division.
As a publisher, you can turn off division numbering below some level (). Think carefully about the impact this will have on a blind reader, since lesser division headings will be harder to recognize without a leading number.
Side-By-Side Layout
A sidebyside can be a very useful device, but think carefully about its suitability. As of 2022-11-30, we have yet to even handle them carefully in a braille conversion. And if your panels hold images, that is even harder, since we do not have good support for tactile images yet.
In any event, we will likely unwind a sidebyside into a series of its panels running down the page, rather than across, along with a note about how many panels to expect. So when you author a sidebyside, consider how this alternate presentation in braille will be received by the reader.
(*) Testing Sage ExamplesXinclude Modularization
The xincludexinclude mechanism is not part of , per se. It is of some use for organizing your authoring, so you do not have mammoth files open in your text editor. As discussed in there is very little value in modularizing so much that you have many very small files, and also almost no benefit whatsoever to using directory structure to duplicate the inherent tree-like structure of XML. Many small files, or deeply-nested directories, seem to be of little help and can cause more headaches than they are worth.
The xinclude mechanism automatically introduces a xml:base attribute, which we need to account for in the RELAX-NG schema (). So we limit which elements may be the root element of an included file. The rough, general rule is that if an element can have a title, then it can be the root element of an included file. So in particular each of the divisions (chapter, section, ) is a candidate.
One special exception to this restriction is the use of text files, containing absolutely no markup at all. Two good examples are the code child of a program or the latex-image element used to describe an image by source code that understands.
In both cases you can put the text content of these elements in a separate file, use the href attribute of xi:include to point to the file, and then the twist is to set the parse attribute to the value text. This has two general benefits. First, you now cannot have any XML in the file, so you do not have to have a single root element for the file (and so the schema imposes no restrictions). Second, you do not need to escape any problematic characters like ampersands and angle brackets (), nor use the misunderstood CDATA mechanism.
There is one caveat about this device. Normal XML processing will normalize line endings. Usually this means XML source edited on Windows will have line endings that are two characters, a carriage return (CR) and a line feed (LF). Effectively, this is replaced by one character, the line feed, which is what is common for Linux and Mac. However, when you use the parse attribute with value text, this is now an unparsed entity and the normalization of line endings does not happen. The likely result may be a lot of extra blank lines interleaved into your content. See End-of-Line Handling in the XML specification for details.
Additionally, in the case of latex-image you can park unsightly code away in files so you do not have to look at it, or you can create a small driver program to test each one, or even better, you may want to use the same image more than once (maybe in different figures?) and can just include it repeatedly, while only ever editing the single copy.
Finally, the input and output children of sage, and console as well as the code of program are also candidates for this device. In particular, you may want to have the code for a program in its own file where you can test it easily with an interpreter or compiler. There is one gotcha. If you were to put a newline between code and xi:include there is the very real potential of unwanted whitespace bleeding into your output. Our suggested remedy uses an example from Bob Plantz. Convert
There are some fancy XSLT tricks you can employ to use more complicated content repeatedly. Your source will be less portable, and we do not support or recommend these techniques. But if you want a go anyway, see hints at . Note the reliance on xpointer(), and that the final technique is restricted to DocBook, a different XML vocabulary.
Localizationlocalizationinternationalization
We briefly introduced support for authoring documents in multiple languages in . Here are some more details.
First, authors are encouraged to write the actual text of their documents using the language of their choice. See for details. For HTML this should be straightforward, for other output formats (especially PDF) the publisher may need to have various fonts installed (see ).
Localization for itself is restricted to the items names for you. This includes things like theorem, but also items such as the labels of navigation buttons. To have this in your language requires two things, described in the following subsections.
Localization Files
The prerequisite is that a localization file for your language exists. Fifteen languages are already supported, such as es-ES (Peninsular Spanish), pt-BR (Brazilian Portuguese), and hu-HU (Hungarian/Magyar); the default language code is en-US (American English). For a up-to-date list of which languages are available, see the localization stylesheet folder on GitHub.
If such a file does not exist, you will need to create one or find someone to help you do so. Brief instructions for this are in the README file for this directory. These instructions suggest using the en-US file as a template and as a source of more detailed instructions. We highly encourage anyone who creates such a file to contribute it to our growing list of localization stylesheets; see in the Appendices for details.
Changing the Document Language
In order to use a localization, simply place xml:lang="es-ES" (with language code as appropriate for your project) as an attribute on your pretext element. For example:<pretext xml:lang="hu-HU"/>Then you can process your source as usual. Be sure to check that the translations look appropriate in your output.
While processing your source, you may encounter warnings for missing translations, like this:MBX:WARNING: could not translate string with id"hypothesis" into language for code "pt-PT"In this case, the localization stylesheet is missing a translation for this tag, and it will remain in en-US. We welcome contributions to keep stylesheets fully complete; see for details.
Multilingual Documents
As of the start of 2023, we are improving support to allow for parts of a document to be in different languages. Much as you place an xml:lang attribute on the overall pretext element, you can place this attribute, with a different supported language onto any element, and all of the content within that element should react according to the new language. A division would be most natural, but perhaps also a block or a paragraph? Development continues, and in particular not every part of an HTML page always reacts.
Accessibilityaccessibiltyweb accessibilty provided accessibility features
Continuing our discussion from we begin by listing features of our conversion to HTML which happen automatically. These come in part from the recommendations at the Web Content Accessibility Guidelines of the Web Accessibility Initiative.
HTML
Wherever possible we supply HTML elements and attributes that will be interpreted sensibly by a screen reader in the absence of the visual styling provided by CSS. This means we are very careful about the role of headings (h1 through h6) for screenreaders, both for divisions and the block elements they contain. We provide HTML that passes validation checks. And so on. Employing attributes from the Accessible Rich Internet Applications suite of web standards (ARIA) will go a long way to improving accessibility. This work is on-going, as of 2021-11-03.
MathJax () is the JavaScript library we use to render mathematics within the HTML output. It provides extensive capabilities for screen readers to render the mathematics audibly, and by default your project's output is configured to take advantage of these features. We refer the reader to the MathJax documentation of Accessibility Features for details. But here is a simple experiment you can do yourself right now to simulate how a blind reader could experience mathematics with the combination of , MathJax, and a screen reader.
Find some moderately complicated mathematics, such as in the Mathematics section of the sample article, or your own project, or the sample from MathJax copied below.
Bring up the context menu on that display (a mouse right-click for most).
Turn on the Accessibility > Explorer > Activate menu item. The page will reload, and the Explorer menu item will earn many more menu items. This setting is reasonably sticky, so you should not have to do this repeatedly. Having this on will incur some processing time as part of each page load, so you may want to turn it off later.
Turn on the Accessibility > Explorer > Speech Output menu item.
Turn on the Accessibility > Explorer > Subtitles menu item. (If Subtitles is greyed out, try toggling Speech Output.)
TAB until some mathematics is given focus (a discrete border appears).
SHIFT-SPACE will activate exploration of the mathematics with the Explorer. A subtitle, with an aural rendering of the mathematics, will appear below the display.
You can navigate (explore) the expression tree with the up, down, left, and right arrow keys. The subtitles will change as you do this.
Asymptote is a language for describing 2D and 3D images, which we support as much as possible. The 3D images produced are rotatable for exploration via a mouse or finger. For those with motor limitations, the images may also be manipulated with keyboard controls. (Many assistive technologies rely on, or emulate, keyboards.)
Skip to Main Content
Repeatedly pressing the Tab key will move a reader from one location to the next in a web document. Since your Table of Contents in the left sidebar is a series of many links, a reader will need to tab through all of these to eventually reach the interesting content on a page.
However, we support a common device. The first link on every page is hidden from all readers, but an initial Tab will present a link labeled Skip to Main Content which when executed will take the reader past the Table of Contents and to the start of the content at the top of the page.
Links
Hyperlinks have colors, styles (such as underlining), and effects (such as mouse hover) which are consistent with WCAG recommendations. Rather than being underlined by default, we instead use high-contrast color choices.
Colors
We are sensitive to the fact that some readers have difficulty distinguishing between certain colors. So we do our best to distinguish text, or other elements, without relying exclusively on color. For example, the delete and insert elements may render text with strike-through and underlining (respectively) to show the distinction.
But you can help as you author. For example, see .
Justified Text
Right-justified text (an even right margin) can sometimes lead to spaced-out text that is difficult for some readers. For print, our use of as an intermediate format, leads to PDF output where right-justified text can be superior to the alternative, ragged right text. For more see and .
Watermarks
If a document has a watermark (), then a screen reader will announce its presence at the beginning of each page of HTML content.
Author Provided Accessibility Features
Here are features which are helps fascilitate, but require your participation as the author.
Image Description
Images you author or supply will be invisible to some readers. Within every image element you can provide both a shortdescription, which will migrate to the HTMLalt attribute, as well as a a description element (structured with p and tabular children) that will be provided as a longer description. The content will picked up by screen readers.
For the shortdescription, make the content clear and concise. Do not use any markup whatsoever, just simple characters, and avoid quotation marks, and limit the text to at most 125 characters. You can learn more at sites such as the one provided by the Web Accessibility Initiative (WAI) at Text alternatives for non-text content.
We cannot do this one for you, this is for the author only, as image descriptions must take into account author intent and their context. But we can give you the tools do it as easily and as correctly as possible.
See for further advice on authoring image descriptions.
Image Formats
University offices that provide services for students with disabilities are often interested in the images themselves from a text, as standalone files. For example, they might be able to manufacture tactile versions. You could use the pretext script to produce a variety of different formats and bundle these up in a single archive file for distribution at your book's website. Or you can make each image available through adjacent links placed automatically. We call these image archives. See .
Futhermore, as described above, a 3D image authored with Asymptote code can be superior for those with motor disabilities. So this functionality begins with an author's choice to employ Asymptote.
Cross-References
describes a variety of ways to customize the look and content of a cross-reference. You can create a larger target for clickable items by making the text as long as possible. So for example an xref authored as<xref ref="theorem-FTC" text="type-global" />would cause the clickable portion to be something like Theorem 5.16, whereas<xref ref="theorem-FTC" text="global" />would then cause the clickable portion to be simply the much shorter 5.16. Of course, you can set a default style for your entire document, so it is not necessary to continually provide the text attribute.
Link Text
Default link text, such as Theorem 4.15 has been chosen to be informative. But for internal links (xref) or external links (url) you can choose alternative content for the clickable portion of the text. Think carefully about your choices here and try to avoid text like here or click here. For a url, the default content is the href, which can always be improved by providing content. For formats such as the print version of PDF, the visual is provided automatically as a trailing parenthetical.
Hyperlink Underlining in PDF
In an electronic PDF, hyperlinks are distinguished from surrounding text by color alone, which may be insufficient for readers with color vision deficiencies. A publisher option can add an underline beneath all hyperlinks (xref and url), providing a second visual cue independent of color. (A print PDF does not color links, but a publisher may still choose to underline them.) See for the publisher file syntax.
Commutative Diagrams
Whenever possible, author commutative diagrams using the syntax of the amscd package. Then online and braille output will be more accessible. See for more.
Punctuation after Mathematics
Periods, commas, and semi-colons that follow directly after mathematics are handled differently by for visual formats versus non-visual ones (e.g. braille, audio). But this only happens if you author the punctuation in the logically correct location and let do the rest for you. See and for details.
Advice for Writing Image DescriptionsOscar Levin
Acknowledgement: the following content is based on a presentation delivered by Michael Cantino in December 2022. Michael has served as the BVIS specialist for Oregon's K-12 public schools, an accessibility specialist at Portland Community College, and is a Library of Congress certified Braille Transcriber. Many thanks to Michael for sharing his expertise with the community.
Accessibility standards dictate that all (non-decorative) images included in websites are accompanied by a text description which a screen reader can read aloud to a non-sighted user. This alternative text (or alt text) is also displayed in place of the image if the image fails to load. Essentially alt text is a brief description of what the image is meant to convey. Of course, determining how to concisely convey information of an image can be a challenge for any image, and this is especially true for images you would find in a mathematics or science textbook. The following suggestions and examples are intended to help an author create quality descriptions of their images.
First, a few technical considerations. The usual way a non-sighted user will access a pretext book is through a -generated HTML webpage. Screen readers will read the text contained in the alt attribute of the img element on the page. ( uses the text the author provides in the shortdescription element to create this content.) Technical limitations of the alt attribute and most screen reader software mean that descriptions presented in this way must conform to particular specifications.
The content of an alt-text description must be plain text and should not exceed a total of 125 characters (although the exact character limit is a matter of some debate). Some screen readers will read more than this, but others will simply stop reading at this point. Further, it is more complicated to get screen readers to navigate alt text compared to how they would navigate the rest of text on the page. Since the alt text is plain text, it cannot include text styles, links, MathML, or other markup.
VS Code, and presumably most modern text editors, will display the character count of selected text in the status bar.
A separate way to provide information about an image to non-sighted users is to use some sort of long description. There is not wide agreement among platforms on how to implement long descriptions, but generally they are available near the image (not assigned to the image directly). In , long descriptions are authored inside a description element, structured with p (or tabular) children. These descriptions can include basic markup, including mathematics inside m tags.
In the following sections, we will consider how to write image descriptions that achieve the goal of providing the same information as the image does. Depending on the particular case, this could be done with a short or long description. When a long description is needed, the image should still have a short description that give a brief overview of the image and alert the reader to the presence of a long description. The long description will likely repeat the information from the short description (although this is a bit of a style decision).
From this point on, we will not distinguish between the types of descriptions and simply consider what content would be appropriate to include in a description.
Images in Context
To convey the information of an image requires an understanding of what information the image is intended to convey. Two identical images can naturally have completely different descriptions depending on what the purpose of the image is. For example, consider the following image and think about how you might describe it.
Graph from Active Calculus
graph of function f, a downward opening parabola, with open circle at parabola's vertex, at the point (1,3)
The graph of a downward opening parabola labeled f, with vertex at the point (1,3). At the vertex, the graph shows an open circle, indicating that the function is not defined at this point.
The long description I gave to this image was: The graph of a downward opening parabola labeled f, with vertex at the point (1,3). At the vertex, the graph shows an open circle, indicating that the function is not defined at this point. This was informed by what I assumed the author was trying to accomplish with the image: to illustrate various ways that a function might not be continuous. I also know that the textbook has described parabolas as opening downward, rather than having negative leading coefficient or some other standard.
But what if this same image was in an exercise asking the reader to determine the equation of the parabola? The description above didn't mention anything about axes since that wasn't relevant to the point the author was trying to make. If the reader wanted to find the equation, then we might write a description like the following:
The graph of a function plotted on coordinate axes. Both horizontal and vertical axes range from -1 to 4. The graph appears to start at the point (-1,1), crosses the vertical axis between labeled values 2 and 3, reaches a maximum value of 3 at x = 1, and then decreases again, crossing the horizontal axis between x = 3 and x = 4.
Even this might change depending on the context. Should readers be able to identify whether the graph is a polynomial or a line? Or is the goal to be able to identify what the vertical intercept is from the graph?
Along with the pedagogical context, it is also worth considering the other information that is available to the reader: some of the information in the image may be described in the surrounding text or in the caption of the image. It is not necessary to repeat this information in the description.
Once you have an understanding of what the image is meant to convey, you can start to write the description itself. The following are some general guidelines to keep in mind.
Give an overview. Before describing various elements in an image, give a brief overview. This will allow the reader to determine whether they need to continue reading the description, or jump ahead. It also orients the reader to the image and helps them understand the context of the description.
Create structure. A reader will need to piece together all the different components of an image, so anything the author can do to facilitate this is helpful. For example, work from left to right, or clockwise from the top, and say that this is what you are doing. Use the relevant structure of an image to group descriptions of related components: A set of coordinate axes, in which the horizontal axis ranges from -10 to 10 and the vertical axis ranges from -5 to 5.
Be clear and concise. After writing your description, read it back and look for ways to improve brevity, clarity, and structure. This needs to be done while still considering the reading level and vocabulary of the target audience. A nice resource of this is the Alt Text as Poetry website.
Leverage the reader's specialized knowledge. Again with an understanding of your target audience, you may be able to assume they know what the graph of a particular function looks like. For example, an advanced college math textbook could have as a description, graph of a quadratic function with a vertex at (2, 3) and a y-intercept at (0, 1).
Avoid visual shorthand. Sighted authors are used to using comparisons between how things look. Some basic shapes should be okay for most readers: a ball, a cup, U-shaped, etc.
As an example of the structure of a description, consider the recommendations for describing a chart or graph (data visualization) provided by the Do No Harm Guide: Centering Accessibility in Data Visualization. Chapters 3 and 4 of that guide are particularly helpful.
Examples
We conclude with a few more examples of images and their descriptions.
Venn diagram
A Venn diagram from Discrete Mathematics: an Open Introduction
Venn diagram with two overlapping circles labeled A and B; region in A not overlapping B is shaded.
A Venn diagram with two overlapping circles labeled A and B, respectively. Each circle contains a region which does not overlap with the other circle, and a region which does overlap. The region contained in circle A that does not overlap with region B is shaded.
Short description
Venn diagram with two overlapping circles labeled A and B; region in A not overlapping B is shaded.
Long description
A Venn diagram with two overlapping circles labeled A and B, respectively. Each circle contains a region which does not overlap with the other circle, and a region which does overlap. The region contained in circle A that does not overlap with region B is shaded.
Context
The image is illustrating how Venn diagrams can be shaded to illustrate set operations. This was the forth Venn diagram in the text, as such the second sentence of the long description is likely unnecessary; readers should understand what a 2 set Venn diagram looks like.
Kernel and pre-image
Kernel and pre-image diagram from A First Course in Linear Algebra
Two ovals representing vector spaces containing points representing vectors, with arrows associating points.
Two ovals representing vector spaces U and V with arrows connecting points in oval U to oval V, representing the transformation T. Oval U is split into 4 roughly equal sections, each with 3 points; arrows point from each individual point to a shared, corresponding point in oval V. Each section's points connect to a different point in oval V, which contains 6 points in total. In each section of oval U, a label appears above the first point and an expression appears to label the section.
Section 1: first point is labeled \mathbf{u}_1, section labeled with \mathbf{u}_1 + \mathcal{K}(T), arrows point to point \mathbf{v}_1 in oval V.
Section 2: first point is labeled \mathbf{u}_2, section labeled with T^{-1}(\mathbf{v}_2) = \mathbf{u}_2 + \mathcal{K}(T), arrows point to point \mathbf{v}_2 in oval V.
Section 3: first point is labeled \mathbf{0}_U, section labeled with T^{-1}(\mathbf{0}_V) = \mathcal{K}(T), arrows point to point labeled \mathbf{0}_V in oval V.
Section 4: first point is labeled \mathbf{u}_3, section labeled with T^{-1}(\mathbf{v}_3), arrows point to point labeled \mathbf{v}_3 in oval V.
The two remaining points in V are labeled x and y.
Short description
Two ovals representing vector spaces containing points representing vectors, with arrows associating points.
Long description
Two ovals representing vector spaces U and V with arrows connecting points in oval U to oval V, representing the transformation T. Oval U is split into 4 roughly equal sections, each with 3 points; arrows point from each individual point to a shared, corresponding point in oval V. Each section's points connect to a different point in oval V, which contains 6 points in total. In each section of oval U, a label appears above the first point and an expression appears to label the section.
Section 1: first point is labeled \mathbf{u}_1, section labeled with \mathbf{u}_1 + \mathcal{K}(T), arrows point to point \mathbf{v}_1 in oval V.
Section 2: first point is labeled \mathbf{u}_2, section labeled with T^{-1}(\mathbf{v}_2) = \mathbf{u}_2 + \mathcal{K}(T), arrows point to point \mathbf{v}_2 in oval V.
Section 3: first point is labeled \mathbf{0}_U, section labeled with T^{-1}(\mathbf{0}_V) = \mathcal{K}(T), arrows point to point labeled \mathbf{0}_V in oval V.
Section 4: first point is labeled \mathbf{u}_3, section labeled with T^{-1}(\mathbf{v}_3), arrows point to point labeled \mathbf{v}_3 in oval V.
The two remaining points in V are labeled x and y.
Context
The image is contained in a section on injective linear transformations in a proof-based linear algebra textbook. The goal of the image is to illustrate the equivalence between images of the linear transformation, their pre-images, and the kernel of the transformation.
Combinatorial Graph (unlabeled)
Unlabeled graph from Discrete Mathematics: an Open Introduction
9 vertices arranged in a circle; edges connect some pairs of vertices. See long description
Graph with 9 vertices arranged in a circle. Edges connect pairs of vertices. Starting at the top and moving clockwise, the vertices have been numbered in this description 1 through 9 so edges can be detailed in the table below.
9 vertices arranged in a circle; edges connect some pairs of vertices. See long description
Long description
Graph with 9 vertices arranged in a circle. Edges connect pairs of vertices. Starting at the top and moving clockwise, the vertices have been numbered in this description 1 through 9 so edges can be detailed in the table below.
This is from an exercise in a section on paths in graphs. The question reads, Below is a graph representing friendships between a group of students (each vertex is a student and each edge is a friendship). Is it possible for the students to sit around a round table in such a way that every student sits between two friends? What does this question have to do with paths?
Conclusion
Watching a blind reader navigate a web page can be a very enlightening experience. Or you might even undertake learning one yourself. Here are some suggestions for getting started (current on 2018-05-31).
NVDA, , Windows, open source via GPL
Orca, , Linux, open source via LGPL
VoiceOver, included with Apple's macOS and iOS
ChromeVox, , ChromeOS, free from Google
JAWS, , Windows, commercial
Much of the technical work for accessibility is accomplished by developers. But authors have responsibilities, too. So testing can be part of your workflow. One free tool is axe from Deque Systems.
We have concentrated on making HTML output accessible, since that seems the most natural and best supported. But we are aware of efforts for other formats.
PDF/
A PDF may not lend itself naturally to providing an accessible format. But there have been efforts. The Users Group on PDF Accessibility and PDF Standards is an excellent resource to start with. There is also a issue #1046.
EPUB
The International Digital Publishing Forum has information on EPUB Accessibility.
Slidesslides
Slideshows may be authored in by using the following tags.
slideshow replaces the usual article or book tag to
let know you are authoring a set of slides. As usual, you may then
define your title, subtitle, and frontmatter.
Similar to articles, your content should be organized into several
sections.
And within each section, a slide represents a full screen of information.
Within a slide, you may author content as usual, such as paragraphs
(p), lists (ul), and so on.
Several elements support setting the pause attribute to the
value yes to allow stepping through
parts of a slide (e.g. it inserts a Beamer \pause).
A minimal working example may be found in the
Examples folder of the PreTeXt repo on GitHub
.
See publishing details for various outputs in .
Literate Programmingliterate programming
We continue (and do not repeat) the introduction at . implements the literate programming paradigm with two primary elements, fragment and fragref.
A fragment is a chunk of code. Almost always it has a xml:id attribute. It begins with a mandatory title. It may have index entries, but see below for advice using the list-of element. Then there is a mix of code and fragref elements. The code element holds the actual text in whatever computer language you are using. Line breaks are respected. Use the XML escape characters < and & if your code needs the < or & characters. Do not try to use XML markup inside the code element.
A fragref is a reference to some other fragment. This is accomplished via the ref attribute which points to the target via an xml:id. So this is very similar to an xref (), but not enough alike to have the same element name. The most important distinction is that the xsl/pretext-litprog.xsl stylesheet will replace the fragref with the contents of the target fragment. In other conversions, the fragref will be a visual expression of the target fragment, possibly with some active means to visit or examine the target (hyperlink, knowl), more similar to an xref.
So the xsl/pretext-litprog.xsl stylesheet will course through your fragments converting the tree-like structure given by the references in the fragref elements into a depth-first traversal that will assemble the code elements, and only the code elements, linearly into a program. Notice that it is your job as the author of the program to be certain that this rearrangement results in a syntactically correct program. ( is good, but not that good.)
If you are with us this far, you are wondering just where the root of this tree is? In other words, just whichfragment does this traversal begin with? Good question. At least one fragment must have a filename attribute. Then a traversal will begin here and your program will be output to the file with the name you specify. You are not limited to one file/root, so if your program has multiple source files they may be documented/collected into a single source file. (Notice this implies that every fragmentmust have an xml:id or a filename.)
You can place a fragment most anywhere you might place any other numbered block (such as example), though we would tend to place them as children of divisions. The remainder of your document can have all the usual features: a table of contents, a preface, divisions, an index, references, etc. Then a conversion to PDF, HTML, or other formats, will include your code, but in an order that might be more human-readable, and with careful documentation in close proximity.
Automatically migrating each fragment to an index is a bad idea. (We already experimented.) Instead you can try putting<list-of elements="fragment"/>into an appendix. Perhaps a pointer early on to its existence will help your reader. This list can be subdivided with the use of the divisions attribute. See . Note that you might still want to provide an index, but remember that its construction is a job for an author ().
Literate programming has been developed to support the authoritative RELAX-NG version of the schema. Since RELAX-NG is a declarative language, the rearrangement of code hunks is not quite as critical. But still, see schema/pretext.xml for a non-trivial example. As of 2020-11-11 there are a few caveats. Start a discussion on the development forum if you have a need.
The conversion to a program has no explicit support for languages which interpret indentation meaningfully (e.g. Python). The code element makes no changes, so you could succeed if authored carefully. Some sort of relative indentation attribute might be a good solution.
We do not syntax-highlight the code. A language attribute might allow us to recycle existing features.
Numbering is serial from the start of the document. Raise a feature request if you think hierarchical numbering is indicated.
================================================
FILE: doc/guide/author/webwork.xml
================================================
Exercises exercisesAlex Jordan
With a server
(version 2.16 or higher, or )
and a little setup work, you can embed exercises in your project.
HTML output can have interactive problem cells or print problems in static form.
PDF output will print static versions.
And all such exercises can be archived into a file tree to be uploaded onto a server
for use in the traditional way.
Although we expect that version 2.16 and above are supported,
we recommend that you use the current
(or one previous) version of whenever possible.
Should bugs be discovered, it may be difficult to address them with older versions of .
See for how to configure a course and server to process your problems,
and then how to process them.
Problems
You must extract content as described in
before you will be able to see any content in your output. For most cases, you
should be able to do this by running pretext generate webwork to process
exercises.
A webwork tag must be inside an exercise or a PROJECT-LIKE block,
optionally preceded by an introduction,
and optionally followed by a conclusion.
]]>
There are several methods for putting content into the webwork. (Note that an
empty webwork with no attributes will simply produce the camelcase
logo.)
Using an OPL Problem
If a problem comes from the Open Problem Library and is accessible from the host
course in the usual way using a Library/... path, then you can include it with a
source attribute. For example:
<webwork source="Library/.../foo.pg"/>
Not Every PG Problem is Compatible with
Some problems that work fine within are not compatible with .
Typically, these are exercises that use older PG coding techniques. To be compatible with
, all of the macros used by a problem must be updated to give output.
We have done this with modern PG macros and macros that are frequently used. But still,
not every PG problem is compatible with . In some cases, maybe it would be
straightforward to train the macros to give output. But in many cases, older
macros and problem files are not structured well and is all about good
structure. So it could be a significant project to retrofit compatibility.
If you elect to use a problem that is incompatible with but you don't yet know that,
a few things could happen. One is that when you process the problems to gather static representations,
you will get an error message that the problem did not return valid XML.
Or you might coincidentally get valid XML back, but something is just missing or wrong.
There's no automated check for that; you should read the output to check that the problem is complete.
We recommend reading your PDF output with hints, answers, and solutions exposed,
to be sure you are seeing the static version of the exercise.
If there is an incompatible problem that you would really like to use, you have three
options:
Author the problem in from scratch as described elsewhere in this section.
Edit the code for that problem to use compatible macros.
Edit the incompatible macros to be compatible with .
The last two options may involve contributing to repositories such as the OPL and PG on
GitHub, so it is more expedient to use the first option.
Local PG Source
You can include PG source for a problem directly, as text content for the
webwork element. For example:
<exercise>
<webwork>DOCUMENT();
loadMacros(qw(PGstandard.pl PGML.pl PGcourse.pl));
$pi = Real("pi");
BEGIN_PGML
Enter a value for [`\pi`].
[_]{$pi}{5}
END_PGML
ENDDOCUMENT();
</webwork>
</exercise>
Note the attention paid here to whitespace. Any indentation or newline whitespace within
the webwork will be kept in the PG file that results from this method. Such
whitespace may affect the functionality of the problem.
If you have a problem as a PG file, you can place it in your project's folder tree and use
xi:include to insert the PG code as text into the webwork element:
<webwork><xi:include parse="text" href="pg/my_problem.pg"/></webwork>
Two things to note. The file where you use xi:include has a root element, and
that root element needs to declare the xi namespace. So you need to have an attribute
xmlns:xi="http://www.w3.org/2001/XInclude" on that root element. Second, the
href specifying the path to the PG file needs to be relative to the file you
are working in. In the example, there is a folder named pg adjacent to the file we
are working in, and the PG file is within that folder.
Perl-free Problems
If you'd just like to rattle off a quick question with no randomization, you can do as in this example.
1+2=
]]>
The exercise above could be given an optional title, introduction, and conclusion.
The webwork inside could be given a hint and solution.
These are discussed in Subsection.
In the above example, '3' is the name attribute to a var element.
There is actually no variable named 3; we are just using the slot where more complicated exercises
would place a Perl variable answer.
So the above is how to create an answer blank that is expecting 3 as the answer. What
you give as a name attribute will be passed to PG's Compute()
constructor, so it needs to be valid input for Compute(). Note that you could pass a
string encased in quotes, or a perl expression. Just be mindful of the differences. For
example:
8**2 will process a perl real using exponentiation and lead to the MathObject Real 64.
'8^2' will process a perl string and lead to the MathObject Real 64.
8^2 will process the perl real using bitwise XOR and lead to the MathObject Real 10.
The default context is Numeric,
which understands numerical expressions and formulaic expressions in the variable x.
You can activate some other context as in this example.
Context("ImplicitPlane");
The answer is x+y=1.
]]>
Many special contexts are automatically detected by , and it loads the appropriate macro file into the PG problem.
However you may need to explicitly load a macro file as described in Subsection.
PG code in Problems
To have randomization in problems
or otherwise take advantage of the algorithmic programming capabilities of Perl and 's PG language
requires using a pg-code tag.
Having at least a little familiarity with coding problems in is necessary,
although for simpler problems you could get away with mimicking the sample article in pretext/examples/webwork/.
A statement, optionalhint, and optionalsolution follow.
]]>
If you are familiar with code for PG problems, the pg-code contains
lines of PG code that would appear in the setup portion of the problem. Typically,
this is the code that precedes the first BEGIN_PGML. If your code needs any special
macro libraries, you may load them in a pg-macros tag prior to
pg-code, with each such .pl file's name inside a macro-file
tag. However many of the most common macro libraries will be loaded automatically based on
the content and attributes you use in the rest of your problem.
Here is a small example. Following the example, we'll continue discussing statement and solution.
Within a statement, hint, or solution, reference perl
variables using var tags with name.
Within the statement, a var tag with either a width or form attribute
creates an input field answer blank that expects the variable with that name to be the answer.
A var can have form with value essay, in which case it need not have a name attribute.
This is for open-ended questions that must be graded by a human.
The form field will be an expandable input block if the question is served to an authenticated user within .
But for the cells in HTML output,
there will just be a message explaining that there is no place to enter an answer.
A var can have form with value array. You would use this
when the answer is a Point, Vector, ColumnVector, or Matrix MathObject to cause the input
form to be an array of smaller input fields instead of one big field.
A var can have form with value popup, buttons, or checkboxes for multiple choice questions.
If you are familiar with PG, then in your pg-code you might write a custom evaluator
(a combination of a custom answer checker, post filters, pre filters, ).
If you store this similar to
$my_evaluator = $answer->cmp(...);
then the var can have evaluator with value $my_evaluator.
An instruction is specific instructions for how the reader might type or otherwise electronically submit their answer.
Contents of an instruction will be omitted from print and other static output forms.
The instruction is a peer to p, but may only contain short text children.
Some general information on authoring problems can be found in
a set of videos at webwork.maa.org/wiki/Problem_Authoring_Videos.
Not all of this is relevant to authoring within ,
but there are parts that will be helpful for constructing the Perl code necessary for randomized problems.
in an exercisegroup
An exercisegroup is a collection of exercises with common instructions that are put into an introduction.
If you put exercises in an exercisegroup,
then when the exercises are exported to .pg problem files for use as online homework from a server
it makes sense that the instructions from the exercisegroup's introduction should be included in the .pg file.
And so they are included there. Note that they are not included when you are building HTML or output
for your project. (Rather, the exercisegroup's introduction appears in its normal place.)
You should be aware of this when you write the exercisegroup's introduction.
It impacts the specific language you should use. For example, if you write Differentiate the following functions.
or Differentiate each of the functions below., then you have language that doesn't fit the individual problem
when it is used for homework on a server. Instead you might write Differentiate the function.
It makes sense as common instructions for the exercisegroup as well as the instructions for an individual exercise.
Metadata
A webworkwithout a source attribute can have a plain text description.
This should be a summary of what the exercise asks a user to do,
including any relevant pedagogical details of the exercise. For example:
Add two fractions with distinct one-digit prime denominators.
...
]]>
A longer description may be broken into lines where the lines are plain text.
Add two fractions with distinct one-digit prime denominators.
One fraction is always positive, the other always negative.
...
]]>
The content of the description will be written into a PG COMMENT command,
making the description visible in a Library Browser.
Reusing a webwork by xml:id
If a webwork has an xml:id,
then another webwork can copy the first one simply by using a copy attribute
whose value is the first webwork's xml:id.
The seed of the first webwork is ignored,
and the second webwork may set its own seed.
For example:
$a = random(1, 9);
$answer = $a+1;
Enter +1.
]]>
The copy attribute should point to a webwork that has -authored source,
not to a webwork with a source attribute.
(If you want to copy one with a source attribute, just reuse the same source value.)
ImagesUsing a Local image file
Planned, not implemented yet.
Using TikZ
In a problem statement (or hint, or solution), you may use an image with a
latex-image child. See for generalities
about using latex-image.
However, if a latex-image is inside a webwork,
you must use \(...\) instead of $...$ to encase any inline math in the image.
And if you have display math, that should use \[...\] instead of $$...$$.
Your latex-image code can use variables that you defined in the pg-code section.
Scalar variables may be used simply by using their perl names including the dollar sign sigil.
For example, \draw ($a,$b) -- ($c,$d); where $a, $b, $c, and $d are variables.
However, any instance of \$ in code will be interpreted as an escaped dollar sign first,
so rare situations may require you to be more explicit.
The alternative is to include variables just as you would anywhere else in a problem statement,
using a var element like <var name="$a"/>.
You would also need to use a var element if you would like to insert a perl array,
for example <var name="@a"/>.
In perl, $, @, and % each have special meaning.
So you may wonder about using them in your latex-image code.
The short answer is that you should use them just as you would use them in a regular document.
So when you would like a dollar sign, write \$.
For a percent sign, use \%.
An at character does not need escaping, so write @.
As mentioned above, do not use a dollar sign to encase math.
If you want to put a comment in the code,
you may write it in the usual way like % This is a comment.
Your project's docinfo may contain a latex-image-preamble element.
If so, and if that preamble content should affect the latex-images inside the webwork,
then you need to get that preamble content up on the host course.
In many cases, you will need to get that preamble content up on the host course for the image to even compile.
See .
See the sample chapter for examples.
Using pg-name
In a problem statement (or hint, or solution), you may use an image with a pg-name.
This attribute's values should be the name of an image created in the pg-code section.
For example, an image created using init_graph from PGgraphmacros.pl.
See the sample chapter for examples.
================================================
FILE: doc/guide/backmatter.xml
================================================
AppendicesBest PracticesExample List of NotationIndex
================================================
FILE: doc/guide/basics/README.md
================================================
# Contributing to the *Basics Reference* portion of The PreTeXt Guide
## `xml:id` usage
* Add `xml:id`s to all divisions and listings (at a minimum).
* Within the *Basics Reference*, please ensure that your `xml:id`s begin with "basics".
* Within the *Basics Reference*, use `ch` for chapter, `s` for section, `ss` for subsection, `l` for listing, and `fig` for figure when constructing `xml:id`s.
* An `xref` to another portion of the *Basics Reference* can be done via something like ``.
## Cross references to other parts of The Guide
* To help readers develop an understanding for the delineation between the parts of the guide, state which part you are making a reference to. For instance, `The Author's Guide ()
goes into greater detail` is the preferred style of making an `xref` out of the *Basics Reference*.
* We encourage contributors to add lots of cross references. The *Basics Reference* is not meant to be the ultimate guide to every feature of PreTeXt.
## Code snippets
* Unless demonstrating something such as inline math or a cross reference that must live within a `p`, you are expected to put your code snippet in a separate file with extension `.ptx`.
* Follow the model done in existing sections to use `xi:include` twice, once with `@parse="text"` (always within a listing) and once without setting `@parse`. This allows the reader to see how the code is rendered by the PreTeXt converters.
## Index entries
* The initial indexing of the *Basics Reference* is being done by Matt Boelkins, Mitch Keller, and Oscar Levin based on extensive conversations with a larger group at the Portland workshop in 2019. **Please do not add additional `idx` tags to existing portions of the *Basics Reference* while this bullet remains in the `README.md` file.**
* Code snippets contained in `listing` are required to have at least two index entries. One should have main heading ` code for` and subheading that identifies what it is the PreTeXt code for. The second must have the appropriate main heading to identify what the sampmle code for and subheading ` code for`.
* Use `see` and `seealso` liberally in your indexing. Try to think of any other (nontechnical) terms someone might use to look up an idea and put the appropriate `see` entry in the index. For instance, we have "problem" as an index heading with with "as homework" as the subheading. This points the reader to see exercise.
* When referring to a PreTeXt tag or attribute in the index, use `` or `` as appropriate. Also ensure that you use `@sortby` in these cases, as otherwise the index isn't sorted correctly. For instance, you might use something like `example` to create a top-level index entry for the PreTeXt example tag.
* The various "-like" elements need to be indexed carefully. The main index entry needs to follow the lead of example-like elements, which is presented (in output) as "example-like elements (, , )". When using `` or `` to point to a "-like" category, use only the portion that does not list the tags (e.g., `example-like elements`. For the top-level ` code for` index entry, the subheading for a "-like" element should be comprehensive: ` code forexample-like elements (example, problem, question)`. This allows a user of the index to scan and realize that if they want to create a `` element, then they can copy the listing given for the example-like elements and change `example` to `question`.
================================================
FILE: doc/guide/basics/aside.ptx
================================================
================================================
FILE: doc/guide/basics/axiom.ptx
================================================
OptionalPeano
Here's the statement of the axiom.
================================================
FILE: doc/guide/basics/basics-part.xml
================================================
Basics ReferenceAbout This Reference
This Basics Reference supplements the more formal documentation in other parts of the Guide.
Here you will find the basics
of the most important and commonly used elements.
In most instances,
this will be exhibited by showing a chunk of code in a numbered Listing followed immediately by the exact output that code produces.
(In some cases, such as with the code that produces a section,
it is not practical to do this.)
Wherever possible,
the sample code and its output are accompanied by cross-references to the Author's Guide in .
There are some things that are considered beyond the scope of this reference:
Many of the possible options that can be used with the different tags.
This is a basic reference,
and so we want to keep things simple.
When you need a more advanced feature not discussed here,
follow the link to the
.
We welcome contributions of intermediate examples to this
Basics Reference,
but the initial goal is not to be comprehensive in adding such examples.
Instructions on converting your XML to another format such as HTML or .
Instructions on using
in .
(This reference does show the most basic of syntax for including a problem from the
Open Problem Library.
However, it assumes that you already have a project set up to compile correctly with
problems,
which is an involved task.)
Basic Formatting
boldformattingitalicformattingfontformattingtermformattingemphasis
The begin with is a markup language that captures the structure of textbooks and research papers ().
By a markup language,
markup language
we mean that the syntax describes the structure
of the document and not the presentation of the document.
Thus, does not provide, for instance,
a way to make text bold or italic or in a larger font.
If an author seeks a specific type of local typesetting,
then they need to pause and think about the
reason for that typesetting.
Is the reason to emphasize a word or phrase?
Is the reason to alert the reader to a common mistake?
Is it to designate that a word is a new term being defined by the author?
There are ways to mark up such structural ideas in ,
and authors should conscientiously ensure that they use this markup.
To illustrate some of the key structural markup that leads to formatting,
we include the listing and paragraph below.
Some basic content of a paragraphp code for code forp
The code in produces the following output:
Document Structure
Elements such as chapter, section,
and subsection are called divisions.
divisiondocument structuresectionsectiondivisionsubsectiondivisionchapterdivision
They are the key organizational elements of the structure of a document and all have (essentially) the same syntax.
If a division does not contain any other divisions,
then its structure looks like what we see in . (Plenty of other things can go inside other than paragraphs,
including figures, )
The general outline of a section as a model divisionsection code for code forsection
divisioncontaining other divisionsintroductionof a divisionconclusionof a division
If a division has other divisions inside it,
then the structure is a bit more complicated and regimented.
In particular,
if you want text before your first subdivision (subsection in this example),
that text must go inside introduction.
If you want to start with the subsection,
then the introduction is optional.
In the division with subdivisions model,
everything must be contained inside introduction, subsection (or whatever your subdivision type is), exercises, references,
or conclusion.
This is illustrated in .
A section with subsections.section code for code forsectionsubsection code for code forsubsectionintroductionof a division code for code forintroduction of a divisionconclusionof a division code for code forconclusion of a divisionLimitations on introductions and conclusionsintroductionof a divisionlimitationsconclusionof a divisionlimitations
There are many tags that are not
allowed in introductions and conclusions.
In general, avoid things that would have numbers.
For instance,
one should not put an example or an exercise in an introduction or conclusion.
Paragraphs: like an un-numbered (sub)sectionparagraphsparagraphs
It can be useful to gather a few items and give them a title,
but perhaps those items do not merit their own (sub)section.
The paragraphs serves that purpose. A title
is required.
This paragraphs contains two ps. Immediately before,
and immediately after this paragraphs there are paragraphs
which each contain one p. A paragraphs can contain pretty
much anything except for a division.
The role of p tagsparagraphp
One of the things you'll need to keep an eye out for is when things must be wrapped in p (paragraph) tags.
Notice that title tags do not have their content wrapped in p,
which places some limits on the sorts of things that can be contained in a title.
If you find text disappearing or displaying strangely,
the culprit is likely an unnecessary or or missing p tag.
See for information on how to use some additional tools to see if your file is valid in terms of following the structural rules in the schema.
Mathematicsmathematics
Since was originally called MathBook XML,
you will not be surprised to learn that it has robust support for mathematical formulas.
mathematicsformulamathematicsequationmathematicsformulaequationequation
Inside the tags that delimit math environments,
your code is basically , with the caveat that you must be careful with <
and &
since they are special symbols for XML.
exceptions: < and &special symbols
When typing math in your code, use \lt for
<, use \gt for > (not strictly necessary, but good
for symmetry), and use \amp for &. In
HTML, MathJax is used to render math, so
generally supports the things that MathJax does out of the
box (with the addition of amsmath) without the need for too many additional packages to be loaded.
MathJax
For inline math,
just wrap things in the m tag.
equationin-line code for code forin-line equation
For example, a^2 + b^2 = c^2 is produced by <m>a^2 + b^2 = c^2</m>. We get displayed equations with the md tag; setting number to yes on the md produces a numbered equation.
mathematicsenvironmentsdisplayed equationmathematicsenvironmentsin-line equationequationnumbered
Displayed equations code fordisplayed equationequationdisplayed code for
The code in produces the following output:
For a collection of equations all aligned at a designated point,
use md and mrow. Number equations by setting number to yes on the md (or on individual mrow children). mathematicsenvironmentsaligned equation
Aligned equations code foraligned equationsequationaligned code for code formdmd code for code formrowmrow code for
The code in produces the following output:
Because most of the early adopters of have been mathematicians,
there are lots of additional features supported in terms of mathematics.
See for further details.
Listslistenumeratelist
Lists are important in lots of contexts,
and the desire to nest lists has led to some very,
very complex discussions on the email lists.
We'll keep it simple here.
There are a variety of places that lists can live,
but a good mental model is that a list must be put inside an element
that's similar to p.
So for example,
you can't put your list directly inside a subsection,
but instead must wrap the list in a p.
There are two common types of lists:
ordered and unordered.
listorderedordered list (There's also the description list.
See for more information.) As in HTML,
an ordered list is produced with ol and an unordered list with ul.
The items of your list are structured inside li
tags. The example in shows that these li tags can
contain a paragraph in a p tag but you do not need
to. If you're just putting a sentence or two inside your
li, no p is required. However, if you also
want to put an image or more complicated items inside the
li, then the li must be structured with
p by placing loose text inside one or more p.puse inside li
An ordered listlistordered code forordered list code for code forordered listol code for code forol
The code in produces the following output:
markerof ol
You can use the marker attributeAs illustrated here, an attribute is something that appears between the < and > of the opening tag. The convention in XML usage is to prefix an attribute name with @ when referring to the attribute outside of the tag. You do not use the @ in the tag itself. on the ol tag to change the default markers.
For instance,
if the opening tag for the list above were ol marker="A",
then the list items would be marked as A. and B. Sensible things to use with marker are i, I, A, a, and 1.
Nesting of lists is possible,
and there are sensible default markers.
listnumberinglistmarkingnumberinglist items
An unordered listlistunordered code forunordered list code for code forunordered listul code for code forul
The code in produces the following output:
listunorderedunordered listitemizeunordered listbulleted listunordered list
colsof a list
You can also use the cols attribute to split a list
(ordered or unordered)
across multiple columns if the screen/page is suitably wide.
listdisplayed in columns
The value of this attribute must be an integer between 2 and 6
(inclusive).
The tags theorem, algorithm, claim, corollary, fact, identity, lemma,
and proposition have the same structure in ,
so we will just illustrate theorem here.
theoremalgorithmtheorem-like elementsclaimtheorem-like elementscorollarytheorem-like elementsfacttheorem-like elementsidentitytheorem-like elementslemmatheorem-like elementspropositiontheorem-like elements
A theoremtheorem code for code fortheorem-like elements (algorithm, claim, corollary, fact, identity, lemma, proposition, theorem)theorem-like elements (algorithm, claim, corollary, fact, identity, lemma, proposition, theorem) code forproof code for code forproof (of theorem-like element)statementof theorem-like elements
The code in produces the following output:
The title is optional and typically used for theorems with names. To give an attribution, one can use the optional creator tag.
theoremtitletitleof theorem-like elementscreatorof theorem-like elements
Cross references (see ) can be made using the name or the number, depending on how the author codes them.
prooftheorem-like elements (algorithm, claim, corollary, fact, identity, lemma, proposition, theorem)proofs of
A theorem-like element can contain multiple proof elements. In such instances, it would be useful to use the title tag within your proof. By default, a proof is hidden in a knowl when using HTML output. Click the Proof. heading to expand the proof. Click it again to hide the proof. A proof can also be divided into cases, each of which can have a title.caseof proof Although it has not always been so, you can author a proof all on its own within a division. The structure of such a detached proof is the same as for a proof contained within a theorem-like element.proofdetachedproofoutside of theorem-like elementsproof, detacheddetached proof
You can use definition essentially like theorem,
but a definition does not have a proof.
definition
You are encouraged to use the term tag to set off the word being defined.
termin a definition
If you wish to include a list of notation as an appendix as your document,
you might also add a notation tag such as shown in . A notation tag has no effect unless you have an appendix with a notation-list in it.
notation (to be included in a notation list)notation-listlistof notation
A definition with notationdefinition code for code fordefinitionnotation (to be included in a notation list) code for
The code in produces the following output:
Example-Like Elementsexample-like elements (example, problem, question)exampleexampleexample-like elementsproblemexample-like elementsproblemas homeworkexercisequestionexample-like elements
provides three closely-related tags for things that are examples or similar.
They are example, problem,
and question.
They all have the same syntax.
The title element is optional, but encouraged as
discussed in .
example-like elements (example, problem, question)titletitleof example-like elements
You may either use a freeform example, as shown in ,
exampleunstructured
or an example structured with a statement and zero or more hints, answers, and solutions
(in that order).
example-like elements (example, problem, question)hintexample-like elements (example, problem, question)answerexample-like elements (example, problem, question)solutionhintto example-like elementsanswerto example-like elementssolutionto example-like elements
This is illustrated in .
examplestructured
Note that for HTML output,
if your example has a solution,
the solution will be hidden in a knowl by default. See for information on changing this behavior.
A simple exampleexample-like elements (example, problem, question)unstructured code forexampleunstructured code for code forexampleunstructured code forexample-like elements (example, problem, question)
The code in produces the following output:
If you are reading this in HTML with the default
processing options applied, the example above will be
knowled. This is the default only so that
authors know that knowls exist. See for information on changing this behavior.
A structured exampleexamplestructured code for code forexamplestructured code forexample-like elements (example, problem, question)example-like elements (example, problem, question)structured code for
The code in produces the following output:
Axiom-Like Elementsaxiom-like elements (assumption, axiom, conjecture, heuristic, hypothesis, principle)
provides several tags that fall into the category of an axiom.
They are assumption, axiom, conjecture, heuristic, hypothesis, and principle.
The content of these tags is very simple.
They allow an optional title, an optional creator,
optional idx tags,
and then a statement much like a theorem does.
axiomassumptionaxiom-like elementsconjectureaxiom-like elementsheuristicaxiom-like elementshypothesisaxiom-like elementsprincipleaxiom-like elementstitleof axiom-like elementsstatementof axiom-like elementscreatorof axiom-like elements
An axiomaxiom code for code foraxiom-like elements (assumption, axiom, conjecture, heuristic, hypothesis, principle)axiom-like elements (assumption, axiom, conjecture, heuristic, hypothesis, principle) code for
The code in produces the following output:
Remark-Like Elementsremark-like elements (convention, insight, note, observation, remark, warning)
provides several tags that fall into the general category of a remark.
They are convention, insight, note, observation, remark,
and warning.
The content of these elements is similar to what is allowed inside
the statement of a theorem-like element.
They allow an optional title,
optional idx tags,
and then a mixture of p, blockquote,
and pre.
remarkconventionremark-like elementsinsightremark-like elementsnoteremark-like elementsobservationremark-like elementswarningremark-like elementstitleof remark-like elements
A remarkremark code for code forremark-like elements (convention, insight, note, observation, remark, warning)remark-like elements (convention, insight, note, observation, remark, warning) code for
The code in produces the following output:
Project-Like Elementsproject-like elements (activity, exploration, investigation, project)
There are four tags that considers to be project-like.
They are activity, exploration, investigation, project. We will focus on project here.
These four tags allow a general, freeform structure similar to the unstructured example in ;
a structure analogous to that of the structured example in ;
and the highly-structured introduction, task, conclusion model shown in .
examplecomparison to project-like elementsprojectactivityproject-like elementsexplorationproject-like elementsinvestigationproject-like elements
A projectproject code for code forproject-like elements
(activity, exploration, investigation, project)conclusionof a project-like elementintroductionof a project-like elementproject-like elements (activity, exploration, investigation, project) code for
The code in produces the following output:
Exercisesexercise
provides a number of ways of collecting things
that might be thought of as exercises for students to do. Some
might be used for a student to check their ability to perform a
skill. Others might be to check the understanding of what a
student has just read, perhaps submitting responses to an
instructor before class so that plans for in-class time can be
adjusted. Another way of collecting exercises might be as a
worksheet intended to be worked on during class.
exercise structure
An exercise can be rather freeform, containing
elements such as p, figure,
image, etc. However, an author will typically think
about an exercise as having an associated correct answer,
perhaps with a hint or a detailed solution. has
tags to support that sort of content, but it does require that
your exercise be structured. This is nearly
identical to the structure of a project-like element.
An exerciseexercise code forinline exercise code for code forexerciseinline code forexercise
The code in produces the following output:
Note that you can have multiple hint, answer,
and solution elements.
hintto exerciseanswerto exercisesolutionto exerciseexerciseanswerexercisehintexercisesolution
But you must put all the hints first,
then all the answers, and then all the solutions.
There are a variety of options for determining where hints,
answers, and solutions appear
(at all).
Check for information about stringparams.
An exercise can also have a more complicated
structure that assigns a sequence of steps for a student to
complete. provides the same task tag
that is used in project-like elements to give structure to
such an exercise.
An exercise with tasksexercisewith task code for code forexercisewith task
The code in produces the following output:
Inline exercisesexerciseinlineinline exercise
You can put an exercise in the middle of a division,
intermixed between theorems and paragraphs and figures.
In this case, it is labeled as a Checkpoint.
See for information on how to use something different than
Checkpoint as the name for these.
To distinguish these exercises from
exercises that are contained in the specialized
divisions designed to collect exercises that will
be discussed in the next section, we refer to these as
inline exercises.
checkpointinline exerciseinline exercise
Divisions of exercises
exercises
division
You can also put several exercises as part of an
exercises element within a division, which is the
typical way for creating a collection of exercises together
at the end of a division such as a chapter or section. The
content of an exercises division is rather
limited. It can begin with an introduction
(perhaps a set of common instructions), followed by a
mixture of exercise and exercisegroup
(see )
elements, followed by an optional conclusion. The
sample code in illustrates this structure, which is
rendered later as Exercises.
subexercisesexercisesgrouping
An alternative structure for an exercises
division is to use a sequence of subsexercises
elements, optionally preceded by an introduction
and followed by a conclusion. The content of a
subexercises element is identical to
what was described above for an exercises
element, but we emphasize that a strong rationale for using
subexercises (as opposed to
exercisegroup) is that a subexercises
element can begin with a title, providing a clear
way of organizing the exercises for the reader.
exercisegroupexercisegroupexercisesgrouping
Sometimes you have several exercises that should all have a common set of instructions,
which is when you will use the exercisegroup tag.
exercisegroupinstructions
An exercisegroup can only be used as part of an
exercises element or a subexercises element, however!
The portion of this section headed as
Exercises
is produced using the code in .
Using an exercisegroup.exercisegroup code for code forexercisegroup
colsof an exercise group
If you want the contents of an exercisegroup to be put in multiple columns,
you can add a cols attribute to the exercisegroup with value (for example) 3.
The integer value of cols must be between 2 and 6
(inclusive).
exercisegroupcolumnscolumnof an exercise group
The code in Listing
produces the output seen in Exercises.
Reading questions
Another specialized division, reading-questions,
can be used to house exercises designed to test
or guide a reader's comprehension of the material in that
division. The structure of a reading-questions
element is similar to an exercises element, but
without the grouping options of subexercises and
exercisegroup. The portion of this section headed as
is produced using the code in .
Structure of reading-questions.reading-questions code for code forreading-questions Exercises exerciseexercise
It is possible to embed exercises into a document. It is possible to
build an HTML version in which readers can answer these exercises and find out if
their answer is correct or incorrect. And if the book is hosted by Runestone, the reader's
success can be recorded and incorporated into grades. Because content belongs
inside an exercise, you can include exercises in any of the elements
that can contain an exercise such as a worksheet and
reading-questions. There's some configuration required to use . Please
see and for more details. There
is a Sample Chapter available elsewhere, with copious
examples and output in multiple formats.
Worksheetsworksheet
page layoutin
worksheet
A worksheet is a specialized division that can be a
child of most divisions and can contain most
tags. The general idea, however, would be to assemble a sequence
of exercises or project-like elements with some
interspersed p, figure, and
sidebyside. One of the few times that
allows you to manipulate page layout in terms of giving blank
space and specifying page breaks is in the worksheet
tag. A worksheet is also the only place you can put
an exercise inside a sidebyside. The
sample code in is not meant to demonstrate everything you can do, but rather
to give you a skeleton to start exploring. The rendered output
from the listing appears immediately after it.
Structure of worksheet.worksheet code for code forworksheetRenaming Elementsrenameporismrenaming another tag to obtain
rename code for code forrenamedocinfo
The preceding sections have provided a lengthy list of tags that behave interchangeably.
Perhaps you don't like one of their names.
For instance, suppose your project will not involve any algorithms, but you need another theorem-like tag whose name you would like to have rendered as Porism.
To do this, you need to add a rename element to the docinfo element of your code.
For our example,
the necessary code would be <rename element="algorithm">Porism</rename>.
A rename element generates a global change;
it is not possible to rename a single instance of an element or to define your own tags (without writing your own XSLT code.
We have included this rename code in this guide's docinfo,
and as such,
we can do the following.
A porism generated using algorithm and rename
The code in produces the following output:
A special note about renaming
exercisesinline exerciserenamingexerciserenamingrenamefor exercise
Because of the range of divisions that can contain an
exercise element with different names displayed (such
as Checkpoint for an inline exercise), one cannot simply
use element with value exercise in a rename
element. The value of element to rename an
exercise is as follows:
divisionalexercise for an exercise
inside exercises, subexercises, or
exercisegroup with default Exercise
inlineexercise for an inline exerise with default
Checkpoint
worksheetexercise for an exercise
contained in a worksheet with default Worksheet
Exercise
readingquestion for an exercise
contained in a reading-questions with default
Reading Question
Figures and Friendsimageimage
figurewithout captionimageimagewithout caption
It is possible to include an image without a number or caption, centered on its own line by using image.
graphics formatsSVG (Scalable Vector Graphics) formatPDF formatas imagePNG image format
The gold standard for graphics to include in documents is, well,
complicated.
If you're only working with HTML or EPUB output
then SVG is what you want.
If you're producing PDF by using ,
then you'll also want PDF graphics files. If you
plan to produce an ebook that can be read on Kindle devices,
you will need PNG graphics files.
Fortunately,
it's not too hard to convert between these formats on the command line.
Since conversion is a rare task,
it may be easiest to do in a cloud environment like CoCalc.
In order to produce HTML, PDF,
and Kindle, you will need to always have three files
available. We recommend that you consistently pick
PDF or SVG to be the one that you
edit and then convert to the other format. Otherwise, you
might have parabola.svg and parabola.pdf and
parabola.png contain three different graphics, and then
the different output formats for your project will have different images in them!
PNG and JPEG are supported by modern
web browsers, , and Kindle,
so that's a good option when vector graphic formats like SVG and PDF are not available or appropriate.
Code to include an image without a number or captionimage code for code forimagedescriptionof image
widthof image
Use of width on an image must be a percentage, and for an image as in this example, the percentage is of the current line width. The code in produces the following output:
descriptionfor
accessibilityaccessibilityThe example in also illustrates the use of description. We admit to not using a description for most of the other images in this Guide, but doing so is strongly recommended for accessibility reasons. A reader who is unable to see the visual element of your book can use assistive technology to have the description read to them. As much as is practical, authors should endeavor to include descriptions for their images.
file extensionsfor graphicsextensionsfile extensionsgraphicsfile formatsimagefile formats
Note that the path to the image file does not include the file extension.
When you process your source,
the output format you're generating will determine what gets added on so that the right file is used.
If your browser says it can't find the image file,
make sure that the SVG file is in the correct location relative to the HTML file.
Here, we need a directory called images that lives next to our HTML files with a file called small-graph.svg inside that directory.
If using a PNG or JPEG file across
HTML, /PDF,
EPUB, and Kindle,
put the extension in the filename so that the file is used for
all. Many authors have an images directory that lives in the same directory as their source files and then produce the .tex file or HTML files in another directory. When doing so, you need to copy the images directory to be in the same directory as the .tex file before generating a PDF or in the same directory as your many .html files before viewing your HTML files in a web browser.
figurefigure
To provide a number and caption for an image,
the figure element is used. Notice that the
caption is authored at the beginning of
the figure but is displayed below the
figure's content.
Code to include a figurefigure code for code forfigurecaptionof figureimageinside figure code for code forimage (inside figure)
The code in produces the following output:
sidebysidesidebysidepage layout
One of the more complex pieces of code in ,
by most accounts, is that used for positioning objects
(frequently image and tabular, but also p)
next to each other.
If you've tried to do this in , you know that it can be challenging on a good day.
Fortunately,
does the heavy lifting for us.
We include two examples here. The first places the
sidebyside directly in the current division and
places a figure with a caption inside the
sidebyside. The second puts the
sidebyside inside figure and then uses
an image not contained in a figure to
include the graphic. It's possible to do all sorts of nesting
and get nice subnumbering automatically. More information on
the capabilities of sidebyside can be found in
.
Code to place things side by sidesidebyside code for code forsidebysidefigureinside sidebysidepinside sidebysidesidebysidecontaining figuresidebysidecontaining p
The code in produces the following output:
A few more bells and whistles for sidebysidesidebyside code for code forsidebysidefigurecontaining sidebysidesidebysideinside figure
The code in produces the following output:
side-by-side groupside-by-side groupsbsgroup
For a layout with multiple rows (but the same widths for each row, provides the side-by-side group using sbsgroup.
Use of sbsgroupsbsgroup code for code forsbsgroup
The code in produces the following output:
-generated imagesusing to generate images
TikZpretext scriptgraphics formatsgenerating from source makes it straightforward to embed code that produces images
(such as TikZ)
into your source files. The -CLI basically just dumps your code out to your file so that it compiles nicely.
However, for HTML display,
you will need SVG graphic files.
This is where the pretext/pretext script comes in.
Running the pretext/pretext script frequently requires patience,
particularly on Windows,
so settle in with an experienced user before attempting the steps in this section. See for complete details.
latex-image-preambledocinfoTikZloading in latex-image-preamble
Our example here just illustrates using TikZ to make a simple figure
(the Hasse diagram of a poset),
but lots of other graphics packages can be used.
One step required is to put the following three lines in the docinfo tag of your main file. latex-image-preamble is used to set up the preamble that should be used for making SVG images from your source.
Macros that you wish to use more broadly should be put inside macros inside docinfo.
How to use latex-image to invoke TikZlatex-image code for code forlatex-imageTikZinside latex-image
The code in produces the following output:
Well, that's not 100% true for HTML.
If you just run pretext build web,
your terminal will display a few warnings about not generating assets such as images.
To generate the assets,
we have to use the -g flag.
To generate the assets before building, on the command line we run the following command
(on a single line). (Omitting the web target will, by default, use the first target)
in the project.ptx file.)
pretext build web -g
Tablestable
After sidebyside,
getting tables to lay out consistently between HTML and PDF is probably the second biggest headache that takes care of for us behind the scenes.
Considerable effort has been taken in order to fix some of the challenges inherent to working with the tabular environment in , and so if you author in ,
you should be able to forget the hacks you had to learn to make nice tables in .
tablenot for visual layouttablenot for visual layoutside-by-side groupTables should only be used to display data. Too often in other authoring systems, tables are used as a crutch to facilitate the visual layout of a page.
Do not do that when authoring .
A good question to ask yourself before using a tabular is
Do the xy-coordinates of a cell have semantic meaning in terms of my data?
If the answer is yes,
then make an array of numbers with tabular.
If not, find a more suitable tag.
(Perhaps sidebyside and/or sbsgroup.)
One of the many reasons for this is that screen readers used by individuals with visual impairments read tables in a very specific way that assumes the xy-coordinates of each cell are contributing to the meaning.
Individuals who use screen readers will find a document that uses tables to do something other than present tabular data very confusing and frustrating.
Similar to , provides a table tag and a tabular tag. The tabular tag is used for producing the array of data, while the table tag provides the number and title.
Code to produce a tabletable code for code fortabletitleof tablecaptionof tabletitletabletitletabular code for code fortabularrowof a tablecellof a tableentry of a tablecell
The code in produces the following output:
tablewithout title or captiontabulartabularwithout title or caption
Much like image, you can use tabular on its own to lay out a table of data, centered on a line, between (for instance) a couple of p elements. In many cases, the sort of data layout generated using tabular functions more as a figure than a table according to the definitions in the Chicago Manual of Style (CMOS), which attempts to follow in the absence of other guiding principles. The quote below from David Farmer on the pretext-dev Google Group provides guidance on deciding if your tabular should be contained in figure or table.
tabledeciding when to use instead of figure
There is an entire chapter on tables in CMOS, so I'll try to
summarize how those are distinct from many uses of grids of
numbers in PreTeXt. Some approximate quotes about tables from CMOS:
facts that are easy to scan and compare
a reader unfamiliar with the material should still be able to make
sense of the table
tables are numbered and have titles (and not captions)
My take-away is that a CMOS table is a supplement to what is written
in the text and at any one time only a small amount of the table is
relevant. Rephrasing: a CMOS table is not intended to be integrated
with the narrative of the book, and the reader is not supposed to
pore over a large fraction of the table when it is first encountered.
David Farmer
In reality, the tabular in really should be contained in figure (and then the title must become a caption). Perhaps someday we will come up with an example tabular that meets the CMOS definition of a table to use instead.
columnof a table
See for more information about how to make more complicated tables including formatting columns and vertical and horizontal rules.
inputoutput
Including computational SageMath cells is pretty easy with sage, input,
and output.
The last tag is useful for producing formats intended for
offline reading so that they can include the result of the code's execution.
SageMath cellsage code for code forsage
The code in produces the following output:
SageMathCells on a single HTML page are automatically linked so that a cell can use the results of computations done in earlier cells on the same page.
sageplot
Sometimes you don't want to provide an interactive SageMath environment in the middle of your book
(or a chunk of code)
but you would like to produce a figure to include in your project by using SageMath.
The cleanest way to do this his to put the SageMath code right in your project and use the pretext script
that we discussed in to produce the image files required for your chosen output formats.
This is accomplished by using sageplot with the script.
(The pretext script is fully discussed in , but at least
see the aside in about the additional packages that must be installed and configured to use it properly.)
sageplot to produce a graphicsageplot code for code forsageplot
pretext script
We need to run the pretext script to actually make the image files required.
If you want to make both HTML and PDF via , you'll need to run it twice.
The first command below (again,
enter on one line) makes the SVG to use on the web,
and the second makes what you need for .
There is an all option that can be passed after -f instead of svg or pdf,
but that is more likely to raise errors because some source code cannot produce certain output formats.
It's best to stay away from error-producing steps until you're comfortable with debugging your system.
The topics in this section are not terribly structural or critical,
but they fall in the category of
little things you want to do right from the outset.
\labelxml:idrefxml:id provides a robust set of features for internal cross referencing.
If you're familiar with ,
the equivalent of \label is to use an xml:id.
For example,
the opening tag for this section is section xml:id="basics-s-xref".
Instead of the \ref used by ,
we use xref in .
So we can type xref ref="basics-s-xref" to create a reference to this subsection:
.
There are lots of options to control what text and number appear when you use xref.
The default is text with value type-global,
which produces something like Subsection 3.3 or Theorem 3.1.4.
The type is Subsection or Theorem,
and the global number is 3.3 or 3.1.4. (Global is in contrast to local,
which would be just 3 or 4, respectively,
for these examples.)
goes into greater detail about how to change settings for how cross references appear,
which you can do for your entire document as well as for individual cross references that require different treatment.
External linksexternal linklinkexternalhyperlinkscross referencehyperlinksexternal link
urlhref
If you want to provide a link to a resource outside of your project,
you will want the url tag.
The code
<url href="https://pretextbook.org" visual="pretextbook.org">PreTeXt</url>
produces PreTeXt.
Note that in a print PDF version, a trailing parenthetical with the content of visual is automatically created.
Extensive details are provided in .
Footnotes and asidesfootnotefootnotelongasidefn
Footnotes are not too hard,
just use fn,
but note that for the time being,
what can go inside a footnote is very, very restricted.
This is a sample footnote, just so you can see how one looks.
For instance,
you can't put a p (and thus you can't put lists) inside a footnote.
Also, no displayed math via md.
There's a lot of care being taken because of the prospect of footnotes inside footnotes inside footnotes.
footnoterestrictions
Because of the restrictions on footnotes,
it is important to keep them short.
A good alternative for longer things that are somewhat digressional is the aside,
aside
which comes in three flavors: aside, biographical, historical.
historicalasidebiographicalasidemargin noteaside
Each of these allows an optional title and then a variety of tags such as p, figure,
and sidebyside (and many more).
A sample asideaside code for code foraside
The code in produces the aside A Sample Aside.
A less contrived example of an aside can be found in .
Index entriesindex entriesindex entries code foridxsee reference in indexsee
hsubheadings (in index) code forindex entries code foridx does a good job of supporting index generation.
You still need to tag everything that should get an index entry by hand,
but then the index is produced automatically.
For a simple index entry for the word group,
you just use <idx>group</idx>.
If you need an index entry involving subheadings,
such as normal under subgroup,
use <idx><h>subgroup</h><h>normal</h></idx>.
seeseealsocross referencein index
It is also possible to use see
and see also entries for indices.
For instance, in ,
we use
<idx><h>font</h><see>formatting</see></idx> to create an index entry for font
that instructs the reader to see formatting.
A see also can be created using the seealso tag instead of see.
sortbysorted index entriesalphabetized index entries
If the index entry is in danger of being alphabetized incorrectly, you can specify how it should be sorted with the sortby attribute.
For example, to give an index entry to \Sigma in the s section, you would use <idx sortby="sigma"><m>\Sigma</m></idx>. Note that if the index entry has h tags, the sortby attribute should go there, not on idx.
If you generate PDF output from ,
the index is automatically generated.
quotation marksinglequotation markdoublequotationsinlinequotationslongblockquote
To ensure that quotation marks are properly typeset,
it is important to use the correct code.
To set something off in double quotes,
use the q tag around what should appear in quotes.
It will supply both the opening and closing quotation marks, as in:
This is a quotation. If you need single quotes,
use sq.
Because the content of q and sq is quite restricted,
you may find yourself needing to explicitly access the left and right single and double quotation marks.
They are, quite sensibly, lq, rq, lsq,
and rsq.
Longer quotes are best set off using blockquote
A sample blockquoteblockquote code for code forblockquote
The code in produces the quotation below.
Modular Source
Once a project gets big,
you may find yourself wishing to break your source into multiple files.
This is well documented in
, so we refer you there for more details.
Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim id est laborum.
statementof an exerciseexercisestatement
The statement is mandatory when any of
hint, answer, or solution
is included as a child of exercise,
otherwise it may be omitted.
hintof an exerciseexercisehint
Optional.
Just an suggestion of what to try.
answerof an exerciseexerciseanswer
Optional.
Just the final answer.
solutionof an exerciseexercisesolution
Optional.
All the gory details.
First exercise.
statementof an exerciseexercisestatement
You can add all the usual bells and whistles after,
but we'll keep it short here.
(The statement may be omitted if none of
hint, answer, or solution
are present as a child of the exercise.)
Second exercise.
The statement for this exercise is necessary because we
have included at least one of
hint, answer, or solution
(namely, hint).
Third exercise.
(No statement necessary here because no
hint, answer, or solution.)
This is a new piece of terminology.
Here is a word we have chosen to emphasize.
This is an alert to the reader! This is a piece of
code typeset in a different font.
Small graph with the caption only associated to the
image.
We can put a paragraph here.
Yes, a paragraph.
Isn't this the most exciting paragraph that you've ever seen?
It goes on and on and on and on and on and on.
We want to put enough here to make it wrap, really, is all.
Let's hope that this is enough.
A graphic next to a paragraph of
text with the caption assigned to both.
We can put a paragraph here.
Yes, a paragraph.
Isn't this the most exciting paragraph that you've ever seen?
It goes on and on and on and on and on and on.
We want to put enough here to make it wrap, really, is all.
Let's hope that this is enough.
Indentation of XSL, and indentation of Python, is four spaces per level of indentation. Please do not be stubborn and suggest that you should be allowed to behave differently. With many contributors it is more important that every developer does it the same, than for one developer to suggest that their personal preference is better. Oh, and never tabs (see ).
Whitespace
When a change has a lot of whitespace changes, or trivial re-formatting, please isolate those on a separate commit. Then suggest to the committer that the full 40-character hash of the commit (once finalized) be added to the .git-blame-ignore-revs file to keep git blame functional. To learn more, see Rob Allen's post, and .
================================================
FILE: doc/guide/developer/coding.xml
================================================
Coding ConventionsAuthor and Publisher Input
When an author or publisher provides input to regulate some change in how their content is realized follow these procedures.
String parameters (which are discouraged anyway) should default to an empty string initially when defined. For technical reasons, this makes them easier to deprecate later.
Input should produce a global variable, whose possible values are known exactly. This variable should be set in one location, with other similar variables, and then it should be used later. There should be no need to further error-check this variable later. In other words, do not mix error-checking input and employment of that inputrigorously separate them (like separating content from presentation!).
Use a xsl:choose inside a xsl:variable that first parrots legitimate input. Next check for attempts to set the input to something invalid. Use xsl:message to report:
the name of the input being checked
a description of valid values
, not followed by the invalid value supplied (via xsl:value-of typically)
Using the default value, followed by that value
Then don't forget to actually set the default value, either due to no input, or erroneous input.
Done right, this variable will usually meet the requirements above.
If input is binary, have the variable just described take on one of two values. Only. Then construct a new boolean variable based on these two strings. Name the variable with a b- prefix. This will be more reliable to use later.
Run-Time Messages
XSL provides a xsl:message element, which writes to the console (the stderr stream really, I believe). This makes it useful for debugging (like a print statement in another language). A mix of text, xsl:apply-templates, and xsl:value-of works well. Include delimiters (colons perhaps) so you don't get fooled by unexpected empty strings that are part of your problem anyway.
But our point here is to discuss messages broadcast to an author or publisher.
Use xsl:message to communicate with authors and publishers as described above in while negotiating their input used to control their content.
Otherwise, during actual processing, use xsl:messageonly when there is the potential for a real disaster in the output, such as a file that will not compile at all, meaning more than simple recoverable errors.
Do not duplicate parent-child relationships that are expressed in the schema. There are good validation tools for that job.
Consider using our auxiliary validation-plus stylesheet for detecting more complicated relationships that the schema cannot, or does not, detect.
See the advice above () about checking author and publisher input and providing a safe result so there is no danger of creating broken output and thus less temptation to use xsl:message at all.
Reserve adding terminate="yes" for extreme situations where there is absolutely no hope of recovery. This should be a last resort.
Place terminate="no" (the default) in your code only when some future removal of deprecated code means this message will transition to terminate="yes". Include clear code comments describing the situation.
Prefix messages with
PTX:WARNING: for advisories
PTX:ERROR: for recoverable problems
PTX:FATAL: for case when processing terminates
PTX:BUG: for situations that are unexpected (and problematic)
and align the start of messages in column 14 (so they all line up).
There is a template with mode="location-report" you can use to provide standardized assistance for an author or publisher looking for the place to correct a problem (in lieu of line numbers, which are not available).
Locating Other Nodes
Should you need to locate a node some other place in a document, via some sort of a reference by an identifier, be sure to use the interface provided by the id-lookup-by-name named template. It accepts a string (the value of the identifier in the reference) and returns an xml:id value that can be used with the XSLid() function to return the desired node (as a node-set). Use a pattern such as the following, paying particular attention to the name of the variable supplied to the id() function.
]]>
Documentation
Careful documentation must accompany new features. You cannot leave this task for somebody else to clean-up after you, and writing the documentation is likely to cause you to revisit your code to introduce small improvements or squash bugs.
New language elements are described briefly in the overview at . This should make new authors aware of what elements are available, and maybe have enough instruction to get them started. Then the topics at should have full details. These two sections should link back-and-forth to each other. Examples are welcome, but should be short and succinct. Elaborate examples should be contributed to the Showcase Article.
New options for publishers should be detailed very tersely in the reference section, . This section is organized lexicographically with respect to the XPath expressions describing the entries of the publication file. Then a more careful description, with examples if necessary, should appear in one of the chapters of the publisher part () according to which aspects of a conversion are affected. These two sections should link back-and-forth to each other.
Here are some conventions to follow, which will help authors and publishers have a better experience wandering through the Guide. Please observe them in your own contributions.
The Guide
We usually just say the Guide or in this Guide, with no additional formatting, and just the capital G indicative of a formal title.
Modularization
When an author's source is modularized () we refer to the outermost, or main, file as the top-level file. This is the one file that has the overall pretext element in it.
Git Branches
Reference the primary branch of a git repository as main.
There are a variety of command-line string parameters () for use by developers testing new code or diagnosing problems. As of 2021-02-14 we are collecting their definitions in the pretext-common.xsl stylesheet early on. Search on debug. to find them. Elsewhere the names might be a bit more variable until we get them all rounded up in one place, but usually the name contains debug somewhere. No documentation here, these are not documented (or stable), and only intended for authors as a stop-gap measure before being replaced in function. Read the code for more, while some more permanent versions will be mentioned in this chapter.
Testing Procedures
When developing a new feature or trying to fix a bug, it can be helpful to test a before version of some output format versus a current or after version. Sometimes you can lay the groundwork for a new feature by adding some code which has zero effect, but leaves a place where a small addition enables the feature. Then you can be somewhat confident your additions will also not ruin existing (desirable) behavior. Here are some suggestions for doing this with .
Make a before version before you start. Or do a git stash save to put away uncommitted changes and then make that initial version. Use git stash pop to bring the changes back. You can also temporarily git checkout 1234abcd some commit, and git checkout topic-branch to come back. You can have sample-article.tex.old around to compare with a new and constantly updated sample-article.tex. I routinely remove *.tex between tests, so the *.tex.old version is named so it does not get deleted.
The sample-article.xml document is meant to have one of most everything and lots of extreme examples. If your changes affect chapters, and other aspects of a book, then the sample-book.xml document can also be used.
Be careful about adding new content since you can get a lot of automatically-generated id's that change, making it hard to see real changes. By managing location (early in a list of commits) and building at specific commits you can test new code that needs new sample uses.
output is one big file. Use the debug.chunk string parameter, set to 0 to get one big HTML file.
Use the debug.datedfiles string parameter set to no so that file headers (knowls!) do not all have spurious changes.
git diff sample-article.tex.old sample-article.tex works well, and oftentimes it works even better with --word-diff. You really want your test output off in some scratch directory. If not, be careful, and you may need the --no-index option so you are not fooled by no apparent changes. (Those options need a double-dash to lead, they look like one right now.)
Having <today/> and <timeofday/> in your test document you can be sure there is always at least one or two changes, and prevent some confusion due to mistakes.
When testing HTML output, especially for chunking or knowls, putting two versions in different parallel directories will allow git to compare the entire directories with git diff /tmp/before /tmp/after.
Every number is hard-coded in HTML output, so changes to numbering are best tested there. The conversion may react differently (a mix of hard-coded and automatically-generated numbers), so should also be tested.
It can be very surprising how many subtle bugs can be revealed by very small, or very few, changes discovered by these procedures.
================================================
FILE: doc/guide/developer/git.xml
================================================
GitGetting Started
Todo: preliminary list as of 2019-04-26:
Install git.
Learn to use git at command-line, front-ends will ruin your life.
GitHub is not git, but we use it to advantage. Explain the difference.
Point to Git for Authors.
Commit Messages
Commit messages are a critical tool when locating and reviewing changes to the project. In a way, they are like an index of a book. We take great care to have useful and concise commit messages, and to this end, we are likely to edit yours. But you can help by doing some simple things, so we do not have to.
Begin with a capital letter.
Do not end with a period.
Do not repeat information available by examining the commit itself. Bad: Changes in foo.xsl
No longer than roughly 60 to 70 characters, and never onto multiple lines.
You can find lots of advice about phrasing commit messages with action words, or in ways that describe how the code will be different. These make for good reading, but we do not adhere slavishly to any one formulation.
For whatever reason, we isolate and prefix messages with the name of a relevant conversion such as HTML:, or other areas, such as Guide: or Schema:. Scroll the list of commit messages to see the range.
For pull requests we will append (PR #nnnn). (This provides a permanent record somewhat independent of GitHub, and GitHub will utilize this number.)
Whitespacewhitespacein code
Whitespace refers to those pesky characters that you really cannot see visually, but which are definitely (different) bytes in your source code. Spaces, non-breaking spaces, tabs, newlines (carriage return? Enter?). Here is the problem. Somebody else left a blank space at the end of a line mid-sentence, perhaps because they manually added a newline there to make a line shorter and more readable (especially if it is code). Now you open that file with your editor, which is set to strip trailing whitespace from lines. Maybe you make an edit, realize it was not what you needed and remove the edit. The rest of your work is off in some other file. But now the original file has a single one-character deletion, and that will be carried forever in the git history as a change you made to the work of the previous manual-line-breaker.
Solution: the original space introduced at the end of the line in mid-sentence should never have been part of a commit, and should never have been merged in the first place. The fault is really not yours, and having your editor strip trailing whitespace is probably a good thing. But if you find these sorts of mistakes, they should be on a commit of their own, clearly labeled as fixing whitespace (see ). But do not be the person who introduces the spurious whitespace in the first place! We will likely ask you to clean it up before your pull request is merged.
Whether or not a newline is the last character of a file seems to be a common correction that editors make routinely. Let us say that a newline should be there, so feel free to add such newlines (on its own commit).
When I do git diff at the command-line, extraneous whitespace (trailing characters, blank lines that are really not at all blank) are shown as bright red rectangles. Can't miss 'em. Find a similar tool that works for you. Or grep with a pattern like $ (that's a space and a dollar-sign.) And learn to configure your editor to do the right thing routinely (and no more).
Tabswhitespacetabs
A tab is the worst sort of whitespace! (See .) There should never ever be any tabs present in any contribution to . The problem: the width of a tab is different for each person who opens a file. Two spaces, four spaces, eight spaces, you name it. So if indentation is accomplished with a mix of tabs and spaces, there is a good chance it might look right to you, but looks wrong to many other developers. I hit the tab key on my keyboard all the time. But my editor is set to supply four spaces as a result. See if your editor will behave similarly.
Reviewing Pull Requests
A pull request (PR) is a way that developers suggest and contribute new code to a git repository. The next section describes how to make one, and might be interesting reading after you finish this section (but not now!). Here we will describe how you can test out a pull request, in order to help with evaluation, or if you are simply curious.
You will need a clone of the repository where the pull request resides. If you have a fork (see next section) that is fine, too. We will illustrate with a real PR, GitHub #2029.
At a command-line, with a working directory at the top-level of the pretext repository, issuegit fetch origin pull/2096/head:andrew-pointer-css-2096
git is the command-line git executable.
fetch means we are going to grab a collection of commits from somewhere. This is not a pull and that will be incorrect here right now.
origin is the somewhere, a repository that has the commits we want. This name translates to the repository hosted on GitHub, which is where you obtained your clone or fork. This is known as a remote, and you can have several with different names that you have assigned to them. git remote -vv will list all your remotes for you.
pull/2096/head locates all the commits for PR #2096. Don't let the use of pull fool you.
andrew-pointer-css-2096 is a pointer, internal to my clone, that helps me identify the PR, especially when I have many in play at the same time. In git it is known as a branch. Andrew wrote it, I have a reminder of the topic, and I find it helpful to have the actual identifying number around. You are free to do anything you like here for a name of the branchwhatever works for you.
Now you have one, or more, commits on your system, and a name that helps you locate them as a branch. Presuming you are on your main branch (master here, but possibly main) you will want to switch to the branch with these new commits as a putative change to the code for you to experiment with. Easy:
git switch andrew-pointer-css-2096
Now you will want to use the pretext/pretext script () to produce whatever output you want to test or examine. The point is, you now have the proposed modifications available to you for use.
Optional. The PR could be several days old, or maybe it has been weeks or months. So it may be a branch off the state of the code from the past, and the code has moved on and evolved (through accepted pull requests). While you have andrew-pointer-css-2096 as your active branch you can go:
git rebase master
This will move the branch to be a deviation from the most recent version of the code. (I say to myself as I type, git rebase ONTO master.) It is possible this is not what the original author of the PR intended, but for this is rarely an issue. It is also possible that the movement creates contradictions (conflicts). Don't panic if this happens, just go:
git rebase --abort
and it will be like it never happened.
When you are finished, return to the master branch with
git switch master
and then delete the branch with
git branch -d andrew-pointer-css-2096
Aah, git will not let you do that. It is not clear if this might be important work and you really should not be deleting it. git cannot tell if this is something original you just created or something that is just a copy of what is safe and sound on GitHub. So, go:
git branch -D andrew-pointer-css-2096
using the semi-dangerous -D flag. Now your clone is back to its original state.
This is the procedure described on StackOverflow: How can I check out a GitHub pull request with git?. On an open pull request within GitHub you can find command line instructions. These suggest making a (empty) branch in your repository, then doing a pull from the fork belonging to the author of the pull request. This means the second step will be very different every time since it uses the fork and also a branch name devised by the pull request author. Functionally equivalent, but we find it more complicated.
When you learn more about the use of git you will discover there are many additional things you can do to modify and experiment with pull requests. Here we are concentrating on the first step: getting a pull request onto your system so you can employ it.
Creating Pull Requests
Contributions to the code repository are accomplished with a pull requestpull request. The short version is that you have a copy of the repository and you make a collection of changes on your copy. Then you make a request to have your changes pulled into the official (main, canonical) repository. A pull request is a concept independent of GitHub, but one of GitHub's advantages is that it makes a pull request very easy to create and manage.
One-Time Initial Setup
Make an account on GitHub if you do not have one already. A username that bears some correspondence to your real name or favorite email name is helpful.
Log into your (new) account.
Go to the official repository for . Find a button labeled Fork, roughly in the upper-right corner. Click on it. This will make a copy (a fork)fork of the official repository in your GitHub account. This repository is called a fork since you are going to make improvements there and your version will diverge from the official version. The fork will know where it came from.
Install a command-line version of Git on your local computer. Heed the advice above about using front-ends.
You are now going to make a local copy of your fork. Think of it as a mirroryou will do your best to keep the copy and the fork in-sync. Git calls this a cloneclone. In your fork (i.e. in your account, find a green button partway down the right side. Clicking on it will bring up a textbox with a URL you can copy. Now at the command-line, execute something similar togit clone https://github.com/mjsmith/pretext.gitYour clone will also know where it came from.
That finishes setup. You can check that all is well by runninggit remote -vvand the response should be something likeorigin https://github.com/mjsmith/pretext.git (fetch)origin https://github.com/mjsmith/pretext.git (push)upstream https://github.com/PreTeXtBook/pretext.git (fetch)upstream https://github.com/PreTeXtBook/pretext.git (push)origin is an alias for the location of the repository you cloned. And upstream is an alias the fork uses to know the location of the official repository.
Preparing Your Changes
The following all happens on your local computer, using your clone, at the command-line.
Create a branch for your work, and switch into it.git checkout -b my-big-improvementThe name you choose will not ever be part of the official repository, but it will be part of the record on GitHub. So you do not have to be too careful, but it should be informative.
Use a text editor to make changes to existing files, or to create and populate new ones. As you save the affected files, you can typegit diffto see the changes to existing files. See the rest of this guide for particulars about the code.
When finished, you will package up your changes as a commit, the fundamental unit of a git repository. Throughout this process (and at any other time), you can typegit statusto see how your repository is changing.
If you have created new files, you need to stage them. You can see these files' status changing if you run git status before and after. To stage a new file,git add xsl/pretext-esoteric-format.xsl
You do exactly the same thing for existing files you have changed. Run git status before and after.git add xsl/pretext-common.xsl xsl/pretext-latex.xsl
Running git status should now show that all affected files (changed, new) are now in the staging area, and no files with changes are left behind. You can preview the commit withgit diff --cachedIf you need to edit some more, go ahead, and be sure to add your new changes into the staging area. Now you are ready to make your commit.git commit -m "Create a new conversion to an esoteric format"
Now git status should show something of a clean slate. You can also rungit show-branchto get a pictorial version of your branch.
Creating the Pull Request
Now you will communicate your changes (on a branch on your local computer) to GitHub as a request for incorporation into the official repository.
First, push your branch to your fork on GitHub. Recall that this repository is known as origin. On your local computer, at the command-line,git push origin my-big-improvement
Now move to your web browser and your fork on GitHub, which now has a copy of the my-big-improvement branch. You should see a prominent message about your new branch, and a green button labeled Compare & pull request. Click on it.
Now you have a screen titled Open a pull request, where you can describe the purpose of the new code. Then click on the green button labeled Create pull request.
That's it. The developers responsible for approving pull requests will be notified automatically and receive your code in a way they can test and review it in their own forks/clones of the repositories. You can see the pull request in action at the appropriate area of the official repository. Pretty slick.
Pull Request Verification
It is often advisable to add an example of any new markup, new situation, or bug-provoking content into the sample article as part of a pull request. Please do so, as appropriate. However, because we do rolling releases, all code gets thoroughly tested. For this reason please put all changes to the sample article, and only changes to the sample article, onto a first commit. Code should then follow on subsequent commits. This makes a big difference in our ability to test quickly and accurately. Thanks. (Ask if you need help rearranging your commits to achieve this, or see .)
Modifications to a Pull Request
To Do: describe how a pull request might iterate to approval/merge.
Cleaning Up
At any time after pushing your branch to your clone you can/should switch to the default branch (dev now, but changing to master later).git checkout dev
Your pull request ends when the lead developers mergemerge your branch into the main branch that everybody uses. The commit will have your name on it, as part of the permanent record. But the commit may have changed slightly between initiating the pull request and its subsequent merge. You will want to remove your original branch from your clone on your local computer.git checkout devgit branch -d my-big-improvementgit branch -D my-big-improvementThe second command will fail, as a safeguard against deleting branches with temporary (but important) work on them. The capital D is a forced deletion so should be used with care! But it is the right thing to do here, since your work has been incorporated into the official repository.
But, of course, you want your new improvement like everybody else. So you are now going to pull it from the official repository into your clone on your local computer. Remember that the official repository is known as upstream.git checkout devgit pull upstream dev
Technically, you could now totally trash your fork (making your clone disconnected), and make a new fork and clone for your next contribution. Instead, you can sync your clone with the fork.git checkout devgit push origin devNow all three repositories (clone, fork, official) look the same and have your contribution. Before your next contribution you will want to pull from upstream into your clone, and then push that into origin (your fork).
Forming Logical Commits
There is an art to making a pull request that is easier to review, and which will be useful to others later (such as when using git bisect to isolate the introduction of a bug). Here are some notes:
Always rebase your sequence of commits onto master before creating a pull request. Any (rare) conflicts should be your responsibility. If we delay in getting to a review, then maybe conflicts are our responsibility.
Make logical commits. Changes to common templates, HTML-specific templates, -specific templates, etc. should all be on separate commits. Contributions to the Guide, and examples for testing in the sample article, should follow (even if testing examples may have been an early commit on your branch during development). Make schema changes last since it will be easier for us to manufacture derived files as an add-on to your work.
Do not put partial work on two disjoint files into one commit, come back later, add a second commit with more work in each file, and call it good. Likely there should be two commitsrelevant code in one file, related code in the other file. This is a general suggestion: a stream-of-consciousness commit history is of no benefit to anybody, even you.
Do not make a mistake (typo, whitespace, logical error) in one commit, and then fix it several commits later as part of the same pull request. If you made a mistake, learn how to make the change/fix so it looks like it never happened. You do not want other developers to think you make mistakes, do you?
Done right, a pull request with no changes will be merged as-is with no changes to the commit hashes. Consider that a goal, and we will congratulate you when it happens the first time (and expect it from then on!)
Alright, those are high expectations. How do you make a well-formed sequence of commits? This is not a git tutorial, but we will make some suggestions. git has what is called a staging area where you can gradually place a collection of changes before making them part of a single commit. The command git commit -a is a bad habit and breaking yourself of it will help you learn to be more flexible about how you package changes into a commit via the staging area. Finally -m is a useful option for making (or changing) a commit message without being thrown into an editor.
If your most recent commit (or only commit!) is lacking you can add new changes into it by adding them to the staging area and using git commit --amend to introduce them into the commit.
git reset HEAD~n will return your files to a state as if you have made no commits (presuming you had n of them in the first place). Your edits will all be available (this is not a hard reset, and forget that we even mentioned such a possibility). Then you can selectively stage portions of your work with tools like git add <file> or git add -p and build up individual logical commits in the staging area. Of course, you do not always need to reset all of your commits on a branch, perhaps only a few will need reworking. Caution: do not reset so many commits that you blow past branch pointers and lose them, such as master.
You can do an interactive rebase with git rebase -i HEAD~n. This unwinds n commits on the current branch, makes a little script for replaying them in the proper order, and throws you into an editor with the script. Exit the editor and the script runs. With that description/process nothing interesting happens. What is interesting is that you can edit the script to affect the replay.
You can rearrange the order of the commits. But this only works if you know that interchanged commits do not build on one another. For example, I often start developing a new feature by designing the markup and making an example in the sample article. But once I am all done, I move it to be later than the code, as an example of how the new code will behave (ansd I do not leave the sample article in a broken state).
Suppose you have ten commits on a branch, and you discover that the third-newest has a small mistake. Correct the mistake and make a throw-away commit with just that correction on it. Now, do an interactive rebase with the newest four commits (you just added one), git rebase -i HEAD~4. Edit the script to place the throwaway commit just after the commit with the mistake, and do not leave it as pick, but edit that action to fix (an f is all you really need). Be sure to remove the line that has the original version of the throwaway commit. Exit your editor. Poof! Three commits and the mistake is corrected. (Do not use the squash action, that accumulates commit messages, which we do not want.)
This is analogous to git --amend except it is needed for the times when you see a change that needs to be made several commits ago.
The git cherry-pick <commit> command allows you to recycle existing commits onto new branches. Suppose your current branch ends up having two very different projects on it. Make a new branch and cherry-pick the commits for one project onto it. Now do an interactive rebase on the original branch and remove those commits from the script. Of course, this assumes you know the two sets of commits are independent of each other.
Here is a different solution to the same problem. Do a git reset of the entire branch, as described above. Build up the first project into a set of commits. Now do git stash save to put all the remaining edits for the second project into the stash temporarily). Switch to master, make a new branch, git stash pop to get all the edits back, and start building up the second branch. Note that this assumes the second project does not build on the first project.
Be bold! But maybe make backups first? You can often abandon things that are not going well. If git rebase master has conflicts you can look around at the files affected, and then you can give up with git rebase --abort. There are other bail-outs for other commands.
The commands git log, git diff, and git status are your friends. It is never a mistake to use them more than necessary.
Blame
The command git blame is simultaneously funny, useful, and powerful. A line of code you do not understand can be traced back to its originating commit. We maintain a list of commits (in .git-blame-ignore-revs) that have no real new code and make just cosmetic changes, so you may want to use this feature. To use:git blame --ignore-revs-file .git-blame-ignore-revs birds.xml You can also make this happen every time with a local configuration change, to wit:git config blame.ignoreRevsFile .git-blame-ignore-revs
We rely heavily on those fluent in other languages to provide translations of terms like Chapter and Example. See for more about this feature. This chapter is meant to help you get started if you would like to contribute to development in this way.
Some notes:
We know it is hard to translate subtleties of one language into another. Do the best you can! Something is better than nothing. And somebody may come along later with an improvement. See the en-US file for explanations, this is the only documentation about each term that gets translated.
Do not copy the documentation from the en-US file into your file. Add comments if you feel your work needs some explanations. Do try to keep the order and organization the same.
When we add new features, sometimes new translations are needed. We appreciate maintainers who regularly come back to add in more. But anybody can hop in and add new translations to an existing file. We try to be careful to have all the missing translations commented-out so it is easy to see what needs work.
Explore the files in xsl/localizations, including the README file, which should provide you enough to get started.
Thanks in advance for continuing the great work that allows us to support readers, authors, and publishers in many parts of the world!
================================================
FILE: doc/guide/developer/pretext-script.xml
================================================
The pretext Scriptpretext script
Note that this entire chapter documents a lower-level tool for producing output from source. Most authors and publishers should be using the -CLI, see .
XSL is a very powerful language for text processing. However, it cannot do everything. The pretext/pretext script is a Swiss Army Knife of sorts to operate on parts of your document and manage processing that requires the application of external programs, such as and Sage. It can also produce entire documents in different output formats. Its principal routines are shared with the -CLI.
Running pretext/pretext
pretext is a Python program (aka script), so you will need to have the Python 3 interpreter on your system (version 3.6 or better expected as of 2021-05-21) which you can run at a command-line (aka terminal, console, command prompt). So your first step is to install Python (see ) or check your installed version and the exact name of your executable (see ).
The pretext script is located in a directory of the distribution also named pretext. So we often refer to it as the pretext/pretext script to avoid confusion with all the other places we say . As a simple check on your ability to run the script, with a suitable path you can run/path/to/pretext/pretext -h to get a summary of the commands. Since the command lives in the pretext directory, you may prefer to change to that directory for your first attempt. On a Unix-like system (Linux, Mac) you may need to go ./pretext since the program is not on your PATH. Thus, depending on your executable name (),
whether the script is in your path, and whether you have made the file executable, you might need to run
python /path/to/pretext/pretext -h
or
python3 /path/to/pretext/pretext -h
Some of the processing may take a long time, or you may experience trouble. There are two switches to enable more verbose output in your terminal or console.pretext -v [command arguments]will provide progress indicators, which may be comforting for long runs, whilepretext -vv [command arguments]will provide progress indicators along with additional technical information that will help you or a fellow author to discern where a problem lies. If you ask for help, please include all of this output, from start to finish, including the command you use and the current directory, and do not assume you know exactly which part is the relevant part.
Overview
Generally, you use the pretext/pretext script by supplying a component (-c) and a format (-f), along with your source as the very last argument. The component may be some limited subset of your document that needs specialized treatment, such as an image described by the Asymptote language (-c asy). Or it could be the entire document (-c doc) being converted to some format as a final output form. So -c asy -f svg would produce Asymptote images in SVG files, while -c all -f latex would produce the entire document as a file.
Example Use
Here is a typical example of using pretext/pretext. You have several (or many!) diagrams and figures in your source, all authored in the TikZ language, and so packaged up within latex-image elements. Your /PDF output looks beautiful, since simply inserts the TikZ code into the right place in the generated *.tex file, and you have done this several times until your figures look just right.
Now you need to generate the SVG versions of your images that will accompany your HTML version of your book and provide nice scalable graphics. This is exactly the sort of chore the pretext/pretext script was designed for. You might run (all on one line)pretext -vv -c latex-image -f svg -d ~/books/aota/images ~/books/aota/animals.xmlHere -c is specifying the component of your book to process, and -f is specifying the format of what is being produced. The -d argument specifies a directory where the output ends up, in this case a collection of SVG files, one per image.
Note that the file, animals.xml in the above example, is the main source file for the document.
The script should be run on the entire document, even if all the images are in one file.
Strategy
Much like the build advice at the end of , the pretext/pretextpretext script collects necessary bits into a system-created temporary directory, does its work, and copies out the desired results. So in the example of the previous section, each chunk of TikZ code is isolated, your macros are copied from docinfo, and a syntactically correct file is produced (one per image). Then pretext calls your system's executable on each of these files to produce a one-page PDF. This is then cropped and converted to an SVG version, which at the end is copied to the location specified in the -d argument.
Some insight into failures can be found in the temporary directory where all this processing happened. (We leave the directory, and its contents, behind for the system to clean-up next time the system is rebooted). Early in the -vv doubly-verbose output, this directory is reported after the string temporary directory:.
Some notes:
If you have modularized your source across more than one XML file, then be sure to provide your top-level file as the final argument to the script, just like you would for an invocation of xsltproc. It is important to understand that your source is one huge source tree and your file-by-file modularization is never respected or recognized in any way. In particular, use of the xinclude mechanism is handled by the script, and you should not apply the script to each of your source files individually. If image production (or some other task) takes a long time, see for a way to have the script restrict its action to only a portion of your project.
Do not place the script, or configuration files, anywhere else (except as recommended for your personal copy of the configuration file). The locations are critically important for locating other files, such as the stylesheets used to isolate parts of your project for processing.
Much of the work of this script happens in the temporary directory described above. We leave a lot of intermediate work behind in this directory. Often, exploring this directory is helpful when debugging problems, or a failure to finish successfully. For an example, see .
Debugging Image Generation
A principal use of the pretext/pretext script is to isolate source code from latex-image sections, package them up as proper *.tex files, run to make cropped PDF versions, and then convert these to other formats such as SVG or PNG.
Much of this activity happens in a temporary directory, and it is similar for Asymptote images and other options of the script. If you use the -vv switch described above, then these temporary directories will be noted in the debugging output requested, and a complete list will be the last line of output. In this case, and if the script encounters an error prior to successful execution, then these directories will be left in place. Looking to see what files end up there, and what those files contain, is often useful in determining the step where the script fails, and maybe even why.
With no chatter requested, or just progress indications (-v) these temporary directories will be cleaned out as the last part of successful execution.
Another option is to ask for the actual source files (*.tex, *.asy, etc.) as the output of a run. This is accomplished with the -f source option when invoking pretext/pretext. If the right packages or macros are not being employed in these files, this is an easy way to get at the source files for inspection and analysis, and is a good first check on problematic execution.
It is possible to design an image whose dimensions exceed the page size of typical output. An example is an image you might use only for some HTML output, such as a slideshow. In this case, construction and conversion to an output format like SVG may fail. There is a string parameter, latex.geometry, that allows you to provide options to the geometry package which influence page size. At a minimum, you need to override the page size, plus it might be best to override the printable area as well. (See for more on string parameters, which will be obsolete in the future.) Here is a sample addition to a call to the pretext script. Note that you cannot put the -x switch last, so it must precede some other option.-x latex.geometry "paperwidth=21in,paperheight=21in,total={20in,20in}"Since the image will ultimately be cropped, there is little harm in making the overall page grossly oversized. However, if the code you are using employs lengths like \linewidth or \textwidth (which we will claim is not a good practice), then your image might be very sensitive to how you set the page geometry. Note that restricting the scope () might be useful if this accommodation is only needed for one image.
Configuring External Helper Programs
Our main processor, xsltprocxsltproc, is not a general-purpose compiler, and does not call external programs. That is the raison d'être of the pretext/pretext script. You will see a configuration file, pretext/pretext.cfg, as part of the distribution. Read the comments at the top of this file, but foremost, realize that you are not meant to edit this file. It is a template, and any changes you make will be overwritten with an original version when you update. Instead, make a copy and place it as user/pretext.cfg within the distribution. For instance, if your distribution is in the pretext directory, then the commandscd /path/to/pretextmkdir usercp pretext/pretext.cfg user/would be appropriate. The script will look for the user copy first, and if not found, then fallback to the generic version.
The entries of this file are the names of executable files that perform certain tasks as part of the script's functions. If it seems that certain helper programs are not being found, you can provide full path names, and that may solve the problem.
Python Prerequisites for the pretext/pretext script
There are several external programs that the script relies on that are again Python packages. See for instructions and a list.
Publication Files, String Parameters
A publication file () can be used to control various options that are independent of the authoring process, or for some conversions may be necessary. And the managed directories scheme requires use of a publication file (see ). Use the -p switch to specify this file, using a path that is relative to your source (or an absolute path if it seems to be ignored).
Sometimes you might have need to pass string parameters to the script, though this will eventually be something an author will rarely do, and is more likely necessary for developers. This is accomplished with the -x flag, followed by a space separated list of (stringparam, value) pairs. Do not use parentheses, just separate with spaces. But note that -x cannot be the last option passed to the script since it makes it hard for the script to see the filename for your source.
For example:pretext -vv -x debug.datedfiles no debug.chunk 0 -f html -c doc -p ~/books/aota/pub.xml -d /tmp/aota-html ~/books/aota/animals.xml
Extra Stylesheet
There are situations when an extraXSL stylesheet is necessary for processing your XML source. A good example is the supported method for styling PDF output, described at . Historically, various customizations have been supported by thin XSL stylesheets (), but as certain themes have become apparent we have moved these customizations to simpler techniques (e.g. publication files, ). Other than styling PDF, you should think carefully about if an additional stylesheet is necessary.
The -X-X (--XSL--XSL) switch is used to specify an extraXSL stylesheet that will be applied to your source. Note that it is now possible to do anything you want to your source and so can create run-time failures at any point in the process. Here are the simple mistakes to avoid.
If you are expecting HTML output because you used -f html, then your stylesheet supplied in the -X argument will certainly import the base xsl/pretext-html.xsl stylesheet. When you understand this, then you will understand that perhaps we should call this an alternate stylesheet. This advice applies equally well to extending the base xsl/pretext-latex.xsl stylesheet.
The import just described will behave better for others (meaning co-authors, or authors who fork your project) if the import uses a relative path, meaning relative to location of the extra stylesheet. We therefore suggest using a user directory, placed as a peer of the xsl directory, as described in .
So a common mistake is to use -X to point to an extra stylesheet someplace close-by your project's source files, when you have sensibly setup a relative import of the base stylesheet, and instead should point to the copy you have placed in user so that the import is effective on everybody's system.
As of 2021-08-04, this technique is only effective for HTML, PDF, and outputs. It may be natural for some other output formats (e.g., EPUB), and perhaps possible for others (e.g., braille). Make a feature request for expanding applicability.
Restricting the Scope
The -r-r (--restrict--restrict) switch deserves special mention. It is followed by the value of an xml:id attribute present in your source XML file. Then whatever action the script is asked to perform, it will only act on a subtree of the hierarchy, rooted at the element with the given xml:id value.
So if your images are complex or numerous (or both!) and take a long time to process, you can restrict attention to whatever part of the document you are actively editing, and you can even restrict to a single image and so produce just a single graphics file.
Methods
The -M-M (--method--method) switch is used in some cases to specify the method by which some process is achieved. Supported situations and values are listed below. Defaults are listed first, in brackets.
For generation of preview images for interactive elements, fast is the default of a 5 second timeout to allow the page to load; if the interactive element is taking longer to load, using slow will double the timeout.
Output
If you use the script to make a single file, such as your complete project as a PDF or an EPUB, then you can use the -o switch to specify this file, otherwise the file will land in the current working directory.
If your output consists of many files, such as all the HTML for your complete project, then you can specify a directory with the -d switch. Again, the default is the current working directory.
If you specify one of the components in and you are using a publication file to specify directories that are managed () then the multiple files for that component will automatically be placed into necessary directories by default (rather than in the current working directory). Of course, you can override this behavior by specifying a directory with -d. For example, for many operating systems, by using -d . you can have the results land in the current working directory. (Note there is a necessary period there.)
In the early stages of a project, you might rebuild your images regularly. But you may not always want those results landing within directories under revision control. Later in a project, your images may be relatively stable, and you want to distribute them with your source, perhaps so others can re-purpose them in handouts or other materials. To accommodate this, make two publication files, and in one make a relative path for the generated components that is outside of the main directory that is under revision control. Likely you will need some file path syntax for a parent directory, such as ../ on Unix-like systems. Then you can switch from testing to distribution, and back, easily.
Again, the command pretext -h will remind you of the various options for the script and is the most likely list to be correct and up-to-date. The following is a brief summary, in general terms, of what is possible.
Complete Conversions
With -c doc and various choices of the format (-f) the script will execute a complete conversion. In some cases, this is a convenience compared with just using the xsltproc processor. In other cases the conversion is very complex and multiple (arcane) output files must be packaged up in very specific ways and no author would want to manage it all. Conversion to EPUB is one example ().
Graphics
has a variety of languages for specifying images, such as xypic, pgfplots, and TikZ. By including the necessary packages or setup commands in docinfo/latex-preamble, these can all be generated at once, in the manner of the example earlier.
Asymptote
Images described by the Asymptote language can be processed in a manner entirely similar to that for images described with graphics languages. By default an online server will be used for the image generation, or you may elect to use an asy executable on your system and locatable via the pretext.cfg configuration file.
Sage Plot
If you have a version of Sage installed on your system, you can specify the path to the executable and obtain images described by Sage code. See for more information.
All Formats
If you desire images in a wide variety of formats, the option -f all will oblige.
YouTube Thumbnails
For each YouTube video (or itemized playlist) you specify, the script will go the YouTube site and grab a thumbnail image for that video (or first video from the itemized playlist). These get used in static formats, such as PDF.
Preview Images
Like a thumbnail for a YouTube video, other interactive content can benefit from a still image for use with static formats. Our strategy is to render the content with a headless web browser and capture an image automatically. For example, you might write some custom Javascript to allow a reader to interact with a graph, and you would like an image of the graph, along with its interactive sliders and checkboxes, to appear in the PDF version of your text. Recognize that this image will necessarily be the content at its initial start-up. Get a screenshot manually if you want something better.
Note that for all this to work, you need to properly serve your project's HTML output with the interactive content. (A local server may be a possibility, but we have not tried. See . Or you can try a temporary public server, see ). Then you need to announce the location of this hosted HTML, which is accomplished via a base URL in a publication file. Start at for details on this publisher variable. Note that the chunk level in your publication file used in this process must match the chunk level used when you build your HTML output, and mismatches for other publisher variables could have some ill effects.
The automatic screenshots will then be managed by the Python playwright package, which you will need to have installed in your Python virtual environment (see ).
Mathematics Representations
Conversions to EPUB, braille, and other formats require creating conversions of mathematics elements locally as part of the conversion. This requires having MathJax installed locally, see . Structured files of these representations can be obtained by setting the component with -c math. Possible formats (-f) are svg, mml (MathML), braille and speech.
Various conversions of problems are facilitated using either a
server or a local copy of the PG repository. See
for the details of this procedure.
================================================
FILE: doc/guide/developer/xsltproc.xml
================================================
Processing with xsltproc
The executable program xsltprocxsltproc implements Version 1.0 of the eXtensible Stylesheet Language (XSL)XSL. This is a declarative language that walks the hierarchical tree of an XML source file, and for each element describes some output to produce before, and after, recursively processing the contained elements. (That is a simplified description.)
xsltproc is typically installed by default on Linux systems and as part of Mac OS. See the website for details for Windows systems. The most basic operation is to provide xsltproc with an XSL stylesheet from the distribution and an XML document of your creation that is valid . This is done at the command-line, inside of a terminal or shell. Describing command-line operations, along with file and directory management, is beyond the scope of this guide, so consult another resource if this is unfamiliar. So here is a hypothetical simple example:
By default, xsltproc writes output to stdout (the screen), which you could redirect to a file, or you could use the -o switch to send the output to a named file. However,
automatically writes to a file whose name is derived from the xml:id attribute of the top-level book or article tag. If no such attribute is given the filename will be derived from book-1 or article-1. All output is produced in whatever the current default directory is, so you will likely want to set this beforehand.
The xsl subdirectory of the
distribution contains a variety of XSL stylesheetsXSL stylesheet, which I will also refer to as convertersconverterXSL stylesheet or conversionsconversionXSL stylesheet.
The ones that you will use as an author all have filenames of the form xsl/pretext-XXX.xsl, where XXX is some indication of the output produced. Conversions to or HTML output are the two most mature converters.
Note that authors are not responsible for creating XSL stylesheets. Stock conversions are part of the
distribution, and anybody is welcome to assume a source document is valid
and create new conversions to process it to existing, or as yet unimagined, formats.
Setup
There are two components to processing your document, the
stylesheets and the xsltproc program. We work at the command-linecommand-line inside of a terminalterminal or consoleconsole. If you do not know what this is, it will seem very primitive at first. Sometimes the old ways are the best ways. This will be called a Command Prompt in Windows or a Terminal on a Mac. In Linux it may be known as a console or a shell. A tutorial, which is Linux-specific, can be found at Ryan's Tutorials and certainly others exist.
The operating system on a Mac is built on Unix, which is very similar to Linux, so most of the directions here will be little changed between the two. Procedures can be very different in Windows (
,
). One alternative is CoCalc
which provides a full Linux computer for free in your web browser, so that may be an excellent place for initial experiments.
Step 1:
You need to obtain the
stylesheets, which are the main part of
. Since you are reading this, it may be possible that you have this already. You can use git to clone the
from the GitHub repository, and then be sure to checkout the dev branch to have the latest version. This is the best way to go, and you should only download the repository as a zip file once for an initial experiment, and then switch to using a clone instead.
Once you have a clone of the repository, you can issue git pull, and git will update your local copy with any recent changes. You should do this regularly
meaning on the order of daily. See the FAQ entry for more about why we expect you to do this.
See the
site for details and commands for this step, right on the main page.
Step 2: xsltproc
This is the command-line program which takes your document and a
stylesheet to together produce output. On Linux or a Mac you probably already have it installed as part of system software. On Windows it is not so simple.
In either case see the website for details abut verifying you have this, or how to install it.
Processing
At a command prompt in your terminal or console adjust the path names for the two files and execute:xsltproc /path/to/pretext/xsl/pretext-html.xsl /path/to/quickstart.xmlIn the current working directory you should now find the file article-1.html which you can view in a web browser. (You will want an internet connection since various parts of the page come from the network. Someday we will create output for the offline situation.) It will look very plain, but you should be able to read the sentence.
Now, try the following, again with adjusted paths, and all on one line:
xsltproc -o quick.tex /path/to/pretext/xsl/pretext-latex.xsl/path/to/quickstart.xml
In the current working directory you should now find the file quick.tex which you can process with pdflatex or xelatex at the command line as below. If you do not have
installed on your system, you could process this file within a variety of online services, and CoCalc would be an obvious choice.pdflatex quick.texIn the current working directory you should now find the file quick.pdf which you can view or print with standard PDF viewing software. You could even send it to a print-on-demand service to get nice hardback books, though I suspect sales will not be great.
Note that if your project includes multiple files you will need to pass the -xinclude flag to xsltproc, though this is not needed for this simple example.
An example of this is the command
xsltproc -xinclude /path/to/pretext/xsl/pretext-html.xsl /path/to/index.xml
For more on this see
and .
That's it. You now know all the basics of authoring with
, since you have produced two radically different output formats with identical content from the exact same structured input, via two different command lines. Everything you need to author a complete article or textbook, and produce it in many different formats, is just an extension or variation on what you just did. Let us look at a few simple extensions right away before being more methodical.
Modular Source Files
If you use the xi:include mechanism for modular source files, you must process your source slightly differently.
Add the switch -xinclude to your invocation of xsltproc, just after xsltproc, but before the filenames for the stylesheet and the top-level source file. Note that for some versions of xsltproc it might be necessary to use two dashes for the switch, --xinclude.
So now a typical invocation (using one dash) might look like
xsltproc -xinclude xsl/pretext-html.xsl ~/books/aota/animals.xml
It is easy to forget the -xinclude switch. Empty output, or cryptic error messages, are your first clue to this simple, but common, mistake.
String Parameters
To pass string parameters to xsltproc, use a command like the following (possibly with --xinclude).
You can use as many stringparam as you like on the command-line (or in your scripts). The quotation marks are not strictly needed in this example, but if the value of the parameter has spaces, slashes, etc., then you need to quote-protect the string from the command-line processor, and either single or double quotes will work (and protect the other kind).
Extra XSL Stylesheets
If you want to use a custom XSL stylesheet, as described in
, it is a simple matter of using that custom as the XSL file fed to xsltproc. That is, enter something like the following.
Note that using this method, it is necessary to import the stock XSL using the href instead of pretext-href, as in xsl:import href="path/to/pretext/xsl/pretext-latex.xsl". You need to specify the full path to the pretext/xsl directory, or else put your custom XSL in the pretext/user directory and use a relative path (../xsl/pretext-latex.xsl).
Publication File
To employ a publication file using xsltproc you use a string parameter () named publisher. This should have a path that is relative to the main file for the document. For example, assuming pod.xml and fauna.xml are in the same directoryxsltproc -stringparam publisher pod.xml pretext-html.xsl aota.xmlThis file should reduce the many other string parameters in use, and reduce the need for extra XSL files ().
Images Described in Source
As we discussed in
, there are many advantages to describing images directly in the source of your
document. However, these must be processed with various helper programs such as asy,pdflatex, and sage.
The issue with this is that XSL is not a general purpose programming language, and so in particular, cannot call the helper programs. The general strategy is to use XSL to identify and isolate the parts of a document that lie in the elements designed for graphics languages. A Python script, the pretext script, employs these XSL stylesheets and then feeds each image file to the appropriate helper program.
This script has a variety of options, so we document it fully in
.
Author Tools
The authors-report.xsl stylesheet, found in the xsl/utilities directory, will report all of the provisional cross-references and all of the properly prefixed todo-comments. The report is organized by all of the divisions in use in your project. It is meant to be simple in appearance, just text.
Apply this stylesheet just like you would any other:
xsltproc -xinclude path/to/pretext/xsl/utilities/authors-report.xsl path/to/main.ptx
Keeping Your Source Up-to-Date
This section describes a tool you can use to automate the process of adjusting your source when there are deprecations. Generally, there is an XSL stylesheet which will convert your XML source to another XML source file, fixing many of the deprecations automatically. However, it is the nature of XML processing that your source file will undergo some cosmetic changes. For example, the order of attributes is never relevant, so an XML-to-XML conversion is free to re-order the attributes of an element, perhaps different from how you like to author them.
So you have two choices:
Process your source with any of the provided conversions and edit by hand until the warnings all disappear.
Run the deprecation-fixing conversion and accept the changes in XML formatting. (Read on for more specifics about these changes.)
You perform this conversion using xsl/utilities/fix-deprecations.xsl on an XML source file in the usual way. By default, output appears on the console, so you will want to specify an output file, for example with the -o flag of xsltproc. You will discover a safety measure that requires you to also use a parameter, which you can pass in to xsltproc with the -stringparam command-line argument.
One choice of the parameter will result in just copying your source file and making all the cosmetic source format changes (we refer to this here as normalizationnormalization). This might be a useful thing to do first, all by itself, either as a first step, or an exploratory experiment. The other value of the parameter will actually make changes, and report some information about progress.
Here are some notes:
Be sure to experiment on copies of your source in a scratch directory. Send your output to another directory. When finished, use a diff tool to inspect the actual changes made. You can record your eventual changes using revision-control. (See Git for Authors.)
Do not enable xinclude processing or else your several files will all be merged into one as output and any modularity of your source will be lost.
Every single bit of indentation and whitespace in your source will be preserved, except perhaps for some blank lines near the top of your source files, and limited exceptions noted below.
Attributes will likely be re-ordered, with normalized spacing between them.
Empty elements will have any spaces removed from the end of the tag.
Elements with no content may be written with a single empty tag.
CDATA sections will be converted to text acceptable to the XML parser. In other words, the CDATA wrapper will be removed and dangerous characters (&, <, >) will be replaced by equivalent entities (such as &). If you have many matrices expressed in
and wrapped in a CDATA, this might be a big change. See
for background.
The output files will be labeled as having UTF-8 encoding.
It could be necessary to run this conversion more than once if deprecations build on one another. In other words, we do not update specific conversions, but rely on regular use to keep source up-to-date.
It should be safe to run this conversion repeatedly, even after new deprecations are added. In fact, it is encouraged.
The
source file examples/sample-errors-and-warnings.xml is intentionally full of lots of bad stuff. You can experiment with it, should you want to see interesting things happen. We have already performed the normalization step, so you can concentrate on substantive changes.
To process a directory with multiple source files, I would proceed as follows. First make three temporary directories, /tmp/original,/tmp/normal,/tmp/clean, and copy my source files into /tmp/original. Then, using a BASH shell, and inputting the command all on one long line.
for f in *.xml; do xsltproc -o ../normal/$f -stringparam fix normalize
/home/rob/pretext/xsl/utilities/fix-deprecations.xsl $f; done
This will loop over every XML file in the current working directory, /tmp/original, running the normalization conversion on each file, with the output files using the same filename, but now being placed in the /tmp/normal directory. If you change to the /tmp directory, then you can compare the results. I like to use the diff utility provided by git.
git diff original normal
Or, try this for a view that might be more informative.
git diff --word-diff original normal
You may only do the above once, on your first use of this conversion stylesheet. You will see how your style of authoring XML will undergo some minor changes. We can repeat the above to actual make the changes necessary due to
deprecations. Make /tmp/normal the working directory.
for f in *.xml; do xsltproc -o ../clean/$f -stringparam fix all
/home/rob/pretext/xsl/utilities/fix-deprecations.xsl $f; done
And as above, you can now compare the normal and clean directories to see actual changes. If you are satisfied with the changes, you can copy the files in the clean directory back onto your source files. If you are using revision-control (you are, aren't you?) then you can make a commit that holds these changes. (See Git for Authors.) Or maybe even make two commits, one from the normalization step, and a second with the substantive changes.
File Management
, at its core, is the formal specification of the XML vocabulary, as expressed in the DTD (). We have provided converters to process source files into useful output. However, we have not yet built a point-and-click application for the production of a book. So you need to take some responsibility in a large project for managing your files, both input and output. We have tried to provide flexible tools to make an author's job easier. The following is advice and practices we have successfully employed in several book projects.
Source
I am fond of describing my own books with an initialism formed from the title. So A First Course in Linear Algebra becomes FCLA, and in file and directory names becomes fcla. So I have a top-level directory books and then books/fcla, but this directory is not the book itself, this is all the extra stuff that goes along with writing a book, much of it in books/fcla/local. The actual book, the part everybody sees with an open license, lives in books/fcla/fcla. This subdirectory has files like COPYING, which is a free software standard for license information, and README.md which is a file in the simplistic Markdown format that is picked up automatically by GitHub and displayed nicely at the book's repository's main page. Subdirectories include src for the actual XML files, xsl for any customizing XSL (), and script for shell scripts used to process the book (see below).
I do not use any additional directory structure below src to manage modular files for a book, since the XML and the --xinclude mechanism manage that just fine. I see little benefit to extra subdirectories for organization and some resulting inconvenience. I do typically have a single subdirectory src/images for raster images and other graphics files.
I believe it is critically important to put your project under revision control, and if licensed openly, in a public GitHub repository. So the books/fcla/fcla directory and all of its contents and subdirectories is tracked as a git repository and hosted on GitHub. Because this directory is source I try very hard to never have any temporary files in these directories since I do not want to accidentally incorporate them into the git repository. As a general rule-of-thumb, only original material goes in this directory and anything that can be re-created belongs outside.
A tutorial on git would be way outside the scope of this guide, but Beezer and Farmer have written Git For Authors, so perhaps look for that.
Image Files
Some images are raster images ( photographs) that are not easily changed, and perhaps unlikely to be changed. Other images will come from source-level languages via the pretext script. For your convenience, this script has a command-line option that allows you to direct output (graphics files) to a directory of your choice.
In the early stages of writing a book, I put image filesimage produced from source code in a directory outside of what is tracked by git. It is only when a project is very mature that I begin to include completed graphics files into the src/images directory for tracking by git.
Build Scripts
When you have a mature book project, the various files, processing options, and a desire for multiple outputs can all get a bit confusing. Writing simple scriptsscript is a good idea and the investment of time doing this early in a project will pay off through the course of further writing and editing. The particular setup you employ is less important.
I have fallen into the habit of using the make program. It allows me to define common variables upfront (such as paths to the distribution and the main directory for the project it applies to). Then I can easily make targets for different outputs. So, for example I typically go make pdf or make html to produce output, and have simple companion targets so that I can go make viewpdf or make viewhtml. Other targets do things like checking my source against the DTD (). I have split out the variable definitions in a way that a collaborator can join the project and simply edit the file of definitions just once to reflect their setup, and still participate in future upgrades to the script by pulling from GitHub and not overwrite their local information.
My use of make is a bit of an abuse, since it is really designed for large software projects, with the aim of reducing duplicative compilations and that is not at all the purpose. You could likely have exactly the same effect with a shell script and a case (or switch) statement.
My general strategy is to assemble all the necessary files into a temporary directory (under /tmp in Linux) by copying them out of their permanent home, copy customizing XSL into the right place (typically pretext/user), run the pretext script as necessary and direct the results to the right place, and finally copy results out of the temporary directory if they are meant to be permanent. Interesting, an exception to staging all these files is the source of the book itself which is only read for each conversion and then not needed for the output. So you can just point directly to a top-level file and the xinclude mechanism locates any other necessary source files.
A good example of this general strategy is the use and placement of image files for HTML output. It is your responsibility to place images into the location your resulting HTML files expect to locate them. By default, this is a subdirectory of the directory holding the HTML files, named images. You will want to copy images, such as photographs, out of your main source directory (src/images?). But you may be actively modifying source code for diagrams, and you want to re-run the pretext script for each run, and make sure the output of the script is directed to the correct subdirectory for the HTML output. Running the pretext script frequently can get tiresome, so maybe you have a makefile target make diagrams that updates a permanent directory, outside of your tracked files in the repository, and you copy those files into the correct subdirectory for the output. That way, you can update images only when you are actively editing them, or when you are producing a draft that you want to be as up-to-date as possible. As a project matures, you can add images into the directory tracked by git so they are available to others without getting involved with the pretext script.
We did not say it would be easy, but we feel much of this sort of project management is outside the scope of the
project itself, while in its initial stages, and existing tools to manage the complexity are available and documented. (We have been encouraged to create sample scripts, which we may do.) Just remember the strategy: stage necessary components in a temporary directory, build output in that directory, copy out desired semi-permanent results, and limit additions to the source directory to that which is original, or mature and time-consuming to reproduce.
Doctesting Sage Code
Adding computer code to your textbook is a tricky proposition. You can propose that it is merely an illustration, and not meant to have all the necessary details, or you can make it exact, correct and executable, and then risk inevitable changes to render your code obsolete. At least you have the option of editing and reposting online versions quickly and easily.
One of our main motivations for this project was mixing in code from the powerful, open source, mathematical software project, Sage (). When you add example Sage code to illustrate mathematical ideas, you are then encouraged to also include expected output in the output element. Here comes one of the powerful advantages of XML source and XSL processing.
The pretext/xsl/pretext-sage-doctest.xsl stylesheet, used in the usual way, will create one, or several file(s), in exactly the format Sage expects for automated testing. So all your words are gone, and all your Sage input and output is packaged so Sage can run all the input and compare the results to the expected output. See for details on obtaining more than one file.
We have many years' experience testing hundreds of non-trivial Sage examples from textbooks, for linear algebra and abstract algebra. Roughly every six months, we discover ten to twenty examples that fail. Frequently the failures are trivial (usually output gets re-ordered), but some are significant changes in behavior that leads us to re-word surrounding guidance in the text, and in a few cases the failures have exposed bugs introduced into Sage. It has been relatively easy to do this maintenance on a regular basis, and if it had not been done, the accumulated errors would be enough to greatly degrade confidence in the accuracy of the examples.
Exact details for this process can be found in . Note that Sage is really just a huge Python library, so it might be possible to test pure Python code with this facility, but we have not tested this at all. Similar support for other languages can be considered if requested for use in a serious project.
================================================
FILE: doc/guide/frontmatter.xml
================================================
Robert A. BeezerDepartment of Mathematics and Computer ScienceUniversity of Puget Soundbeezer@pugetsound.eduDavid FarmerAmerican Institute of Mathematicsfarmer@aimath.orgAlex JordanDepartment of MathematicsPortland Community Collegealex.jordan@pcc.eduMitchel T. KellerMorningside CollegeOscar LevinUniversity of Northern Colorado20132019Robert A. Beezer, David Farmer, Alex Jordan, Mitchel T. KellerPermission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled GNU Free Documentation License.
================================================
FILE: doc/guide/generated/asymptote/gaussian-histogram.html
================================================
workspace_1
================================================
FILE: doc/guide/generated/asymptote/vimodes.html
================================================
workspace_1
================================================
FILE: doc/guide/generated/qrcode/joren-falls-video-url.xml
================================================
https://pretextbook.org/doc/guide/html/joren-falls-video.htmlhttps://pretextbook.org/doc/guide/html/topic-video.html#joren-falls-video
================================================
FILE: doc/guide/generated/qrcode/mozart-piano-sonata-url.xml
================================================
https://www.youtube.com/watch?v=1Yv_AINhVn4https://pretextbook.org/doc/guide/html/topic-video.html#mozart-piano-sonata
================================================
FILE: doc/guide/generated/qrcode/topic-youtube-video-8-2-url.xml
================================================
https://www.youtube.com/playlist?list=PLGRecdYLYDNdX5NEkS3KH-ZtCqc2f8lJ_https://pretextbook.org/doc/guide/html/topic-video.html#topic-youtube-video-8-2
================================================
FILE: doc/guide/generated/qrcode/tutorial-videos-video-url.xml
================================================
https://www.youtube.com/watch?v=w_Wu5ysIiPQhttps://pretextbook.org/doc/guide/html/tutorial-videos.html#tutorial-videos-video
================================================
FILE: doc/guide/generated/qrcode/video-hotel-california-url.xml
================================================
https://www.youtube.com/watch?v=YW4dzWE1SUs\&start=12https://pretextbook.org/doc/guide/html/topic-video.html#video-hotel-california
================================================
FILE: doc/guide/generated/qrcode/windows-cli-3-3-url.xml
================================================
https://www.youtube.com/watch?v=tAtdzyVBcZAhttps://pretextbook.org/doc/guide/html/windows-cli.html#windows-cli-3-3
================================================
FILE: doc/guide/guide.xml
================================================
The GuideIntroductionAuthor's GuidePublisher's GuideDeveloper's Guide
================================================
FILE: doc/guide/guideinfo.xml
================================================
Best PracticeTipPorism
\usepackage{tikz}
\DeclareMathOperator{\homop}{Hom}
\newcommand{\Hom}[2]{\homop\left(#1,\,#2\right)}
================================================
FILE: doc/guide/introduction/start-here.xml
================================================
Why ?
Welcome to the Guide for . You are likely eager to get started, but familiarizing yourself with this chapter should save you a lot of time in the long run. We will try to keep it short and at the end of early chapters we will guide you on where to go next. Not everything we say here will make sense on your first reading, so come back after your first few trial runs. When you are ready to seek further help, or ask questions, please read the in .
Philosophy
is a markup languagemarkup language, which means that you explicitly specify the logical parts of your document and not how these parts should be displayed.
This is very liberating for an author, since it frees you to concentrate on capturing your ideas to share with others, leaving the construction of the visual presentation to the software. As an example, you might specify the content of the title of a chapter to be Further Experiments, but you will not be concerned if a 36 point sans-serif font in black will be used for this title in the print version of your book, or a CSS class specifying 18 pixel height in blue is used for a title in an online web version of your book. You can just trust that a reasonable choice has been made for displaying a title of a chapter in a way that a reader will recognize it as a name for a chapter. (And if all that talk of fonts was unfamiliar, all the more reason to trust the design to software.)
You are also freed from the technical details of presenting your ideas in the plethora of new formats available as a consequence of the advances in computers (including tablets and smartphones) and networks (global and wireless). Your output just works and the software keeps up with technical advances and the introduction of new formats, while you concentrate on the content of your book (or article, or report, or proposal, or).
If you have never used a markup language, it can be unfamiliar at first. Even if you have used a markup language before (such as HTML, Markdown, or basic ) you may need to make a few adjustments. Most word-processors are WYSIWYG (what you see is what you get). That approach is likely very helpful if you are designing the front page of a newspaper, but not if you are writing about the life-cycle of a salamander. In the old days, programs like
troff and its predecessor, RUNOFF (1964), implemented simple markup languages to allow early computers to do limited text-formatting. Sometimes the old ways are the best ways.
is what is called an XML applicationXML applicationXML applicationXML vocabulary or an XML vocabularyXML vocabularyXML vocabularyXML application (I prefer the latter). That is, the source you write is marked up as XML, with specific tags that describe the semantic structure of your document. Authoring in XML might seem cumbersome at first, since some content will require more characters of markup than of content. Much of this markup can be quickly produced with a modern text editor, but it can still be overwhelming. We believe you will eventually appreciate the long-run economies, so keep an open mind. And if you are already familiar with XML, realize we have been very careful to design this vocabulary with human authors foremost in our mind.
Principles
The creation, design, development, and maintenance of is guided by the following list of principles. These will become more understandable as you become more familiar with authoring texts with and should amplify some of the previous discussion.
Principles
is a markup language that captures the structure of textbooks and research papers.
is human-readable and human-writable.
documents serve as a single source which can be easily converted to multiple other formats, current and future.
respects the good design practices which have been developed over the past centuries.
makes it easy for authors to implement features which are both common and reasonable.
supports online documents which make use of the full capabilities of the Web.
output is styled by selecting from a list of available templates, relieving the author of the burden involved in micromanaging the output format.
is free: the software is available at no cost, with an open license. The use of does not impose any constraints on documents prepared with the system.
is not a closed system: documents can be converted to and then developed using standard tools.
recognizes that scholarly documents involve the interaction of authors, publishers, scholars, curators, instructors, students, and readers, with each group having its own needs and goals.
recognizes the inherent value in producing material that is accessible to everyone.
Understanding Your Source
Almost all of your time authoring in will be spent editing your sourcesource files. We now briefly describe what these files will look like and how to edit them.
File Format and Text Editors
Your source will be plain text ASCII filesASCII file, which you create and edit with any number of text editors. Files can be saved with the .ptx extension, which might tell your text editor what sort of file you are editing and will provide syntax highlighting and code completion, among other features. If your editor does not recognize .ptx, then you can use the .xml extension which has wider editor support (but with fewer -specific features).
Popular text editors include Visual Studio Code, Sublime Text, vi, emacs, Notepad, Notepad++, Atom, TextWrangler, and BBEdit. But in particular, you should not use word processing programs like Word, LibreOffice, Google Docs, WordPerfect, AbiWord, Pages, or similar programs. Sometimes these editors are known as a programmer's editorprogrammer's editor (though we will be doing no programming). Support for writing HTML sometimes translates directly to good support for XML.
Visual Studio Code has support for PreTeXt documents via a free extension, and the editor is open source and cross-platform (Windows, OS X, and Linux). The developers of have also had a very good experience with Sublime Text, which is cross-platform, and can be used for free,
though it has a very liberal paid license if you want to avoid nagging.
There are XML editorsXML editor, which might be too complex for authoring in . They do have some advantages and XML Copy Editor is one that you might find useful.
Some text editors (like VS Code) have spell checking extensions. More generally, recommendations for a spell checker can be found in .
Structure of your Source
If you start to think about the structure of a document (like an article or book) you will quickly realize that components are like blocks, stacked inside or next to other blocks. From the outside to inside, a book will have a number of chapters (next to each other, but all inside the book), and each might have sections (adjacent but inside the chapter). In the section, there will be a title, paragraphs, images, examples, theorems, and so on. Examples will themselves contain paragraphs. A theorem might contain a statement, which contains some paragraphs, which might contain some displayed math, and adjacent to the statement, there could be a proof, itself containing paragraphs, etc.
The hierarchical nature of XML is perfect to capture the hierarchical nature of a scholarly document. Consider the start of a document shown in .
Source of a simple book project.Hello world!Getting Started
Welcome to PreTeXt!
]]>
The first line is boilerplate that lets various programs know the rest of the file is XML, and the line start <!-- is an example of a comment that won't appear in the output. Besides this, you can start to see how the structure of the book is laid out.
Whitespace and Indentation
The term whitespacewhitespace refers to characters you type but typically do not see. For us they are space, non-breaking space, tab and newline (also known as a carriage return and/or line feed). Unlike some other markup languages, does not ever use whitespace to convey formatting information.
However, it can be useful to use whitespace to indent the different levels of the XML (and document) hierarchy. Use two (or four) spaces for indentation; a good editor will visually respect this indentation, and help you with maintaining the right indentation with each new line. Line up opening and closing tags at the same level of indentation, and your editor should let you fold the code to visually hide blocks.
Whatever you do, use a style and stick with it. You could put titles on a new line (indented) after creating a new chapter or section; some people like them on the same line, immediately adjacent. You could put a single blank line before each new paragraph, but not after the last. And so on. The choice is yours, but consistency will pay off when you inevitably come back to edit something. You have put a lot of work and effort into your source. You will be rewarded with fewer problems if you keep it neat and tidy.
In some parts of a document, every single whitespace character is important and will be transmitted to your output, such as in the input and output portions of a sage element. Since Sage code mostly follows Python syntax, indentation is important and leading spaces must be preserved. But you can indent all of your code to match your XML indentation and the entire input (or output) content will be uniformly shifted left to the margin in your final output.
Never use tabs, they can only cause problems. You should be able to set your editor to translate the tab key to a certain number of spaces, or to translate tabs to spaces when you save a file (and these behaviors are useful). Most editors have a setting that will show whitespace as a small faint dots or arrows, so you can be certain there is no stray whitespace anywhere.
Learn to Use Your Editor
Because XML requires a closing tag for every opening tag, it feels like a lot of typing. The VS Code extension comes with many snippets (code completions) that can fill out lots of the markup for you. More generally, any editor should know what tag to close next and there should be a simple command to do that (for example, in Sublime Text on Linux, Alt-Period gives a closing tag). Not only is this quick and easy, it can help spot errors when you forget to close an earlier tag.
If your editor can predict your opening tag, all the better. VS Code can recognize what tags are allowed at a given position. Sublime Text recognizes if you already have a section elsewhere, so when you start a second section, you very quickly (and automatically) get a short list of choices as you type, with the one you want at the top of the list, or close to it.
Invest a little time early on to learn, and configure, your editor and you can be even more efficient about capturing your ideas with a minimum of overhead and interference.
Revision Control
If you are writing a book, or if you are collaborating with co-authors, then you owe it to yourself and your co-authors to learn how to use revision controlrevision control, which works well with since the source is just text files. The hands-down favorite is git. To fully understand it is beyond the scope of this guide but some information is provided in which has hints on how to best use git together with a project.
If you use the workflow recommended in the using GitHub's codespaces, you will get revision control via git automatically, and VS Code provides a graphical user interface for all the basic operations you need.
Converting Your Source to Output
Once you have content created in files (i.e., XML files), you will want to convert these files into a output format such as HTML, to be viewed in a web browser, or a PDF. Instructions for doing this will be discussed in , and in even more detail in . Here we provide an overview of how the conversion works to help you understand what is possible.
With installed (on your computer or in the cloud), converting XML into a full HTML website can be as simple as typing pretext build html in a terminal, or hitting Ctrl+Alt+B in VS Code. Behind-the-scenes, these commands read through your XML and use XSL 1.0 (eXtensiible Stylesheet Language) to transform the XML source, using a number of XSL stylesheets that come with .
The recommended workflow for processing your source uses a python program we call the -CLI (CLI is command line interface). There are also a number of other free tools that can processes XML with XSL. For example, xsltproc is a command line program that is usually installed by default on Linux systems and MacOS.
This was the recommended method in the early days of , and still works. Documentation for how to use xsltproc with can be found in , but unless you are helping with the development of or are trying to do something fancy, you probably don't need it.
Some features of , such as the inclusion of images described in source, or including exercises, requires the use of an additional processing, done in python. Some of these also require additional software (such as or Sage). The -CLI does this automatically when building (and regenerates these assets if they have changed since the last build). There is also a python script that can accesses these functions directly for use in development. See if you are curious.
Where Next?
To start playing with right away, work through the . It will guide you through a cloud-based setup (no software install required) and you will create, edit, convert, and deploy your first document.
If you would like a general, high-level overview of features skip ahead to .
In-depth, comprehensive use of features is in .
If you have an existing project authored in you may be interested in the conversion process described in .
================================================
FILE: doc/guide/introduction/tutorial.xml
================================================
Getting Started Tutorial
At the end of this tutorial you will have...
Created a free GitHub account.
Created a GitHub Repository and Codespace for authoring in your web browser.
Learned the first steps to editing a document.
Converted your document to both -generated PDF and accessible HTML.
Deployed your HTML to the web via GitHub Pages.
This chapter serves as a tutorial for quickly getting started with in your web browser
using free services provided by GitHub.
(Advanced users who'd prefer to install our free and open-source software
to their own machine may choose to skip ahead to .)
The community does its best to keep this guide updated, but for even more up-to-date advice,
join us at our regular Zoom drop-ins announced at
our Google group or
watch a recording posted in .
Using online
It is possible to write documents using nothing more than a web browser. This approach does not require you to install any software (other than a web browser), although it does require you have internet access. Options for installing on your own computer are discussed in .
What is GitHub
GitHub is a freely-available service owned by Microsoft for authoring, sharing, and deploying
documents and source code. It uses the free and open-source Git
software for version management.
There are other services such as CoCalc and
GitLab for managing documents
online, as well as other ways to write that don't require anything
besides installing the free and open-source software onto your own device
(see to learn more).
We will use GitHub for this tutorial as it the most popular way to share and disseminate
documents, and provides the easiest pathway to getting started writing in the
language.
To create your free GitHub account,
follow the instructions on GitHub's
sign-up page
. You can also log into an existing GitHub account if you already have one.
Be sure to note your GitHub username and password in your password manager
(or however you usually keep track of login credentials).
Tip!
Educators and non-profit researchers can get many of GitHub's paid features
for free. While this is not strictly required for the rest of the tutorial, it's a
useful way to increase GitHub's free Codespaces usage quotas, and allows you to use GitHub's free web hosting even for private repositories.
Apply at
Education.GitHub.com
to unlock these features. In our experience, applications are usually processed quickly for .edu
email addresses, but you do not need to wait for approval to continue on with this tutorial.
Three GitHub concepts
This tutorial uses three GitHub services:
Codespaces (github.dev)
The Codespace for your project is an application
run in your web browser that gives you access to a virtual
computer with all the software recommended to author
installed for you automatically. This Codespace is private to you,
and lives at an address like
https://username-random-words-abc123.github.dev.
Repository hosting (github.com)
The repository for your project represents
the history of its edits that have been committed and synced
from your Codespace to it. This repository can be public
or private (though we encourage public repositories as they help
the community provide support for each other),
and lives at an address like
https://github.com/username/reponame/.
GitHub Pages (github.io)
The GitHub Pages service provides free hosting
for websites such as the HTML generated from a project.
This website is public, and lives at an address like
https://username.github.io/reponame/.
Broadly speaking, you author within your Codespace, which you periodically
commit and sync to your repository, and then occasionally deploy
to your public GitHub Pages website.
Creating your repository and Codespace
Follow the instructions at
to get started creating your repository and Codespace. You'll have the option to make your repository public
(recommended if you want support from the rest of the community) or private.
Either way, those instructions will also walk you through creating your private Codespace
for authoring.
This takes a few moments, but is a one-time process. Take note of the github.com
URL your new repository lives at so you can find it
the next time you want to work on your project.
(You can always access your github.dev Codespace link from there via the Code
menu.)
Then you'll be ready for .
Your First PreTeXt Document
At this point, you should have a project set up as a
github.com repository with a github.dev Codespace. You can use the
Code menu on the repository webpage to pull up the Codespace environment in
your web browser if you haven't already.
When you first created your repository from the template, there were very few files included. The first thing you will do when you open your Codespace is to create a new project. As the directions in the repository indicate, you can do this by selecting the PreTeXt: New Project command from the command pallette (which you can open with CTRL+SHIFT+P, among other options).
You should be presented with a dialog asking for what sort of project you would like to create (article, book, course, slideshow, etc.). For purposes of this tutorial, you should select article or book. You will then be asked where you would like to create the project, and selecting the default suggested location is fine.
The window should now refresh and you will see a bunch of new files, including a folder called source that contains your main.ptx file. Now you are ready to build it!
Building for web
You can build your entire project in a few different ways.
Click the PreTeXt button in the center left of the bottom toolbar of the VS Code window (see ). A dialog will pop up asking which command you want to run. Select Build default target, or choose Build another target... to get a menu of options to select a target to build (choose web).
You can use the keyboard shortcut CTRL+ALT+p
(replacing CTRL with CMD if you have a Mac) to get the same dialogs. Or to build in one step, use CTRL+ALT+b.
Select a command from the VS Code command palette, which you can access by clicking the icon in the bottom left of the VS Code window. You can also access this by typing CTRL+SHIFT+p (again, replacing CTRL with CMD if you have a Mac). Start typing pretext to get a list of commands available.
If you are comfortable entering commands in a terminal/command prompt, you can access one in your Codespace using CTRL+`. Then you can run pretext build web to build your project.
The resulting HTML files will be available in the output/web directory of your project. However, to view it, you should NOT navigate there and open the files. Instead, read on.
PreTeXt commands in Codespaces
Screenshot of VS Code PreTeXt button in Codespaces
Viewing
You can preview these HTML files you just built using the View command.
Again, you can access this in multiple ways: button in the toolbar, CTRL+ALT+p, etc.
Select View from the dialog. You may be given options on how to view the document,
depending on what VS Code plugins you have available to you. Try one or another until
you're able to view your web build in either a new tab of your browser or a tab within VS Code.
The VS Code Live Preview is a good option, but it is buggy when used inside Codespaces. It seems to help to use the VS Code command palette to run Live Preview: Show Preview (External Browser), then close the tab that opens, and start the process over. You may need to do this a few times before it works.
Now is a great time to try to make edits to your source files (maybe change the title).
Note that these changes aren't updated live in your preview:
you will need to build again, and then refresh the preview window to see them. Note, you do not need to run the View command again unless you stop the preview server.
Building for print
To produce a PDF from your source, repeat the above instructions
with the print target. If you use the button in the toolbar, select Build another target... and then print. Alternatively, you can enter pretext build print in a terminal. The resulting PDF will land in output/print/main.pdf, and can be downloaded by right-clicking in the VS Code file explorer, or previewed using
a View command.
If you would like to see the intermediate source files, you can add a new target to the project manifest (project.ptx) with a format of latex. See .
Saving your work
Using Codespaces will keep all your files in the cloud,
saved automatically as you edit.
As long as your Codespace is active, your files will be saved there
for your private use. However, inactive Codespaces are periodically
cleaned up by GitHub (as of writing, this happens after one month of
inactivity), so you'll need to periodically
commit & sync your work to your repository
where it will never be deleted.
Recall that your Codespace lives at github.dev, while your
repository has a github.com address like
https://github.com/username/reponame).
This repository serves as a backup of your work in the Codespace, and has the added benefit of
allowing collaborators to access your files as well. As a bonus, if you made your repository
public, members of the PreTeXt community who watch
the PreTeXt-support
Google group can create their own Codespace based on your public repository and easily answer any
questions you have.
While Git and GitHub have a lot of features, there's a very simple way to use them
via Codespaces. As you edit files, you'll notice that their filenames will turn orange, and new
files will appear green. Likewise, a blue number will appear in the left sidebar.
Filenames changing color as they are edited in Codespaces
Screenshot of VS Code sidebar in Codespaces
This blue badge is next to the Source Control view.
You will notice a list of files that were changed;
you can click on any of these to see what the changes are.
A Git diff showing changes in a file
Screenshot of VS Code Git diff in Codespaces
Type a message describing the changes you've made then
click the green Commit and Sync button. If it just says Commit,
use the drop-down menu to choose Commit and Sync. (If you forget to type a message describing the changes you've made, then a new tab will open: COMMIT_EDITMSG where you can type the message. When you are done, close the tab.)
Committing and syncing changes
Screenshot of VS Code source control in Codespaces
To see that this is successful, return to your github.com repository webpage.
You should see your files with all your
committed/synced changes. (That is, most of them: many files, such as log files and
temporary build files that appear in gray within your Codespace, will not
be synced.
This is no problem: they are created during a build automatically and don't need to be,
and really shouldn't be, saved or shared with others.)
Generating assets
If your document contains certain elements, you might need to generate their assets
for use in certain output formats. Depending on your build target, these include:
latex-image
sagemath
asymptote
youtube
webwork
codelens
Starting in CLI version 1.7, these assets will be automatically generated whenever you build your output. If you change the source of these assets, they will be regenerated when you build.
Regardless of which version of the CLI you are using, you can generate assets as a separate step in much the same way you run a build. You will see a Generate option in the command dialog, just below Build. Select your target and wait for the process to complete, then Build once more to incorporate your generated assets.
Deploy
So you have worked tirelessly to prepare course notes or a book, built and previewed,
synced changes to your git repository, and now you are ready to share the results of
your efforts with the world. It's time to deploy your project!
From the PreTeXt Commands dialog, select Deploy. This will automatically take the most recent build of your web target and host it through GitHub Pages. Watch the output pane for a link to your published site; unlike the preview link you've been using on github.dev which is private to only you, this github.io link is ready to share with the world. (It can take a few minutes for the site to get set up or updated; there should be another link to view the progress of the GitHub action that reports the progress.)
By default, doing a deploy will just publish your web target. It is also possible to deploy multiple targets along with a landing page directing a visitor of your site to the different versions of your project. See for more information.
Using this guide and advanced features
The rest of this guide will help you on your way.
However, keep in mind that this guide is the work of many volunteers
over many years, and certain sections may assume the reader is using mechanisms for writing
that have been around for much longer than the Codespaces environment
recommended for this tutorial.
In particular, there are two advanced mechanisms used by many authors: the
PreTeXt developer script (i.e. the pretext/pretext script) and the
PreTeXt CLI.
Under the hood, the PreTeXt CLI is what you're using in Codespaces, and it also has the ability to
call the PreTeXt developer script as well. If you ever want to use a PreTeXt CLI command, you can open
a Terminal in your Codespace using the menus, or by pressing Ctrl+`
(the backtick key, found in upper left of many keyboards).
From the terminal, you can type in any PreTeXt CLI commands directly. For example,
typing in the CLI command pretext build web and running it by pressing Enter builds the
web target.
Using the PreTeXt CLI with a Codespaces terminal
Screenshot of using the PreTeXt CLI within Codespaces
The CLI should be sufficient to do nearly everything you want to do for your project, and using
the developer script should be exercised with caution. Nonetheless,
to access a pretext/pretext developer script feature, you can use pretext devscript.
For example, if the
documentation suggests a command like pretext/pretext -foo bar, you could try running
pretext devscript -foo bar.
Installing PreTeXt
The browser-based GitHub Codespaces workflow described in is a quick and easy way to use without needing to install any additional software. If you prefer to have a local setup of PreTeXt, we recommend one of the following three setups.
Option 1: Installing a Docker container
The closest thing we have to a single click installer is to use a Docker container that includes all the software needed to run PreTeXt. In fact, the setup described in this section results in an identical environment to the one used in GitHub Codespaces, but it is all locally running on your own computer. The directions for all operating systems are the same (since the two programs you need to download and install are available for Windows, Mac, and Linux).
The one downside to this approach is that you will need a fair amount of disk space (around 5 GB all together), and some of that space will be used to install tools like and SageMath that you might already have installed anyway.
Here are the steps required to use this option.
Download and install Visual Studio Code. This is the desktop version of the text editor used in Codespaces (and is great for all your text editing needs, not just PreTeXt).
Download and install Docker Desktop. Once installed, start Docker Desktop and agree to the licensing terms. You should not need to create an account.
Download the PreTeXt Codespace zip file and extract it to a location of your choice.
Launch Visual Studio Code. Use the File menu to select Open Folder... and navigate to the folder where you extracted the zip file in the previous step. Select that folder and click Open.
You will likely get a popup in the lower right corner of the window asking if you want to install the devcontainer extension, or if you want to open the current workspace in a devcontainer. You do want to do both of these. If you don't get this message, you can install the Dev Containers extension from the Extensions view (click the square icon on the left sidebar) and then use the Command Palette (CTRL+SHIFT+P) to run the command Dev Containers: Reopen in Container.
The last step will take a few minutes the first time since it must download the container image.
Upon completing the steps above, you can create a new project and build/view/deploy just like described in .
Whenever you work on a project locally, you will want to open it in the container (but next time it will boot up much faster since you will already have the container image downloaded).
Option 2: Installing the CLI and Additional Software
The CLI is a Python package that can be installed on your computer. This option is more lightweight than using a Docker container, but it does require you to install several prerequisite programs (including Python itself).
Detailed instructions for installing the CLI with PIP are available in . If you know what you are doing, you can just run `pip install pretext[all]` to get all the python and core parts of .
This option is great if you already have a lot of the software that would be duplicated in the docker image from Option 1. In the following list, only python is strictly required, but many features of will not work without the other software.
Python (version 3.10 or later); required.
Node.js (version 18 or later); required to build custom themes for HTML and to build Braille and some epub targets.
Git; required to store your project on GitHub and use the `pretext deploy` command to host your project on GitHub Pages.
PreFigure; required to build prefigure images. You can get this as part of the CLI installation, if you install the cli with pip install pretext[prefigure], although you might need some additional system libraries installed. See PreFigure's website for more information.
(any standard distribution, including TeXLive, MiKTeX or TinyTex will work); required to build PDF output and if your document includes TiKz images (in a latex-image element).
SageMath (version 10.0 or later recommended); required to build SageMath output and if your document includes sageplots (in a sageplot element).
While you can use any text editor you like for authoring documents, Visual Studio Code is highly recommended due to the availability of the pretext-tools extension which provides syntax highlighting, autocompletion, and other features that make authoring documents much easier. You can install this extension from the Extensions view in Visual Studio Code (click the square icon on the left sidebar) or by searching for pretext-tools in the Extensions Marketplace (it is automatically installed if you use the Docker container from Option 1).
Option 3: Running from source
For advanced users, especially if you want to contribute to the development of , you can run without the CLI. To do this, you will need to clone the PreTeXt repository and install the required dependencies manually. This is required if you want to run the script or even just use xsltproc to process your documents. Additional information is available in the linked sections.
Some context for experienced Python developers: is an open-source XML language primarily powered by
XSLT and Python tools.
PreTeXt development is primarily split over two GitHub repositories:
PreTeXtBook/pretext
for the core functionality of PreTeXt, and the more recent
PreTeXtBook/pretext-cli
that packages up these resources into a Python package with several UX enhancements
such as a simplified command line interface and project management that does not require the use of custom makefiles. Instructions for developing with the CLI are available in its repository's README file.
If you're interested in potentially contributing back to PreTeXt someday, please
feel free to request to join
our developer Google Group
and say hello!
Videos
Occasional Getting Started with PreTeXt tutorials are offered to the community via
Zoom. For updates on when these are available, subscribe to
the PreTeXt announcements
Google Group.
The most recent recording of this tutorial is provided here for your reference.
This part is the place to begin if you are new to . is the introduction, overview, and philosophy. Then intends to get you started quickly by showing how to set up a authoring environment and converting a document to HTML and output formats. Notice that there are three parts which target different roles: the Author's Guide (), the Publisher's Guide () and the Developer's Guide ().
Author's Guide
This guide will help you author a document. So it serves as a description of the XML vocabulary, along with the mechanics of creating the source and common output formats. is meant to be a short overview of the majority of 's features, which can be skimmed to get a sense of 's capabilities. Or it can be read quickly as you begin authoring and you can return as you need certain features. The roughly parallel is much more comprehensive and is the first place to go for details not addressed in the overview. Note that the Author's Guide is not concerned with publishing your document, which is described in the Publisher's Guide.
Basic Reference
This part provides a quick overview of the minimal syntax for a variety of key features. Unlike the sample article, which is designed to demonstrate and stress test all aspects of , this guide will illustrate only the key elements of some of the most universally-used features of the language. In many cases, in addition to features not discussed, there may be alternative structures that are not given here.
Publisher's Guide
Even if you intend to distribute your document with an open license, and you are both author and publisher, it is still helpful and instructive to understand, and separate, the two different steps and roles. So visit this part of the Guide to learn how you can present, distribute, and maintain what you have authored.
Developer's Guide
This part provides advice, suggestions, and conventions for contributing to . For anything not answered here please use the pretext-dev Google Group. Make a membership request and it will be processed quickly.
Appendices
In addition to the usual items you might expect in the back matter, such as an open license, glossary, references, and an index, there are numerous more specialized additions, mostly describing the installation of, or effective use of, various technical tools that are independent of (but useful or necessary).
Similar to an Instructor's Version, for a textbook, or other work, a publisher might wish to provide ancillary documents with additional, or repackaged, material.
Solution Manual
An author may include a hint, answer, and/or solution as part of each exercise or project. Some of these may be designed for the reader, while some may designed for the instructor. A separate conversion is available to make a PDF containing just these items.
To use the CLI, first create a small XSL file, called solution-manual.xsl, in the xsl folder at the root of your project, containing the following lines.
]]>
Then add the following target in your project manifest.
Then you can build the solution manual with the -CLI using pretext build solutions.
Or using xsltproc, executexsltproc -xinclude pretext-solution-manual-latex.xsl fauna.xmlwith suitable paths in front of the stylesheet and the source file. The result will be a file like fauna.tex, which can be processed with a engine such as pdflatex. By default, the result will include allstatement, hint, answer, and solution for everyexercise or project anywhere in your book. Note that this conversion is explicitly designed only for book, so send a request for support for an article. Division headings (chapter, section, ) will be present, if and only if they have content. Page headers will help locate chapters and sections. Exercise numbers will be complete, to make it easier to locate individual problems. In other words, Exercise 3 from Exercises 5.6 will be labeled as 5.6.3, not just 3, as in the original text.
Any cross-reference that exists inside a solution will be honored and displayed faithfully. By that, we mean that if the author includes an xref as part of a solution to, say, Theorem 10.6, then that cross-reference will be rendered visibly as Theorem 10.6 in the solution manual. However, it will not be live (clickable) since the target (the theorem itself) is not part of the solution manual. We have not, and do not expect to, determine if a cross-reference points to part of another exercise which is visible in the remainder of the solution manual and then elect to make it live/clickable. In other words, all cross-references are static, even if there is the possibility to be more dynamic for a select few. If this is a severe shortcoming, consider producing an Instructor's Version (), enhanced with additional solutions, where all cross-references are live, and targets are more likely to be available.
A set of switches allows a publisher to control including statement, hint, answer, or solutionfor inline exercises, divisional exercises, worksheet exercises, reading questions, projects, and tasks within exercises and projects. So there is a total of 4\times 5 = 20 yes/no switches, for 2^{20} = 1\,048\,576 supported scenarios. Start at for more on these settings. The preamble is the same as for the full document, so besides being excessive, it should support any of the styling options.
In practice, you will discover that the conversion will reproduce all of your frontmatter and backmatterexactly as if it was part of the entire text itself. The reason for this is that you may actually want a little bit of front matter, perhaps some back matter, and maybe a new title page that makes it clear that you have created a solution manual. Best practice would be to have your project already organized so that each of your chapters is in its own file, and incorporated into your document via a top-level file using the xi:include mechanism. (Read about modularity in if this is new to you.) So now make an additional top-level file for the solution manual, maybe with a new title, a new preface, and acknowledgements of any help creating exercises and solutions. Be sure to include all of the main matter, even if you know some parts may not have any exercise. You want numbering to be correct for your cross-references and this means having all the content available to be counted, even if it is not visible in the end product. This new top-level file is really the only overhead involved in getting a quality, reliable solution manual together.
The philosophy behind this conversion is that a publisher may wish to create a different range of solutions for instructors, for limited distribution in ways that students are unlikely to find. Thus, we have tried to produce a functional document by default, without too much attention to making a beautiful document. Of course, improvements and suggestions are always welcome, though here the priority will be ease-of-use.
Digression
This conversion illustrates some advantages of including all the content of your project in one source document, and then selecting a subset of that content for different audiences. The advantage of authoring hint, answer, and solution in close proximity to the statement should mean a higher probability that changes to one part of an exercise will be reflected in the other parts. And with standard processing tools, and provided switches, an author and publisher can easily decide which parts to show, and when.
By including all of your project's content in one monolithic source document, it is possible to confidently reference supporting parts of the main text via cross-references from solutions. When a new edition is released, any variations in numbering will automatically be reflected in a new solution manual, created with no additional editing or proofreading.
Private Solutions File
Suppose an author distributes a textbook with an open license, and so makes the source available publicly (perhaps as a condition of the license). Perhaps the author also intends hint provided with exercise to assist students, and having them available as knowls in HTML output is a great way to make them easily available, but not immediately visible. But the author has also written some, or many, solution for the exercise, but these are only meant for instructors, and not for students. See the discussion at for more background.
One approach is to distribute an Instructor Version or Solution Manual only on request, and only as a PDF. The ability to provide a watermark on every page (see ) allows you to include a personalized message such as Issued to Charles Darwin. Do Not Copy.It would be a trivial technical exercise to remove this, but perhaps the moral imperative (in an extra preface as well?) would dissuade most from distributing further?
But with an open-source project, how can you distribute the exercise without distributing the solution? After multiple unsatisfactory experiments, we have arrived at the following solution. You author a separate document with hint, answer, and solution that you wish to keep private. You might put this in a different, private, git repository that you only share with your co-authors. Here is how you can construct and employ this file. Here we use the word solution generically to mean any of hint, answer, or solution.
Start with an exercise that you wish to provide private solutions for. Give it an xml:id, which you will need for . Be sure the exercise is structured with a statement so a private solution may be appended.
We recommend leaving a comment inside the exercise to remind you that there is a private solution that may need editing if the problem statement changes.
Create a new file to hold the private solutions, presumably located away from your other source files (see ). Call it something like privatesolutions.ptx, which is what we will use below.
The first two lines of the file must be:<?xml version="1.0" encoding="UTF-8" ?><pi:privatesolutions xmlns:pi="http://pretextbook.org/2020/pretext/internal">(pi is the internal namespace.)
Now add as many hint, answer, or solution as you like, in any order you like, authored in the usual way. The missing piece is that you must link each solution back to the exercise it belongs to, with a ref attribute whose value is the xml:id you used to label the exercise in .
For example, if there is an exercise with xml:id having value very-hard-problem, you might author:<answer ref="very-hard-problem"> <p>42.</p></answer>
Finish the file by closing the overall pi:privatesolutions element.
Now you can have all of these private solutions incorporated into your source by specifying the filename in your publication file (). The private-solutions attribute of the /publication/source element should be set to this filename (). So you would have<publication> <source private-solutions="path/to/privatesolutions.ptx"/> ...
The private solutions file should be available to any conversion, but most likely you will be using it with the solution manual conversion (see ).
For a large project you may have many private solutions and one big file is unwieldy. The solution is to modularize the file as described in . Then you can organize your file of solutions into multiple files, perhaps organized by chapter or section. The carch is that the include facility requires each separate file to only have a single top-level (root) element. For this purpose use the pi:privatesolutionsdivision element, which is designed for only this purpose. You can nest this element arbitrarily deep.
Note that an exercise or task may be authored with no solutions and then does not need a statement. Now, if you add private solutions to such an exercise or task, the markup will be incorrect. As of 2020-06-24 we make no extra effort to warn, or fix, this situation. A likely consequence will be that these private solutions are not rendered (but you might see a problem number where they should appear). Similar advice applies to task, and especially to non-terminal task which can never hold solutions.
You will have noticed that you have a lot of freedom to make a completely disorganized private solutions file, or even many disorganized files. There is no structure to prevent thisyou are on your own. Ourselves, we would keep the solutions in order of appearance, modularize a big project logically, and use comments liberally. But you can always search on the common value of xml:id and ref to locate the pieces.
Keep Your Private Solutions Private!
If you are using git (and why wouldn't you?) it could be an easy mistake to include your private solutions in a public repository accidentally with a careless commit. We would place our private solutions in a directory close to our source tree, but not within the material tracked by git. And we would build our solutions manual with private solutions by copying the necessary files to some scratch directory, where they get deleted later, after the PDF result has been preserved for use.
Private Solutions with Git
(2020-06-06) We no longer advocate this approach, and find easier and more robust. This section is no longer maintained and may be removed.
Suppose an author distributes a textbook with an open license, and so makes the source available publicly (perhaps as a condition of the license). Perhaps the author also intends hint provided with exercise to assist students, and having them available as knowls in HTML output is a great way to make them easily available, but not immediately visible. But the author has also written some, or many, solution for the exercise, but these are only meant for instructors, and not for students. See the discussion at for more background.
One approach is to distribute an Instructor Version or Solution Manual only on request, and only as a PDF. The ability to provide a watermark on every page (see ) allows you to include a personalized message such as Issued to Charles Darwin. Do Not Copy.It would be a trivial technical exercise to remove this, but perhaps the moral imperative (in an extra preface as well?) would dissuade most from distributing further?
But what about publicly available source code? After several unsatisfactory experiments, we have arrived at the following solution. Again it involves an intermediate understanding of the revision control software, git. And again, this is an outline.
Create a private repository for authors, and other trusted contributors. In other words, if shared, read access is controlled via passwords or something similar.
Create a branch off of master called solutions.
Do all editing of private material, and only editing of private material, as commits to this branch. So a typical commit might just be solution elements inside existing exercise. Any script or top-level file for producing a solution manual might also be part of this branch.
Do all authoring in this private repository, mostly as commits on master.
Periodically, while the solutions branch is checked out, merge master to bring in new changes to the main content.
Never ever merge solutions into master. In other words, solutions is a long-lived branch which never dies and is never merged into another branch. (Never rebase this branch if you have collaborators sharing the private repository.)
Push and pull both master and solutions to and from the private repository by setting up tracking branches.
Create a public repository which is a strict duplicate of the master branch. Periodically push the master branch of the private repository to the master branch of the public repository. Only. Its only purpose is for the next item. Use commands or a setup which makes it impossible to accidentally push solutions to this public repository.
The commits in the public repository will be identical to those on master in the private repository. So anyone can clone or fork this repository and make pull requests, which authors can apply and mange via the private repository. But solutions will never be part of the interaction with this repository.
================================================
FILE: doc/guide/publisher/braille.xml
================================================
Conversion to Braillebraille
There is a conversion to braille which works very well, while also needing further improvements. Conceptually, it is not very different than the EPUB conversion (), except for the additional necessity of the liblouis library for the translation of literary text (see ). MathJax and Speech Rule Engine provide Nemeth Braille from your authored mathematics. There is the option of embossable braille (designed for a physical paper page) or electronic braille meant for an electronic device like a one-line reader with mechanical raised pins. It is worth the effort to first make sure an EPUB conversion is successful, and then extend to the braille conversion.
Some extra care needs to go into the authoring of a project that creates the best possible output as braille. Some aspects are obvious, such as not being overly-reliant on video or interactive demonstrations. We can accomodate some constructions like a sidebyside in a way that makes sense to the reader. An allied project hopes to make it easy for authors to create diagrams that work well for both sighted and blind readers (tactile graphics). But constructions like abusing an m element to get a superscript th will just lead to confusion for a braille reader. With experience, we are collecting suggestions for authoring in .
Please be in-touch in the discussion groups if you have a project you would like to convert. Of course, we want to improve the process and the result, but we are especially interested in the experience of blind and low-vision readers who can point us to areas that need improvement.
================================================
FILE: doc/guide/publisher/conversions.xml
================================================
Conversions, Generally
A main goal of is to provide a language for describing a scholarly document by its structure, with contained content, and with no description of the presentation. It then becomes possible to use software to produce different formats, where the presentation takes advantage of that format and enhances the meaning of the content through the expression of the structure.
But different output formats have different capabilities. For example, a conversion to HTML can take advantage of knowls to organize smaller chunks of content, while a conversion to PDF can take advantage of page numbers for cross-references. And in these two examples, the capability of the one output format is mostly impossible or silly in the other. Look here in this chapter for notes about options that are largely independent of the particular conversion. Subsequent chapters contain notes about options that are largely specific to a particular conversion.
A key concept when using to describe your writing project is that an author should concentrate on content and then later a publisher can concentrate on presentation. (Of course, many authors are also their publisher, making this distinction more difficult than when a professional publisher was a necessity).
We isolate these publisher decisions in a file we call a publication file. Generally, use of this file will change how words look, or are arranged, on the page, but will not change the author's words themselves. some software might call this a configuration file, but we think it is very important to indicate its role in the publication process.
In tnis section, we describe how to create and employ this file. Details on actual options can be found throughout this guide, with terse comprehensive reference material in .
Create a separate XML file the same way you always would. Include the usual XML declaration as the first line. Now, instead of the overall element being pretext, use publication. That's it. Various elements within publication will be used to specify options, typically attributes. Name the file something that reminds you of its purpose, such as pod.xml for a print-on-demand version. Avoid using spaces in the filename, even if your operating system encourages it.
Entries that control aspects of the output are often attributes of various elements, but may also be the content of elements. When you read the reference material in be aware that we use a sort of shorthand to describe these entries, modeled on a specification called XPath. For example, if we say to set/publication/foo/bar/@bazzto possible values of yes, no, or maybe then the following will be the guts of a legitimate publication file that would somehow adjust your output in some way. In particular, note that the at sign, @, indicates an attribute of the preceding element.
]]>
When using the CLI (), the path to a publication file must be specified in the project manifest in the publication element for each target.
Levels Explainedlevels
Every document has a hierarchy, even if it might not be very deep. As an extreme example, for a sub-sub-section of a book, the subsubsection is contained in a subsection, that subsection is contained in a section, that section is contained in a chapter, and that chapter is contained in the book. Each division of a document has a level, and the overall root element is always at level 0 (the book in the example). Each other division is at some depth, computed by counting from the root. So the subsubsection in the example is at level 4.
Many aspects of the different outputs produced can be customized, typically via the publication file (), based on how much of the hierarchy is used or made visible. A good example is the Table of Contents. If the level of the Table of Contents of a book is set to 2, then the Table of Contents will be two-deep or have two levels of entries. More precisely, there will be titles (and maybe page numbers) for every chapter and every section.
When hierarchical numbering is customized by specifying a level, the number of an object will have as many separators (periods, typically) as the level given. Here's why. Suppose equations are set to be numbered at level 2. Then two levels of the hierarchy will be used to create the initial part of the number. So in an article, Equation 5.2.34 will be in Subsection 2, of Chapter 5, and then will be the 34th equation of that sub-section. Two levels: one separator to describe the division, one less that the number of levels (this is the structure number) and a second separator to set off the count within the division (the serial number). So, (2 - 1) + 1 = 2 separators. See more on numbering at .
Notice that you make no assumptions or decisions in your source about the depth of the Table of Contents, nor the numbering of equations. At any time, right up to the completion of your project (or later!), you can change this aspect of your output with nearly trivial edits in the publication file. Nice.
Numbering Explainednumbering
targets the production of structured scholarly documentsnot novels, not magazine articles, not menus, and not travel brochures. (Though a novel could work well?) A research monograph might only be consulted for a portion of its content. A good textbook should be useful to a reader after a course is over, and it should be easy to locate certain portions of the material. A good textbook will foreshadow later material, and reinforce earlier material. So we provide tools that lead to a quality index, reduce the overhead of making an accurate cross-reference, and make an automatic Table of Contents. Page numbers can be a useful way to locate information for print output, but are less useful in an electronic PDF with hyperlinks, and are totally useless for online HTML and reflowable EPUB. So we rely on copious hierarchical numbering to assist with locating discrete pieces of content.
A document, like most any scholarly document has a hierarchy of divisions. These are always numbered to reflect that hierarchy. So Subsection 4.7.2 of a book is the second sub-section of the seventh section of the fourth chapter of the book. It is possible to specify that the numbering stops at some level, but that will limit how you can number smaller units of content.
Blocks are units of content held in a division. An example is a good example. These are always numbered, so that cross-references are as useful as possible in all output formats. The number begins with a structure number that is the number of a division. The division will contain the block, but does not need to be the closest containing division. For example, Example 5.2.65 of a book has structure number 5.2, indicating it is in Section 2 of Chapter 5. But this section might be structured as a sequence of sub-sections and Example 5.2.65 would be contained in one of these sub-sections. But if we started counting all the examples in this section we would find Example 5.2.65 as the sixty-fifth numbered block of the whole section, even if it might only be the twenty-second example of its sub-section. This final number is known as the serial number. The granularity of the structure number may be configured. This is a good place to suggest the complementary on the meaning of the term level.
Numbering of equations and footnotes may be configured in a manner entirely similar to that of blocks. See for details on how to control this.
As mentioned above, a number is a kind of locatorit should help a reader locate content, via a cross-reference, an index entry (a specialized cross-reference), or a Table of Contents. It should also help a reader (teacher) tell another reader (student) where to find content, perhaps as part of a citation to a smaller item within a larger work. How would you locate Example 5.2.65? A Table of Contents, in any output format should get you to Section 5.2 quite easily. We claim that the remark immediately preceding Example 5.2.65 should be Remark 5.2.64. In other words, it will easier to scan the section and quickly home in on the example if the serial numbers count all the numbered blocks, rather than having one sequence of serial numbers counting examples, and a second sequence counting remarks. Not convinced? Suppose there were two such sequences of serial numbers. When you see Remark 5.2.23, should you move forward or backward in your search for Example 5.2.65?
If it is so important to not have separate sequences of serial numbers, then why do equations and footnotes get their own sequences? These items are substantially different visually, and even their numbers are formatted quite differently, so scanning for blocks or equations or footnotes should be very distinct visually. Notice that it is their distinctive appearance that is the criteria for an independent sequence of serial numbers.
We have implemented some flexibility for figures and tables, and for projects. This work is in flux, so we have not yet documented the possibilities. Our view is that figures and tables can be considered visually different enough to merit a separate sequence of serial numbers.
Divisions that are chapters, and only chapters, may begin with a number other than one. Primarily this is to accommodate books that need to be printed in multiple physical volumes, so numbering in a second (or subsequent) volume can be correct. We also understand the instructive value of a computer science text that wants to start counting from zero. We do not mean to encourage a Chapter 0 that is an introduction (go ahead and title Chapter 1 Introduction) or background preparatory material (make that an appendix). Understand that a preface, or multiple prefaces, is the place to talk about how, or why, you wrote your book, and/or a place to instruct a reader or instructor about the best ways to use your book. See for details on how to accomplish this.
Use Chapter Zero Carefully
Chapter numbering may start with a number other than one, and zero is a popular choice. This should not be simply because the first chapter is introductory or preparatory, nor should it be a replacement for a preface, which has a well-defined purpose (see ).
Exercise Component Visibility
The statement, hint, answer, and solution elements are collectively the components of exercises, projects (and similar), and tasks they may contain. When you author an exercise, you may only want to have a solution appear at the end of a book, or in a solution manual, and not right where the exercise is born. There are twenty yes/no settings (four components for each of five types of exercises), which control visibility at the location where the content is born. The default value for each is yes, which means the component is visible. See for complete details.
This is a good example of settings you may wish to employ differently for different output. Since HTML output automatically puts these components into knowls (), you may be less concerned about having them visible as part of the exercise itself. Conversely, for PDF/print output, you may wish exercise components to only be visible at the end of a book. Note that migrating solutions to another location is accomplished with a solutions specialized division ().
Finally, these settings are observed by the stylesheet which creates a solution manual (see ). This might explain why controlling the visibility of a statement is of interest.
Watermarks
Output can contain a watermarkwatermark, which is prominent text in the background of a document. You might use it to make a draft version (with a date?), or a CONFIDENTIAL version, or a document intended for limited distribution, such as an instructor's solution manual.
In PDF output this text will render as large, light grey text, at an angle across the page. HTML output will have repeated SVG images of the text below/behind the usual text.
To use, a publication file entry can be used to specify the text itself, along with a scaling factor that can be used to fill the page and prevent overruns. Note that the text is assumed to be simple (e.g.no markup) and when used with output certain characters (e.g.a percent sign) may cause problems. Make a feature request if the handling of this text needs to be more robust. See for exact syntax.
Here is an example of a specification in the publication file.<common> <watermark scale="1.2">DRAFT 2034-05-25</watermark></common>
Notes: Rationale (promotion). Procedures for print-on-demand (generally). Tools (Illustrator, GIMP, Inkscape). ISBN placement. Capable students can do design for you.
Covers can be modified for use in an electronic PDF produced from the conversion, see .
An edition would be a copy of your project, different than one produced at some other time. For example, you might elect to make annual editions, with corrections, additions, and deletions. By contrast, a version is a copy of your project that shares content with another version, but differs in minor or substantial ways. We provide mechanisms for minor differences in and for substantial differences in . Be sure to read about both mechanisms first, and understand their purposes, before committing to one or the other.
Customizationscustomizations
The customization feature allows you to create two or more versions of your text for slightly different audiences. To do this, an author defines custom elements that find their translations in a file specified in the publication file. Multiple customization files can then be used to build different versions of the text. For example, we might want to create two versions of our AOTA book, one for zoologists and one for laypeople. For the zoologist edition we want animal names to be scientific names, but in the edition for laypeople we want to use common names. The rest of the text is identical. To execute this, we make every animal name a custom element and create a customization file for each of the two versions.
Say we want to write a sentence that reads The IUCN red list classification of the western lowland gorilla is critically endangered in the layperson’s edition and The IUCN red list classification of the Gorilla gorilla gorilla is critically endangered in the zoologist’s edition. We begin by writing the sentence in the source and creating a custom element as a place-holder for the name of the gorilla:
The <init>IUCN</init> red list classification of
the <custom ref="gorilla-name"/> is critically endangered.
Then the file of translations will contain a custom element, with a name attribute that has value gorilla-name, and whose content is the translation.
Once you have placed custom elements in your source, you need to create one or more files of translations. To stay organized you might choose to place them in a directory of their own. The customization file opens with a special element and then contains a definition for each customization.
For the example above, here is the beginning of the customization file we might name customizations/zoologist.ptx.
<pi:customizations xmlns:pi="http://pretextbook.org/2020/pretext/internal">
<!-- Name of Western mountain gorilla -->
<custom name= "gorilla-name">
<taxon>Gorilla gorilla gorilla</taxon>
</custom>
</pi:customizations>
Note that employing a common value for the name attribute and the ref attribute makes the association for the replacement in the source. Next, we would also create a customization file named customizations/layperson.ptx that looks like the following.
<pi:customizations xmlns:pi="http://pretextbook.org/2020/pretext/internal">
<!-- Name of Western mountain gorilla -->
<custom name= "gorilla-name">western lowland gorilla</custom>
</pi:customizations>
Once the customization files are created, the element <custom ref="gorilla-name"/> can be used throughout the text and will populate automatically depending on which customization file is specified in the publication file.
When choosing names to use as values for the ref and name attributes, develop a consistent scheme that will make sense to other authors. Do not use spaces or capital letters. This name will never be visible to readers but should be easy for developers to understand. Placing careful comments in one main customization file can help other authors create new customizations that are accurate.
Note that this functionality is limited when it comes to irregular plurals and capitalization. Take care with the placement of custom elements: they will not, for example, capitalize automatically at the beginning of a sentence.
See for the mechanics of specifying a file of customizations via the publication file.
Versionsversions
A version is formed by including or excluding content coming from your source. This could be optional content, or it could be content that varies between versions. See for specific examples.
Marking Your Source
The component attribute is used by an author to identify elements in the source. The value of the attribute is any name that makes sense to a publisher. Examples might be videos, labs, genome, or color. There is a (huge) un-component which is the collection of all elements not contained in an element that is in some named component. You can think of it as a default component, or an un-named componentit is content that will be in every version, no matter what.
Forming a Version
Now, a publisher can elect to include or exclude all of the content of each component. This is accomplished with the include attribute of the source/include element inside a publication file. The value of this attribute is a space-separated listing of some of the component names in use. An example minimal publication file could look like the following example. See for the specifics.
]]>
This attribute is interpreted according to these rules:
An element whose component value is in the list in include will be included in the source that will be converted.
An element whose component value is not in the list in include will not be included in the source that will be converted.
If there is no include attribute in the publication file, the indication of the components are ignored and the entire source is processed. This would be the same as listing every component name in include.
Setting include to an empty value (include="") achieves the opposite effect and excludes every component from the source that will be converted.
You can nest one component inside another. But understand that once a element is excluded because the version in play does not include a certain component, then all of that element's contained source is gone and never coming back. In other words, an element nested inside an excluded element cannot be influenced by whatever other component it may be assigned to. However, the converse is possible: include an element via a component, and exclude contained elements via a different component.
Types of Versions
Here are three typical use cases for versions.
Additional Material
Some material may not be desired for every output format. Some interactive material might not make sense in a printed book. Or perhaps certain types of exercises are included at the end of each chapter, or not. By putting these elements in components, they may be included or excluded via a publication file. The idea here is that some versions contain a subset of all the available, authored material. For example, a version might include content in the videos and labs components, but exclude content in the genome component.
An annotated Instructor's Version can be accomplished with additional material, perhaps in a selection of commentary elements looking like like <commentary component="instructor">
Alternate Treatments
It may be possible to present a topic in two logically correct orders, but with substantial differences in how subtopics are treated. An example is the early or late treatment of transcendental functions in calculus. If the rearrangement is cosmetic, then an alternate main file can simply include divisions (chapters, sections) from separate files in a different order via the xi:include mechanism. See for details.
When the two pathways through the material have common and distinct material, then two components can be employed and the publication file would always include exactly one component.
Or for excluded material you might create some sort of placeholder text indicating what is missing. So all video elements might be excluded by placing them into the videos component. But you might want to indicate that there is a video available in some other format and include an indication of its title or topic. So you could write a short paragraph next to the video and place it in a novideos component. Now you would typically include exactly one of videos or novideos within each publication file in use. If your video live in numbered figures, you could exclude the figure and use a numbered block, such a remark as the alternate and perhaps preserve numbering of later items.
Alternate Presentation
This is an example similar to one Sean Fitzpatrick uses. His docinfo configures the way color is used in his TikZ diagrams. But instead he has two configurations, one for full color (HTML, electronic PDF), and another for black-and-white (printed hardcopy). The former is in the color component, and the second is in the nocolor component. If his project has color photographs, he could make careful gray-scale versions with specialized tools, and then place the resulting pair of image into each of the two components separately.
Releasing Material over Time
Many authors are simultaneously publishers, and some are also instructors. And a few author-publisher-instructors like to release their material over time. This could be accomplished with versions. First there will be some base material like the front matter, back matter, and a preparatory Chapter 1. Now, mark Chapters 2 and 3 each with the component week1. Mark Chapter 4 with component week2. Mark Chapters 5, 6 and 7 with component week3. And so on.
Then the publisher file can be edited each week, or there can be multiple publisher files (one per week), which successively accumulate more components to include. For example,<version include="week1"/><version include="week1 week2"/><version include="week1 week2 week3"/>Note how the numbering of older material will not be affected by the addition of newer material, you will just want to be careful about forward cross-references from released material into un-released material. Of course, this example just uses chapters as the granular unityou could use other divisions, or a mix.
Caveats for Creating Versions
There are some subtleties when you get fancy with manipulating your source this way, and we cannot protect you from every pitfall. You may get warnings for some of this. If you find new gotchas the hard way, please let us know.
Numbering
It is very possible that material that is common between versions ends up with different numbers. An exception is if you subset by excluding material at the end of a division. This may be very natural for optional material. Then elect a numbering option that resets at the next division. In this way later higher numbers go missing, and it does not affect the sequence of earlier smaller numbers.
Cross-References
Do not create a cross-reference into content you might exclude, there may not be a target for the xref. You should get a warning about this. When you have alternate versions, you will need to think carefully about xml:id and xref for your two versions. It is possible that what you think is common material might really need to go into two components because an xref points at a target that actually resides in two different components.
Identifiers
Allied with cross-referencing, be careful not to create source that had duplicate identifiers that are meant to be unique. You may get warnings about this situation.
Generated and External Files
Some portions of your source get manipulated into additional files in particular formats (generated). Examples would include images given in or Asymptote syntax, and trace files for Runestone CodeLens environments. Depending on what you include or exclude in different versions, these files could have different characteristics. As one example, suppose you define different color palettes for use in images described using the TikZ language (inside a latex-image element). And then you employ the two different palettes by using versions and components to control which palette is used for each version. If you want to save these images (say, by commiting to a repository) rather than repeatedly regenerate them, then you need to save two different collections of generated images.
Versions are given by a publication file (), and the publication file allows you to specify which directory has these generated images () so you can easily coordinate the generation and employment of these images with a coherent publication file.
You also sometimes bring external files to your project, such as JPEG images, which are not derived from your source. As in the example above, you could have color images for a version used to produce electronic formats and grayscale images for a version produced for physical printing. Again, the publication file could be used to employ a different collection/directory of external images for different versions via the options described in .
================================================
FILE: doc/guide/publisher/epub.xml
================================================
Conversion to EPUB/Kindleepubkindle
EPUB is the standard format for electronic books. Books in EPUB format can be read using applications on a variety of platforms. (Apple Books across the entire Apple ecosystem. Calibre is open source and cross-platform for desktop usage. Android devices have options as well.) Amazon's Kindle devices use a proprietary format that is derived from EPUB. Through much experimentation, the team has determined that SVG mathematics, generated by MathJax offline tools, works well in all ebook readers other than Kindle apps and devices. For Kindle, MathML is the best format. (Apple's MathML implementation is very poor as of July 2021, and so we cannot recommend math formatted using MathML for situations where readers may use the Apple Books app.) Thus, we provide two pathways for production of electronic books. These formats are useful as an offline version, which is superior to a PDF in some ways, such as font face and font size being controlled by the software in an e-reader device. However, it is inferior to the online version (), since many interactive features cannot function within the EPUB version.
Prerequisites
There are a handful of prerequisites to build an EPUB version of a book.
You must use either the -CLI or the pretext/pretext script, since creating an EPUB file is a multi-stage process; building with xsltproc is not supported.
You must have node and npm must be installed. See for more on node and npm.
You must use a publication file (referred to below as publication.ptx) with source/directories/@generated and source/directories/@external so that images can be located and bundled (these are included by default if you use pretext new or pretext init for your project).
To use a non-generic cover image, the publication file must also have epub/cover/@front attribute that points to the cover image (JPEG or PNG, 2048 pixels tall, 1280 pixels wide). Absent an image provided, there will be an attempt to create a simple, generic cover image. See for details about specifying a cover image.
If you use the pretext/pretext script, you will need to generate any source-defined images in SVG format for standard EPUB, and PNG format for Kindle. Furthermore, Kindle processing requires PNG resolution to be at least 200 DPI, and 300 DPI is a good recommendation (from Mitch Keller). See Kindle Help topic G202169030 for more.
Finally, if you are using the pretext/pretext script, you must install a local version of MathJax (the CLI will try to do this for you). We provide a bash script in scripts/mjsre that automates this process. See for instructions. As updates to the EPUB conversion are released, you may occasionally want to update your local copy of MathJax. Simply use the script referenced above.
To use the CLI, you will need to create a new target in the project manifest (project.ptx). The target should look something like the following.
The name can be whatever you wish, but the format must be epub or kindle. You won't be able to tell the output files apart, so if you want both an epub and a kindle, name the output directory differently for each.
Converting and validating
First we will describe how to convert to epub or kindle using the CLI. Assuming you have added a target with name ebook and format epub, simply run:
pretext build ebook -g
If instead, you wish to use the pretext/pretext script, make sure to first generate images into the correct format (SVG for regular EPUB and PNG for kindle).
Converting to EPUB with SVG math (used everywhere other than Kindle), run as a single command-line
/path/to/pretext/pretext/pretext -c doc -f epub-svg -p publication.xml -d /path/to/output /path/to/yourmainfile.ptx
For an EPUB file destined for Kindle, use the single command-line
/path/to/pretext/pretext/pretext -c doc -f epub-kindle -p publication.xml -d /path/to/output /path/to/yourmainfile.ptx
If you would like to name your output file something other than the name inferred from the root xml:id, you can use -o path/to/output/filename.epub instead of the -d option.
For the standard EPUB conversion, any standard EPUB reader should work. MacOS users will find the Apple Book app is likely their default. Calibre is useful for an alternative view and works on Windows and Linux as well. For the Kindle conversion, you will need to get Amazon's Kindle Previewer app (macOS and Windows only). For reasons we do not understand, some books crash the Kindle Previewer app, in which case you should try loading the EPUB file into the Amazon KDP web interface, which also offers a preview. (This preview is the only option for Linux users.)
Many EPUB marketplaces are strict about requiring that your EPUB file pass validation by the open source epubcheck validation tool. You may be able to install a command-line version of epubcheck using your operating system's package management tool. A free Java-based GUI version released by Pagina might be useful. There is also a (slow, limited) online version. More pointers can be found at the W3 EPUBCheck site. Please report validation errors and oddly-formatted electronic book output to the pretext-support Google group. Some aspects of have not yet been fully implemented for EPUB, but we will endeavor to support them as demand arises.
Distribution
Because the EPUB file built for Kindle is different than what we build for all other readers, you must distribute the Kindle version of your book through Amazon's KDP. Because Amazon and Kindle have the overwhelming majority of the electronic book market in the United States, if your readers are mainly in the United States, we highly recommend that you get your Kindle version in good shape.
Distribution of the EPUB file produced by the epub-svg conversion can be done through electronic book aggregators. There are many options available, and they all take an additional commission on top of what the electronic book marketplace through which a reader buys your book takes, but using such a service can save you from needing to post your electronic book on a variety of marketplaces. Do not allow an aggregator to distribute your book to Amazon, as the math will not render properly. It is as simple as not checking the box for Amazon when signing up with an aggregator to opt out of having the aggregator send your book to Amazon.
================================================
FILE: doc/guide/publisher/further-customizations.xml
================================================
Further Customizationscustomization
The publication file is our primary vehicle for substantially affecting the way a project is produced, see for more. Varying small portions of text (on the order of a phrase) is accomplished with customizations to make different versions, see . Producing different versions by including, or excluding, large portions of text, on the order of paragraphs, blocks, and divisions, is accomplished with support for versions, see . Arranging material in different orders can be accomplished with thoughtful use of modularizing source files, see .
In this chapter we describe two other ways to influence output, which are in some ways are techniques a developer might need to be familiar with (), though a publisher might also find them useful. An author should not have any need for these techniques.
String Parametersstring parametersstringparam
The majority of the conversions that supports are accomplished via an Extensible Stylesheet Language (XSL) stylesheet. This language has a parameter feature which allows an external value (as a small chunk of text) to be provided to the stylesheet externally. In this way, a single stylesheet can produce small changes in output in reaction to a parameter value, without the need for creating multiple stylesheets. We say that the stylesheet is parameterized by the parameter. These are often called stringparam since that is the command-line switch used by the xsltproc executable for the external communication ().
The conversion to source, as a precursor of PDF output is a good example. A string parameter specifies the size of the font, which causes small changes to the source file in the appropriate ways. Similarly, a PDF should be different if it is meant to be become a hardcopy printed book, or if it is meant to be viewed on an electronic screen. This dichotomy is reflected by a simple string parameter (with values yes or no) and then a single stylesheet can produce two outputs that are different in substantial ways. Note that a publisher is insulated from any of this discussion for these two examples as the publisher file () handles all the logistics. See the publisher file options at and .
Some string parameters are just for internal use, especially when multiple stylesheets are chained together to accomplish a complicated conversion, such as to EPUB () or braille. Others are used to allow developers to optionally test-drive some new featuresthese usually have debug in their name. We once used string parameters directly to accomplish publisher customizations. As of 2022-10-24 we are well along to moving these to the publication file, though we mention this here since this transition is not 100% complete.
The method for supplying an (external) string parameter to the processing of a project varies depending on the tool used for processing.
-CLI,
pretext/pretext Python script,
xsltproc binary executable,
Extra Stylesheetsextra stylesheetsstylesheetextra
String parameters () are an easy way to effect global changes in the presentation of your writing. But putting ten of them on every command-line gets old and cumbersome fast.
You may also wish to customize your output in some stylistic way. This might be especially true for /PDF/print output. For example, you might wish to have every chapter heading of your book in a nice shade of light blue, with the title flush right to the margin, countered by a thick solid rule extending all the way right, to the edge of the paper. Notice that this does not affect your content, it is strictly presentation. This is our approach for styling output, much as CSS is used to style HTML output ()
We have done several things to encourage such customizations. We have tried to put as much stylistic information as possible in the preamble and keep as much as possible out of the body. (There is always room for improvement on this score, please be in touch if you have a need.)
You can start with a new small XSL file. You then tell the -CLI to use that XSL file instead of the standard one provided by through the xsl element in a target of the project manifest.
Assume that you have an XSL file called custom-latex.xsl located in the folder xsl inside the root of your project. In your project.ptx manifest file, use <xsl>xsl/custom-latex.xsl</xsl> as an element in the corresponding target.
The custom XSL file should import the stock file for the type of output you want to create. This is done using the line<xsl:import href="./core/pretext-latex.xsl"/>which should be placed near the top of the file; everything after it will redefine the various rules imported from the stock XSL. Note the href attribute's value starts with ./core/. This works because the CLI copies all the standard XSL to a subfolder core of the temporary directory holding your custom XSL so that you do not need to know the path to its location on your system.
See to see how to use such a stylesheet with the pretext/pretext script.
The easiest thing to put in this file is elements like<xsl:param name="latex.font.size" select="'20pt'" />. Values given on the command-line supersede those given in an XSL file this way.
You can augment the preamble with as much code as you like in the following way.
<xsl:param name="latex.preamble.late">
<xsl:text>% Proof environment with heading in small caps
</xsl:text>
<xsl:text>\expandafter\let\expandafter\oldp\csname\string\proof\endcsname
</xsl:text>
<xsl:text>\let\oldep\endproof
</xsl:text>
<xsl:text>\renewenvironment{proof}[1][\proofname]{\oldp[\scshape #1]}{\oldep}
</xsl:text>
</xsl:param>
There are a variety of things you can do generally, by overriding the imported XSL templates to change behavior, but such modifications are beyond the scope of this guide.
================================================
FILE: doc/guide/publisher/instructor-version.xml
================================================
Instructor's Version
Once your content is in place, you can begin thinking about various useful derivative versions. A natural example for a textbook is an Instructor's Version, enhanced with additional material to help an instructor understand your organization and intent, or to provide advice and counsel about teaching the material.
Solutions
Philosophies about the purpose and use of exercises varies among authors and instructors. Some think hints, answers, and/or solutions, should be universally available to students to use responsibly. Others like to assign exercises to be graded as part of a course grade. Some are resigned to solutions that are distributed in a limited fashion eventually becoming public, or that some groups of students will distribute their own solutions, possibly not uniformly. Wherever you place yourself in this debate, distributing solutions to only instructors is one approach, and some instructors may find this a very helpful aid when they teach material new to them.
There is flexibility in which of hint, answer, and solution can be included or excluded in your text, which can be included or excluded in an Instructor's Version, and which can be included or excluded in a Solution Manual (see ). You can choose to author these or not, and then decide which to include in the student version, and which to include in an independently-produced Instructor Version, and which to include in a Solution Manual.
Read (and ) for some practical advice about limiting distribution of solutions.
Notes and Commentary
The commentary element is designed primarily for the purpose of adding material to a document to make an enhanced version (see ). It is similar in many ways to a paragraphs in that it can be placed within any division and must be titled.
Other distinctions are:
Since it is often elective, you need to be careful about cross-references to and from a commentary. It is highly likely that you will want to make cross-references within a commentarypointing to other portions of your text, and this is always a good idea. You will want to avoid making cross-references to a commentary from other parts of the text, with the exception of a cross-reference that originates within some commentary.
Numbered items are prohibited within a commentary, such as a figure or a theorem. Doing so would disrupt consecutive numbering in different versions, with or without, commentary included. Numbered equations are not prohibited in the schema, but should definitely be avoided anyway.
Adding or Removing Divisions
For an Instructor's Version you might wish to add additional material into the front matter (a specialized preface perhaps), or remove some material from the back matter (an appendix with solutions that duplicates solutions now placed within the exercises themselves). There may also be parts of each chapter you do not find necessary to include.
Modularizing your source files would allow for a different top-level XML source file to include different portions of the frontmatter or backmatter, perhaps just making a different title page. See for more on modularization.
Additional, minimal, XSLT stylesheets can be used to selectively kill portions of your source, such as every Additional Reading at the end of each chapter residing in a references. Consistent use of elements, leading strings in xml:id, and/or leading strings in title, can make it a single-line exercise to selectively remove multiple portions of your source without removing other portions. See for more about additional XSLT stylesheets.
Think carefully about the effect of removals and additions on numbering. In HTML output all numbering is hard-coded and will be based on counts of the entire XML source file. So selectively killing content will not change numbering, but cross-references may point to divisions for which there is no content to serve as the target. Using a different top-level file can impact numbering throughout. Significant portions of the output rely on 's automatic numbering via mechanisms like \label{} and \ref{}. So if portions of the text are killed, then the \label{} of a cross-reference may never be defined. A technical solution would be to provide an option to hard-code all numbering in output.
Generally, removing portions of each division will have the least ill-effects on numbering if the portions removed are at the end of a division and no cross-references point there. So, for example, a references at the end of each chapter can be safely killed with no ill-effects if there are no cross-references elsewhere to the particular biblio contained in that references.
When a division is killed through the use of additional XSLT, knowls and index entries will still be generated as usual for that division as part of the conversion to HTML. Thus, some care may need to be taken if certain knowls should not be uploaded to a server. Using a consistent scheme for the values of the xml:id might make this easy to script. The idx elements could be killed in a manner similar to the division with a use of the ancestor axis in a filter. Of course, the conversion to will not create knowls, and the index-creation process does not suffer from the shortcomings of the creation process for HTML.
Instructor's Notes
The commentary element, as described above, can be used effectively by an individual instructor to customize a personal version of a book. This is not as fine-grained as highlights or annotations, so is not meant as a replacement for tools that support more localized personal additions.
The ideal way to do this would be with a text having source distributed as a git repository, and with notes managed by git. Here is a rough outline, assuming a solid understanding of git.
Clone the author's repository to a local, personal, location.
Make a long-lived notes branch off the author's master branch.
Add commentary with commits on the notes branch.
Regularly pull master from the original repository to receive updates and fixes from the author.
Regularly merge master into notes so the enhanced version gets the author's changes without changing master.
Produce personalized output from the notes branch via as normal, with the switch enabling display of the commentary.
================================================
FILE: doc/guide/publisher/jupyter-notebook.xml
================================================
(*) Conversion to Jupyter Notebooks
Part of a book's style is the choice of fonts. As of 2019-11-09 we have a better understanding of the use of fonts in to the point where we can design interfaces that will make it simpler for you to experiment with different choices and preserve various features that enables.
The first thing to understand is that the xelatex engine is much more capable of employing modern fonts. was built in the late 1970's when computer resources were at a premium, and the idea of mixing mathematics with non-Western languages and scripts may have been fanciful. The pdflatex engine is rooted in this history. We now have the Unicode standard, thoroughly integrated into web browsers, and companion scalable OpenType fonts. In contrast to , was designed to work better with a multitude of fonts. So we organize this section by this distinction.
Processing with pdflatex
Fonts used by come in encodings. The original encoding is known as OT1 and organizes glyphs (shapes of individual characters) 128 at a time. Since this puts regular Latin letters in one group, and accented letters into another group, this makes automatic hyphenation impossible if accented letters are used (as in many European countries and much of the Americas). The 1990 Users Group (TUG) meeting in Cork, Ireland, formulated new and improved encodings. The T1 encoding is one result, and so it is known as the Cork encoding (and also as EC). It groups 256 glyphs together at a time. So you need only know that a T1 encoding is better than an OT1 encoding. If you want to know more (much more), locate font encodings by Mittlebach, Fairbairns, & Lemberg.
The Font Catalogue is a great resource for locating different fonts. The fonts and their packages are likely already installed (this information is provided), or there is enough information about how to install the package in a standard way. Each gives exact directions on how to enable the font for a document.
For example, Iwona, a sans-serif font with support for mathematics, can be employed as the document font simply by including the following in the preamble:\usepackage[math]{iwona}\usepackage[T1]{fontenc}This suggested use of fontenc package (not to be confused with the fontspec package) indicates the availability of a T1 encoding.
Note: when the Font Catalogue says OTF or TTF available then the font can also be used with xelatex. When it says OTF or TTF only then the font cannot be used via pdflatex. Read on.
Processing with xelatex
TrueType fonts (TTF, *.ttf files) have been improved upon by the creation of OpenType fonts (OTF, *.otf files). The main difference is that OTF fonts have a variety of features which can be selected or not. It is also easier to directly select a particular glyph (realization of a character) by specifying its numerical code point as a Unicode character. For the remainder, we will reference OTF fonts only, but nearly everything applies equally well to TTF fonts.
The main difference with xelatex and OTF fonts is that xelatex expects the font files to be part of the system software and are managed by the operating system and its tools. So, for example, in the example above installing the iwona package will place files into your texmf tree, where they remain unknown to your operating system. So you will need to learn how to use your operating system to locate and install OTF files (or make them known to your operating system). With luck, popular fonts may be easy to install using your system's package manager.
So installing fonts into a system is a bit of a hurdle, and as a style writer, you are reliant on authors who use your style to understand this requirement.
Locating an OTF font
Since I have the iwona package, I can expect the OTF version of the font to be somewhere. I know I have the package by using a TeXLive tool to search for the style file.kpsewhich iwona.stywill return the full path to that file.
On my Linux system, with TeXLive installed via a Debian/Ubuntu package, I can locate the main OTF file for the Iwona font by exploring the relevant directories (fonts/opentype looks promising), or I can use the system find utility to search for filenames with iwona or Iwona in the name. There it is:/usr/share/texlive/texmf-dist/fonts/opentype/nowacki/iwona/Iwona-Regular.otf
You can simultaneously determine if you have a font, and if it is known to your system with the fc-list command from the fontconfig utility. The produces a lot of output, with one line per file, but it includes file names and the human-readable name of each font. You can pipe the output through grep to find what you are looking for, for examplefc-list | grep "Latin Modern"
Making an OTF font known to the system
On my Linux system, I need to copy this file (and its companions) into the system directory/usr/local/share/fontsand reboot, or rebuild the font cache withfc-cache -f -vFinally, I can check that the font is known to the system withfc-list
On a Mac, we have several reports for how to do this.
Mitch Keller reports on 2019-01-02 that I opened the directory on my hard drive containing the OTF file, double clicked on the font (opens the macOS application Font Book, which comes with the OS), and then clicked the Install Font button.
Karl-Dieter Crisman reports on 2019-07-01 that I was able to use some fonts already existing in TeXLive with a symbolic link to the Font Book,
as suggested at Ask Different:ln -s /usr/local/texlive/2018/texmf-dist/fonts/opentype/public/lm/ '/Library/Fonts/Latin Modern'where 2018 indicates when I updated my Live distribution.
Information about an OTF font
To learn more about this particular font TeXLive provides an executable, otfinfo, which I can use as (omitting the long directory path here for clarity)otfinfo -i Iwona-Regular.otf The first part of the output is
Family: Iwona
Subfamily: Regular
Full name: Iwona-Regular
PostScript name: Iwona-Regular
The critical piece of information here is the font's name: Iwona-Regular. I can also learn which OpenType features are available
$ otfinfo -f Iwona-Regular.otf
aalt Access All Alternates
c2sc Small Capitals From Capitals
cpsp Capital Spacing
dlig Discretionary Ligatures
dnom Denominators
frac Fractions
hist Historical Forms
kern Kerning
liga Standard Ligatures
lnum Lining Figures
numr Numerators
onum Oldstyle Figures
ordn Ordinals
pnum Proportional Figures
sinf Scientific Inferiors
smcp Small Capitals
ss02 Stylistic Set 2
sups Superscript
tnum Tabular Figures
zero Slashed Zero
This will all be useful shortly.
Using an OTF font with xelatex
Depending on the package, now it can be as simple as simply including \usepackage{} in your preamble and the font can be used with different weights and shapes, and certain features are enabled. However, sometimes you want more control, or you want to use more than one font in a document. Now the fontspec package is your tool of choice.
The simplest example of using fontspec would be to recall the font name from above, and in your preamble use\setmainfont{Iwona-Regular}This font name has the hyphen in lieu of a space, but names with spaces are just fine. An optional argument will let you customize the use of the font, such as turning on some of the features. Read the fontspec documentation for all the finer points. Hopefully this has given you a start.
Note that fontspec has a Path= option. A tempting shortcut is to just point to the *.otf file in your texmf tree. But as a style writer, this is a really bad idea, since other authors who use your style may have their font files in a different location. Better to employ the font by name and require authors to understand (or learn) their system software.
Create a file (from scratch) containing some Myanmar (Burmese) characters. The Kermit Project UTF-* Sampler is a great source for these sorts of experiments. The Noto font is a project to make a huge collection of harmonious fonts for much of the world's languages. Use what you have learned here to render your sample using a Noto font via both pdflatex and xelatex. Extra credit if you can explain the name Noto.
Plans, as of 2019-11-09
We have experimental code in place to allow a style writer to place font information into the preamble in the right place. We are adding font-changing commands into other configurations in the preamble, so that pieces of a document (e.g.the page header) will automatically use a particular font easily.
We have long been using the polyglossia package to manage multiple languages in one document, and will continue to do so, perhaps. This package relies heavily on fontspec. We intend to hide the details of polyglossia from authors and from style writers, relying on just the specification of xml:lang attributes to control font changes.
Font NotesDyslexic Font
There is an OTF font, with an open license, that purports to help readers with dyslexia.
Website is .
In Debian/Ubuntu it is available in a package called fonts-opendyslexic.
When used with xelatex the relevant names of the font are OpenDyslexic and OpenDyslexicMono.
LaTeX Font Configuration (Ubuntu/Debian Linux)
Actual font installation is missing here, since I (RAB) cannot recall just when or how certain fonts arrived on my system. Certainly they were almost all via Ubuntu/Debian packages, though they could have been specific to Live. Specifically, the texlive-fonts-recommended and texlive-fonts-extra are two packages that will make many fonts available to / on an Ubuntu/Debian system. The following is offered in the hope that it will be useful to other publishers on other Unix-like systems.
There is a system directory/etc/fonts/conf.dwith a wide variety of configuration files for various fonts, or collections of fonts. Here I find files (symlinks, really)65-fonts-lmodern.conf65-fonts-texgyre.confThe first points to the extensive Latin Modern fonts, which are an improved version of the original Computer Modern fonts, and are 's default font for out-of-the-box . We have never had a report of these not being available in an author's distribution. The file indicates that the fonts can be found at/usr/share/texmf/fonts/opentype/public/lm/usr/share/texmf/fonts/opentype/public/lm-mathThe second configuration file points to multiple fonts from the TeX Gyre Collection of GUST: Polska Grupa Użytkowników Systemu . Examining the file indicates these fonts can be found at:/usr/share/texmf/fonts/opentype/public/tex-gyre/usr/share/texmf/fonts/opentype/public/tex-gyre-math
As of 2019-11-09 these were the only fonts known to my system in OTF format. This despite having directories full of fonts at:/usr/share/texlive/texmf-dist/fonts/opentype/usr/share/texlive/texmf-dist/fonts/truetypeand more. You might have similar directories with the year of your version of Live as a directory. The solution is to create a new file (as root) named/etc/fonts/conf.d/09-texlive-fontconfig.confwith contents<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd"><fontconfig> <dir>/usr/share/texlive/texmf-dist/fonts/opentype</dir> <dir>/usr/share/texlive/texmf-dist/fonts/truetype</dir></fontconfig>and then running fc-cache -f -v to update what fonts are known to the system. It is possible that you can put this file somewhere in your home directory if you do not have administrative access, but we have not tested that approach. Note that some versions of the above file that you might find online will include a type1 directory. It is best to not include this directory, since these fonts are best used only with pdflatex and if known to the system they can mistakenly be incorporated by xelatex, with disasterous results. Typically you will get an unusable PDF and your xelatex run will have the error messagexdvipdfmx:fatal: pdf_ref_obj(): passed invalid objectnear the very end of the command-line output.
Apparently, the texlive-fontconfig.conf file is not distributed with Debian Linux as this search will demonstrate. Please report any change in this situation.
When installing the Open Dyslexic font via an Ubuntu package (2020-04-28), xelatex became confused by the presence of Web Open Font Format (WOFF) versions which were installed along with the OTF versions.
The solution is to create a new file (as root) named/etc/fonts/conf.d/70-no-woff.confwith contents<fontconfig> <selectfont> <rejectfont> <glob>/usr/share/fonts/woff/*</glob> </rejectfont> </selectfont></fontconfig>and then running fc-cache -f -v to update what fonts are known to the system. See the tex.stackexchange.com post.
Print and PDF output is created when outputs a file, which can subsequently be easily converted to PDF with engines like pdflatex and xelatex. There are many ways to influence the style (look, appearance) of this output, enhancing the content, but without changing it. This chapter is directed at publishers who desire to create an attractive and consistent design for their books or articles.
Please read this chapter thorougly once before embarking. Certain important points are made in certain contexts, yet are universally applicable. If you cherry-pick, you will miss them. Note also that some simple changes, like font size, are described in .
Preparation
We do not encourage authors to make small adjustments in style, especially if they have few skills in book design. Instead, they should choose a design built by others that will fit their needs and desires. We do encourage publishers with design skills to create complete and harmonious designs, and to donate these back to with an open license, for use by all authors. This chapter assumes you are such a publisher. Further, it assumes you have certain technical skills. Specifically
Good familiarity with basic and .
The ability to debug compilations gone bad.
Willingness to study several packages that may be new to you.
Willingess to mimic and experiment with basic eXtensible Stylsheet Language (XSL).
Fortunately, it is easy to start small, get good results, and expand your skills further.
Begin by creating a file that is a new XSL stylesheet. You can likely safely copy a mature one from the xsl/latex directory. Be certain to keep the first few declarations. The xsl:import is critical, since it will pull in all the basic code for the conversion to . You will be overriding and appending to that code (which has made straightforward). You can start with an absolute path from your filesystem root, but once public a relative path will be necessary. Remove all of the xsl:template elements, leaving a hollow shell to begin working with.
What we are doing here is similar to the discussion of extra XSL stylesheets in , only thicker. String parameters are also described in this Guide, at .
Overview
Some changes in style are effected by setting string parameters that exist for use at the command line. However, the more flexible features come from the selection by of certain packages. These have been chosen for their flexibility, maturity, and stability. They should be part of a full installation, especially one based on TeXLive. We presume each author has a similar installation. Please let us know of any exceptions. Please try to avoid requiring new packages as part of your style, and if necessary, be sure they are mainstream ones. Start a discussion on the development forum if you think it is warranted or necessary. It may be difficult and error-prone for you to employ and integrate an obscure package, and it will cause problems for authors who want to use your style.
This is an incomplete list of the primary packages we employ, and their general purpose. They, and their documentation, can be easily found at the Comprehensive Archive Network, aka CTAN.
Principal packages used for stylesgeometrySpecification of the sizes of paper, margins, headers and footerstitlepsHeaders and footers (part of titlesec)titlesecTitles of divisionstcolorboxBoxes, colors, for example, remark,
Page Shape
Various dimensions of a printed page, including the page itself, may be adjusted using the geometry package, so study the documentation of this package to explore possibilities. The options of this package may be also set on the command line. To make options part of your style, place the xsl:param declaration in your stylesheet as follows (note the two sets of quotes):<xsl:param name="latex.geometry" select="'foo'"/>This will have the effect of placing the following line into the preamble of the resulting output file, in the right place:\geometry{foo}Of course, you will want to use something meaningful, such as<xsl:param name="latex.geometry" select="'a4paper,total={16cm,25cm}'"/>to produce in the output\geometry{a4paper,total={16cm,25cm}}
This is typical and illustrates two important universal points. First, puts surrounding infrastructure in place. In this case the geometry package is loaded, and in an order that does not cause conflicts, plus the \geometry{} command itself is placed and output by . As a style writer, you simply provide the package options you desire. Second, garbage in, garbage out. It is very easy to make a typo in your style, and have the compilation fail. This is why we assume you are comfortable with compilation and debugging, and not every author should be a style writer.
Set the document font size first, for this will influence later choices. The string parameter, latex.font.size (which has pt as part of the value) will set an optimal line width. This line width should translate to about 75 characters per line, at the upper end of recommendations for an optimal width. It will also match closely (but not exactly) to line lengths in HTML output. You can look into the output before you experiment to see the value used when the stock \geometry{} command is issued. You are certainly able to override this width, but read the next paragraph carefully.
This raises two important more universal points. You should expect to repeatedly examine the output as you develop a style. And most importantare you tempted to use a small font, and increase the line width so as to cram more material onto the page, so your book is shorter, and sells via print-on-demand for $7 rather than $8? Then you misunderstood that there are time-tested recommendations for the optimal number of characters per line for human readers, and we just counseled you that is already at the high end of these recommendations. You have a certain freedom as a style writer. Use it responsibly. Enhance the content provided by authors, don't degrade it.
This is the place to think about headers and footers on the page, since you will want to make room for them, and with spacing away from the primary content. See .
Headers and Footers
The titleps package cooperates with traditional divisions, such as \chapter and \section, and the titlesec package, to pick up the titles of divisions automatically and migrate them to headers and footers on a page. The ps is short for page style, and the documentation is a PDF file within the distribution for the titlesec package. Primarily, we let manage the selection of its page styles for various pages of an overall document: empty, plain, headings, and myheadings. does some management in the front matter. As a style writer it is not your concern where these styles are employed, but you do influence what information they contain and were it is placed on a page.
Add an xsl:template to your stylesheet that begins with<xsl:template match="book" mode="titleps-style">This would then set a collection of commands from the titleps package for a book, which will be placed in the correct place in the preamble. (See .) You can renew existing page styles or create new pagestyles. However you should always make your last line a declaration of the overall page style, for example,\pagestyle{headings} Note that a book may use the empty and plain styles for some pages, so you may need to renew those styles to be harmonious with other changes you have made.
The definition of this template will override (replace) the definition given in any imported stylesheet. You can replace the value of the match attribute with article to make your style apply to a article. If your style will be used for both books and articles, and you want the style to be identical for both, you can expand the match attribute to have the value article|book. To have different styles for a book versus an article, make two separate templates.
The titleps package allows at least twelve options per page style: even-numbered page versus odd-numbered page with two-sided printing; left, center, right; header or footer. There are semi-automatic customizable rules, variable widths allowing hanging styles, choices of marks (division at page-start versus division at page-end versus new-division-mid-page, including combinations at the same time), and more. Note that the system of \markleft and \markboth has been abandonded. (Did I hear you say, Good riddance!?)
Some care must be taken with using \thechapter to get the chapter number, since strange things happen in the frontmatter and backmatter, where chapters are numberless. One solution is to use \ifthechapter{}{} which allows you to control the behavior dependent on whether there is a current chapter number. For example, if you wanted the center of the even-numbered pages to contain Chapter 3: Derivatives you would use
\sethead[][\ifthechapter{Chapter \thechapter: }{}\chaptertitle][]{}{}{}
which would then just put Index in the index, and nothing at all in the preface.
A similar approach could be used to deal with section numbers and titles in the case that the introduction of a chapter is multiple pages, using \ifthesection{}{}.
Note also that the macro \chaptertitlename will resolve to Chapter or Appendix as necessary.
Titles of Divisions
The titlesec package cooperates with traditional divisions, such as \chapter and \section, to style the start of each division, containing its title and in most instances, its number. If a division is credited to (multiple) author, then that information can be styled, and there are plans (2018-09-30) for epigraphs.
manages numbered versus unnumbered divisions, the correct level for one-off divisions like a preface or appendix, and the specialized divisions such as exercises and references. A style writer creates two styles at each level of the hierarchy, for a numbered variant, and an unnumbered variant. titlesec uses a numberless key to indicate the latter. A named template, such as<xsl:template name="titlesec-section-style">would produce text containing complete titlesec commands \titleformat and \titlespacing in both numbered and unnumbered variants.
There are five macros created by at the start of each division. For example, \authorsptx is a comma-separated list of the content of all the author elements for the division, in the order given. Look in the output to find the others nearby. A robust style will include this information, even if the first use of the style may not have any divisions credited to others.
The table of contents and the index are created by a single macro. This creates a small technical challenge, since never has a chance to write the contents of the heading and must take what it is given. The upshot is that the \titleptx macro will be wrong or empty. So instead, use the titlesec device of using the macro parameter #1 for the title in the correct argument of \titleformat. We have enabled this possibility through the package's explicit option. We believe the numberless variant of a chapter of a book, and the numberless variant of a section of an article, are the only places this is necessary. 2019-09-30: we will contemplate if this should be the rule and the \titleptx macro will go away. Advise if you see a good answer, either way.
2019-09-30: these templates are highly likely to break into two modes (format and spacing), with a match that can react to chapter, section, , perhaps differently for books versus articles. The change will only imply some minor editing to achieve the same end result, so don't hold back waiting.
Environments and Blocks
Objects like example and remark are almost invariably children of a division, numbered, and work best with a title. tcolorbox is a massive package, that we have taken to as a solution to many under-the-bonnet technical problems, such as a hanging indent for numbers of exercise or laying out the panels of a sidebyside. But it also allows an incredible variety of styling options for these intermediate chunks of text. Think of variable placements of numbers and titles, borders and boxes, and colored backgrounds. With freedom comes responsibility! With a light touch, you can help your reader navigate the inherent structure of your source.
Whatever you call them: environments, blocks, or information objects, almost every one can be styled separately (2019-09-30: not captioned items yet, such as figure). For example,<xsl:template match="example" mode="tcb-style"> <xsl:text>colback=pink,</xsl:text></xsl:template>would cause the background of every example to be light red in color. To make every element that is a variant of an example look identical, use one of the entities defined in xsl/entities.ent,<xsl:template match="&EXAMPLE-LIKE;" mode="tcb-style"> <xsl:text>colback=pink,</xsl:text></xsl:template>. This would affect example, question, and problem, and future-proof your style when there is a demand for illustration as a new kind of example-like.
There is only one mode, but it can handle a variety of elements in the match. The text produced by the template will be supplied in a named tcolorbox style via a \tcbset{} command. It is marginally more complicated than that. will manage certain aspects of creating a tcolorbox, such as forming the tcolorboxtitle to be a string like Example 4.5 The Chain Rule., or just Example 4.6 when an author does not include a title. As a style writer, you can change the font, color and placement of that string, but not the use of the type-name, the number, the title, or their order. The text of your template is additive, meaning it is in addition to what the stock conversion provides. Your options come last, so will be new and effective, or will replace what the base conversion to does. So in the example above, the base conversion to has colback=white (rather than the default gray!), and this will be overridden since pink will come later.
Preamble and Experimentation
Two hooks are provided to allow for arbitrary additions to the preamble. It should go without saying that this is for experimenting with new features and is no way supported, including, but not limited to, interactions with current packages in use, or those added in the future.
Arbitrary text () used as the values of the string parameters latex.preamble.early and latex.preamble.late will be added to the very beginning, or very end (respectively), of the generated preamble.
XSL 101
If you have read this far, and read carefully, you have been exposed to several key principles of writing XSL. Basically you are creating templates which the base conversion will call in exactly the right place. In a procedural language these might be called hooks. Besides a smooth integration with the rest of there are several advantages:
A template using a match can apply narrowly or broadly. Witness the example above for example versus &EXAMPLE-LIKE;. This attribute is similar to a this pointer in an object-oriented language and the modal template is not dissimilar to a method.
has a discovery phase when it constructs the preamble. If your source has no example in it, then there will be no associated tcolorbox style added to the preamble, and the example environment will not be defined. So the preamble is exactly what your document needs, and no more (mostly). The match attribute makes this possible.
You have seen named templates, which will feel familiar if you know procedural languages. While perhaps comfortable, they are way less powerful, and we noted that we may get rid of them.
The xsl:import mechanism allows us to keep base definitions and override others. So as you develop your style, you do not need to start from scratch.
Be aware that every single character that you put inside the xsl:text element will get copied literally into the preamble of your output, including newlines and spaces you use to indent in your XSL. Conversely, any whitespace inside your template, but between the xsl:text elements is ignored. So we like to use multiple xsl:text elements (except we were a bit lazy getting this out the door initiallydo as we say, not as we do) and explicitly create newlines with the 
 character. Your goal is to have a preamble with no blank lines and no unintended indentation. We often create comment lines (with two leading % characters to aid with readability.
See the website for recommendations for books on XSL if you are encouraged to learn more.
Testing and Debugging
The sample article tries to have one of everything, plus a few torture tests. It is a good place to test initially, especially with the tcb-style templates. The sample book is less haphazard, but does have most of the structure a typical book would have. So if you are designing for a book it is a good place to test page styles, headers and footers, and division titles. (2019-09-30: it is possible part has not been tested thorougly enough yet.)
When things go bad, such as a non-obvious compilation, it can help to stop working with source, and instead edit the generated until the problem is understood.
We do not expect to provide great support for this process. First, because new code and basic support already keeps us busy, and second, because you have the freedom to really make a mess, and thus you should take responsibility for the problem. When you are certain that has done something wrong or inadvisable, please, please do post in the development forum with a careful explanation and a (minimal) example. It will happen. Just don't use the forums as a replacement for this documentation or a bit of sleuthing through the that you are now creating. With freedom comes responsibilty. Thanks.
Justified Text
We employ the package, microtype to enhance 's algorithms for spacing text. See for some explanation. The package admits a great deal of fine-tuning, and we make it easy to pass in options via a template included as part of the styling.
If you were using pdflatex you might include in your styling:<xsl:template name="microtype-options"> <xsl:text>protrusion=true,expansion</xsl:text></xsl:template>This would have the effect of putting\usepackage[protrusion=true,expansion]{microtype}into your output file. Study the microtype documentation for possibilities.
Planned Additions
Some items to include, as of 2019-09-30:
Color schemes, so an author can use a style and just change the colors with a very simple stylesheet.
Font control, so a style writer has simple instructions that navigate 's procedures.
Flexibility with the building blocks of a title page.
Cover design and placement.
================================================
FILE: doc/guide/publisher/online-html.xml
================================================
Conversion to Online HTML
This chapter describes way a publisher can adjust the presentation of content in an inline format, without actually changing that content. Similar to the case for conversion () there is a variety of options which may be configured. As of 2022-10-24 we are transitioning away from string parameters () to using a publication file (), which is simultaneously being documented carefully. During the transition you can explore xsl/pretext-html.xsl by searching on the use of xsl:param at the outermost level (i.e. starting in column 1).
HTML Publisher Optionsindex.html Pageindex pageHTMLHTMLindex page
The conversion to HTMLalways creates a file named index.html. We do this because if a reader requests the URLplatypus.mammal-institute.org/aota/htmlthen most modern web servers will automatically return the pageplatypus.mammal-institute.org/aota/html/index.htmlSo you can advertise the shorter version to potential readers. What is in index.html? Simple code to redirect to another one of your pages. Which one? Any one you like!
Within the publication element of your publication file () include an html element, with a child element index-page having an attribute ref. The value must be the xml:id of a division which is rendered as an entire web page at the requested level of chunking. See for details on specifying this option.
For example, if a book is being chunked into chapter, and your source has<chapter xml:id="birds">then you can set ref="birds" and the page for that chapter will be the default page for the shorter URL. In practice, you probably really want a page that looks like the front matter or a Table of Contents.
The default is to first have index.html redirect to a page for the frontmatter, and if this is not possible, then it will redirect to a page for the top-level of your content. If your document is short or simple, you may just have a single web page. You could choose to not distribute the index.html file and then just use a concise and descriptive xml:id for your top-level element (e.g. article) to fashion an attractive URL that points to your shorter work.
Banner ContentsHTMLbanner content
The top of page banner normally features the title, subtitle, and author. If the subtitle or author list are long, or not particularly relevant for a given work, the publisher may wish to not render them at the top of each page. Of course, this information will still always be available at least once in places equivalent to a title page in the front of your document. See for details on specifying what to display.
Embedded Calculatorcalculatorembedded in HTML
You may elect to have an embedded online calculator in each page of your online version. It will appear in the right margin, and will stay there as a reader scrolls the page up and down. A button near the masthead can be used to contol visibility. By default no calculator is available, so you need to explicitly request this feature. As of 2020-05-30 there are four calculators available from the
GeoGebra Project. See for details on specifying this option.
HTML Favicon Configurationfavicon
A favicon is a graphical element (icon) that identifies a website. Perhaps its most recognizable use is its appearance in every browser tab open at that site. As publisher, you can associate an icon for your project to the HTML output of your project.
See for details on this specification. When the attribute value is none (the default), then your pages will not have a favicon.
If you set the attribute to simple then you must provide two versions of your icon, in PNG format, in pixel sizes 1616 and 3232, with exactly the two filenames below (respectively), in the directory of provided external files ().favicon/favicon-16x16.pngfavicon/favicon-32x32.pngThere are other ways to specify a favicon and some browsers expect different files. Try this scheme first, as it appears to have been sufficient since 2018. But if a new scheme needs implementation, we can consider a feature request.
ActiveCode Programming WindowsActiveCodewindow in HTML
A window that allows for entering, and executing, computer programs can be made available for every page. The reader can click on a pencil icon to activate this window. Some languages can run in a web browser as part of any HTML output, while some other languages require infrastructure on a Runestone server to execute, and so are only available when you specify that hosting option. Note that the publisher will select a single language for use with the entire document. See for details on specifying this option.
Base URLbase URLURLbase
The base URL of a hosted version of HTML output may be specified as an entry in a publication file. Then certain aspects of other output (typically PDF/) will link to corresponding aspects of the HTML output. See for the specifics of this entry. Examples of use include links from Asymptote graphics (), and URLs pointing to locally-hosted data files ().
Privacy Options for Video EmbeddingvideoHTMLprivacyvideo
When videos are embedded in HTML from sites like YouTube or Vimeo,
they come with whatever tracking cookies these sites want to include. Some of these can be helpful; for example, to let the viewer keep track of what they have watched.
Others are designed to target advertising, and load when the page loads, rather than when the video plays, which can increase the time it takes for your book to load.
Currently YouTube offers an enhanced privacy mode that disables tracking cookies on page load.
The assumption is that publishers will want to protect their readers' privacy and optimage page load time, so this mode is turned on by default for YouTube videos.
It is not known to be available for other platforms, but can be added if this changes. Note that the behavior and appearance of your videos may change slightly depending on which option you choose.
Within the publication element of your publication file include an html element, with a child element video having an attribute privacy.
The value must be either yes (use enhanced privacy, if available), or no (allow all tracking cookies).
If your publication file does not have this element (or you do not have a publication file) you will get a warning message, and the default will be used. See for details on specifying this option.
Links to full-size versions of Asymptote diagramsAsymptote linksHTMLHTMLAsymptote links
Asymptote diagrams are embedded in HTML as a canvas element within an iframe.
Unlike image elements, web browsers will not provide the option to view image, and clicking on the image will not enlarge it.
Since 3D Asymptote diagrams are interactive, a reader may wish that they could interact with a larger version of the graphic.
You may elect to place a Link to full-sized image link below each Asymptote diagram.
Clicking on the link will open the Asymptote HTML file directly, and the digram will be displayed at a much larger size.
See for the specifics of this entry. This feature is off by default.
HTML Feedback ButtonHTMLfeedback buttonfeedback buttonHTML
You can elect to have a Feedback button in the footer of your HTML pages. You must provide a URL via an attribute. But where that URL points, and what happens there, is your responsibility. In other words, is no more help here, you just get a functional button pointing somewhere of your choosing or design. An example use case may be that you want to make it very easy for your readers to submit reports of small errors, like typos. So you setup an online form with a free service, which will help you manage this communication. Or maybe you want to run a reader survey via a form, so you point to that.
The default text on the button is Feedback, which will be in the language in effect for the page. You can override this choice (e.g., Bug Report), but it needs to be raw text (no markup) and then it will not react to language changes for your document. See for precise details.
HTML NavigationAsymptote linksHTMLHTMLAsymptote links
There are publisher file entries to control how navigation between pages behaves. The Up button may be turned on and off. An entry for the logic of these buttons can be set to the values of linear (the default) or tree. The former causes the Previous and Next buttons to behave as if the divisions are arranged as in a printed book, i.e. linearly. The latter option means that when a reader comes to the last subdivision of a division, the Next button will be not be active, and they will need to return (up the hierarchy/tree) to the division and move to the next division. Turning off the Up button while electing the tree model is likely to lead to a frustrating navigation experience.
The HTML target offers two views of the Table of Contents (ToC). The default is to fully expand the ToC to the depth indicated by the the common Table of Contents level publisher setting. There is also a focused view that uses an expandable ToC and only initially fully expands the path to the current page.
See and for the exact syntax of these options.
Knowled Content
A knowl is a feature of the online conversion. It is text that you can click on, and nearby some content is revealed. You can click it again to hide that content. You can find a variety of examples in the Sample Article, or other projects.
Knowls come in two different types:
A born-hidden knowl or born-as knowl is content that is contained in a knowl at the location where it first appears. Typical examples are footnotes, hints to exercises, or proofs of theorems. In other words, these small units of content are hidden behind knowls in the location where they naturally belong. Some content (e.g. footnotes and exercise solutions) are alwaysknowled, while other content (e.g. an inline exercise) can be knowled, or not, as a choice made by the publisher via the Publisher's File (). For exact details on influencing knowlization see the reference material in .
An author does not need to be conscious of knowls. The structure and content of the document should not be aware that there will be knowls in the online output. But instead the publisher has control over whether or not certain medium-sized pieces of content (examples, exercises, figures, etc.) are born as knowls or not.
Note that some of these switches are for broad categories of items, for example, choosing to knowl theorems will also knowl lemmas, corollarys, facts, and more. See for precise details. This choice applies document-wide, there is no plan to support electing this on a case-by-case basis.
By contrast, a cross-reference knowl or an xref knowl is content that is a duplicate of some other content, in another location, as a result of an author making an xref cross-reference in their source. So a cross-reference in Chapter8 to Example4.6 will open the content of the example in the knowl, rather than transporting the reader backwards four chapters. If the reader does want to see the example in its original context in Chapter 4, then the knowl finishes with an in-context link that functions as a traditional hyperlink. Almost every cross-reference is a knowl, except when the target is a divisionthen a traditional hyperlink is used, since rendering an entire division as a knowl is unwieldy. Should knowls not be desired, there is a publisher level switch to render all xrefs as traditional links. See for details.
The presence of the in-context link is one way to tell the difference between the two - born-hidden knowls will not have an in-context link, while cross-reference knowls will. Locators in the index () are mostly cross-reference knowls. Knowls are used a few other places, such as in a list of notation.
Permalinks
If you place a mouse pointer in the left margin, to the left of a heading for an item, then an icon with two links of a chain will appear. This is a link to the item. Instead of a doing a right-click for a context menu that has an option like Copy Link Location, rather do a normal (left-) click. This will copy the heading (Example 4.5 Chameleon Colors), and also the link itself, to your clipboard, along with some formatting. You can then paste this into course materials, or email it to a reader who had a question.
You might want to make this feature known to your readers, perhaps via a preface explaining some of the more novel features of the HTML version of a document.
Lists
Lists with several columns are rendered in row-major order, as of 2018-02-28. In other words, the first list items (li) in your source will populate the first row.
Index Style
Start at to learn how to create an index. The realization of the index for online output is implemented within . We have made certain stylistic choices, in addition to taking advantage of certain features of the online format.
A one-column format.
Indented subheadings (not run-in).
Maximum two levels of subheadings.
Word-by-word sort order on headings.
Locators for divisions are hyperlinks.
Locators for smaller units are knowls.
Page ranges use the initial location.
No running heads (yet).
A headnote can be accomplished with an introduction.
Some of these choices would be easy to adjust or extend as the result of a feature request.
Also, there can be significant differences between how implements the index for HTML and how the imakeidx package creates an index for . See and .
StylingstyleHTML
The conversion to HTML creates standard HTML elements, with styles controlled by CSS via class names (and not so much via the element names). As evidence of this, building HTML without the accompanying Javascript and CSS renders in a readable fashion, albeit quite plain (as one would expect).
This HTML is styled with CSS to create the output that a reader sees. There are multiple themes that a publisher can choose from to render the pages in different styles. Below are samples of available themes. See for the syntax for specifying a theme and options like the color palette to use.
Themes
There are multiple themes that define different appearances for HTML output. Currently available themes include:
default-modern An updated version of the traditional PreTeXt theme.
Screenshot of the default-modern theme
tacoma A theme with minimal decorations and colors. A minimalistic presentation of the contents.
Screenshot of the tacoma theme
denver A theme that uses bolder structural elements and colors.
Screenshot of the denver theme
greeley A theme designed for short documents like academic papers.
Screenshot of the greeley theme
salem A theme that is optimized for displaying wide interactive elements (such as Active Code and Parsons).
Screenshot of the salem theme
boulder A minimal theme designed to mimic a LaTeX pdf for academic paper (no masthead).
Screenshot of the boulder theme
Development
Please join us on the pretext-dev discussion group if you want to create alternate themes.
Analyticsanalytics
makes it as easy as possible to have services provide data about visitors to the HTML version of your book. We support Google Analytics and StatCounter.
In each case, use is similar. Begin at the service's site and follow their instructions for enabling data collection for your book's site. We will not document those instructions here. Do not copy the identification numbers from another projectbe sure to obtain your own for your project. When completed, you can request (or will be shown) sample Javascript code to add to pages on your site. Except, is going to do that part for you. You only need to provide the unique identifiers used by the service that identify your project. Because these sign-ups are dependent on your site, this is a publisher activity, and hence configured with the publication file (), see for details.
StatCounter uses two identifiers, a project ID and a security code. Do not copy the identification numbers from another projectbe sure to obtain your own for your project. You can find them in your Project Config under Settings. Or the code provided will contain lines such asvar sc_project=11538430;var sc_invisible=1;var sc_security="72e1390a";In which case your publication file would have an element under html like<analytics statcounter-project="11538430" statcounter-security"72e1390a"/>
Google Analytics comes in several flavors. We once supported Classic and Universal, but no longer, so we do not provide documentation here. For the replacement, Google Global Site Tag is a single ID. Do not copy the identification numbers from another projectbe sure to obtain your own for your project. Google once called this a tracking ID, which may also be called a property ID; these looked like UA-6836004-1. Google has now switched to Google Analytics 4 and is exclusively using the form of a Google Tag ID/Measurement ID which will look similar to G-CQG9X37H61; you will need to upgrade your analytics if you used the older style tag. In any case your publication file would have an element under html like<analytics google-gst="G-CQG9X37H61"/>If you use both services, you can elect to use just one analytics element with several attributes.
We would be happy to provide support for additional major services. Just make a feature request.
Native Searchsearchnative
Client-side search is supported natively by a Javascript library. Search results are tuned to leverage the structure of your project. As such, development and support will favor this approach over our legacy support for an online service ().
There are two tunings of search.
Textbook
This is the default. Results are presented in order of appearance, on the assumption that a reader is following the text in a linear order and knows their current location. Visual clues will reflect the relevance of each result.
Reference
This assumes a document is more like a reference work and is accessed randomly. Results are not in order of appearnce, but rather early results will likely be more relevant.
Employing a switch in the publication file will provide search boxes (top banner, lower-right corner) and all the supporting infrastructure. See for details.
Google SearchsearchGoogle
Note: as of 2022-10-27 we have search supported by an online service from Google and a client-side (native)version supported by Javascript (). Development and support will favor the latter.
Search facilities can be enabled through Google Custom Search EngineGoogle Custom Search Engine. Please, please report any discrepancies in the following instructions as the setup interface at Google changes out from underneath us. These instructions have been updated as of 2020-10-01.
Besides being useful for search facilities, setting up a search engine might be a good way to alert Google of something newly available, and initiate your book's rise up the search results rankings.
Configuring Google Custom Search
Create an account with Google (GMail, YouTube, ) and make sure you are signed in.
Visit GCSE and add a new search engine via New Search Engine.
Provide a URL for the top-level domain name/directory for your book/document. Everything below this will be indexed. We have taken some care to mark knowl content in a way compatible with the search facility, but there is more work to do here.
Give the engine a GCSE-specific name, so you can tell later which one it is when you have several.
Under Edit Search Engine in the Basics tab locate Search engine ID which has a string that uniquely identifies your new search engine. Save this, you'll need to make it part of your document.
Under the Users tab add co-authors or trusted backup personnel.
Fiddle with Edit Search Engine > Look and Feel at your own risk! Only the defaults are tested and supported.
Provisions for removing advertisements for non-profit sites seem to have changed. If your university already contracts with Google, you should investigate having a SuperAdmin at your institution so this setup for you, and make you a trusted collaborator. Then it should be an easy matter to turn off advertisements.
Configuring for Google Search
Because these sign-ups are dependent on your site, this is a publisher activity, and hence configured with the publication file (), see for details.
The Search engine ID you saved from above is referenced in Google's code as a cx number. An example looks like 482cf73dc05bed674 (older examples looked like 002673997130187229905:qjo2y0jplyu). In which case your publication file would have an element under html like<search google-cx="482cf73dc05bed674"/>
The search/@google-cx attribute will alert the conversion and fully enable and implement search. You are done, and everything should just work. You should see a Google-branded search box to the top right of each of your pages. (We have no control over the branding.)
Time to rebuild your HTML output and make the improved version available.
Single Page HTML
Sometimes you would like a shorter work to be a single file in HTML format. Perhaps it is something self-contained, like a course syllabus, or you desire to attach it easily to an email or other post. This section contains advice and procedures you can use to achieve this.
The primary mechanism for limiting the number of files in an HTML build is to set the portable attribute of publication/html/platform to "yes" (see ). This will automatically take care of the following.
Use hosted (CDN) versions of the CSS and javascript files rather than including them in your output directory.
Embed generated SVG images in the HTML (anything from prefigure or latex-image).
Embed the search code in the HTML (if you are using the )
Set all xref knowls to behave like links (same as setting /publication/html/cross-references/@knowled to never).
Produce a single file will all your chapters/sections/subsections in it (the same as setting /publication/common/chunking/@level to 0).
Prevent the generation of most extra standalone pages (such as for most interactive elements and worksheets).
Not produce the standard index.html file that is otherwise used to redirect to the main page.
Keep in mind that if your document has external assets, or uses generated assets that are not converted to SVG, these assets will still be needed in your output (regardless, you will get external and generated directories for your assets, but these might be empty or not needed). Additionally, some interactive elements work by creating an iframe that loads an HTML file, and these cannot be avoided currently.
Finally, depending on the purpose of your document, you might consider using a simpler theme. The boulder theme is designed to look like a -produced PDF; it doesn't have any masthead, which makes sense for a single page document. Other style options are described in .
For very small documents, you might also consider turning off the table of contents by setting /publication/common/tableofcontents/@level to 0 (see ).
HTML in an LMS
If you are using to author course materials, you may want to include the resulting HTML in your LMS (Learning Management System) course shell.
While uploading PDFs can also be useful for students to print from, many universities require the documents to also be made available in accessible formats, so HTML is likely your best option.
Depending on which LMS you use, and possibly what settings have been applied to your course shell, you may be able to upload a portable HTML file, as described in . This seems to work with Moodle, but not with Canvas, which blocks javascript inside uploaded files (the Javascript is required to render the MathJax math content). In this case, you have two options:
Host your HTML output on a web server (such as using pretext deploy to publish your files to GitHub pages) and then link to the content or embed it in your LMS using an iframe. To make embedding easier, you can turn on an embed this page button by setting /publication/html/@embed-button to yes in the publication file (see ).
Once your page is published, click on the button and copy the code to your clipboard. In the LMS, create a page in your course shell. There is likely an embed code button in the editor interface of your LMS where you can paste what you copied from the page. When you save the page in your LMS, you should see just the inner content of the pretext page (no table of contents or navigation). However, the page should be fully functional, including interactive elements and MathJax rendered math (so it will be screen reader friendly).
If you need to keep your document private to your course (for example, maybe it is a set of exam solutions you don't want to publish on the open web), you can produce a SCORMSharable Content Object Reference Model archive of your document. To do this, in your project.ptx manifest, set compression to scorm for the HTML target you want to build.
will produce the HTML inside a .zip archive which will also include a SCORM manifest that tells your LMS how to display the content. You can then upload this SCORM file to your LMS and add it as a page. In Canvas, you can do this by adding SCORM to your course navigation in settings and then clicking the upload button on that page. Brightspace (D2L) lets you upload SCORM files from a page-creation menu. See the documentation for your LMS for additional help.
================================================
FILE: doc/guide/publisher/open-licenses.xml
================================================
Copyright and Licensing
The legal issues described here are based on the authors' experiences and study, which necessarily reflect the laws of the United States. But the Berne Convention, which dates to 1886, has 172 parties, so law and practice are very similar the world over. The United States acceded to the convention in 1988.
Copyright
Copyright is a monopoly granted by the government. It gives the author control over reproductions, translations, adaptations, performances, communications, of their work for a fixed time. Since 1978, it has not been necessary to register a copyrightit is automatic. So for example, every web page, no matter how simple or unrefined, is copyrighted by its author.
The phrase All Rights Reserved is used to assert that the copyright holder intends to exercise all the rights granted by copyright. It is not required to mark a document with the copyright symbol () but in case of disputes, it can be helpful.
So in you can go<frontmatter> <colophon> <copyright> <holder>Thomas Jefferson</holder> <year>1776</year> <minilicense>All Rights Reserved</minilicense> </copyright> </colophon></frontmatter>to assert a traditional copyright and the recommended information will then appear on the page after the title page.
In academic publishing, authors have usually transferred, or sold, their copyright to a publisher in return for distribution of their work, or for the promise of financial gain.
Open Licenses
Copyright allows an author to place a license on their work, granting others greater freedoms, sometimes along with certain specific obligations. So it is important to understand that copyright allows an author or publisher to be very restrictive, and it also allows an author or publisher to be less restrictive. A license makes these less restrictive terms explicit, and the ability to control these terms is made possible by copyright.
Generally an open license allows unlimited copying. It often allows the creation of derivative works, and the mixing of material from a variety of openly licensed documents. A viral license obliges the author of a derivative work to grant the same license to the derivative work, rather than asserting more restrictive terms. The licenses are usually perpetual, so they do not expire at a fixed term.
It is easy to get distracted by legal jargon, obtuse arguments, and misunderstandings. We view an open license as statement of intent. The work is free to use forever. It will not go out of print. If you send the author a correction, suggestion, or contribution, it can be incorporated and enjoyed by others freely. And should an author lose interest in a project, or become unable to continue working on it, another individual may take it up and continue to maintain it.
Creative Commons Licenses
We describe the Creative Commons (CC) licenses first, since they have various options, which are a convenient way to compartmentalize and describe the features of other open licenses. They are known by abbreviations, so a license might be shortened to something like just CC BY-SA.
Creative Commons Options
Creative Commons, CC
All Creative Commons licenses allows unlimited copying, forever. Unless restricted, derivative works are allowed with no obligation.
Attribution, BY
A derivative work must make clear the contribution of the original author.
Share Alike, SA
A derivative work must be licensed with the same license as the original.
Non-Commercial, NC
Bans commercial uses. (Without this clause an open license would allow the sale of copies.)
No Derivatives, ND
Derivative works are not allowed.
Source versus Output
Creative Commons licenses are designed for a variety of media, and so are very popular. For example, images are often licensed with a Creative Commons license.
However, consider the case of a document distributed as a PDF which has been created from source, such as or or Markdown. An author may put a CC BY-SA license on the PDF while retaining traditional copyright on the source file(s). While the license allows modification, how practical is it to modify a PDF? Worse, we have seen this situation for projects described as open source. This explains our use sometimes of the term openly licensed content.
If you are serious about your project being open source, and you want to send that signal to your readers, then mark your output with a CC license and mark your source files as also having the same CC license. This is usually accomplished by a statement at the top of each source file asserting copyright and then stating the license. Or this statement can point to a top-level text file, often named COPYING or LICENSE, with more precise license information. See the distribution for examples using the GPL software license.
Commercial Consideration
It is natural to consider that you have devoted considerable time and effort to your project, and with an open license you will now be donating it to the world to read for free. So you might think, Why should somebody else profit? Thus, the NC option is alluring. But think about it for a minute.
Suppose a commercial publisher hires an experienced copy editor to go through your book, correcting errors and tightening the prose. Then the publisher prints the improved version of your book in a nice hardback version, and sells the book for $250. If you simply put the BY-SA options on your license, that publisher is obligated to (a) give you credit for authoring the original version of the book, and (b) make the copy-edited version available again with a CC BY-SA license. Now there is a business opportunity for anybody in the world: make a print-on-demand version of the copy-edited version, and sell it for $200. Then it is a race to the bottom. Eventually the price will come down to the cost of manufacturing, plus some small compensation for managing the relationship with a print-on-demand service . Just how much profit potential is there really available for others?
We assume you have written a book because you have something to say, and chosen an open license because you want to be read. If you do place an NC option on your CC license, then you have made it impossible for anybody else to help you distribute your book in physical forms. A CC BY-SA license already makes your work unattractive to a commercial publisher who wants to charge an unreasonable price, and adding an NC clause simply chokes off some distribution options, limiting the reach of your work.
This discussion is meant to explain why we call it the CC-NC mistake.
Derivative Works
Will your monograph on the reptiles of the Mongolian steppes ever become a screenplay? As exciting as the topic is to you, we think Hollywood feels otherwise. An ND option probably makes little sense for scholarly works. An conversely, if you get hit by a pie truck tomorrow, it will be a lot easier for an enthusiastic reader to take over custody and maintenance of your project, and they will be required to continue with the same license if you have employed the SA option.
So in you can go<frontmatter> <colophon> <copyright> <holder>Steve Jobs</holder> <year>1984</year> <minilicense>Creative Commons BY-SA</minilicense> </copyright> </colophon></frontmatter>for a CC license with the Attribution and Share-Alike options. If it was not obvious already, this is our recommendation for scholarly work if you choose to use a Creative Commons license. This is an example of what is known as a copyleft license.
GNU Free Documentation License
The GNU Free Documentation License (GFDL) is a license designed for documentation of open source computer programs licensed by the GNU Public License (GPL). However, it explicitly mentions textbooks as one possible use. (GNU is a recursive acronym for GNU's Not Unix and is the software project that originally built all the utilities which complement the Linux Kernel to make up an operating system.)
The GFDL is similar to a CC BY-SA license. It allows unlimited copying, forever. Modified versions that are distributed must acknowledge the original contributions and must also carry a GFDL license. So this is a viral license, always. And another example of copyleft.
However, the GFDL does not employ options like a Creative Commons license. More importantly, the GFDL is very explicit about source (transparent copies) and derived output (opaque copies), and the license applies to both versions. So the GFDL would say source is transparent, and a resulting PDF is opaque, and the license largely treats them identically.
Because the GFDL has the essential characteristics of CC BY-SA, and is so explicit about simultaneously licensing document source authored with a markup language along with output formats, it is our choice for textbook projects.
So in we might go something like<frontmatter> <colophon> <copyright> <holder>Richard Stallman</holder> <year>1985</year> <minilicense>GNU Free Documentation License</minilicense> </copyright> </colophon></frontmatter>The GFDL is also explicit about including the complete license with your document. You can find various places a version formatted for inclusion in a project, including as part of the source for this document.
Public Domain
Stating that your work is in the public domain basically means you relinquish all the rights you receive via your automatic copyright. So it is a very different situation from using copyright to provide an open license. Creative Commons uses CC0, No Rights Reserved to indicate this choice.
Remixing and License Compatibility
It is popular to describe the potential of remixing parts of open educational resources. For example, a literature professor might collect a variety of openly licensed poems into a reader for students in a course. When the licenses are viral, and different, there arises the problem of what license to put on the collection. Worse, one license might prohibit commercial uses, and another allow it, meaning the licenses are incompatible.
So some thought should go into the choice of a license when the work has the very real potential to be included in another, such as would be the case with a photograph. One solution is to provide more than one license (nothing about copyright prohibits this). Another solution is to avoid licenses with overly restrictive terms, such as restricting commercial use or derivative works.
Remember too, that in addition to multiple licenses, as the copyright holder you may offer your work to another project on different terms. So another author might ask if a chapter of your work may be included in their project, which might use a different license than yours (more or less restrictive), and yu can grant permission for that use under that license. Now there are two versions of your chapter, which could diverge over time if derivatives are allowed, available to others on different terms.
For mathematics books, we do not concern ourselves too much with the potential for remixing. Notation and dependencies make it hard to collect parts of various textbooks and assemble them into something new (and coherent).
Creative Commons maintains a matrix showing compatibility between their own licenses at their FAQ question, Can I combine material under different Creative Commons licenses in my work?, illustrating just how complicated this can become.
Finally, recognize that you can begin with a restrictive license and as you become more comfortable with the idea, change it to a more liberal license that applies to the work at the time of the change. Further, you can always change your license to a more restrictive version, but invariably, you cannot revoke an open license once granted. You could even stop offering an open license all together, and return to traditional copyright as you continue to improve your document. But the version that existed when you made that decision is still available for anyone to use, and possibly improve, independent of your own closed version.
After a while, you realize that openly licensing your writing project gives it an independence and freedom all of its own. It seems to be owned by everybody, and by nobodyat the same time.
A Final Comment
These discussions remind us of a letter by Thomas Jefferson, the principal author of the United States' Declaration of Independence, writing about another monoply granted by governmentspatents.
If nature has made any one thing less susceptible than all others of exclusive property, it is the action of the thinking power called an idea, which an individual may exclusively possess as long as he keeps it to himself; but the moment it is divulged, it forces itself into the possession of every one, and the receiver cannot dispossess himself of it. Its peculiar character, too, is that no one possesses the less, because every other possesses the whole of it. He who receives an idea from me, receives instruction himself without lessening mine; as he who lights his taper at mine, receives light without darkening me. That ideas should freely spread from one to another over the globe, for the moral and mutual instruction of man, and improvement of his condition, seems to have been peculiarly and benevolently designed by nature, when she made them, like fire, expansible over all space, without lessening their density in any point, and like the air in which we breathe, move, and have our physical being, incapable of confinement or exclusive appropriation.
Thomas JeffersonLetter to Isaac McPhersonAugust 13, 1813
================================================
FILE: doc/guide/publisher/pdf-print.xml
================================================
Conversion to PDF and Printprint optionLaTeX, PDFelectronic optionLaTeX, PDFLaTeXprint optionLaTeXelectronic optionPDFprint optionPDFelectronic option
This chapter describes ways a publisher can adjust the presentation of content for a print format, or an electronic facsimile (i.e. PDF).
Electronic versus Print
The stylesheet pretext-latex.xsl can produce two very similar outputs. Each is a file in syntax, which can be converted to a PDF with a executable (engine). However, there are two purposes for such a PDF. The first is a document which is meant to be read on a screen. We call this an electronic PDF. The second is meant to be printed as a physical book, so it would be the file you provide to a copy shop, campus bookstore, or print-on-demand service (see ). We call this a print PDF. So as you read this, keep in mind that the conversion is really two-converters-in-one.
To illustrate the difference, an electronic PDF will contain cross-references that are active, and colored to be obvious to the reader. For the print PDF the same cross-reference will be black, inactive, and by default contain the page number of the target. Another difference is the print PDF will include trailing parentheticals with the content of visual when using url. This allows readers of the print version to visit a URL that has clickable text in other formats.
A wide figure, table, list, or listing will be presented horizontally by default, but including a landscape attribute whose value is yes will rotate these blocks by 90 in print PDF output (only) to take advantage of the full page height. This is presently only supported by images given by a source and with an extension provided in the filename.
The publication file entry latex/@print controls the selection of the two output modes of this single stylesheet. The default is no for the electronic version, and yes will change to the print version. See for the specifics of this entry.
In this chapter, we describe both of these two conversions together, since they are only slightly dissimilar.
Traditional Publishing
Suppose that you have engaged a publisher to help you manufacture a physical copy of your book or research article. Publishers vary greatly in their expectations for what you provide to them. (And maybe you are your own publisher, see .)
If your publisher wants to run with camera-ready copy from you as a PDF, you should be in good shape. With the print option (versus electronic, see ) and a bit of effort to control widows, orphans, and figure placement, you should be able to produce something very good by yourself.
In mathematics, computer science, physics, or economics, a publisher might want to work from your files, which they will assume you have written from scratch. And they may expect to be able to swap in their house class or style file to achieve the look they want. A file will look a bit unusual, see . On 2022-11-22 we have a report of a very extensive research article written in and uploaded to the arXiv preprint server, where it was successfully processed by pdflatex on the server, with only minimal hand-edits to the intermediate file. We can always improve in this area, so we welcome reports, good and bad, about the robustness of our output when delivered to publishers.
Text Block Alignment
is engineered around placing boxes on the page. Characters in boxes are built up to be words, then words in boxes become lines, and then lines in boxes become pages. Or something close to that. As a consequence excels at right-justified text. For this reason, and also because we think it looks more like a commercial published book and therefore more professional, right-justified text is the default. If your opinions on this come from experience with some other word processor, keep an open mind. Note too, that paradoxically, sometimes a ragged-right alignment can lead to greater amounts of hyphenation.
Similarly, can make the bottom of the text block always land at exactly the same place. This is especially pleasing if you are targeting two-sided printing, since you can have the two text blocks on either side of a single piece of paper match up exactly. But this comes at a costsometimes a page can have huge gaps between paragraphs just to place the bottom edge of the last paragraph at the bottom of the space meant for the text blocks. Further, defaults to a flush bottom or ragged bottom, depending on if the document is a book or an article, or if it is one-sided or two-sided. Instead, we default to a ragged bottom for better out-of-the-box formatting, with an option to elect a flush bottom when you understand the risks and can watch out for them.
See details on specifying these options at . See for greater control over some aspects of right-justified text and also read about justified text in .
One-Sided or Two-Sided
An electronic PDF will default to page layout appropriate for a document printed single-sided, which makes the most sense for a document that may not ever be printed, or which possibly might be printed on a personal printer.
A print PDF will default to page layout appropriate for a document printed two-sided, which makes the most sense for a document that may be sent to a print-on-demand service or printed on a printer that will print on both sides of a sheet of paper.
These defaults may be overridden with the publisher entry latex/@sides switch with values one and two. See for the specifics of this entry.
One-sided layout will default to symmetric left/right margins, and page headers with the page numbers always placed in the upper-right corner as part of default page headers. There will be no blank pages between chapters of a book.
Two-sided layout will have asymmetric margins with the ratio of inner (adjacent to spine) to outer at 2:3. You need some extra space at the spine to compensate for the binding, but when a book is open, the two pages are separated by two inner margins, so these do not need to be as wide as the outer margin to give some distance between the pages. And readers will want more space to write in the outer margins, perhaps providing simple proofs of important results. (This ratio may be changed with the hmarginratio key of the geometry package.) Page headers will have page numbers on the outside of the page, with odd numbers on the right-side page. Chapters will possibly have a blank page between them, so they begin on a right/odd page. Behavior is similar in the front matter and back matter.
Font Size
The overall (document-wide) font size may be given as one of eight different values, ranging from 8 points to 20 points. The default is 10 points. These values influence multiple settings within itself, and will also adjust some default values, such as the line-width (in order to preserve an optimal number of characters per line for reading ease). See for precise details.
Page Shape
The conversion to defaults to US Letter paper with reasonable margins. However, the geometry package has numerous options for paper sizes and margins. The publication file can be used to insert any configuration the package supports. See for the exact syntax.
Note that if you change the paper size, you may want to change the text width computed by , and the more changes you make, the more default settings you may need to adjust. However, if you are producing your book for print-on-demand () getting the page size and margins just right is a key step of the process.
Note also that when you use the geometry element of the publication file, the content of the element (text between the opening and closing tags) will be duplicated exactly into a source file. Being careless here is a good explanation for the compilation step to fail.
Here is an example:<latex> <page> <geometry>a4paper,total={16cm,25cm}</geometry> </page></latex>twhich will produce in the output\geometry{a4paper,total={16cm,25cm}}
An electronic PDF may be printed on physical paper, but perhaps you want to make a version that works well on a portable device that naturally supports a portrait orientation, such as an Android tablet, an iPad, a Kindle (device or application), smart phone, Sony Digital Paper, or a ReMarkable tablet. Aspect ratios vary across these devices, but once you settle on a target ratio, we have had good luck with the following algorithm and parameters:
Specify 10 point text
Text width of about 4.5 inches
Add quarter-inch left/right margins to compute text width
Use aspect ratio to compute an overall height (about 6.5 inches)
Subtract quarter-inch top and bottom margins to obtain text height
Then you can provide the geometry package the overall size as the papersize and the text width and text height as the total size of the body, resulting in equal (tight) margins all around, and good use of limited screen real estate. These parameters create a PDF that is very legible on a larger smart phone, and for fine detail, rotating the device to landscape works well. Really.
Suppose you are a publisher, or an author who is also your publisher, and you wish to manufacture a paperback copy of your book in a 6-inch wide by 9-inch tall version. It is unlikely your printer has paper of this size. Use the geometry option above to specify the logical size of the paper for your book and then set margins, etc. to determine exactly how the text block sits on the page. Then there is a crop-marks option available though the publication file. You set it to a paper size describing the paper in your printer, likely letter (US) or a4 (Europe). Then your logical page will be centered on the physical page, and indications in each corner will describe the boundaries of the page.
To see this in action, you need to explicity set a smaller page size. So the value of the geometry could be set topaperwidth=6in,paperheight=9in,total={5in,7in}Do not forget to turn off any page-scaling in your printer configuration before printing onto paper. See for the exact syntax of how to enable crop marks.
Crop marks may be requested by a publisher, when it is understood that you are providing camera-ready copy. Or you may find it useful for visualizing how your text and margins will look at a smaller page size. The crop package has other useful options, such as framing the entire logical page. You can hand-edit these into your file, or make a feature request.
Avoid Too Much Text on a Printed Page
With freedom comes responsibility. Resist the temptation to pack in as much text on the page as you can. varies the width of the text in reaction to the font size and is already very close to the maximum number of characters per line for comfortable reading by humans. Similarly, very narrow margins can be uncomfortable for reading (or holding a printed book).
Page Breaks
A publisher can insert page breaks beyond those that creates automatically.
This might relieve some awkwardness that 's otherwise excellent page breaking
failed to relieve. The publisher should identify each source element for which they
would like a page break to happen before that element appears in output. For
each such element, there must be an xml:id. Bring these xml:id
values together in the publication file, using whitespace to separate them. For example:
<latex> <insertions pagebreaks="xmlid1 xmlid2 ..."></latex>
You may use multiple insertions elements to help organize page breaks by
chapter, section, etc. For example:
<latex> <!-- chapter 1 page breaks --> <insertions pagebreaks="xmlid1 xmlid2"> <!-- chapter 2 page breaks --> <insertions pagebreaks="xmlid3 xmlid4"></latex>
At time of writing, the allowable elements which may be preceded by a page break using
this feature are divisions, numbered blocks, and the following unnumbered elements:
answer, aside, audio, biographical,
assemblage, blokquote, console (when not a child of a
sidebyside), hint, historical, image (when
not a child of a sidebyside), interactive, list-of,
p, paragraphs, poem, pre, program
(when not a child of a sidebyside), sage, sbsgroup,
sidebyside (when not a child of a sidebyside), solution,
tabular (when not a child of a sidebyside), and video.
Note that over time, the precise size of many things in your PDF output may change. This
may be because of an underlying change in how builds PDFs. It may be because
of change in the distribution. And of course, it may be because the source
content and publisher specifications (like font) change. So all manually specified page
breaks may need to be monitored over the life of a project.
See .
Asymptote Links
An image described by an asymptote element will produce standalone HTML files as part of the convversion to HTML output. For 3D images, these are interactive (rotate, scale). If you set a base URL for your project () and request this feature through a publisher switch, then each image in an electronic PDF () will be a link to the HTML version. See for the specifics of this entry. This feature is off by default.
Cross-References
In an electronic PDF, cross-references will be hyperlinks that take the reader to the target. Color is used to make them visible, in addition to whatever indication a PDF viewer will provide on hover. The publication file entry controlling the use of numbers in cross-references () is by default no in this case, but may be set to yes to include the page number of the target in the cross-reference.
In a print PDF, cross-references will not be active hyperlinks and will be the same color as the adjoining text. The publication file entry controlling the use of numbers in cross-references () is by default yes in this case, but may be set to no to not include the page number of the target in the cross-reference.
See for the syntax of specifying the use of page numbers in cross-references.
For accessibility, an underline can be added beneath all hyperlinks (cross-references and URLs) to supplement color as a visual indicator. See .
Page Number Fidelity
If you produce a printPDF, perhaps as a precursor to producing a physical book, the page numbers may be important to you and your readers. Thus, you may desire that an electronicPDF have faithful page numbers. And together we might consider this a canonical numbering of the pages of your project. (Long-term we hope to migrate these page numbers into other formats, such as braille. See GitHub #1020.) Fundamentally, a PDF destined to become a physical book will be built with two-sided pages, while an electronic PDF will have one-sided pages. The two-sided version will often leave a page blank at the end of a division (e.g. parts or chapters), so a subsequent division begins (opens) on an odd-numbered page, also known as a recto page. We have publisher options for print versus electronic (), which subsequently provide (different) defaults for sidedness ().
Suppose you wish to have your electronic (one-sided) PDF have identical pages (i.e.identical content) with identical page numbers as your print (two-sided) PDF?
First decision point is: what do your cross-references look like? If every cross-reference looks like Section 5.2, then presumably a reader of print (or embossed braille) can locate the target. But if you have used a cross-reference that looks like Fermat's Theorem then you have exhibited a preference for electronic formats at the expense of readers of physical formats. To remedy this, we allow for the automatic insertion of page numbers as part of every cross-reference (see ). But all these page numbers will increase the length of your physical version and pages will never match up. So that your cross-references are workable in all output formats, or you should elect to have page numbers in every cross-reference, for each PDF produced.
Now a further complication is that a two-sided version will always start some larger divisions (parts, chapters, appendices) on an odd-numbered page, the recto page (versus the verso page). This sometimes requires an additional blank page on the verso side. But a one-sided version has no need for this practice, so the two-sided version will eventually have different (larger) page numbers on the identical content. The solution is to use a publisher option, which is only effective when a one-sided version is produced, that creates these blank verso pages or skips the page numbering ahead by one when there would have been a blank page. The result is that major divisions will always open on an odd-numbered page, matching the two-sided version. See for details. (Note that this is not the default and so must be a conscious choice.)
Nested Lists
can fail if lists are nested too deeply. Maximums may be up to four nested ordered lists, and up to six overall (mixing in unordered lists). If you hit these limits, ask yourself if your situation is really that complicated, or ask us to consider a feature request adding a technical fix.
Multi-Column List Order
Lists with several columns are rendered in column-major order, as of 2018-02-28. In other words, the first list items (li) in your source will populate the first column.
Footnotes
Footnotes are the farthest thing imaginable from structured authoring. You can put them anywhere, and conceivably they can contain anything. But they do work great in HTML presentations as knowls. However, we do not let the tail wag the dog, and so have to make some compromises for footnotes output in print formats.
As of 2019-01-04 we are fairly restrictive about content. No paragraphs, more like a few sentences, max. If you have more content, consider the aside element, and send feature requests for that.
Many blocks, such as example and remark, are implemented with the tcolorbox package, to make styling and layout much more capable and reliable. But footnotes get trapped within these boxes and render at the end of the box (not the bottom of the page) and have a different scheme for the marks (letters, not numbers). We have mitigated much of this behavior, but the cost is that these footnotes are delayed until the box finishes. So if you have a 4-page example, and use a footnote early, it may appear at the bottom of a page that is 3 or 4 pages away.
Another consequence of the above is that hyperlinks in electronic PDFs, from the mark to the text, need to be disabled (they will never work within a tcolorbox). Cross-references to a footmark's text will still be active in an electronic PDF.
The publication file may be used to specify the filenames of a front-cover image and a back-cover image. The image must be a single-page PDF, and it will be scaled to fit an entire page. So it is your responsibility to supply an image which has the correct aspect ratio and sufficient resolution. These are only supported for the conversion. See for exact syntax. Implementation is via the pdfpages package.
This is meant to help you create a professional electronic PDF. A print-on-demand service () will likely want a standalone image (possibly with the front and back, plus a spine, all rolled into one wrap image). So build your real cover images first (), and then modify them for this use.
Icons
The icon element is built around the Font Awesome 5 font collection. The fontawesome5 package contains all the necessary font files (for use with both pdflatex and xelatex), and a style file that interfaces, in a semi-elaborate way, with the font files. If you have installed this package, and the fonts still seem unavailable, figure out how to adjust your setup or your system configuration. Simply installing a font file, such as the more recent Font Awesome 5 is not going to work. See for more about fonts in .
Index Style
Start at to learn how to create an index. The realization of the index is under the influence of the imakeidx package, which results in certain stylistic choices, such as a two-column format. It also means that any options supported by this package could be easily implemented as the result of a feature request.
Also, there can be significant differences between how implements the index for HTML and how the imakeidx package creates an index for . See and .
Stylingstyleprint
Note that some of these switches are about style. There are many more ways to influence the style of the output, see .
File
The file created by will contain the majority of your content in a form that you could use it in a new standalone document, in accordance with Principle . However some constructions which are not natural in , such as a sidebyside, may be cumbersome to reuse. We continue to improve and refine these situations, though.
Our philosophy is to create and use many new environments, allowing styling and fine-tuning to occur in the preamble. This makes the body look more like simple and allows for much greater flexiblity in styling, along with greater reliability for successful compilation.
The existence, variety, and quality of packages changes continuously. We can, and will, swap out some packages for replacements, as needed or desirable. This is to your advantage, as you are absolved of the need to evaluate competing packages, and to insure that they do not clash with each other. So resist the temptation to modify the output significantly prior to compilation, as it will inevitably lead to frustration. The file is a means to an endit allows us to create a PDF with excellent typography, and especially for the demands of technical discplines, such as STEM and music. It is meant to ephemeral, not archival.
If some other variety of (or ) file is desired, a new conversion could be created. Many of the more complicated aspects of any conversion are purposely isolated in the pretext-common.xsl file so that they can be easily re-purposed and there is consistency across output formats.
Only Edit Files Rarely
We want to stress that the file created by various conversions is meant to be an intermediate format. In other words, it is ephemeral. We try to make it clean and organized, but it is not the a human would write. You might be able to recycle a paragraph or two in other documents you create without . But it is not meant to be stable or archival, and no long-term use is supported in any way. In other words, it is not a supported output format, beyond compiling to a PDF without errors.
Because of that, you may find it necessary to manually adjust a file to control widows or orphans, or maybe the placement of a graphics file, or similar adjustments. Some of the most the common adjustments used by authors are inserting \newpage, \noindent, or \par to avoid awkward transitions, or to remove an occasional \leavevmode; consult a good reference before making such changes, as effects later in the output may be unpredictable.
We view this as the final step before making a new edition, which might be a PDF that you submit to a print-on-demand service (). So hand-editing might be an annual exercise, at the most frequent. One way to keep track of larger number of edits over long periods of time is to write a script (in an appropriate language), which looks for unique strings before or after trouble spots and replaces the nearby content. Another minimally invasive option is to keep a separate git branch of the file which makes the desired changes, which can then be applied on those rare occasions it is necessary (ideally, with little rebasing needed).
Snapshot RecordLaTeXsnapshot
We are careful about which packages we use, trying to stick with well-established packages with active maintainers. But it can be useful to have a record of exactly which packagees are in play, and better still, which versions of those packages are being used. So you can use a publication entry to request loading the snapshot package, which will then automatically generate such a record into a <job>.dep file. See for details on electing this feature.
If you suspect some packages are not playing well with each other, this record might be helpful for debugging this (rare) situation. It can also be useful if you wish to have a perfect archive of how some publication was produced. See the package documentation for more on the format and use.
If you are both author and publisher, you may wish to make your book available in a physical form, but may be reluctant to purchase and store thousands of copies, or to take orders and arrange shipments. Then print-on-demand might be the solution for you.
A print-on-demand service is a manufacturer and distributor of printed books, which are typically only printed once ordered, or in extremely small quantities. They can provide many of the manufacturing and fulfillment services a traditional supplies. Some provide services you pay for that will produce a cover, provide editorial services, or assist with marketing.
We list three such services below, but first describe some commonalities, pro and con.
Updates
Generally, you provide a PDF of your text, and we have tried, with the print option, to make output that is amenable to this situation (see ). A real advantage of print-on-demand is that you can usually update this PDF at any time, without much trouble. You will need to decide how to indicate versions (or printings?) of your work. Perhaps we will have tools and advice about this soon.
Covers
You may need to provide a cover, typically as a PDF meeting some exact specifications. Though you may be able to choose a fairly generic look through a template or wizard. Or pay to have one created for you. See also and .
Price
You may choose to sell at your cost, or you may wish to make a profit on each sale. (Note: as copyright-holder you can do this, no matter what license you have chosen, review ). A 450-page hardcover book might be sold by a print-on-demand manufacturer to an online bookstore, including some profit for the manufacturer, for $23. If you, as author, want $5 profit, and the online bookstore wants $7 for fulfillment, shipping, and profit, the cost to your reader is now $35. In order for the online bookstore to give the appearance of discounting your book to $35, you may need to declare a suggested retail price of $49.95. So pricing takes a bit of thought. Or guesswork, since the discounting algorithm is not public.
Note in the above scenario, the print-on-demand manufacturer may sell you, the publisher, small quantities at a better price, such as ten copies for $170, shipping included.
ISBNISBN
An International Standard Book Number is a unique identifier of books and necessary for others to distibute and sell your book. See details for each manufacturer below. Much like a domain name for your book's website (see ), this may be something you wish to control and own, foregoing the convenience of someody else providing and owning it for you.
In order of increasing professionalism and decreasing convenience, we describe three print-on-demand manufacturers we are familiar with, plus three others. Additions, corrections, updates, and alternatives are all welcome.
Lulu.comLulu.com
This site caters to people making photo books for relatives, in addition to more serious projects. Account setup may be trivial, an ISBN number may not even be needed, and you may have options for distribution beyond readers simply ordering direct from the site. This might be a good choice for drafts you will use in your own classes, if having your university bookstore print copies is not a good alternative. (2017-11-25)
Kindle Direct PublishingKindle Direct PublishingAmazon.com
Until early 2018, Kindle Direct Publishing (KDP) was a service known as CreateSpace. Some of the information below refers to this predecessor. (2021-04-21).
This company is owned by Amazon.com. They manufacture and distribute serious books, in addition to music and film. Distribution through Amazon is nearly automatic. There is also Expanded Distribution, which starts to look more like Ingram (next). If royalties are small, using direct deposit might be the most convenient (international sales all get converted to dollars for authors in the US). (2017-11-25)
CreateSpace attempts to make sure you have the rights to your content. So if they find your book freely available on the Internet, their Content Validation Request Team becomes suspicious and investigates. This has caused a few authors a few headaches and delays in making their book available for sale, though all have been successful eventually. (2018-03-06)
If you want to offer your project electronically for no cost, you may need to do an end run. We have a report that you can put your project on KDP for a low price (e.g.$1), then offer it on Apple's similar service for free, and then exercise a price match guarantee back on KDP. Reports on this technique encouraged. (2021-04-21)
Ingram SparkLightning SourceIngramSparkIngram
IngramSpark (formerly Lightning Source) is a division of Ingram, which is a very large printer, also providing services to major publishers. Creating an account is not trivial, and you need to provide your own ISBN number. In return, your book is available at Amazon.com and many other online bookstores automatically, and is in many ways indistinguishable from offerings of large commercial publishers. There are also options for international distribution. You can also control settings for discounts and returns. (2018-03-06)
Current startup pricing for publishers is forty-nine dollars for either a print book, or print and e-book together. A recent change seems to be that, like KDP, they will now provide a free ISBN if you don't have one; however, the free ISBN is only usable for as long as you continue to use IngramSpark. (2021-07-21)
LAD Custom PublishingLAD Custom Publishing
LAD primarily helps faculty create course packets while remaining copyright compliant, so it has experience with openly licensed educational resources if you need print copies of titles without other print options. In addition, the LAD Bookstore can be used to print and market your own text without overhead, though as with other solutions an ISBN is free only so long as you use LAD. One particular advantage for some authors is you can communicate with representatives on the phone or via email, not just through an automated web form. (2024-07-18)
BlurbBlurb
Blurb specializes in photo books, and uses Ingram for printing. Sizes are limited, and costs are more that the other services. Direct experiences would be a welcome addition. (2018-03-06)
Nook PressNook Press
Nook Press is a service of Barnes & Noble, and books appear only through their online store. We have no additional information, so direct experiences would be a welcome addition. (2018-03-06)
We currently have no good information about distributing EPUB or Kindle electronic versions for profit. (2017-11-25).
================================================
FILE: doc/guide/publisher/production.xml
================================================
(*) Producing a Book
You have finished using to write a textbook, research monograph, laboratory manual, writer's handbook, or some other scholarly work, and you want to share it openly with students and other readers. Good! That's why we created , and why we include this chapter. There is more to do.
This chapter will try to distill our personal experience, along with many conversations with other authors confronting these same decisions. But recognize there is a lot of advice here, and a bit of an attitude, simply for your consideration. The decisions are yours.
(*) Front Matter
TODO
(*) Landing Page
TODO
(*) Source
TODO
(*) Marketing
Didn't think about that one? Write it, and they will come? Not necessarily. I have seen nice projects where authors make little extra effort to get the word out, and it shows. With the Internet, effective promotion can be accomplished without much effort or expense. And very soon your project can rise very high in search engine rankings.
This chapter is reference material for the publication file, whose employment is described in , where you can also find an explanation of the shorthand syntax used here to describe elements of this file.
Common Optionscommon optionspublisher optionscommon
These are options that might affect several conversions, though the influence may vary from one conversion to the next.
Common Chunking Optioncommon optionchunkingchunking optionchunking
Many outputs are produced as a collection of several files, others may only produce a single file. A chunk is a generic, informal term for a portion of an output, typically a single file. This is given as a level, see for more about levels. The specification is in the attribute/publication/common/chunking/@levelwith a whole number as the value (generally 0 is allowed). This is critical for the construction of HTML output, and ignored for output.
Table of Contents Level Optioncommon optiontable of contents leveltable of contentslevel option
The depth of the entries in a Table of Contents is given as a level, see for more about levels. The specification is in the attribute/publication/common/tableofcontents/@levelwith a whole number as the value. A value of 0 is used to indicate that no Table of Contents is desired. Absent this setting, reasonable defaults are supplied, which can vary by conversion and document type.
An exercise can appear in four different locations: mixed in with paragraphs and blocks (inline), inside an exercises specialized division (divisional), inside a worksheet specialized division (worksheet), or inside a reading-questions specialized division (reading). Also, a project, and similar (project), behaves in many ways like an exercise. All of these elements (or their task) may have statement, hint, answer, and solution (components).
Where such exercises first appear (not, for example, in back-of-the-book solutions) publication switches can control the visibility of the components. There are five elements, each with four attributes, which can take on the values of yes or no. The default is yes, which should be most useful in the early stages of a project. The element exercise-project is a misnomer, but is used to avoid confusion with some other use of project. See for more explanation.
The style of fill-in-the-blanks (from a fillin) is set by the attributes
Text Fillin
Set/publication/common/fillin/@textstyle to values underline, box, or shade to influence the style of a fillin within text. The default is underline.
Math Fillin
Set/publication/common/fillin/@mathstyle to values underline, box, or shade to influence the style of a fillin within math. The default is shade.
Em Dash Width Optionscommon optionsfillinfillinoptions
The width of spaces on either side of an em dash (the mdash element) is set with the /publication/common/@emdash-spaceattribute having values none (the default) or thin. See for more explanation.
The text of a watermark is given as the content of the /publication/common/watermarkelement. An optional scale factor may be given as a positive rational number with the/publication/common/watermark/@scaleattribute. The default scale is 0.5.
In the text itself avoid obscure characters or symbols, and do not use any markup. Keep it simple. When used with output the scharacters \\ will survive in the text to create multiple lines of text in the watermark. This feature is implemented for and HTML output. See for more detail and an example.
MermaidMermaid themes
Various themes are available for Mermaid diagrams. To use a theme, set
/publication/common/mermaid/@theme
with a value of the theme name. The default theme is default.
See for more information on Mermaid diagrams.
QR code imagecommon optionqrcodeqrcodecommon option
QR codes for videos and interactive elements can have an image placed in their
center. This image file should be square, and stored in the external assets folder.
To use this image in your QR codes, use
/publication/common/qrcode/@image
with a value of the file path, relative to external assets folder.
Note that the presence of such an image will increase the raw size of QR codes,
which are then genreally shrunk to fit. This will result in a finer grain for the
QR code pixels.
When an article is intended for publication in a particular journal, the name of the
journal can be specified with
/publication/common/journal/@name
with a value being one of a list of supported journal short name codes. Setting this option
will control the format of bibliography entries and the format of that can be produced.
A complete list of the supported journals, together with their short name codes, will
be available in .
Margins for worksheets and handouts can be specified using a combination of attributes on the element
/publication/common/worksheet
using attributes margin, top, right, bottom, and left. The values of these attributes should include units, either in or cm. Setting margin will set all four margins to its value, but this can be overridden by setting (some of) the other attributes. The default margin is 0.75in.
For example, setting <worksheet margin="1in" left="2in"/> will set the top, right, and bottom margins to 1in and the left margin to 2in. Setting <worksheet top="1cm" bottom="2cm"/> will set the top margin to 1cm and the bottom margin to 2cm, while leaving the left and right margins at their default of 0.75in.
These settings will be used for both the and HTML conversions.
See also for more information on how these margins are used in the conversion.
Worksheet and Handout Headers/Footerscommon optionworksheet headers and footersworksheet headers and footerscommon option
Headers and footers for worksheets and handouts can be specified in the publication file (they can also be edited in the browser when producing HTML output). First-page and running headers and footers are specified separately, and each can have a value for left, center, and right positions.
That is, each of the elements
/publication/common/worksheet/first-page-header/publication/common/worksheet/first-page-footer/publication/common/worksheet/running-header/publication/common/worksheet/running-footer
can have attributes left, center, and right, whose values are the desired content for that position in the header or footer.
For example, to add a name and date line to the top of the first page, one would include the publication file entry
<first-page-header left="Name: __________" right="Date: __________"/>
(inside the worksheet element of common).
How various items get numbered can be controlled by specifying levels. For pieces of content (e.g. example, fn, ) the level will be the number of separators in the number, usually periods. To fully understand these options, carefully read and .
You can stop numbering divisions at some depth. For example, you may want your book (without parts) to have numbered subsection, but numbers on the few subsubsection is just too messy and not necessary. Then you would set the publication file entry/publication/numbering/divisions/@level to the value 3 to number chapter, section, and subsection, only. (Note this is the exception, you will get at most two separators in a division number in this case.) So you can think of this as the maximum level for numbers on divisions. Just be careful not to try to number other objects (described next) to a greater level, as that is impossible, and so will generate a warning and the default will be substituted.
For items within a division, various groups of objects are numbered consecutively, with a hierarchy given by a level. These numbers are controlled by/publication/numbering/blocks/@level/publication/numbering/projects/@level/publication/numbering/equations/@level/publication/numbering/footnotes/@level whose values should be integers (zero is a possibility) that do not exceed the maximum level specified for divisions.
Chapters of a book may start numbering from something other than one. This feature is not available in a book with structural parts (rather than decorative parts). Read about this at the end of and . If you still want to proceed, then set the publication file entry/publication/numbering/divisions/@chapter-start to the desired value of the first chapter.
A book with part may have the parts numbered to reflect two different structures, decorative or structural. Set the publication file entry/publication/numbering/divisions/@part-structure to decorative (the default) or structural.
When a book is designed to have structural parts, then there is an expectation that the part divisions are important or relevant (at least moreso than in the case of decorative parts). Then, to choose to number objects (blocks, equations, etc.) at level 0, crossing part boundaries, strikes us as an odd choice. So odd that there is a small bug at issue #1650, which might be solved by simply banning this combination.
For more on divisions, and their numbering see .
PDF () OptionsPDF publisher optionsLaTeX publisher optionspublisher optionsPDFpublisher optionsLaTeX
These options affect the conversion to , which can in turn be converted into PDF.
See for a more general overview of this conversion with more details. This includes some existing options that will eventually migrate to the publication file.
A limited number of custom styles are available and more are in development (see ). The/publication/latex/@latex-styleattribute can be set to one of the provided styles to build the or PDF output with that style. As of 2024-10-04, the supported styles (and values of this attribute) are AIM, chaos, CLP, dyslexic-font, and guide. (Note that some of these are meant as demos and not intended for production.)
The conversion to can produce a PDF optimized for print, or optimized for use electronically on a screen. The/publication/latex/@printattribute can have the value yes to produce a print version, or the value no to produce an electronic version. The default is an electronic version. See for more detail. Note that the use of page numbers in cross-references has different default behavior based on this option (which can be overidden, see ).
The conversion to can produce a PDF designed for printing on only one side of the page, or on both sides of the page. The/publication/latex/@sidesattribute can have the value one for a one-sided version, or the value two to produce a two-sided version. The default depends on if the output is electronic (one-sided) or print (two-sided). See for more detail.
A two-sided PDF will contain extra blank pages to ensure that certain divisions (usually parts and chapters) always open on an odd-numbered page. Since a one-sided PDF will omit these extra blank pages, the page numbers may get out of sync between the two versions. The/publication/latex/@open-oddattribute can be used to force the page numbers back into sync by either also inserting the extra blank pages in a one-side PDF version (by setting the attribute to value add-blanks) or by simply skipping the page number for pages that would have been blank in the pagination (by setting the attribute to value skip-pages). If the attribute value is no for a one-sided PDF output (the default), then no adjustment is made and divisions open on the next consecutive page whether odd- or even-numbered.
Note that this attribute is ignored for two-sided PDF output, where extra blank pages are always inserted. Also note that page-matching between one- and two-sided PDF versions may require a consistent specification of the /publication/latex/@pageref option (). See for a more thorough discussion of page number fidelity.
Font Sizesfont size optionsLaTeX, PDFLaTeXfont size optionPDFfont size option
The document-wide point size can be specified with the/publication/latex/@font-sizeattribute can have the value 8, 9, 10, 11, 12, 14, 17, 20, which are interpreted in points (pt) as the unit of measure. The default value is 10. See for details.
Page Shape Options
The following options affect the shape of each page, so are in a way less global than some of the previous options. These are both attributes of the /publication/latex/pageelement.
Text Alignment, Right Edge
Set/publication/latex/page/@right-alignment to values flush (default) or ragged to influence the right edge of the block of text on a page. See for more.
Text Alignment, Bottom Edge
Set/publication/latex/page/@bottom-alignment to values flush or ragged (default) to influence the bottom edge of the block of text on a page. See for more.
The content of the element/publication/latex/page/geometry element will feed directly into a \geometry{} element, with no modifications. (In other words, all whitespace, such as newlines and indentation, will be preserved.) Be sure to carefully read the advice, an example, and further detail at .
The attribute/publication/latex/page/@crop-marksmay be set to the value none, or not specified at all, and nothing will happen. Otherwise, it is set to a paper size, then the logical page (whose size is presumably set by the geometry package) will be centered on the physical page specified, with marks at each corner delineating the logical page. Some publishers request camera-ready copy to have these indications. Paper sizes are arguments to the crop package, and as of 2023-05-19 the possible values were:a0, a1, a2, a3, a4, a5, a6,b0, b1, b2, b3, b4, b5, b6,letter, legal, executiveThere is no error-checking of these values. See for more and examples.
Page Numbers in Cross-References
Set/publication/latex/@pageref to values yes or no to enable or disable the use of page numbers in cross-references (typically achieved with the xref element). The default varies, as it is dependent on the print option (). See for more on the defaults.
Set/publication/latex/@link-highlightto underline to draw an underline beneath hyperlinks (xref and url) in the PDF output. The default value is none. This option requires no additional packages. See for accessibility motivation.
Worksheet Options
By default, worksheets are formatted differently than other pages, including customizable margins, workspace between exercises, and on their own pages. This separate formatting can be ignored, causing worksheets to be treated like any other division, using the/publication/latex/worksheet/@formattedattribute, setting the value to no. The default value is yes.
See also for how to specify margins for formatted worksheets.
CoversPDFcoversLaTeXcoverscoversPDFcoversLaTeX
The/publication/latex/coverelement has attributes front and back whose values can be paths to PDF files to use as the first and last page of the output PDF. The paths should be relative to your directory of external files, much like a raster image you might bring to your project being given by a source attribute. See for more about managed directories, and for more detail about covers.
The conversion to can provide a link to an HTML version of each Asymptote graphic. The/publication/latex/asymptote/@linksattribute can have the value yes to produce links, or the value no to not create links. Note that a base URL must be set for this feature to be functional (). The default is no. See for more detail.
Draft Mode
Set/publication/latex/@draft to values yes or no to enable or disable the use of the draft mode. The default is no. See for more detail.
Snapshot RecordLaTeXsnapshot
Set/publication/latex/@snapshot to values yes or no to enable or disable the generation of a snapshot record of the LaTeX packages in use. The default is no. See for more detail.
A publisher can declare xml:id values for which a pagebreak
(\newpage) will precede the corresponding element in output. This is only
valid for certain element types. Use
/publication/latex/insertions/@pagebreaks
to provide a whitespace-separated list of xml:id values. You may use
multiple insertions elements, each with its own pagebreaks
to help organize pagebreaks by chapter, etc.
These options affect the base conversion to web pages (online, HTML). Many, but not all, will affect subsequent conversions based on HTML, such as a conversion to EPUB or Jupyter notebooks. See for a more general overview of this conversion, including options that will eventually migrate here.
HTML Analyticsanalytics
The/publication/html/analyticselement can have the following attributes:
google-gst: a Google global site tag, which is an ID you get from Google. Do not copy the identification numbers from another projectbe sure to obtain your own for your project.
statcounter-project, statcounter-security: ID numbers you get from StatCounter. Do not copy the identification numbers from another projectbe sure to obtain your own for your project.
Setting these attributes to non-empty strings is the signal to add the relevant code to each of the pages of your HTML output. See for more.
HTML Base URLbase urlHTML output
The/publication/html/baseurl/@hrefattribute may be given as a complete URL for the top-level of where HTML output is hosted. Of course, this may be different for different publishers. The value is a directory, and so should end with a slash (path separator). See for reasons why you might want to specify this.
HTML Banner OptionsHTMLbanner content options
The/publication/html/banner/@subtitle and /publication/html/banner/@bylineattributes may be specified as either yes (the default) or no to control whether the subtitle and author byline are displayed in the banner. See for reasons why you might want to specify this.
HTML Embedded Calculatorcalculatorembedded in HTML
The/publication/html/calculatorelement has the following attribute:
model: used to control which calculator is available on every page. Possible values are:
geogebra-classic
geogebra-graphing
geogebra-geometry
geogebra-3d
none
The default is none. See for more.
HTML Faviconfavicon
The/publication/html/element has the following attribute:
favicon: used to control how icon files for a favicon are embedded into each HTML page:
none
simple
The default is none. See for more, including an explanation of what a favicon is.
HTML DynamismWeBWorKHTMLdynamism
The/publication/html/webworkelement has the following attributes, each of which can have a value of static or dynamic:
inline, default value: dynamic
divisional, default value: static
reading, default value: static
worksheet, default value: static
project, default value: dynamic
The attribute names suggest the type of exercise or project-like that will be affected. See for more details and the rationale for the defaults.
HTML ActiveCode Programming WindowActiveCodewindow in HTML
The/publication/html/calculatorelement has the following attribute:
activecode: used to control if an ActiveCode window is available on every page, and if so, which language it undestands. Possible values are:
python (Python)
javascript (JavaScript)
html (HTML)
sql (SQL)
c (C, Runestone server only)
cpp (C++, Runestone server only)
java (Java, Runestone server only)
kotlin (Kotlin, Runestone server only)
python3 (Python 3, Runestone server only)
octave (Octave, Runestone server only)
none
For a build hosted at a Runestone server, python is the default. For an HTML build hosted elsewhere, none is the default. See for more.
HTML Index Pageindex pageHTMLHTMLindex page
The/publication/html/index-pageelement can have the following attribute:
ref: the xml:id of a division which will be a complete page at whatever level the document is chunked (broken into smaller pages).
An index.html page will be created which redirects immediately to this page. Many webservers will serve this page when a URL stops with the enclosing directory. So the Table of Contents (book, article) or the frontmatter are common choices. See for more.
HTML Knowlizationknowlselectiveelective knowls
In a conversion to HTML a wide variety of content can be born in a knowl. Publisher switches are specified via multiple attributes of a single/publication/html/knowlelement, with values of yes (do use a knowl) or no (do not use a knowl, present content normally). For example,<knowl remark="yes"/>would make every remark-like element occur as a knowl where the content is first introduced. Note that these are distinctly different than cross-reference knowls. For more detail see .
This table gives the various attribute names, the default value, and an indication of the elements affected. Note that some items are automatically born knowled (e.g. footnotes) and so there is no option to control that behavior. Also, items such as figure, when included in a sidebyside are not influenced by the relevant option and are not born knowled. There are four flavors of exercise and so four options. A hint, answer, or solution is automatically knowled as a plot-spoiler where the author is expecting the reader to do something. In contrast, an example-like is expository, so the knowlization is configurable.
HTML Tabbed viewertabbed viewerHTMLHTMLtabbed viewer
The/publication/html/exerciseselement can have a tabbed-tasks attribute. The value is a space-separated, or comma-separated, list of types of exercise or PROJECT-LIKE. The values in this list come specify up to four of the five possible types of exercises: divisional, inline, reading, project. Note that exercises inside a worksheet are explicity ineligible. See for careful descriptions of these types.
HTML PlatformsplatformHTMLhostHTMLonline platforms
The/publication/html/platformelement can have an attribute host with values:
web: the default, meant for self-hosting with no server configuration, features, or assumptions
runestone: output meant for hosting on a Runestone server ()
Here platform refers to the server where the HTML output will eventually be hosted. The effect is to create minor variations in the output to take advantage of extra features of the indicated platform.
Portable HTMLplatformHTMLportableHTMLportable html
To limit the number of files and directories created by the HTML conversion,
you can set the
/publication/html/platform/@portable
attribute to the value "yes".
This will result in the HTML using hosted CSS and Javascript files, rather than including them adjacent to the rest of your output.
This is especially useful in conjunction with setting the chunking variable to 0 to get a single html file.
HTML Style (Theme)styleHTMLthemeHTML
The/publication/html/csselement can have a theme to specify the theme used to style the pages. See for examples of what different themes look like. Depending on the theme chosen, there may be other attributes that can be set. See below for details.
The legacy stylesheets are still available. Any publication file that references html/css/@style will use the corresponding legacy style sheet (default, crc, wide, oscar-levin) as well as the colors selected for it. However, the full range of configuration is no longer available. If your publisher file mixes legacy style parts in an unexpected way (toc="crc" but sidebar="wide") you will get one or the other complete style.
New themes other than default-modern require a build step involving node.js. If node is not installed (try node --version to check), following the directions in . If you are using the pretext/pretext script, you will need to, one time, run npm install in the script/cssbuilder directory (this step is done automatically if you are using the CLI). After this initial setup, the build script will automatically be invoked when you build a document.
To rapidly test out different themes and options while using the CLI (see ) you can use pretext build --theme to rebuild the theme without a full book rebuild. If you are using the pretext script (see ) you can use the flag -c theme. Note that doing this assumes the HTML needed for the different themes is the same. This should generally be the case, but if you encounter odd rendering issues you should do a full rebuild.
Theme attribute options
default-modern
The following attributes can be set on CSS to modify the appearance of default-modern:
palette controls the colors used. Options include: "blue-red", "blue-green", "green-blue", "greens", and "blues".
primary-color override the primary color set by the palette. This, and all other color attributes, can be in CSS color format (hex, rbg, hsl).
secondary-color override the secondary color set by the palette.
provide-dark-mode can be set to "no" to disable dark mode on the theme. This may be desirable if the work has significant elements that do not render correctly with a dark background and you are not able to modify them to do so.
primary-color-dark override the primary color used in dark mode.
tacoma, greeley, boulder
The following attributes can be set on CSS to modify the appearance of tacoma, greely, and boulder. They function in the same way as the corresponding attributes for default-modern.
primary-color
primary-color-dark
provide-dark-mode
salem, denver
The following attributes can be set on CSS to modify the appearance of salem and denver.
palette controls the colors used. Options include: "bold", "bold2", "primaries", "primaries2", "ice-fire", "earth-sea", "leaves", and "slate".
color-main override the primary color set by the palette.
color-do override the color used for elements that ask the reader to do something (e.g. an exercise).
color-fact override the color used for elements that present a fact (e.g. a theorem).
color-meta override the color used for elements that provide meta information to the reader (e.g. goals, remarks).
provide-dark-mode - see default-modern.
primary-color-dark - see default-modern.
Finally, if you wish to do development on a custom theme using SCSS, you can set /publication/html/css/@theme to "custom". If you do so, you need to also set entry-point to be the path to an SCSS file that will be used to build the theme. This path should be relative to the xml file that is your document root.
HTML SearchsearchsearchnativesearchGoogle
The/publication/html/searchelement can have the following attributes:
variant: a string specifying how search queries are handled. Possible values are textbook, reference, default and none. For historical reasons, using the value default is synonymous with using textbook, so it is not necessary. If you do not specify this entry, then that is equivalent to setting the value to textbook. This is search provided natively.
google-cx: a Google cx number, gained from configuring search for a site. Setting this attribute to a non-empty string is the signal to add the relevant code for a search box in the masthead.
Note that if you elect both native search and Google search the two search boxes will overlay each other and one will not be usable. See and (respectively) for more.
HTML Video Embeddingvideoembeddingprivacyvideo
The/publication/html/videoelement can have the following attribute:
privacy: allowed values are yes or no.
Setting this to yes (the default) prevents certain tracking cookies from being used. Currently only supported for videos from YouTube. See for more.
Short Answer Responsesshort answer exercisesresponse area
The/publication/htmlelement can have an attribute short-answer-responses with values:
graded: the default, only show an area for responses when they can be graded or scored (such as when hosted on Runestone, ).
always: include an editable response area, even if it cannot be submitted for feedback.
See for details.
Asymptote Click to Enlarge LinksAsymptote linksHTMLHTMLAsymptote links
The conversion to HTML can provide a Link to full-sized image link below each Asymptote graphic. The/publication/html/asymptote/@linksattribute can have the value yes to produce links, or the value no to not create links. Note that a base URL must be set for this feature to be functional (). The default is no. See for more detail.
HTML Feedback ButtonHTMLfeedback buttonfeedback buttonHTML
The/publication/html/feedbackelement requires an href attribute that is a complete URL. The content of the element is optional, and will provide alternate text for the button. This alternate text should have no markupjust text. See for explanations, details, and a caveat.
HTML Navigation OptionsHTMLnavigationnavigationHTML
The/publication/html/navigationelement can have the following attributes:
logic with values linear (default) and tree.
upbutton with values yes (default) and no.
See for explanations and details.
HTML Table of Contents OptionsHTMLtable of contentstable of contentsHTML
The/publication/html/tableofcontentselement can have the following attributes:
focused with values no (default) and yes. Enabling a focused TOC makes the TOC expandable/collapsible and initialliy hides TOC items not on the path to the active webpage.
preexpanded-levels with values 1-6 (0 is the default). This value controls how many levels from the root of the TOC are initially expanded outside of the path to the current page. Either 0 or 1 will result in the root level of the TOC being expanded (it is on the path to the active page and thus always is expanded). 2 will result in the first two levels of the TOC being visible (e.g. parts and chapters or chapters and sections). 3 would result in three initially visible levels (e.g. parts/chapters/sections), etc...
See for explanations and details.
xref Optionsxrefpublisher options
The/publication/html/cross-referenceselement can have the following attributes:
knowled with values maximum (default), never and cross-page. maximum will render xref's to structural elements as HTML links and xref's to smaller elements as knowls. never forces all xref's to be rendered as traditional HTML links. cross-page bases the rendering decision on if the xref and its target are on the same page. If so, the xref is always rendered as an HTML link. If the link and target are on different pages, the behavior is the same as maximum
See for explanations and details.
Embed Page Buttonembed page button
The/publication/htmlelement can have an attribute embed-button with values:
no: the default, do not display button.
yes: show a button in the navigation bar, that when clicked, displays a popup allowing the user to copy an iframe code snippet to paste into their website or LMS.
The
/publication/html
element can have an attribute design-width with an integer value. This will be used as the base value for converting the percentage based widths of an interactive into a pixel values when that is required. The default value is 600 (100% width is 600px).
The
/publication/html/interactives
element can have an attribute resize-behavior that is used to control how interactives respond to window resizing. Possible values are:
fixed-height (default): interactives will maintain their initial height as the window size changes. When the content becomes too wide to display, a horizontal scrollbar will appear.
responsive: interactives will resize dynamically as the window size changes to maintain their aspect ratio.
In addition to this global setting, you can add child elemements to
/publication/html/interactives
to set the resize behavior for specific types of interactives. Each child element should be named after the interactive type (e.g. geogebra or desmos) and have a resize-behavior attribute with the same possible values as above. Settings on these child elements will override the global setting for that specific interactive type. Known interactive types that can be specified this way are:
The/publication/revealjs/appearanceelement can have the following attributes:
theme: the base name of a file that is a reveal.js theme. (See the reveal.js documentation for available themes.) For example if the desired theme/CSS file is css/theme/solarized.css, then set the value of this attribute to solarized.
custom-css: a string separated list of custom css files to load. These may be local files or remote URLs. For local files, it is recommended to place them in the external files directory so that they are automatically copied from your source folder to the output directory. (Refer to for more information on external files.)
The/publication/revealjs/navigationelement can have the following attribute:
mode: for the arrangement of the navigation through slides. Values are default, linear, or grid. The default is default. The value default refers to the default mode of Reveal.js and is synonomous with grid. In other words, the choice of default or grid results in identical behavior.
See for more explanation of the two different navigation modes.
Reveal.js Resourcespublisher optionsreveal.js resources
You may wish to host the reveal.js CSS and javascript files locally or obtain them online. Be sure to read in about the necessity of providing the complete MathJax library if your document has mathematics and you opt for local resources.
The/publication/revealjs/resourceselement can have the following attributes:
host: The values local and cdn will retrieve various Javascript and CSS files (such as the theme) relative to the slideshow HTML file or from an online Content Delivery Network (respectively). PreTeXt will maintain a link to a current, updated, CDN version and this will change without notice. This attribute may be given a URL or a local path, though this has not been tested, so should be considered experimental.
These options are specific to a conversion to EPUB. But because an EPUB file is a compressed archive of HTML files, many of the options in can have an effect. See for a more general overview of the conversion to HTML.
EPUB Cover ImageEPUBcover imagecover imageEPUB
The/publication/epub/cover/@frontattribute has a value that is a path, relative to the external directory of the managed directories scheme (see ), that is an image to be used as a cover for the EPUB. See for more.
Two directories of additional files need to be specified, as paths relative to the main source file, in order that they can be managed automatically for the construction of various output formats. Study carefully for the exact details. To set these directories, the/publication/source/directorieselement must have the following two attributes:
external: a directory of files produced independently of your project.
generated: a directory of files produced automatically via tools, from aspects of your source.
It is an error to only specify one of the two directories. It is all or nothing.
Versions
Different versions of your source can be constructed by marking elements as belonging to different components. Each component has a name of your choosing, and then you elect components to include or exclude via the publication file. See for the exact details and examples.
To specify components to include, the/publication/source/version/@includeattribute should be a space-separated list of component names. For example, if version hasinclude="videos labs"then a version would be created that includes all of the videos and all of the labs (since the author placed them into these components), but would not contain any elements whose component is genome. Note that videos, labs, and genome are names peculiar to the organization of your project, and are not element names (even if they are used consistently with similar element names, such as video).
Extras
Some source material is optional, and may be included based on the publisher and the audience. The values of the attributes below are filenames. They could be absolute paths (which is not very portable, and so likely a bad idea), or relative paths. In the latter case, they are relative to the source file that contains the pretext element (the main file if you have modularized your source). Temporarily using an absolute path can be useful when you are having problems with any of these files and want to eliminate one variable while debugging.
The/publication/sourceelement can have the following attributes:
customizations: A filename for a structured file of custom elements, each with a name attribute and content meant to be substituted into source. See for details about the use of customizations.
private-solutions: A filename for a structured file of hint, answer, solution that will see limited distribution (for example, instructors only). See for details about the use of a private solutions file.
exercises in a project can be processed in two ways: using a
local copy of pg, or using a webwork2 server. The variables here
control which method is used where, and how it is used. These are also discussed in
.
See for publisher file attributes that control
's dynamic behavior in HTML.
Static Processing
The attribute
/publication/webwork/@static-processing
can have value webwork2 (the default) or local. When
exercises are processed to make static representations, this is the
method that will be used. Either communicating with a webwork2 server or a
local copy of pg. The fastest processing happens if you use local. See
.
PG Location
The attribute
/publication/webwork/@pg-location
gives the absolute file path to a local copy of the pg repository, for when
static processing is local. The default value is /opt/webwork/pg. See
.
Server
The URL to the webwork2 server is in the attribute
/publication/webwork/@server
It should include the protocol (e.g.http or https) and not
include a trailing slash. The server should be version 2.16 or later. The default
value is https://webwork-ptx.aimath.org. See
.
Course
The name of the host course on the webwork2 server is in the attribute
/publication/webwork/@course
The default value is anonymous. See .
User
The username that signs in to the host course to process exercises is in the
attribute
/publication/webwork/@user
The default value is anonymous. See .
Password
A password (for the host user in the host course) is in the attribute
/publication/webwork/@password
The default value is anonymous. See .
(If the webwork2 server is version 2.18 or earlier, instead of
password, there should be both coursepassword
and userpassword.)
Task Reveal
The attribute
/publication/webwork/@task-reveal
is used to control how tasks in a multi-task exercise are made available to the
reader. This applies to live interactive renderings of the exercises, either in
HTML, in , or otherwise. Possible values are:
preceding-correct (all preceding tasks must be correctly answered
before the next is available)
This is a list of answers to frequent questions, in no particular order.
Why does the conversion to HTML use a fixed width for the text?
There is an optimal number of characters per line for human readers,
based on research and centuries of book design.
So we set a fixed width such that the default font comes close to achieving this optimal value.
We also use responsive design to accomodate the constraints of a small screen as best as possible.
A reader will not want to have to carefully resize a browser window to achieve the optimal width,
nor should a line of text spread to many, many characters across a very expansive screen.
See Principle.
I do not want my examples in knowls (nor my inline exercises, nor proofs)
You can change that! See .
Knowls are fantastic! Can I have more?
Start at and follow a cross-reference to details on the various options.
Why are my knowls empty?
When viewing the HTML version on your laptop or local computer as files, do not expect knowls to render properly. This is a known bug/feature, and there is nothing to be done about it, unless you run a web server on your own machine, which fortunately is a very easy thing to do (see about testing HTML output locally). Think of it this way: the knowl content comes from a server, but on your laptop there is no web server. You are just looking at files.
A possible added confusion is that some knowls, such as proofs, will appear.
That is because their content is embedded in the page, not taken from a file.
How can I change the colors in the HTML version?
Start at to learn about how to specify alternate styles for HTML output,
including an easy way to specify an existing alternate color file.
Something looks wrong in the HTML output. How can I customize the layout of the HTML version?
If there are some anomalies in the HTML version of your book,
probably that was just an oversight and can be fixed easily.
Send a message to pretext-support@googlegroups.com
describing the problem and
including a live link to the page showing the error.
Do not make a minimal example. (CSS issues are handled in a
completely different way than other software issues.)
The long-term plan is to have a variety of different layout options,
which can be chosen as easily as choosing a color scheme.
See Principle.
The first step is to rewrite the current CSS
so that it is easy to develop alternate layouts.
That should be done by the end of Spring, 2018.
Then people can develop new styles! Until that happens, either suffer
with the current style, or hack away at your own peril. (Note that
the support groups will not provide any help with hacking
the layout, but a lot of help will be available when it is time to
develop alternate layouts.)
Why does the HTML output load so many external resources?
The subtext perhaps being, Why shouldn't I host these on my own server? A main goal for is to spare authors the headaches of learning new technologies just so they can get their content in front of readers. That knowledge should be built into software, so an author can work at a higher level, explaining the intricacies of their discipline. So we only assume an author can place locally-built HTML output onto some public server they have permission to use. Any extra enabling techology we do not want to create ourselves gets pulled from other public servers. MathJax, both code and fonts, is a good example, as one of the enabling projects. Perhaps it is the enabling project.
This way,
Authors can concentrate on their writing, not updating services on their server.
Servers that are hostile to ad-hoc configurations (think learning management systems) are not an impediment to hosting projects.
For the most part, updates to external resources happen automatically. This allows authors and developers to concentrate on other aspects of their work.
We get MathJax from a content delivery network (CDN). Once we have that dependency, then fonts and search from Google, CSS and Javascript from the American Institute of Mathematics, and other components, all have the same dependency: a decent internet connection. Our experience over several years is that these resources have good uptimes and good bandwidth, and so are not a source of problems. A good offline version, with resources packaged via a script, would be a good long-term project.
Finally, we do not load minor resources indiscriminately. Something in your source should suggest they are necessary and we perform those checks, document-wide. However, since a cross-reference is usually implemented as a knowl, and we cannot be sure what a knowl might contain, we do tend to load resources on every page, even if only needed once. We hope to improve this situation. And you are enouraged to help if you have technical skills in these areas.
Searching my PDF output is broken
goes to great lengths to make a high-quality PDF, but if you manipulate it by adding in new pages, or adjust the intermediate to use other fonts, you run the risk of breaking some of the features.
A ligature is a combination of two characters into one, like a lower-case f followed closely by a lower-case i without a dot. These can confuse a search. Verbatim text sometimes ends up with smart quotes, where left and right versions are inverted. This frustrates copying source code into an actual program. And so on. If you see problems like this with un-customized PDF output, we would like to hear about it.
My LMS breaks my HTML
Suppose your HTML output seems to work fine, but once you place it inside your university's Learning Management System (LMS) it no longer works very well.
A likely culprit is that your LMS is adding material to your files, ruining them in the process.
I get a bad line break in HTML with a hyphen between text and mathematics
When you author something like <m>x</m>-axis the code produced by MathJax may allow a web browser to break a line just before the hyphen. Yes, this looks very bad. No, it is not a problem can easily solve. So we will wait for MathJax and web browsers to do a better job. You might let us know when this happens?
My publication file (or other auxiliary file) does not seem to be effective
Does the filename, or any other directory in the complete path to the file, have a space in it? A common culprit might be My Documents on Windows. If so, the failure is likely our fault. Doing a test where you move your project someplace clear of filenames or directory names with spaces would be a big help to us. And then a careful report of the offending situation will let us make a fix for the next author or publisher. Thank-you.
Should I edit the file created to make a PDF?
See and especially the contained .
================================================
FILE: doc/guide/publisher/runestone.xml
================================================
Conversion to Runestone
Runestone Academy is a textbook hosting system originally designed for HTML textbooks about computer science. It is similar in design and goals to , but is also complementary in important ways. In particular, Runestone excels at providing very interactive versions where student work in the textbook can be graded (automatically or manually), scores recorded, and that information can be viewed by an instructor. Any instructor can easily spin-up an instance of your book for their course, hosted at Runestone Academy at no charge to the school or to the students. Could not be easier.
About Runestone Academy
Runestone textbooks are designed around interactive activities and active reading. We are very far along in the process of exposing these capabilities via markup. Publicly-accessible Runestone servers are available at Runestone Academy.
Every feature of the usual HTML output should function identically on a Runestone server.
We have designed markup for the various types of problems available in Runestone: True/False, multiple choice, Parsons problems, matching, clickable area, (basic) fill-in, and ActiveCode programming exercises. Hosted on Runestone, readers have their responses graded and get instant feedback, plus their results are saved at the site. For other HTML output, hosted on your own server, these problems are automatically graded and the reader gets instant feedback, but of course, responses and scores are not saved anywhere. Please see for details of these exercises and their markup.
Any exercise authored in can be electively rendered as a Runestone short answer question, when the Runestone platform is targeted as the host. A student can use notation in formulating their answer, and Runestone will provide the instructor an efficient interface for reviewing student responses, provide feedback, and assign scores.
Every feature described for an exercise is also available for PROJECT-LIKE, and for individual terminal task within these structures.
As much as possible, non-interactive versions of these problems will render in less-capable formats, like PDF, EPUB, and braille.
A program element with the attribute interactive set to activecode (even outside of a an exercise) will be realized as a Runestone ActiveCode interactive program, where programs can be edited, compiled, and run. In some cases a CodeLens interactive trace utility is also available. The language must be set. Supported values for the language when hosted at Runestone are: python, python3, c, cpp (C++), javascript, java, kotlin, octave (Matlab), sql, and html. When hosted on your own server, python, javascript, sql, and html, are supported with in-browser routines. So you do not need to configure anything server-side for this capability. See subsections of for details.
Similarly, a program element with the attribute interactive set to codelens (even outside of a an exercise) will be realized as a Runestone CodeLens interactive program. This allows a reader to step through the program, much like in a debugger, but with more informative displays of the intermediate state of the program (and nothing like breakpoints or changing variable's values). This ability varies by language, and by hosting location. See subsections of for details.
All of the interactive exercises on a Runestone server can be worked by a student at the location in the book where they were authored, or a student may use the interface provided by the server (the assignment page) to locate exercises assigned by an instructor, at a location disjoint from the text itself.
Additional activities are available when your book is hosted on a Runestone server, such as peer instruction. For example, you may choose an exercise, typically multiple-choice, for all the students to answer in class. Then the server can pair up students with different answers to discuss their responses before any more is know about the solution. This can be done through a chat window for a class where moving around is difficult.
Students and instructors are provided extensive reports on progress.
Instructors may download a spreadsheet of scores at any time.
If you preview some books in Runestone's library, you will notice the use of ethical advertisements. This, along with donations, is how Runestone can offer free hosting to authors and courses. Once a student logs in as a member of a course, advertisements are no longer shown. So do not let an aversion to online advertising dissuade you from making courses possible on Runestone.
Interactive exercises may not function fully inside of knowls. This bug is being tracked at GitHub #1983.
We will not attempt to duplicate Runestone's documentation here. Visit the Runestone Academy site to learn more about all the features designed for hosting your textbook for everybody's courses.
Publishing to Runestone Academy
The usual HTML output () only needs minor modifications to run profitably on a Runestone server. You accomplish this via a publication file (). The absolute simplest publication file to accomplish this is<publication> <html> <platform host="runestone"/> </html></publication>(See .) Then perform the usual steps for a conversion to online HTML, as described in but also be sure to specify the correct publication file. The output should appear like a usual document, but will now include a new menu on each page. This has options which allow a reader or instructor to interact with the Runestone server, once hosted there. So it will not look entirely right when you view it locally, since you are not a Runestone server, but you should see subtle differences.
While this HTML may be manually deployed to any Runestone server, authors who wish to publish their
work on the Runestone Academy
server have a few more requirements.
Hosting on Runestone assumes certain details conform to how a project is organized for use by the CLI ().
So if you are managing your project with the CLI already, you are in good shape.
If you did not create your project using pretext new, run pretext init to get started upgrading.
You will also need to make your project available to the public via GitHub (instructions below).
Copy the publication file you usually use for your html-format build target and name it as
publication/runestone.ptx (or something similar that makes sense in your project).
Edit this file so your html element matches the example at the start of this section.
You should create a new <target name="runestone"></target> in your project.ptx.
The contents of this tag will differ from your usual html-format build target in the following ways.
1) You should change your publication to point to the new file you just created, perhaps named publication/runestone.ptx.
2) You should change your output-dir to point to published/document-id,
where document-id is defined in your docinfo. Note Runestone's preferred practice
for the document-id is to have a simple lowercase string with no dashes or other special characters.
This value is visible to readers who want to register for your course on Runestone outside of any formal setting.
Update the docinfo section of your book so that it includes a blurb
with a shelf. The blurb should not contain any additional markup, just a simple
string, that describes your book. Think of something like what you would read on a book jacket.
It might even also be used automatically in the future for exactly that:
a blurb on the back cover of a hardback book. So keep it simplestraight ASCII text, nothing fancy.
The shelf tells the Runestone software where your book belongs in the categories
on the Runestone library page. Look at the Runestone library page to see what values are in use
and copy an existing one exactly including capitalization.
If you think a new shelf is necessary in the library, please seek advice on what to use.
Use pretext deploy on the command line, or simply git push the changes described above
to GitHub if you are comfortable with git. The deploy command will walk
you through setup if you have not deployed your project to GitHub before. You do not have to
enable GitHub Pages unless you want to. (GitHub Pages does not have the features of a Runestone
server, and will not render a build for the Runestone target properly. You can host your regular
html-format build on GitHub.)
With Runestone Academy and the author interface you can see a draft of your book on
author.runestone.academy
When you are ready you can make a published version of your book available with the click of a button.
We can set up access to the author interface when you open an issue (in the next step) requesting that your book be added to Runestone Academy.
Log into GitHub and open an issue at
to request that your project be added to Runestone Academy. Be sure to provide the URL of your GitHub repository (e.g.
https://github.com/UserName/repo-name/). Runestone Academy administrators will communicate with you via GitHub to
complete this process. When your book is first added to Runestone, it will clone your repository and build from your default
branch. The default branch is configured on GitHub and is usually main or master but can be anything.
However if you change your default branch after your book is added to Runstone you will need to get in touch with the
Runestone Academy administrators to get them to re-clone your repository.
The Author InterfaceAuthor Interface Basics
The author interface is a web-based interface that allows you to manage your book on Runestone Academy. It is designed to be easy to use and provides a number of features to help you manage your book.
When moving your book to Runestone Academy we will clone your repository to our server. We do this one time, after that we use git pull to get the latest changes from your repository. This means that you can make changes to your book on your local machine and push them to GitHub, then use the author interface to pull those changes into Runestone Academy and rebuild your book. Ideally your document-id and the name of your repository are the same.
Configuration Tip
If your document-id and repository name do not match, then you will need to update the Path to existing repo in the author interface metadata before you build your book. This should not be a GitHub URL, it is just the name of your GitHub repository (see ).
If your book has already been cloned on Runestone, then you cannot clone it again. If you think you have a use case where this is absolutely necessary please reach out to someone on the team to talk about it.
The author interface is available at . You can log in with your Runestone account. Once you have logged in you will see a list of your books. You can click on the book title to to edit metadata about your book. The author interface is also where you can build a new version of your book, see some analytics about your book, and publish your book to the Runestone Academy servers. You can even get an anonymized data set from a large sample of the classes using your book.
The author interface main page
The author interface lets you pull changes from GitHub and rebuild your book.
The main page of the author interface gives you access to all of the different functions. Clicking on the build button pulls the latest source from GitHub and builds your book. If you have a large book this can take a few minutes. When the build is complete you deploy your book to the runestone servers. You will see the build status change at the bottom of the page. If there is a failure for any reason you can usually see the cause by clicking the button to view the latest log.
Another feature of the author interface is to provide you with some analytics. This page shows you the number of students that have enrolled in a course using your book year to date. It also shows you usage patterns for the book by the week of the course. You can click on any of the shaded cells to drill down and see how students are viewing the sections of each chapter.
Some example analytics for your book
An impact report for Foundations of Python Programming
The Analytics are in their early stages so we encourage you to contact us with ideas for what kinds of data you would find useful.
If you click on the book's identifier you will be able to edit metadata about the book. This is reflected in our library page so you can change the shelf section or update the blurb that describes your book to an audience. The Available for courses and Visible to Everyone in the Library checkboxes allow you to control the visibility of your book. If you are in the early stages of development you probably do not want others to see the book, but you can always view it via a direct link. When you are ready to make your book available to the world you can check the Visible to Everyone box and your book will appear in the Runestone Library. When you are ready to let others create a course around your book you can check the Available for Courses box. This will allow others to create a course using your book as the textbook. You can always change these settings later.
Editing a book's metadata
Editing metatdata about a book
Advanced Author Interface
The author interface also provides a number of advanced features to address the following scenarios:
Your repository and your document-id do not match.
Your repository is structured so that your project.ptx file is not in the root of your repository.
You have a single repository with more than one book.
You want to produce multiple books from a single repository using the PreTeXt versions feature.
If your repository name and your document-id do not match you will need to fill out the the path to an existing repository field so that it matches what you checked out from GitHub.
If your repository is structured so that your project.ptx file is not in the root of your repository you will need to configure the path to the project.ptx file. This is done by filling in the field for the path to the project.ptx file. This should be a relative path from the root of your repository to the project.ptx file.
If you have a single repository with more than one book you will need to do the following steps.
Create a new book for book number 1 on the main author page using the GitHub URL to your repository.
Make sure you have a target in your project.ptx file for this book and it is configured to use the publication file you created for Runestone.
Edit the metadata for your book in case any of the other advanced configuration situations apply.
To create book number 2 on the main author page use the path to an existing repository field. This should be /books/<your-repo-name>. Leave the GitHub URL field blank.
Depending on how your repository is structured you may need to make sure you have a second target for the second book with a different output folder configured and a different document-id. Alternatively you may have an entirely separate project.ptx file for the second book in a different folder of your repository. In this case you need to fill in the field for the path to the project.ptx file.
If you have a single repository and want to build two books using different versions then the process is the same as above, but you will need to have a second publisher file with the appropriate version information so that you will get a different output. This includes using the component on the document-id element. This will allow you to have two different books in the same repository with different document-ids.
================================================
FILE: doc/guide/publisher/slides.xml
================================================
Conversion to Slidesslides
As discussed in and ,
support is available for authoring slideshows in . Currently, slideshows
must be authored explicitly, but we hope to eventually support annotating
books and articles to export appropriate content as slides.
Reveal.js
To create a reveal.js slideshow using pretext, start by creating a new project as follows.
pretext new slideshow
You will notice a few differences from a standard project. In the project manifest, the format is custom, and there is an xsl tag that points to a custom xsl stylesheet in the xsl folder of the project. This will import the correct reveal.js stylesheet. After authoring your slides, you can build them with the following command.
pretext build web
To use xsltproc, run this to produce a Reveal.js slideshow:xsltproc --xinclude -o path/to/output/slides.html --stringparam publisher path/to/source/publication.xml path/to/pretext/xsl/pretext-revealjs.xsl path/to/source/slides.xml
Reveal.js supports themes that affect the overall appearance of a slideshow.
So in you can specify the name of theme in a publication file.
See for details.
You might assume that your slideshow will be presented with the internet available,
perhaps in a classroom, and will be updated for use the next semester.
Or maybe you are presenting at a conference where you do not want to trust an unfamiliar internet connection,
and you will later host an archival version of your presentation on your website and you want it to just work ten years from now.
So you can configure your slideshow to obtain resources from a Content Delivery Network (CDN) online,
or you may arrange to copy the necessary files from reveal.js and store them locally (your hard disk, your website).
See for details on specifying these options, and see below for directions on how to organize the Reveal.js support files.
Reveal.js will render syntax with MathJax,
entirely similar to how MathJax is used in the conversion to HTML.
This is accomplished with the Reveal.js math plugin, which is loaded automatically as part of your output. When you specify that resources come from a CDN, then this plugin will also get MathJax from a CDN.
When you specify that resources are available locally (your hard disk, your website),
then the plugin itself will be obtained locally, but MathJax will still be obtained from a CDN.
So a local version may only be practical if you are careful not to include any mathematics in your document.
(Reveal.js can be configured to use a locally installed copy of MathJax, but we have not provided any support for this scenario.)
We are not enthusiastic about PDF as an electronic format.
But it might be a good choice as an archival format.
So exporting your slideshow to a PDF could be a good choice for a long-term archive.
On 2020-08-01 Andrew Rechnitzer suggests the decktape node (Javascript) program.
The reveal plugin works well once you settle on a resolution (the -s option).
The generic plugin, along with the default key action (ArrowRight) can capture the behavior of slides built using the pause attribute.
Note that the grid option (see below) may not always work well for printing all slides, while default creates slides that decktape steps through properly.
A local web server can also be employed to serve up the slides, see .
Navigation Mode
Reveal.js has various options of the visibility of arrows a presenter can click on in order to move through a presentation.
The visibility of these can be controlled via options in the publication file. See .
Reveal.js imagines slides laid out on a 2-D grid. Each section gives rise to a title slide and these are organized left-to-right. Below each of these slides, arranged vertically, are the slides comprising the section. We use the attribute value grid to refer to this arrangement.
If public speaking makes you nervous and going left-to-right and top-to-bottom
nearly simultaneously means you get lost and even less confident (we've seen it),
we have an option for you.
The attribute value linear arranges all your slides from left-to-right.
Aah, that's better.
See for details on setting the navigation mode for your slideshow.
Local Resources
To set up a Reveal.js slideshow to run locally, you need to have certain files available locally. We describe here the exact mechanics of doing this.
Suppose you have done the conversion, and have created a single slides.html file, which you have placed in a directory named talk. Now download or clone the git repository for Reveal.js (). This has a dist directory with four files, such as reveal.css, and also directory of themes, named theme. Copy these files and the directory to talk. Another directory in the repository is named plugin. Copy this directory to talk as well.
This process will duplicate more files than you need. Suppose your talk is produced to use the solarized theme (), and includes some math. Then as an example of how the copying should go, and as an example of the bare minimum necessary, your talk directory should be organized as follows.
Run this to produce a Beamer slideshow:xsltproc --xinclude -o path/to/output/slides.tex path/to/pretext/xsl/pretext-beamer.xsl path/to/source/slides.xml
Of course, you should then run e.g. pdflatex slides.tex to produce a PDF.
================================================
FILE: doc/guide/publisher/web-hosting.xml
================================================
Hosting Your Online Version
You have HTML output, and now where do you put it? A fundamental design decision is that you only need to simply upload your HTML files to a hosting service and since all the links are relative, readers should be able to read your whole book with no more effort than that from you. By design, no extraordinary configuration or privileges are necessary on the server.
Users of the PreTeXt-CLI (Section) have access to pretext deploy, which walks users through the process of deploying their document to the free GitHub Pages service, even if they don't manually manage their Git revision history.
Otherwise, for the choice of a hosting service you may have a fundamental decision to make. Mostly this applies to authors who are employees of an institution, yet have the freedom to control the copyright on their scholarly work. But there is information here for independent scholars and for other employees.
You love your institution, and plan to stay for a good long time. They have implicitly (or explicitly) supported your project with time and/or money. A URL with the insitution's domain name on a freely-accessible project is good advertising for the institution. Bandwidth is huge, IT is super reliable and helpful, all this is no-cost to you. Read the next scenario, but you have a good situation, so you might as well use it.
You are not really attached to your institution, and five years from now you may be somewhere else. Consider hosting your project externally, so it is not tied to your institution.
Or maybe policy on faculty web pages, or crummy content management systems, make it difficult or impossible to host your project. Or it is buried five levels deep with an impossible URL. Point out the situation to your Provost or Dean, with examples of how other institutions do it right. Remember that your colleagues may be writing monographs and textbooks for commercial publishers, likely with institutional support, and selling their copyright. Your institution should be proud to host your project prominently. If a reasoned, rational approach does not improve the situation, then consider hosting your work elsewhere.
If you are hosting at your institution, that is a great outcome. There is no cost to you, and everybody is happy. Lobby for a great URL, like platypus.mammal-institute.org and the rest should take care of itself. The rest of this section is about the second situation.
To arrange hosting yourself,
Purchase a domain name, it should not be a real big annual expense. Choose something professional, rather than just your name (though your name does have a natural appeal). And maybe something general enough that you can host your next book under that same domain name. The idea here is to own the domain name, so your book can move anywhere, but that domain name will always point to the book. This name should be owned and controlled by you, not your institution, not GitHub, not 5GBFree.com.
Sign up for, and perhaps pay for, a hosting service that lets you point your domain name at the site.
Oscar Levin explains that GitHub Pages is free, super-easy to use if you already use git, and makes using your domain name (custom URL) nearly trivial. (2017-09-08)
Mitch Keller likes the Swift plan at A2 Hosting at about $60 annually. (2017-07-05)
Now you are set, and control distribution of your scholarly publication. If you are bothered by the thought of having expenses while you make your work freely available to the world, then consider generating some modest income. For example, sell Google ads against your pages. (Why should this disturb anybody? I don't get it.) Or roll a small royalty into the print-on-demand version, see .
There are a few practical details to think about. Eventually others will link to your book, and you will also release updates. First, think about creating a simple high-level directory that will be stable, short, easy to type, and easy to remember. Controlling your domain name (above) is the first step. Then consider that you may also distribute a PDF version, and you may someday write a second book. So, for example, your URL might look like:
For the first URL, the html directory would contain all of the HTML output, and especially, an index.html file which most any web server will serve up when the URL ends with a directory. has tools to help you with creating the index.html file.
An improvement on the above is to have stable generic URLs for the current version, and dated, or versioned, URLs for older versions you may wish to keep in place (as a record, or for instructors who want to stick with an old version). It is a bit more work to maintain, but will lessen the frequency that an old version of your work is promoted as the last word.
================================================
FILE: doc/guide/publisher/webwork.xml
================================================
Exercises exercisesAlex Jordan
You can embed exercises in your project. This requires using a
webwork2 server that is version 2.16 or later. The server could be the AIM
server that has been set up for this purpose, so to get started, there is no need to establish
your own webwork2 server.
Part of the process can optionally be sped up by using a local copy of the pg
repository.
PDF and other static output formats will display static versions. HTML output can have
interactive exercises or display problems in static form. If the HTML book is hosted on
Runestone, reader interactions can be recorded so that scores can be given to students.
All such exercises can be archived into a file tree to be uploaded onto a webwork2
server for use in the traditional way.
See for how to include or create problems in your
source.
Using a Local Copy of PG
problems can be processed using a local copy of the pg repository. This can
siginificanlty speed up processing time, compared with the other options that use a network
connection.
To use this processing method, clone the pg repository. The code below places it in a
default location, but you could place it somewhere else.
cd /optmkdir webworkcd webworkgit clone https://github.com/openwebwork/pg
Note that you should end up with a verion of pg that is 2.19 or later. To check,
examine the VERSION file in the root of the repository.
Set the PG_ROOT environment variable to be the path to your copy of pg. If it is
at the default location, you could run:
export PG_ROOT=/opt/webwork/pg
This will only define $PG_ROOT for your current terminal session, so you might also do
whatever is appropriate on your system to set PG_ROOT each time a terminal session
begins.
In pg/conf/, make a copy of pg_config.dist.yml called pg_config.yml. In
general you should read through all the settings and set them appropriately. At a minimum, set
directories: root: to the absolute path to your clone of pg. You may need to set
paths in externalPrograms: as well. And maybe more...
For in general you should already have ImageMagick installed. Somewhere in your
file system is an XML file that ImageMagick uses to control permissions. The file is named
policy.xml and might be located in a place like /etc/imagemagick/policy.xml
or /etc/ImageMagick-6/policy.xml. (If your version of ImageMagick is not 6, it's
possible none of this is necessary. But also it should be harmless to continue.) In this file,
within the policymap element, add the element:
<policy domain="coder" rights="read" pattern="PDF" />
Depending on your file, you may need to replace a similar line that is assigning
rights="none". Make sure that this is not within a commented out portion of the file.
You need to have a recent enough perl version. Version 5.32 is known to work, and versions as
early as 5.26 may work, but have not been thoroughly tested.
PG also uses perl packages that you may not yet have and need to install. These may be
available from Linux package distributions, and the details differ from one flavor of Linux to
the next. Alternatively there is a utility called cpanm (cpanminus) that is supposed
to let you manage perl module installation across Linux flavors. One important difference is
that cpanm only manages perl modules. And sometimes a perl module is actually an
interface between perl and some other system utility. cpanm will not actually install
that system utility that it depends on and will just quit. Whereas Linux package distributions
will have a more sophisticated dependency understanding, and try to install non-perl tools
when needed. So you want to try to use Linux package distributions where you can. Or else use
cpanm and perhaps be prepared to read the log if it fails and attempt to install some
non-perl tool that a particular module depends on.
Here is a list of all the perl modules you might need. Some are essential, and some are only
needed for tools that many exercises will not use. CarpClass::AccessorClass::TinyData::DumperDBIDigest::MD5File::CopyFile::FindFile::PathFile::SpecGDGetopt::LongHTML::EntitiesLocale::Maketext::LexiconMIME::Base64Mojo::BaseMojo::IOLoopMojo::DOM Mojo::JSONOpcodePandocPerl::TidyPod::Simple::SearchScalar::UtilSocketTie::IxHashUUID::TinyYAML::XS. If you don't have one of these that is needed, and you
attempt to process problems using local PG processing, you will get a clear
message about which module is missing that you must pursue installing it.
Here are some Linux package collections that we think are sufficient (but please report if
you find them to be insufficient).
List not yet gathered. Please report if you put together a good list.
To try to install using cpanm, of course first you must have cpanm. Try
cpanm --version to see if you have it. If not, follow installation instructions for
Ubuntu,
Debian
(sudo apt install cpanminus), RedHat (sudo dnf install perl-CPAN), or MacOS
(brew install cpanminus, requiring you first install
Homebrew). Or you could install
cpanm directly following
these instructions.
Once you have cpanm, you can opt to install the above modules one at a time, or all at
once. Either way, it is probably adequate to install the modules as your own user. And yet we
will recommend that you install the modules as root to avoid certain installation headaches
and so that your system is set up to use webwork2 if that is ever desired. To install
one at time, run commands like: sudo cpanm Carp. But proceed through each module listed
above. This will help you clearly see if there was an issue during installation. To install
all at once: sudo cpanm Carp Class::Accessor ... YAML::XS, replacing the dots with the
full list of modules above.
One known bump in the road may come with the GD module. You may need to actually
install gd first, which is not a perl module. The perl GD module is the perl
bridge to gd. For Ubuntu/Debian, install these packages: pkgconf, gdliblibgd-dev.
Now in a publisher file, you can set the webwork element to have
static-processing with value local (see
). If you put the pg repository
in the default location, this is all you need to do. Otherwise, you also need to add the
attribute pg-location with the absolute path, for example /opt/webwork/pg
(see ). And when you process
exercises for static representations (following ) your
local copy of PG will be used instead of some remote server.
Note that you will still need a network connection for problems in your HTML output to render
as live interactive exercises.
Configuring a webwork2 Server for
Note that the default webwork2 server for is
, and this server
is already configured. If you are configuring your own server, read on.
We assume a mild familiarity with administrating a server. The version of
needs to be 2.16 or later for use with .
The only thing you need to do at the serverlevel is set the web server to use certain headers
on content that is fetched. These headers tell a web browser that you are authorizing it to
display content from this web server as embedded content inside pages from another web server
(in particular, where you are hosting you book).
2.16 or 2.17
In webwork2/conf/ there should be the apache configuration file
webwork-apache2.4-config. This file needs to include the lines:
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Origin "*"
]]>
Note there is the distribution file webwork-apache2.4-config.dist, which has these
lines (or similar lines) commented out.
You may also need to enable headers by executing something like sudo a2enmod headers
from the command line.
2.18
Edit webwork2/conf/webwork2.mojolicious.yml and uncomment these lines:
Note the html2xml lines can remain commented out, unless you have some other reason
to uncomment them.
Also in this same file, set allow_unsecured_rpc: 1.
You will need to restart the webwork2 service.
Configuring a Course for
To make use of in your project, you need a host course. If
someone is providing a server for you, like the AIM server at
, then we assume
they have already configured a course for use with , and you may skip this section
and move on to .
If you are configuring your own server to use with , we assume a mild
familiarity with administrating a server. The version of needs to be
2.16 or later for use with .
Using the admin course, create a course named anonymous. (You could name it
something else, but we assume the name is anonymous in this guide.) In the course's
Course Configuration menu, set all permissions to admin (or perhaps set some to the
even more restrictive nobody). Except set Allowed to login to the course to
login_proctor. Also if your server is new enough, it has
Allowed to view course home page which should also be set to login_proctor.
In the Accounts Manager(Classlist Editor in older versions of ), add a user named
anonymous (again, you could use some other name), and set that user's permission level
to login_proctor, the permission level one higher than student. Set that user's
password to anonymous (again, you could use some other password). Note that because
this is public information, anyone will be able to log into this course as this user. This is
why restricting permissions in the previous paragraph is very important.
Add the following lines to the course.conf file (which lives in the parent folder of
the templates/ folder.)
# Hide message about previewing hints and solutions for instructors
$pg{specialPGEnvironmentVars}{ALWAYS_SHOW_HINT_PERMISSION_LEVEL} = 100;
$pg{specialPGEnvironmentVars}{ALWAYS_SHOW_SOLUTION_PERMISSION_LEVEL} = 100;
2.16, 2.17, or 2.18 (not needed for 2.19 or later)
In the templates/macros/ folder, edit PGcourse.pl (or create it if need be)
and add the following lines.
#### Replace essay boxes with a message
my $essay_message = 'If you were logged into a WeBWorK course '
. 'and this problem were assigned to you, '
. 'you would be able to submit an essay answer '
. 'that would be graded later by a human being.';
sub essay_box {
my $out = MODES(
TeX => '',
Latex2HTML => '',
HTML => qq!<p>$essay_message</p>!,
PTX => '',
);
$out;
};
sub explanation_box {
return if ($envir{waiveExplanations});
my $out = MODES(
TeX => '',
Latex2HTML => '',
HTML => qq!<p>$essay_message</p>!,
PTX => '',
);
$out;
};
#### Suppress essay help link
sub essay_help {};
#### How many attempts until hint is available
$showHint = -1;
# May be a bug that WeBWorK requires -1 instead of 0
# for immediate access to hints
1;
Now will be able to communicate with this course to retrieve what is needed.
PG Macros from the Source
The project's exercises may rely on PG macros that are written into the project's
source. For example, the exercises might have TikZ images that rely on
docinfo/latex-image-preamble.
For this, a PG macro library file must be built and placed in the host course's
templates/macros/ folder before attempting to process the
exercises. To build this macro library, run:
pretext -c pg-macros aota.ptx
aota.ptx in the example is the root file for your project. You could also
specify a location to place the resulting macro library file:
pretext -c pg-macros -d some/file/path aota.ptx
Once you have the macro library file, upload it to the host course's
templates/macros folder. If your project relies on the AIM server and you
need to supply a macro library file to a host course on that server, post to
pretex-support@googlegroups.com and we can help with that.
Processing ExercisesExtraction and Processing
Before anything else can be done, a project with problems must first
have its content extracted and processed into multiple representations, which are
then collected into an auxiliary XML file. Using the CLI, this is done with
pretext generate webwork (if you want to reference a particular target, add
-t [targetname]).
If instead you want to use the pretext/pretext/pretext script, you might need to
install the Python requests module. It is not uncommon for your computer to not have
requests installed (although it comes with the CLI), so you should check if it is
there and install it if need be. You can check if it is installed from the command line
with:
python -c "import requests"
And if it isn't, you can install it with pip, specifically with:
pip install requests
(If you don't have pip installed, you could use:
easy_install pip
to install it.)
Processing problems is best accomplished if you are using directory management.
With a publication file, declare the external and generated directories as describe in
. Then use the pretext script to extract
content from the server. It will be placed in a webwork
subfolder of your generated folder. For example:
pretext -c webwork -p <publisher> aota.ptx
aota.ptx in the example is the root file for your project.
File Paths
In the previous example and those that follow, you should specify paths as needed. For
example, the pretext script is typically at ~/pretext/pretext/pretext. And
the -p option is specifying a publication file.
-c webwork means you are processing the components.
-p specifies the publication file (see ).
In the publication file, the element webwork may have attributes:
server ()
course ()
user ()
password ()
If absent, these default to https://webwork-ptx.aimath.org, anonymous,
anonymous, anonymous, and anonymous respectively. If you specify a
server, you must correctly specify the protocol (http versus https). And it
must be version 2.16 or later. Do not include a trailing slash.
HTML output
We assume you are using managed directories, and have representations file as
above. Build the HTML with pretext build TARGET where TARGET is the name of
a target that has format="html". You can also use pretext/pretext to build
HTML. For example:
pretext -c doc -f html -p <publisher> -d <destination> aota.ptx
-p specifies the publication file, as described in
.
-d specifies a folder to place all of the HTML output. If unspecified, this will be
the current working directory.
There are five publisher file entries which control how a problem is realized
within HTML output. These are divided based on where the exercise (or
project-like) resides: inline, within a division of exercises, within a reading questions
division, within a worksheet, or if it is a project or similar. If the class of problems
is declared dynamic, then each problem has a button that readers can click to make
the problem interactive. Conversely, if the class of problems is declared static,
then the problems render with a static preview.
By default, inline exercises and project-like will be dynamic, under the assumption that
these are meant to be worked as a reader works through the material. The others will be
static, under the assumption that they will be placed on a WeBWorK server where they will
be worked for scores and grades. See for the
precise syntax for these switches.
If an exercise is subdivided into tasks, then by default they will only be revealed
incrementally as the reader answers each one correctly. If you would like to have all tasks
revealed from the start, then this option may be elected in the publication file (see
).
output
We assume you are using managed directories, and have representations file as
above. Then build as normal with the CLI. Or you may use pretext/pretext to build a
PDF. For example:
pretext -c doc -f pdf -p <publisher> -d <destination> aota.ptx
-p specifies the publication file, as described in
.
-d specifies a folder to place the PDF output. If unspecified, this will be the
current working directory.
Creating Files for Uploading to
All of the webwork that you have written into your project can be
harvested in such a way that you could send them to a server for use
within . The components you would want are PG files for the exercises, PG macros
that you wrote, set defintion files corresponding to the sections (or other chunks) of your
project, and header files for those sets. All of this was placed into your project's
generated/webwork/pg folder when you executed pretext -c webwork, so you could
find it there and package it all up to send to your server.
Alternativley, you may run the following:
pretext -c all -f webwork-sets -p <publisher> -d <destination> aota.ptx
This will specify a destination for that folder tree other than within
generated/webwork/pg. If you additionally use a -z flag, you will instead get
a compressed tarball (.tgz file).
Unachievable Conversions
By authoring problems within you do not need to learn all the ins and
outs of PGML markup and you can concentrate on simply becoming proficient with
. However, there are a few constructions which are not achievable in a
problem for one reason or another. We list exceptions here, and also try to use
source-checking tools to alert you to any differences.
Anything that is the numbered target of a cross-reference, such as a figure, may not be
inside a exercise. The exercise may go on to have a life of its own
independent of its parent project, and then such a number makes no sense.
Certain aspects of specifying borders of a tabular are not
realizable in a PGML table. Specifically,
Specifying column-specific top border attributes are not implemented.
Cell-specific bottom border attributes are not implemented.
medium and major table rule-thickness attributes will be handled as
if they were minor.
When constructing a list (ul or ol) specifying some number of
columns (using the cols attribute) will be ignored. PGML markup has no way
to declare multicolumn lists.
================================================
FILE: doc/quickref/README.md
================================================
# Quick Reference (aka "quickrefs")
These "cheat sheets" are in the style of similar quick reference sheets pioneered for topical areas of Sage Math software. Two pages maximum, so they can be printed on one sheet of paper (two-sided).
* `quickref-pretext.tex`: general authoring techniques, initiated by Tom Judson
* `quickref-cli.tex`: basic usage of the PreTeXt CLI, initiated by Tom Judson and Oscar Levin
Authored in LaTeX, given their structure, which would not be well-represented in PreTeXt. Built PDF versions are available on the PreTeXt website. If you build your own copies while editing, use `xelatex`, not `pdflatex`.
Extensions, edits, and reorganization are all welcome contributions. Topics represented by additional quickrefs would also be welcome.
================================================
FILE: doc/quickref/quickref-cli.tex
================================================
% PreTeXt CLI Quick Reference
% (c) 2022 by Steven Clontz, Thomas W.\ Judson, and Oscar Levin
% Licensed with the GNU Free Documentation License (GFDL)
% http://www.gnu.org/copyleft/fdl.html
%
% History
%
% 2012-06-15 Initial version based on Sage 9.4
%
%
\documentclass{article}
\usepackage{graphicx}
\usepackage[landscape]{geometry}
\usepackage[xetex]{color}
\usepackage{url}
\usepackage{multicol}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{textcomp}
\newcommand{\ex}{\color{blue}}
\newcommand{\apost}{\textquotesingle}
\newcommand{\warn}{\bf\color{red}}
\pagestyle{empty}
\advance\topmargin-.9in
\advance\textheight2in
\advance\textwidth3.0in
\advance\oddsidemargin-1.45in
\advance\evensidemargin-1.45in
\parindent0pt
\parskip2pt
% Section break, dictates column widths?
\newcommand{\hr}{\centerline{\rule{3.5in}{1pt}}}
% Adjust gap to affect spacing, page count
\newcommand{\sect}[1]{\hr\par\vspace*{2pt}\textbf{#1}\par}
% Mandatory indentation on subsidiary lines
\newcommand{\skipin}{\hspace*{12pt}}
% notation shortcut
\newcommand{\Z}{\mathbb{Z}}
\begin{document}
\begin{multicols*}{3}
\begin{center}
\textbf{PreTeXt Quick Reference:\\ Command Line Interface (CLI)}\\
% Steve Clontz, T.\ W.\ Judson, and Oscar Levin \\
CLI version 2.0.0, 2023-09-12 \\
Full documentation: \url{pretextbook.org}\\
% Switch to CC?
GNU Free Document License, extend for your own use
\end{center}
% backup over center environment gap
\vspace{-3ex}
%*********************************************
\sect{Setup}
\hr\textbf{Check requirements}\\
\underline{Note}: {\verb|python|} might be called {\verb|python3|} if you have MacOS or Linux.
{\ex \verb| python --version|} : the CLI requires Python version 3.8 or later\\
{\ex \verb| pip --version|} : pip is the package installer for Python \\
{\ex \verb| xelatex --version|} : some PreTeXt features require \LaTeX \\
\hr\textbf{Install PreTeXt}\\
{\ex \verb| python -m pip install pretext|} : install PreTeXt \\
{\ex \verb| pretext --version|} : check version to verify install \\
\hr\textbf{Create a new project}\\
{\ex \verb| pretext new book|} : creates a new PreTeXt book in \texttt{new-pretext-project}\\
{\ex \verb| pretext new article|} : creates a new PreTeXt article \texttt{new-pretext-project}
\hr\textbf{Update a project to use the CLI}\\
{\ex \verb| pretext init|}: creates project manifest ({\verb|project.ptx|}), and publication file ({\verb|publication/publication.ptx|}). Edit these files appropriately before proceeding. \\
{\ex \verb| pretext pretext init --refresh|}: creates new copies of project manifest and publication file to compare for new features.
\hr\textbf{Upgrade PreTeXt}\\
{\ex \verb| python -m pip install --upgrade pretext|}: upgrade to latest stable release \\
\hr\textbf{Get Help}\\
{\ex \verb| pretext --help|}: show general help\\
{\ex \verb| pretext build --help|}: show help for build command. Each subcommand has its own help.
%
%*********************************************
%*********************************************
\columnbreak
\sect{Basic Usage}
\hr\textbf{Build a PreTeXt document}
{\ex \verb| pretext build|}: Builds the project to the format of the first target in {\verb|project.ptx|}.\\
{\ex \verb| pretext build print|}: Create pdf version (assuming {\verb||}) is in {\verb|project.ptx|}\\
% {\ex \verb| pretext build print|}: Create print (pdf) version\\
\hr\textbf{Generate source images and WeBWorK}\\
If your book has any WeBWorK, latex-image, asymptote, sageplot, interactive, etc. assets will be generated on each build. You can generate separately with:\\
{\ex \verb| pretext generate|}: Generate all assets for first target in {\verb|project.ptx|}.\\
{\ex \verb| pretext generate webwork|}: Generate webwork for first target in {\verb|publication.ptx|}\\
{\ex \verb| pretext generate sageplot -t print|}: Generate sageplot for target ``print''.\\
{\ex \verb| pretext generate latex-image -x img-graph1|}: Generate latex-image with xml:id ``img-graph1'' (for first target).\\
%*********************************************
\hr\textbf{View a PreTeXt document (local)}
{\ex \verb| pretext view|}: Creates a local server to preview the first target in {\verb|project.ptx|}\\
{\ex \verb| pretext view print|}: Views the ``print'' target\\
% {\ex \verb| CTRL+C|} to close the server\\
%*********************************************
%*********************************************
\hr\textbf{Deploy to GitHub Pages}
{\ex \verb| pretext deploy|} : deploys Git-managed project to GitHub Pages\\
% {\ex \verb| pretext deploy -u|} : deploys and also uploads source files\\
%*********************************************
% \hr\textbf{Useful Shortcuts}
% {\ex \verb| pretext build -g|}: build and generate in one step\\
% {\ex \verb| pretext build web -g latex-image|}: build web target and generate latex-images\\
% {\ex \verb| pretext view -b|}: build before you preview\\
% {\ex \verb| pretext view -g|}: generate assets before you view\\
% {\ex \verb| pretext view -bg|}: generate assets, build, and view\\
\columnbreak
%*********************************************
\hr\textbf{Project Manifest}
The file {\verb|project.ptx|} describes your build targets. Each target has a \emph{name} (e.g. ``print-latex'') that you build or view with, e.g. {\verb|pretext build print-latex|}.
Structure of a target:
\begin{verbatim}
\end{verbatim}
{\ex \verb|format|} can be html, latex, pdf, custom, epub, kindle, or braille\\
Additional attributes:\\
{\ex \verb|source|} is the path to the root ptx document. Default: \texttt{source/main.ptx}\\
{\ex \verb|publication|} is the path to the publication file. Default \texttt{publication/publication.ptx}\\
{\ex \verb|output-dir|} is the path the the folder that will hold output. Default is \texttt{output/[target name]}\\
\sect{Recommended Project Structure}
{\ex \verb|assets|}: Contains all static assets.\\
% , such as a photo at {\verb|assets/frog.jpg|} used as {\verb||}.\\
{\ex \verb|generated-assets|}: Contains the products of running {\verb|pretext generate|}. Should not be edited manually. \\
{\ex \verb|output|}: Contains the products of running {\verb|pretext build|}. Should not be edited manually. \\
{\ex \verb|publication|}: Contains your publication file(s) (e.g. \verb|publication/publication.ptx|). \\
{\ex \verb|source|}: Contains your PreTeXt source file(s) (e.g. \verb|source/main.ptx|). \\
{\ex \verb|project.ptx|}: Describes your project's targets (e.g. \verb|web|, \verb|print-latex|) and executables.\\
% {\ex \verb|README.md|}: Written description of your project.\\
{\ex \verb|requirements.txt|}: Specifies version of CLI used to build your project.\\
{\ex \verb|.gitignore|}: Specifies files not shared publicly when using Git or \verb|pretext deploy|.
%*********************************************
% \newpage
% \columnbreak
% \hr\textbf{publication.ptx}
% Information about the publication file goes here.
% \columnbreak
% \sect{Common PreTeXt source tags}
% \hr\textbf{Blocks/Environments}
% Example:
% \begin{verbatim}
%
% My Title
%
%
% Statement of theorem.
%
%
%
%
% The proof.
%
%
%
% \end{verbatim}
% Theorem-like: {\ex\verb||}, {\ex\verb||}, {\ex\verb||}, {\ex\verb||}, {\ex\verb||}, {\ex\verb||}, {\ex\verb||}, {\ex\verb||}.\\
% Example-like: {\ex\verb||}, {\ex\verb||}, {\ex\verb||}.\\
% Axiom-like: {\ex\verb||}, {\ex\verb||}, {\ex\verb||}, {\ex\verb||}, {\ex\verb||}, {\ex\verb||}.\\
% Remark-like: {\ex\verb||}, {\ex\verb||}, {\ex\verb||}, {\ex\verb||}, {\ex\verb||}, {\ex\verb||}.\\
% Project-like: {\ex\verb||}, {\ex\verb||}, {\ex\verb||}, {\ex\verb||}.\\
% Other common blocks:\\
% {\ex\verb||}\\
% {\ex\verb||}\\
% {\ex\verb||}: a division of an exercise or project-like\\
% \columnbreak
% \hr\textbf{Examples}
% Examples go here.
\end{multicols*}
\end{document}
================================================
FILE: doc/quickref/quickref-pretext.tex
================================================
% Sage CLI Quick Reference
% (c) 2022 by Thomas W.\ Judson,
% Licensed with the GNU Free Documentation License (GFDL)
% http://www.gnu.org/copyleft/fdl.html
%
% History
%
% 2012-06-15 Initial version based on Sage 9.4
%
%
\documentclass{article}
\usepackage{graphicx}
\usepackage[landscape]{geometry}
% presumes xelatex, so other character sets behave better
\usepackage[xetex]{color}
\usepackage{url}
\usepackage{multicol}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{textcomp}
\newcommand{\ex}{\color{blue}}
\newcommand{\apost}{\textquotesingle}
\newcommand{\warn}{\bf\color{red}}
\pagestyle{empty}
\advance\topmargin-.9in
\advance\textheight2in
\advance\textwidth3.0in
\advance\oddsidemargin-1.45in
\advance\evensidemargin-1.45in
\parindent0pt
\parskip2pt
% Section break, dictates column widths?
\newcommand{\hr}{\centerline{\rule{3.5in}{1pt}}}
% Adjust gap to affect spacing, page count
\newcommand{\sect}[1]{\hr\par\vspace*{2pt}\textbf{#1}\par}
% Mandatory indentation on subsidiary lines
\newcommand{\skipin}{\hspace*{12pt}}
% notation shortcut
\newcommand{\Z}{\mathbb{Z}}
\begin{document}
\begin{multicols*}{3}
\begin{center}
\textbf{PreTeXt Authoring Quick Reference}\\
% change review date iff there is an actual
% review, not just some isolated update
Version 1.0, reviewed 2022-07-27\\
T.\ W.\ Judson and others??? \\
GNU Free Document License, extend for your own use. \\
For more details, see \url{https://pretextbook.org/doc/guide/html/}
\end{center}
% backup over center environment gap
\vspace{-2ex}
%*********************************************
\sect{PreTeXt Documents}
For an article
\footnotesize{
\begin{verbatim}
Hello World!
This is a PreTeXt document.
\end{verbatim}
or a book
\begin{verbatim}
Hello World!My Great Chapter
This is a PreTeXt document.
\end{verbatim}
}
%
\sect{Structure of a PreTeXt Document}
PreTeXt documents are structured and may contain divisions such as \texttt{} (for books), \texttt{}, \texttt{}, and \texttt{
}) the most common object to include in a division,
\texttt{}, \texttt{}, \texttt{
} and \texttt{
}.
\sect{Cross-References}
Any element that you place a \texttt{@xml:id} on can become the target of a cross-reference. For example, suppose your source had \texttt{} and someplace else you wrote \texttt{}.
\sect{Mathematics in PreTeXt}
Since PreTeXt has robust support for mathematical formulas. Inside the tags that delimit math environments, your code is basically \LaTeX\, with the caveat that you must be careful with \texttt{<}, \texttt{>}, and \texttt{\&} since they are special symbols for XML. When typing math in your PreTeXt code, use \texttt{\textbackslash{lt}} for \texttt{<}, \texttt{\textbackslash{gt}} for \texttt{>}, and \texttt{\textbackslash{amp}} for \texttt{\&}.
For inline math, wrap things in the \texttt{} tag: $a^2 + b^2 = c^2$ is
produced by \texttt{a\^{}2 + b\^{}2 = c\^{}2}.
We get displayed equations via the \texttt{} and \texttt{}. (to produce a numbered equation) tags. The code
{\footnotesize
\begin{verbatim}
\frac{d}{dx} \int_1^x \frac{1}{t}\, dt
\int_a^b f(x)\, dx = F(b) - F(a)
\end{verbatim}
}
produces
\[
\frac{d}{dx} \int_1^x \frac{1}{t}\, dt
\]
\begin{equation}
\int_a^b f(x)\, dx = F(b) - F(a)
\end{equation}
For a collection of equations all aligned at a designated point, use \texttt{} and \texttt{} (\texttt{} for numbered equations.). The code
\begin{verbatim}
x \amp = r\cos\thetay \amp = r\sin\theta
\end{verbatim}
produces
\begin{align*}
x & = r\cos\theta \\
y & = r\sin\theta.
\end{align*}
\sect{Images, Figures, sidebyside}
Images can be included using the \texttt{} tag with the \texttt{@source}. The \texttt{@width} attribute can be used to control the size of the image. Images can be wrapped inside a \texttt{
}. A \texttt{
} must have a \texttt{
}, and the figure will be numbered.
The \texttt{} tag provides flexible options for placing several images together or combining figures with subcaptions.
PreTeXt provides support for authoring with graphics languages such as Asymptote, TikZ, PGF, PSTricks, and xy-pic in addition to using Sage code to describe a plot or image. In most cases output can be obtained as smoothly-scalable SVG images, in addition to other formats like PDF or PNG. For accessibility, every \texttt{} should either have a \texttt{} child.
{ \footnotesize
\begin{verbatim}
a mass on a table that is
attached to a wall with a spring
A spring-mass system
\end{verbatim}
}
%*********************************************
\sect{Lists}
The structure of ordered lists (numbered), unordered lists (bullets) and description lists (defined terms) is given by the \texttt{}, \texttt{
}, \texttt{
} tags (respectively). List items are delimited with the \texttt{
} tag.
%*********************************************
\sect{Theorem-Like Elements}
The tags \texttt{}, \texttt{}, \texttt{}, \texttt{}, \texttt{}, \texttt{}, \texttt{}, and \texttt{} have the same structure in PreTeXt.
{\footnotesize
\begin{verbatim}
Optional
Here's the statement of the theorem.
You don't actually need a proof.
\end{verbatim}
}
\sect{Example-Like Elements}
The tags \texttt{}, \texttt{}, and \texttt{} have the same structure in PreTeXt.
{\footnotesize
\begin{verbatim}
Differentiating a polynomial
The derivative of the function
f(x) = 3x^5-7x+5 is f'(x) = 15x^4-7.
\end{verbatim}
}
\sect{Axiom-Like Elements}
The tags \texttt{}, \texttt{}, \texttt{}, \texttt{}, \texttt{}, and \texttt{} have the same structure in PreTeXt.
{\footnotesize
\begin{verbatim}
OptionalPeano
Here's the statement of the axiom.
\end{verbatim}
}
\sect{Remark-Like Elements}
The tags \texttt{}, \texttt{}, \texttt{}, \texttt{}, \texttt{}, and \texttt{} have the same structure in PreTeXt.
{\footnotesize
\begin{verbatim}
A little remark
This is a remark.
\end{verbatim}
}
\hr\textbf{Project-Like Elements}
The tags \texttt{}, \texttt{}, \texttt{}, and \texttt{} have the same structure in PreTeXt.
{\footnotesize
\begin{verbatim}
A structured project
Here is the introduction.
The first step to do.
The second step to do.
A little wrap up.
\end{verbatim}
}
\sect{Exercises}
An \texttt{} in the middle of a division, intermixed between theorems and paragraphs and figures. In this case, it is labeled as a ``Checkpoint.'' You can put several \texttt{}s as part of an \texttt{} element within a division, which is the typical way for creating a collection of exercises together at the end of a division such as a chapter or section. An \texttt{} can group together a collection of exercises that have a set of common instructions. A specialized division, \texttt{}, can be used to house \texttt{}s designed to test or guide a reader's comprehension of the material in that division. It is possible to embed WeBWorK exercises into a PreTeXt document
An \texttt{} has the following structure.
{\footnotesize
\begin{verbatim}
The statement is mandatory.
Optional.
Optional.
Optional.
\end{verbatim}
}
An element we generically call a ``signal'' is an important component of an exercise if you want to add something that will be interactive in HTML and Runestone. Signals include \texttt{} for multiple choice questions, \texttt{} for Parsons (mixed up blocks) problems, \texttt{} for matching, \texttt{} for clickable area, \texttt{} for short answer, and \texttt{} for fill-in-the-blank. A True/False question simply uses a \texttt{correct} attribute on \texttt{} as a signal. The signal element usually has further structure, see \texttt{pretextbook.org} for examples and source.
\sect{Worksheets}
A \texttt{} is a specialized division that can be a child of most divisions and can contain most PreTeXt tags.
\sect{Tables}
Similar to \LaTeX\, PreTeXt provides a \texttt{
} tag and a \texttt{} tag. The \texttt{} tag is used for producing the array of data, while the \texttt{
} tag provides the number and title.
%*********************************************
%*********************************************
\hr\textbf{SageMath Content}
A SageMath cell can be included in a PreTeXt document.
{\footnotesize
\begin{verbatim}
2+2
\end{verbatim}
}
SageMath can be used to created an image in a PreTeXt document.
{\footnotesize
\begin{verbatim}
A cubic plotted by SageMath on
[-3,2]
A cubic function on the interval
[-3,2]
f(x) = (x-1)*(x+1)*(x-2)
plot(f, (x, -3, 2), color='blue', thickness=3)
\end{verbatim}
}
\end{multicols*}
\end{document}
================================================
FILE: examples/README.md
================================================
# PreTeXt Examples
Some directories have their own `README`. This is an overview of the contents of the `examples/` directory, with the date of the last update for each entry.
For several of these, sample output (PDF, HTML) is produced routinely and is available at the PreTeXt website from the "Examples" page.
### Sample Article (`sample-article/`)
The kitchen sink, this attempts to have one of everything. Look around for something you need, experiment, or read the interspersed commentary on how things work. (2016-02-20)
### Sample Book (`sample-book/`)
A forked version of the first three chapters of Tom Judson's "Abstract Algebra" textbook. Use this to get ideas about how to create a book --- both how to organize the content and how to organize your files. (2016-02-20)
### Minimal Example (`minimal/`)
A short article. This is a good place to test a problematic construction. This is also a good vehicle for filing helpful bug reports: adjust the source and send source and output. (2016-02-20)
### Hello, World (`hello-world/`)
The bare minimum, about as little as you can do and still be valid PreTeXt. (2016-02-20)
### WeBWorK (`webwork/`)
Several examples of how to author WeBWorK online homework problems within a PreTeXt book. See the `Makefile` for guidance on how to build the examples. (2016-02-20)
### Braille (`braille/`)
A fairly simple document to test the conversion of principal elements of a document into Braille. (2019-02-17)
### Humanities in Action (`humanities/`)
Various exhibits of material authored in PreTeXt which might be of more interest to Humanities scholars. Initiated by Jahrme Risner during his Summer 2016 undergraduate research project. (2016-07-10)
### Characters, Fonts, and Languages (`fonts/`)
A testing and demonstration document similar to the sample article, but focused on print and PDF output in a variety of scripts and languages. (2016-07-10)
### Pug (`pug`)
Pug (nee Jade) is a Javascript template engine, which can be employed easily to output PreTeXt source. So if you prefer to format with whitespace, this could be a good choice. "Normal" output is best, but using a `-P` flag provides better formatting of the XML output for human eyes. Contributed by Harald Schilly. (2016-05-21)
A subdirectory contains the original file for the Windows Installation Notes of the Author's Guide, contributed by Dave Rosoff. It needs a few fixes, and will not be maintained, but will give a good demonstration of how a substantial chunk of content could be authored with Pug. (2016-05-31)
### Letters (`letter/`)
A sample letter you can adapt to your needs. See extensive comments in the source about using your letterhead. (2016-02-20)
### Memoranda (`memo/`)
A sample memo you can adapt to your needs. See extensive comments in the source about using your own logos. (2016-02-20)
================================================
FILE: examples/braille/braille-test-book.xml
================================================
A Test BookConverting to BrailleRobert A. BeezerDepartment of Mathematics and Computer ScienceUniversity of Puget Soundbeezer@pugetsound.eduAl ManekiKaren HersteinPreliminary Edition, Summer 2019
This is a book designed to test conversions to Braille without too much extraneous material. We will describe here what should have been apparent on the title page. This will be expanded as we get more and more parts of the book under control. The title of the entire book is A Test Book with the subtitle Converting PreTeXt to Braille. The author is Robert A. Beezer, with editors Al Maneki and Karen Herstein. The edition is Preliminary Edition, Summer 2019. The date will change, but should be something recent. Nota bene: if the sentence above that ends with Herstein is followed by two spaces, then one will migrate to the start of a new line and appear almost like the start of a new paragraph. It seems that any number of extra characters will migrate. In contrast, any number of newlines behave just fine. So maybe pretty-printed source will avoid this fate.
This preface should have formatting similar to a chapter, which is described carefully in . (The cross-reference to Chapter 1 should be realized very plain in print, and does not yet have any extra information in Braille.) The one difference is that a preface is not numbered, so there will be just a title, centered, followed by a blank line. We can give a preface a title, such as Preface to the Second Edition, but here we have let provide a default title.
Title pages of print and Braille will not always match. BANA suggests a different set of items than what default uses. Also, we do not yet producing a Table of Contents for Braille. Later.
Divisions: A Chapter Heading
We test headings of divisions. Chapter, Section, Subdivision, Subsubdivision. Each will have a title, and each will be structured as a introduction followed by a single subdivision. This is the introduction to the chapter. In Braille, it will start a new page, have the word Chapter, followed by a number on a centered line all by itself, followed by a line with the text of the title, and then a blank line will separate the first line of content.
The word Chapter is supplied automatically in the language of the book (French, Portuguese, etc.). But it could be omitted if the formatting (page break, etc.) is enough to indicate a new chapter.
A Section Heading
The introduction to the section with some extra text to run onto a new line of the BRF output that may not be indented. Since this sample book has more than 3 levels of divisions (chapter, section, subsection, subsubsection) this should have a centered heading.
Most conversions supply the word Chapter, but omit words like Section and Subsection. BANA says to follow the lead of print. A hierarchical number will help also.
A Subsection Heading
The introduction to the subsection with some extra text to run onto a new line of the BRF output that may not be indented. The heading of this subsection begins in cell-5, and is a block when occupying more than one line. Since this sample book has 4 levels of divisions (chapter, section, sub section, subsubsection) this should have a cell-5 heading.
A Subsubsection Heading
The subsubsection is terminal, so this is the actual content of the division, rather than an introduction to a further division. The heading of this subsubsection begins in cell-7.
However, any division may contain a construct called a paragraphs. It has a title and some content, and cannot be subdivided. We test one next. In print we use a run-in title, but that is hard to do with our tools.
A Paragraphs Heading
The paragraphs element is a lightweight division, which we realize much the same way as blocks elsewhere. It is a invention, so no good precedent or guidance.
This second paragraph tests that it is correct, since we want to see just which paragraphs are contained in this structure.
This paragraph is part of the subsubsection, and not part of the paragraphs element so should clearly be outside.
Mathematics
Our motivation is the automatic translation of texts in mathematics. We will do serious testing of mathematics elsewhere, but will include some here as both demonstration and for testing.
The third sentence has some single-letter Latin variables, interspersed with Greek variables and other simple inline math expressions. The single-letter variables should be italicized. We let x equal the value of T, but not \theta nor the value of a+b, but it could also be \rho or g.
For the previous line, x and T should be italicized (single Latin letter variable). a+b is meant to not be italicized (an expression). theta and rho should not be italicized (Greek). The last variable is a Latin g, not a Greek gamma. So it should simply be italicized, since it is a lone Latin letter as math.
And a multi-row equation, authored as two mrow within a md and including alignment:a^2 + b^2 &= c^2x^3 + y^3 &= z^3.
And a single displayed equation, but authored as a single mrow within a md, with alignment:p^4 + q^4 &= r^4. Adjust to a single displayed equation, but authored as a single mrow within a md, without alignment:r^5 + s^5 = t^5. Plus as a bare md, which cannot have alignment:p^4 + q^4 = r^4.
And a moderately complicated fraction:
\frac{\alpha+1/2}{\beta+\gamma} = \frac{12}{37}
.
Literary Text
In this chapter we test widespread (i.e. not mathematical) constructions which would appear in a typical paragraph.
Distinguished Text
Portions of text are often distinguished, using vehicles like font changes, enclosing quotation marks, underlining, and/or color. Within we have semantic markup, so we are free to translate to forms that work better via Braille. Properly, this should be a list, but we have not tested those yet. So we will put each example into a paragraph of its own for now. One distinguished word or phrase per sentence, one sentence at the start of the paragraph, followed by comments.
We emphasize the word emphasis.
An alert is more imperative, like a warning. Default presentation is bold-italic, but we have not figured out how to make liblouis react correctly to nesting the two. Perhaps we need to create a new liblouis style. Trying to make a new emphasis class was a failure. Perhaps two HTML elements (bold, italic) will be better. For now, just plain bold is an acceptable presentation for this element.
A definition mid-sentence is terminology.
We used enclosing double quotes earlier, since we knew they behaved properly.
An apostrophe and a single right quote are a real problem for Braille translation (and this problem is not limited to Braille). Maybe enclosing single quotes are not so useful, but still necessary, and that construction was very tricky since the words ended with the letter s and liblouis thought it was a (non-Braille) contraction and really wanted to use an apostrophe. A word like quote is easier it turns out. This is a place where can shine.
We employ a heavyweight monospace font for literal text, especially in technical situations. Right now, we do not distinguish this text. However, see the liblouis documentation for compbrl and changeTable to perhaps get Computer Braille for inline code.
A phrase from a foreign language is usually distinguished.
The title of this publication is A Test Book. It appears the italic indicators got confused between a single letter, two words, and a total of three items (so a phrase). We'll try again: Introduction to Calculus for Engineers. Hmm, not perfect either. OK, now One Book Title. This one has me confused. See lists below, where behavior is better.
A shorter document might be referenced as a A Test Article.
Esoteric: text can be grouped in angle brackets.
Esoteric: text can be grouped in double brackets. Now simply two brackets repeated.
There is much more to check, but above is a good start on common constructions. In the schema chase through the TextLong definition to find more.
Different indicators are used for emphasis of a letter, a word, or a phrase. It appears a phrase is defined to be three words. We test with the foreign element:
Single letter: A
Two words: One Two
Three words: One Two Three
Four words: One Two Three Four
Five words: One Two Three Four Five
Now, all over again with the pubtitle element, which is normally used to italicize titles of publications:
Single letter: A
Two words: One Two
Three words: One Two Three
Four words: One Two Three Four
Five words: One Two Three Four Five
Environments, Blocks
has many chunks of text with a heading and a number. I call them blocks, others call them environments. They qualify as the boxed material of the BANA transcription guide. Experiments here are the definition and example. Theorems are more complicated, since they have associated proofs. We will start simple and iterate to more types and more complicated structures.
liblouis allows giving the characters to use for the top and bottom line, but is a bit vague. BANA transcription guide clearly says dot patterns 2356 and 1245 for top and bottom respectively. In 6-dot braille these appear to be the characters seven and capital-g, which is what I have put into the liblouis configuration. But the BRF file seems to end up with the characters six and open-square-bracket. Al reports that when embossed these yield dot patterns 246 and 235 (possibly reversed), consistent with the six and open-square-bracket in the BRF file. I've tried many things, but cannot seem to configure liblouis to generate the seven and capital-G, nor can I see any rhyme nor reason to the results I get when experimenting.
BANA is pretty clear about boxed material, and liblouis supports a style option called boxline. It'll be contrary to BANA, and technically more unnatural to try to just use inline markers. Yes, two blank lines, and two boxlines, will use more paper, but this sort of material is a key feature of PreTeXt material. So for now, I'd lobby for following the BANA and liblouis recommendations. (Yes, I know the paper is expensive!) Al has agreed to this.
To get a blank line after the bottom line of the box, I had to use a style parameter. The blank line after the content, and before the bottom line, strikes me as a bug. No combination of parameters is making it go away.
I have put the headings of boxed material onto their own lines, which is different than print. I think that is finepart of the PreTeXt philosophy is that different output formats will have different expressions of the content. And it will be really difficult to meld the title with the first bit of content.
Right Triangle
A right triangle has one of its three angles subtending a quarter of a circle.
And this second paragraph is part of the definition.
An interior boxline figure
This figure has a paragraph in it. It is just forcing an exterior boxline on teh enclosing definition.
And a last paragraph to disentangle the end of the definition.
This faux paragraph is not part of the definition nor of the example, so we particularly want the reader to not think it is part of the preceding definition.
This is an example of an example. We did not include a title (as we did for the definition) to test this option.
A second paragraph of the example. Then we add a hint, and two different solutions. Al suggests the colon.
A small hint to get a student going in the right direction. Not numbered, since it is the only one.
A second paragraph of the hint to test formatting of a hint, answer or solution.
A long complete solution. Numbered as first.
Another long complete solution. Numbered as second.
Final paragraph of the chapter on environments and blocks.
Verbatim Material
This chapter has examples of material that is meant to be a computer program, or commands typed exactly as shown. In other words, text formatted to be used or copied literally.
This next paragraph is a Java computer program to write Hello, World!
import javax.swing.JFrame;
import javax.swing.JLabel;
public class HelloWorld {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("Hi!");
frame.add(new JLabel("Hello, world!"));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
An intervening normal paragraph.
Sometimes we break in the middle of a paragraph to make a small bit of displayed text that is verbatim for reasons similar to before. Perhaps we have some commands to display. Here are two ways to spin up a local web server, depending on if you are stuck back on Python 2 or have moved ahead to Python 3.python2 -m SimpleHTTPServer python3 -m http.serverThey are both very simple, even if only one uses that term in its name. We indented the second one by 4 spaces simply as a testit doesn't mean anything.
Lists
These lists can have more complicated items (structured with paragraphs), and lists can be nested. We start simple. I cannot see a way to use liblouis styling to insert a blank line before and after a list, HTML empty p and br elements are not effective.
A super-simple ordered list, which requires to be authored inside a paragraph.
Create a perpendicular bisector.
Mark off distance a. And we write some more that should become an indented second line.
Create a circle of radius b centered at a.
And this sentence finishes the paragraph holding the ordered list.
A super-simple unordered list, which requires to be authored inside a paragraph. This defaults to a symbol known as a bullet or disc, which BANA transcription guide says is dot pattern 456-256.
Copy lengths.
Bisect segments.
Create arcs.
And this sentence finishes the paragraph holding the unordered list.
Two more unordered lists in this paragraph. To make legitimate HTML, explodes the paragraph into three, we need to use styles to mark the lead paragraph for indentation, and mark the later ones to not have indentation. This seems unavoidable as one step of the pipeline is doing this breakup anyway. An unordered list with a circle as a marker (not a filled circle), BANA says a Grade 1 indicator first, so dot pattern 56-1246-123456:
One with a circle
Two with a circle
Three with a circle
Now with a solid (filled) square. BANA says dot pattern 456-1246-3456-145, and the liblouis files clearly suggest a Grade 1 indicator here (dots 5-6?). BANA suggests Grade 1 indicaor is not needed. We can overrule liblouisjust a fiddle.
One with a square
Two with a square
Three with a square
This concludes the paragraph, which will be an apparent third paragraph.
A description list has a single word, or simple phrase, which then has a definition or an explanation, which may be several paragraphs. We render this much differently in HTML versus print, and also somewhat differently here in Braille. Defined term is on a line of its own, in bold. Then the actual description, which can be quite variable follows, and is indented to help convey the structure.
First Item
This text is a description of the first item, whicn is a paragraph.
Second Item
Describes second item. In a paragraph for openers.
This is a second paragraph, helping to describe the second item of the list.
Third Item
Describes third item. The descriptions are indented for each item to help keep the groupings together.
A ordered list where most of the list items are authored with structure, meaning paragraphs and similar blocks that are peers.
First item, first paragraph. And a nonsense sentence so we wrap to a second braille line.
First item, second paragraph. And a nonsense sentence so we wrap to a second braille line.
Second item, first paragraph. All by itself, no more structure. With some display math that the HTML conversion will isolate and provide a "continuation paragraph".
a^2+b^2=c^2
And a nonsense sentence so there is something after the math.
Third item, but now totally unstructured, just to provide a mix within the list.
TODO: list items structured with more than paragraphs, nested lists.
Tables
A table of names of colors, with a title, with three rows and five columns. Designed to have runover lines. The title is presently being displayed below, but can move to just prior. Need to experiment with multi-column cells.
Some ColorsRedBloodMahoganyCrimsonLipstickWhiteAlabasterChiffonPorcelainParchmentBlueAdmiralCeruleanPeacockSapphire
Below is a table from section 10.3 of Active Calculus -
Multivariable by Steven Schlicker. It may be a
challenge because all the content is mathematical, but the
negative numbers aren't marked up as such. Michael Cantino
suggests that the entire table should be one big Nemeth
table. It is followed by the same table appearing in the
previous section but with all the table cells marked up
using m. Are either of these good, or should we
have something that just purely comes from SRE?
Wind chill as a function of wind speed and temperature.v \backslash T-30-25-20-15-10-5051015205-46-40-34-28-22-16-11-5171310-53-47-41-35-28-22-16-10-43915-58-51-45-39-32-26-19-13-70620-61-55-48-42-35-29-22-15-9-2425-64-58-51-44-37-31-24-17-11-4330-67-60-53-46-39-33-26-19-12-5135-69-62-55-48-41-34-27-21-14-7040-71-64-57-50-43-36-29-22-15-8-1
Wind chill as a function of wind speed and temperature.v \backslash T-30-25-20-15-10-5051015205-46-40-34-28-22-16-11-5171310-53-47-41-35-28-22-16-10-43915-58-51-45-39-32-26-19-13-70620-61-55-48-42-35-29-22-15-9-2425-64-58-51-44-37-31-24-17-11-4330-67-60-53-46-39-33-26-19-12-5135-69-62-55-48-41-34-27-21-14-7040-71-64-57-50-43-36-29-22-15-8-1
Below are two tables from Oscar Levin's
Discrete Mathematics: An Open
Introduction. Might the second one be better as
transposed when making BRF?
Class:Conflicts with:AD IBD I JCE F IDA B FEC H IFC D IGJHE I JIA B C E F HJB G HStudent:ABCDEFGHIJConflicts:BEJADGHJBFAIDJBCIEHJACFI
Here is a table from Active Calculus -
Multivariable + Vector by Steven Schlicker,
Mitchel T. Keller, and Nicholas Long. Again, it probably
should be marked for Nemeth both before and after.
(x,y)(2,1)(0,0)(-1,2)(3,-1)(-2,-1)\mathbf{F}(x,y)
Here is a table from Applied
Combinatorics by Mitchel T. Keller and William
T. Trotter. One of the cells is very wide, but it looks
fine in HTML and PDF.
SchoolPlayer numbersBoston College1, 3, 4Clemson University1, 3, 4, 6Georgia Institute of Technology2, 6University of GeorgiaNone interestedUniversity of Maryland2, 3, 5University of North Carolina1, 2, 5Virginia Polytechnic Institute and State University1, 2, 5, 6Figures
Figures should create some usable information, but also create a blank page (for embossable output) that will allow placement of a separately generated tactile graphic.
A test figure with an image
A picture of a pretty flower in a field of grass all by itself
And some text trailing the figure. And a bare image next.
More text trailing an image.
MISCELLANEOUS - DO NOT REVIEWThe Pythagorean Theorem
For a right triangle with side lengths a, b, c, where the side of length c is opposite the right angle, we havea^2 + b^2 = c^2.
The concluding period of the statement of the theorem will be absorbed into the displayed mathematics in a print version. For Braille, we want the period to remain detached, so it is rendered as literary text and not with Nemeth Braille.
encourages cross-references, so we now reference the previous result: . While the liblouis library seems to be able to reference endnotes, there does not appear to be a mechanism for general cross-references.
Quotations
It seems that liblouis converts Unicode quote marks into opening and closing variants, and recognizes double versus single. Patterns are 2-3-6 and 3-5-6 for the double quote marks, with a shift/capital indicator for the single versions. Two tests from Alex Jordan, where we just employ our standard conversion to smart Unicode variants and we let liblouis do the rest. Life is about making an impact, not making an income.Whatever the mind of man can conceive and believe, it can achieve. Here we test individual words: double and single. And the four relevant characters isolated inside parentheses: (), (), (), ().
Now we try a block quotation from Dr.Seuss. We have done nothing extra to try to get the attribution correct yet, though it appears to convert the quotation dash into a hyphen (good). Just now, when using his name, we put a non-breaking space between the abbreviation for Doctor and his surname, as we might commonly do in light of other conversions' behavior. It seems to have become nothing special (which is also good).
The problem with writing a book in verse is, to be successful, it has to sound like you knocked it off on a rainy Friday afternoon. It has to sound easy. When you can do it, it helps tremendously because it's a thing that forces kids to read on. You have this unconsummated feeling if you stop.
Dr. Seuss
References and Suggested Readings
Blake, I. F. Codes and Designs,Mathematics Magazine52
(1979), 8195.
Hill, R.
A First Course in Coding Theory. Oxford University Press, Oxford, 1990.
Levinson, N. Coding Theory: A Counterexample to G. H. Hardy's Conception of Applied Mathematics,American Mathematical Monthly77
(1970), 24958.
Lidl, R. and Pilz, G.
Applied Abstract Algebra. 2nd ed. Springer, New York, 1998.
MacWilliams, F. J. and Sloane, N. J. A.
The Theory of Error-Correcting Codes. North-Holland Mathematical Library, 16, Elsevier, Amsterdam, 1983.
Roman, S.
Coding and Information Theory. Springer-Verlag, New York, 1992.
Shannon, C. E. A Mathematical Theory of Communication,Bell System Technical Journal27
(1948), 379423, 62356.
Thompson, T. M.
From Error-Correcting Codes through Sphere Packing to Simple Groups. Carus Monograph Series, No. 21. Mathematical Association of America, Washington, DC, 1983.
van Lint, J. H.
Introduction to Coding Theory. Springer, New York, 1999.
================================================
FILE: examples/braille/braille-test.xml
================================================
A Test Article
This is a article designed to test conversions to Braille without too much extraneous material. The title above should be A Test Article.
The Pythagorean Theorem
For a right triangle with side lengths a, b, c, where the side of length c is opposite the right angle, we havea^2 + b^2 = c^2.
The concluding period of the statement of the theorem will be absorbed into the displayed mathematics in a print version. For Braille, we want the period to remain detached, so it is rendered as literary text and not with Nemeth Braille.
encourages cross-references, so we now reference the previous result: . While the liblouis library seems to be able to reference endnotes, there does not appear to be a mechanism for general cross-references.
Quotations
It seems that liblouis converts Unicode quote marks into opening and closing variants, and recognizes double versus single. Patterns are 2-3-6 and 3-5-6 for the double quote marks, with a shift/capital indicator for the single versions. Two tests from Alex Jordan, where we just employ our standard conversion to smart Unicode variants and we let liblouis do the rest. Life is about making an impact, not making an income.Whatever the mind of man can conceive and believe, it can achieve. Here we test individual words: double and single. And the four relevant characters isolated inside parentheses: (), (), (), ().
Now we try a block quotation from Dr.Seuss. We have done nothing extra to try to get the attribution correct yet, though it appears to convert the quotation dash into a hyphen (good). Just now, when using his name, we put a non-breaking space between the abbreciation for Doctor and his surname, as we might commonly do in light of other conversions' behavior. It seems to have become nothing special (which is also good).
The problem with writing a book in verse is, to be successful, it has to sound like you knocked it off on a rainy Friday afternoon. It has to sound easy. When you can do it, it helps tremendously because it's a thing that forces kids to read on. You have this unconsummated feeling if you stop.
Dr. Seuss
================================================
FILE: examples/braille/publication.xml
================================================
================================================
FILE: examples/custom-theming/README.md
================================================
# Styling/Theming Samples for PreTeXt
This project has samples to illustrate how the HTML output of PreTeXt can be customized. The `projects.ptx` file defines the following build targets:
* `web` - Default styling
* `web-custom-colors` - Specifying custom colors for a theme
* `web-extra-css` - Adding extra CSS files with custom styles
* `web-salem` - Specifying the "salem" theme with a specific color palette
* `web-salem-extra-css` - Demonstrates additional tricks using extra CSS to use or modify the colors defined for a theme
* `web-custom-theme` - Demonstrates how to create a custom theme by providing an SCSS file as a build target
To build any of these targets using the PreTeXt CLI use a command like:
```bash
pretext build web-custom-colors
```
See the `project.ptx` file for more details about each target.
If you are experimenting with `web-custom-theme`, and want to just rebuild the theme, you can add the `-t` flag. Doing so will leave the HTML in place and just rebuild the `theme.css` file from your SCSS.
```bash
pretext build web-custom-theme -t
```
================================================
FILE: examples/custom-theming/assets/css/more-styles.css
================================================
.ptx-content-footer .button {
border-radius: 10px 5px;
}
================================================
FILE: examples/custom-theming/assets/css/my-styles.css
================================================
.ptx-masthead {
background-color: #e4e5e6;
}
/* styles to apply in dark mode */
:root.dark-mode {
.ptx-masthead {
background-color: #000000;
}
}
================================================
FILE: examples/custom-theming/assets/css/salem-color-vars.css
================================================
/* Many colors in your output are controlled by CSS variables.
You can override these variables to override the appearance
of all items that use that color.
You need to define the colors in a container that is at least
as specific as the default definition.
The default definitions for light mode are in
:root:not(.dark-mode) { ... }
The default definitions for dark mode are in
:root.dark-mode { ... }
*/
:root:not(.dark-mode) {
--body-title-color: #573c13;
}
section>.heading {
/* you can use color variables defined in themes in your own rules to match existing colors */
background: var(--primary-color-white-95);
color: var(--primary-color);
}
/* Normally, all remark-likes are the same color in salem. Let's customize some. */
/* observations are the classname used for the renamed "danger" blocks */
.remark-like.observation {
border-color: #c72a36;
background-color: #f9d6d5;
}
.remark-like.convention {
border-color: #4CAF50;
background-color: #edfcee;
}
.remark-like.warning {
border-color: #e7d322;
background-color: #fbf8e6;
}
================================================
FILE: examples/custom-theming/mytheme/_chunks-customized.scss
================================================
// Grab everything from tacoma's chunks but tell it to use 0 border radius
@use 'targets/html/tacoma/chunks-minimal' with (
$border-radius: 0
);
// Now add to that
// @use statements must come before any actual CSS rules
@use 'components/chunks/helpers/heading-box-mixin';
.project-like {
@include heading-box-mixin.box;
}
.remark-like
{
> .heading {
color: var(--primary-color);
}
}
================================================
FILE: examples/custom-theming/mytheme/mytheme.scss
================================================
// A custom theme that is a modified version of the tacoma theme
// This will get compiled into "theme.css" and placed into the output directory
// of your project
$primary-color: #2a5ea4 !default;
$primary-color-dark: #829ab1 !default;
$background-color-dark: #23241f !default;
@use "sass:map";
// Any @use path is checked relative to this file first, then
// relative to the css directory in the pretext core.
// https://github.com/PreTeXtBook/pretext/tree/master/css
@use "colors/color-helpers" as colorHelpers;
// ---------------------------------------------
// components
// To borrow a file from tacoma, we must do an @use with the
// full path from the css directory:
@use 'targets/html/tacoma/_parts-tacoma' as parts;
// Underscores indicate files designed to be included in other files
// you do not need to include the underscore in the filename in the @use
// chunks-customized exists in the same directory as this file, so that
// will be found/used.
@use 'chunks-customized';
@use 'components/pretext-web';
// ---------------------------------------------
// fonts and colors
@use 'fonts/fonts-google';
@use 'colors/palette-single-muted' as palette-light with (
$primary-color: $primary-color,
);
@use 'colors/palette-dark' as palette-dark with (
$primary-color: $primary-color-dark,
$background-color: $background-color-dark,
);
// ---------------------------------------------
// concrete rules / includes that generate CSS
// render the actual colors
@include colorHelpers.set-root-colors(palette-light.$colors, palette-dark.$colors);
================================================
FILE: examples/custom-theming/project.ptx
================================================
================================================
FILE: examples/custom-theming/publication/publication-custom-colors.ptx
================================================
================================================
FILE: examples/custom-theming/publication/publication-custom-theme.ptx
================================================
================================================
FILE: examples/custom-theming/publication/publication-salem.ptx
================================================
================================================
FILE: examples/custom-theming/publication/publication.ptx
================================================
================================================
FILE: examples/custom-theming/source/ch-chapter-title.ptx
================================================
Chapter Title
Text before the first section.
================================================
FILE: examples/custom-theming/source/docinfo.ptx
================================================
Danger
================================================
FILE: examples/custom-theming/source/frontmatter.ptx
================================================
YouYour departmentYour institutionMy Website20202024You This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit CreativeCommons.org
================================================
FILE: examples/custom-theming/source/main.ptx
================================================
My Great BookAn example to get you started
================================================
FILE: examples/custom-theming/source/sec-section-name.ptx
================================================
Section Title
Here is an activity.
Here is a project.
Text of section.
Here is a note.
Here is a warning.
Here is an observation that was renamed into a danger.
================================================
FILE: examples/epub/README.md
================================================
# EPUB Sampler
This short book is designed for testing conversions to EPUB.
Of course, the Sample Book would be a good, longer,
test document as well.
Features that need to be handled differently for EPUB should
have examples added here. For example, footnotes and endnotes
require extra care in EPUB.
================================================
FILE: examples/epub/epub-sampler.xml
================================================
\newcommand{\doubler}[1]{2#1}
\newcommand{\definiteintegral}[4]{\int_{#1}^{#2}\,#3\,d#4} % this comment will be stripped
\usepackage{tikz}
\usetikzlibrary{arrows}
An EPUB SamplerRob BeezerPreTeXt
https://www.pretextbook.org
20162021Robert A. BeezerBiographical sketch with title
This is about the author and has a title.
This sketch doesn't actually have a title in the
source.
To all those who like reflowable electronic books.
Mitchel T. Keller has added a number of things to
this sampler to continue to stress out the EPUB
conversion and make sure it's all working right.
One
The quick brown fox jumps over the lazy dog.
Some test cross-references:
To the next chapter:
To a figure much later:
To some multi-line display math later:
To an abstract algebra textbook:
Two
This is the introduction to the chapter. We put
some math \int_a^b f(t)\, dt in here for
validation purposes.
A silly section.
This section just exists so that we can add introduction and conclusion tags to this chapter.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ultricies purus sit amet rutrum dictum. Donec sit amet ligula quis orci vestibulum tempor id in erat. Ut ut placerat lacus, sit amet feugiat lorem. Pellentesque sodales risus at eros malesuada, eget ultrices est consectetur. Praesent fermentum, ligula sit amet fermentum varius, elit eros imperdiet lectus, tempus condimentum quam elit in elit. Sed molestie mauris sem, sed laoreet elit iaculis ut. In mattis blandit ex, nec rutrum purus ullamcorper eget. Nullam maximus magna non elit euismod, non ornare nisl porttitor. Pellentesque commodo tempus viverra.
Curabitur ac hendrerit ligula. Aenean vitae nunc id elit convallis efficitur. Sed ultricies ut justo quis elementum. Sed eget eros venenatis, pellentesque risus sed, fermentum mi. Proin ipsum arcu, porta nec sem sit amet, sollicitudin faucibus erat. Quisque lacus lectus, pellentesque ut imperdiet sed, euismod vitae nibh. Donec dolor diam, elementum ac pharetra vitae, volutpat mollis augue.
Maecenas ex enim, lobortis et blandit sit amet, pretium in ante. Sed mollis sollicitudin nibh non consectetur. Vestibulum eget tortor sit amet felis iaculis fermentum. Sed eu nisl a urna cursus congue at nec nulla. Mauris lacinia molestie tristique. Maecenas aliquet rutrum venenatis. Vivamus quis metus sit amet est feugiat facilisis quis et massa. Aenean dui sem, dapibus at imperdiet ac, auctor sit amet arcu. Vestibulum eget porttitor est. Aliquam id pellentesque quam, vitae rhoncus metus. In congue condimentum malesuada. Mauris in condimentum eros, eget mattis nibh. Praesent et ex porttitor, lobortis nibh sed, cursus ante. Suspendisse dapibus vel risus eu pellentesque.
We end here with multiline display math to test
linking from elsewhere into this multi-page section.
-9y&=y''-6y'
y&=c_1e^{3x} + c_2 x e^{3x}
A Section with SubsectionsA simple subsection
A subsection in a section.
A single exercise buried in an exercises division that is a peer of a subsection.
A lone exercise in an exercises division that is a peer of a section.
A little suggestion.
y=x^2
Maecenas ex enim, lobortis et blandit
sit amet, pretium in ante. Sed mollis sollicitudin
nibh non consectetur. Vestibulum eget tortor sit
amet felis iaculis fermentum. Sed eu nisl a urna
cursus congue at nec nulla. Mauris lacinia
molestie tristique. Maecenas aliquet rutrum
venenatis. Vivamus quis metus sit amet est feugiat
facilisis quis et massa. Aenean dui sem, dapibus
at imperdiet ac, y=ax^2+bx+c auctor sit
amet arcu. Vestibulum eget porttitor est. Aliquam
id pellentesque quam, vitae rhoncus metus. In
congue condimentum malesuada. Mauris in
condimentum eros, eget mattis nibh. Praesent et ex
porttitor, lobortis nibh sed, cursus
ante. Suspendisse dapibus vel risus eu
pellentesque.
Wrapping up
This is the conclusion.
A Bit of Math y=mx+bA Bit of Math y=mx+b
Diophantine equationThis paragraph has some
inline math, a Diophantine equation, x^2 +
\doubler{y^2} = z^2. And some display math about
infinite series: \sum_{n=1}^\infty\,\frac{1}{n^2} = \frac{\pi^2}{6}. Look at the XML source to see how macros are employed.
And a bit of multi-line display math:\frac{d}{dx}\definiteintegral{a}{x}{f(t)}{t}&=\frac{d}{dx}\left(F(x)-F(a)\right)&=\frac{d}{dx}F(x)-\frac{d}{dx}F(a)&=f(x)-0 = f(x).
And multi-line math with an embedded cross-reference to a figure:x^2 + y^2 &= z^2&&a^2 + b^2 &= c^2&&
Nice.
Fundamental Theorem of CalculusNewton, Leibniz
Let f be a continuous function on the
interval [a,b]. If F is an
antiderivative for f on [a,b], then
\int_a^b f(t)\, dt = F(b)-F(a).
You have read the statement of .
You have seen multiline math, and it is awesome.
Some Images ax^2+bx+c=0Some Imagex ax^2+bx+c=0
To discuss formats for graphics
To stress test the EPUB conversion with
y=f'(x) math in here
Graphics formats f'(x)Graphics formats f'(x)
Portable Network Graphics (PNG)PNGPortable Network GraphicsA Portable Network Graphics (PNG) image created externally in Sage and then included directly here.
A cubic polynomial and its derivative
This is a Cartesian plot with a blue curve that enters from the lower left.
It crosses the x-axis at about -2 and climbs to reac a peak at about -0.8
where it flattens out. It continues to the right, now moving downward, and crosses the y-axis
at 6, and then crossing the x-axis again at 1. It bends back upward, returning
to quadrant I at x=3.
There is also a red curve, a parabola, that enters from the top right. It moves downward, crossing the
x-axis at -0.8 and bottoming out at x=0.7. Then it climbs back up crossing the
x-axis into quadrant I at x=2.1, and it rises out the upper right of the plot.
A Scalable Vector Graphics (SVG) image produced from source with the pretext script.
The graph of a function and a tangent line
a=1f(x) = exp(x/3)*cos(x)(a,f(a))
Here we drop a small reference to an equation
earlier, notably .
A Scalable Vector Graphics (SVG) image created externally in Sage and then included here as a vector image (no file extension given).
A complete graph on 16 vertices
A Scalable Vector Graphics (SVG) image described by Sage commands, which is produced by the pretext script.
A Sage multigraph of a sentence
stnc = 'I am a cool multiedge graph with loops'
g = DiGraph({}, loops=True, multiedges=True)
for a,b in [(stnc[i], stnc[i+1]) for i in range(len(stnc)-1)]:
g.add_edge(a, b, b)
g.plot(color_by_label=True, edge_style='solid', figsize=(8,8))
TikZ Electronics Diagram
A pile of electronic components wired together=triangle 45]
\draw
% Drawing the blocks of first filter :
node at (0,0)[right=-3mm]{\Large \textbullet}
node [input, name=input1] {}
node [sum, right of=input1] (suma1) {\suma}
node [block, right of=suma1] (inte1) {\inte}
node at (6.8,0)[block] (Q1) {\Large $Q_1$}
node [block, below of=inte1] (ret1) {\Large$T_1$};
% Joining blocks.
% Commands \draw with options like [->] must be written individually
\draw[->](input1) -- node {$X(Z)$}(suma1);
\draw[->](suma1) -- node {} (inte1);
\draw[->](inte1) -- node {} (Q1);
\draw[->](ret1) -| node[near end]{} (suma1);
% Adder
\draw
node at (5.4,-4) [sum, name=suma2] {\suma}
% Second stage of filter
node at (1,-6) [sum, name=suma3] {\suma}
node [block, right of=suma3] (inte2) {\inte}
node [sum, right of=inte2] (suma4) {\suma}
node [block, right of=suma4] (inte3) {\inte}
node [block, right of=inte3] (Q2) {\Large$Q_2$}
node at (9,-8) [block, name=ret2] {\Large$T_2$}
;
% Joining the blocks of second filter
\draw[->] (suma3) -- node {} (inte2);
\draw[->] (inte2) -- node {} (suma4);
\draw[->] (suma4) -- node {} (inte3);
\draw[->] (inte3) -- node {} (Q2);
\draw[->] (ret2) -| (suma3);
\draw[->] (ret2) -| (suma4);
% Third stage of filter:
% Defining nodes:
\draw
node at (11.5, 0) [sum, name=suma5]{\suma}
node [output, right of=suma5]{}
node [block, below of=suma5] (deriv1){\derv}
node [output, right of=suma5] (sal2){}
;
% Joining the blocks:
\draw[->] (suma2) -| node {}(suma3);
\draw[->] (Q1) -- (8,0) |- node {}(ret1);
\draw[->] (8,0) |- (suma2);
\draw[->] (5.4,0) -- (suma2);
\draw[->] (Q1) -- node {}(suma5);
\draw[->] (deriv1) -- node {}(suma5);
\draw[->] (Q2) -| node {}(deriv1);
\draw[<->] (ret2) -| node {}(deriv1);
\draw[->] (suma5) -- node {$Y(Z)$}(sal2);
% Drawing nodes with \textbullet
\draw
node at (8,0) {\textbullet}
node at (8,-2){\textbullet}
node at (5.4,0){\textbullet}
node at (5,-8){\textbullet}
node at (11.5,-6){\textbullet}
;
% Boxing and labelling noise shapers
\draw [color=gray,thick](-0.5,-3) rectangle (9,1);
\node at (-0.5,1) [above=5mm, right=0mm] {\textsc{first-order noise shaper}};
\draw [color=gray,thick](-0.5,-9) rectangle (12.5,-5);
\node at (-0.5,-9) [below=5mm, right=0mm] {\textsc{second-order noise shaper}};
\end{tikzpicture}
]]>
A diagram of some git commits, authored in Mermaid.
Mermaid Git Diagram
A git diagram in Mermaid
---
title: Example Git diagram
---
gitGraph
commit
commit
branch develop
checkout develop
commit
commit
checkout main
merge develop
commit
commit
Additional stress testing
We repeat an image created from an external file, because the EPUB format only wants the file noted once.
We like to put URLs into footnotes, especially for formats like this where they may not be active. This output is from pretextbook.org.
We make a reference to some math in another chapter
in order to test that
validation works for this. We also refer to
A sample exercise, where a hint and a solution should be visible (rather than in a knowl).
Just a little help.
The whole story with all the details.
This is a conclusion. We will follow it with
an outcomes.
The really awesome things we've done!
We just tested if we get this list of outcomes.
Maybe the license
Lots of books written in include the terms of their license in an appendix, so let's use this as a test.
List of FiguresHints, Answers and Solutions to ExercisesReferencesTom Judson, Abstract Algebra: Theory and Applications.
Another online, open-source offering.
David C. Lay, Subspaces and Echelon Forms. The College Mathematics Journal, January 1993, 241, 5762.Index
This document was authored in
to stress test conversion to
EPUB. Please do not judge its contents,
which randomly has some y=e^{ax+b} math in the
rear colophon.
================================================
FILE: examples/epub/gen/prefigure/prefigure-tangent-annotations.xml
================================================
figure1grid-axesgraph-tangentgrid-axesgraph-tangentgrid-axes1gridaxesgridaxesfiguregrid1grid-axesaxes2grid-axesgraph-tangent2graphpointtangentgraphpointtangentfiguregraph1graph-tangentgraphpoint2graph-tangenttangent3graph-tangent
================================================
FILE: examples/epub/publication.xml
================================================
================================================
FILE: examples/errors/sample-errors-and-warnings.xml
================================================
ConundrumErrors and Warnings in MathBook XMLIntroduction
We collect some bad things here, to test deprecation warnings and error handling. Don't be alarmed.
Global Deprecations
These are sprinkled around as necessary, but listed here.
Cite element subsumed into xref scheme (2014/06/25).
Obsolete filebase attribute (2014/05/04).
Once upon a time there was a hyphen element for hyphenatedwords.
The c element no longer needs a @latexsep attribute.
Introduction
A sample paragraph.
ACKACKYuckSNDYuckCross-References
A cite is replaced directly by an xref, the obsolete use here would be functional and .
A cross-reference to nowhere (warnings):
A cross-reference with a bad/missing attribute: .
A cross-reference with a bad value for the autoname attribute: .
The detail attribute of a cross-reference is only implemented for a reference to a bibliographic item: .
The plural attribute of a cross-reference is deprecated with no equivalent replacment: .
A cross-reference to a range with incompatible targets (article and section): .
A cross-reference to a range where the two targets are in the wrong order, so generates a warning: .
We supply two broken cross-references for testing purposes only, one a list, one not: , .
We supply two more broken cross-references for testing purposes only, both of the first/last variety: , .
A todo element now becomes a prefixed XML comment.Bad Math
Some math that gives the Sage notebook trouble: first the fixed version, where we use a small negative space followed by a small positive space to breakup the triple braces: x^2{{\!\,{y^3}}}
Now the problem version, which in the Sage notebook will wreck this page. You should be warned about this at the console when you built this worksheet. Elsewhere the fixed version should look like this version: x^2{{{y^3}}}
Images
TikZ code no longer goes in a tikz element, but latex-image-code instead. And similar graphics languages need to go into an imagec> element. We globally trap occurrence inside figurec> without an intervening image, which may not be the only way this could occur.
And the task element has a new purpose and should not exist at the top-level of a division. We include a project with a real task to test effect.
I should not be here.
First real task.
Second real task.
The program and console elements cannot occur without a wrapper, a sidebyside or a console.
cd
a = b + c
Miscellaneous
A circumflex should still be obtainable with circum: . And is now .
Groups of paragraphs
There has always been a sort of odd mini-sectioning element, called paragraph orignally since that is what it is in , but now better named as paragraphs.
's ten reserved characters once each had an empty element of its own: .
And similarly, nine other elements were made redundant: bracesbrackets.
There are also several Unicode characters which show up a lot in copy-paste: °×–—‘’“”, especially from Windows. However, they look okay and can be useful in text in math mode (which cannot use normal tags like <sq>), so we leave them alone there: z\text{×}z\text{}\text{–}z\text{ isn’t “z”}.
Tables once looked like this, but now are really different.
Once in the sample article, but now with two problems, not one. What were we thinking?
Level 1, first.
Level 1, second.
Level 2, first.
Level 2, second.
Level 3, first.
Level 3, second.
Level 3, third.
Level 2, third.
Level 1, third.
Catching Mis-Authored Code Chunks
The XML special characters are often misunderstood. We can see when an element expecting pure text has a stray XML element. This could happen when code outputs legitimate HTML elements via print statements. But there are other possibilities. Solution, generally, is to use an escaped less than (<) or use a CDATA section. First a silly inline verbatim that has a problem: foo foo, and a structured code displayI'm fine.I'm .Note, this is no help for stray less than in places like tikz code for diagrams.
A Badly Structured Section
This introductory paragraph should be inside an introduction, since it is followed by a sequence of subsections (well, just one anyway). This will fail validation, and also raise a warning.
First Subsection
With a single paragraph. We try to catch this common structural violation.
Prohibited Cross-References in Display Mathematics
Cross-references can be built into display mathematics, but they can only point to one item ( a comma-delimited list of targets is not supported).x^2 + y^2 &= z^2&&x^2 + y^2 &= z^2&&a^2 + b^2 &= c^2&&
Side-by-Side Paragraphs
First panel.
Mock Title
Paragraph one.
Paragraph two.
WeBWorK
A WeBWorK problem will need a server. You will get a warning if you do not specify one. But you should not be warned just because you use the empty element to get the stylized version, like this: . So you can test warnings by commenting out one or the other instance.
Mock WW Exercise
Very minimal.
Image Descriptions
The height attribute is ineffective on image elements.
width attributes once could be dimensionless, but now need to be percentages.
Bona Fide Problems
These are two legitimate problems copied from the WW sample chapter on 2018-07-12. We are using them, and variants below, to test Schematron rules enforcing locations where -specific exceptions are alllowed. The third problem is a clone of the second, but with a setup element that is deprecated as of 2020-03-13.
Solving Quadratic Equations
Context("Fraction");
$a = Compute(random(2,6,1));
do {$k = Compute(random(2,6,1))} until (gcd($a,$k)==1);
$r = Compute(random(2,6,1));
$c = $k*-$r;
$b = $a*-$r+$k;
$quadratic = Formula("$a x^2 + $b x + $c")->reduce;
$x1 = Fraction($r,1);
$x2 = Fraction(-$k,$a);
Context()->flags->set(reduceConstants=>0,reduceConstantFunctions=>0);
$solnum1 = Formula("-$b+sqrt(($b)**2-4($a)($c))");
$solnum2 = Formula("-$b-sqrt(($b)**2-4($a)($c))");
$evaluatorfora = $a->cmp()->withPostFilter(AnswerHints(
[-$a] =>
"Do you have the sign correct?"));
$evaluatorforb = $b->cmp()->withPostFilter(AnswerHints(
[-$b] =>
"Do you have the sign correct?"));
$evaluatorforc = $c->cmp()->withPostFilter(AnswerHints(
[-$c] =>
"Do you have the sign correct?"));
Context("LimitedFraction");
$multians1 = MultiAnswer(Fraction("$x1"),Fraction("$x2"))->with(
singleResult => 0,
allowBlankAnswers => 1,
checker => sub {
my ($correct,$student,$self) = @_;
my ($s1, $s2) = @{$student};
my ($c1, $c2) = @{$correct};
return (1,1) if ($c1 == $s1 and $c2 == $s2) or
($c1 == $s2 and $c2 == $s1);
return (1,0) if $c1 == $s1 or $c2 == $s1;
return (0,1) if $c1 == $s2 or $c2 == $s2;
return (0,0);
}
);
Part 1: Identify the coefficients
Consider the quadratic equation given by = 0\text{.} First, identify the coefficients for the quadratic equation using the standard form from .
a=, b=, c=
Take the coefficient of x^2 for the value of a, the coefficient of x for b, and the constant for c. In this case, they are a = , b = , c = .
Part 2: Solve using the quadratic formula
Using the quadratic formula, solve =0.
x= or x=
Recall that the quadratic formula is given in .
You already identified a = , b = , and c = , so the results are: x = { \over 2()} = or x = { \over 2()} =
These are remnants of the two legitimate problems copied from the WW sample chapter on 2018-07-12 (above). We are leaving them as exercise but removing the webwork wrapper to provoke errors.
Part 1: Identify the coefficients
Consider the quadratic equation given by = 0\text{.} First, identify the coefficients for the quadratic equation using the standard form from .
a=, b=, c=
Take the coefficient of x^2 for the value of a, the coefficient of x for b, and the constant for c. In this case, they are a = , b = , c = .
Part 2: Solve using the quadratic formula
Using the quadratic formula, solve =0.
x= or x=
Recall that the quadratic formula is given in .
You already identified a = , b = , and c = , so the results are: x = { \over 2()} = or x = { \over 2()} =
A glossary may have an introduction, perhaps with some explanation. Here this is an old-style glossary to provoke errors.
bar
A part of foobar. See .
foobar
A synonym for the acronym FUBAR.
And for symmetry, a conclusion.
A Geometric Prelude
Practice visualizing vector addition
Use vectors without explicit coordinates
This two-page worksheet was generously donated to the sample article by Dave Rosoff at a CuratedCourses workshop in August2018. It has the default (skinny) margins.
It was known to Euclid, and probably earlier, that the midpoints of the sides of any quadrilateral all lie in the same plane (even if the vertices of the quadrilateral do not). In fact, these midpoints are the vertices of a parallelogram, as pictured in .
The midpoints of the sides of a quadrilateral are the vertices of a parallelogram.
In this exercise, we'll use vectors to show that the medians of any triangle () intersect at a point. Recall that medians are the lines connecting the vertices of the triangle to the midpoints of their opposite edges, as in the figure. We'll do this in a few steps.
What is the value of \vec{A} + \vec{B} + \vec{C}?
from the previous page is reproduced for your convenience.
The medians of the triangle are \vec{M}_1, \vec{M}_2, and \vec{M}_3.
Show that \vec{M}_{1} + \vec{M}_{2} + \vec{M}_{3} = 0.
Use .
To show that the point P exists (as the common intersection of the \vec{M}_{i}), show that
\vec{A} + \frac{2}{3} \vec{M}_{3} = \frac{2}{3} \vec{M}_{2} = .
If you have time, try to devise a vector proof of Euclid's result presented at the beginning of the workshop. Recall that a parallelogram is a four-sided polygon whose opposite sides are parallel.
Wrap-up
It's possible to do interesting things with vector arithmetic in a coordinate-free way: we didn't specify an origin, or any entries of any vectors in the examples.
Networks WorksheetBasic laws for electrical circuits
This two-page worksheet was generously donated to the sample article by Virgil Pierce at a CuratedCourses workshop in August2018. It has default (skinny) left and right margins, but we have specified longer top and bottom margins, with the top being the larger of the two.
Ohms Law
The current through a resistor is proportional to the ratio of the Voltage to the Resistance I = \frac{V}{R}
Or for our purposes
I R = V
Kirchoffs Current Law
The sum of the currents in a network meeting at a point is zero.
\sum_{k=1}^n I_k = 0
The sum of the voltages around any closed circuit (or subcircuit) is zero.
\sum_{k=1}^n V_k = 0
Kirchoffs Current Law and Kirkoffs Voltage Law combined with Ohms Law gives for any circuit of resistors and sources a linear system that may (or may not) determine the currents.
For the simple network pictured, calculuate the amperage in each part of the network by setting up a system of linear equations for the amperages.
Compare it with a parallel circuit network. Calculate the amperage in each part of the network by setting up a system of linear equations for the amperages.
Now generalize these ideas to a context outside of electrical circuits. Consider the network of streets given in the diagram (with one-way directions as indicated).
A traffic engineer counts the hourly flow of cars into and out of this network at the entrances. They get (EB = East Bound; WB = West Bound):
Estimated hourly traffic flow for the road network
EB Winooski
WB Winooski
Shelburne St
Willow
Jay
into
50
400
0
10
50
out of
55
390
20
15
30
Use a variable for each segment inside of the network and set up a system of linear equations restricting the flow. Solve the system. Note that you should not get a unique solution as traffic should be able to flow through the network in various ways.
This is a mock one-page worksheet for testing purposes. We have specified an overall margin just slightly less than the default.
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra.
Integer sagittis dictum turpis vel aliquet. Fusce ut suscipit dolor, nec tristique nisl. Aenean luctus, leo et ornare fermentum, nibh dui vulputate leo, nec tincidunt augue ipsum sed odio. Nunc non erat sollicitudin, iaculis eros consequat, dapibus eros.
A two-line paragraph interspersed to check on spacing, breaks and all that.
A full-width exercise
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra.
Integer sagittis dictum turpis vel aliquet. Fusce ut suscipit dolor, nec tristique nisl. Aenean luctus, leo et ornare fermentum, nibh dui vulputate leo, nec tincidunt augue ipsum sed odio. Nunc non erat sollicitudin, iaculis eros consequat, dapibus eros.
Another two-line paragraph interspersed to check on spacing, breaks and all that.
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra.
Integer sagittis dictum turpis vel aliquet. Fusce ut suscipit dolor, nec tristique nisl. Aenean luctus, leo et ornare fermentum, nibh dui vulputate leo, nec tincidunt augue ipsum sed odio. Nunc non erat sollicitudin, iaculis eros consequat, dapibus eros.
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra.
A Mock Activity
The problem, as we see it.
A worksheet could have hints, no? But no spacing. Note row below has widths set to balance the heights.
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra.
Integer sagittis dictum turpis vel aliquet. Fusce ut suscipit dolor, nec tristique nisl. Aenean luctus, leo et ornare fermentum, nibh dui vulputate leo, nec tincidunt augue ipsum sed odio. Nunc non erat sollicitudin, iaculis eros consequat, dapibus eros.
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra.
Dot products and projection
Let
{\vec v}_1 = (-4,1),
{\vec v}_2 = (2,2),
{\vec v}_3 = (1,2,3),
{\vec v}_4 = (-2,1,0).
Find the values of the following expressions:
Are any of these vectors perpendicular to each other?
The vectors \vec a = (3,9) and \vec u = (4,2)
are pictured below. Derive the formula for projection on a line and use it to find the
projection of \vec a on the line spanned by \vec u.
Also compute the length of the residual vector.
two vectors...
Consider the vector equation
m \begin{bmatrix}2 \\ 5\end{bmatrix} = \begin{bmatrix}3 \\ 7\end{bmatrix}
.
Check that there is no solution m that makes the equation true.
Use projection to find the best approximation \hat m.
Compute \hat m \begin{bmatrix}2 \\ 5\end{bmatrix} .
Compute the residual vector.
Compute the length of the residual vector and explain what it means.
Consider the system of equations
3t \amp =5
2t \amp = 9
.
Write the system in vector form.
Find the best estimate, \hat t, of t using projection.
Compute the length of the residual vector.
Index
================================================
FILE: examples/fonts/README.md
================================================
Characters, Fonts, and Languages
================================
The `fonts-and-charcters.xml` document here is mostly
for testing the use of the `xelatex` LaTeX engine on
the output of `xsl/pretext-latex.html`. It should also
render well in HTML formats. With the `pdflatex` engine
it will produce numerous errors (partly by design).
================================================
FILE: examples/fonts/fonts-and-characters.xml
================================================
\usepackage{pstricks-add}
Characters, Fonts, and Languages in Introduction
This is a sample document to demonstrate and test different fonts used for different languages. For PDF output, and best results, process with xelatex (or lualatex, unsupported). If processed with pdflatex, be prepared for errors, and maybe try running with the command-line option -interaction batchmode or -interaction nonstopmode. Commentary here, and in the original source file, should help you track down what might be missing in your system if the xelatex results are not satisfactory. You can also compare PDF output with the HTML output, which should work well for many different characters tested here.
Your source XML file should always have <?xml version="1.0" encoding="UTF-8" ?> as the first line of the file to specify that your file contains Unicode characters.
You will need to determine how to make your operating system, keyboard and editor cooperate to create the Unicode characters you need. The Full Unicode Input utility can be useful for generating short snippets or you can copy/paste from the source of this document.
Generating variants of HTML for web browsers should work smoothly. You can test your system and browser for font support by viewing samples at Alan Wood’s Unicode Resources.
Not finding what you are looking for? Send us a request. Even better, send us a snippet of text that I can use as a sample. If you know of any subleties in the use of for your desired font, please include those hints.
Language Examples
This next sections contain examples from various languages. The characters should render in HTML, but without any special support for subtle variations of how a language is used ( date formats). For output, the polyglossia package may handle details like hyphenation. Here we mostly test characters and fonts. Improvements from those knowledgeable about the use of particular languages within are especially welcome, as are requests for particular languages.
Source: Wikipedia Seoul entry, accessed 2016-12-08.
서울특별시(서울特別市)는 대한민국의 수도이자 최대 도시이다. 기원전 18년부터 475년까지 백제의 첫 수도인 위례성이었고, 고려시대에는 남경(南京)이었으며, 조선 건국 2년 후인 1394년 조선의 수도가 된 이후로 대한민국의 정부중앙청사, 청와대의 소재지가 되기까지 1,000년 이상 백제, 조선, 대한제국, 일제 강점기, 미 군정기, 대한민국의 정치·경제·사회·문화의 중심지 역할을 해왔다. 도시의 중앙으로 한강이 흐르고, 북한산, 관악산, 도봉산, 불암산, 인능산, 인왕산, 청계산 등 산으로 둘러싸인 분지 지형의 도시이다. 동서 간의 거리는 36.78km, 남북 간의 거리는 30.3km이며, 넓이는 605.25km2이다. 면적은 대한민국 국토의 0.6%에 불과하지만, 대한민국 인구의 1/5 정도 되는 약 990만여 명이 살고 있어서 인구밀도가 매우 높다. 1986년 아시안 게임과 1988년 하계 올림픽, 2002년 FIFA 월드컵, 2010년 G20 정상회의, 2012년 핵안보정상회의가 개최된 국제적인 도시이다. 시청과 정부서울청사가 소재하는 중구와 종로구의 세종대로를 중심으로 도심을 형성하며, 행정구역은 25개 구로 이루어진다. 2013년 예산은 20조 6287억 원으로 대한민국 지방자치단체 중 예산 규모가 가장 크다.
Hungarian (Magyar)
Language code: hu-HU
Font: Latin Modern
Source: Wikipedia Budapest entry, accessed 2016-07-25.
Budapest Magyarország fővárosa, egyben legnagyobb és legnépesebb városa, az Európai Unió kilencedik legnépesebb városa. Budapest az ország politikai, kulturális, kereskedelmi, ipari és közlekedési központja. Emellett Pest megye székhelye is, bár közigazgatásilag nem része annak. 2011-ben regisztrált lakónépessége meghaladta az 1,7 (elővárosokkal együtt pedig a 2,5) millió főt. A város lakossága 1989-ben volt a legnagyobb, az akkori lélekszám 2,1 millió fő volt, és az ezt követő szuburbanizáció után is megmaradt az ország legnépesebb városának. Területe mintegy 525 négyzetkilométer, ebben a tekintetben is első az ország települései között.
Budapest története a keltákig nyúlik vissza, mivel a város eredetileg kelta település volt. A rómaiak által létrehozott, a Danubius folyó jobb partján fekvő Aquincum és a bal parti Contra-Aquincum volt Pannonia provincia székhelye. A magyarok a 9. században érkeztek erre a területre. Az első általuk létrehozott települést a mongolok 1241 és 1242 között, a tatárjárás során teljesen kifosztották és elpusztították. A 15. században a helyreállított város lett a magyarországi reneszánsz humanizmus központja. Ezt követően százötven évnyi török hódoltság telepedett a városra és csak a 18-19. században tudott újra fejlődni, ezt fokozta, hogy a kiegyezést követően Bécs mellett az Osztrák–Magyar Monarchia fővárosa volt. 1873-ban egyesítették Budát, Pestet és Óbudát, ekkor jött létre Budapest. Ebben az időben épültek a város leghíresebb épületei, és ekkor nőtte ki magát világvárossá.
Budapest kedvelt idegenforgalmi célpont is, 2012-ben 4 821 600 turista kereste fel, ezzel az Euromonitor International felmérése szerint a világ 27. és Európa 7. leglátogatottabb városa. Budapesten több világörökségi helyszín is található, többek között a Duna-part látképe, a Budai Várnegyed, az Andrássy út, a Hősök tere és a Millenniumi Földalatti Vasút, amely a második legrégebbi a világon a londoni után. Turisztikailag jelentősek még a város Duna-hídjai, valamint gyógyfürdői, mivel Budapest a világ legtöbb gyógyfürdőjével rendelkező fővárosa. Itt található még a világ legnagyobb termálvizes barlangrendszere, Európa legnagyobb zsinagógája (a Dohány utcai), valamint a magyar Országház is, amely a világ harmadik legnagyobb parlamenti épülete, és a Szent Korona jelenlegi otthona.
Budapest Közép-Európa egyik pénzügyi központja és a világ 100. legnagyobb GDP-jét termelő városa. Az amerikai Forbes magazin szerint Budapest a 7. „legidillibb európai város”. A UCityGuides a világ 9. legszebb városának sorolja. A befolyásos amerikai Condé Nast Traveler utazási magazin által megkérdezett 1,3 millió személy véleménye alapján „Budapest a világ második legjobb városa”. A magyar főváros továbbá egyike Európa 10 legkedveltebb bevásárlóvárosának az Economist magazin kutatásai szerint, ugyanis itt található Közép- és Kelet-Európa legtöbb bevásárlóközpontja.
Russian
Language code: ru-RU
Font: CMU Serif (Computer Modern Unicode)
Source: Wikipedia Moscow entry, accessed 2016-12-09.
Москва — столица Российской Федерации, город федерального значения, административный центр Центрального федерального округа и центр Московской области, в состав которой не входит. Крупнейший по численности населения город России и её субъект — 12 330 126 чел. (2016), самый населённый из городов, полностью расположенных в Европе, входит в первую десятку городов мира по численности населения. Центр Московской городской агломерации.
Историческая столица Великого княжества Московского, Русского царства, Российской империи (в 1728—1730 годах), Советской России и СССР. Город-герой. В Москве находятся федеральные органы государственной власти Российской Федерации (за исключением Конституционного суда), посольства иностранных государств, штаб-квартиры большинства крупнейших российских коммерческих организаций и общественных объединений.
Расположена на реке Москве в центре Восточно-Европейской равнины, в междуречье Оки и Волги. Как субъект федерации Москва граничит с Московской и Калужской областями.
Москва — важный туристический центр России. Московский Кремль, Красная площадь, Новодевичий монастырь и Церковь Вознесения в Коломенском входят в список Всемирного наследия ЮНЕСКО. Она является важнейшим транспортным узлом. Город обслуживают 5 аэропортов, 9 железнодорожных вокзалов, 3 речных порта (имеется речное сообщение с морями бассейнов Атлантического и Северного Ледовитого океанов). С 1935 года в Москве работает метрополитен.
Spanish
Language code: es-ES
Font: Latin Modern
Source: Wikipedia Madrid entry, accessed 2016-07-25.
Madrid es un municipio y ciudad de España. La localidad, con categoría histórica de villa, es la capital del Estado y de la Comunidad de Madrid. También conocida como la Villa y Corte, es la ciudad más poblada del país, con 3 165 235 habitantes empadronados según datos del INE de 2014 mientras que, con la inclusión de su área metropolitana la cifra de población asciende a 6 543 031 habitantes, siendo por ello la tercera o cuarta área metropolitana de la Unión Europea, según la fuente, por detrás de las de París y Londres, y en algunas fuentes detrás también de la Región del Ruhr, así como la tercera ciudad más poblada de la Unión Europea, por detrás de Berlín y Londres. Madrid ocupa el puesto nº 38 en la lista Economist Intelligence Unit de ciudades con mejor calidad de vida del mundo.
Como capital del Estado, Madrid alberga las sedes del Gobierno, las Cortes Generales, ministerios, instituciones y organismos asociados, así como la residencia oficial de los reyes de España12 y del presidente del Gobierno. En el plano económico, es la cuarta ciudad más rica de Europa, tras Londres, París y Moscú. Para el 2009, el 50,1 % de los ingresos de las 5000 principales empresas españolas son generados por sociedades con sede social en Madrid, las cuales representan el 31,8 % de ellas. Es sede del 3.er mayor mercado de valores de Europa, y 2ª en el ámbito latinoamericano (Latibex) y de varias de las más grandes corporaciones del mundo. Es la 8.ª ciudad del mundo con mayor presencia de multinacionales, tras Pekín y por delante de Dubái, París y Nueva York.
En el plano internacional acoge la sede central de la Organización Mundial del Turismo (OMT), perteneciente a la ONU, la sede de la Organización Internacional de Comisiones de Valores (OICV), la sede de la Secretaría General Iberoamericana (SEGIB), la sede de la Organización de Estados Iberoamericanos para la Educación, la Ciencia y la Cultura (OEI), la Organización Iberoamericana de Juventud (OIJ), y la sede de Public Interest Oversight Board (PIOB). También alberga las principales instituciones internacionales reguladoras y difusoras del idioma español: la Comisión Permanente de la Asociación de Academias de la Lengua Española, y sedes centrales de la Real Academia Española (RAE), del Instituto Cervantes y de la Fundación del Español Urgente (Fundéu). Madrid organiza ferias como FITUR, Madrid Fusión, ARCO, SIMO TCI, el Salón del Automóvil y la Cibeles Madrid Fashion Week.
Es un influyente centro cultural y cuenta con museos de referencia internacional, entre los que destacan el Museo del Prado, el Museo Nacional Centro de Arte Reina Sofía, el Thyssen-Bornemisza y CaixaForum Madrid, que ocupan, respectivamente, el 12º, 18º, 67º y 80º puesto entre los museos más visitados del mundo.
Los orígenes de la ciudad son objeto de revisión tras recientes hallazgos de enterramientos visigodos así como de restos que se remontan a los carpetanos o periodo prerromano. Las excavaciones arqueológicas también arrojan restos que se atribuyen al Madrid romano. Estos hallazgos de época visigoda han venido a confirmar que el posterior asentamiento fortificado musulmán de Maǧrīţ (del siglo IX) se había asentado sobre un vicus visigodo del siglo VII llamado Matrice o matriz, arroyo. (AFI [maʤriːtˁ]),
No sería hasta el siglo XI cuando Madrid fue incorporada a la Corona de Castilla, tras su conquista por Alfonso VI de León y Castilla en 1083. Fue designada como sede de la Corte por el rey Felipe II en 1561, convirtiéndose en la primera capital permanente de la monarquía española. Desde el Renacimiento hasta la actualidad ha sido capital de España y sede del Gobierno y la administración del Estado salvo breves intervalos de tiempo: entre los años de 1601 y 1606 la capitalidad pasó a Valladolid; durante la Guerra de la Independencia Española, en que la capital se trasladó a Sevilla; en 1808 y en 1810 a Cádiz; durante la Guerra Civil, cuando el Gobierno republicano se trasladó primero a Valencia y después a Barcelona, durante la Guerra Civil el bando nacional se estableció en Burgos, y tras finalizar esta se estableció allí la capital hasta el 18 de octubre de 1939 que se volvió a trasladar a Madrid.
Vietnamese
Language code: vi-VN
Font: Latin Modern
Source: Wikipedia Hà Nội entry, accessed 2016-07-25.
Hà Nội là thủ đô của nước Cộng hoà Xã hội chủ nghĩa Việt Nam và cũng là kinh đô của rất nhiều vương triều Việt cổ. Do đó, lịch sử Hà Nội gắn liền với sự thăng trầm của lịch sử Việt Nam qua các thời kỳ. Hà Nội là thành phố lớn nhất Việt Nam về diện tích với 3328,9 km2 sau đợt mở rộng hành chính năm 2008, đồng thời cũng là địa phương đứng thứ nhì về dân số với 7.500.000 người (năm 2015). Hiện nay, thủ đô Hà Nội và thành phố Hồ Chí Minh là đô thị loại đặc biệt của Việt Nam.
Hà Nội nằm giữa đồng bằng sông Hồng trù phú, nơi đây đã sớm trở thành 1 trung tâm chính trị, kinh tế và văn hóa ngay từ những buổi đầu của lịch sử Việt Nam. Năm 1010, Lý Công Uẩn, vị vua đầu tiên của nhà Lý, quyết định xây dựng kinh đô mới ở vùng đất này với cái tên Thăng Long. Trong suốt thời kỳ của các triều đại Lý, Trần, Lê, Mạc, kinh thành Thăng Long là trung tâm văn hóa, giáo dục và buôn bán của cả nước. Khi Tây Sơn rồi nhà Nguyễn lên nắm quyền trị vì, kinh đô được chuyển về Huế và Thăng Long bắt đầu mang tên Hà Nội từ năm 1831, dưới thời vua Minh Mạng. Năm 1902, Hà Nội trở thành thủ đô của Liên bang Đông Dương và được người Pháp xây dựng, quy hoạch lại, được coi là tiểu Paris của Phương Đông thời bấy giờ. Trải qua hai cuộc chiến tranh, Hà Nội là thủ đô của nước CHXHCN Việt Nam thống nhất và giữ vai trò này cho tới ngày nay.
Sau đợt mở rộng địa giới hành chính vào tháng 8 năm 2008, Hà Nội hiện nay gồm 12 quận, 1 thị xã và 17 huyện ngoại thành. Hiện nay, Hà Nội và Thành phố Hồ Chí Minh là hai trung tâm kinh tế - xã hội đặc biệt quan trọng của Việt Nam.
General Language and Script Support
2016-12-08: this section is preliminary.
HTML output works well if your source includes Unicode characters. Hyphenation is a non-issue, since text reflows and there is no flush-right support.
It is a different story for , PDF, and print. So that is the focus in this sample document. You may not recognize the next subsection, but an explanation follows.
ὁ δὴ ἤτοι πρῶτός ἐστιν ἢ οὔ
ὁ δὴ ἤτοι πρῶτός ἐστιν ἢ οὔ.
Languages, Scripts, Subdivisions
The previous subsection has an xml:lang attribute on the subsection element, whose value is el indicating the Modern Greek language. So the entire subsection is being treated as characters from that language. There is a title, but it is not being affected now, and so is empty.
The behavior should be entirely similar for part, chapter, section, and subsubsection.
Language and Script Examples
Other elements have language support. We are starting with foreign, which also italicizes the content.
I Can Eat Glass
From the Kermit Project a startling phrase in many languages.
Modern Greek (monotonic), Italic: Μπορώ να φάω σπασμένα γυαλιά χωρίς να πάθω τίποτα.
Korean, Italic: 나는 유리를 먹을 수 있어요. 그래도 아프지 않아요
Hungarian, Italic: Meg tudom enni az üveget, nem lesz tőle bajom.
Russian, Italic: Я могу есть стекло, оно мне не вредит.
Spanish, Italic: Puedo comer vidrio, no me hace daño.
Vietnamese, Italic: Tôi có thể ăn thủy tinh mà không hại gì.
Font Tests
We place various blocks of Unicode characters here to determine the minimum configuration necessary to make them render. Alan Wood’s Unicode Resources site has been helpful in formulating these tests.
Basic Latin, U+0000U+007F
These 95 characters are the most basic, and will all render using xelatex with no special setup. U+0000 to U+001F are control codes and not used here. U+007F is also a control code and so is excluded. In the source we have authored each character by its escaped version using its Unicode number (in hexadecimal). So, for example, capital-B is authored as B.
These are exactly the same characters as above, but now we wrap them in the <c> element intended for inline use. This does not test all verbatim situations but is a good simple first test.
Note that the single and double quotes are upright and dumb, not curly and smart: " ' " ' " '. The zero is distinguished from the capital oh: 0 O 0 O 0 O. And the numeral one is slightly different from the lower-case ell: 1 l 1 l 1 l. The hyphen should be short and not expanded into some other kind of dash: - - -. These characters should all cut/paste out of a PDF into a text editor with no conversion to other characters.
Note also that we have again entered all these characters into the source with the �NN; XML notation.
Latin-1 Supplement, U+0080U+00FF
These 94 characters will all render using either pdflatex or xelatex with no special setup. U+0080 to U+009F are control codes and not used here. U+00A0 (non-breaking space) and U+00AD (soft hyphen) are also excluded. In the source we have authored each character by its escaped version using its Unicode number (in hexadecimal). So, for example, a copyright symbol is authored as ©.
The same 94 characters as above, wrapped in a <c> element as if being used inside a sentence. These will all render with xelatex and none will render with pdflatex (so there is just blank space below). If we improve the latter, then these will get duplicated into the sample article.
Good success rendering with xelatex and no extra setup, subject to glyphs actually being available in whatever font you use. Our default font is Latin Modern. About 25% of these are missing when rendered with pdflatex.
Latin Extended-A0123456789ABCDEF010_ĀāĂ㥹ĆćĈĉĊċČčĎď011_ĐđĒēĔĕĖėĘęĚěĜĝĞğ012_ĠġĢģĤĥĦħĨĩĪīĬĭĮį013_İıIJijĴĵĶķĸĹĺĻļĽľĿ014_ŀŁłŃńŅņŇňʼnŊŋŌōŎŏ015_ŐőŒœŔŕŖŗŘřŚśŜŝŞş016_ŠšŢţŤťŦŧŨũŪūŬŭŮů017_ŰűŲųŴŵŶŷŸŹźŻżŽžſ
Rendered with xelatex and no special setup, with default latin Modern fonts, we seem to be missing only four characters:
U+0138 (LATIN SMALL LETTER KRA, Greenlandic, removed 1973)
U+0149 (LATIN SMALL LETTER N PRECEDED BY APOSTROPHE, Afrikaans, deprecated as of Unicode version 5.2.0)
U+0166 (LATIN CAPITAL LETTER T WITH STROKE, Northern Sámi alphabet, used in northern parts of Norway, Sweden and Finland)
U+0167 (LATIN SMALL LETTER T WITH STROKE, Northern Sámi alphabet, used in northern parts of Norway, Sweden and Finland)
Latin Extended-B, U+0180U+024F
Rendering with xelatex and no extra setup, with default latin Modern fonts, maybe 50% missing, and some constructions of accents are clearly wrong. Almost none of these appear when rendered with pdflatex. (When processed with lualatex the incorrectly accented characters are not even visible, but we have not learned much about using fonts in LuaTeX.) Latin Modern does not claim to support any of this range.
Latin Extended-B0123456789ABCDEF018_ƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏ019_ƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟ01A_ƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯ01B_ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C_ǀǁǂǃDŽDždžLJLjljNJNjnjǍǎǏ01D_ǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟ01E_ǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯ01F_ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ020_ȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏ021_ȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟ022_ȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯ023_ȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿ
Latin Extended Additional, U+1E00U+1EFF
Latin Modern, our default font, supports this range of 256 characters, which includes 90 Vietnamese characters. Their documentation shows about 140 characters rendered correctly, which seems to jibe with the examples here that render properly.
Latin Extended Additional0123456789ABCDEF1E0_ḀḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏ1E1_ḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟ1E2_ḠḡḢḣḤḥḦḧḨḩḪḫḬḭḮḯ1E3_ḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿ1E4_ṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏ1E5_ṐṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟ1E6_ṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯ1E7_ṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿ1E8_ẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏ1E9_ẐẑẒẓẔẕẖẗẘẙẚẛẜẝẞẟ1EA_ẠạẢảẤấẦầẨẩẪẫẬậẮắ1EB_ẰằẲẳẴẵẶặẸẹẺẻẼẽẾế1EC_ỀềỂểỄễỆệỈỉỊịỌọỎỏ1ED_ỐốỒồỔổỖỗỘộỚớỜờỞở1EE_ỠỡỢợỤụỦủỨứỪừỬửỮữ1EF_ỰựỲỳỴỵỶỷỸỹỺỻỼỽỾỿ
Graphics
Some graphics languages require the xelatex engine, which this document presumes.
PSTricksPSTricks
PSTricks is a package for drawing diagrams and pictures, dating back to the days before PDF when PostScript (PS) was king. Given its history, it does not seem to work easily with the pdflatex engine. But it will work easily with the xelatex engine. So we test and document this approach here.
For the following we add\usepackage{pstricks-add} to the latex-image-preamble portion of docinfo. Your diagrams might be fine with simply the pstricks package. Following comes fromhttps://www.tug.org/PSTricks/main.cgi?file=Examples/polar#lemniscateaccessed on 2018-02-05.
Note that the width attribute is respected for HTML output, but ignored for the output. This situation could change.
A Lemniscate
\psset{unit=3cm,opacity=0.4}
\begin{pspicture}(-2,-1)(2,1)
\psgrid[gridcolor=lightgray,subgriddiv=0]
\psset{polarplot,plotpoints=500,linecolor=red,fillcolor=blue!30,fillstyle=solid,linewidth=2pt}
\psplot{-45}{45}{x dup add cos 3 mul sqrt}
\psplot[fillcolor=red!30,fillstyle=solid,linecolor=blue]{135}{225}{x dup add cos 3 mul sqrt}
\end{pspicture}
================================================
FILE: examples/hello-world/README.md
================================================
# "Hello, World" Example
`hello-world.xml` is a one-page article that has only a single paragraph with a single sentence. Guess what it says? For a more informative small example, see the `examples/minimal` directory.
================================================
FILE: examples/hello-world/hello-world.xml
================================================
A Small Hello to the World
Hello, World!
================================================
FILE: examples/hello-world/publication.xml
================================================
================================================
FILE: examples/humanities/README.md
================================================
# Humanities Example
`source/main.ptx` is a small document that primarily illustrates (and tests) markup for music and poetry.
`project.ptx` is a project configuration file for use with the PreTeXt-CLI.
`codechat_config.yaml` is a CodeChat project configuration file, which will use the PreTeXt-CLI for processing.
================================================
FILE: examples/humanities/codechat_config.yaml
================================================
# .. Copyright (C) 2012-2020 Bryan A. Jones.
#
# This file is part of the CodeChat System.
#
# The CodeChat System is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# The CodeChat System is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the CodeChat System. If not, see
# .
#
# ************************************************
# |docname| - Configuration for a CodeChat project
# ************************************************
# This file defines the configuration for a CodeChat project. It contains a working `Sphinx `_ configuration.
#
# ``source_path``: optional; defaults to ``.`` (the current directory). A path to the root of the source tree. Relative paths are rooted in the directory containing this configuration file.
source_path: source
# ``output_path``: required. A path to the root of the HTML output produced by this renderer. Relative paths are rooted in the directory containing this configuration file.
output_path: output/html
# ``args``: required string or sequence of strings. This provides the arguments to invoke the renderer. These strings may optionally contain the following replacement values:
#
# - ``{project_path}``: an absolute path to the directory containing this file.
# - ``{source_path}``: the ``source_path`` above, but as an absolute path.
# - ``{output_path}``: the ``output_path`` above, but as an absolute path.
#
# The line below could also be written ``args: sphinx-build . _build``.
args: pretext build html
# ``html_ext``: optional; defaults to ``.html``. The extension used by this renderer when generating HTML files.
#html_ext: .html
# ``project_type``: optional; defaults to ``general``. Define the project type, which enables special processing based on the type. Valid values are ``general`` (no special processing), ``Doxygen``, and ``PreTeXt``.
project_type: PreTeXt
================================================
FILE: examples/humanities/generated-assets/.gitkeep
================================================
================================================
FILE: examples/humanities/project.ptx
================================================
htmlsource/hia.xmlpublication/publication.ptxoutput/htmllatexsource/hia.xmlpublication/publication.ptxoutput/latexpdfsource/hia.xmlpublication/publication.ptxoutput/pdflatexpdflatexxelatexpdf2svgasysageconvertpdftopspdf-crop-marginspageresnodefile2brl
================================================
FILE: examples/humanities/publication/publication.ptx
================================================
================================================
FILE: examples/humanities/requirements.txt
================================================
pretextbook == 0.7.0
================================================
FILE: examples/humanities/source/hia.xml
================================================
Humanities in ActionJahrme RisnerUniversity of Puget Sound
A collection of demonstrations leveraging the increased support for writing in the humanities.
Scale degrees are created using the <scaledeg> tag which places a diacritic circumflex over the degree. The circumflex looks best when attached to single-digit numbers.
Scale Degrees
The scale degrees are
<scaledeg>0</scaledeg>: 0
<scaledeg>1</scaledeg>: 1
<scaledeg>2</scaledeg>: 2
<scaledeg>3</scaledeg>: 3
<scaledeg>4</scaledeg>: 4
<scaledeg>5</scaledeg>: 5
<scaledeg>6</scaledeg>: 6
<scaledeg>7</scaledeg>: 7
<scaledeg>8</scaledeg>: 8
<scaledeg>9</scaledeg>: 9
<scaledeg>10</scaledeg>: 10
Time Signatures
Time signatures are formed with the timesignature element and the top and bottom attributes. For example,
Notes are created using the <n> tag with a pitch class, @pc. Optional attributes include accidentals, @acc, and octaves, @octave. Please note, accidentals precede numeric pitch classes.
For example, <n pc="C" acc="sharp" octave="4"/> results in while <n pc="5" acc="flat"/> results in .
Alphabetic Pitch Classes
The alphabetic pitch classes are
Numeric Pitch Classes
The numeric pitch classes are
Chords
Chords are created using a combination of the <chord> and <alteration> tags. The <chord> tag can have any combination of the following attributes: @root, @mode, @bps, @suspended, @parentheses, and @bass. For alterations to chords, we place each alteration in an <alteration> tag, which are contained within the <chord> tag. To accommodate different styles of chord notation, the <chord> attribute @parentheses (parentheses="yes|no") will toggle the parentheses surrounding the alterations. With regard to the mode or characteristic of the chord, whatever text is entered will be used verbatim except in the cases of augmented, major, minor, halfdiminished, and diminished. In these cases, the standard chord symbol representation will be used (, , , , and respectively).
For example, <chord root="C" bps="4 3"/> will result in while
While there are different ways to notate chords, some are clearer than others.
vs
vs
5 vs vs
Scores
A score may be represented in several formats: PDF output from a scorewriter (not a scan of printed sheet music), an XML file in the MusicXML format, online within MuseScore, or in Lilypond syntax. We plan to support various output options and conversions, but at this writing support is rudimentary, but evolving.
PDF Source
Starting with a PDF that is born digital such as output from a scorewriter like Finale, it is possible to treat the score simply as we would any other image. The PDF version will be incorporated into the PDF output when the output is compiled, presuming the file is placed in the right location relative to the main file. For HTML output the utilities pdfcrop and pdf2svg will produce an SVG image that will work well.
This procedure will work best for very short scores, since it is treated as an indivisible image. For output, a longer score can lead to very poor page breaks, and large vertical gaps, especially in a preceding page. Or worse, the score might be longer than a single page, for which there is no solution. The piece below is inadvisably long and will likely demonstrate this behavior, though it is shorter than a page. Using scores authored, or converted to, Lilypond syntax should allow for better behavior of longer scores within a document.
Allegretto in F, Rob Hutchinson
Embedded Interactive Musical Scores
A score hosted on MuseScore is easy to specify with two ID numbers: the user number and the score number (examine the source for details). Then an embedded interactive player is nearly trivial to embed into HTML output. Work continues on a process to realize the score within output.
A collection of public domain poetry from: publicdomainpoems.com
William Butler YeatsNo Second TroyWilliam Butler YeatsWhy should I blame her that she filled my daysWith misery, or that she would of lateHave taught to ignorant men most violent ways,Or hurled the little streets upon the great,Had they but courage equal to desire?What could have made her peaceful with a mindThat nobleness made simple as a fire,With beauty like a tightened bow, a kindThat is not natural in an age like this,Being high and solitary and most stern?Why, what could she have done, being what she is?Was there another Troy for her to burn?The Lake Isle of InnisfreeWilliam Butler YeatsI will arise and go now, and go to Innisfree,And a small cabin build there, of clay and wattles made:Nine bean-rows will I have there, a hive for the honeybee,And live alone in the bee-loud glade.And I shall have some peace there, for peace comes dropping slow,Dropping from the veils of the morning to where the cricket sings;There midnight's all a glimmer, and noon a purple glow,And evening full of the linnet's wings.I will arise and go now, for always night and dayI hear lake water lapping with low sounds by the shore;While I stand on the roadway, or on the pavements grey,I hear it in the deep heart's core.He wishes for the clothes of HeavenWilliam Butler YeatsHad I the heavens' embroidered cloths,Enwrought with golden and silver light,The blue and the dim and the dark clothsOf night and light and the half-light,I would spread the cloths under your feet:But I, being poor, have only my dreams;I have spread my dreams under your feet;Tread softly because you tread on my dreams.Easter 1916William Butler YeatsII have met them at close of dayComing with vivid facesFrom counter or desk among greyEighteenth-century houses.I have passed with a nod of the headOr polite meaningless words,Or have lingered awhile and saidPolite meaningless words,And thought before I had doneOf a mocking tale or a gibeTo please a companionAround the fire at the club,Being certain that they and IBut lived where motley is worn:All changed, changed utterly:A terrible beauty is born.IIThat woman's days were spentIn ignorant good-will,Her nights in argumentUntil her voice grew shrill.What voice more sweet than hersWhen, young and beautiful,She rode to harriers?This man had kept a schoolAnd rode our winged horse;This other his helper and friendWas coming into his force;He might have won fame in the end,So sensitive his nature seemed,So daring and sweet his thought.This other man I had dreamedA drunken, vainglorious lout.He had done most bitter wrongTo some who are near my heart,Yet I number him in the song;He, too, has resigned his partIn the casual comedy;He, too, has been changed in his turn,Transformed utterly:A terribly beauty is born.IIIHearts with one purpose aloneThrough summer and winter seemEnchanted to a stoneTo trouble the living stream.The horse that comes from the road,The rider, the birds that rangeFrom cloud to tumbling cloud,Minute by minute they change;A shadow of cloud on the streamChanges minute by minute;A horse-hoof slides on the brim,And a horse plashed within it;The long-legged moor-hens dive,And hens to moor-cocks call;Minute by minute they live:The stone's in the midst of all.IVToo long a sacrificeCan make a stone of the heart.O when may it suffice?That is Heaven's part, our partTo murmur name upon name,As a mother names her childWhen sleep at last has comeOn limbs that had run wild.What is it but nightfall?No, no, not night but death;Was it needless death after all?For England may keep faithFor all that is done and said.We know their dream; enoughTo know they dreamed and are dead;And what if excess of loveBewildered them till they died?I write it out in a verse -MacDonagh and MacBrideAnd Connolly and PearseNow and in time to be,Wherever green is worn,Are changed, changed utterly:A terrible beauty is born.An Irish Airman Foresees His DeathWilliam Butler YeatsI know that I shall meet my fateSomewhere among the clouds above;Those that I fight I do not hateThose that I guard I do not love;My country is Kiltartan Cross,My countrymen Kiltartan's poor,No likely end could bring them lossOr leave them happier than before.Nor law, nor duty bade me fight,Nor public man, nor cheering crowds,A lonely impulse of delightDrove to this tumult in the clouds;I balanced all, brought all to mind,The years to come seemed waste of breath,A waste of breath the years behindIn balance with this life, this death.The Stolen ChildWilliam Butler YeatsWhere dips the rocky highlandOf Sleuth Wood in the lake,There lies a leafy islandWhere flapping herons wakeThe drowsy water-rats;There we've hid our faery vats,Full of berriesAnd of reddest stolen cherries.Come away, O human child!To the waters and the wildWith a faery, hand in hand,For the world's more full of weeping than youcan understand.Where the wave of moonlight glossesThe dim grey sands with light,Far off by furthest RossesWe foot it all the night,Weaving olden dances,Mingling hands and mingling glancesTill the moon has taken flight;To and fro we leapAnd chase the frothy bubbles,While the world is full of troublesAnd is anxious in its sleep.Come away, O human child!To the waters and the wildWith a faery, hand in hand,For the world's more full of weeping than youcan understand.Where the wandering water gushesFrom the hills above Glen-Car,In pools among the rushesThat scarce could bathe a star,We seek for slumbering troutAnd whispering in their earsGive them unquiet dreams;Leaning softly outFrom ferns that drop their tearsOver the young streams.Come away, O human child!To the waters and the wildWith a faery, hand in hand,For the world's more full of weeping than youcan understand.Away with us he's going,The solemn-eyed:He'll hear no more the lowingOf the calves on the warm hillsideOr the kettle on the hobSing peace into his breast,Or see the brown mice bobRound and round the oatmeal-chest.For he comes, the human child,To the waters and the wildWith a faery, hand in hand,From a world more full of weeping than hecan understand.When you are oldWilliam Butler YeatsWhen you are old and grey and full of sleep,And nodding by the fire, take down this book,And slowly read, and dream of the soft lookYour eyes had once, and of their shadows deep;How many loved your moments of glad grace,And loved your beauty with love false or true,But one man loved the pilgrim soul in you,And loved the sorrows of your changing face;And bending down beside the glowing bars,Murmur, a little sadly, how Love fledAnd paced upon the mountains overheadAnd hid his face amid a crowd of stars.The Fiddler of DooneyWilliam Butler YeatsWhen I play on my fiddle in DooneyFolk dance like a wave of the seaMy cousin is priest in KilvarnetMy brother in MoharabuieeI passed my brother and cousin:They read in their books of prayer;I read in my book of songsI bought at the Sligo fair.When we come at the end of time,To Peter sitting in state,He will smile on the three old spirits,But call me first through the gate;For the good are always the merry,Save by an evil chance,And the merry love the fiddleAnd the merry love to dance:And when the folk there spy me,They will all come up to me,With Here is the fiddler of Dooney!And dance like a wave of the sea.Swift's EpitaphWilliam Butler YeatsSwift has sailed into his rest;Savage indignation thereCannot lacerate his breast.Imitate him if you dare,World-besotted traveller; heServed human liberty.The Wild Swans At CooleWilliam Butler YeatsThe trees are in their autumn beauty,The woodland paths are dry,Under the October twilight the waterMirrors a still sky;Upon the brimming water among the stonesAre nine-and-fifty swans.The nineteenth autumn has come upon meSince I first made my count;I saw, before I had well finished,All suddenly mountAnd scatter wheeling in great broken ringsUpon their clamorous wings.I have looked upon those brilliant creatures,And now my heart is sore.All's changed since I, hearing at twilight,The first time on this shore,The bell-beat of their wings above my head,Trod with a lighter tread.Unwearied still, lover by lover,They paddle in the coldCompanionable streams or climb the air;Their hearts have not grown old;Passion or conquest, wander where they will,attend upon them still.But now they drift on the still water,Mysterious, beautiful;Among what rushes will they build,By what lake's edge or poolDelight men's eyes when I awake some dayTo find they have flown away?To A Friend Whose Work Has Come To NothingWilliam Butler YeatsNow all the truth is out,Be secret and take defeatFrom any brazen throat,For how can you compete,Being honour bred, with oneWho, were it proved he lies,Were neither shamed in his ownNor in his neighbours' eyes?Bred to a harder thingThan Triumph, turn awayAnd like a laughing stringWhereon mad fingers playAmid a place of stone,Be secret and exult,Because of all things knownThat is most difficult.Robert FrostFire and IceRobert FrostSome say the world will end in fire,Some say in ice.From what I've tasted of desireI hold with those who favor fire.But if it had to perish twice,I think I know enough of hateTo say that for destruction iceIs also greatAnd would suffice.The Oven BirdRobert FrostThere is a singer everyone has heard,Loud, a mid-summer and a mid-wood bird,Who makes the solid tree trunks sound again.He says that leaves are old and that for flowersMid-summer is to spring as one to ten.He says the early petal-fall is pastWhen pear and cherry bloom went down in showersOn sunny days a moment overcast;And comes that other fall we name the fall.He says the highway dust is over all.The bird would cease and be as other birdsBut that he knows in singing not to sing.The question that he frames in all but wordsIs what to make of a diminished thing.Bond and FreeRobert FrostLove has earth to which she clingsWith hills and circling arms aboutWall within wall to shut fear out.But Thought has need of no such things,For Thought has a pair of dauntless wings.On snow and sand and turf, I seeWhere Love has left a printed traceWith straining in the world's embrace.And such is Love and glad to be.But Thought has shaken his ankles free.Thought cleaves the interstellar gloomAnd sits in Sirius' disc all night,Till day makes him retrace his flight,With smell of burning on every plume,Back past the sun to an earthly room.His gains in heaven are what they are.Yet some say Love by being thrallAnd simply staying possesses allIn several beauty that Thought fares farTo find fused in another star.Putting in the SeedRobert FrostYou come to fetch me from my work tonightWhen supper's on the table, and we'll seeIf I can leave off burying the whiteSoft petals fallen from the apple tree.(Soft petals, yes, but not so barren quite,Mingled with these, smooth bean and wrinkled pea;)And go along with you ere you lose sightOf what you came for and become like me,Slave to a springtime passion for the earth.How Love burns through the Putting in the SeedOn through the watching for that early birthWhen, just as the soil tarnishes with weed,The sturdy seedling with arched body comesShouldering its way and shedding the earth crumbs.The Road Not TakenRobert FrostTwo roads diverged in a yellow wood,And sorry I could not travel bothAnd be one traveler, long I stoodAnd looked down one as far as I couldTo where it bent in the undergrowth;Then took the other, as just as fair,And having perhaps the better claim,Because it was grassy and wanted wear;Though as for that the passing thereHad worn them really about the same,And both that morning equally layIn leaves no step had trodden black.Oh, I kept the first for another day!Yet knowing how way leads on to way,I doubted if I should ever come back.I shall be telling this with a sighSomewhere ages and ages hence:Two roads diverged in a wood, and II took the one less traveled by,And that has made all the difference.The Need of Being Versed in Country ThingsRobert FrostThe house had gone to bring againTo the midnight sky a sunset glow.Now the chimney was all of the house that stood,Like a pistil after the petals go.The barn opposed across the way,That would have joined the house in flameHad it been the will of the wind, was leftTo bear forsaken the place's name.No more it opened with all one endFor teams that came by the stony roadTo drum on the floor with scurrying hoofsAnd brush the mow with the summer load.The birds that came to it through the airAt broken windows flew out and in,Their murmur more like the sigh we sighFrom too much dwelling on what has been.Yet for them the lilac renewed its leaf,And the aged elm, though touched with fire;And the dry pump flung up an awkward arm;And the fence post carried a strand of wire.For them there was really nothing sad.But though they rejoiced in the nest they kept,One had to be versed in country thingsNot to believe the phoebes wept.Mending WallRobert FrostSomething there is that doesn't love a wall,That sends the frozen-ground-swell under it,And spills the upper boulders in the sun;And makes gaps even two can pass abreast.The work of hunters is another thing:I have come after them and made repairWhere they have left not one stone on a stone,But they would have the rabbit out of hiding,To please the yelping dogs. The gaps I mean,No one has seen them made or heard them made,But at spring mending-time we find them there.I let my neighbor know beyond the hill;And on a day we meet to walk the lineAnd set the wall between us once again.We keep the wall between us as we go.To each the boulders that have fallen to each.And some are loaves and some so nearly ballsWe have to use a spell to make them balance:Stay where you are until our backs are turned!We wear our fingers rough with handling them.Oh, just another kind of outdoor game,One on a side. It comes to little more:There where it is we do not need the wall:He is all pine and I am apple orchard.My apple trees will never get acrossAnd eat the cones under his pines, I tell him.He only says, Good fences make good neighbors.Spring is the mischief in me, and I wonderIf I could put a notion in his head:Why do they make good neighbors? Isn't itWhere there are cows? But here there are no cows.Before I built a wall I'd ask to knowWhat I was walling in or walling out,And to whom I was like to give offense.Something there is that doesn't love a wall,That wants it down. I could say Elves to him,But it's not elves exactly, and I'd ratherHe said it for himself. I see him thereBringing a stone grasped firmly by the topIn each hand, like an old-stone savage armed.He moves in darkness as it seems to me,Not of woods only and the shade of trees.He will not go behind his father's saying,And he likes having thought of it so wellHe says again, Good fences make good neighbors.After Apple-pickingRobert FrostMy long two-pointed ladder's sticking through a treeToward heaven still,And there's a barrel that I didn't fillBeside it, and there may be two or threeApples I didn't pick upon some bough.But I am done with apple-picking now.Essence of winter sleep is on the night,The scent of apples: I am drowsing off.I cannot rub the strangeness from my sightI got from looking through a pane of glassI skimmed this morning from the drinking troughAnd held against the world of hoary grass.It melted, and I let it fall and break.But I was wellUpon my way to sleep before it fell,And I could tellWhat form my dreaming was about to take.Magnified apples appear and disappear,Stem end and blossom end,And every fleck of russet showing clear.My instep arch not only keeps the ache,It keeps the pressure of a ladder-round.I feel the ladder sway as the boughs bend.And I keep hearing from the cellar binThe rumbling soundOf load on load of apples coming in.For I have had too muchOf apple-picking: I am overtiredOf the great harvest I myself desired.There were ten thousand thousand fruit to touch,Cherish in hand, lift down, and not let fall.For allThat struck the earth,No matter if not bruised or spiked with stubble,Went surely to the cider-apple heapAs of no worth.One can see what will troubleThis sleep of mine, whatever sleep it is.Were he not gone,The woodchuck could say whether it's like hisLong sleep, as I describe its coming on,Or just some human sleep.The Wood-pileRobert FrostOut walking in the frozen swamp one gray dayI paused and said, I will turn back from here.No, I will go on fartherand we shall see.The hard snow held me, save where now and thenOne foot went down. The view was all in linesStraight up and down of tall slim treesToo much alike to mark or name a place bySo as to say for certain I was hereOr somewhere else: I was just far from home.A small bird flew before me. He was carefulTo put a tree between us when he lighted,And say no word to tell me who he wasWho was so foolish as to think what he thought.He thought that I was after him for a featherThe white one in his tail; like one who takesEverything said as personal to himself.One flight out sideways would have undeceived him.And then there was a pile of wood for whichI forgot him and let his little fearCarry him off the way I might have gone,Without so much as wishing him good-night.He went behind it to make his last stand.It was a cord of maple, cut and splitAnd piled and measured, four by four by eight.And not another like it could I see.No runner tracks in this year's snow looped near it.And it was older sure than this year's cutting,Or even last year's or the year's before.The wood was gray and the bark warping off itAnd the pile somewhat sunken. ClematisHad wound strings round and round it like a bundle.What held it though on one side was a treeStill growing, and on one a stake and prop,These latter about to fall. I thought that onlySomeone who lived in turning to fresh tasksCould so forget his handiwork on whichHe spent himself, the labor of his axe,And leave it there far from a useful fireplaceTo warm the frozen swamp as best it couldWith the slow smokeless burning of decay.The Exposed NestRobert FrostYou were forever finding some new play.So when I saw you down on hands and kneesIn the meadow, busy with the new-cut hay,Trying, I thought, to set it up on end,I went to show you how to make it stay,If that was your idea, against the breeze,And, if you asked me, even help pretendTo make it root again and grow afresh.But 'twas no make-believe with you to-day,Nor was the grass itself your real concern,Though I found your hand full of wilted fern,Steel-bright June-grass, and blackening heads of clover.'Twas a nest full of young birds on the groundThe cutter-bar had just gone champing over(Miraculously without tasting flesh)And left defenseless to the heat and light.You wanted to restore them to their rightOf something interposed between their sightAnd too much world at once-could means be found.The way the nest-full every time we stirredStood up to us as to a mother-birdWhose coming home has been too long deferred,Made me ask would the mother-bird returnAnd care for them in such a change of sceneAnd might our meddling make her more afraid.That was a thing we could not wait to learn.We saw the risk we took in doing good,But dared not spare to do the best we couldThough harm should come of it; so built the screenYou had begun, and gave them back their shade.All this to prove we cared. Why is there thenNo more to tell? We turned to other things.I haven't any memory-have you?Of ever coming to the place againTo see if the birds lived the first night through,And so at last to learn to use their wings.Walt WhitmanO Captain! My CaptainWalt WhitmanO Captain! my Captain! our fearful trip is done,The ship has weather'd every rack, the prize we sought is won,The port is near, the bells I hear, the people all exulting,While follow eyes the steady keel, the vessel grim and daring;But O heart! heart! heart!O the bleeding drops of red,Where on the deck my Captain lies,Fallen cold and dead.O Captain! my Captain! rise up and hear the bells;Rise upfor you the flag is flungfor you the bugle trills,For you bouquets and ribbon'd wreathsfor you the shores a-crowding,For you they call, the swaying mass, their eager faces turning;Here Captain! dear father!This arm beneath your head!It is some dream that on the deck,You've fallen cold and dead.My Captain does not answer, his lips are pale and still,My father does not feel my arm, he has no pulse nor will,The ship is anchor'd safe and sound, its voyage closed and done,From fearful trip the victor ship comes in with object won;Exult O shores, and ring O bells!But I with mournful tread,Walk the deck my Captain lies,Fallen cold and dead.I saw in Lousiana a live oak growingWalt WhitmanI saw in Louisiana a live-oak growing,All alone stood it and the moss hung down from the branches,Without any companion it grew there uttering joyous leaves of dark green,And its look, rude, unbending, lusty, made me think of myself,But I wonder'd how it could utter joyous leaves standing alone there without its friend near, for I knew I could not,And I broke off a twig with a certain number of leaves upon it, and twined around it a little moss,And brought it away, and I have placed it in sight in my room,It is not needed to remind me as of my own dear friends,(For I believe lately I think of little else than of them,)Yet it remains to me a curious token, it makes me think of manly love;For all that, and though the live-oak glistens there in Louisiana solitary in a wide flat space,Uttering joyous leaves all its life without a friend a lover near,I know very well I could not.Prairie Grass DividingWalt WhitmanThe prairie-grass dividing, its special odor breathing,I demand of it the spiritual corresponding,Demand the most copious and close companionship of men,Demand the blades to rise of words, acts, beings,Those of the open atmosphere, coarse, sunlit, fresh, nutritious,Those that go their own gait, erect, stepping with freedom and command, leading not following,Those with a never-quell'd audacity, those with sweet and lusty flesh clear of taint,Those that look carelessly in the faces of Presidents and governors, as to say Who are you? Those of earth-born passion, simple, never constrain'd, never obedient,Those of inland America.A Farm PictureWalt WhitmanThrough the ample open door of the peaceful country barn,A sunlit pasture field with cattle and horses feeding,And haze and vista, and the far horizon fading away.1861Walt WhitmanArm'd year-year of the struggle,No dainty rhymes or sentimental love verses for you terrible year,Not you as some pale poetling seated at a desk lisping cadenzas piano,But as a strong man erect, clothed in blue clothes, advancing, carrying a rifle on your shoulder,With well-gristled body and sunburnt face and hands, with a knife in the belt at your side,As I heard you shouting loud, your sonorous voice ringing across the continent,Your masculine voice O year, as rising amid the great cities,Amid the men of Manhattan I saw you as one of the workmen, the dwellers in Manhattan,Or with large steps crossing the prairies out of Illinois and Indiana,Rapidly crossing the West with springy gait and descending the Alleghanies,Or down from the great lakes or in Pennsylvania, or on deck along the Ohio river,Or southward along the Tennessee or Cumberland rivers, or at Chattanooga on the mountain top,Saw I your gait and saw I your sinewy limbs clothed in blue, bearing weapons, robust year,Old IrelandWalt WhitmanFar hence amid an isle of wondrous beauty,Crouching over a grave an ancient sorrowful mother,Once a queen, now lean and tatter'd seated on the ground,Her old white hair drooping dishevel'd round her shoulders,At her feet fallen an unused royal harp,Long silent, she too long silent, mourning her shrouded hope and heir,Of all the earth her heart most full of sorrow because most full of love.Yet a word ancient mother,You need crouch there no longer on the cold ground with forehead between your knees,O you need not sit there veil'd in your old white hair so dishevel'd,For know you the one you mourn is not in that grave,It was an illusion, the son you love was not really dead,The Lord is not dead, he is risen again young and strong in another country,Even while you wept there by your fallen harp by the grave,What you wept for was translated, pass'd from the grave,The winds favor'd and the sea sail'd it,And now with rosy and new blood,Moves to-day in a new country.Bivouac on a Mountain sideWalt WhitmanI see before me now a traveling army halting,Below a fertile valley spread, with barns and the orchards of summer,Behind, the terraced sides of a mountain, abrupt, in places rising high,Broken, with rocks, with clinging cedars, with tall shapes dingily seen,The numerous camp-fires scatter'd near and far, some away up on the mountain,The shadowy forms of men and horses, looming, large-sized, flickering,And over all the sky—the sky! far, far out of reach, studded, breaking out, the eternal stars.City of OrgiesWalt WhitmanCity of orgies, walks and joys,City whom that I have lived and sung in your midst will one day makeNot the pageants of you, not your shifting tableaus, your spectacles, repay me,Not the interminable rows of your houses, nor the ships at the wharves,Nor the processions in the streets, nor the bright windows with goods in them,Nor to converse with learn'd persons, or bear my share in the soiree or feast;Not those, but as I pass O Manhattan, your frequent and swift flash of eyes offering me love,Offering response to my ownthese repay me,Lovers, continual lovers, only repay me.Out of the Rolling Ocean the CrowdWalt WhitmanOut of the rolling ocean, the crowd, came a drop gently to me,Whispering, I love you, before long I die,I have travel'd a long way, merely to look on you, to touch you,For I could not die till I once look'd on you,For I fear'd I might afterward lose you.Now we have met, we have look'd, we are safe,Return in peace to the ocean, my love,I too am part of that ocean, my love,-we are not so much separated,Behold the great rondurethe cohesion of all, how perfect!But as for me, for you, the irresistible sea is to separate us,As for an hour carrying us diverse-yet cannot carry us diverse forever;Be not impatienta little spaceknow you I salute the air, the ocean and the land,Every day at sundown for your dear sake my love.Shut Not Your DoorsWalt WhitmanShut not your doors to me, proud libraries,For that which was lacking on all your well-fill'd shelves, yet needed most, I bringForth from the war emerging, a book I have made,The words of my book nothing, the drift of it every thing,A book separate, not link'd with the rest nor felt by the intellect,But you ye untold latencies will thrill to every page.Oscar WildeMagdalen WalksOscar WildeThe little white clouds are racing over the sky,And the fields are strewn with the gold of the flower of March,The daffodil breaks under foot, and the tasselled larchSways and swings as the thrush goes hurrying by.A delicate odour is borne on the wings of the morning breeze,The odour of deep wet grass, and of brown new-furrowed earth,The birds are singing for joy of the Spring's glad birth,Hopping from branch to branch on the rocking trees.And all the woods are alive with the murmur and sound of Spring,And the rose-bud breaks into pink on the climbing briar,And the crocus-bed is a quivering moon of fireGirdled round with the belt of an amethyst ring.And the plane to the pine-tree is whispering some tale of loveTill it rustles with laughter and tosses its mantle of green,And the gloom of the wych-elm's hollow is lit with the iris sheenOf the burnished rainbow throat and the silver breast of a dove.See! the lark starts up from his bed in the meadow there,Breaking the gossamer threads and the nets of dew,And flashing adown the river, a flame of blue!The kingfisher flies like an arrow, and wounds the air.Sonnet to LibertyOscar WildeNot that I love thy children, whose dull eyesSee nothing save their own unlovely woe,Whose minds know nothing, nothing care to know,But that the roar of thy Democracies,Thy reigns of Terror, thy great Anarchies,Mirror my wildest passions like the sea,And give my rage a brother! Liberty!For this sake only do thy dissonant criesDelight my discreet soul, else might all kingsBy bloody knout or treacherous cannonadesRob nations of their rights inviolateAnd I remain unmoved-and yet, and yet,These Christs that die upon the barricades,God knows it I am with them, in some things.The Grave of ShelleyOscar WildeLike burnt-out torches by a sick man's bedGaunt cypress-trees stand round the sun-bleached stone;Here doth the little night-owl make her throne,And the slight lizard show his jewelled head.And, where the chaliced poppies flame to red,In the still chamber of yon pyramidSurely some Old-World Sphinx lurks darkly hid,Grim warder of this pleasaunce of the dead.Ah! sweet indeed to rest within the wombOf Earth, great mother of eternal sleep,But sweeter far for thee a restless tombIn the blue cavern of an echoing deep,Or where the tall ships founder in the gloomAgainst the rocks of some wave-shattered steepThe Grave of KeatsOscar WildeRid of the world's injustice, and his pain,He rests at last beneath God's veil of blue:Taken from life when life and love were newThe youngest of the martyrs here is lain,Fair as Sebastian, and as early slain.No cypress shades his grave, no funeral yew,But gentle violets weeping with the dewWeave on his bones an ever-blossoming chain.O proudest heart that broke for misery!O sweetest lips since those of Mitylene!O poet-painter of our English Land!Thy name was writ in waterit shall stand:And tears like mine will keep thy memory green,As Isabella did her Basil-tree.A VisionOscar WildeTwo crownèd Kings, and One that stood aloneWith no green weight of laurels round his head,But with sad eyes as one uncomforted,And wearied with man's never-ceasing moanFor sins no bleating victim can atone,And sweet long lips with tears and kisses fed.Girt was he in a garment black and red,And at his feet I marked a broken stoneWhich sent up lilies, dove-like, to his knees.Now at their sight, my heart being lit with flameI cried to Beatricé, Who are these?And she made answer, knowing well each name,Æschylos first, the second Sophokles,And last (wide stream of tears!) Euripides.By the ArnoOscar WildeThe oleander on the wallGrows crimson in the dawning light,Though the grey shadows of the nightLie yet on Florence like a pall.The dew is bright upon the hill,And bright the blossoms overhead,But ah! the grasshoppers have fled,The little Attic song is still.Only the leaves are gently stirredBy the soft breathing of the gale,And in the almond-scented valeThe lonely nightingale is heard.The day will make thee silent soon,O nightingale sing on for love!While yet upon the shadowy groveSplinter the arrows of the moon.Before across the silent lawnIn sea-green mist the morning steals,And to love's frightened eyes revealsThe long white fingers of the dawnFast climbing up the eastern skyTo grasp and slay the shuddering night,All careless of my heart's delight,Or if the nightingale should die.At VeronaOscar WildeHow steep the stairs within Kings' houses areFor exile-wearied feet as mine to tread,And O how salt and bitter is the breadWhich falls from this Hound's table, better farThat I had died in the red ways of war,Or that the gate of Florence bare my head,Than to live thus, by all things comradedWhich seek the essence of my soul to mar.Curse God and die: what better hope than this?He hath forgotten thee in all the blissOf his gold city, and eternal dayNay peace: behind my prison's blinded barsI do possess what none can take away,My love, and all the glory of the stars.GreeceOscar WildeThe sea was sapphire coloured, and the skyBurned like a heated opal through the air;We hoisted sail; the wind was blowing fairFor the blue lands that to the eastward lie.From the steep prow I marked with quickening eyeZakynthos, every olive grove and creek,Ithaca's cliff, Lycaon's snowy peak,And all the flower-strewn hills of Arcady.The flapping of the sail against the mast,The ripple of the water on the side,The ripple of girls' laughter at the stern,The only sounds: when 'gan the West to burn,And a red sun upon the seas to ride,I stood upon the soil of Greece at last!ApologiaOscar WildeIs it thy will that I should wax and wane,Barter my cloth of gold for hodden grey,And at thy pleasure weave that web of painWhose brightest threads are each a wasted day?Is it thy will-Love that I love so wellThat my Soul's House should be a tortured spotWherein, like evil paramours, must dwellThe quenchless flame, the worm that dieth not?Nay, if it be thy will I shall endure,And sell ambition at the common mart,And let dull failure be my vestiture,And sorrow dig its grave within my heart.Perchance it may be better so-at leastI have not made my heart a heart of stone,Nor starved my boyhood of its goodly feast,Nor walked where Beauty is a thing unknown.Many a man hath done so; sought to fenceIn straitened bonds the soul that should be free,Trodden the dusty road of common sense,While all the forest sang of liberty,Not marking how the spotted hawk in flightPassed on wide pinion through the lofty air,To where the steep untrodden mountain heightCaught the last tresses of the Sun God's hair.Or how the little flower he trod upon,The daisy, that white-feathered shield of gold,Followed with wistful eyes the wandering sunContent if once its leaves were aureoled.But surely it is something to have beenThe best belovèd for a little while,To have walked hand in hand with Love, and seenHis purple wings flit once across thy smile.Ay! though the gorgèd asp of passion feedOn my boy's heart, yet have I burst the bars,Stood face to face with Beauty, known indeedThe Love which moves the Sun and all the stars!Alfred TennysonThe Deserted houseAlfred Tennyson1Life and Thought have gone awaySide by side,Leaving door and windows wide:Careless tenants they!2All within is dark as night:In the windows is no light;And no murmur at the door,So frequent on its hinge before.3Close the door, the shutters close,Or thro' the windows we shall seeThe nakedness and vacancyOf the dark deserted house.4Come away: no more of mirthIs here or merry-making sound.The house was builded of the earth,And shall fall again to ground.5Come away: for Life and ThoughtHere no longer dwell;But in a city gloriousA great and distant cityhave boughtA mansion incorruptible.Would they could have stayed with us!UlyssesAlfred TennysonIt little profits that an idle king,By this still hearth, among these barren crags,Match'd with an aged wife, I mete and doleUnequal laws unto a savage race,That hoard, and sleep, and feed, and know not me.I cannot rest from travel: I will drinkLife to the lees; all times I have enjoy'dGreatly, have suffer'd greatly, both with thoseThat loved me, and alone; on shore, and whenThro' scudding drifts the rainy HyadesVext the dim sea: I am become a name;For always roaming with a hungry heartMuch have I seen and known; cities of menAnd manners, climates, councils, governments,Myself not least, but honour'd of them all;And drunk delight of battle with my peers,Far on the ringing plains of windy Troy,I am a part of all that I have met;Yet all experience is an arch wherethro'Gleams that untravell'd world, whose margin fadesFor ever and for ever when I move.How dull it is to pause, to make an end,To rust unburnish'd, not to shine in use!As tho' to breathe were life. Life piled on lifeWere all too little, and of one to meLittle remains: but every hour is savedFrom that eternal silence, something more,A bringer of new things; and vile it wereFor some three suns to store and hoard myself,And this gray spirit yearning in desireTo follow knowledge like a sinking star,Beyond the utmost bound of human thought.This is my son, mine own Telemachus,To whom I leave the scepter and the isleWell-loved of me, discerning to fulfilThis labour, by slow prudence to make mildA rugged people, and thro' soft degreesSubdue them to the useful and the good.Most blameless is he, centred in the sphereOf common duties, decent not to failIn offices of tenderness, and payMeet adoration to my household gods,When I am gone. He works his work, I mine.There lies the port; the vessel puffs her sail:There gloom the dark broad seas. My mariners,Souls that have toil'd, and wrought, and thought with meThat ever with a frolic welcome tookThe thunder and the sunshine, and opposedFree hearts, free foreheads-you and I are old;Old age hath yet his honour and his toil;Death closes all: but something ere the end,Some work of noble note, may yet be done,Not unbecoming men that strove with Gods.The lights begin to twinkle from the rocks:The long day wanes: the slow moon climbs: the deepMoans round with many voices. Come, my friends,'Tis not too late to seek a newer world.Push off, and sitting well in order smiteThe sounding furrows; for my purpose holdsTo sail beyond the sunset, and the bathsOf all the western stars, until I die.It may be that the gulfs will wash us down:It may be we shall touch the Happy Isles,And see the great Achilles, whom we knew.Tho' much is taken, much abides; and tho'We are not now that strength which in old daysMoved earth and heaven; that which we are, we are;One equal temper of heroic hearts,Made weak by time and fate, but strong in willTo strive, to seek, to find, and not to yield.Locksley HallAlfred TennysonComrades, leave me here a little, while as yet 'tis early morn:Leave me here, and when you want me, sound upon the bugle horn.'Tis the place, and all around it, as of old, the curlews call,Dreary gleams about the moorland flying over Locksley Hall;Locksley Hall, that in the distance overlooks the sandy tracts,And the hollow ocean-ridges roaring into cataracts.Many a night from yonder ivied casement, ere I went to rest,Did I look on great Orion sloping slowly to the West.Many a night I saw the Pleiads, rising thro' the mellow shade,Glitter like a swarm of fire-flies tangled in a silver braid.Here about the beach I wander'd, nourishing a youth sublimeWith the fairy tales of science, and the long result of Time;When the centuries behind me like a fruitful land reposed;When I clung to all the present for the promise that it closed:When I dipt into the future far as human eye could see;Saw the Vision of the world, and all the wonder that would be.In the Spring a fuller crimson comes upon the robin's breast;In the Spring the wanton lapwing gets himself another crest;In the Spring a livelier iris changes on the burnish'd dove;In the Spring a young man's fancy lightly turns to thoughts of love.Then her cheek was pale and thinner than should be for one so young,And her eyes on all my motions with a mute observance hung.And I said, My cousin Amy, speak, and speak the truth to me,Trust me, cousin, all the current of my being sets to thee.On her pallid cheek and forehead came a colour and a light,As I have seen the rosy red flushing in the northern night.And she turn'd-her bosom shaken with a sudden storm of sighsAll the spirit deeply dawning in the dark of hazel eyesSaying, I have hid my feelings, fearing they should do me wrong;Saying, Dost thou love me, cousin? weeping, I have loved thee long.Love took up the glass of Time, and turn'd it in his glowing hands;Every moment, lightly shaken, ran itself in golden sands.Love took up the harp of Life, and smote on all the chords with might;Smote the chord of Self, that, trembling, pass'd in music out of sight.Many a morning on the moorland did we hear the copses ring,And her whisper throng'd my pulses with the fulness of the Spring.Many an evening by the waters did we watch the stately ships,And our spirits rush'd together at the touching of the lips.O my cousin, shallow-hearted! O my Amy, mine no more!O the dreary, dreary moorland! O the barren, barren shore!Falser than all fancy fathoms, falser than all songs have sung,Puppet to a father's threat, and servile to a shrewish tongue!Is it well to wish thee happy?-having known me-to declineOn a range of lower feelings and a narrower heart than mine!Yet it shall be: thou shalt lower to his level day by day,What is fine within thee growing coarse to sympathise with clay.As the husband is, the wife is: thou art mated with a clown,And the grossness of his nature will have weight to drag thee down.He will hold thee, when his passion shall have spent its novel force,Something better than his dog, a little dearer than his horse.What is this? his eyes are heavy: think not they are glazed with wine.Go to him: it is thy duty: kiss him: take his hand in thine.It may be my lord is weary, that his brain is overwrought:Soothe him with thy finer fancies, touch him with thy lighter thought.He will answer to the purpose, easy things to understandBetter thou wert dead before me, tho' I slew thee with my hand!Better thou and I were lying, hidden from the heart's disgrace,Roll'd in one another's arms, and silent in a last embrace.Cursed be the social wants that sin against the strength of youth!Cursed be the social lies that warp us from the living truth!Cursed be the sickly forms that err from honest Nature's rule!Cursed be the gold that gilds the straiten'd forehead of the fool!Well-'tis well that I should bluster!-Hadst thou less unworthy provedWould to God-for I had loved thee more than ever wife was loved.Am I mad, that I should cherish that which bears but bitter fruit?I will pluck it from my bosom, tho' my heart be at the root.Never, tho' my mortal summers to such length of years should comeAs the many-winter'd crow that leads the clanging rookery home.Where is comfort? in division of the records of the mind?Can I part her from herself, and love her, as I knew her, kind?I remember one that perish'd: sweetly did she speak and move:Such a one do I remember, whom to look at was to love.Can I think of her as dead, and love her for the love she bore?No-she never loved me truly: love is love for evermore.Comfort? comfort scorn'd of devils! this is truth the poet sings,That a sorrow's crown of sorrow is remembering happier things.Drug thy memories, lest thou learn it, lest thy heart be put to proof,In the dead unhappy night, and when the rain is on the roof.Like a dog, he hunts in dreams, and thou art staring at the wall,Where the dying night-lamp flickers, and the shadows rise and fall.Then a hand shall pass before thee, pointing to his drunken sleep,To thy widow'd marriage-pillows, to the tears that thou wilt weep.Thou shalt hear the Never, never, whisper'd by the phantom years,And a song from out the distance in the ringing of thine ears;And an eye shall vex thee, looking ancient kindness on thy pain.Turn thee, turn thee on thy pillow: get thee to thy rest again.Nay, but Nature brings thee solace; for a tender voice will cry,'Tis a purer life than thine; a lip to drain thy trouble dry.Baby lips will laugh me down: my latest rival brings thee rest.Baby fingers, waxen touches, press me from the mother's breast.O, the child too clothes the father with a dearness not his due.Half is thine and half is his: it will be worthy of the two.O, I see thee old and formal, fitted to thy petty part,With a little hoard of maxims preaching down a daughter's heart.They were dangerous guides the feelings-she herself was not exemptTruly, she herself had suffer'dPerish in thy self-contempt!Overlive it-lower yet-be happy! wherefore should I care,I myself must mix with action, lest I wither by despair.What is that which I should turn to, lighting upon days like these?Every door is barr'd with gold, and opens but to golden keys.Every gate is throng'd with suitors, all the markets overflow.I have but an angry fancy: what is that which I should do?I had been content to perish, falling on the foeman's ground,When the ranks are roll'd in vapour, and the winds are laid with sound.But the jingling of the guinea helps the hurt that Honour feels,And the nations do but murmur, snarling at each other's heels.Can I but relive in sadness? I will turn that earlier page.Hide me from my deep emotion, O thou wondrous Mother-Age!Make me feel the wild pulsation that I felt before the strife,When I heard my days before me, and the tumult of my life;Yearning for the large excitement that the coming years would yield,Eager-hearted as a boy when first he leaves his father's field,And at night along the dusky highway near and nearer drawn,Sees in heaven the light of London flaring like a dreary dawn;And his spirit leaps within him to be gone before him then,Underneath the light he looks at, in among the throngs of men;Men, my brothers, men the workers, ever reaping something new:That which they have done but earnest of the things that they shall do:For I dipt into the future, far as human eye could see,Saw the vision of the world, and all the wonder that would be;Saw the heavens fill with commerce, argosies of magic sails,Pilots of the purple twilight, dropping down with costly bales;Heard the heavens fill with shouting, and there rain'd a ghastly dewFrom the nations' airy navies grappling in the central blue;Far along the world-wide whisper of the south-wind rushing warm,With the standards of the peoples plunging thro' the thunder-storm;Till the war-drum throbbed no longer, and the battle-flags were furl'dIn the Parliament of man, the Federation of the world.There the common sense of most shall hold a fretful realm in awe,And the kindly earth shall slumber, lapt in universal law.So I triumph'd, ere my passion sweeping thro' me left me dry,Left me with the palsied heart, and left me with the jaundiced eye;Eye, to which all order festers, all things here are out of joint,Science moves, but slowly slowly, creeping on from point to point:Slowly comes a hungry people, as a lion, creeping nigher,Glares at one that nods and winks behind a slowly-dying fire.Yet I doubt not thro' the ages one increasing purpose runs,And the thoughts of men are widen'd with the process of the suns.What is that to him that reaps not harvest of his youthful joys,Tho' the deep heart of existence beat for ever like a boy's?Knowledge comes, but wisdom lingers, and I linger on the shore,And the individual withers, and the world is more and more.Knowledge comes, but wisdom lingers, and he bears a laden breast,Full of sad experience, moving toward the stillness of his rest.Hark, my merry comrades call me, sounding on the bugle-horn,They to whom my foolish passion were a target for their scorn:Shall it not be scorn to me to harp on such a moulder'd string?I am shamed thro' all my nature to have loved so slight a thing.Weakness to be wroth with weakness! woman's pleasure, woman's painNature made them blinder motions bounded in a shallower brain:Woman is the lesser man, and all thy passions, match'd with mine,Are as moonlight unto sunlight, and as water unto wineHere at least, where nature sickens, nothing. Ah, for some retreatDeep in yonder shining Orient, where my life began to beat;Where in wild Mahratta-battle fell my father evil-starr'd;I was left a trampled orphan, and a selfish uncle's ward.Or to burst all links of habit-there to wander far away,On from island unto island at the gateways of the day.Larger constellations burning, mellow moons and happy skies,Breadths of tropic shade and palms in cluster, knots of Paradise.Never comes the trader, never floats an European flag,Slides the bird o'er lustrous woodland, swings the trailer from the crag;Droops the heavy-blossom'd bower, hangs the heavy-fruited treeSummer isles of Eden lying in dark-purple spheres of sea.There methinks would be enjoyment more than in this march of mind,In the steamship, in the railway, in the thoughts that shake mankind.There the passions cramp'd no longer shall have scope and breathing-space;I will take some savage woman, she shall rear my dusky race.Iron-jointed, supple-sinew'd, they shall dive, and they shall run,Catch the wild goat by the hair, and hurl their lances in the sun;Whistle back the parrot's call, and leap the rainbows of the brooks.Not with blinded eyesight poring over miserable booksFool, again the dream, the fancy! but I know my words are wild,But I count the gray barbarian lower than the Christian child.I, to herd with narrow foreheads, vacant of our glorious gains,Like a beast with lower pleasures, like a beast with lower pains!Mated with a squalid savage-what to me were sun or clime?I the heir of all the ages, in the foremost files of timeI that rather held it better men should perish one by one,Than that earth should stand at gaze like Joshua's moon in Ajalon!Not in vain the distance beacons. Forward, forward let us range.Let the great world spin for ever down the ringing grooves of change.Thro' the shadow of the globe we sweep into the younger day:Better fifty years of Europe than a cycle of Cathay.Mother-Age (for mine I knew not) help me as when life begun:Rift the hills, and roll the waters, flash the lightnings, weigh the SunO, I see the crescent promise of my spirit hath not set.Ancient founts of inspiration well thro' all my fancy yet.Howsoever these things be, a long farewell to Locksley Hall!Now for me the woods may wither, now for me the roof-tree fall.Comes a vapour from the margin, blackening over heath and holt,Cramming all the blast before it, in its breast a thunderbolt.Let it fall on Locksley Hall, with rain or hail, or fire or snow;For the mighty wind arises, roaring seaward, and I go. TithonosAlfred TennysonThe woods decay, the woods decay and fall,The vapours weep their burthen to the ground,Man comes and tills the field and lies beneath,And after many a summer dies the swan.Me only cruel immortalityConsumes; I wither slowly in thine arms,Here at the quiet limit of the world,A white-hair'd shadow roaming like a dreamThe ever-silent spaces of the East,Far-folded mists, and gleaming halls of morn.Alas! for this gray shadow, once a manSo glorious in his beauty and thy choice,Who madest him thy chosen, that he seem'dTo his great heart none other than a God!I ask'd thee, Give me immortality.Then didst thou grant mine asking with a smile,Like wealthy men who care not how they give.But thy strong Hours indignant work'd their wills,And beat me down and marr'd and wasted me,And tho' they could not end me left me maim'dTo dwell in presence of immortal youth,Immortal age beside immortal youth,And all I was in ashes. Can thy loveThy beauty, make amends, tho' even now,Close over us, the silver star, thy guide,Shines in those tremulous eyes that fill with tearsTo hear me? Let me go: take back thy gift:Why should a man desire in any wayTo vary from the kindly race of men,Or pass beyond the goal of ordinanceWhere all should pause, as if most meet for all?A soft air fans the cloud apart; there comesA glimpse of that dark world where I was born.Once more the old mysterious glimmer stealsFrom any pure brows, and from thy shoulders pure,And bosom beating with a heart renew'd.Thy cheek begins to redden thro' the gloom,Thy sweet eyes brighten slowly close to mine,Ere yet they blind the stars, and the wild teamWhich love thee, yearning for thy yoke, arise,And shake the darkness from their loosen'd manes,And beat the twilight into flakes of fire.Lo! ever thus thou growest beautifulIn silence, then before thine answer givenDepartest, and thy tears are on my cheek.Why wilt thou ever scare me with thy tears,And make me tremble lest a saying learnt,In days far-off, on that dark earth, be true?The Gods themselves cannot recall their gifts.Ay me! ay me! with what another heartIn days far-off, and with what other eyesI used to watch {if I be he that watch'd}The lucid outline forming round thee; sawThe dim curls kindle into sunny rings;Changed with thy mystic change, and felt my bloodGlow with the glow that slowly crimson'd allThy presence and thy portals, while I lay,Mouth, forehead, eyelids, growing dewy-warmWith kisses balmier than half-opening budsOf April, and could hear the lips that kiss'dWhispering I knew now what of wild and sweet,Like that strange song I heard Apollo sing,While Ilion like a mist rose into towers.Yet hold me not for ever in thine East;How can my nature longer mix with thine?Coldly thy rosy shadows bathe me, coldAre all thy lights, and cold my wrinkled feetUpon thy glimmering thresholds, when the steamFloats up from those dim fields about the homesOf happy men that have the power to die,And grassy barrows of the happier dead.Release me, and restore me to the ground;Thou seest all things, thou wilt see my grave:Thou wilt renew thy beauty morn by morn;I earth in earth forget these empty courts,And thee returning on thy silver wheels. Break, Break, BreakAlfred TennysonBreak, break, break,On thy cold gray stones, O Sea!And I would that my tongue could utterThe thoughts that arise in me.O well for the fisherman's boy,That he shouts with his sister at play!O well for the sailor lad,That he sings in his boat on the bay!And the stately ships go onTo their haven under the hill:But O for the touch of a vanish'd hand,And the sound of a voice that is still!Break, break, break,At the foot of thy crags, O Sea!But the tender grace of a day that is deadWill never come back to me.In the Valley of CauteretzAlfred TennysonAll along the valley, stream that flashest white,Deepening thy voice with the deepening of the night,All along the valley, where thy waters flow,I walked with one I loved two and thirty years ago.All along the valley while I walked to-day,The two and thirty years were a mist that rolls away;For all along the valley, down thy rocky bed,Thy living voice to me was as the voice of the dead,And all along the valley, by rock and cave and tree,The voice of the dead was a living voice to me.Crossing the BarAlfred TennysonSunset and evening star,And one clear call for me!And may there be no moaning of the bar,When I put out to sea,But such a tide as moving seems asleep,Too full for sound and foam,When that which drew from out the boundless deepTurns again home.Twilight and evening bell,And after that the dark!And may there be no sadness of farewell,When I embark;For though from out our bourne of Time and PlaceThe flood may bear me far,I hope to see my Pilot face to faceWhen I have crossed the bar.David Herbert Richards LawrenceSelf PityD. H. LawrenceI never saw a wild thingsorry for itself.A small bird will drop frozen dead from a boughwithout ever having felt sorry for itself.At the WindowD. H. LawrenceThe pine-trees bend to listen to the autumn wind as it muttersSomething which sets the black poplars ashake with hysterical laughter;While slowly the house of day is closing its eastern shutters.Further down the valley the clustered tombstones recede,Winding about their dimness the mist's grey cerements, afterThe street lamps in the darkness have suddenly started to bleed.The leaves fly over the window and utter a word as they passTo the face that leans from the darkness, intent, with two dark-filled eyesThat watch for ever earnestly from behind the window glass.From A College WindowD. H. LawrenceThe glimmer of the limes, sun-heavy, sleeping,Goes trembling past me up the College wall.Below, the lawn, in soft blue shade is keepingThe diasy-froth quiescent, softly in thrall.Beyond the leaves that overhang the street,Along the flagged, clean pavement summer-white,Passes the world with shadows at their feetGoing left and right.Romoste, although I hear the beggar's cough,See the woman's twinkling fingers tend him a coin,I sit absolved, assured I am better offBeyond a world I never want to join.Gloire de DijonD. H. LawrenceWhen she rises in the morningI linger to watch her;She spreads the bath-cloth underneath the windowAnd the sunbeams catch herGlistening white on the shoulders,While down her sides the mellowGolden shadow glows asShe stoops to the sponge, and her swung breastsSway like full-blown yellowGloire de Dijon roses.She drips herself with water, and her shouldersGlisten as silver, they crumple upLike wet and falling roses, and I listenFor the sluicing of their rain-dishevelled petals.In the window full of sunlightConcentrates her golden shadowFold on fold, until it glows asMellow as the glory roses.PatienceD. H. LawrenceA wind comes from the northBlowing little flocks of birdsLike spray across the town,And a train, roaring forth,Rushes stampeding downWith cries and flying curdsOf steam, out of the darkening north.Whither I turn and setLike a needle steadfastly,Waiting ever to getThe news that she is free;But ever fixed, as yet,To the lode of her agony.PianoD. H. LawrenceSoftly, in the dusk, a woman is singing to me;Taking me back down the vista of years, till I seeA child sitting under the piano, in the boom of the tingling stringsAnd pressing the small, poised feet of a mother who smiles as she sings.In spite of myself, the insidious mastery of songBetrays me back, till the heart of me weeps to belongto the old Sunday evenings at home, with the winter outsideAnd hymns in the cosy parlour, the tinkling piano our guide.So now it is vain for the singer to burst into clamourWith the great black piano appassionato. The glamourOf childish days is upon me, my manhood is castDown in the flood of remembrance, I weep like a child for the past.Piccadilly Circus at NightD. H. LawrenceWhen into the night the yellow light is roused like dust above the towns,Or like a mist the moon has kissed from off a pool in the midst of the downs,Our faces flower for a little hour pale and uncertain along the street,Daisies that waken all mistaken white-spread in expectancy to meetThe luminous mist which the poor things wist was dawn arriving across the sky,When dawn is far behind the star the dust-lit town has driven so high.All the birds are folded in a silent ball of sleep,All the flowers are faded from the asphalt isle in the sea,Only we hard-faced creatures go round and round, and keepThe shores of this innermost ocean alive and illusory.Wanton sparrows that twittered when morning looked in at their eyesAnd the Cyprian's pavement-roses are gone, and now it is weFlowers of illusion who shine in our gauds, make a ParadiseOn the shores of this ceaseless ocean, gay birds of the town-dark sea.A White BlossomD. H. LawrenceA tiny moon as white and small as a single jasmine flowerLeans all alone above my window, on night's wintry bower,Liquid as lime-tree blossom, soft as brilliant water or rainShe shines, the one white love of my youth, which all sin cannot stain.A Winter's TaleD. H. LawrenceYesterday the fields were only gray with scattered snow,And now the longest grass-leaves hardly emerge;Yet her deep footsteps mark the snow, and goOn towards the pines at the hills' white verge.I cannot see her, since the mist's white scarfObscures the dark wood and the dull orange sky;But she's waiting, I know, impatient and cold, halfSobs struggling into her frosty sigh.Why does she come so promptly, when she must knowThat she's only the nearer to the inevitable farewell;The hill is steep, on the snow my steps are slowWhy does she come, when she knows what I have to tell?The Wild CommonD. H. LawrenceThe quick sparks on the gorse bushes are leaping,Little jets of sunlight-texture imitating flame;Above them, exultant, the pee-wits are sweeping:They are lords of the desolate wastes of sadness their screamings proclaim.Rabbits, handfuls of brown earth, lieLow-rounded on the mournful grass they have bitten down to the quick.Are they asleep?Are they alive?Now see, when IMove my arms the hill bursts and heaves under their spurting kick.The common flaunts bravely; but below, from the rushesCrowds of glittering king-cups surge to challenge the blossoming bushes;There the lazy streamlet pushesIts curious course mildly; here it wakes again, leaps, laughs, and gushes.Into a deep pond, an old sheep-dip,Dark, overgrown with willows, cool, with the brook ebbing through so slow,Naked on the steep, soft lipOf the bank I stand watching my own white shadow quivering to and fro.What if the gorse flowers shrivelled and kissing were lost?Without the pulsing waters, where were the marigolds and the songs of the brook?If my veins and my breasts with love embossedWithered, my insolent soul would be gone like flowers that the hot wind took.So my soul like a passionate woman turns,Filled with remorseful terror to the man she scorned, and her loveFor myself in my own eyes' laughter burns,Runs ecstatic over the pliant folds rippling down to my belly from the breast-lights above.Over my sunlit skin the warm, clinging air,Rich with the songs of seven larks singing at once, goes kissing me glad.And the soul of the wind and my blood compareTheir wandering happiness, and the wind, wasted in liberty, drifts on and is sad.Oh but the water loves me and folds me,Plays with me, sways me, lifts me and sinks me as though it were living blood,Blood of a heaving woman who holds me,Owning my supple body a rare glad thing, supremely good.John KeatsOde on a Grecian UrnJohn KeatsThou still unravished bride of quietness!Thou foster-child of silence and slow time,Sylvan historian, who canst thus expressA flow'ry tale more sweetly than our rhyme:What leaf-fringed legend haunts about thy shapeOf deities or mortals, or of both,In Tempe or the dales of Arcady?What men or gods are these? What maidens loth?What mad pursuit? What struggle to escape?What pipes and timbrels? What wild ecstasy?Heard melodies are sweet, but those unheardAre sweeter; therefore, ye soft pipes, play on;Not to the sensual ear, but, more endeared,Pipe to the spirit ditties of no tone:Fair youth, beneath the trees, thou canst not leaveThy song, nor ever can those trees be bare;Bold Lover, never, never canst thou kiss,Though winning near the goal yet, do not grieve;She cannot fade, though thou hast not thy bliss,For ever wilt thou love, and she be fair!Ah, happy, happy boughs! that cannot shedYour leaves, nor ever bid the Spring adieu;And, happy melodist, unwearied,For ever piping songs for ever new;More happy love! more happy, happy love!For ever warm and still to be enjoyed,For ever panting and for ever young;All breathing human passion far above,That leaves a heart high-sorrowful and cloyed,A burning forehead, and a parching tongue.Who are these coming to the sacrifice?To what green altar, O mysterious priest,Lead'st thou that heifer lowing at the skies,And all her silken flanks with garlands drest?What little town by river or sea-shore,Or mountain-built with peaceful citadel,Is emptied of its folk, this pious morn?And, little town, thy streets for evermoreWill silent be; and not a soul to tellWhy thou art desolate, can e'er return.O Attic shape! Fair attitude! with bredeOf marble men and maidens overwrought,With forest branches and the trodden weed;Thou, silent form, dost tease us out of thoughtAs doth eternity: Cold pastoral!When old age shall this generation waste,Thou shalt remain, in midst of other woeThan ours, a friend to man, to whom thou sayst,"Beauty is truth, truth beauty," that is allYe know on earth, and all ye need to know.Bright Star, Would I were Stedfast as Thou ArtJohn KeatsBright star, would I were stedfast as thou artNot in lone splendour hung aloft the nightAnd watching, with eternal lids apart,Like nature's patient, sleepless Eremite,The moving waters at their priestlike taskOf pure ablution round earth's human shores,Or gazing on the new soft-fallen maskOf snow upon the mountains and the moorsNoyet still stedfast, still unchangeable,Pillow'd upon my fair love's ripening breast,To feel for ever its soft fall and swell,Awake for ever in a sweet unrest,Still, still to hear her tender-taken breath,And so live everor else swoon to death.On the SeaJohn KeatsIt keeps eternal whisperings aroundDesolate shores, and with its mighty swellGluts twice ten thousand caverns, till the spellOf Hecate leaves them their old shadowy sound.Often 'tis in such gentle temper found,That scarcely will the very smallest shellBe moved for days from whence it sometime fell,When last the winds of heaven were unbound.Oh ye! who have your eye-balls vexed and tired,Feast them upon the wideness of the Sea;Oh ye! whose ears are dinned with uproar rude,Or fed too much with cloying melody,Sit ye near some old cavern's mouth, and broodUntil ye start, as if the sea-nymphs choired!To AutumnJohn KeatsISeason of mists and mellow fruitfulness,Close bosom-friend of the maturing sun;Conspiring with him how to load and blessWith fruit the vines that round the thatch-eaves run;To bend with apples the moss'd cottage-trees,And fill all fruit with ripeness to the core;To swell the gourd, and plump the hazel shellsWith a sweet kernel; to set budding more,And still more, later flowers for the bees,Until they think warm days will never cease,For summer has o'er-brimm'd their clammy cells.IIWho hath not seen thee oft amid thy store?Sometimes whoever seeks abroad may findThee sitting careless on a granary floor,Thy hair soft-lifted by the winnowing wind;Or on a half-reap'd furrow sound asleep,Drows'd with the fume of poppies, while thy hookSpares the next swath and all its twined flowers:And sometimes like a gleaner thou dost keepSteady thy laden head across a brook;Or by a cyder-press, with patient look,Thou watchest the last oozings hours by hours.IIIWhere are the songs of spring? Ay, where are they?Think not of them, thou hast thy music too,While barred clouds bloom the soft-dying day,And touch the stubble-plains with rosy hue;Then in a wailful choir the small gnats mournAmong the river sallows, borne aloftOr sinking as the light wind lives or dies;And full-grown lambs loud bleat from hilly bourn;Hedge-crickets sing; and now with treble softThe red-breast whistles from a garden-croft;And gathering swallows twitter in the skies.Ode to a NightingaleJohn Keats1.My heart aches, and a drowsy numbness painsMy sense, as though of hemlock I had drunk,Or emptied some dull opiate to the drainsOne minute past, and Lethe-wards had sunk:'Tis not through envy of thy happy lot,But being too happy in thine happiness,That thou, light-winged Dryad of the trees,In some melodious plotOf beechen green, and shadows numberless,Singest of summer in full-throated ease.2.O, for a draught of vintage! that hath beenCool''d a long age in the deep-delved earth,Tasting of Flora and the country green,Dance, and Provencal song, and sunburnt mirth!O for a beaker full of the warm South,Full of the true, the blushful Hippocrene,With beaded bubbles winking at the brim,And purple-stained mouth;That I might drink, and leave the world unseen,And with thee fade away into the forest dim:3.Fade far away, dissolve, and quite forgetWhat thou among the leaves hast never known,The weariness, the fever, and the fretHere, where men sit and hear each other groan;Where palsy shakes a few, sad, last gray hairs,Where youth grows pale, and spectre-thin, and dies;Where but to think is to be full of sorrowAnd leaden-eyed despairs,Where Beauty cannot keep her lustrous eyes,Or new Love pine at them beyond to-morrow.4.Away! away! for I will fly to thee,Not charioted by Bacchus and his pards,But on the viewless wings of Poesy,Though the dull brain perplexes and retards:Already with thee! tender is the night,And haply the Queen-Moon is on her throne,Cluster'd around by all her starry Fays;But here there is no light,Save what from heaven is with the breezes blownThrough verdurous glooms and winding mossy ways.5.I cannot see what flowers are at my feet,Nor what soft incense hangs upon the boughs,But, in embalmed darkness, guess each sweetWherewith the seasonable month endowsThe grass, the thicket, and the fruit-tree wild;White hawthorn, and the pastoral eglantine;Fast fading violets cover'd up in leaves;And mid-May's eldest child,The coming musk-rose, full of dewy wine,The murmurous haunt of flies on summer eves.6.Darkling I listen; and, for many a timeI have been half in love with easeful Death,Call'd him soft names in many a mused rhyme,To take into the air my quiet breath;Now more than ever seems it rich to die,To cease upon the midnight with no pain,While thou art pouring forth thy soul abroadIn such an ecstasy!Still wouldst thou sing, and I have ears in vainTo thy high requiem become a sod.7.Thou wast not born for death, immortal Bird!No hungry generations tread thee down;The voice I hear this passing night was heardIn ancient days by emperor and clown:Perhaps the self-same song that found a pathThrough the sad heart of Ruth, when, sick for home,She stood in tears amid the alien corn;The same that oft-times hathCharm'd magic casements, opening on the foamOf perilous seas, in faery lands forlorn.8.Forlorn! the very word is like a bellTo toll me back from thee to my sole self!Adieu! the fancy cannot cheat so wellAs she is fam'd to do, deceiving elf.Adieu! adieu! thy plaintive anthem fadesPast the near meadows, over the still stream,Up the hill-side; and now 'tis buried deepIn the next valley-glades:Was it a vision, or a waking dream?Fled is that music: do I wake or sleep?Percy ShelleyOde to the West WindPercy ShelleyIO wild West Wind, thou breath of Autumn's being,Thou, from whose unseen presence the leaves deadAre driven, like ghosts from an enchanter fleeing,Yellow, and black, and pale, and hectic red,Pestilence-stricken multitudes: O thou,Who chariotest to their dark wintry bedThe wingéd seeds, where they lie cold and low,Each like a corpse within its grave, untilThine azure sister of the Spring shall blowHer clarion o'er the dreaming earth, and fill(Driving sweet buds like flocks to feed in air)With living hues and odours plain and hill:Wild Spirit, which art moving everywhere;Destroyer and preserver; hear, oh, hear!IIThou on whose stream, 'mid the steep sky's commotion,Loose clouds like earth's decaying leaves are shed,Shook from the tangled boughs of Heaven and Ocean,Angels of rain and lightning: there are spreadOn the blue surface of thine aery surge,Like the bright hair uplifted from the headOf some fierce Maenad, even from the dim vergeOf the horizon to the zenith's height,The locks of the approaching storm. Thou dirgeOf the dying year, to which this closing nightWill be the dome of a vast sepulchre,Vaulted with all thy congregated mightOf vapors, from whose solid atmosphereBlack rain, and fire, and hail will burst: oh, hear!IIIThou who didst waken from his summer dreamsThe blue Mediterranean, where he lay,Lulled by the coil of his crystalline streams,Beside a pumice isle in Baiae's bay,And saw in sleep old palaces and towersQuivering within the wave's intenser day,All overgrown with azure moss and flowersSo sweet, the sense faints picturing them! ThouFor whose path the Atlantic's level powersCleave themselves into chasms, while far belowThe sea-blooms and the oozy woods which wearThe sapless foliage of the ocean, knowThy voice, and suddenly grow gray with fear,And tremble and despoil themselves: oh, hear!IVIf I were a dead leaf thou mightest bear;If I were a swift cloud to fly with thee;A wave to pant beneath thy power, and shareThe impulse of thy strength, only less freeThan thou, O uncontrollable! If evenI were as in my boyhood, and could beThe comrade of thy wanderings over Heaven,As then, when to outstrip thy skiey speedScarce seemed a vision; I would ne'er have strivenAs thus with thee in prayer in my sore need.Oh, lift me as a wave, a leaf, a cloud!I fall upon the thorns of life! I bleed!A heavy weight of hours has chained and bowedOne too like thee: tameless, and swift, and proud.VMake me thy lyre, even as the forest is:What if my leaves are falling like its own!The tumult of thy mighty harmoniesWill take from both a deep, autumnal tone,Sweet though in sadness. Be thou, Spirit fierce,My spirit! Be thou me, impetuous one!Drive my dead thoughts over the universeLike withered leaves to quicken a new birth!And, by the incantation of this verse,Scatter, as from an unextinguished hearthAshes and sparks, my words among mankind!Be through my lips to unawakened earthThe trumpet of a prophecy! O Wind,If Winter comes, can Spring be far behind?OzymandiasPercy ShelleyI met a traveller from an antique landWho said: Two vast and trunkless legs of stoneStand in the desert. Near them on the sand,Half sunk, a shatter'd visage lies, whose frownAnd wrinkled lip and sneer of cold commandTell that its sculptor well those passions readWhich yet survive, stamp'd on these lifeless things,The hand that mock'd them and the heart that fed.And on the pedestal these words appear:My name is Ozymandias, king of kings:Look on my works, ye Mighty, and despair!Nothing beside remains: round the decayOf that colossal wreck, boundless and bare,The lone and level sands stretch far away.The Indian SerenadePercy ShelleyI arise from dreams of theeIn the first sweet sleep of night,When the winds are breathing low,And the stars are shining brightI arise from dreams of thee,And a spirit in my feetHath led me—who knows how?To thy chamber window, Sweet!The wandering airs they faintOn the dark, the silent stream—The champak odors failLike sweet thoughts in a dream;The nightingale's complaint,It dies upon her heart;As I must on thine,Oh, beloved as thou art!O lift me from the grass!die! I faint! I fail!Let thy love in kisses rainOn my lips and eyelids pale.My cheek is cold and white, alas!My heart beats loud and fast;—Oh! press it to thine own again,Where it will break at last.Ode to a SkylarkPercy ShelleyHail to thee, blithe spiritBird thou never wertThat from heaven or near itPourest thy full heartIn profuse strains of unpremeditated art.Higher still and higherFrom the earth thou springest,Like a cloud of fire;The blue deep thou wingest,And singing still dost soar and soaring ever singest.In the golden lightningOf the sunken sun,O'er which clouds are brightening,Thou dost float and run,Like an unbodied joy whose race is just begun.The pale purple evenMelts around thy flight;Like a star of heaven,In the broad daylightThou art unseen, but yet I hear thy shrill delight.All the earth and airWith thy voice is loud,As, when night is bare,From one lonely cloudThe moon rains out her beams, and heaven is overflowed.What thou art we know not;What is most like thee?From rainbow-clouds there flow notDrops so bright to seeAs from thy presence showers a rain of melody:Like a poet hiddenIn the light of thought;Singing hymns unbidden,Till the world is wroughtTo sympathy with hopes and fears it heeded not.Teach us, sprite or bird,What sweet thoughts are thine:I have never heardPraise of love or wineThat panted forth a flood of rapture so divine.Chorus hymenealOr triumphal chaunt,Matched with thine, would be allBut an empty vauntA thing wherein we feel there is some hidden want.What objects are the fountainsOf thy happy strain?What fields, or waves, or mountains?What shapes of sky or plain?What love of thine own kind? what ignorance of pain?Teach me half the gladnessThat thy brain must know,Such harmonious madnessFrom my lips would flow,The world should listen then, as I am listening now!Love's PhilosophyPercy ShelleyThe Fountains mingle with the RiversAnd the Rivers with the Oceans,The winds of Heaven mix foreverWith a sweet emotion;Nothing in the world is single;All things by a law divineIn one spirit meet and mingle.Why not I with thine?See the mountains kiss high HeavenAnd the waves clasp one another;No sister-flower would be forgivenIf it disdained its brother,And the sunlight clasps the earthAnd the moonbeams kiss the sea:What is all this sweet work worthIf thou kiss not me?Mouse TailLewis CarrollFury said to a mouse,That he met in thehouse, Let usboth go to law:I will prosecuteyou.Come, I'lltake no denial;We must havea trial: Forreally thismorning I'venothing to do.Said the mouseto the cur,Such a trial,dear Sir, Withno jury orjudge,wouldbe wastingour breath.I'll bejudge, I'llbe jury,Said cunningold Fury:I'll trythe wholecause, andcondemnyoutodeath.
================================================
FILE: examples/letter/README.md
================================================
# Sample Letter
Letters convert only to LaTeX. See the XML source for instructions on customizing letterhead. Be aware that the two PNG files need to be available when you process the LaTeX source to make a PDF.
================================================
FILE: examples/letter/sample-letter.xml
================================================
Jane DoeBig State UniversityDepartment of Mathematicsand Computer ScienceUniversity of Puget SoundDear Professor Doe,
It is a pleasure to write as part of John Q. Public's application for a position in your organization. I have known John for a very long time now. I am confident that he will work out very well in your department.
Of course, John has been a valued member of our department. So much so, that I have every confidence he will work splendidly for you. If I can provide more specific details, do not hesitate to contact me at your earliest convenience.
Sincerely,John Z. SmithAssociate Professor
================================================
FILE: examples/memo/README.md
================================================
# Sample Memo
Letters convert only to LaTeX. See the XML source for instructions on customizing masthead. Be aware that a PNG and a PDF graphics file each need to be available when you process the LaTeX source to make a PDF.
================================================
FILE: examples/memo/sample-memo.xml
================================================
The OrganizationThe ProvostProfessor Michael Smith, Department of Institutional OrganizationOrganizational Evaluation
It appears this place could be much better run.
Conclusion
In summary, I hope something will be done.
And for the sake of all of us who toil and labor here daily, I hope it is done soon. Real soon. Promptly. Expeditiously.
Thank-you for your attention.
================================================
FILE: examples/minimal/README.md
================================================
# Minimal Example
`source/main.ptx` is a one-page article that might be your first exercise in setting up PreTeXt.
Look at the top of the file for instructions on processing the file into a variety of output formats
using `xsltproc` or the PreTeXt-CLI.
`project.ptx` is a project configuration file for use with the PreTeXt-CLI.
`codechat_config.yaml` is a CodeChat project configuration file, which will use the PreTeXt-CLI for processing.
================================================
FILE: examples/minimal/assets/.keep
================================================
================================================
FILE: examples/minimal/codechat_config.yaml
================================================
# .. Copyright (C) 2012-2020 Bryan A. Jones.
#
# This file is part of the CodeChat System.
#
# The CodeChat System is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# The CodeChat System is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the CodeChat System. If not, see
# .
#
# ************************************************
# |docname| - Configuration for a CodeChat project
# ************************************************
# This file defines the configuration for a CodeChat project. It contains a working `Sphinx `_ configuration.
#
# ``source_path``: optional; defaults to ``.`` (the current directory). A path to the root of the source tree. Relative paths are rooted in the directory containing this configuration file.
source_path: source
# ``output_path``: required. A path to the root of the HTML output produced by this renderer. Relative paths are rooted in the directory containing this configuration file.
output_path: output/html
# ``args``: required string or sequence of strings. This provides the arguments to invoke the renderer. These strings may optionally contain the following replacement values:
#
# - ``{project_path}``: an absolute path to the directory containing this file.
# - ``{source_path}``: the ``source_path`` above, but as an absolute path.
# - ``{output_path}``: the ``output_path`` above, but as an absolute path.
#
# The line below could also be written ``args: sphinx-build . _build``.
args: pretext build html
# ``html_ext``: optional; defaults to ``.html``. The extension used by this renderer when generating HTML files.
#html_ext: .html
# ``project_type``: optional; defaults to ``general``. Define the project type, which enables special processing based on the type. Valid values are ``general`` (no special processing), ``Doxygen``, and ``PreTeXt``.
project_type: PreTeXt
================================================
FILE: examples/minimal/generated-assets/.keep
================================================
================================================
FILE: examples/minimal/project.ptx
================================================
htmlsource/main.ptxpublication/publication.ptxoutput/htmllatexsource/main.ptxpublication/publication.ptxoutput/latexpdfsource/main.ptxpublication/publication.ptxoutput/pdflatexpdflatexxelatexasysageconvertpdftopspdf-crop-marginspageresnodefile2brl
================================================
FILE: examples/minimal/publication/publication.ptx
================================================
================================================
FILE: examples/minimal/requirements.txt
================================================
pretextbook == 0.7.0
================================================
FILE: examples/minimal/source/main.ptx
================================================
\newcommand{\doubler}[1]{2#1}
A Minimal ArticleRobert A. BeezerUniversity of Puget Sound
This is a very short article, but it still exercises some advanced features of MathBook XML.
This is a short paragraph to introduce the article (but it is not the abstract). It is optional, in case it would be preferable to have the first section be titled an Introduction.
Just Some Text
Now a single paragraph inside a titled section of the article.
A Bit More Interesting
The previous section () was a bit boring.
This paragraph has some inline math, a Diophantine equation, x^2 + \doubler{y^2} = z^2. And some display math about infinite series: \sum_{n=1}^\infty\,\frac{1}{n^2} = \frac{\pi^2}{6}. Look at the XML source to see how macros are employed universally across all possible output formats.
Computation
The following is a chunk of Sage code. Your output format will dictate what you see next. In print, you will see expected output. In HTML you will have an executable, and editable, Sage Cell to work with. In a SageMathCloud worksheet, you will be able to execute and edit the code with all the other features of SageMathCloud. Note that if you include the expected output in your source, then you can test the example to verify that the behavior of Sage has not changed.
A = matrix(4,5, srange(20))
A.rref()
================================================
FILE: examples/pug/.gitignore
================================================
*.html
*.xml
node_modules/
knowl/
================================================
FILE: examples/pug/authors-guide/windows.pug
================================================
doctype xml
chapter(xml:id="windows-install-notes")
title Windows Installation Notes
introduction
p.
This document explains the best known way to install the
MathBook XML toolchain in a Windows environment. It has been
tested on Windows 7, 8, and 10. We assume that none of the
listed tools or equivalents have been previously installed.
That may complicate matters. This is especially true if you use
Cygwin, or if you have already installed Python on your
machine. MathBook XML compatibility with existing Python installations
is addressed elsewhere in this document (future version?).
section(xml:id="setup")
title Setup
introduction
p.
In this section, we do some initial setup,
establish notation, and issue warnings. Some of the steps in
this process are dangerous. Typos could lead to an unstable
system, or possibly even to unrecoverable system errors.
Double-check everything.
subsection(xml:id="notation")
title Notation
p.
Strings enclosed in angle brackets are variables whose values you should substitute in
typed expressions. username, for
example, should be replaced with your Windows username
(mine is drosoff, e.g.). Throughout this
installation process it is very important to pay attention
to the direction of slashes / and backslashes
\.
subsection(xml:id="initial-windows-setup")
title Initial Windows setup
p.
It is easier to see what is happening if your Windows file
browser is not set up to hide file extensions from you.
Disable the hide file extensions behavior before
proceeding. In Windows 7/8, this can be done through the
Control Panel. In Windows 10, there is a checkbox somewhere
in the ribbon for it.
ol(xml:id="initial-windows-setup-steps")
li: p On Windows 7 or 8:
ol
li: p.
Open the Start Menu and type Control Panel. Select the Control
Panel entry from the popup list.
li: p.
Type Folder Options into the search
box in the Control Panel window. Select
Folder Options when it
appears.
li: p.
Select the View tab.
li: p.
Uncheck the box for Hide extensions for known file types.
li: p.
Click OK until there are no more OKs to click.
li: p.
On Windows 10: Coming soon.
subsection(xml:id="a-word-on-path-names")
title A word on path names
p.
An appallingly large fraction of the difficulties of using
GNU/Linux-based utilities with Windows come from the
differences in formatting path names. Windows path names
begin with a drive letter (usually C) and a colon.
Like all path names, they describe a path in a rooted tree.
The root directory (folder) in Windows is called \,
backslash. Note the direction carefully. Children of the
root node are either subdirectories or files in the root
directory (leaves). The path to my downloads folder is:
pre C:\Users\drosoff\Downloads\
p.
The trailing backslash is often unnecessary, but it is an
easy way to see immediately if a path name refers to a file
or to a directory. Windows path names are not case-sensitive.
p.
Linux/Mac OS X path names are quite similar, but lack drive
letters, start with an explicit reference to the root, use
forward slashes, and are case-sensitive. A path to a
typical Linux user's download folder might be
pre /home/typical.username/Downloads
p.
Again, Linux/Mac OS X pathnames are case-sensitive. The Git
Bash shell for Windows is an emulation of a Linux
environment, and the utilities within it expect path names
that follow Linux conventions. So we conform to this
expectation as follows.
ol
li: p Remove the colon, but keep the drive letter.
li: p All backslashes \ become slashes /.
li: p Add an initial slash preceding the drive letter.
p The path name to my Windows download folder becomes
pre /c/users/drosoff/Downloads
p.
Even though Git Bash is pretending to be a Linux shell,
path names are still the underlying Windows path names, and
therefore are not case sensitive. You can verify this using
tab-completion.
p.
Path names that begin with the drive letter (Windows) or
the root / (Linux/Mac OS X) are called
absolute path names. Their referents do not
depend on the location from which the path name is invoked.
Relative path names, on the other hand, begin
in the so-called current working directory. A
relative pathname might look something like this:
pre ../../examples/sample-article/sample-article.xml
p.
The symbol .. is a shortcut for the parent of the
current directory. Thus, the relative path name above means
blockquote
from where we are, ascend two levels, then descend into the
examples and sample-article subdirectories,
and find the file sample-article.xml.
p.
Path names that contain spaces are evil, and
should be avoided in many cases. Unfortunately, all Windows
default program installation locations contain at least one
space (directory name Program Files). This does not
appear to cause problems, except when installing ImageMagick
(). To be
extra careful, you could always choose an installation location
that is free of space characters.
subsection(xml:id="do-i-have-64-bit-windows")
title Do I have 64-bit Windows?
p Find out on Windows 7:
ol
li: p.
Open the start menu and type Computer.
Right-click the Computer item in the popup
menu.
li: p Select Properties from the drop-down menu.
li: p.
Read in the right-hand side of the pane to find the System heading.
li: p.
From the System type entry, read whether you have a 32- or a 64-bit OS.
conclusion
p.
Now you are ready to begin installing the various pieces
of the MathBook XML puzzle. The first one,
xsltproc (),
is the most annoying. You might want
to go get a snack or another cup of coffee.
section(xml:id="installing-xsltproc")
title Installing xsltproc
subsection(xml:id="download-and-install-executables-and-linked-libraries")
p.
This is the most annoying part of the installation. Obtain four
zip archives from
Igor Zlatkovic's FTP site that hosts the most recent
Libxml binaries for Windows. At the time of this writing, the
64-bit binaries were considered experimental. I have had no
trouble using the 32-bit binaries on my 64-bit Windows 7
system, so I suggest that all users download the most
recent 32-bit version of the following libraries:
ol(xml:id="list-zip-files-xsltproc")
li: p.
iconv (filename something like
iconv-1.9.2.win32.zip)
li: p.
libxml2 (filename something like
libxml2-2.7.8.win32.zip)
li: p.
libxslt (filename something like
libxslt-1.1.26.win32.zip)
li: p.
zlib (filename something like
zlib-1.2.5.win32.zip)
p.
We only need a handful of files from these archives. So the
simplest thing is to leave them in your Downloads folder and
grab what we need. Create a new folder C:\xsltproc (it
can be anywhere, as long as it's a new location). We'll call
this location xsltproc in case you
named your folder something different.
p.
Extract the following files from the four zip archives you
downloaded above into xsltproc:
ol(xml:id="list-extracted-files-from-zips-xsltproc")
li: p From iconv-*.win32.zip:
ol
li: p: pre iconv-*.win32\bin\iconv.dll
li: p From libxml2-*.win32.zip:
ol
li: p: pre libxml2-*.win32\bin\libxml2.dll
li: p: pre libxml2-*.win32\bin\xmllint.exe
li: p From libxslt-*.win32.zip:
ol
li: p: pre libxslt-*.win32\bin\libexslt.dll
li: p: pre libxslt-*.win32\bin\libxslt.dll
li: p: pre libxslt-*.win32\bin\xsltproc.exe
li: p From zlib-*.win32.zip:
ol
li: p: pre zlib-*.win32\bin\zlib1.dll
subsection(xml:id="change-path-environment-variable-xsltproc")
title Change PATH envronment variable
p.u
Note: if you prefer not to meddle with this, it can be
avoided. See .
p.
Now, we need to make sure your system can find these files when
we need them.
ol(xml:id="steps-change-path-environment-variable-xsltproc")
li: p.
Open the Start menu and start typing Edit
the system environment variables. Select this
option when it becomes visible.
li: p.
Click the Environment Variables button near the bottom
of the dialog.
li
p.
In the bottom part of the dialog labeled System environment variables, look for a
variable named PATH. You may need to
scroll.
ol
li: p.
If you don't find one, create it using the New...
button. Make sure to use all capital letters.
(This really shouldn't happen. Make sure you are
editing the system environment variables,
not the user environment variables.)
li: p.
If you do find the PATH variable, select it
and click the Edit... button.
li: p.
Regardless of which of steps 1 and 2 you followed, now
you should see a dialog with two text fields. Your
variable name should be PATH.
li: p.
If you created this variable, populate the second field
with the full path name of xsltproc, the location where you put the seven files from
Igor's zip archives. For me this looks like
C:\xsltproc.
li: p.
If you are editing the PATH variable, place the
cursor in the existing value and press the End key, so
that the cursor moves to the back of the line. The
PATH string is a ;-delimited list of full
path names, so append the string xsltproc; (note the semicolon) to the
existing value. If you named
xsltproc as we suggested above, then
the last part of your PATH variable is now
C:\xsltproc;.
li: p.
Click OK to save changes.
section(xml:id="installing-git")
title Installing git
p.
In this section we install the git version control system
and some tools to interact with it, including a fairly full-
featured emulation of the bash command line shell. I
strongly recommend you use the Git Bash shell or another
bash emulation, so that you can use Linux commands
referenced elsewhere.
ol(xml:id="steps-install-git")
li: p.
Visit the official gitdownload page (download starts
automatically) and obtain the latest binary for your system.
li: p.
Find the installer in your Download location and run it.
li: p.
Choose whatever location you like for the git
installation folder. I recommend you use the default.
li: p.
At the Adjusting your PATH environment dialog, select
either of the first two items. I recommend the second, Add
git executable to Windows PATH. If you are apprehensive
about adding git to the Windows PATH, select the first
option. I do not recommend the third option.
li: p.
Accept the default options for all the remaining prompts.
subsection(xml:id="changing-path-with-bashrc")
title Changing the path with .bashrc
p.
In ,
we promised that you could avoid messing with the
Windows environment variables. If you install something else later
that wants to use xsltproc, then this might not be the best
idea. But if you are only going to use it from within Git Bash, then
this will work fine.
p.
From the Git Bash command prompt, enter this line of text and
hit Enter. Don't make any typos. You should substitute your
value of xsltproc where indicated, but
make sure to conform to the conventions at the end of
regarding Windows path names in Git Bash. (I warned you this was
going to be annoying.)
pre echo "export PATH=/c/xsltproc:$PATH" ~/.bashrc
p.
You may get a message from Git Bash the next time you run it
about .bash_profile, which you may safely ignore.
section(xml:id="installing-anaconda")
title Installing Anaconda
p.
Anaconda is a well-regulated development environment for Python
under Windows, and I recommend it for users who do not already have
Python installed. The essential pretext script has recently been
updated to support both Python 2 and Python 3. Therefore I
make no recommendation about which Python version to choose, except
to say that as of support for Python 3 should be regarded
as experimental.
p.
If you already have a working Python installation, skip to
.
p.
You have some choice with your Anaconda installation. It actually
supports the installation of several independent Pythons side-by-
side (since both 2.7 and 3.x are in active use, this is more
reasonable than it seems). If you don't need Python for anything
else or are simply a minimalist, Miniconda is also an option.
Miniconda installs no packages, but these can be installed via the
conda utility at the command line later.
p.
Download either Miniconda, Python 2.7, or Python 3.5 from the
Anaconda download
page. Run the installer and accept all the default suggestions.
conclusion
p.
Congratulations, you have successfully installed Python.
p.
If you don't care about images, you can stop here. Much of the
functionality is already present. However, to use the
pretext script to create SVG images from sources like PDF/PNG
images, Sage, Asymptote, or TikZ, you need to install
ImageMagick and Ghostscript using the directions in
and
.
section(xml:id="installing-imagemagick")
title Installing ImageMagick
p.
Visit the
ImageMagick
downloads page and grab a binary. If
you have a 64-bit Windows
installation, use the recommended version. If you have a
32-bit installation, find the version whose filename is obtained
from that of the recommended version by substituting x86 for
x64. For example, if the recommended version's filename is:
pre ImageMagick-7.0.1-6-Q16-x64-dll.exe
p then a good choice for a 32-bit Windows would be
pre ImageMagick-7.0.1-6-Q16-x86-dll.exe
ol(xml:id="installing-imagemagick-steps")
li: p Run the installer from your download location.
li: p Accept the license agreement.
li
p.
Choose a default installation location that has no spaces in its
folder name. The default choice Program Files causes problems
because of path name issues. I chose
pre c:\ImageMagick-7.0.1-Q16\
p.
It matters because the ImageMagick utility convert is used by
the pretext script to convert your images into different formats.
The pretext script will have a lot of trouble with path names that contain
spaces.
li
p.
When confronted with Select additional tasks, make
sure that the boxes for Add application directory to your
system path and Install legacy utilities are
checked.
li: p If you like, carry out the procedure to verify your installation.
conclusion
p.
Congratulations, you have installed ImageMagick.
section(xml:id="installing-ghostscript")
title Installing Ghostscript
p.
Visit the
Ghostscript download area and download the most current
binary for either
64-bit or 32-bit Windows. Run the installer and accept all the
default options.
conclusion
p.
Congratulations, you have successfully installed Ghostscript.
section(xml:id="whats-missing")
title What's missing
p.
Development of a Windows-compatible pretext script
() is continuing.
If you need help with pretext now, contact Dave Rosoff.
conclusion
p.
If you find any problems or bugs, please let us know at the
MathBook XML Support group in Google Groups, or email
drosoff AT collegeofidaho DOT edu.
================================================
FILE: examples/pug/build.sh
================================================
#!/usr/bin/env bash
# for pug, install node.js and then run npm install (will read packages.json)
./node_modules/.bin/pug --pretty --extension xml pug.pug
xsltproc ../../xsl/pretext-html.xsl pug.xml
================================================
FILE: examples/pug/package.json
================================================
{
"name": "mathbookxml-pug-demo",
"version": "1.0.0",
"description": "using the pug template engine to write the clunky xml",
"dependencies": {
"pug": "^1.11.0"
},
"devDependencies": {},
"author": "Harald Schilly",
"license": "GPL-3.0"
}
================================================
FILE: examples/pug/pug-include.pug
================================================
- var name = "content of variable name"
introduction
p.
Besides these basics, Pug also offers #[q true] includes.
This means, just write the text and don't think about additional overheads,
like that it also has to be an XML document.
p.
This makes it easy to divide your document into smaller parts,
while PreTeXt will see the #[q full] XML file later on.
subsection
title Variables and Code
p.
You can use variables like that: !{name}.
They are pre-processed by Pug and inserted via string interpolation.
p
| You could even go ahead and include some code in your template,
| or use #[q mixins] as macros.
| E.g. below here, this variable is inserted several times in a for loop:
ul
- for (var x = 1; x <= 5; x++)
li This is iteration #{x}, inserting variable name: !{name}
================================================
FILE: examples/pug/pug.pug
================================================
doctype xml
mathbook
// Pug code can contain comments, they will show up as XML comments.
docinfo
macros
| \newcommand{\doubler}[1]{2#1}
article(xml:id="pug")
title Pug meets PreTeXt
frontmatter
titlepage
author
personname Harald Schilly
date
today/
abstract: p.
This is a very short demo, how writing PreTeXt
can be simplified by using Pug #[xref(ref="biblio-pug")/].
introduction
p.
Wouldn't it be nice, if you do not have to deal with verbose XML tags?
Write paragraphs that do stand more out and aren't cluttered by too much overhead?
What if, you can start writing in version control (Git) friendly multiple line documents?
You are finally able to limit yourself to 80 character line lengths and
make the source of your documents look more like a tidy
Python #[xref(ref="biblio-python")/] program.
p.
Additionally, all this works well together with Pug's include statement,
mixin #[q macros] and much more.
p.
... and yes, inline XML tags do just work, too!
section(xml:id="section-textual")
title Some Demo Text
p.
This is just copied from the minimal demo.
The interesting thing to see here is the source of this in the #[c pug.pug] file.
p.
Now a single paragraph inside a titled section of the article.
Which has some text on a second line.
... and a bit of #[em emphasizing].
p.
The code to accomplish this looks like this:
pre.
section(xml:id="section-textual")
title Some Demo Text
p.
This is just copied from the minimal demo.
The interesting thing to see here is the source of this in the \#[c pug.pug] file.
p.
Now a single paragraph inside a titled section of the article.
Which has some text on a second line.
... and a bit of \#[em emphasizing].
section(xml:id="section-interesting")
title A Bit More Interesting
p The previous section (#[xref(ref="section-textual" text="type-global")/]) was a bit boring.
p
| This paragraph has some inline math, a Diophantine equation,
m x^2 + \doubler{y^2} = z^2
| , and some display math about infinite series: #[me \sum_{n=1}^\infty\,\frac{1}{n^2} = \frac{\pi^2}{6}].
| Look at the Pug source to see how #[latex/] macros are employed universally across all possible output formats.
p
| We could even write a formula
me \int_0^\infty 3 x^2 + 1 \mathrm{d}x
| inside a p-tag text on its separate line prefixed by #[c me] only!
p This looks like that:
pre.
p
| We could even write a formula
me \int_0^\infty 3 x^2 + 1 \mathrm{d}x
| inside a p-tag text on its separate line prefixed by \#[c me] only!
section(xml:id="section-computation")
title Computation
p.
The following is a chunk of Sage code.
Your output format will dictate what you see next.
In print, you will see expected output.
In HTML you will have an executable, and editable, Sage Cell to work with.
In a SageMathCloud worksheet, you will be able to execute and edit the code with all the other features of SageMathCloud.
Note that if you include the expected output in your source,
then you can test the example to verify that the behavior of Sage has not changed.
sage
input.
A = matrix(4,5, srange(20))
A.rref()
output.
[ 1 0 -1 -2 -3]
[ 0 1 2 3 4]
[ 0 0 0 0 0]
[ 0 0 0 0 0]
section(xml:id="section-pug")
title Pug
include ./pug-include.pug
section(xml:id="section-gotchas")
title Some gotchas
p.
Here are some pitfalls that it's helpful to be aware of if you want to use Pug more seriously:
paragraphs
title The case keyword
p
| For Pug #[c case] is a keyword, used in program control.
| For example like this:
pre.
- var friends = 3
case friends
when 0
- break
when 1
p you have very few friends
default
p you have #{friends} friends
p This produces:
- var friends = 3
case friends
when 0
- break
when 1
p you have very few friends
default
p you have #{friends} friends
p
| Unfortunately, #[c case] is also a tag used by PreTeXt,
| for a case of a proof, so the following Pug code will throw an error
pre.
proof
case: p
| First case.
case: p
| Second case.
p
| To work around this issue you could use a different keyword,
| such as #[c proofcase] and use a simple script
| to change all instances of #[c proofcase] to #[c case] in the XML Pug produces.
paragraphs
title Braces in inline tags
p
| The Pug way of typing inline math is to use \#[m f\in R[x],g \in R[y]].
| But Pug will interpret the first instance of ] in this snippet as the end of the tag, producing #[m f\in R[x], g\in R[y]].
| There a few ways to avoid this
ol
li
p Define #[latex/] macros for these characters, just like #[c \lt] and #[c \gt]:
pre.
\newcommand{\lb}{[}
\newcommand{\rb}{]}
p And use these whenever needed (as a bonus you can use #[c \left] and #[c \right] in these macros too).
li
p
| Only use non-inline tags for math containing ].
| For example
pre.
p
| It would be annoying but doable to write: let
m f \in K[x]
| and
m g \in K[y]
| so that
m fg \in K[x,y]
| .
li
| Use only XML style inline tags for math <m> f\in R[x] </m> (or at least for math containing the ] character.
backmatter
references
title References
biblio(type="raw" xml:id="biblio-pug").
The magic behind all this is provided by the #[url(href="https://pugjs.org/") Pug Template Engine].
biblio(type="raw" xml:id="biblio-python").
Python Programming Language.
================================================
FILE: examples/sample-article/bibliography.xml
================================================
Tom Judson, Abstract Algebra: Theory and Applications.
Another online, open-source offering.
Tom Judson, Abstract Algebra: Theory and Applications.
Another online, open-source offering.
David C. Lay, Subspaces and Echelon Forms. The College Mathematics Journal, January 1993, 241, 5762.David C. Lay, Subspaces and Echelon Forms. The College Mathematics Journal, January 1993, 241, 5762.
================================================
FILE: examples/sample-article/customizations-one.xml
================================================
alligatorsfeeling, since it is more fun
Red
Blue
Green
================================================
FILE: examples/sample-article/customizations-two.xml
================================================
miceshouting, because we are often ANGRY
Try to evaluate \displaystyle-{\left(-{100}\right)}^{{-{1}{/}{2}}} without using a calculator. Enter your answer as an integer or reduced fraction (no decimals). Enter DNE if the number is not real.
You wish to determine if there is a linear correlation between the two variables at a significance level of \displaystyle\alpha={0.001}.
You have the following bivariate data set.
What is the correlation coefficient for this data set?
r =
(report answer accurate to at least 3 decimal places)
To find the p-value for a correlation coefficient, you need to convert to a t-score:
\displaystyle{t}={r}\cdot\sqrt{{\frac{{{n}-{2}}}{{{1}-{r}^{{2}}}}}}
This t-score is from a t-distribution with \displaystyle{n}-{2} degrees of freedom.
What is the p-value for this correlation coefficient?
p-value =
(report answer accurate to at least 4 decimal places)
Your final conclusion is that...
There is sufficient sample evidence to support the claim that there is a statistically significant correlation between the two variables.
There is insufficient sample evidence to support the claim the there is a correlation between the two variables.
-0.928
0
A: There is sufficient sample evidence to support the claim that there is a statistically significant correlation between the two variables.
The right circular conical tank shown has height 4.00 m and top radius \displaystyle{1.40} m. It is filled with water to a height of \displaystyle{3.50} m. The cross section is a right triangle with height 4.00 m and top side \displaystyle{1.40} m. Inside is another right triangle with height \displaystyle{3.50} m.
What is the volume of water? m
How much water must be added to fill the tank? \displaystyle\text{m}^{{3}}
We can either do this question by inspection (i.e. spot the answer) or in a more formal manner by using the substitution u = ({x}-{3}). Then, since \frac{d}{d{x}}u=1 we have \int {{\left(x-3\right)}^6} d{x} = \int u^{6} du = \frac{u^{7}}{7}+c = {\frac{{\left(x-3\right)}^7}{7}}+c.
In triangle OAB the point P divides AB internally in the ratio m:n.
If \overrightarrow{OA} = \underline{a} and \overrightarrow{OB}
= \underline{b}, then find an expression for \overrightarrow{OP} in terms of \underline{a} and \underline{b}.
You might find it helpful to draw a diagram showing this triangle.
\overrightarrow{OP} =
The figure below shows the triangle with the vector \overrightarrow{OP} marked with a dotted line within.
From
the diagram we can see \overrightarrow{OP} = \overrightarrow{OA} +
\overrightarrow{AP}. We are told \overrightarrow{OA} =
\underline{a} and so we need to find \overrightarrow{AP}. We know
that P divides \overrightarrow{AB} in the ratio m:n so
\overrightarrow{AP} = \frac{m}{m+n}\left(\overrightarrow{AB}\right),
as \overrightarrow{AB} = \underline{b} - \underline{a} we find
\overrightarrow{AP} = \frac{m}{m+n}\left(\underline{b} -
\underline{a}\right) and therefore, \overrightarrow{OP} =
\underline{a} + \frac{m}{m+n}\left(\underline{b} -
\underline{a}\right).
Note: You can arrive at an equivalent expression by starting from \overrightarrow{OP} = \overrightarrow{OB} +
\overrightarrow{BP}.
In triangle \(OAB\) the point \(P\) divides \(AB\) internally in the ratio \(m:n\).
If \(\overrightarrow{OA} = \underline{a}\) and \(\overrightarrow{OB}
= \underline{b}\), then find an expression for \(\overrightarrow{OP}\) in terms of \(\underline{a}\) and \(\underline{b}\).
You might find it helpful to draw a diagram showing this triangle.
]]>The figure below shows the triangle with the vector \(\overrightarrow{OP}\) marked with a dotted line within.
From
the diagram we can see \(\overrightarrow{OP} = \overrightarrow{OA} +
\overrightarrow{AP}\). We are told \(\overrightarrow{OA} =
\underline{a}\) and so we need to find \(\overrightarrow{AP}\). We know
that \(P\) divides \(\overrightarrow{AB}\) in the ratio \(m:n\) so
\[\overrightarrow{AP} = \frac{m}{m+n}\left(\overrightarrow{AB}\right),\]
as \[\overrightarrow{AB} = \underline{b} - \underline{a}\] we find
\[\overrightarrow{AP} = \frac{m}{m+n}\left(\underline{b} -
\underline{a}\right)\] and therefore, \[\overrightarrow{OP} =
\underline{a} + \frac{m}{m+n}\left(\underline{b} -
\underline{a}\right).\]
Note: You can arrive at an equivalent expression by starting from \(\overrightarrow{OP} = \overrightarrow{OB} +
\overrightarrow{BP}\).
]]>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgaWQ9InN2ZzgiCiAgIHZlcnNpb249IjEuMSIKICAgdmlld0JveD0iMCAwIDEyMC40NjA1NiA4MC44MzEyMjMiCiAgIGhlaWdodD0iODAuODMxMjIzbW0iCiAgIHdpZHRoPSIxMjAuNDYwNTZtbSI+CiAgPGRlZnMKICAgICBpZD0iZGVmczIiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzEuODI1NjcsLTU1LjI5NDQ3NCkiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGgxMCIKICAgICAgIGQ9Ik0gMzguOTMxNTQ4LDEyNS4wMjA4MyBDIDExMC43NDcwMiw2MS41MjA4MzEgMTEwLjc0NzAyLDYxLjUyMDgzMSAxMTAuNzQ3MDIsNjEuNTIwODMxIHYgMCAwIGMgMzYuMjg1NzIsNjMuNDk5OTk5IDM2LjI4NTcyLDYzLjQ5OTk5OSAzNi4yODU3Miw2My40OTk5OTkgdiAwIDAgeiIKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuMjY0NTgzMzJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTI3OTE4MTYiCiAgICAgICBkPSJtIDc2LjYyNDk2Nyw5MS41ODE1NTMgLTEuNTg4MjAxLC0wLjY4ODgwNSAwLjAyMDMsLTAuMDYyMDIgMi40NzkyOTgsLTAuNzI1OTM3IGMgMC43NzY1MDksLTAuMzgwMjM4IDEuNTUxMDMxLC0wLjc2MDQ5MiAyLjMyNzU0LC0xLjE0MDczMSAtMC41NTY1ODEsMC42OTY5MjMgLTEuMTEzMTYyLDEuMzkzODQ4IC0xLjY2OTc0MywyLjA5MDc3MSBsIC0xLjM0NjMzNiwyLjM2NTMzNSAtMC4wNTM2NiwwLjAxMjUyIC0wLjE2OTE4OSwtMS44NTEwOSIKICAgICAgIGlkPSJwYXRoMTAxMSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjUyNzkxODE2IgogICAgICAgZD0ibSA5Ny40NTYzMzIsMTI1LjI3MTE1IC0wLjkzNDg0NSwtMS40NTcwMiAwLjA1MTQxLC0wLjA0MDIgMi40NjMxNjIsMC43Nzg5MyBjIDAuODU2NjUzLDAuMTE3MDMgMS43MTE2NjEsMC4yMzI5MyAyLjU2ODMxMSwwLjM0OTk2IC0wLjg1MDUzLDAuMjY4NDggLTEuNzAxMDU1LDAuNTM2OTggLTIuNTUxNTgyLDAuODA1NDYgbCAtMi40MzYwNjUsMS4yMTM2NyAtMC4wNTE1MiwtMC4wMTk1IDAuODkxMTE4LC0xLjYzMTI4IgogICAgICAgaWQ9InBhdGgxMDExLTMiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGgzMyIKICAgICAgIGQ9Ik0gMzguOTMxNTQ4LDEyNS4wMjA4MyBDIDEzNC4wMzU2NywxMDIuNTYxNDIgMTM0LjAzNTY3LDEwMi41NjE0MiAxMzQuMDM1NjcsMTAyLjU2MTQyIgogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4yNjQ5OTk5OTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6Mi4xMTk5OTk5LCAxLjA1OTk5OTk1O3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjUyNzkxODE2IgogICAgICAgZD0ibSA5NS4wODk2NTksMTExLjk0OTI4IC0xLjE5NzY0NCwtMS4yNSAwLjA0MjcyLC0wLjA0OTMgMi41NjY5OTQsMC4yOTA2IGMgMC44NjMxNjMsLTAuMDQ5OSAxLjcyNDUwNCwtMC4xMDA2MyAyLjU4NzY3LC0wLjE1MDU2IC0wLjc4MzAwMywwLjQyNzA4IC0xLjU2NjAwNSwwLjg1NDE1IC0yLjM0OTAwNSwxLjI4MTIzIGwgLTIuMTU3MTI1LDEuNjU5NTkgLTAuMDU0MywtMC4wMSAwLjU2MDY5NywtMS43NzIyMyIKICAgICAgIGlkPSJwYXRoMTAxMS02IiAvPgogICAgPHRleHQKICAgICAgIGlkPSJ0ZXh0ODUzIgogICAgICAgeT0iMTI4LjA4NTY2IgogICAgICAgeD0iMzEuNTM3ODA0IgogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjguNDY2NjY2MjJweDtsaW5lLWhlaWdodDoxLjI1O2ZvbnQtZmFtaWx5OidUZVggR3lyZSBUZXJtZXMgTWF0aCc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonVGVYIEd5cmUgVGVybWVzIE1hdGgsIE5vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtYWxpZ246c3RhcnQ7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4yNjQ1ODMzMiIKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiPjx0c3BhbgogICAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6OC40NjY2NjYyMnB4O2ZvbnQtZmFtaWx5OidUZVggR3lyZSBUZXJtZXMgTWF0aCc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonVGVYIEd5cmUgVGVybWVzIE1hdGgsIE5vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtYWxpZ246c3RhcnQ7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O3N0cm9rZS13aWR0aDowLjI2NDU4MzMyIgogICAgICAgICB5PSIxMjguMDg1NjYiCiAgICAgICAgIHg9IjMxLjUzNzgwNCIKICAgICAgICAgaWQ9InRzcGFuODUxIj5PPC90c3Bhbj48L3RleHQ+CiAgICA8dGV4dAogICAgICAgaWQ9InRleHQ4NTciCiAgICAgICB5PSI2MS4wMDEwMDciCiAgICAgICB4PSIxMDguMzc3OCIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZToxMC41ODMzMzMwMnB4O2xpbmUtaGVpZ2h0OjEuMjU7Zm9udC1mYW1pbHk6J1RlWCBHeXJlIFRlcm1lcyBNYXRoJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidUZVggR3lyZSBUZXJtZXMgTWF0aCwgTm9ybWFsJztmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7dGV4dC1hbGlnbjpzdGFydDtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjI2NDU4MzMyIgogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRzcGFuCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTo4LjQ2NjY2NjIycHg7Zm9udC1mYW1pbHk6J1RlWCBHeXJlIFRlcm1lcyBNYXRoJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidUZVggR3lyZSBUZXJtZXMgTWF0aCwgTm9ybWFsJztmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7dGV4dC1hbGlnbjpzdGFydDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7c3Ryb2tlLXdpZHRoOjAuMjY0NTgzMzIiCiAgICAgICAgIHk9IjYxLjAwMTAwNyIKICAgICAgICAgeD0iMTA4LjM3NzgiCiAgICAgICAgIGlkPSJ0c3Bhbjg1NSI+QTwvdHNwYW4+PC90ZXh0PgogICAgPHRleHQKICAgICAgIGlkPSJ0ZXh0ODYxIgogICAgICAgeT0iMTI3LjgxODM5IgogICAgICAgeD0iMTQ3LjI2NTUiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6OC40NjY2NjYyMnB4O2xpbmUtaGVpZ2h0OjEuMjU7Zm9udC1mYW1pbHk6J1RlWCBHeXJlIFRlcm1lcyBNYXRoJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidUZVggR3lyZSBUZXJtZXMgTWF0aCwgTm9ybWFsJztmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7dGV4dC1hbGlnbjpzdGFydDtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjI2NDU4MzMyIgogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRzcGFuCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTo4LjQ2NjY2NjIycHg7Zm9udC1mYW1pbHk6J1RlWCBHeXJlIFRlcm1lcyBNYXRoJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidUZVggR3lyZSBUZXJtZXMgTWF0aCwgTm9ybWFsJztmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7dGV4dC1hbGlnbjpzdGFydDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7c3Ryb2tlLXdpZHRoOjAuMjY0NTgzMzIiCiAgICAgICAgIHk9IjEyNy44MTgzOSIKICAgICAgICAgeD0iMTQ3LjI2NTUiCiAgICAgICAgIGlkPSJ0c3Bhbjg1OSI+QjwvdHNwYW4+PC90ZXh0PgogICAgPHRleHQKICAgICAgIGlkPSJ0ZXh0ODY1IgogICAgICAgeT0iMTAyLjgyODY5IgogICAgICAgeD0iMTM1LjM3MjAxIgogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjguNDY2NjY2MjJweDtsaW5lLWhlaWdodDoxLjI1O2ZvbnQtZmFtaWx5OidUZVggR3lyZSBUZXJtZXMgTWF0aCc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonVGVYIEd5cmUgVGVybWVzIE1hdGgsIE5vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtYWxpZ246c3RhcnQ7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4yNjQ1ODMzMiIKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiPjx0c3BhbgogICAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6OC40NjY2NjYyMnB4O2ZvbnQtZmFtaWx5OidUZVggR3lyZSBUZXJtZXMgTWF0aCc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonVGVYIEd5cmUgVGVybWVzIE1hdGgsIE5vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtYWxpZ246c3RhcnQ7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O3N0cm9rZS13aWR0aDowLjI2NDU4MzMyIgogICAgICAgICB5PSIxMDIuODI4NjkiCiAgICAgICAgIHg9IjEzNS4zNzIwMSIKICAgICAgICAgaWQ9InRzcGFuODYzIj5QPC90c3Bhbj48L3RleHQ+CiAgICA8ZwogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJnMjYxOSIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDMuMjYyNTA4OCwwLDAsMi43OTU4MDQ4LC01MzkuNzc2MywxMy43MDIxMjcpIj4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4yNjQ1ODMzMywwLDAsMC4yNjQ1ODMzMywxODcuMzE3MjksMjYuMzUzNDAxKSIKICAgICAgICAgaWQ9InVzZTI2MTciPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaWQ9InBhdGg4NzciCiAgICAgICAgICAgZD0iTSA0LjQ2ODc1LC00LjUzMTI1IEMgNC4yNjU2MjUsLTQuOTg0Mzc1IDMuOTA2MjUsLTUuMjk2ODc1IDMuMzc1LC01LjI5Njg3NSBjIC0xLjQwNjI1LDAgLTIuODkwNjI1LDEuNzUgLTIuODkwNjI1LDMuNTE1NjI1IDAsMS4xMjUgMC42NTYyNSwxLjkwNjI1IDEuNTkzNzUsMS45MDYyNSAwLjIzNDM3NSwwIDAuODQzNzUsLTAuMDQ2ODc1IDEuNTYyNSwtMC44OTA2MjUgMC4wOTM3NSwwLjUgMC41MTU2MjUsMC44OTA2MjUgMS4wOTM3NSwwLjg5MDYyNSAwLjQwNjI1LDAgMC42ODc1LC0wLjI2NTYyNSAwLjg3NSwtMC42NTYyNSAwLjIwMzEyNSwtMC40MjE4NzUgMC4zNTkzNzUsLTEuMTU2MjUgMC4zNTkzNzUsLTEuMTg3NSAwLC0wLjEyNSAtMC4wOTM3NSwtMC4xMjUgLTAuMTQwNjI1LC0wLjEyNSAtMC4xMDkzNzUsMCAtMC4xMjUsMC4wNjI1IC0wLjE3MTg3NSwwLjIxODc1IC0wLjIwMzEyNSwwLjc4MTI1IC0wLjQwNjI1LDEuNSAtMC45MDYyNSwxLjUgLTAuMzI4MTI1LDAgLTAuMzU5Mzc1LC0wLjMxMjUgLTAuMzU5Mzc1LC0wLjU2MjUgMCwtMC4yNjU2MjUgMC4wMzEyNSwtMC4zNTkzNzUgMC4xNTYyNSwtMC44OTA2MjUgMC4xNDA2MjUsLTAuNSAwLjE1NjI1LC0wLjYyNSAwLjI2NTYyNSwtMS4wNzgxMjUgMC4yMDMxMjUsLTAuNzY1NjI1IDAuMjUsLTAuOTg0Mzc1IDAuNDM3NSwtMS42NzE4NzUgMC4wNzgxMjUsLTAuMzQzNzUgMC4wNzgxMjUsLTAuMzU5Mzc1IDAuMDc4MTI1LC0wLjQwNjI1IDAsLTAuMjAzMTI1IC0wLjE0MDYyNSwtMC4zMjgxMjUgLTAuMzQzNzUsLTAuMzI4MTI1IC0wLjI5Njg3NSwwIC0wLjQ2ODc1LDAuMjY1NjI1IC0wLjUxNTYyNSwwLjUzMTI1IHogbSAtMC43NjU2MjUsMy4xMDkzNzUgYyAtMC4wNjI1LDAuMjAzMTI1IC0wLjA2MjUsMC4yMzQzNzUgLTAuMjUsMC40Mzc1IEMgMi45MjE4NzUsLTAuMzI4MTI1IDIuNDM3NSwtMC4xMjUgMi4wOTM3NSwtMC4xMjUgMS41LC0wLjEyNSAxLjMyODEyNSwtMC43OTY4NzUgMS4zMjgxMjUsLTEuMjY1NjI1IGMgMCwtMC41OTM3NSAwLjM5MDYyNSwtMi4wNzgxMjUgMC42NTYyNSwtMi42MjUgMC4zNzUsLTAuNzAzMTI1IDAuOTIxODc1LC0xLjE1NjI1IDEuNDA2MjUsLTEuMTU2MjUgMC43NjU2MjUsMCAwLjkzNzUsMC45ODQzNzUgMC45Mzc1LDEuMDYyNSAwLDAuMDc4MTI1IC0wLjAxNTYyNSwwLjE0MDYyNSAtMC4wMzEyNSwwLjIwMzEyNSB6IG0gMCwwIgogICAgICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZSIgLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODkzNDgzMDQiCiAgICAgICBkPSJtIDcyLjE4ODkwNyw4OC43MTE5OTcgaCAyLjk4NTMzIHYgLTAuNTU1NTM2IGggLTIuOTg1MzMgeiBtIDAsMCIKICAgICAgIGlkPSJwYXRoMjYyMSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjIwMjI4MjQzIgogICAgICAgZD0ibSA5OC41NDc1ODYsMTM1LjQ1MDYgaCAzLjY0NTczNCB2IDAuNjc1MSBoIC0zLjY0NTczNCB6IG0gMCwwIgogICAgICAgaWQ9InBhdGgxNDg1IiAvPgogICAgPGcKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpZD0iZzE0ODMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgzLjc3OTQ0MzcsMCwwLDIuNjgzMDM3MywtMjc2LjA2MjI2LC0zNS4zNjcyOTIpIj4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4yNjQ1ODMzMywwLDAsMC4yNjQ1ODMzMyw5OSw2My40MDcyKSIKICAgICAgICAgaWQ9InVzZTE0ODEiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaWQ9InBhdGg5MDMiCiAgICAgICAgICAgZD0ibSAyLjg3NSwtOC4yMDMxMjUgYyAwLDAgMCwtMC4xMjUgLTAuMTU2MjUsLTAuMTI1IC0wLjI4MTI1LDAgLTEuMTU2MjUsMC4wOTM3NSAtMS40Njg3NSwwLjEyNSAtMC4wOTM3NSwwIC0wLjIzNDM3NSwwLjAxNTYyNSAtMC4yMzQzNzUsMC4yMzQzNzUgMCwwLjE0MDYyNSAwLjEwOTM3NSwwLjE0MDYyNSAwLjI5Njg3NSwwLjE0MDYyNSAwLjU3ODEyNSwwIDAuNTkzNzUsMC4wOTM3NSAwLjU5Mzc1LDAuMjAzMTI1IDAsMC4wOTM3NSAtMC4xMDkzNzUsMC41IC0wLjE3MTg3NSwwLjc1IEwgMC43NSwtMi45Njg3NSBDIDAuNjA5Mzc1LC0yLjM1OTM3NSAwLjU2MjUsLTIuMTcxODc1IDAuNTYyNSwtMS43NSBjIDAsMS4xNDA2MjUgMC42NDA2MjUsMS44NzUgMS41MzEyNSwxLjg3NSAxLjQwNjI1LDAgMi44OTA2MjUsLTEuNzgxMjUgMi44OTA2MjUsLTMuNTE1NjI1IDAsLTEuMDc4MTI1IC0wLjY0MDYyNSwtMS45MDYyNSAtMS41OTM3NSwtMS45MDYyNSAtMC41NjI1LDAgLTEuMDQ2ODc1LDAuMzQzNzUgLTEuNDA2MjUsMC43MTg3NSB6IE0gMS43MzQzNzUsLTMuNjU2MjUgYyAwLjA3ODEyNSwtMC4yNjU2MjUgMC4wNzgxMjUsLTAuMjk2ODc1IDAuMTg3NSwtMC40MjE4NzUgMC41OTM3NSwtMC43ODEyNSAxLjEyNSwtMC45Njg3NSAxLjQzNzUsLTAuOTY4NzUgMC40Mzc1LDAgMC43NSwwLjM1OTM3NSAwLjc1LDEuMTQwNjI1IDAsMC43MDMxMjUgLTAuMzkwNjI1LDIuMDc4MTI1IC0wLjYwOTM3NSwyLjUzMTI1IC0wLjM5MDYyNSwwLjgxMjUgLTAuOTM3NSwxLjI1IC0xLjQwNjI1LDEuMjUgLTAuNDA2MjUsMCAtMC44MTI1LC0wLjMyODEyNSAtMC44MTI1LC0xLjIxODc1IDAsLTAuMjM0Mzc1IDAsLTAuNDUzMTI1IDAuMTg3NSwtMS4yMTg3NSB6IG0gMCwwIgogICAgICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZSIgLz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==10.102021072200oa:a;
ob:b;
ab: ob-oa;
ap: ab*(m/(m+n));
op: oa+ap;
ta: op;PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgaWQ9InN2ZzgiCiAgIHZlcnNpb249IjEuMSIKICAgdmlld0JveD0iMCAwIDEyMC40NjA1NiA4MC44MzEyMjMiCiAgIGhlaWdodD0iODAuODMxMjIzbW0iCiAgIHdpZHRoPSIxMjAuNDYwNTZtbSI+CiAgPGRlZnMKICAgICBpZD0iZGVmczIiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzEuODI1NjcsLTU1LjI5NDQ3NCkiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGgxMCIKICAgICAgIGQ9Ik0gMzguOTMxNTQ4LDEyNS4wMjA4MyBDIDExMC43NDcwMiw2MS41MjA4MzEgMTEwLjc0NzAyLDYxLjUyMDgzMSAxMTAuNzQ3MDIsNjEuNTIwODMxIHYgMCAwIGMgMzYuMjg1NzIsNjMuNDk5OTk5IDM2LjI4NTcyLDYzLjQ5OTk5OSAzNi4yODU3Miw2My40OTk5OTkgdiAwIDAgeiIKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuMjY0NTgzMzJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTI3OTE4MTYiCiAgICAgICBkPSJtIDc2LjYyNDk2Nyw5MS41ODE1NTMgLTEuNTg4MjAxLC0wLjY4ODgwNSAwLjAyMDMsLTAuMDYyMDIgMi40NzkyOTgsLTAuNzI1OTM3IGMgMC43NzY1MDksLTAuMzgwMjM4IDEuNTUxMDMxLC0wLjc2MDQ5MiAyLjMyNzU0LC0xLjE0MDczMSAtMC41NTY1ODEsMC42OTY5MjMgLTEuMTEzMTYyLDEuMzkzODQ4IC0xLjY2OTc0MywyLjA5MDc3MSBsIC0xLjM0NjMzNiwyLjM2NTMzNSAtMC4wNTM2NiwwLjAxMjUyIC0wLjE2OTE4OSwtMS44NTEwOSIKICAgICAgIGlkPSJwYXRoMTAxMSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjUyNzkxODE2IgogICAgICAgZD0ibSA5Ny40NTYzMzIsMTI1LjI3MTE1IC0wLjkzNDg0NSwtMS40NTcwMiAwLjA1MTQxLC0wLjA0MDIgMi40NjMxNjIsMC43Nzg5MyBjIDAuODU2NjUzLDAuMTE3MDMgMS43MTE2NjEsMC4yMzI5MyAyLjU2ODMxMSwwLjM0OTk2IC0wLjg1MDUzLDAuMjY4NDggLTEuNzAxMDU1LDAuNTM2OTggLTIuNTUxNTgyLDAuODA1NDYgbCAtMi40MzYwNjUsMS4yMTM2NyAtMC4wNTE1MiwtMC4wMTk1IDAuODkxMTE4LC0xLjYzMTI4IgogICAgICAgaWQ9InBhdGgxMDExLTMiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGgzMyIKICAgICAgIGQ9Ik0gMzguOTMxNTQ4LDEyNS4wMjA4MyBDIDEzNC4wMzU2NywxMDIuNTYxNDIgMTM0LjAzNTY3LDEwMi41NjE0MiAxMzQuMDM1NjcsMTAyLjU2MTQyIgogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4yNjQ5OTk5OTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6Mi4xMTk5OTk5LCAxLjA1OTk5OTk1O3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjUyNzkxODE2IgogICAgICAgZD0ibSA5NS4wODk2NTksMTExLjk0OTI4IC0xLjE5NzY0NCwtMS4yNSAwLjA0MjcyLC0wLjA0OTMgMi41NjY5OTQsMC4yOTA2IGMgMC44NjMxNjMsLTAuMDQ5OSAxLjcyNDUwNCwtMC4xMDA2MyAyLjU4NzY3LC0wLjE1MDU2IC0wLjc4MzAwMywwLjQyNzA4IC0xLjU2NjAwNSwwLjg1NDE1IC0yLjM0OTAwNSwxLjI4MTIzIGwgLTIuMTU3MTI1LDEuNjU5NTkgLTAuMDU0MywtMC4wMSAwLjU2MDY5NywtMS43NzIyMyIKICAgICAgIGlkPSJwYXRoMTAxMS02IiAvPgogICAgPHRleHQKICAgICAgIGlkPSJ0ZXh0ODUzIgogICAgICAgeT0iMTI4LjA4NTY2IgogICAgICAgeD0iMzEuNTM3ODA0IgogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjguNDY2NjY2MjJweDtsaW5lLWhlaWdodDoxLjI1O2ZvbnQtZmFtaWx5OidUZVggR3lyZSBUZXJtZXMgTWF0aCc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonVGVYIEd5cmUgVGVybWVzIE1hdGgsIE5vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtYWxpZ246c3RhcnQ7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4yNjQ1ODMzMiIKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiPjx0c3BhbgogICAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6OC40NjY2NjYyMnB4O2ZvbnQtZmFtaWx5OidUZVggR3lyZSBUZXJtZXMgTWF0aCc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonVGVYIEd5cmUgVGVybWVzIE1hdGgsIE5vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtYWxpZ246c3RhcnQ7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O3N0cm9rZS13aWR0aDowLjI2NDU4MzMyIgogICAgICAgICB5PSIxMjguMDg1NjYiCiAgICAgICAgIHg9IjMxLjUzNzgwNCIKICAgICAgICAgaWQ9InRzcGFuODUxIj5PPC90c3Bhbj48L3RleHQ+CiAgICA8dGV4dAogICAgICAgaWQ9InRleHQ4NTciCiAgICAgICB5PSI2MS4wMDEwMDciCiAgICAgICB4PSIxMDguMzc3OCIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZToxMC41ODMzMzMwMnB4O2xpbmUtaGVpZ2h0OjEuMjU7Zm9udC1mYW1pbHk6J1RlWCBHeXJlIFRlcm1lcyBNYXRoJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidUZVggR3lyZSBUZXJtZXMgTWF0aCwgTm9ybWFsJztmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7dGV4dC1hbGlnbjpzdGFydDtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjI2NDU4MzMyIgogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRzcGFuCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTo4LjQ2NjY2NjIycHg7Zm9udC1mYW1pbHk6J1RlWCBHeXJlIFRlcm1lcyBNYXRoJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidUZVggR3lyZSBUZXJtZXMgTWF0aCwgTm9ybWFsJztmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7dGV4dC1hbGlnbjpzdGFydDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7c3Ryb2tlLXdpZHRoOjAuMjY0NTgzMzIiCiAgICAgICAgIHk9IjYxLjAwMTAwNyIKICAgICAgICAgeD0iMTA4LjM3NzgiCiAgICAgICAgIGlkPSJ0c3Bhbjg1NSI+QTwvdHNwYW4+PC90ZXh0PgogICAgPHRleHQKICAgICAgIGlkPSJ0ZXh0ODYxIgogICAgICAgeT0iMTI3LjgxODM5IgogICAgICAgeD0iMTQ3LjI2NTUiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6OC40NjY2NjYyMnB4O2xpbmUtaGVpZ2h0OjEuMjU7Zm9udC1mYW1pbHk6J1RlWCBHeXJlIFRlcm1lcyBNYXRoJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidUZVggR3lyZSBUZXJtZXMgTWF0aCwgTm9ybWFsJztmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7dGV4dC1hbGlnbjpzdGFydDtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjI2NDU4MzMyIgogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRzcGFuCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTo4LjQ2NjY2NjIycHg7Zm9udC1mYW1pbHk6J1RlWCBHeXJlIFRlcm1lcyBNYXRoJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidUZVggR3lyZSBUZXJtZXMgTWF0aCwgTm9ybWFsJztmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7dGV4dC1hbGlnbjpzdGFydDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7c3Ryb2tlLXdpZHRoOjAuMjY0NTgzMzIiCiAgICAgICAgIHk9IjEyNy44MTgzOSIKICAgICAgICAgeD0iMTQ3LjI2NTUiCiAgICAgICAgIGlkPSJ0c3Bhbjg1OSI+QjwvdHNwYW4+PC90ZXh0PgogICAgPHRleHQKICAgICAgIGlkPSJ0ZXh0ODY1IgogICAgICAgeT0iMTAyLjgyODY5IgogICAgICAgeD0iMTM1LjM3MjAxIgogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjguNDY2NjY2MjJweDtsaW5lLWhlaWdodDoxLjI1O2ZvbnQtZmFtaWx5OidUZVggR3lyZSBUZXJtZXMgTWF0aCc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonVGVYIEd5cmUgVGVybWVzIE1hdGgsIE5vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtYWxpZ246c3RhcnQ7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4yNjQ1ODMzMiIKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiPjx0c3BhbgogICAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6OC40NjY2NjYyMnB4O2ZvbnQtZmFtaWx5OidUZVggR3lyZSBUZXJtZXMgTWF0aCc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonVGVYIEd5cmUgVGVybWVzIE1hdGgsIE5vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtYWxpZ246c3RhcnQ7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O3N0cm9rZS13aWR0aDowLjI2NDU4MzMyIgogICAgICAgICB5PSIxMDIuODI4NjkiCiAgICAgICAgIHg9IjEzNS4zNzIwMSIKICAgICAgICAgaWQ9InRzcGFuODYzIj5QPC90c3Bhbj48L3RleHQ+CiAgICA8ZwogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJnMjYxOSIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDMuMjYyNTA4OCwwLDAsMi43OTU4MDQ4LC01MzkuNzc2MywxMy43MDIxMjcpIj4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4yNjQ1ODMzMywwLDAsMC4yNjQ1ODMzMywxODcuMzE3MjksMjYuMzUzNDAxKSIKICAgICAgICAgaWQ9InVzZTI2MTciPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaWQ9InBhdGg4NzciCiAgICAgICAgICAgZD0iTSA0LjQ2ODc1LC00LjUzMTI1IEMgNC4yNjU2MjUsLTQuOTg0Mzc1IDMuOTA2MjUsLTUuMjk2ODc1IDMuMzc1LC01LjI5Njg3NSBjIC0xLjQwNjI1LDAgLTIuODkwNjI1LDEuNzUgLTIuODkwNjI1LDMuNTE1NjI1IDAsMS4xMjUgMC42NTYyNSwxLjkwNjI1IDEuNTkzNzUsMS45MDYyNSAwLjIzNDM3NSwwIDAuODQzNzUsLTAuMDQ2ODc1IDEuNTYyNSwtMC44OTA2MjUgMC4wOTM3NSwwLjUgMC41MTU2MjUsMC44OTA2MjUgMS4wOTM3NSwwLjg5MDYyNSAwLjQwNjI1LDAgMC42ODc1LC0wLjI2NTYyNSAwLjg3NSwtMC42NTYyNSAwLjIwMzEyNSwtMC40MjE4NzUgMC4zNTkzNzUsLTEuMTU2MjUgMC4zNTkzNzUsLTEuMTg3NSAwLC0wLjEyNSAtMC4wOTM3NSwtMC4xMjUgLTAuMTQwNjI1LC0wLjEyNSAtMC4xMDkzNzUsMCAtMC4xMjUsMC4wNjI1IC0wLjE3MTg3NSwwLjIxODc1IC0wLjIwMzEyNSwwLjc4MTI1IC0wLjQwNjI1LDEuNSAtMC45MDYyNSwxLjUgLTAuMzI4MTI1LDAgLTAuMzU5Mzc1LC0wLjMxMjUgLTAuMzU5Mzc1LC0wLjU2MjUgMCwtMC4yNjU2MjUgMC4wMzEyNSwtMC4zNTkzNzUgMC4xNTYyNSwtMC44OTA2MjUgMC4xNDA2MjUsLTAuNSAwLjE1NjI1LC0wLjYyNSAwLjI2NTYyNSwtMS4wNzgxMjUgMC4yMDMxMjUsLTAuNzY1NjI1IDAuMjUsLTAuOTg0Mzc1IDAuNDM3NSwtMS42NzE4NzUgMC4wNzgxMjUsLTAuMzQzNzUgMC4wNzgxMjUsLTAuMzU5Mzc1IDAuMDc4MTI1LC0wLjQwNjI1IDAsLTAuMjAzMTI1IC0wLjE0MDYyNSwtMC4zMjgxMjUgLTAuMzQzNzUsLTAuMzI4MTI1IC0wLjI5Njg3NSwwIC0wLjQ2ODc1LDAuMjY1NjI1IC0wLjUxNTYyNSwwLjUzMTI1IHogbSAtMC43NjU2MjUsMy4xMDkzNzUgYyAtMC4wNjI1LDAuMjAzMTI1IC0wLjA2MjUsMC4yMzQzNzUgLTAuMjUsMC40Mzc1IEMgMi45MjE4NzUsLTAuMzI4MTI1IDIuNDM3NSwtMC4xMjUgMi4wOTM3NSwtMC4xMjUgMS41LC0wLjEyNSAxLjMyODEyNSwtMC43OTY4NzUgMS4zMjgxMjUsLTEuMjY1NjI1IGMgMCwtMC41OTM3NSAwLjM5MDYyNSwtMi4wNzgxMjUgMC42NTYyNSwtMi42MjUgMC4zNzUsLTAuNzAzMTI1IDAuOTIxODc1LC0xLjE1NjI1IDEuNDA2MjUsLTEuMTU2MjUgMC43NjU2MjUsMCAwLjkzNzUsMC45ODQzNzUgMC45Mzc1LDEuMDYyNSAwLDAuMDc4MTI1IC0wLjAxNTYyNSwwLjE0MDYyNSAtMC4wMzEyNSwwLjIwMzEyNSB6IG0gMCwwIgogICAgICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZSIgLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODkzNDgzMDQiCiAgICAgICBkPSJtIDcyLjE4ODkwNyw4OC43MTE5OTcgaCAyLjk4NTMzIHYgLTAuNTU1NTM2IGggLTIuOTg1MzMgeiBtIDAsMCIKICAgICAgIGlkPSJwYXRoMjYyMSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjIwMjI4MjQzIgogICAgICAgZD0ibSA5OC41NDc1ODYsMTM1LjQ1MDYgaCAzLjY0NTczNCB2IDAuNjc1MSBoIC0zLjY0NTczNCB6IG0gMCwwIgogICAgICAgaWQ9InBhdGgxNDg1IiAvPgogICAgPGcKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpZD0iZzE0ODMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgzLjc3OTQ0MzcsMCwwLDIuNjgzMDM3MywtMjc2LjA2MjI2LC0zNS4zNjcyOTIpIj4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4yNjQ1ODMzMywwLDAsMC4yNjQ1ODMzMyw5OSw2My40MDcyKSIKICAgICAgICAgaWQ9InVzZTE0ODEiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaWQ9InBhdGg5MDMiCiAgICAgICAgICAgZD0ibSAyLjg3NSwtOC4yMDMxMjUgYyAwLDAgMCwtMC4xMjUgLTAuMTU2MjUsLTAuMTI1IC0wLjI4MTI1LDAgLTEuMTU2MjUsMC4wOTM3NSAtMS40Njg3NSwwLjEyNSAtMC4wOTM3NSwwIC0wLjIzNDM3NSwwLjAxNTYyNSAtMC4yMzQzNzUsMC4yMzQzNzUgMCwwLjE0MDYyNSAwLjEwOTM3NSwwLjE0MDYyNSAwLjI5Njg3NSwwLjE0MDYyNSAwLjU3ODEyNSwwIDAuNTkzNzUsMC4wOTM3NSAwLjU5Mzc1LDAuMjAzMTI1IDAsMC4wOTM3NSAtMC4xMDkzNzUsMC41IC0wLjE3MTg3NSwwLjc1IEwgMC43NSwtMi45Njg3NSBDIDAuNjA5Mzc1LC0yLjM1OTM3NSAwLjU2MjUsLTIuMTcxODc1IDAuNTYyNSwtMS43NSBjIDAsMS4xNDA2MjUgMC42NDA2MjUsMS44NzUgMS41MzEyNSwxLjg3NSAxLjQwNjI1LDAgMi44OTA2MjUsLTEuNzgxMjUgMi44OTA2MjUsLTMuNTE1NjI1IDAsLTEuMDc4MTI1IC0wLjY0MDYyNSwtMS45MDYyNSAtMS41OTM3NSwtMS45MDYyNSAtMC41NjI1LDAgLTEuMDQ2ODc1LDAuMzQzNzUgLTEuNDA2MjUsMC43MTg3NSB6IE0gMS43MzQzNzUsLTMuNjU2MjUgYyAwLjA3ODEyNSwtMC4yNjU2MjUgMC4wNzgxMjUsLTAuMjk2ODc1IDAuMTg3NSwtMC40MjE4NzUgMC41OTM3NSwtMC43ODEyNSAxLjEyNSwtMC45Njg3NSAxLjQzNzUsLTAuOTY4NzUgMC40Mzc1LDAgMC43NSwwLjM1OTM3NSAwLjc1LDEuMTQwNjI1IDAsMC43MDMxMjUgLTAuMzkwNjI1LDIuMDc4MTI1IC0wLjYwOTM3NSwyLjUzMTI1IC0wLjM5MDYyNSwwLjgxMjUgLTAuOTM3NSwxLjI1IC0xLjQwNjI1LDEuMjUgLTAuNDA2MjUsMCAtMC44MTI1LC0wLjMyODEyNSAtMC44MTI1LC0xLjIxODc1IDAsLTAuMjM0Mzc1IDAsLTAuNDUzMTI1IDAuMTg3NSwtMS4yMTg3NSB6IG0gMCwwIgogICAgICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZSIgLz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==100 Correct answer, well done.]]> Your answer is partially correct.]]> Incorrect answer.]]>.*10none1icos-1lang[0ans1algebraicta1510010013prt11.0000000110AlgEquivans1ta0=1.0000000-1prt1-1-T ]]>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgaWQ9InN2ZzgiCiAgIHZlcnNpb249IjEuMSIKICAgdmlld0JveD0iMCAwIDEyMC40NjA1NiA4MC44MzEyMjMiCiAgIGhlaWdodD0iODAuODMxMjIzbW0iCiAgIHdpZHRoPSIxMjAuNDYwNTZtbSI+CiAgPGRlZnMKICAgICBpZD0iZGVmczIiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzEuODI1NjcsLTU1LjI5NDQ3NCkiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGgxMCIKICAgICAgIGQ9Ik0gMzguOTMxNTQ4LDEyNS4wMjA4MyBDIDExMC43NDcwMiw2MS41MjA4MzEgMTEwLjc0NzAyLDYxLjUyMDgzMSAxMTAuNzQ3MDIsNjEuNTIwODMxIHYgMCAwIGMgMzYuMjg1NzIsNjMuNDk5OTk5IDM2LjI4NTcyLDYzLjQ5OTk5OSAzNi4yODU3Miw2My40OTk5OTkgdiAwIDAgeiIKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuMjY0NTgzMzJweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTI3OTE4MTYiCiAgICAgICBkPSJtIDc2LjYyNDk2Nyw5MS41ODE1NTMgLTEuNTg4MjAxLC0wLjY4ODgwNSAwLjAyMDMsLTAuMDYyMDIgMi40NzkyOTgsLTAuNzI1OTM3IGMgMC43NzY1MDksLTAuMzgwMjM4IDEuNTUxMDMxLC0wLjc2MDQ5MiAyLjMyNzU0LC0xLjE0MDczMSAtMC41NTY1ODEsMC42OTY5MjMgLTEuMTEzMTYyLDEuMzkzODQ4IC0xLjY2OTc0MywyLjA5MDc3MSBsIC0xLjM0NjMzNiwyLjM2NTMzNSAtMC4wNTM2NiwwLjAxMjUyIC0wLjE2OTE4OSwtMS44NTEwOSIKICAgICAgIGlkPSJwYXRoMTAxMSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjUyNzkxODE2IgogICAgICAgZD0ibSA5Ny40NTYzMzIsMTI1LjI3MTE1IC0wLjkzNDg0NSwtMS40NTcwMiAwLjA1MTQxLC0wLjA0MDIgMi40NjMxNjIsMC43Nzg5MyBjIDAuODU2NjUzLDAuMTE3MDMgMS43MTE2NjEsMC4yMzI5MyAyLjU2ODMxMSwwLjM0OTk2IC0wLjg1MDUzLDAuMjY4NDggLTEuNzAxMDU1LDAuNTM2OTggLTIuNTUxNTgyLDAuODA1NDYgbCAtMi40MzYwNjUsMS4yMTM2NyAtMC4wNTE1MiwtMC4wMTk1IDAuODkxMTE4LC0xLjYzMTI4IgogICAgICAgaWQ9InBhdGgxMDExLTMiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGgzMyIKICAgICAgIGQ9Ik0gMzguOTMxNTQ4LDEyNS4wMjA4MyBDIDEzNC4wMzU2NywxMDIuNTYxNDIgMTM0LjAzNTY3LDEwMi41NjE0MiAxMzQuMDM1NjcsMTAyLjU2MTQyIgogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4yNjQ5OTk5OTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6Mi4xMTk5OTk5LCAxLjA1OTk5OTk1O3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjUyNzkxODE2IgogICAgICAgZD0ibSA5NS4wODk2NTksMTExLjk0OTI4IC0xLjE5NzY0NCwtMS4yNSAwLjA0MjcyLC0wLjA0OTMgMi41NjY5OTQsMC4yOTA2IGMgMC44NjMxNjMsLTAuMDQ5OSAxLjcyNDUwNCwtMC4xMDA2MyAyLjU4NzY3LC0wLjE1MDU2IC0wLjc4MzAwMywwLjQyNzA4IC0xLjU2NjAwNSwwLjg1NDE1IC0yLjM0OTAwNSwxLjI4MTIzIGwgLTIuMTU3MTI1LDEuNjU5NTkgLTAuMDU0MywtMC4wMSAwLjU2MDY5NywtMS43NzIyMyIKICAgICAgIGlkPSJwYXRoMTAxMS02IiAvPgogICAgPHRleHQKICAgICAgIGlkPSJ0ZXh0ODUzIgogICAgICAgeT0iMTI4LjA4NTY2IgogICAgICAgeD0iMzEuNTM3ODA0IgogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjguNDY2NjY2MjJweDtsaW5lLWhlaWdodDoxLjI1O2ZvbnQtZmFtaWx5OidUZVggR3lyZSBUZXJtZXMgTWF0aCc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonVGVYIEd5cmUgVGVybWVzIE1hdGgsIE5vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtYWxpZ246c3RhcnQ7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4yNjQ1ODMzMiIKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiPjx0c3BhbgogICAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6OC40NjY2NjYyMnB4O2ZvbnQtZmFtaWx5OidUZVggR3lyZSBUZXJtZXMgTWF0aCc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonVGVYIEd5cmUgVGVybWVzIE1hdGgsIE5vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtYWxpZ246c3RhcnQ7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O3N0cm9rZS13aWR0aDowLjI2NDU4MzMyIgogICAgICAgICB5PSIxMjguMDg1NjYiCiAgICAgICAgIHg9IjMxLjUzNzgwNCIKICAgICAgICAgaWQ9InRzcGFuODUxIj5PPC90c3Bhbj48L3RleHQ+CiAgICA8dGV4dAogICAgICAgaWQ9InRleHQ4NTciCiAgICAgICB5PSI2MS4wMDEwMDciCiAgICAgICB4PSIxMDguMzc3OCIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZToxMC41ODMzMzMwMnB4O2xpbmUtaGVpZ2h0OjEuMjU7Zm9udC1mYW1pbHk6J1RlWCBHeXJlIFRlcm1lcyBNYXRoJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidUZVggR3lyZSBUZXJtZXMgTWF0aCwgTm9ybWFsJztmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7dGV4dC1hbGlnbjpzdGFydDtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjI2NDU4MzMyIgogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRzcGFuCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTo4LjQ2NjY2NjIycHg7Zm9udC1mYW1pbHk6J1RlWCBHeXJlIFRlcm1lcyBNYXRoJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidUZVggR3lyZSBUZXJtZXMgTWF0aCwgTm9ybWFsJztmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7dGV4dC1hbGlnbjpzdGFydDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7c3Ryb2tlLXdpZHRoOjAuMjY0NTgzMzIiCiAgICAgICAgIHk9IjYxLjAwMTAwNyIKICAgICAgICAgeD0iMTA4LjM3NzgiCiAgICAgICAgIGlkPSJ0c3Bhbjg1NSI+QTwvdHNwYW4+PC90ZXh0PgogICAgPHRleHQKICAgICAgIGlkPSJ0ZXh0ODYxIgogICAgICAgeT0iMTI3LjgxODM5IgogICAgICAgeD0iMTQ3LjI2NTUiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6OC40NjY2NjYyMnB4O2xpbmUtaGVpZ2h0OjEuMjU7Zm9udC1mYW1pbHk6J1RlWCBHeXJlIFRlcm1lcyBNYXRoJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidUZVggR3lyZSBUZXJtZXMgTWF0aCwgTm9ybWFsJztmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7dGV4dC1hbGlnbjpzdGFydDtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjI2NDU4MzMyIgogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRzcGFuCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTo4LjQ2NjY2NjIycHg7Zm9udC1mYW1pbHk6J1RlWCBHeXJlIFRlcm1lcyBNYXRoJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidUZVggR3lyZSBUZXJtZXMgTWF0aCwgTm9ybWFsJztmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7dGV4dC1hbGlnbjpzdGFydDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7c3Ryb2tlLXdpZHRoOjAuMjY0NTgzMzIiCiAgICAgICAgIHk9IjEyNy44MTgzOSIKICAgICAgICAgeD0iMTQ3LjI2NTUiCiAgICAgICAgIGlkPSJ0c3Bhbjg1OSI+QjwvdHNwYW4+PC90ZXh0PgogICAgPHRleHQKICAgICAgIGlkPSJ0ZXh0ODY1IgogICAgICAgeT0iMTAyLjgyODY5IgogICAgICAgeD0iMTM1LjM3MjAxIgogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjguNDY2NjY2MjJweDtsaW5lLWhlaWdodDoxLjI1O2ZvbnQtZmFtaWx5OidUZVggR3lyZSBUZXJtZXMgTWF0aCc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonVGVYIEd5cmUgVGVybWVzIE1hdGgsIE5vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtYWxpZ246c3RhcnQ7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4yNjQ1ODMzMiIKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiPjx0c3BhbgogICAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6OC40NjY2NjYyMnB4O2ZvbnQtZmFtaWx5OidUZVggR3lyZSBUZXJtZXMgTWF0aCc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonVGVYIEd5cmUgVGVybWVzIE1hdGgsIE5vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtYWxpZ246c3RhcnQ7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O3N0cm9rZS13aWR0aDowLjI2NDU4MzMyIgogICAgICAgICB5PSIxMDIuODI4NjkiCiAgICAgICAgIHg9IjEzNS4zNzIwMSIKICAgICAgICAgaWQ9InRzcGFuODYzIj5QPC90c3Bhbj48L3RleHQ+CiAgICA8ZwogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJnMjYxOSIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDMuMjYyNTA4OCwwLDAsMi43OTU4MDQ4LC01MzkuNzc2MywxMy43MDIxMjcpIj4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4yNjQ1ODMzMywwLDAsMC4yNjQ1ODMzMywxODcuMzE3MjksMjYuMzUzNDAxKSIKICAgICAgICAgaWQ9InVzZTI2MTciPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaWQ9InBhdGg4NzciCiAgICAgICAgICAgZD0iTSA0LjQ2ODc1LC00LjUzMTI1IEMgNC4yNjU2MjUsLTQuOTg0Mzc1IDMuOTA2MjUsLTUuMjk2ODc1IDMuMzc1LC01LjI5Njg3NSBjIC0xLjQwNjI1LDAgLTIuODkwNjI1LDEuNzUgLTIuODkwNjI1LDMuNTE1NjI1IDAsMS4xMjUgMC42NTYyNSwxLjkwNjI1IDEuNTkzNzUsMS45MDYyNSAwLjIzNDM3NSwwIDAuODQzNzUsLTAuMDQ2ODc1IDEuNTYyNSwtMC44OTA2MjUgMC4wOTM3NSwwLjUgMC41MTU2MjUsMC44OTA2MjUgMS4wOTM3NSwwLjg5MDYyNSAwLjQwNjI1LDAgMC42ODc1LC0wLjI2NTYyNSAwLjg3NSwtMC42NTYyNSAwLjIwMzEyNSwtMC40MjE4NzUgMC4zNTkzNzUsLTEuMTU2MjUgMC4zNTkzNzUsLTEuMTg3NSAwLC0wLjEyNSAtMC4wOTM3NSwtMC4xMjUgLTAuMTQwNjI1LC0wLjEyNSAtMC4xMDkzNzUsMCAtMC4xMjUsMC4wNjI1IC0wLjE3MTg3NSwwLjIxODc1IC0wLjIwMzEyNSwwLjc4MTI1IC0wLjQwNjI1LDEuNSAtMC45MDYyNSwxLjUgLTAuMzI4MTI1LDAgLTAuMzU5Mzc1LC0wLjMxMjUgLTAuMzU5Mzc1LC0wLjU2MjUgMCwtMC4yNjU2MjUgMC4wMzEyNSwtMC4zNTkzNzUgMC4xNTYyNSwtMC44OTA2MjUgMC4xNDA2MjUsLTAuNSAwLjE1NjI1LC0wLjYyNSAwLjI2NTYyNSwtMS4wNzgxMjUgMC4yMDMxMjUsLTAuNzY1NjI1IDAuMjUsLTAuOTg0Mzc1IDAuNDM3NSwtMS42NzE4NzUgMC4wNzgxMjUsLTAuMzQzNzUgMC4wNzgxMjUsLTAuMzU5Mzc1IDAuMDc4MTI1LC0wLjQwNjI1IDAsLTAuMjAzMTI1IC0wLjE0MDYyNSwtMC4zMjgxMjUgLTAuMzQzNzUsLTAuMzI4MTI1IC0wLjI5Njg3NSwwIC0wLjQ2ODc1LDAuMjY1NjI1IC0wLjUxNTYyNSwwLjUzMTI1IHogbSAtMC43NjU2MjUsMy4xMDkzNzUgYyAtMC4wNjI1LDAuMjAzMTI1IC0wLjA2MjUsMC4yMzQzNzUgLTAuMjUsMC40Mzc1IEMgMi45MjE4NzUsLTAuMzI4MTI1IDIuNDM3NSwtMC4xMjUgMi4wOTM3NSwtMC4xMjUgMS41LC0wLjEyNSAxLjMyODEyNSwtMC43OTY4NzUgMS4zMjgxMjUsLTEuMjY1NjI1IGMgMCwtMC41OTM3NSAwLjM5MDYyNSwtMi4wNzgxMjUgMC42NTYyNSwtMi42MjUgMC4zNzUsLTAuNzAzMTI1IDAuOTIxODc1LC0xLjE1NjI1IDEuNDA2MjUsLTEuMTU2MjUgMC43NjU2MjUsMCAwLjkzNzUsMC45ODQzNzUgMC45Mzc1LDEuMDYyNSAwLDAuMDc4MTI1IC0wLjAxNTYyNSwwLjE0MDYyNSAtMC4wMzEyNSwwLjIwMzEyNSB6IG0gMCwwIgogICAgICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZSIgLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODkzNDgzMDQiCiAgICAgICBkPSJtIDcyLjE4ODkwNyw4OC43MTE5OTcgaCAyLjk4NTMzIHYgLTAuNTU1NTM2IGggLTIuOTg1MzMgeiBtIDAsMCIKICAgICAgIGlkPSJwYXRoMjYyMSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjIwMjI4MjQzIgogICAgICAgZD0ibSA5OC41NDc1ODYsMTM1LjQ1MDYgaCAzLjY0NTczNCB2IDAuNjc1MSBoIC0zLjY0NTczNCB6IG0gMCwwIgogICAgICAgaWQ9InBhdGgxNDg1IiAvPgogICAgPGcKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpZD0iZzE0ODMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgzLjc3OTQ0MzcsMCwwLDIuNjgzMDM3MywtMjc2LjA2MjI2LC0zNS4zNjcyOTIpIj4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4yNjQ1ODMzMywwLDAsMC4yNjQ1ODMzMyw5OSw2My40MDcyKSIKICAgICAgICAgaWQ9InVzZTE0ODEiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaWQ9InBhdGg5MDMiCiAgICAgICAgICAgZD0ibSAyLjg3NSwtOC4yMDMxMjUgYyAwLDAgMCwtMC4xMjUgLTAuMTU2MjUsLTAuMTI1IC0wLjI4MTI1LDAgLTEuMTU2MjUsMC4wOTM3NSAtMS40Njg3NSwwLjEyNSAtMC4wOTM3NSwwIC0wLjIzNDM3NSwwLjAxNTYyNSAtMC4yMzQzNzUsMC4yMzQzNzUgMCwwLjE0MDYyNSAwLjEwOTM3NSwwLjE0MDYyNSAwLjI5Njg3NSwwLjE0MDYyNSAwLjU3ODEyNSwwIDAuNTkzNzUsMC4wOTM3NSAwLjU5Mzc1LDAuMjAzMTI1IDAsMC4wOTM3NSAtMC4xMDkzNzUsMC41IC0wLjE3MTg3NSwwLjc1IEwgMC43NSwtMi45Njg3NSBDIDAuNjA5Mzc1LC0yLjM1OTM3NSAwLjU2MjUsLTIuMTcxODc1IDAuNTYyNSwtMS43NSBjIDAsMS4xNDA2MjUgMC42NDA2MjUsMS44NzUgMS41MzEyNSwxLjg3NSAxLjQwNjI1LDAgMi44OTA2MjUsLTEuNzgxMjUgMi44OTA2MjUsLTMuNTE1NjI1IDAsLTEuMDc4MTI1IC0wLjY0MDYyNSwtMS45MDYyNSAtMS41OTM3NSwtMS45MDYyNSAtMC41NjI1LDAgLTEuMDQ2ODc1LDAuMzQzNzUgLTEuNDA2MjUsMC43MTg3NSB6IE0gMS43MzQzNzUsLTMuNjU2MjUgYyAwLjA3ODEyNSwtMC4yNjU2MjUgMC4wNzgxMjUsLTAuMjk2ODc1IDAuMTg3NSwtMC40MjE4NzUgMC41OTM3NSwtMC43ODEyNSAxLjEyNSwtMC45Njg3NSAxLjQzNzUsLTAuOTY4NzUgMC40Mzc1LDAgMC43NSwwLjM1OTM3NSAwLjc1LDEuMTQwNjI1IDAsMC43MDMxMjUgLTAuMzkwNjI1LDIuMDc4MTI1IC0wLjYwOTM3NSwyLjUzMTI1IC0wLjM5MDYyNSwwLjgxMjUgLTAuOTM3NSwxLjI1IC0xLjQwNjI1LDEuMjUgLTAuNDA2MjUsMCAtMC44MTI1LC0wLjMyODEyNSAtMC44MTI1LC0xLjIxODc1IDAsLTAuMjM0Mzc1IDAsLTAuNDUzMTI1IDAuMTg3NSwtMS4yMTg3NSB6IG0gMCwwIgogICAgICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZSIgLz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg===0.00000001prt1-1-F1AlgEquivans1-1*ta0+0.0000000-1prt1-2-TAlmost correct, the question asks for \(\overrightarrow{OP}\) which is the vector pointing from \(O\) to \(P\). Check that your answer points in this direction. ]]>-0.00000002prt1-2-F2AlgEquivans1a+m/(n+m)*(a-b)0+0.0000000-1prt1-3-TAlmost correct, check the direction of the vector \(\overrightarrow{AB}\), it looks like you may have used \(\overrightarrow{BA}\) instead. ]]>-0.00000003prt1-3-F3AlgEquivans1b+n/(n+m)*(b-a)0+0.0000000-1prt1-4-TAlmost correct, check the direction of the vector
\(\overrightarrow{BA}\), it looks like you may have used
\(\overrightarrow{AB}\). ]]>-0.0000000-1prt1-4-F1ans1taprt11.00000000.0000000prt1-1-T2ans1-taprt10.00000000.1000000prt1-2-T3ans1a+m/(n+m)*(a-b)prt10.00000000.1000000prt1-3-T4ans1b+n/(n+m)*(b-a)prt10.00000000.1000000prt1-4-T5ans1ta+1prt10.00000000.1000000prt1-4-F
================================================
FILE: examples/sample-article/media/stack/Checkbox.xml
================================================
CheckboxDifferentiate {@p@} with respect to \(x\).
[[input:ans1]]
[[validation:ans1]]
]]>10.102018080600[[feedback:prt1]]100 Correct answer, well done.]]> Your answer is partially correct.]]> Incorrect answer.]]>.*10dot1icos-1lang[0ans1checkboxta1510010012prt11.0000000110AlgEquivansmodtrue0=1.0000000-1prt1-1-T=0.0000000-1prt1-1-F1ans1[2*cos(2*x)]prt11.00000000.0000000prt1-1-T2ans1[first(ta[1]),first(ta[3])]prt10.00000000.1000000prt1-1-F
================================================
FILE: examples/sample-article/media/stack/Matrix.xml
================================================
MatrixType in {@M@}
[[input:ans1]]
[[validation:ans1]]
]]>10.102018080600M:matrix([1,2],[3,4])[[feedback:prt1]]100 Correct answer, well done.]]> Your answer is partially correct.]]> Incorrect answer.]]>.*10dot1icos-1lang[0ans1matrixM1510010111prt11.0000000110AlgEquivans1M0=1.0000000-1prt1-1-T=0.0000000-1prt1-1-F1ans1Mprt11.00000000.0000000prt1-1-T2ans1ev(2*M,simp)prt10.00000000.1000000prt1-1-F
================================================
FILE: examples/sample-article/media/stack/basic-plot.xml
================================================
Identify quadraticWhat is the function plotted here:
{@plot1@}
[[input:ans1]] [[validation:ans1]]
]]>10.102025012100[[feedback:prt1]]100 Correct answer, well done.]]> Your answer is partially correct.]]> Incorrect answer.]]>.*10dot1icos-1lang[0ans1algebraicta11510010011prt11.0000000110AlgEquivans1ta10=1-1prt1-1-T=0-1prt1-1-F15648189491017944393100428144911634775711441642357
================================================
FILE: examples/sample-article/media/video/BigBuckBunnyAcapella.vtt
================================================
WEBVTT
Kind: captions
Language: en
NOTE Adapted from a SubRip file from
NOTE https://sites.google.com/site/chrisfoo/subtitles
NOTE Specifically
NOTE https://sites.google.com/site/chrisfoo/subtitles/BigBuckBunnyAcapella.srt
00:00:02.681 --> 00:00:11.178
Bun, bun, bun ♪
00:00:17.162 --> 00:00:20.830
Ahh! I’m a bird. I like to fly and spread out my wings.
00:00:20.830 --> 00:00:21.939
Ow!
00:00:23.112 --> 00:00:23.965
[Chuckles]
00:00:24.215 --> 00:00:29.220
[Snoring]
00:00:29.470 --> 00:00:38.371
Big bah bunny, big bah bunny ♪
00:00:39.423 --> 00:00:42.663
What? What’s that? Ooh, it’s morning.
00:00:45.947 --> 00:00:48.526
Oh boy. Yay! I’m awake!
00:00:48.776 --> 00:00:53.365
Oh boy. Hey, ahh...
00:00:56.725 --> 00:01:00.144
I like mornings. Oh man, I really have an itch on my butt.
================================================
FILE: examples/sample-article/privatesolutions.xml
================================================
A private answer.
A private solution.
A private hint.
First of two private solutions.
Second of two private solutions.
A private answer to a nested task.
A private solution to a nested task.
================================================
FILE: examples/sample-article/project.ptx
================================================
htmlsample-article.xmlpublication.xmloutput/htmlhtmlsample-article.xmlpublication-oscarlevin.xmloutput/oscarlatexsample-article.xmlpublication.xmloutput/latexpdfsample-article.xmlpublication.xmloutput/pdfpdfsample-article.xmlpublication-solution-manual.xmloutput/solutionslatexpdflatexxelatexasysageconvertpdftopspdf-crop-marginspageresnodefile2brl
================================================
FILE: examples/sample-article/publication-crc.xml
================================================
================================================
FILE: examples/sample-article/publication-oscarlevin.xml
================================================
================================================
FILE: examples/sample-article/publication-print.xml
================================================
================================================
FILE: examples/sample-article/publication-solution-manual.xml
================================================
================================================
FILE: examples/sample-article/publication.xml
================================================
================================================
FILE: examples/sample-article/sample-article.xml
================================================
\newcommand{\definiteintegral}[4]{\int_{#1}^{#2}\,#3\,d#4} % this comment will be stripped
\newcommand{\myequation}[2]{#1\amp =#2} % testing alignment override
% comments anywhere get stripped, with or without faux % comment \% characters
\newcommand{\indefiniteintegral}[2]{\int#1\,d#2}
\newcommand{\testingescapedpercent}{ \% } % just testing
% employed in a PreFigure linear algebra diagram
\newcommand{\bvec}{{\mathbf b}}
\newcommand{\vvec}{{\mathbf v}}
% employed in Valerio Monti sbsgroup operation tables
\newcommand{\class}[2][\sim]{\lbrack #2\rbrack_{#1}}% Classe di equivalenza
\usepackage{pgfplots} % loads tikz package
\usepackage{smartdiagram} % for a circular diagram
\pgfplotsset{axis x line = middle,
axis y line = middle}
\usetikzlibrary{backgrounds}
\usetikzlibrary{arrows,matrix}
\usetikzlibrary{positioning} % for Dave R's worksheet
\usepackage{circuitikz} % for Virgil P's worksheet
\usepackage{nicematrix} % for multi-run latex-image (label="latex-three-pass")
\usepackage{siunitx} % swim speeds in shark attack image
SApretext-SAConundrumDerivatives and IntegralsAn Annotated DiscourseRobert BeezerDepartment of Mathematics and Computer ScienceUniversity of Puget SoundTacoma, Washington, USAbeezer@pugetsound.eduStatement about support received by the first author.A. Second AuthorDepartment of MathematicsUniversity of SomewhereAnytown, USAasauthor@example.eduStatement about support received by the second author.samplesPreTeXttesting document00-0100-0200A99
This is an example of a statement describing funding support for the current document.
This is a sample of many of the things you can do with . Sometimes the math makes sense, sometimes it seems to be written in the first person, sort of like this Abstract.
Introduction
We consider definite integrals of functions f(x). For example, \definiteintegral{0}{2}{\sin^2(x)}{x}. This is also a demonstration of the capabilities of .\int_a^b\,f(x)\,dxdefinite integral of f(x)
Generated: ,
The Fundamental Theorem
There is a remarkable theorem:And fortunately we do not need to try to write it in the margin!
The Fundamental Theorem of CalculusFundamental Theorem of Calculus
If f(x) is continuous, and the derivative of F(x) is f(x), then \definiteintegral{a}{b}{f(x)}{x}=F(b)-F(a)test: buried in theorem/statement/p
Left to the reader.This is a footnote in a proof that is inside a theorem.
You will find almost nothing about all this in the article , nor in the book , since they belong in some other article, but we can cite them out-of-order for practice anyway.
When we are writing we do not always know what we want to cite, or just where subsequent material will end up. For example, we might want a citation to or we might want to reference a later.
We can also embed todos in the source by making an XML comment that begins with the four characters todo, and selectively display them, so you may not see the one here in the output you are looking at now. Or maybe you do see it?
Because a definite integral can be computed using an antiderivative, we have the following definition.
indefinite integralintegralindefinite integral\int\,f(x)\,dxindefinite integral of f(x)
Suppose that \frac{d}{dx}F(x)=f(x). Then the indefinite integral of f(x) is F(x) and is written as \int\,f(x)\,dx=F(x).
Computing Integrals with Sage (\int)Computing Integrals with SageSageintegrationSageintegrationcellSageintegrationnumericalnumericalSage integrationnumericalSagenumericsnumericsSagenumerical integrationSagecellSageAFAGAHABABCABCDABCAXXFXGXHXYXYZDXYZAmixed-content emphasizedstructured-content emphasizedsorted as if Catsorted as if QuorumunitsZ (sort as A)unitsA (sort as Z)verbatim text, use sortby\rhofibersCayley graphcayley graphCAYLEY GRAPHx as a variable
Sage can compute definite integrals. The output contains the approximate numerical value of the definite integral, followed by an upper bound of the error in the approximation.
numerical_integral(sin(x)^2, (0, 2))
Given the Fundamental Theorem, we would find the antiderivative useful.Cayley graphx as a variable
integral(sin(x)^2, x)
The same command can be used to employ the antiderivative in the application of the Fundamental Theorem. Notice that the answer is exact and any further manipulation is likely to be simply producing a numerical approximation.cayley graph
integral(sin(x)^2, (x, 0, 2))
There are integrals you really do not want to evaluate, or you do not want your reader to evaluate. A Sage cell can be configured for display purposes onlyyou can look but you cannot touch.CAYLEY GRAPH
integral(e^(x^2), x)
You can give a Sage element a doctestdoctestattributesdoctest attribute, whose value mirrors the optional hash tags used in Sage doctests. Possible values are random, long time, not implemented, not tested, known bug, absolute, relative, and optional. The values absolute and relative refer to floating-point tolerances for equality and require a second attribute tolerance to specify a floating point value. The value optional refers to the test requiring that an optional Sage package be present. The name of that package should be provided in the package attribute.
The next cell is marked in the source as doctest="random", and so is specified as unpredictable and not tested. But there is some sample output which will appear in the version (and always be the same).
cA bug test, sorted as cbc oneA bug test, sorted as cxc twoA bug test, sorted as cbc three
random()
While the next cell is random, the returned value will never be more than 0.01 away from 12, since the random() function stays between 0 and 1. So we provide 12.005 as the expected answer, but test with an absolute tolerance of \epsilon=0.006.
12 + 0.01*random()
Sage has some functions which affect output, generally making mathematics look more like mathematics via syntax. This is a simple test, and you should see the variable and superscript in italics, properly formatted as output when viewed within HTML output. We have provided expected output for doctesting, but it is sort of silly to have this as part of output, even if it is instructive.
pretty_print(html("$a^2$"))
Sage, and by extension, the Sage Cell Server, can interpret several languages. The next example has code in the R language,R a popular open source language for statistics. As an author, you add the attribute language="r" to your sage element. (The default language is Sage, so you do not need to indicate that repeatedly.) Note that a language like R likes to use a less than character, <, special character in XML. You need to escape it by writing < as we have done in the source for this example. (See the discussion in .)
As a reader you learn that the Evaluate button for a pre-loaded Sage cell will indicate the language in use.
The Sage Cell Server supports the following languages: sage, gap, gp, html, maxima, octave, python, r, and singular.
Here is another R cell. Unfortunately, it seems Sage's doctest facility cannot be used easily with code from other languages. In the source for this example, we have employed the XML escape sequence, < several times (see ).
The Sage Cell server imports a few important R packages. As of 2022-06-04 these are deSolve, ggplot2, pracma, survey, swirl, and tidyverse. This next example uses the ggplot library for both a data set and the plotting capabilities. Note the initial use of the library() function. This is a modified version of the Bubble plot example at Top 50 ggplot2 Visualizations The Master List.
# load package and data
library(ggplot2)
data(mpg, package="ggplot2")
mpg_select <- mpg[mpg$manufacturer %in% c("audi", "ford", "honda", "hyundai"), ]
# Scatterplot
g <- ggplot(mpg_select, aes(displ, cty)) +
labs(subtitle="mpg: Displacement vs City Mileage",
title="Bubble chart")
g + geom_jitter(aes(col=manufacturer, size=hwy)) +
geom_smooth(aes(col=manufacturer), method="lm", se=F)
Here is a blank Sage cell that you may use for practice and experimentation with the commands above. Note that this cell allows a choice of languages, and is not linked with any of the previous cells, so a reader would need to start fresh, or cut/paste definitions from other cells.
On the other hand a sage element with no content will also create an empty Sage cell for the reader's use, but now it will be specific to a particular language and linked to others of the same language. Run the R cell above that defines the variable ruth and then try typing summary(ruth) in the cell below.
You can make Sage blocks which are of type="invisible", which will never be shown to a reader, but which get doctested. Why do this? If some code produces an error, and you hope it is fixed someday, use an invisible block to raise the error. Once fixed, the doctest will fail, and you can adjust your commentary to suit. There is such a block right now, but you will need to go to the source to see it.
graphs(augment='vertices').next()
Our maximum width for text, designed for readability, suggests you should format your Sage code with a maximum of about 54 characters. On a mobile device, the number of displayed characters might be as low as 28 in portrait orientation, and again around 50 in landscape. You can use a variety of techniques to shorten long lines, such as using intermediate variables. Since Sage is just a huge Python library, you can use any of Python's facilities for handling long lines. These include a continuation character (which I try to avoid using) or natural places where you can break long lines, such as between entries of a list. Also, if writing loops or functions, you may wish to have your indentation be only two characters wide (rather than, say, four).
Sage output can sometimes be quite long, though this has improved with some changes in Sage's output routines. Output code should be included primarily for doctesting purposes, and in this use, you may break at almost whitespace character and the doctesting framework will adjust accordingly. You may wish to show sample output in a static format, like a PDF, so you can consider formatting your output to fit the width constraints of that medium. Or you may even adjust exactly what is output, to keep it from being too verbose. Sage doctesting also allows for a wild-card style syntax which allows you to skip over huge chunks of meaningless or unpredictable output, such as tracebacks on error messages.
This paragraph is just a placeholder. It has handful of index entries, all starting with the letters gas, taken from Indexing for Editors and Authors: A Practical Guide to Understanding Indexes by Leise, Mertes, and Badgett. The intent is to test letter-by-letter versus word-by-word sorting of index entries. We use a word-by-word order, resulting in:
gas
gas masks
gas production
gas works
gasoline
gastritis
gasolinegas worksgasgas masksgas productiongastritisTitled Sage CellsSage cellwith a title
integral(sin(x)^2, x)
You can place Sage cells inside of a paragraphs if you want to give them a title, but no numbers, .
An Interesting CorollaryFundamental Structures
This is an objectives element you are reading, and this is its introduction. This early section has really grown and tries to accomplish many things. Not all of them are listed here.
Display various blocks, fundamental units of the flow.
More.
Evermore.
This concludes the (incomplete) objectives for this section, so now we can carry-on as before.
This is a cross-reference to one of the objectives above, forced to use the phrase-global form of the text. It should describe the objective as belonging to the section (rather than the objectives), since objectives are one-per-subdivision and are numbered based upon the containing division: . For comparison this is the (forced) type-global cross-reference: .
The Fundamental Theorem comes in two flavors, where usually one is a corollary of the other.
Second Version of FTCLeibniz, NewtonFundamental Theorem of CalculusCorollary
Suppose f(x) is a continuous function. Then \frac{d}{dx}\definiteintegral{a}{x}{f(t)}{t}=f(x).
We simply take the indicated derivative, applying Theorem at \frac{d}{dx}\definiteintegral{a}{x}{f(t)}{t}&=\frac{d}{dx}\left(F(x)-F(a)\right)&=\frac{d}{dx}F(x)-\frac{d}{dx}F(a)&=f(x)-0 = f(x).
A justification, which is one of the variants of a proof.
Alternate Proof
You can have multiple proofs, and they can have titles which replace the word Proof as a heading. Here we just exercise displayed math with no automatic numbering, and an elective number on the middle equation.\frac{d}{dx}\definiteintegral{a}{x}{f(t)}{t}&=\frac{d}{dx}\left(F(x)-F(a)\right)&=\frac{d}{dx}F(x)-\frac{d}{dx}F(a)&=f(x)-0 = f(x)
The alternative version of the Fundamental Theorem (FTC) in is a compact way to express the result.
For testing purposes, there is a simple bare Sage Cell here.
c = 832
c
A Mysterious Derivative!
So if we define a function with its variable employed as a limit of integration, like so K(z)=\definiteintegral{345}{z}{x^4\sin(x^2)}{x} then we get the derivative of that function so easily it seems like a mystery, \frac{d}{dz}K(z)=z^4\sin(z^2). That's it.
For testing purposes, there is a simple Sage Cell here, buried inside an example that should be a knowl (embedded in the page).
2+2
We test a Sage cell inside a knowl, which should set the value of a variable that will be available to subsequent cells within the knowl.
a = 6
a
b = a + 10
b
Even if you ran the cell at the top of this page, within this knowl the value of the variable c is not known, so the next cell will cause an error.
c + 400
The Sage cells on a page will remember results computed elsewhere on the page. If you rely on this feature, remind your readers to evaluate all the necessary cells and that they perhaps need to be evaluated in a certain order.
c/2
There are some Sage cells in the previous (knowled) example. The results there are restricted to the knowl. In other words, the scope of those cells is the knowl. So if you opened the example and executed the Sage cells there, or if you skipped the example entirely, the next cell should not know the values of those variables and will raise an error.
a + b
We cross-reference the example just prior, , to test the simple Sage cells that will now be part of a cross-reference knowl (an external file).
An Equivalent Claim
This claim is an equivalence: it is true if and only if it is correct.
Our purpose here is to show how you can structure a proof with cases, such as an equivalence structured with the arrows typically used to demonstrate the two directions involved in the proof, by using the direction attribute on a case element.
Nulla non lectus suscipit, bibendum leo quis, dignissim justo. In urna turpis, tincidunt id elementum id, faucibus ac tellus.
Quisque auctor ligula turpis, ut aliquam urna consectetur hendrerit. Aenean porta dolor et justo facilisis feugiat in sed sapien. Nullam porta ex et commodo semper.
Case 3b: The inductive step
A case may also have a title, whose formatting and structure is entirely up to the author. This then becomes the text of a cross-reference, as well.
Why Not Try This?
A case (or any other element with a default title) did not always handle title-ending punctuation correctly. So we try an example title with a question mark.
Necessity
If you like, you can have both indications.
No direction, no title, then just a generic title.
Exciting Proof!
We test here that punctuation at the end of the title of a proof is handled correctly.
Exact Proof
This proof should fill exactly three lines (as of defaults in place 2018-12-31) and so the tombstone/Halmos should be on a fourth line, and then flush right. xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx.
A List of Equivalent Statements
The following are equivalent.
This statement is equivalent to all those below.
This statement is equivalent to the statement above and to all those below.
This statement is equivalent to the two statements above and to the statement below.
This statement is equivalent to all those above.
Our purpose here is to show how you can structure a proof with cases to address the circular logic required to prove the equivalence of a list of statements, by using the direction attribute on a case element. You should order the list of statements in the order that you would like to prove ``this statement implies the next.''
Here we would prove that the first statement implies the second.
Here we would prove that the second statement implies the third.
The trickiest case
This time we include a title to describe the nature of this case. But we would still need to prove that the third statement implies the last.
Wrap-around
Finally, we would complete the cycle of logic by proving that the last statement implies the first.
We can also use direction set to cycle in a stand-alone proof of our TFAE claim. If we include a ref on the proof that points to the original claim, then the formatting of the markers on the statement list will be honored in our cases.
Once again we will prove that the four statements in are equivalent.
Another argument that the first statement implies the second.
And another argument that the second statement implies the third.
Not so tricky this time
Why did we find it so difficult before to prove that the third statement implies the last?
Wrap-around
And once more we complete the cycle of logic.
A couple more times to check that the default list markers get applied to the directional cases properly.
Another List of Equivalent Statements
The ol that creates the list below does not have marker.
This statement is equivalent to the two below.
This statement is equivalent to both the statement above and to the statement below.
This statement is equivalent to the two above.
You know the drill by now.
Does the first statement imply the second?
The middle case
Does the second statement imply the third?
And finally, does the third imply the first?
This proof includes a ref to the preceding claim.
Does the first statement imply the second?
The middle case
Does the second statement imply the third?
And finally, does the third imply the first?
This proof does not include a ref, and so the direction indicators get default markers.
Does the first statement imply the second?
And finally, does the second imply the first?
A Pedagogical Note about Symbolic and Numerical Integrals
The Fundamental Theorem explains why we use the same notation for a definite integral, which is a numerical calculation,Which I think sometimes students lose sight of. and an antiderivative, which is a symbolic expression.
Essay Question: Compare and Contrast
Write a short paragraph which compares, and contrasts, the definite and indefinite integral. This is an exercise which sits in the midst of the narrative, so is formatted more like an example or a remark. It can have a hint and a solution, but this one does not. It can have a title, which this one does.
Start writing!
Advice
Using an integral sign for an antiderivative (aka indefinite integral) would seem to make the Fundamental Theorem a fait accompli. So I would suggest not conflating the notation for two very different things until the Fundamental Theorem exposes them as being highly related.
An Example of Structure
This is an example of an example with a bit more structure. Specifically, the example has a title, as usual, but then has a statement, which is separate from the solution. Why did we implement an example in two ways?
Authors asked for it and it seemed a very natural thing to do, even if we only had an unstructured version for a long time.
An Example of a Question
Any kind of question can be marked as such with question. Or similarly, as a problem. They behave identically to examples, such as the one preceding and are numbered along with theorems, examples. etc.
You can have a solution. Or several, even if you don't ask a question.
See?
An Inline Exercise
There are lots of exercises in this sample article, but mostly they are in special exercise sections. Sometimes you just want to sprinkle some exercises through the narrative. We call these inline exercises, in contrast to divisional exercises. The inline exercises look a bit more like a theorem or definition, with titles and fully-qualified numbers.
These may also have hints, answers and solutions.
A good hint.
42.
If your exercise feels like proving a theorem, then you might want to make some comments, but also clearly delineate which part of the solution is a the complete proof.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin lorem diam, convallis in nulla sed, accumsan fermentum urna. Pellentesque aliquet leo elit, ut consequat nunc dapibus ac. Sed lobortis leo tincidunt, vulputate nunc at, ultricies leo. Vivamus purus diam, tristique laoreet purus eget, mollis gravida sapien. Nunc vulputate nisl ac mauris hendrerit cursus. Sed vel molestie velit. Suspendisse sem sem, elementum at vehicula id, volutpat ac mi. Nullam ullamcorper fringilla purus in accumsan. Mauris at nunc accumsan orci dictum vulputate id id augue. Suspendisse at dignissim elit, non euismod nunc. Aliquam faucibus magna ac molestie semper. Aliquam hendrerit sem sit amet metus congue tempor. Donec laoreet laoreet metus, id interdum purus mattis vulputate. Proin condimentum vitae erat varius mollis. Donec venenatis libero sed turpis pretium tempor.
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra. Integer sagittis dictum turpis vel aliquet. Fusce ut suscipit dolor, nec tristique nisl. Aenean luctus, leo et ornare fermentum, nibh dui vulputate leo, nec tincidunt augue ipsum sed odio. Nunc non erat sollicitudin, iaculis eros consequat, dapibus eros.
An Example of with \frac12 math formula \displaystyle{\int e^x \, dx} in the title
Just for testing math in knowls,
and also extra whitespace in a p.
There are many different blocks you can employ, and they mostly behave the same way. A projectproject is very similar to a questionquestion or problemproblem
Start Exploring
You could grab the minimal.xml file from the examples/minimal directory and experiment with that.
Projects get their own independent numbering scheme, since they may be central to your textbook, workbook, or lab manual. If you process this sample article with level for project numbering set to 0 then you will get consecutive numbers from the beginning of your book, starting with 1.
Exploring Explorations
This is an exploration.exploration Other similar possibilities are projectproject, activityactivity, tasktask, and investigationinvestigation.
Note that projects, activities, explorations, tasks and investigations share the independent numbering scheme, so it is really only intended you use one of these. If you want a variant of the name (Directed Activity) you can use the renamerename an environment facility ().
This is a solution to the exploration. In practice, you might choose to not make this visible for students, but instead include it as part of some guidance you might provide to instructors ( an Instructor's Manual).
Hints, Answers, Solutions
This is quite the activity upcoming. This is a prelude authored within the activity element, but visually just prior.
Another variant of these project-like items is to possibly include a hint and an answer before the solution.
Just a little help.
The result, but no help in getting there.
Everything to get it all done, in detail.
This was quite the activity just now. This is a postlude authored within the activity element, but visually just after.
A Note on Remarks
remark, convention, note, observation and warning are designed to hold very simple contents, with no additional structure (no proofs, no solutions, ).
But they do carry a title and a number, can be the target of a cross-reference, and may be optionally knowlized in HTML with the html.knowl.remark processing switch.
And distinctly different from a note in a biblioA gratuitous footnote to test prior bug confusing this with a note in a biblio..
An exercise can be structured with task.
A very structured exercise
This is an over-arching introduction to the whole exercise. We follow with some tasks. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
A super-simple task
This first task is very simple, just a paragraph. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
Now three paragraphs. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
A title of a task that has a subtask with an answer for the Solutions
This second task is further divided by more tasks. This is its introduction. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
A task with a title and an answer for the Solutions
A really simple subtask. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
A short paragraph, before an answer.
With a proof.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
And a bit more to say.
A subtask with an answer. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
Right! In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
Three simple sub-sub-tasks. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
First subsubtask. Short paragraph.
A second three-deep subsubtask!
Second subsubtask. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
Third subsubtask. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
The conclusion of the structured subtask. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
A simple task as the last subtask. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
This concludes our structured second task. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
This third top-level task is intermediate in complexity, you are reading the statement, which is followed by more items. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
One hint. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
First answer. In interdum suscipit ullamcorper.
Second answer. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
At last, the solution. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
This is a conclusion where you could summarize the exercise. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
The following project is nearly identical to the preceding exercise.
A very structured project
The next block is a project, demonstrating the use of the task element to structure its parts. You are reading the prelude now. The project has lots of nonsense words, so we can test spacing the nested items. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
This is an over-arching introduction to the whole project. We follow with some tasks. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
This first task is very simple, just a paragraph. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
Now three paragraphs. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
This second task is further divided by more tasks. This is its introduction. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
A really simple subtask. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
A short paragraph, before an answer.
With a proof.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
And a bit more to say.
A subtask with an answer. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
Right! In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
Two simple sub-sub-tasks. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
First subsubtask. Short paragraph.
Second subsubtask. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
Third subsubtask. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
The conclusion of the structured subtask. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
A simple task as the last subtask. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
This concludes our structured second task. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
This third top-level task is intermediate in complexity, you are reading the statement, which is followed by more items. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
One hint. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
First answer. In interdum suscipit ullamcorper.
Second answer. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
At last, the solution. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
This is a conclusion where you could summarize the project. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
This postlude appears visually outside the project, but is authored within, to make clear its attachment to the project. In interdum suscipit ullamcorper. Morbi sit amet malesuada augue, id vestibulum magna. Nulla blandit dui metus, malesuada mollis sapien ullamcorper sit amet. Nulla at neque nisi. Integer vel porta felis.
Notation mathématique 2
The following example, from Elise Desgreniers, is structured with task.
Écrivez chacun des exemples suivants avec les conditions pertinentes.
Soit l'ensemble A=\lbrace 1,2,3,4,5\rbrace.
On constate que cet ensemble contient uniquement des entiers positifs allant de 1 à 5.
Donc, on peut écrire A=\lbrace x\mid x\in\mathbb{N}\text{ et } 1\leq x\leq 5\rbrace.
\{3,6,9,12,15,\ldots,27,30\}
Ce sont des multiples de 3.
\{x\mid x=3y \text{ et } 1\leq y\leq 10 \text{ et } y\in\mathbb{N}\}
\{1,3,5,7,9,11,\ldots\}
Ce sont des nombres impairs.
\{x\mid x\mod 2=1 \text{ et } x\in\mathbb{N}\}
\{2,3,5,7,11,13,17,19,23,\ldots\}
Ce sont des nombres premiers.
\{x\mid x\text{ est un nombre premier positif}\}
\{1,4,9,16,25,36,\ldots,961\}
Ce sont des carrés parfaits.
\{x\mid x=y^2 \text{ et } 1\leq y\leq 31\text{ et } y\in\mathbb{N}\}
\{1,8,27,64,125,\ldots\}
Ce sont des cubes parfaits.
\{x\mid x=y^3 \text{ et } y\in\mathbb{N^*}\}
Notes or examples related to computation or technology can go in blocks of the same name.
Sample Use of Sage
This would be a good place to talk about Sage, including a cell or two.
diff(x^4, x)
But you might want to describe how to use some other calculator, or maybe some numerical method.
A paragraphs with a project with an answer
The solutions to a project (and similar) once did not migrate to the automatically-generated solutions.
A simple project, no tasks, just an answer.
Here's the answer we are looking for.
This is an exercise in an Exercises subdivision at the level of a subsubsection. There is no question other than if the numbering is appropriate. Here is a self-referential link: Exercise.
The subsubsection has no title in the source, so one is provided automatically, and will adjust according to the language of the document.
This solution will migrate to a list of solutions in the backmatter. We include a sidebyside as a test.
This is a skinny paragraph which should be just 30% of the width.
And another skinny paragraph which should also be just 30% of the width.
An exercise can be structured with parts, called task. This is the introduction.
Do this.
And the other thing.
reading questions
A set of reading questions may have an introduction, perhaps for preparatory explanation.
If a student has logged in to the HTML version,
then they can answer the reading questions directly in the book.
Inline math LaTeX can be entered using
$...$ or \(...\) delimiters,
and inline AsciiMath using backticks `...` as delimiters.
Here are some `gratuitous backticks` to check that AsciiMath is only
active in the answers to reading questions.
This is a reading question that you might have a student answer prior to a class session,
based on reading part of the book.
A quick glance before class can help you tailor class time to the specific needs of your students.
The perfect reading question will reveal whether the student has read and understood the material,
and will be difficult to answer if they have not.
What do you think of that?
And a second one, with a cross-reference to the first,
as a check on numbering:
.
Reading questions are allowed to have answers,
but providing answers misses the point of a reading question,
and the answer knowl interacts poorly with the mechanism used to
allow students to answer directly in the book.
Do you think the schema should ban answers to reading questions?
And for symmetry, a conclusion.
glossary
A glossary may have a headnote, perhaps with some explanation. This glossary is a specialized division within a section. Placement in the back matter is another option, see the .
bar
A part of foobar. See .
foobar
A synonym for the acronym FUBAR.
Solutions for This Subsectionsolutionsfor a division
This is an introduction, where you might explain that this division of this subsection contains various hints, answers, solutions of inline exercises, divisional exercises, and/or project-like blocks. See the source to see just how this solutions division was built.
And a conclusion to this solutions division, which may not be readily apparent as distinct from the final division's worth of solutions, but since it is not prefixed with a number, it may be different enough.
Theorem-Like Environments
There are a variety of pre-defined environments in . All take a title, and must have a statement. Some have proofs (theorems, corollaries, ), while some do not have proofs (conjectures, axioms, principles).
The Title Principle
It is a fundamental principle that many elements can have a title. Try it and see. If you get better formatting, then it is being recognized. If it looks very plain, check the documentation and perhaps make a feature request.
More precisely, theorem, corollary, lemma, algorithm, proposition, claim, fact, and identity, all behave exactly the same, requiring a statement (as a sequence of paragraphs) followed by an optional proof, and may have an optional title. The elements axiom, conjecture, principle, heuristic, hypothesis, and assumption are functionally the same, barring a proof (since they would never have one!). Definitions are an exception, as it is natural to place notation withinsee the source for Definition for an example.
Linking Sage CellsSage cellslinking
Sage cells share their results on a per-webpage basis, or a per-knowl basis, so if you move to a new chapter, section, or subsection that happens to be on another webpage, your Sage computations are gone and you start fresh. But maybe you need some results from elsewhere. As an author, you can make an exact copy of a cell in another location by placing the code in an external file, which is pure text, freed from any need to format for XML processing. So, in particular, there is no need to escape ampersands and angle brackets, nor is there employment of the CDATA mechanism. But the real value is that there is just one version to edit, and any changes will be reflected in both copies. We demonstrate this in the sample book, since it has the xinclude mechanism in place. In the chapter on groups, find the section on Sage and then find the discussion of subgroups, and you will find an example of two identical Sage cells produced from one source file.
You can also specify certain cells to be auto-evaluated, by setting the auto-evaluate attribute to yes. The resulting cell will not have a button for evaluation (so editing it would be pointless). See the source of this sample article for the two examples below.
2023-08-17: support just now is for the use case of a small portion of code, not a huge library of helper routines.
Two cells with the default language sage.
k = 404
2*k
Two cells with language python.
k = 4112
print("Assigned an initial value to the variable k")
k = 2*k
print(k)
HierarchyStructure
This section of this article has subsections and subsubsections. In a book you can have chapters enclosing multiple sections. There is one finer subdivision, it is achieved with the paragraphs element.
It is basically a sequence of paragraphs, where the first one gets an inline title. You are reading the second, and final, paragraph of one right now. It is useful for organizing very short documents, where numbered subdivisions might be overkill.
A Second Paragraphs
This is a second consecutive paragraphs element, so should seem related to its title, but distinct from the two paragraphs in the grouping with the title Structure immediately prior.
Assemblages: Collections and Summaries
An assemblage is a collection, or summary, that does not have much structure to it. So you are limited to paragraphs and friends (p, blockquote, pre) and side-by-sides that do not contain captioned items (sidebyside, sbsgroup). The intent is that contents are not numbered, so cannot be cross-referenced individually, and so also do not become knowls. You may place image, tabular, and program inside a sidebyside, in addition to other objects that do not have captions. Note that p may by extension contain lists (ol, ul, dl). Despite limited structure, the presentation should draw attention to it, because the contents should be seen as more important in some way. It should be highlighted in some manner. If you need to connect the entire assemblage with material elsewhere, you can do that with the usual xref/xml:id mechanism.assemblage
What have we seen so far in this (disorganized) sample?
Theorems, definitions and corollaries. ()
Sage cells, including with R. ()
Lots of document structure, like introductions and conclusions (next). ()
A sample table, as a tabular inside a sidebyside with no caption, follows.
ABCUnoDosTres
This is a small assemblage with no title, simply to make sure the surrounding box behaves properly, especially for output.
It is acceptable for an assemblage to contain mathematical content, even in its title.
Introductions and ConclusionsAn Introductory Introduction
Any subdivision may have a sequence of paragraphs within an introduction that precedes subsequent further subdivisions. You are reading one now. They are always leaves of the document structure, so are rendered on some pages that reference the following subdivisions.
An introduction or conclusion is an extremely restrictive container with simple presentation. A title is optional (and probably not advisable). Content is meant to be short and unstructured, in particular, nothing that can be numbered is allowed. If this feels too restrictive, then place your content in an initial numbered subdivision and perhaps title it Introduction. Or make your entire subdivion unstructured and place whatever you want into it.
This ends this introduction to introductions.
Test One
An intervening subsubsection just after an introduction.
Test Two
An intervening subsection section which contains an exercises division which must be at the level of a Subsubsubsection.
An inline exercise to examine any clash with divisional exercises below.
An answer so there is something to appear in a solutions.
What Did You Learn?
A mock exercise to appease validation.
An answer so there is something to appear in a solutions.
And a second to help with formatting the division heading.
A mock exercise to appease validation.
An answer so there is something to appear in a solutions.
And a second to help with formatting the division heading.
Test Three
An intervening subsubsection just before a conclusion.
Entirely analogous to introductions are conclusions. Any subdivision may have a sequence of paragraphs within a conclusion that follows previous further subdivisions. You are reading one now. They are always leaves of the document structure, so are rendered on some pages that reference the preceding subdivisions.
This concludes this conclusion (and this subsection and this section).
Some Paragraph-Level Markup
Text within a paragraph may be emphasizedememphasisstyling wordsemstyling wordsemphasis with em or if you want to take it to the next level you can identify the text as an alertalertstyling wordsalert with alert.
Similarly, within a paragraph, you can identify edits between versions as inserted text that has been addedstyling wordsinsert with insert or as deleted text that has been removedstyling wordsdelete with delete. Note that these identified edits are slightly different than stale text that you want to retain, but which is no longer relevantstyling wordsstale, which is accomplished with stale. The original request for stale text came from an instructor with an online list of student topics for presentations, and as students claimed topics they were marked as no longer available for other students.
If you need a fill-in blank, like this , it can be obtained with an empty fillin element that defaults to roughly a 10-character width. You can use the characters attribute to make the rule longer or shorter, such as a 40-character blank: . The character count is approximate, based on typical character widths within a proportional font carrying English language text. Adjust to suit, or request a language-specific adjustment if it is critical.
This paragraph is intended to make a fillin appear right at the start of the second line in print and then the next paragraph has nothing but a fillin. Both are for testing purposes.
The following are fillin with rows and/or cols attributes (at least one of which is greater than 1): , , .
Long after we started this mess, we added tags to mark up tags and attributes. The elements are: tag, tage, attr. Examples of how these render are (respectively): section, hash, width. Perhaps this document will make greater use of these tags.
We supply two provisional cross-references for testing purposes only: , .
A conclusion here, which we fill with some numbering tests.
This is a cross-reference to one of the outcomes, forced to use the type-global form of the text. It should describe the outcome as belonging to the section (rather than the outcomes), since outcomes are one-per-subdivision and are numbered based upon the containing division: . For comparison this is the (forced) type-global cross-reference: .
Fundamental Structures, Revisited
This is a outcomes element you are reading, and this is its introduction. This early section has really grown and we have tried to accomplish many things. Not all of them are listed here.
Display various blocks, fundamental units of the flow.
More, and this is what the cross-references above are pointing to.
Evermore.
This concludes the (incomplete) outcomes for this section, so now we can carry-on to the next section.
Some Facts and Figuresfootnotes
Because of the Fundamental TheoremFirst test footnote, for every derivative we know, there is an antiderivative we might find useful. Because of the Fundamental Theorem of CalculusSecond test footnote, we recycle the \int symbol as notation for an antiderivative.
Derivatives
\frac{d}{dx}x^n = nx^{n-1}
\frac{d}{dx}e^x = e^x
\frac{d}{dx}\cos(x) = -\sin(x)
Antiderivatives
\indefiniteintegral{x^n}{x} = \displaystyle\frac{x^{n-1}}{n+1}\text{ if }n\neq -1
\indefiniteintegral{e^x}{x} = e^x
\indefiniteintegral{\sin(x)}{x} = -\cos(x)
You canThird test footnote gain a greater understanding of derivatives by studying the graphs of functions with their derivatives. CanFourth test footnote you discern the derivativeantiderivativeFifth test footnote relationship in Figure?
A function and its derivative
a third degree polynomial with a local max and a local min;
its derivative is plotted on the same axes
ListsSixth test footnote can have multiple columns. With HTML items displayed in row-major order (horizontally first) andSeventh test footnote with items are displayed in column-major order (vertically first). When one order, or the other, becomes workable in both variants, maybe we will be consistent in presentation. (Note that with just one row, it makes no difference.) We used it above for the two itemsderivatives and integralswhere each item was a list of its own. Here are two more examples, one with short snippets and lots of columns, the other with lots of text in paragraphs.listmulticolumn
Red
Blue
Green
Purple
Yellow
Black
Orange
Pink
Salmonstrange colors
Aqua
Cyan
Pucestrange colors
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin lorem diam, convallis in nulla sed, accumsan fermentum urna. Pellentesque aliquet leo elit, ut consequat nunc dapibus ac. Sed lobortis leo tincidunt, vulputate nunc at, ultricies leo. Vivamus purus diam, tristique laoreet purus eget, mollis gravida sapien. Nunc vulputate nisl ac mauris hendrerit cursus. Sed vel molestie velit. Suspendisse sem sem, elementum at vehicula id, volutpat ac mi. Nullam ullamcorper fringilla purus in accumsan. Mauris at nunc accumsan orci dictum vulputate id id augue. Suspendisse at dignissim elit, non euismod nunc. Aliquam faucibus magna ac molestie semper. Aliquam hendrerit sem sit amet metus congue tempor. Donec laoreet laoreet metus, id interdum purus mattis vulputate. Proin condimentum vitae erat varius mollis. Donec venenatis libero sed turpis pretium tempor.
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra. Integer sagittis dictum turpis vel aliquet. Fusce ut suscipit dolor, nec tristique nisl. Aenean luctus, leo et ornare fermentum, nibh dui vulputate leo, nec tincidunt augue ipsum sed odio. Nunc non erat sollicitudin, iaculis eros consequat, dapibus eros.
Donec vestibulum auctor nisl. Nullam placerat interdum dui. Quisque lobortis scelerisque augue imperdiet placerat. Maecenas ultricies massa tempor, laoreet urna a, eleifend enim. Integer sed suscipit odio. Pellentesque non dapibus diam, eget tempus dui. Maecenas sollicitudin magna viverra, egestas velit nec, tristique sem. Cras iaculis mattis dui ac cursus. Integer volutpat, urna vel tempus convallis, erat nisi consectetur turpis, id varius dolor lorem vitae mauris. Phasellus erat orci, laoreet commodo gravida quis, congue in lacus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent at bibendum turpis. Pellentesque est nisl, dapibus at sagittis non, ultricies in nunc. Etiam ipsum arcu, porta sed feugiat eget, facilisis nec libero. Mauris tempor convallis felis.
Cras iaculis sapien elit, at convallis ligula convallis nec. Duis ante tortor, euismod a libero vitae, ornare viverra purus. Pellentesque facilisis urna a velit volutpat, in malesuada tortor porttitor. Sed vehicula mauris id lectus dignissim, eget consectetur dui pellentesque. Sed vel quam molestie, euismod ligula ac, venenatis arcu. Fusce sit amet sapien non urna dignissim tempus in vitae metus. Aliquam arcu turpis, mattis non libero eu, lacinia feugiat turpis. Phasellus rhoncus lacinia lacus facilisis ullamcorper. Praesent hendrerit accumsan neque, eu dignissim est consequat sed. Nulla facilisi. Proin at mi scelerisque, scelerisque felis ut, tristique diam. Proin in leo in lorem porttitor varius. Praesent condimentum in dui sit amet blandit. In imperdiet blandit congue.
Ut nec sem vitae ipsum interdum vestibulum sit amet sed velit. Aliquam tempor nibh vitae augue pulvinar, at ultricies urna commodo. Donec in porta lectus, ac sagittis felis. Vestibulum tincidunt quis metus facilisis luctus. In lobortis lacus vel ornare vehicula. Duis aliquet, ligula semper sodales adipiscing, augue nibh ornare ante, quis pulvinar justo mi eget mi. Mauris varius imperdiet vehicula. Duis dignissim magna quis velit mattis, in cursus lectus vehicula. Morbi quis tempus felis, ut gravida nisi.
Vivamus eu commodo est, pretium fringilla dolor. Curabitur vel sollicitudin libero. Integer sit amet auctor felis. Maecenas sagittis erat at ante feugiat, in tincidunt ligula pretium. Integer eget auctor ipsum, quis volutpat felis. Morbi id dignissim eros. Suspendisse aliquet pulvinar lorem gravida egestas. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent nec massa dui. Suspendisse convallis lacus sit amet adipiscing varius. Suspendisse tempus diam vitae justo ornare, in condimentum metus pharetra. Curabitur sem dolor, auctor vitae sagittis vestibulum, posuere imperdiet metus. Etiam pretium lacus urna, vel auctor diam tincidunt non. Etiam viverra sodales iaculis.
Sed varius leo urna. Phasellus tempus mollis ultricies. Curabitur non neque aliquet, facilisis tortor in, sodales dui. Donec hendrerit ultricies nulla mollis rhoncus. In vel lobortis est. Vestibulum consectetur lacus vel sem dignissim vestibulum. Etiam sed elementum ligula, vel congue turpis. Morbi nec diam mattis, venenatis eros et, elementum tellus. Integer sed orci ornare, elementum elit id, lacinia augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In et libero id turpis pharetra faucibus. Integer consequat dignissim semper. Donec pretium magna at ullamcorper ultricies. Nam quis suscipit elit. Donec cursus tellus et venenatis feugiat. Mauris dictum molestie leo, vitae aliquet metus luctus vitae.
Ut id iaculis leo. Sed nec vestibulum mi. Mauris est mauris, porta in nulla eget, bibendum luctus nisl. Praesent et posuere felis, molestie vehicula velit. Nulla a nunc venenatis, aliquam orci nec, congue felis. Vestibulum a dolor nisi. Morbi sed nisi nulla. Nam iaculis felis a enim blandit, at venenatis diam congue. Nulla augue diam, egestas eget fermentum nec, posuere eget risus. Praesent egestas nulla eros, eget accumsan augue euismod vel. Pellentesque pellentesque non erat vitae posuere. Curabitur lacus arcu, varius sed risus ut, ullamcorper tincidunt lorem. Sed et lacus dignissim, tincidunt nisl ac, porttitor sapien.
Some Advanced Ideas
The multi-row displayed mathematics in the proof of the Fundamental Theorem had equations aligned on the equals signs via the & character. Sometimes you don't want that. Here is an example with some differential equations, with each equation centered and unnumbered,{\mathcal L}(y')(s) = s {\mathcal L}(y)(s) - y(0) = s Y(s) - y(0){\mathcal L}(y'')(s) = s^2 {\mathcal L}(y)(s) - sy(0) - y'(0)= s^2 Y(s) - sy(0) - y'(0).
\rhothis symbol could be used for lots of things, but we are just trying to make a super-long description to get it to wrap within the column where it belongs, which is sometimes set to a fixed width to accomodate really complicated explanationsrho, a test
Just prior to this sentence, in the middle of this paragraph, is an idx and a notation, adjacent, but separated by some whitespace in the authored source. That insignificant whitespace will be removed akways, which will be a (slightly) noticeable improvement in the output. We test referencing notation here, placed before the sentence-ending period and right after some inline mathematicsfor \mathbb{Z}_n\mathbb{Z}_n(ring of) integers modulo n.
has a device where you can interrupt a sequence of equations with a small amout of text and preserve the equation alignment on either side. Here are two tests of that device, with aligned equations and non-aligned equations. Study the source to see use and differences. (The math does not make sense.)
Aligned and numbered first.{\mathcal L}(y')(s) &= s {\mathcal L}(y)(s) - y(0) = s Y(s) - y(0){\mathcal L}(y'')(s) &= s^2 {\mathcal L}(y)(s) - sy(0) - y'(0)= s^2 Y(s) - sy(0) - y'(0).And so it follows that,{\mathcal L}(y')(s)^{++} &= s {\mathcal L}(y)(s) - y(0) = s Y(s) - y(0){\mathcal L}(y'')(s)^{5} &= s^2 {\mathcal L}(y)(s) - sy(0) - y'(0)= s^2 Y(s) - sy(0) - y'(0).
Now with no numbers and no alignment. We include two cross-references in the intertext portion for testing.{\mathcal L}(y')(s) = s {\mathcal L}(y)(s) - y(0) = s Y(s) - y(0){\mathcal L}(y'')(s) = s^2 {\mathcal L}(y)(s) - sy(0) - y'(0)= s^2 Y(s) - sy(0) - y'(0).First an external reference to and internal cross-reference to . And so it follows that,{\mathcal L}(y')(s)^{++} = s {\mathcal L}(y)(s) - y(0) = s Y(s) - y(0){\mathcal L}(y'')(s)^{5} = s^2 {\mathcal L}(y)(s) - sy(0) - y'(0)= s^2 Y(s) - sy(0) - y'(0).
Tables can get quite complex. Simple ones are simpler, such as this example of numerical computations for Euler's method in just a bit.
But first we make a figure with two very simple tables next to each other. This causes the very first instance of table to actually be a subtable, which exposes a bug provoked by Emiliano Vega and fixed around 2020-08-06. (So we have to place this early to create the same behavior that exposed the bug.)
Buggy sub-tables
FirstOne
SecondTwo
Euler's approximation for Duffing's Equation with h = 0.2it_ix_iy_i00.000.00000.500010.200.10000.480020.400.19600.456030.600.28720.429540.800.37310.402751.000.45360.378361.200.52930.359171.400.60110.348081.600.67070.347491.800.74020.3603102.000.81230.3900
Mathematics
To be able to create both and HTML output (plus variations), we rely on MathJax, which in turn supports an extensive subset of the mathematical symbols normally available. The AMSMath symbol set is a good approximation. The Guide has a link to the complete list of macros supported by MathJax. We load the AMSsymbols library.
Basic Mathematics
The following is from the MathJax demonstration page, an identity due to Ramanujan:\frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\ldots} } } }
Look back at the top of the source file of this document to see how to include your macros just once. For best results keep your macros simple and semantic.
once provided modest built-in support for slanted, or beveled, or nice fractions. To wit, we mean fractions such as: \sfrac{3}{8}. Use the pre-defined \sfrac{}{} macro in your mathematics to achieve this presentation. The presentation in HTML is subpar, but could improve as MathJax provides support. It is now an author's responsibility to add support for superior typesetting for PDF output by loading the xfrac package with the following in docinfo:<math-package latex-name="xfrac" mathjax-name=""/>which is what we have done here as a test. See the Guide for more details.
We consider a system of equations. We number the first and last equation (there are just two) and include an xml:id attribute on each. We reference the whole system later as the range of equations from the first to the last.\frac{dx}{dt} \amp = x^2 - 4x - y + 4\frac{dy}{dt} \amp = x^3 - y.
Displayed Mathematics
Display mathematics is achieved with the md tag (math display), always used within a paragraph (p). As a good example of how XML syntax is superior, you author n lines of equations by enclosing each line inside of a mrow tag, rather than using n-1 separators (such as \\).
If you use no ampersands to express alignment (read ahead), then each equation is centered independently on the width of the text. This is implemented according to the AMSmath package's gather environment. Example:\frac{dx}{dt} = x^2 - 4x - y + 4\frac{dy}{dt} = x^3 - y.
An ampersand is used, in two ways, to describe positioning several equations per line, organized in columns. We have created the pre-defined macro \amp as one way specify these, but the escape sequence & may be used also. The second, fourth, sixth, ampersands separate columns, and the spacing between columns will be provided automatically. The first, third, fifth, ampersands are alignment points for the equations in each column. Typically this is placed just prior to a binary operator, such as an equal sign (\amp = ), or for a column of explanations or commentary, just prior to the \text{} macro. Note that this scenario suggests always having an odd number of ampersands in each mrow. In the example below, alignment is on the equals sign in the first two columns, and provides left-justification to the explanations in the third column. N.B.: the use below of the \text{} macro does not include mathematics within its argument. Doing so may yield unpredictable results depending on your choice of delimiters for the mathematics (and using an m tag will be ineffective).\frac{dx}{dt} \amp = x^2 - 4x - y + 4 \amp \frac{dy}{dt} \amp = x^3 - y \amp\amp x, y\text{ version}\frac{dw}{dt} \amp = z^3 - w \amp \frac{dz}{dt} \amp = z^2 - 4z - w + 4 \amp\amp z, w\text{ version}
will automatically detect the presence or absence of ampersands, but by defining macros for entire aligned equations, you can effectively hide the ampersands. So the alignment attribute can override automatic detection. We use a simple macro to demonstrate setting alignment='align' to override the use of a gather environment and use a align environment instead. Example:\myequation{\frac{dx}{dt}}{x^2 - 4x - y + 4}\myequation{\frac{dy}{dt}}{x^3 - y}.
The AMSmath package's alignat environment is a third variant of alignment. It never happens automatically, you need to ask for it with alignment="alignat". It is very similar to align but adds no space between the equation columns. So you can leave it that way, or you can add your own extra space to suit. Here is a previous example with no inter-column space:\frac{dx}{dt} \amp = x^2 - 4x - y + 4 \amp \frac{dy}{dt} \amp = x^3 - y \amp\amp x, y\text{ version}\frac{dw}{dt} \amp = z^3 - w \amp \frac{dz}{dt} \amp = z^2 - 4z - w + 4 \amp\amp z, w\text{ version}. This modified example has a middle row with three columns, while the other rows have just one column, as a test of our routines for determining the mrow with the greatest number of ampersands (and how many there are),\frac{dw}{dt} &= z^3 - w\frac{dx}{dt} &= x^2 - 4x - y + 4 & \frac{dy}{dt} &= x^3 - y&& x, y\text{ third column}\frac{dw}{dt} & = z^3 - w. Final example demonstrates that ampersands in other objects (matrices here) can wreak havoc with computing the number of columns. So we provide yet another attribute to override automatic detection, alignat-columns. This is the number of columns not the number of ampersands. Generally, for c columns, there will be 2c-1 ampersands.A &= \begin{bmatrix}1 & 2 \\ 3 & 4\end{bmatrix}
&
I &= \begin{bmatrix}1 & 0 \\ 0 & 1\end{bmatrix}. One caveat: if your number of ampersands is even (see advice above about using an odd number) behavior should still be correct, as in next example.
If you want super-precise control over alignment of the terms of a system of equations (linear or not) you can use the alignat option to advantage by not including any extra space. This example is modified slightly from a post by Alex Jordan:2x \amp {}+{} \amp y \amp {}+{} \amp 3z \amp {}={} \amp 10x \amp \amp \amp {}+{} \amp z \amp {}={} \amp 6x \amp {}+{} \amp 3y \amp {}+{} \amp 2z \amp {}={} \amp 13.Beautiful.
A long equation, to check layout on various screen sizes. This is Weil's explicit formula for the
Riemann \zeta-function:
\sum_\gamma S_-(\gamma) = \frac{\log Q}{\pi} \hat S_-(0)
+ \frac{1}{2\pi} \sum_{j=1}^d \Re\left\{ \int_{-\infty}^\infty \frac{\Gamma'}{\Gamma}\left(\frac{1}{4} + \frac{it}{2} + \mu_j\right)S_-(t) dt\right\}
- \frac{d}{2\pi}\hat S_-(0)\log \pi
.
Excessive Display Mathematics
In print versions, a long run of displayed equations often needs to be broken across pages. If you are reading some other version of this, then there is nothing to see here. But for output it could be interesting. First, with no extra effort, this page-long display should break naturally, no matter how the preceding material changes.x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2.
In this version we have turned off page breaking for the entire display, but then allowed a break at every fourth equation, so you should see a reasonably attractive page break right after one of the m^2+n^2=p^2 equations.x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2x^2+y^2=z^2a^2+b^2=c^2\alpha^2+\beta^2=\gamma^2m^2+n^2=p^2.
So. Do not take any extra steps and let figure out the breaks. If you do not like a break, modify the md to go back to the AMSmath default behavior and not break at all. Ever. Or rather, go further and modify an individual mrow to suggest that it is a good place for a break.
Displayed mathematics in has a device called intertext, allowing for short snippets of text in-between displayed equations, but alignment continues across these short breaks. For any other output format besides PDF/ there really is not the technical means to make this continued alignment happen. So we mostly do the best we can. The following is a test example. Since almost all the equations are very similar in shape, it appears that there is alignment throughout. However, for almost all output formats, the very last equation changes the horizontal positioning of the block with the final three equations, and they are not aligned with the previous equations. The exception is a PDF where we are able to take advantage of 's support and the equations should all be aligned on the equals signs.
A &= Z + 1B &= Y + 2One intertext.C &= X + 3D &= W + 4E &= V + 5Two intertext.F &= U + 6Three intertext.G &= T + 7H &= S + 8I + J + K &= P + Q + R + 9 + 10 + 11
Now for some more testing of the intertext feature. Numbering some equations, and not others, requires some care in the conversion to .
First, a numbered equation in the first group of equations.
A & = B + CIntertext: between first and second equations.P & = Q + RIntertext: between second and third equations.X & = Y + Z
Second, a numbered equation in the intermediate group of equations.
A & = B + CIntertext: between first and second equations.P & = Q + RIntertext: between second and third equations.X & = Y + Z
Third, a numbered equation in the final group of equations.
A & = B + CIntertext: between first and second equations.P & = Q + RIntertext: between second and third equations.X & = Y + Z
Fourth, no numbered equations at all.
A & = B + CIntertext: between first and second equations.P & = Q + RIntertext: between second and third equations.X & = Y + Z
This is a poorly-authored paragaph to test the conversion to HTML. There are two displayed equations, separated by a period ending the first one's sentence, which should migrate into the display, and not leave behind an empty paragraph: z+y = z. a + b = c. This final sentence should remain, inside another HTML paragraph, without the second equation's period.
Packages and MathJax Extensions
If you would like to enhance your mathematics by using a macro from a package and there is a MathJax extension which implements the same macro, then you may use this with your mathematics as we demonstrate here.
This example is from Jason Underdown.Underdown, Jason The package is named cancel and is included in the TeXLive distribution, so is fairly standard. The particular macro being demonstrated is \cancelto{}{}. \lim_{b \rightarrow \infty}\left[\cancelto{0}{-\frac{1}{s}e^{-sb}} + \frac{1}{s}\right]. Look at the source of this article to see the package name being supplied in a math-package element within the docinfo section. That is the only setup required to make the macro usable in and HTML output.canceling a termcancelto macro
See the Guide subsection about MathJax Extensions for more detail.
Advanced Mathematics
MathJax is extremely capable in rendering a subset of in web browsers, and improving all the time. You can get fairly fancy with some of its supported commands. In particular, if you need to mix in a few words with your mathematics, the \text{} macro is supported. For example, you might use an if or an otherwise in the definition of a piecewise function.
Consider that the first line below is text sandwiched in-between two Greek letters, wrapped in a \text{} macro. In HTML output we have taken care that the font for text material within display mathematics should match the font of the surrounding paragraph, as also happens with output. The second line is nearly identical in the source, but is just naked text being rendered like a slew of variables.\alpha\text{ is not equal to }\beta\alpha is not equal to \beta\alpha\neq\beta. We are not suggesting here that using words in place of symbols, as in the first line, is a good practice. (It is not.)
The following example is a good stress-test of using the \text{} macro to achieve certain effects. Note the Unicode left and right smart quotes. This a contribution from Alex Jordan as part of his work on APEX Calculus.y \rightarrow \frac{\sin(0) }{0} \rightarrow {{\text{“}}\atop{}}\frac{0}{0}{{\text{”}}\atop{}}\text{.}And another one from Alex. Note the use of the \mathord{} and \mathrel{} macros to control spacing around the mathematical symbols. Examine the source to see how the quotation marks have been authored with XML syntax for Unicode characters, since we do not allow most markup inside mathematics.\zeta(1)=\sum_{n=1}^{\infty}\frac{1}{n}\mathrel{\text{ “}\mathord{=}{\text{” }}}\prod_{p}\left(\frac{1}{1-1/p}\right)=\prod_{p}\left(\frac{1}{1-p^{-1}}\right)
Generally, you cannot use any XML elements inside of the mathematics elements. An exception is the xref element which you might want to use to provide justifications for the steps of a derivation. Here is a visual example that is mathematically meaningless,A&=B+C&&&=D+E&&&=F+G&&A nice result.
Scott Beaver likes to write short chains of equalities all in one line, with the cross-references sitting on each equals sign. Here we test the \overset and \underset macros wrapping a xref, with and without content, inside an md element. Note that \stackrel is obsolete, and \overunderset is not yet supported by MathJax (but see GitHub #2704). The mathematics is Scott's, the reasons are totally unrelated to the math.
AC-AD
\overset{}{=}
A(C-D)
\underset{}{=}
A0_{n\times p}
\overset{Thm.}{=}
0_{m\times p}
We suggest using cross-references that only display numbers (xref with text set to global) since if you stick to elements like theorem, lemma, definition, or axiom, then the numbers will be unambiguous and the target of the cross-reference will contain full information. But note that if you mix in divisions, or perhaps figures, as reasons then there is a possibility that numbers will need to be qualified by their type. We have provided an abbreviation for one cross-reference to (which will not benefit from automatic translation to other languages).
Numbered Equations
There is flexible control for numbering displayed equations, largely provided by the number attribute on the md and mrow elements, taking values of yes or no. First, a single displayed equation, with a number: x^{2} + y^2 = z^2. Now several displayed equations, all numbered.x^{3} + y^{3} = z^{3}x^{4} + y^{4} = z^{4}x^{5} + y^{5} = z^{5}.
Similar, but now the first equation's numbering is controlled by the global default value, the second is explicitly not numbered, and the third is explicitly numbered.x^{6} + y^{6} = z^{6}x^{7} + y^{7} = z^{7}x^{8} + y^{8} = z^{8}. The global default numbering choice is set in docinfo.
Local Tags on Equations
If you are not writing a research monograph, maybe (a) you will not use many numbered equations, or do not like the looks of them, or feel they scare your readers, and (b) maybe your cross-references are always local-ish, like strictly within an example or a proof. For this situation you can create, and employ, a local tag on a displayed equation. Nothing enforces the idea of what constitutes local, and there is nothing to stop you from using the same symbols more than once. With freedom comes responsibility.
Use the tag attribute on an mrow, or directly on a single-line md (one with no mrow children). The value of the tag attribute is a symbol name. The prefix d means double, and the prefix t means triple. So allowed values arestar, dstar, tstardagger, ddagger, tdaggerdaggerdbl, ddaggerdbl, tdaggerdblhash, dhash, thashmaltese, dmaltese, tmalteseCross-references to these tagged equations happens in the usual way and should behave as expected. We test the double versions to make sure the symbols render properly in various output formats.c^2 \amp = a^2+b^2c^2 \amp = a^2+b^2c^2 \amp = a^2+b^2c^2 \amp = a^2+b^2c^2 \amp = a^2+b^2z^2 \amp = x^2+y^2Here are the local cross-references: , , , , . We test another farther away in , contrary to our advice above.
When there is nothing to align, the tag attribute may live directly on a single-line md: c^2 = a^2 + b^2. This is equivalent to placing the content in a single mrow child carrying the tag. A cross-reference to this equation looks like . Note that tag and number are mutually exclusive on a single-line md.
Commutative Diagrams
This diagram is authored by Tom Judson using the syntax of the AMSCD package. Inside of a md element start with \begin{CD}. Remember to escape the less-than character.
\begin{CD}
E[x]/\langle p(x) \rangle @>\psi>> F[x]/\langle q(x) \rangle\\
@VV{\sigma}V @VV{\tau}V\\
E(\alpha) @>\overline{\phi}>> F(\beta)\\
@VVV @VVV\\
E @>\phi>> F
\end{CD}
While this package is not as flexible as some generic drawing packages, it has the advantage of full support by MathJax, and thus the HTML version will be more accessible.
Line-Breaking after Mathematics
As of 2021-05-14, in HTML output the next sentence should just fill a full line across the page. We take active measures to bind the concluding period to the final bit of mathematics, the variable x. The prevents a bad line break which could see the period begin a new line, all by itself. In the event that the line-breaking siutation improves, we could relax these measures. This testing is only relevant to HTML output, not output.
This section is about testing types and sizes of fonts, not so much about using different typefaces. First, one long displayed equation, which is designed to be full-width for output when using defaults as of 2020-01-29 (commit defd4bffd462e7ea).
The next paragraph has five ways to write the sine of x, bracketed by plain text versions. This tests font size and the fonts employed. The raw source of this paragraph is (spread over two lines)sin x | <m>\sin x</m> | <m>\text{sin}\ x</m> | <m>\mathrm{sin}\ x</m> |<m>\text{sin}x</m> | <m>sin x</m> | sin x The five ways, from good to bad,
The best way, using \sin. Note the distance to the x.
With a \text{} macro.
With a \mathrm{} macro. Not recommended for .
Without a space. Note that the previous two require explicit spacing.
No extra effort, so renders as a product of four variables.
sin x | \sin x | \text{sin}\ x | \mathrm{sin}\ x | \text{sin}x | sin x | sin x
Finally a simple paragraph that places a text x next to a variable x.
wordxxx+xxxword
Special Characters in Text Mode
designates ten characters as special because they carry syntactic meaning. When these characters appear inside text-mode macros (such as \text{}) within mathematics, they must be escaped to produce their literal glyph. Seven of the ten have simple single-character escapes and are demonstrated in the following table. The remaining three (~, ^, \) require macros from 's textcomp package (\textasciitilde, \textasciicircum, \textbackslash) which are not available in MathJax's text mode as of 2026-04-03.
The hash character also requires escaping within the \tag{} macro. See for an example where the tag="dhash" attribute produces a double hash as an equation tag.
Miscellaneous
In HTML output, a MathJax workaround for a Safari rendering bug was inserting extra spaces after textual subscripts and superscripts (MathJax thread). CSS now applies a correction. The following tests if the CSS fix is sufficient, and could be used to test the necessity of our fix in the future. Following is the original report, though NOT has been moved to a superscript:
T_\text{clk}-t_\text{su} \gt t_\text{clk-Q} + \max\left( t_\text{XOR}, t^\text{NOT} \right). There should not be anything to see in /PDF output. (2021-10-21)
Grouping Samples
While building or testing a rendering of PreTeXt, especially in HTML, it can be useful to see all the various elements that potentially create visual blocks in one place. So they are collected here.
We will omit content specific blocks like figures, images, tables, as those elements have significant stress testing of their own elsewhere.
Please add any similar elements that are created or that you discover are missing from this page.
Our goals
A minimal objective.
Stress test HTML themes
Locally, test objectives
Remark-like BlocksA title
A minimal remark.
A title
A minimal convention.
A title
A minimal note.
A title
A minimal observation.
A title
A minimal warning.
A title
A minimal insight.
Example-like BlocksA title
A minimal example.
A title
A structured example.
A structured example.
A hint
An answer
A solution
The conclusion.
A title
A minimal question.
A title
A minimal problem.
A title
A minimal observation.
A title
A minimal warning.
A title
A minimal insight.
Theorem-like BlocksA title
A minimal theorem.
A title
A theorem with a proof.
The proof of the theorem.
A title
A minimal corollary.
A title
A minimal lemma.
A title
A minimal algorithm.
A title
A minimal proposition.
A title
A minimal claim.
A title
A minimal fact.
A title
A minimal identity.
A title
A stand-alone proof.
Axiom-like BlocksA title
A minimal axiom.
A title
A minimal conjecture.
A title
A minimal principle.
A title
A minimal heuristic.
A title
A minimal hypothesis.
A title
A minimal assumption.
Definition-like BlocksA title
A minimal definition.
Aside-like Blocks
Three asides are below.
A title
A minimal biographical.
A title
A minimal biographical.
A title
A minimal historical.
Computation-like BlocksA title
A minimal computation.
A title
A minimal technology.
A title
A minimal data.
Project-like BlocksA title
A minimal project.
A title
A minimal activity.
A title
A minimal exploration.
A title
A minimal investigation.
Miscellaneous Blocks
A minimal assemblage.
Our results
A minimal outcome.
Stress test HTML themes
Locally, test outcomes
Wrap-up
A minimal conclusion.
Entering Text in Paragraphs, Titles, CaptionsText in ParagraphsEntering Text in Paragraphs
XML, and therefore , is a markup language. But by and large, what you type into your source will be what you see in your output. So there is not much to say. Except that eventually will be essential. However we do test various tricky situations here (which have technical explanations we avoid). See the Author's Guide for a superior treatment of the topics addressed here.
Special XML characters
One of the goals of is to relieve an author of managing the numerous conflicts when mixing languages that use different characters for special purposes. But, of course, XML has its own special characters.
If you type a less-than symbol in your source, the XML processor thinks you are starting an opening, or closing, tag. So how do you get a less-than sign into your source so that it survives into your output, like this: <? You use an escaped version. Type literally, the four characters < in your source. Then the XML processor will know you want the character and will not mistake it for a tag. But now we want to get an ampersand into our source like: &. How? Another escaped version of a character, literally the five characters &.
Otherwise, keys on your keyboard, even international versions, should be fine in your source and behave as expected. WYTIWYG = What You Type Is What You Get. So the principal concession to using XML markup is the following very simple rule.
Rather than pressing the < and & keys on your keyboard, instead always enter the escape sequences < and & as replacements.
Simple. And it will work in running text, verbatim text (like when authoring the content of c or pre elements), and mixed into syntax to desribe mathematical expressions. XML has three other escape sequences >, ', and ", for the characters >, ', and " (respectively). But they seem largely unnecessary for authoring in PreTeXt, as we now demonstrate by typing them directly from our keyboard into our source: >, ', and ".
How was & authored? Work it out, and then check the source here for the answer.
The next subsection should start on a new page in PDF output if the standard publisher file is used.
Quotations
The qquotations tag will provide beginning and ending double quotations, while the sq tag will behave similarly but provide single quotes. Given the complexity of quotations, the different symbols used in different languages, and the over-simplified versions provided on keyboards, it is necessary to use markup.
The roots of education are bitter, but the fruit is sweet. (Aristotle)
It is always wise to look ahead, but difficult to look further than you can see. (Winston Churchill)
A large quote can be accomodated with the blockquote tag, which can carry within itself an attribution element.
The problem with writing a book in verse is, to be successful, it has to sound like you knocked it off on a rainy Friday afternoon. It has to sound easy. When you can do it, it helps tremendously because it's a thing that forces kids to read on. You have this unconsummated feeling if you stop.
Dr. Seuss
We say that again, to test a multiline attribution of a block quotation. Notice how the dash appears automatically, and that it is a quotation dash in HTML, distinct from other sorts of dashes.
The problem with writing a book in verse is, to be successful, it has to sound like you knocked it off on a rainy Friday afternoon. It has to sound easy. When you can do it, it helps tremendously because it's a thing that forces kids to read on. You have this unconsummated feeling if you stop.
Dr. SeussChildren's Author
Sometimes a quote may extend across several paragraphs. Or a balanced pair of quotations marks crosses an XML boundary, so we need left, right, single and double versions. (For example, see Section on poetry.) Here are all four in a haphazard order: , , , . These should be a last resort, and not a replacement for the q and sq tags. The left/right versions are used for the following quote from Abraham Lincoln, which we have edited into two paragraphs.
I am not bound to win, but I am bound to be true. I am not bound to succeed, but I am bound to live by the light that I have.
I must stand with anybody that stands right, and stand with him while he is right, and part with him when he goes wrong.
And as a tests, we try some crazy combinations of quotes, which would normally give some trouble where the quotation marks are adjacent. View these examples in PDF output, with lots of magnification and note the spacing between the quotation marks.
we use single quotes inside of double quotes
double quotes inside of single quotes with more
single quotes tight inside of double quotes
double quotes tight inside of single quotes
An absurd test of two adjacent single quotes inside a pair of double quotes
you would never do this, but a pair of single quotes
Quotation marks are different in different languages. The following paragraphs contain short examples.
English (United States)
Primary only: Government of the people, by the people, for the people, shall not perish from the earth. Primary and secondary: I have a dream that one day this nation will rise up and live out the true meaning of its creed: We hold these truths to be self-evident, that all men are created equal. (Abraham Lincoln, Gettysburg Address; Martin Luther King Jr., I Have a Dream)
French (France)
Primary only: La liberté commence où l’ignorance finit. Primary and secondary: Elle se répétait : J’ai un amant ! un amant ! se délectant à cette idée comme à celle d’une autre puberté qui lui serait survenue. (Victor Hugo, Les Misérables; Gustave Flaubert, Madame Bovary)
French (Canada)
Primary only: La liberté commence où l’ignorance finit. Primary and secondary: Elle se répétait : J’ai un amant ! un amant ! se délectant à cette idée comme à celle d’une autre puberté qui lui serait survenue. (Victor Hugo, Les Misérables; Gustave Flaubert, Madame Bovary)
German (Germany)
Primary only: Grau, teurer Freund, ist alle Theorie, und grün des Lebens goldner Baum. Primary and secondary: Meine Luise, sagte er mir, hat mich zu Boden geworfen. Meine Luise wird mich auch aufrichten. (Johann Wolfgang von Goethe, Faust I; Friedrich Schiller, Kabale und Liebe)
Groupings
It is possible to make some other groupings like quotations, such as {some emphasized text grouped within braces}, or [a Book Title inside brackets], an Article Title, some foreign words inside angle brackets, or just a bit of text within double brackets. Some of these are used extensively by scholars who study texts to note various restorations or deletions. Note that the foreign element may have a xml:lang attribute.
Note that the angle brackets, and , are not the keyboard characters, < and >. Your best bet is to use the provided angles element when constructing a balanced pair. Similarly, dblbrackets is provided to make the double-bracket characters easily available, since they are likely not on your keyboard.
Characters, Symbols, and Constructions
Verbatim, inline text, is accomplished with the c element. One special consideration: if your editor splits a line in the middle, we will fix it. This sentence has two
words that we purposely split with a newline character in the middle. In output you should see a space between the words.
Some keyboard characters are ambiguous. Is the character ' an apostrophe or a right single quote? We presume the former, ', and provide markup as an alternative for the latter (described above). Is / used to separate words, or to form a fraction? We presume the former, /, and provide solidus, , for the latter. We test some other characters straight from our US keyboard (with two being escape sequences).
Note that for a long time had empty elements for many of these characters, as a consequence of naïveté. So you might see dollar, ampersand, or others in old source. They will be deprecated and will raise warnings.
Now, when a character is nowhere to be found on your keyboard, we provide conveniences as markup. Or a keyboard character may have a different variant which we implement as an empty element. Here we test many of these. Read the Author's Guide for tags and more detail.
There are a few common abbreviations of Latin phrases that can be achieved in HTML one way, and in with a slightly different mechanism. These are due to 's treatment of a period (full stop), depending on its surroundings. So not reserved characters, but just divergent treatment. Using these will lead to the best quality in all your outputs. See Will Robertson's informative and arcane blog post on the topic if you want the full story for the treatment of a full stop in .
TagRealizationMeaningadanno Domini, in the year of the Lordamante meridiem, before middaybcEnglish, before Christcacirca, aboutegexempli gratia, for exampleetalet alia, and othersetcet caetera, and the restieid est, in other wordsnbnota bene, note wellpmpost meridiem, after middaypspost scriptum, after what has been writtenvsversus, againstvizvidelicet, namely
We also distinguish between abbreviations (vs.), acronyms (SCUBA) and initialisms (XML). This is a test of the text version of a multiplication symbol: 24.
Simple coordinates with degrees, minutes, seconds, or temperature, or distance in feet and inches. We parked the car at 36160.83N, 1223547.27W, and since it was 93F, we walked 5053.6 so we could swim in the bay.
An em dash is the long dash used much like parentheses (not an en dash used to denote a range, such as a range of page numbers). It should not have spaces around it, but some style guides allow for a thin space, whichwe test right now. A publication file entry can be set to none or thin to control this.
Currency
For best results, be certain the right Unicode characters are in your source. If you only need a certain symbol rarely, you can enter it in your source via its Unicode number. For example, to obtain a peso, type ₱. This table has been tested with our default fonts, and should be fine for HTML output. Please report any difficulties with different fonts, as there are extra measures we can take to make these more robust. (We've already done this for the Paraguayan guaraní.)
A limited supply of icons can be used when explaining how to use some computer application. The empty element is icon and the attribute is name.
We sprinkle a few into a few sentences to check baselines and font sizing. We sprinkle a few into a few sentences to check baselines and font sizing. We sprinkle a few into a few sentences to check baselines and font sizing. We sprinkle a few into a few sentences to check baselines and font sizing.
Please supply all this information, including the official Unicode name, with your request. Better yet, form a pull request.
Icons, xelatex, and Fonts
When processing a file with xelatex the Font Awesome 5 icons are expected to be in a system font whose name is Font Awesome 5 Free. This is not a filename, and installing the fontawesome5 package into your installation does not always guarantee that this font will automatically be available as a system font.
The Publisher's Guide contains some discussion about installing fonts into a system, as part of the documentation of creating a style, and has particular warnings about only using the fontawesome5 package as a vehicle for installing and accessing these fonts.
Keyboard Keyskeyboard keys
Your text can include specialized text meant to look like a key on the keyboard of a calculator or other device. So you can go bEnter< or F1. Or maybe a sequence as: Tab > Ctrl > T. Use the kbd element, with the label of the key as content.
There is a growing supply of keys which are labeled with graphics rather than text, such as a left arrow , right arrow , up arrow , down arrow , and Enter . See The Guide for the definitive list. In the literal column means the symbol/character is the content of a kbd element, while the named column means the symbol/character has been chosen via the value of the name attribute of an empty kbd element.
Named keysLiteralNamedAmpersand&Less than<Greater than>Dollar$Per cent%Open brace{Close brace}Hash#Backslash\Tilde~Circumflex^Underscore_
URLs, such as linkexternal, urlreferenceexternal, url
The url element can be used to create an external reference. The mandatory href attribute is the actual URL complete with the protocol (e.g. https://). Content for the element is optional, and if provided will be the clickable text. In this case, a visual attribute can be provided. In producing the print version of a PDF, this will become a parenthetical with a more friendly version of the URL. When no content is provided, the clickable will be the URL with a preference for an optional visual. This subsection has some (extreme) tests and we leave complete documentation and full details for the Guide.
A long URL for testing: . Notice in the source that you do not put any tags inside the href or visual attributes, but you may need to provide XML escape sequences (see ).
A url element in the print version of a PDF will get a trailing parenthetical containing the (simplified) URL in the highly-recommended visual attribute. If you do not provide the visual attribute in this case, then you will get the href value repeated, possibly with some editing. If you insist, you can make the visual attribute identical to the href attribute. Some tests:
With a useful visual attribute
With a duplicate visual attribute
With no visual attribute, so an edited one is formulated (no protocol)
Here is a totally bogus URL, which contains every possible legal character, so if this fails to convert there is some problematic character. In order to test the use of a percent sign (%) in a URL, we follow it by two hex digits, specifically, 58, which is a way to represent the character X in a URL. Normal text, monospace text, url with just href, url with href and visual, url with href, visual and content. Notice how the various versions do, or do not, line-break in /PDF output, including the (potentially confusing) use of a use of a hyphen in the normal text version. Note that # starts a fragment identifier, so it is the penultimate character. A ? would normally start a query string, but as the fragment identifier, it is not special. Finally, square brackets ([ and ]) are only legal in limited situations (authority component for IPv6 host literals), so they are present as percent-encoded literals, which really does not demonstrate anything. All these efforts to make a comprehensive, but legal, URL are meant to appease the EPUB validator which will otherwise flag them as errors.
Line-breaking in /PDF output is specialized, using path separators (slashes) as candidates for splitting across lines:
We are not fans of footnotes, they are totally unstructured.Carleson's Theorem
A URL in a footnote migrates around, and so care must be taken.
This paragraph has two footnotes, one with a real URL from Jesse Oldroyd, another with a fake URL from the above suite.
For good measure, we repeat the URL found in the first footnoteAnd if you do provide a link like Carleson's Theorem in a footnote you should see an easy-to-read parenthetical version in some output formats, such as en.wikipedia.org/wiki/Carleson%27s_theorem.:
Carleson's Theorem.
And we include a no-content version of the same link, with a visual version provided and employed:
.
The taxontaxonbiological namestaxon element can be used all by itself to get an italicized scientific name, as in Escherichia coli. It can also be structured with the elements genusgenusbiological namesgenus and species,speciesbiological namesspecies as in using both together in Cyclopskolensis. Or the subelements can be used individually. Rules for capitalization are presently your responsibility as an author. Possible improvements include new subelements, attributes for database identifiers, and checks on capitalization. Also, we might automatically abbreviate the genus after first use.
There is an attribute, @ncbincbi attributeattributesncbi attributebiological namesncbi attribute that you can use on the taxon element to precisely identify the organism you are discussing using an identification number from the National Center for Biotechnology Information. Their taxonomy is at www.ncbi.nlm.nih.gov/taxonomy. Right now, we do not do anything with this attribute, but things like links are certainly possible. See the source of this document to see it in use with Drosophilamiranda which could be used to construct a link to further information via id number or even further information via just the name.
Verbatim in titles, \a&b#c%d~e{f}g$h_i^j, OK
You can test the migration of the special characters in this section title by requesting a 2-deep Table of Contents via the publication file.
Special Situations
Sage defines a nice syntax for generators of algebraic structures, but we must remember to use an escape sequence for the < symbol (see ).
P.<t> = ZZ[]
P
There is an alternate Sage syntax, which avoids the less-than and greater symbols.
R = ZZ['u']
u = R.gen(0)
(u, R)
Ampersands, less-than, and greater symbols are likely to be necessary in source code, such as Sage code (think generators of field extensions) or TikZ code (think arrowheads), and in matrices (think separating entries). If you have a big matrix, or a huge chunk of TikZ code, you can protect it all at once from the XML processor by wrapping it in <![CDATA[]]>. It should be possible to write without ever using the CDATA mechanism, but it might get tedious in places to use the supplied macros or XML escape sequences. This construction is often mis-understood as a solution better remedied by reading again.
We test the three pre-defined macros for &, <, and > with a pair of aligned equations:a^2 + b^2\amp\lt c^2c^2\amp\gt a^2 + b^2
Jupyter Notebook, Markdown, MathJax, Delimiters
A Jupyter notebook allows a mix of HTML (our logistical preference for a conversion) and Markown (another set of special characters and their escaped versions). Certain pairs of delimiters, when appearing in consecutive HTMLcode elements require extraordinary care. But the one nut we cannot crack is pairs of dollar signs. So the next paragraph is known to render badly in a Jupyter notebook, but should otherwise be a bit boring.
$ and $
Characters, Ligatures, and More
This section is just for testing, and the more you know about , the more we would encourage you to not to read this. Look to the Author's Guide for the right way to author your source.
The ten reserved characters, directly in the source: # $ % ^ & _ { } ~ \. And again: X#X$X%X^X&X_X{X}X~X\X, but smashed up tight to intermediate characters.
In a verbatim presentation: # $ % ^ & _ { } ~ \.
And X#X$X%X^X&X_X{X}X~X\X. (These verbatim versions are authored in different paragraphs to work around the Jupyter notebook bug described above.)
We also disrupt certain constructions from . Attempting to sneak-in any traditional macro for the purposes of -only output, such as, say a \newpage, will fail since the leading backslash will be caught and converted to \textbackslash. (See? It just happened twice.) For technical reasons we want to particularly test \textbackslash, \textbraceleft, and \textbraceright.
Four ligatures, --, ---, ``, and '', authored in running text, --, ---, ``, ''. It may be hard to tell that the two consecutive apostrophes have not coalesced into a curly left smart quote, but see below, the spacing is subtly different.
We want the double quote mark from your keyboard, ", to not morph into some other character: ".
More testing: runs of hyphens. Such as: - (one), -- (two), --- (three), ---- (four), ----- (five), ------ (six), ------- (seven). Use the empty elements ndash and mdash for the longer dashes/hyphens.
Runs of apostrophes should not become smart right double quotes: ' (one), '' (two), ''' (three), '''' (four), ''''' (five), '''''' (six), ''''''' (seven). You might want to cut-and-paste these into a text file to convince yourself there are the right number of characters. Here are two smart right double quotes, separated by a non-breaking space, for visual comparison: . Or 30 apostrophes on a line of their own (longer) followed by 15 smart right double quotes (shorter).
''''''''''''''''''''''''''''''.
.
Runs of backticks (accent grave) should not become smart left double quotes when the output is processed by : ` (one), `` (two), ``` (three), ```` (four), ````` (five), `````` (six), ``````` (seven). Furthermore, in a context where Markdown syntax is recognized as well ( a Jupyter notebook), paired backticks should not produce `inline verbatim text`.
The next paragraph has a long run of words separated/joined by the keyboard forward-slash character. With this input, will not line-break at the slash, nor will it hypenate anywhere. automatically provides an improved slash, which will line-break, as you should see below in output. There is a bad right margin, but that is due to the absurdity of this test. This sort of problem should be no better or worse for the use of this character. Further refinements (zero-width space) and packages can be used to get hyphenation. HTML will line-break rationally with no extra help. Remember the solidus character for super-simple text fractions like 732 (which will not line-break), and math elements or SI unit markup for technical work.
We render mathematics in web pages with the fantastic MathJax Javascript library. Simplifying just a bit, it recognizes syntax within a page, takes control of that text, and replaces it wth nice fonts and formatting. Now, if you write about you might well have some mathematics in your examples. Best practice would be to use verbatim text for that, and we mark off such text as being off-limits to MathJax.
But if you are writing running text, then you can (accidentally) author some text which MathJax recognizes and converts to something (unintended). And if you are doing this intentionally, then you have ignored markup for mathematics, and are missing out on some features.
Double backticks is a common construction, which in /PDF output should not become an opening quote-mark. Also, a single backtick in HTML is a signal for MathJax to interpret ASCIIMath, and then a double backtick causes random pieces of mathematics on a page to not render at all. So we have a quotation authored -style: ``We have nothing to fear, but fear itself.''
Graphics
In addition to including images created externally (e.g. photographs), supports several languages for describing diagrams and pictures with human-readable source code ( plain text), rather than using a paint program. This section describes the various methods for incorporationg, or generating, graphis, images or diagrams.
Images from External Sources
If you have raster images (photographs, etc.) then they are specified with complete filenames, as above in Figure or just below.
New Zealand Landscape, commons.wikimedia.org, CC-BY-SA-2.0
If you have existing images that are vector graphics, then PDF format works best for output and SVG format works best for HTML. The utility pdf2svg works well for converting PDF to SVG. In this case, specify your source as a filename, but leave off the file extension, and the appropriate version will be used for the current output format.
The image below is provided from a PDF file in output, and was converted to an SVG for use with the HTML output. It has been explicitly scaled to a width of 65% of the text width. It has a description, but no shortdescription, so is testing that scenario.
Complete graph on 16 vertices, from www.texample.net
A circular arrangment of 16 dots (vertices) with 120 straight lines (edges), joining every pair of dots.
Footnote Buried
Nested tcolorbox (in conversion) need special care when footnotes are interior.
A paragraph interior to a sidebyside with a footnoteInterior footnote. buried inside the paragraph.
A second paragraph, just to avoid a one-panel warning.
The final paragraph of this remark, randomly placed, to test footnotes in conversions.
imageimage image
is a standalone project for authoring mathematical diagrams (see ). Its philosophy and approach are much like that of , and is tightly integrated into . One key feature is excellent support for the creation of accessible output formats.
As of 2024-11-06 development continues for itself, and fine-tuning of its integration within . But it is usable now for projects that want to use it.
You can author diagrams, and then generate SVG, PDF, and PNG output versions with the pretext/pretext script (see the Guide), and expect them to render in HTML, PDF, and EPUB output formats.
Look for automatic generation to come to the -CLI sometime very soon.
has excellent support for annotations within an SVG diagram, supporting their use by screenreaders, for example. See an example below.
Production of tactile versions is now possible, though they are not incorporated explicitly into any of the output formats. Perhaps they will become available via archive links or as a zip archive.
This is a basic diagram, in the sense that it does not use all the features of or .
Solution to a differential equation
f(t,y) = (y[1], -pi*y[0]-0.3*y[1])
This next diagram employs some macros that are defined in the usual way in docinfo and are employed to produce the names of some vectors in the labels. The blue line is colored blue by a global declaration, also in docinfo.
v=(2,1)b=(2,4)bhat=dot(v,b)/dot(v,v) * vbperp = b - bhat
The next diagram is authored with annotations, arranged in a hierarchy of increasing refinement and detail. Each identified graphical component will read its annotation and show it on the screen below the diagram. When a reader clicks on the image, a high-level summary will be read using the author-provided annotation. The down and up arrow keys enable a reader to explore the diagram in more or less detail while the right and left arrow keys reveal features at the same level of detail. When the focus is on the graph, pressing "O" will produce a sonification of the graph.
a=1f(x) = exp(x/3)*cos(x)(a,f(a))
Including annotations enables a new type of interactive diagram within a document offering potential benefits for all readers. In particular, annotations allow an author to call the reader's attention to specific details in a diagram and how they are related to one another so that the diagram and surrounding text are more tightly integrated. The annotated diagram below introduces Fibonacci tilings, which are one-dimensional analogs of Penrose tilings, and offers an explanation of their aperiodicity. Of course, surrounding text would usually provide a richer context for a diagram like this.
Fibonacci tilings are one-dimensional analogs of Penrose tilings. The diagram on the left introduces the process of deflation that is used to produce tilings while the diagram on the right explains why they are aperiodic.
For sighted readers, here is an example of a tactile version of one of the above diagrams. It is generated automatically from the same source as the other version. Imagine this being printed with an embosser so that the parts of the diagram, and the braille labels, are raised up from the paper and can be explored with one's fingertips. This image is a PNG produced specifically for this document. Typically, a tactile diagram produced by will be a PDF ready to be sent to an appropriate embosser. Notice that adds a caption indicating the diagram's location in the document along the top of the diagram.
images imageimage image
There are several graphics engine packages that a document can employ. Code from these packages renders diagrams automatically as part of normal processing of files. For HTML output the pretext script produces SVG versions of the pictures. The script can also produce standalone source files, PDFs, PNGs, and EPSs. The packages should be loaded in docinfo/latex-image-preamble, which is also where global package settings should be made. If any ampersands occur in your code you should use the \amp macro pre-defined by . These first examples are from the TeXample.net site. Note that any macros used in the rest of your document may be employed in the -standalone or Asymptote diagrams (with this feature coming to Sage graphics next?).
TikZ Electronics Diagram
a pile of electronic components wired together
=triangle 45]
\draw
% Drawing the blocks of first filter :
node at (0,0)[right=-3mm]{\Large \textbullet}
node [input, name=input1] {}
node [sum, right of=input1] (suma1) {\suma}
node [block, right of=suma1] (inte1) {\inte}
node at (6.8,0)[block] (Q1) {\Large $Q_1$}
node [block, below of=inte1] (ret1) {\Large$T_1$};
% Joining blocks.
% Commands \draw with options like [->] must be written individually
\draw[->](input1) -- node {$X(Z)$}(suma1);
\draw[->](suma1) -- node {} (inte1);
\draw[->](inte1) -- node {} (Q1);
\draw[->](ret1) -| node[near end]{} (suma1);
% Adder
\draw
node at (5.4,-4) [sum, name=suma2] {\suma}
% Second stage of filter
node at (1,-6) [sum, name=suma3] {\suma}
node [block, right of=suma3] (inte2) {\inte}
node [sum, right of=inte2] (suma4) {\suma}
node [block, right of=suma4] (inte3) {\inte}
node [block, right of=inte3] (Q2) {\Large$Q_2$}
node at (9,-8) [block, name=ret2] {\Large$T_2$}
;
% Joining the blocks of second filter
\draw[->] (suma3) -- node {} (inte2);
\draw[->] (inte2) -- node {} (suma4);
\draw[->] (suma4) -- node {} (inte3);
\draw[->] (inte3) -- node {} (Q2);
\draw[->] (ret2) -| (suma3);
\draw[->] (ret2) -| (suma4);
% Third stage of filter:
% Defining nodes:
\draw
node at (11.5, 0) [sum, name=suma5]{\suma}
node [output, right of=suma5]{}
node [block, below of=suma5] (deriv1){\derv}
node [output, right of=suma5] (sal2){}
;
% Joining the blocks:
\draw[->] (suma2) -| node {}(suma3);
\draw[->] (Q1) -- (8,0) |- node {}(ret1);
\draw[->] (8,0) |- (suma2);
\draw[->] (5.4,0) -- (suma2);
\draw[->] (Q1) -- node {}(suma5);
\draw[->] (deriv1) -- node {}(suma5);
\draw[->] (Q2) -| node {}(deriv1);
\draw[<->] (ret2) -| node {}(deriv1);
\draw[->] (suma5) -- node {$Y(Z)$}(sal2);
% Drawing nodes with \textbullet
\draw
node at (8,0) {\textbullet}
node at (8,-2){\textbullet}
node at (5.4,0){\textbullet}
node at (5,-8){\textbullet}
node at (11.5,-6){\textbullet}
;
% Boxing and labelling noise shapers
\draw [color=gray,thick](-0.5,-3) rectangle (9,1);
\node at (-0.5,1) [above=5mm, right=0mm] {\textsc{first-order noise shaper}};
\draw [color=gray,thick](-0.5,-9) rectangle (12.5,-5);
\node at (-0.5,-9) [below=5mm, right=0mm] {\textsc{second-order noise shaper}};
\end{tikzpicture}]]>
The next example began life in Sketch, which will output TikZ code (though the code has been edited by hand for readability).
The pgfplots package was included in docinfo/latex-image-preamble. Here, it is used. Also, here we demonstrate using \amp where you would normally use an ampersand in . There are known issues with xelatex processing any gradient shading in tikz. To (successfully) create the gradient shading in the 3D image here, you may need to use pdflatex until developers resolve this issue.
Sample pgfplots plot
a Cartesian plane with a function graph, a parametric curve, and some points
,
smooth,
thin,
color = blue,
]{4*ln(x)/ln(10)};
\addplot[
only marks,
]coordinates{
(0,2)
(4,3)
(2,4)
(3,4)};
\addplot[
variable = \t,
domain = 0:360,
samples = 200,
color = orange,
]({3*sin(2*t)}, {2*cos(5*t)});
\end{axis}
\amp
\begin{axis}[axis lines = box, width = 0.5\linewidth]
\addplot3[
surf,
faceted color = blue,
samples = 15,
domain = 0:1,
y domain = -1:1
]{x^2 - y^2};
\end{axis}\\
};
\end{tikzpicture}]]>
A plot might use a graphics language to draw the axes and grid, but the data might be from an experiment and live in an external file that you do not wish to place in your source. Place such a file in a subdirectory directly below the directory where your master source file resides. Then indicate this directory in a docinfo/directories/@data attribute of your source. But you must prefix the path with data/ as in the source below.
External data in a pgfplots plot
a Cartesian plot of electric potential over time;
The TikZ image in the next figure is made up from two PNG images (the shark and the swimmer), in addition to various TikZ commands. The images reside in a source directory, numerical/attack, so the image files (shark.png, swimmer.png) are prefixed in the TikZ code with data/attack so the creation of the image will be successful. This example is courtesy of Stephen Brown.
An illustration of the shark trying to catch you as you swim to shore.
The next image requires three passes with to get everything in place. It is placed here to test that the code in the Pythion script correctly recognizes this requirement.
PSTricks is a package for drawing diagrams and pictures, dating back to the days before PDF, when PostScript (PS) was king. Given its history, it does not seem to work easily with the pdflatex engine. But it will work easily with the xelatex engine. We try to keep this present sample document workable with both engines, so we have presented an example of the use of PSTricks in the xelatex-exclusive sample document where we test obscure fonts and characters. So your best bet is to look there.PSTricks
There are suggestions online that \usepackage[pdf]{pstricks}along with pdflatex --shell-escape *.tex is workable. We could not make it happen, and a shell escape can be a dangerous security hole. That said, updates to this approach are welcome.
Asymptote, 2D
The Asymptoteasymptote graphics language graphics language may be placed in your source to draw graphs, diagrams or pictures. Rules for formatting code are identical to those for Sage code. For more on Asymptote see .
This is a simple physics diagram about levers, taken from the Asymptote documentation. In the HTML version of this article, the images are SVG's and so should scale nicely when you zoom in on the page.
Asymptote Lever Demonstration
moments on a lever
This diagram has two masses at either end of a lever, namely m and M. They are located at distance x and X on an axis. The resulting center-of-mass is at a point \bar{x}.
And a colorful contour plot with logarithmic scale. Again, from the Asymptote documentation. This SVG image employs two additional PNG images for the two parts where the color varies continuously.
Here is the lever diagram again, but now we have added an integral to one of the legends, using a macro of our own, which is idential to one we used in the early part of this article. The point is, we only needed to define the macro once for the entire document, and it is available as we make Asymptote diagrams. This device can be used to maintain flexibility and consistency in your choice of notation.
Asymptote can create an HTML file that is an interactive version of a 3D shape. At this writing (2020-05-18) support via the pretext script is evolving. Plus, you will need newer versions of Asymptote and the dvisvgm utility to duplicate all of the results being displayed here in this testing document. The other distinction is that the author needs to provide the aspect ratio of the figure, and this should be placed on the asymptote element (not on the image element). is from the Asymptote Gallery.
Work Cone (Asymptote Interactive 3D Image)
import solids;
size(0,150);
currentprojection=orthographic(0,-30,5);
real r=4;
real h=10;
real s=8;
real x=r*s/h;
real sr=5;
real xr=r*sr/h;
real s1=sr-0.1;
real x1=r*s1/h;
real s2=sr+0.2;
real x2=r*s2/h;
render render=render(compression=0,merge=true);
draw(scale(x1,x1,-s1)*shift(-Z)*unitcone,lightblue+opacity(0.5),render);
path3 p=(x2,0,s2)--(x,0,s+0.005);
revolution a=revolution(p,Z);
draw(surface(a),lightblue+opacity(0.5),render);
path3 q=(x,0,s)--(r,0,h);
revolution b=revolution(q,Z);
draw(surface(b),white+opacity(0.5),render);
draw((-r-1,0,0)--(r+1,0,0));
draw((0,0,0)--(0,0,h+1),dashed);
path3 w=(x1,0,s1)--(x2,0,s2)--(0,0,s2);
revolution b=revolution(w,Z);
draw(surface(b),blue+opacity(0.5),render);
draw(circle((0,0,s2),x2));
draw(circle((0,0,s1),x1));
draw("$x$",(xr,0,0)--(xr,0,sr),red,Arrow3,PenMargin3);
draw("$r$",(0,0,sr)--(xr,0,sr),N,red);
draw((string) r,(0,0,h)--(r,0,h),N,red);
draw((string) h,(r,0,0)--(r,0,h),red,Arrow3,PenMargin3);
draw((string) s,(-x,0,0)--(-x,0,s),W,red,Arrow3,Bar3,PenMargin3);
These 3D images in HTML output are rotable with a pointing device (mouse, trackpad) with a click-and-drag. A finger should suffice on touch-sensitive devices (phones, tablets). Zooming in and out can be accomplished with a mouse wheel, or by pinching. As a contribution to the accessibility of HTML output, keyboard controls will also allow for exploration of these images. (Make sure the image has focus when you attempt to use these.)
3D Image Keyboard ControlsKeyActionxRotate around x-axisyRotate around y-axiszRotate around z-axis+Enlarge image-Shrink imagehReturn to home position
And finally, an example of a 3-D graph (from the Asymptote documentation again). This WebGL image is a beautiful example of a Riemann surface. As you rotate the image, notice how the reflection of the light source varies, along with the brightness of various regions of the surface. This example is accomplished with just 10 lines of Asymptote code.
Mermaid is a Markdown-inspired tool for authoring various kinds of diagrams. Below, three of the available diagram types are demonstrated. For a full listing of diagram types, see the Mermaid Documentation. The Mermaid live editoris a great tool for testing the syntax of your mermaid diagrams.
In PreTeXt, you can specify a Mermaid theme via the theme in the common/mermaid/ publisher variable.
For HTML output, if you switch back-and-forth between light-mode and dark-mode, you will need to refresh the page to see the changes in the Mermaid diagrams.
Mermaid Git Diagram
A git diagram in Mermaid
---
title: Example Git diagram
---
gitGraph
commit
commit
branch develop
checkout develop
commit
commit
checkout main
merge develop
commit
commit
Mermaid Class Diagram
A class diagram in Mermaid
classDiagram
Animal <|-- Duck
Animal <-- Fish
Animal <|-- Zebra
Animal : +int age
Animal : +String gender
Animal: +isMammal()
Animal: +mate()
class Duck{
+String beakColor
+swim()
+quack()
}
class Fish{
-int sizeInFeet
-canEat()
}
class Zebra{
+bool is_wild
+run()
}
Mermaid Seuqnece Diagram
A sequence diagram in Mermaid
sequenceDiagram
participant Alice
participant Bob
Alice->>John: Hello John, how are you?
loop HealthCheck
John->>John: Fight against hypochondria
end
Note right of John: Rational thoughts <br/>prevail!
John-->>Alice: Great!
John->>Bob: How about you?
Bob-->>John: Jolly good!
Mermaid has two layout enginesthe default and elk. The ELK engine often does a better job with complex diagrams. You can specify it as a default by setting the publisher variable common/mermaid/@layout-engine to "elk", or specify it in a single diagram by using standard Mermaid config frontmatter as shown in below.
Mermaid Class Diagram using ELK layout engine
Sage PlotsSage plots
Any of the numerous capabilities of Sage may be used to produce any graphics object, be it the simple graph of a single-variable function or some realization of a more complicated object. All of the usual rules about formatting Sage code (esp. indentation) apply, along with one more caveat. The last line of your Sage code must return a Sage Graphics object (or 3D plot). The pretext script will isolate this last line, use it as the RHS of an assignment statement, and the Sage .save() method will be called to generate the image, which is either a Portable Document Format (PDF) file amenable to output, or a Scalable Vector Graphics (SVG) file amenable to HTML output. It is also possible to make a PNG image, which is necessary for an EPUB destined for a Kindle book. For visualizations of 3D plots, Sage will only produce Portable Network Graphics (PNG) files, which can be included in HTML pages or output. For complete documentation, see the Guide as this subsection is not comprehensive.
A Sage standard parabola, on [-2,4]
a standard parabola on the interval [-2,4]
f(x) = x^2
plot(f, (x, -2, 4), color='green', thickness=3)
Pay careful attention to the requirement that the last line of your code be a graphics object. In particular, while show() might appear to do the right thing, it evaluates to Python's None object and that is just what you will get. The code for Figure illustrates creating two graphics objects and combining them into an expression on the last line that evaluates to a graphics object.
Two Sage plots on one set of axes
f(x) = x^4
g(x) = -x^4
up = plot(f, (x, -1.5, 1.5), color='blue', thickness=2)
down = plot(g, (x, -1.5, 1.5), color='red', thickness=2)
up + down
Sage code comprised of just a single line was once mishandled, leading to no ouput. From Jean-Sébastien Turcotte we have the example that revealed the problem.
Les vecteurs \vec{u} et \vec{v}
Les vecteurs \vec{u} et \vec{v}sont tracés tel que demandé,
respectivement en rouge et en bleu.
The following examples are from the Sage Tour. We package them into a sidebyside layout element, see .
A Sage multigraph of a sentence
stnc = 'I am a cool multiedge graph with loops'
g = DiGraph({}, loops=True, multiedges=True)
for a,b in [(stnc[i], stnc[i+1]) for i in srange(len(stnc)-1)]:
g.add_edge(a, b, b)
g.plot(color_by_label=True, edge_style='solid', figsize=(8,8))
Sage polynomial approximations of f(x)=1/(1+25x^2)
def f(x):
return RDF(1 / (1 + 25 * x^2))
def runge():
R = PolynomialRing(RDF, 'x')
g = plot(f, -1, 1, rgbcolor='red', thickness=1)
polynom = []
for i, n in enumerate([6, 8, 10, 12]):
data = [(x, f(x)) for x in xsrange(-1, 1, 2 / (n - 1), include_endpoint=True)]
polynom.append(R.lagrange_polynomial(data))
g += list_plot(data, rgbcolor='black', pointsize=5)
g += plot(polynom, -1, 1, fill=f, fillalpha=0.2, thickness=0)
return g
runge()
From the Sage documentation, with slight modifications, credited to Douglas Summers-Stay. A plot of the implicity defined surface 2 = \cos(x + ty) + \cos(x - ty) + \cos(y + tz) + \cos(y - tz) + \cos(z - tx) + \cos(z + tx) in rectangular xyz coordinates, with t equal to the golden ratio. If you set plot_points=100 in the Sage code, you will get a very smooth rendering, but also a quite large HTML file. We have used plot_points=50 to reduce the file size by a factor of four. Note the need for a value of 3d for the variant attribute, and an explicit aspect ratio with aspect. Arrow keys, a mouse scroll wheel, plus grabbing with a left or a right mouse button, can be used to manipulate the image.
Inkscape is a great tool for creating images. It ticks all the boxes: open source, mature, cross-platform, standards-compliant. Read much more about it in The Guide. In HTML output the two images below are both in SVG format. The first is pure SVG, while the second has embedded information that makes it easier to edit in Inkscape. You could view the source for this page in the HTML version, deduce the filename of the second image, download it, and manipulate it profitably with Inkscape. Both files are quite small, but the first is half the size of the second. In PDF the two images come from files that are identical, so nothing is being tested. The PDF version is smaller still.
Sometimes you want to use the same image more than once. Here we just point to a PNG file that we repeat often throughout this sample.
Copy of raster image, in a figure, so now numbered and captioned
For images described by code, such as TikZ code in a latex-image element, this is a bit subtler. See the Guide for a complete description. We also demonstrate this with the sample book, since it is all set up with the xinclude mechanism. See the two plots of the 8-th roots of unity in the complex numbers section of the chapter on cyclic groups.
Caption Testing
A caption could be as substantial as a paragraph, here we test out one such example.
A caption can be a whole paragraph with lots of technical details, and maybe a hyperlink to something external, such as or . There could be some inline mathematics, such as x^2 + y^2 = c^2. Would a knowl open here? Recursively? Let's see: . Display mathematics, side-by-sides, theorems, and lots of other things should be banned. Footnotes sound like a bad idea. Strange characters should be fine: .
Captionless Images
We strongly suggest placing images within a figure, as we have done above, so that you can reference them, and use the (required) caption to explain what they are. However there are places, such as a preface, where numbered items are not permitted. So you might want a solo image there. Or maybe graphics are an illustration of sorts, and a numbered figure feels like overkill. Or it is part of an exercise or proof of a theorem. But notice that you cannot then use this image as the target of a cross-reference, so you may need to refer to some enclosing container.
The image can be scaled by specifying the width as a percentage, including the percent-sign (%). The height is scaled to preserve the aspect ratio. There is no facility to change the height, it is your responsibility to manage the aspect ratio independently. The margins can be given as a pair of percentages, separated by a space. The width defaults to 100%, while margins defaults to the value auto, which will center the image. Missing values are computed sensibly, and there is robust error-checking. The layout control here is a subset of what is available for the more elaborate sidebyside element, see .
Two simple examples. The first has width 10% and so defaults to being centered, and the second has width 10% and left margin of 25%.
A paragraph, just to show where the first stops and the second ends.
You might wish to place a single image flush-left, or flush-right. You can specify the margins attribute as a pair of percentages for different left and right margins. The following are laid out with two margins, with a 0% left margin and right margin (respectively).
We place two images right above one another, to test spacing of consecutive images (provided they stay on the same page!).
Testing (2019-06-02)
All the images above are specified by filenames. We need to test how various options behave when incorporated into the (new) implementation for images, being introduced with solo images.
A tikz image recycled from above, now 40% width, with 40% left margin, 20% right margin.
A pgfplot image recycled from above, now 20% width, with 40% left margin, 40% right margin, and no longer legible.
An Asymptote image, with zero layout control, so 100% width.
moments on a lever
// The next comment was seen in the wild, and the angle brackets
// are non-ASCII Unicode characters, which was disrupting communication
// with the Asymptote server, so we include the comment here for testing.
// The actual comment is immaterial for the lever diagram.
//
// The path is an elliptical helix ⟨ cos t, 2sin t, t/pi ⟩.
//
size(200,0);
pair z0=(0,0);
pair z1=(2,0);
pair z2=(5,0);
pair zf=z1+0.75*(z2-z1);
draw(z1--z2);
dot(z1,red+0.15cm);
dot(z2,darkgreen+0.3cm);
label("$m$",z1,1.2N,red);
label("$M$",z2,1.5N,darkgreen);
label("$\hat{\ }$",zf,0.2*S,fontsize(24pt)+blue);
pair s=-0.2*I;
draw("$x$",z0+s--z1+s,N,red,Arrows,Bars,PenMargins);
s=-0.5*I;
draw("$\bar{x}$",z0+s--zf+s,blue,Arrows,Bars,PenMargins);
s=-0.95*I;
draw("$X$",z0+s--z2+s,darkgreen,Arrows,Bars,PenMargins);
A Sage example, pushed to the right margin.
a standard parabola on the interval [-2,4]
f(x) = x^2
plot(f, (x, -2, 4), color='green', thickness=3)
Technical Details
The table below is a summary of how graphics and images are specified, constructed and manipulated. Additional processing is indicated by reference to the Python script pretext. Images need to be placed relative to the file that includes them during compilation, and placed relative to the HTML files which reference/include them. Author-provided image files may be placed in any subdirectory, and the @source attribute should include the complete relative path with the subdirectory. Files generated by the pretext script will be specified in the output using the relative directory images, which can be changed. There is no reason author-provided files cannot also be placed in this same directory (presuming no duplicate names). [This table is presently more readable in HTML, the PDF version will improve.]
ElementSpecification/PrintHTMLNotesimage/@sourcefull relative path, w/ extensiondirectly includeddirectly includedauthor-provided PNG, JPEGimage/@sourcefull relative path, w/o extensionpresumes PDFpresumes SVGauthor-providedimage/latex-image-code-compatible sourcedirectly includedSVG via pretext tikz, pgfplots, xypicimage/sageplotSage codePDF via pretextSVG via pretextPNG for 3-Dimage/asymptoteAsymptote codePDF via pretextSVG via pretext
In the early stages of a writing project, it may be best not to track provisional image files built with pretext under version control, and just regenerate them periodically (see the -r option for pretext). As a project matures, then it makes sense to put stable files under version control for collaborators and others. In every case, managing graphics files (and other aspects of production), is much more pleasurable with a script (shell, Makefile, etc.)
Accessibility
An image should either have a non-empty description,
a non-empty shortdescription, or set decorative to the
value yes. Some of the following images comply, and some do not. There's
not really anything to see here visually, this is testing notifications made
elsewhere.
No description, no shortdescription, no decorative set to yes
No description, no shortdescription, decorative set to yes
No description, empty shortdescription, no decorative set to yes
No description, empty shortdescription, decorative set to yes
No description, too long shortdescription, no decorative set to yes
This shortdescription is too long because when alt text is longer than 125 characters, some screen readers will cut off reading the alt text after the 125th character.
No description, too long shortdescription, decorative set to yes
This shortdescription is too long because when alt text is longer than 125 characters, some screen readers will cut off reading the alt text after the 125th character.
No description, good shortdescription, no decorative set to yes
a white square outlined in blue covered by a black X
No description, good shortdescription, decorative set to yes
a white square outlined in blue covered by a black X
Description, no shortdescription, no decorative set to yes
A white square outlined in blue covered by a black X.
Description, no shortdescription, decorative set to yes
A white square outlined in blue covered by a black X.
Description, empty shortdescription, no decorative set to yes
A white square outlined in blue covered by a black X.
Description, empty shortdescription, decorative set to yes
A white square outlined in blue covered by a black X.
Description, too long shortdescription, no decorative set to yes
This shortdescription is too long because when alt text is longer than 125 characters, some screen readers will cut off reading the alt text after the 125th character.
A white square outlined in blue covered by a black X.
Description, too long shortdescription, decorative set to yes
This shortdescription is too long because when alt text is longer than 125 characters, some screen readers will cut off reading the alt text after the 125th character.
A white square outlined in blue covered by a black X.
Description, good shortdescription, no decorative set to yes
a white square outlined in blue covered by a black X
A white square outlined in blue covered by a black X.
Description, good shortdescription, decorative set to yes
a white square outlined in blue covered by a black X
A white square outlined in blue covered by a black X.
Further ReadingSpecialized Subdivisions
In a longer work you might wish to have some references on a per-chapter basis, or similar. You can make a references subdivision anywhere to hold bibliographic items, and you can reference the items like any other item. For example, we can cite the article below , included an indication that a specific chapter may be relevant.
Exercises
No problem here, but the next two are in an exercise group with an introduction and a conclusion, along with an optional title. The two problems of the exercise group should be indented some to indicate the grouping.
N.B. An exercisegroup is meant to hold a collection of (short) exercises with common, shared, instructions. Do not use this structure to subdivide an exercises division, as you will eventually be disappointed. Instead, use the available, but under development as of 2019-11-02, subexercises, which requires a title.
Two Derivative Problemsexercise grouptwo derivatives
In the next two problems compute the indicated derivative.
You could connect the image above with the exercises following as part of this introduction for the exercisegroup.
f(x)=x^3, \frac{df}{dx}. This sentence is just a bunch of gibberish to check where the second line of the problem begins relative to the first line.
We cross-reference the next problem in this exercise group. For the phrase-global form, the common element of the cross-reference and the target should be the exercises division, and not the enclosing exercisegroup: .
derivativecosine
y = \cos(x), y^\prime.
Note that the previous two problems used very different notation for the function and the resulting derivative.
This isn't really an exercise, but an explanation that the next exercisegroup has a title and no introduction, which once resulted in some aberrant formatting in output.
Two More Derivative Problems
Some common instructions would go here in the introduction
f(x)=x^3, \frac{df}{dx}. This sentence is just a bunch of gibberish to check where the second line of the problem begins relative to the first line.
We cross-reference the next problem in this exercise group. For the phrase-global form, the common element of the cross-reference and the target should be the exercises division, and not the enclosing exercisegroup: .
y = \cos(x), y^\prime.
Compute \int 3x^2\,dx.
One of the few things you can place inside of mathematics is a fill-in blank.fill-in blank We demonstrate a few scenarios here. See details on syntax in the use is identical within mathematics.
Inside inline math (short, space for x): \sin()
Inside inline math (default, space for XXX): \sin()
Inside exponents and subscripts (each is space for the string 12). In this case, be sure to wrap your exponents and subscripts in braces, as would be good practice anyway: x^{5+}\,y_{}
Inside inline math (too long for this line probably, 40 characters long): \tan()
So use inside a displayed equation16\log\spacelike this one.
Inside the second line of a multi-line display:y &= x^7\,x^8 &= x^{}
This fillin has the historical characters attribute for a fillin inside math: 1++4=10, which may be more convenient, but may not side properly in places like subscripts, superscripts, fractions, limits of integrals, and so on.
More Exercises
This exercises section should start on a new page in PDF output if the standard publisher file is used.
This is not a real exercise, we just want to explain that this is another subsection of exercises, which has two consecutive exercise groups.
Introduction to first exercise group.
Only exercise of first group.
Conclusion to first exercise group.
Introduction to second exercise group.
First exercise of second group.
Second exercise of second group.
Conclusion to second exercise group.
An exercisegroup can have a cols attribute taking a value from 26. Exercises will progress by row, in so many columns. On a small screen, the HTML exercises may reorganize into fewer columns.
1+2
3+4+5
Addition is associative.
12
First, add 3 and 4 to get 7, then add 5 to arrive at 12.
5+6
Add seven to eight.
15
9+10
1+2
3+4+5
Addition is associative.
12
First, add 3 and 4 to get 7, then add 5 to arrive at 12.
A simple argument.
And a bit more.
5+6
Add seven to eight.
15
9+10
1+2
3+4+5
Addition is associative.
12
First, add 3 and 4 to get 7, then add 5 to arrive at 12.
5+6
Add seven to eight.
15
9+10
1+2
3+4+5
Addition is associative.
12
First, add 3 and 4 to get 7, then add 5 to arrive at 12.
5+6
Add seven to eight.
15
9+10
This feature was designed with short drill exercises in mind. With long exercises, or exercises with long hints, answers, or solutions, there is a risk that the output will have bad page breaks in the vicinity (just before) such an exercise that occupies too much vertical space. Edit, rearrange, or use fewer columns to see if the situation improves.
Make a table and a graph for the function f(x)=x^2.
These items are here to test basic formatting of references.
Gilbert Strang, The Fundamental Theorem of Linear Algebra, The American Mathematical Monthly November 1993, 1009, 848855.J. B. Conrey and D. W. FarmerMean values of L-functions and symmetryInternat. Math. Res. Notices172000Robert A. Beezer, A First Course in Linear Algebra, 3rd Edition, Congruent Press, 2012.
An online, open-sourceA gratuitous footnote to test prior bug confusing this with a REMARK-LIKE note. offering.
H. DavenportMultiplicative Number TheoryGTM74Springer-Verlag New York, NY2000xiv+177A note may accompany a bibliographic item, such as saying the manuscript is under review. But it cannot contain any formatting.Alexander Rosswell, Diffeomorphisms of Penciled Fiber Bundles, Mathematicians of America2020, 26, 884888., Diffeomorphisms of Penciled Fiber Bundles, Part 2, Mathematicians of America2021, 34, 102103.
This is a conclusion, which has not been used very much in this sample. Did you see that the entry for has a short annotation? So you can make annotated bibliographies easily.
List CalisthenicsLists, Generallyordered listlistorderedunordered listlistunordered
Use ol to make an ordered list,ordered list
and ul to make an unordered (bulleted) list.
In both cases, use li for each entry. If an entry contains
more than one paragraph, then each must be wrapped in p.
unordered listlistorderedlistunordered
This section contains nested lists,
to demonstrate how they get assigned labels (numbering, symbols).
But we begin with two simple lists,
demonstrating an ordered list and an unordered list.
See the end of section for an example of a description list.
Note in the source the optional use of a paragraph
(p) for the list items of the list of colors.
First.
SecondFootnote in an unstructured list item.
Third.
RedOne of our favorite colors
Green
Yellow
Purple
Next, we have a list with no customization and multiple levels to test the defaults. allows a maximum of four levels of ordered/numbered lists, and a total of six levels if some unordered lists are mixed in. Note that to have nested lists you must structure your list items as paragraphs, since a list may only appear within a p element.
A title on a top-level item
Level 1, first.
Level 1, second.
Level 2, first.
Level 2, second.
Level 3, first.
Level 3, second.
Level 4, first.
Level 4, second.
Title on xref'ed list item
Level 4, third.
Level 3, third.
A title on a nested item
Level 2, third.
Level 1, third.
Items in ordered lists (only) may be be give an xml:id and then may be the target of an xref. We test three here, referencing down into the hierarchy above. Level 1, second: . Level 3, second: . Level 4, third: . Note that if a list item of an ordered list is contained within a list item of an unordered list, then its number will not be defined.
And now a four-level deep unordered list with the default labels supplied by (disc, circle, square, disc). Again, the defalt order for Markdown/Jupyter (disc, square, circle, circle) is different than for and HTML (disc, circle, square, disc)
A title on a top-level item
Level 1, first.
Level 1, second.
Level 2, first.
Level 2, second.
Level 3, first.
Level 3, second.
Level 4, first.
Level 4, second.
Level 4, third.
A title on a nested item
Level 2, third.
Level 2, third.
Level 1, third.
And a total of six levels with a mix of ordered and unordered lists, the most that out-of-the-box- is able to handle.
Level 1, first.
Level 1, second.
Level 2, first.
Level 2, second.
Level 3, first.
Level 3, second.
Level 4, first.
Level 4, second.
Level 5, first.
Level 5, second.
Level 6, first.
Level 6, second.
Level 6, third.
Level 5, third.
Level 4, third.
Level 3, third.
Level 2, third.
Level 1, third.
Now, nested lists with the defaults replaced by custom choices. First, an ordered list, three deep, upper Roman numerals, then upper-case Latin, then more traditional Arabic numerals on the three elements of the third level. Note the adornments of the labels will not currently be rendered by WebKit-based browsers (such as Safari) when viewing HTML output.
Level 1, first.
Level 1, second.
Level 2, first.
Level 2, second.
Level 3, first.
Level 3, second.
Level 3, third.
Level 2, third.
Level 1, third.
A nested unordered list, with labels given as squares on the outer list and nothing (blank) on the inner lists.
Level 1, first.
Level 1, second.
Level 2, first.
Level 2, second.
Level 1, third.
A nested ordered list, to test intramural cross-references.
Level 1, first.
Level 1, second.
Level 2, first.
Level 2, second.
Level 1, third. With a cross-reference to second list item, .
Level 1, fourth. Whose number should not change when the knowl just prior is opened.
An ordered list may begin at zero by using a numeral zero in the label attribute, instead of numeral one.
First
Second
Uno
Dos
Tres
Third
The next definition is very poorly worded. It is meant to test leading off with a list (bad form), for which normally begins right after the heading.
GroupGroup
groupdefinitionparagraphinitial list
There is a binary operation, denoted \cdot.
The operation is associative.
There is an identity element, e.
For every element b, there is an element c (the inverse), such that b\cdot c=c\cdot b = e.
If these conditions are met for a set G, then we say G is a group.
Exercises and References are specialized subdivisions you can put anywhere. They are implemented as top-level lists, so should share behavior. For example, an exercise may have many parts and when expressed as a list, should have the expected labels.
Similarly, References may have lists in their annotations. Unlikely? But possible.
The next two subdivisions are an Exercises subdivision and a References subdivision, which have lists within an exercise and a bibliographic item (respectively).
List Spacing, I
This is a short list that ends a subsection, so can be used to address the necessary spacing. We also test two XML elements separated by a space (which should not go missing).
One item.
Twoducks.
Three items. Plus a few more words to check that long entries in a two column list look good.
Four items.
Another long entry that simultaneously tests that long entries look good in a list,
and also tests an odd number of entries in a two column list.
List Spacing, II
This is another short list that ends a subsection, so can be used to address the necessary spacing.
Uno item.
Dos items.
Tres item.
Quattro items.
And a paragraph after that list so that spacing can be checked.
List items containing only inline mathTesting list items containing only math
There are many places where it makes sense to have a list of mathematical terms,
or possibly equations.
For example, one might wish to provide a list of derivative formulas.
With such lists, the author may wish to have display mathematics,
but almost certainly they don't want it centered.
One can work around this by using the \displaystyle command.
However, it would be nice if a list item containing only math used display mode by default.
A list item containing some text in a paragraph,
as well as some inline math: \int_a^b x^2\,dx = \frac{x^3}{3}.
A list item with text and math \int_a^b x^2\,dx, not in a paragraph.
\int f(x)\,dxmath in lists \frac{d}{dx}(\sin(x))=\cos(x)
Now, a p that isn't in a list,
followed by a list that's in a p.
\sum_{n=1}^\infty\frac{1}{n^2}=\frac{\pi^2}{6}
A list item starting with some math,
followed by text, all in a p
\frac{a}{b}\div \frac{c}{d} = \frac{ad}{bc}
\tan\theta = \frac{\sin\theta}{\cos\theta}
The above assemblage had some lists in it, just to see what will happen.
While we're at it, we might try adding lists that are in a list.
A list of items, some of which contain math
A first list item, containing some text.
The next list item will contain only math,
with the m tag inline with the li tag.
A list item with text and math \int_a^b x^2\,dx, not in a paragraph.
\int_a^b f'(x)\, dx = f(b)-f(a)
The next two list items will contain, respectively,
a list item containing only math, where the math is on a new line,
then the same again, but with two new lines,
and a list item containing math within a p,
first inline, and then after a line break.
A paragraph that begins with text, then some math:
\sum_{n=1}^\infty\frac{1}{n^2}=\frac{\pi^2}{6}
And now some more text. The next two list items contain:
Math only, inline.
Math only, with a newline.
Math only, but in a paragraph.
Also the next item on this list has math,
just to see what happens in a nested list.
\int_a^x \frac{d}{dt}f(t)\,dt = f(x)-f(a)
\frac{a}{b}\div \frac{c}{d} = \frac{ad}{bc}
\tan\theta = \frac{\sin\theta}{\cos\theta}
\frac{a}{b}\gt \sum_{i=3}^{76}\frac{x^2}{y^2}
Inclusion of any text other than math will kill the automatic display style.
For example, this would happen if one were to add punctuation after the math.
\int_a^b \frac{\sin(x)}{x}\,dx,
\int_a^b \frac{\sin(x)}{x}\,dx
List items can have titles. We try that here, along with testing list items structured with paragraphs.
With \displaystyle added automatically
\sum_{n=1}^\infty ar^n
Two paragraphs
\sum_{n=1}^\infty ar^n
\sum_{n=1}^\infty ar^n
One paragraph, extra text
So, \sum_{n=1}^\infty ar^n
Two elements (only)
\sum_{n=1}^\infty ar^n
Difficult List Items
In we were careful about lone bits of math inside list items. The cd element is used with indentation, which is likely superfluous inside a list item that is already being indented. Here we test lone cd elements inside of list items in various configurations.
Unordered list, one-deep.
Foo Bar FooBar Foo Bar
This list item is a long paragraph with a cd in the middle which should be indented some to indicate its participation in the paragraph.
Foo Bar FooBarBar Foo BarFooThis list item is a long paragraph with a cd in the middle which should be indented some to indicate its participation in the paragraph.
Foo Bar FooBarBar Foo BarFoo
Intervening paragraph, to illuminate spacing at both the top and bottom of a list. Intervening paragraph, to illuminate spacing at both the top and bottom of a list. Intervening paragraph, to illuminate spacing at both the top and bottom of a list. Intervening paragraph, to illuminate spacing at top and bottom of a list.
Ordered lists, two-deep, mixed.
First item, outer level.
First inner item, cd onlyFoo Bar FooBarBar Foo BarFoo
Second inner item, a paragraph in a list item.
Third inner item, cd onlyFoo Bar FooFoo Bar FooBar Foo Bar
cd inside second item, outer levelBarBar Foo BarFoo
Description Lists
Use dl to make a description listdescription listlistdescription. Inside of those tags, use li for each entry. Then, use title to specify the term being described and p to specify the description.
A description list
description listlistdescription
has a short term or phrase that is prominent, followed by a short description. It is modeled on the lists of similar structure in both and HTML. It makes for a nice medium-weight way to define terms, somewhere in-between the term tag which just makes a term prominent in a sentence, and a definition, which is set off, has a heading, a number, and a title. Do not try to manage the separation between the title and the description by employing punctuation (but you can include a question-mark or exclamation-point if necessary). For example, do not include a colon to the end of the title. This example is from Bob Plantz.
Central Processing Unit (CPU)
Controls most of the activities of the computer, performs the arithmetic and logical operations, and contains a small amount of very fast memory.
This is a second paragraph that should appear indented in PDF output.
Memory
Provides storage for the instructions for the CPU and the data they manipulate.
Input/Output (I/O)
Communicates with the outside world and with mass storage devices (, disks).
Bus!
A communication pathway with a protocol specifying exactly how the pathway is used. (The punctuation is just for testing.)
A geometric series. The formula is valid if |x| < 1.
Some presentations can be assisted by a hint from the author about the lengths of the titles. You can choose to provide a width attribute on a dl element with possible values narrow, medium, and wide. The value refers (somewhat confusingly) to the distance between the left margin and the description. The default is medium, which is illustrated above. An example with narrow:
Red
The color of the sun at sunset.
Blue
The color of a clear sky. Also a synonym for depressed or sad, the title of a 1971 Joni Mitchell album (and more than a dozen other musical albums), the period of Picasso's work between 1901 and 1904, and much more!
Aqua
The color of shallow tropical waters.On a sunny day! (Testing footnotes in description lists for output.)
Math x^2
Sorry, not a color but testing titles with math in them.
i before e except after c, unless it sounds like a as in neighbor and weigh
Get feisty about that weird counterfeit rule: seize the day and don't have a heifer, man.
Avocado
Avocado is the the color with hex code #568203, and also the main ingredient in guacamole.
Magenta
Magenta is a color, and a character in Rocky Horror.
Zymurgist
A scientist who studies the chemical process of fermentation in brewing and distilling. Also the alphabetically last 9-letter word in the English language.
Byzantium
Byzantium is the the color with hex code #702963, and also an ancient Greek city which later became known as Constantinople, and today is called Istanbul.
Convection
Circulating motion in a fluid.
Elementary
No literary detective ever said Elementary my dear Watson. In particular, Sherlock Holmes never said that.
Understand
Perceive the intended meaning of.
Washington
A state, a district, the man on the US $1 bill and on the US quarter. Did you ever notice that on the US dime, the value is stated as one dime? But how is one to know that a dime is worth 10 cents?
Aquamarine
Aquamarine is a color, and a mineral.
Those who cannot remember the past are condemned to repeat it.
George Santayana wrote those words in 1905. A similar aphorism is misattributed to Winston Churchill. The idea is embodied in the 4th principle: respects the good design practices which have been developed over the past centuries.
\displaystyle \zeta(s) = \sum_{n=1}^\infty n^{-s}
The Riemann \zeta-function is defined by a Dirichlet series, valid for \Re(s) > 1.
main() is a void function
A dl with width="narrow" might be a useful way to give commentary on a program listing.
And the same example with wide:
Red
The color of the sun at sunset.
Blue
The color of a clear sky. Also a synonym for depressed or sad, the title of a 1971 Joni Mitchell album (and more than a dozen other musical albums), the period of Picasso's work between 1901 and 1904, and much more!
Aqua
The color of shallow tropical waters.On a sunny day! (Testing footnotes in description lists for output.)
Math x^2
Sorry, not a color but testing titles with math in them.
i before e except after c, unless it sounds like a as in neighbor and weigh
Get feisty about that weird counterfeit rule: seize the day and don't have a heifer, man.
Avocado
Avocado is the the color with hex code #568203, and also the main ingredient in guacamole.
Magenta
Magenta is a color, and a character in Rocky Horror.
Zymurgist
A scientist who studies the chemical process of fermentation in brewing and distilling. Also the alphabetically last 9-letter word in the English language.
Byzantium
Byzantium is the the color with hex code #702963, and also an ancient Greek city which later became known as Constantinople, and today is called Istanbul.
Convection
Circulating motion in a fluid.
Elementary
No literary detective ever said Elementary my dear Watson. In particular, Sherlock Holmes never said that.
Understand
Perceive the intended meaning of.
Washington
A state, a district, the man on the US $1 bill and on the US quarter. Did you ever notice that on the US dime, the value is stated as one dime? But how is one to know that a dime is worth 10 cents?
Aquamarine
Aquamarine is a color, and a mineral.
Those who cannot remember the past are condemned to repeat it.
George Santayana wrote those words in 1905. A similar aphorism is misattributed to Winston Churchill. The idea is embodied in the 4th principle: respects the good design practices which have been developed over the past centuries.
\displaystyle \zeta(s) = \sum_{n=1}^\infty n^{-s}
The Riemann \zeta-function is defined by a Dirichlet series, valid for \Re(s) > 1.
main() is a void function
A dl with width="narrow" might be a useful way to give commentary on a program listing.
You can nest description lists, though items might get crowded horizontally. We expand our computer list a bit.
Expanded CPU
Controls most of the activities of the computer, performs the arithmetic and logical operations, and contains a small amount of very fast memory.
Arithmetic
The kind of computations that give a computer the name computer.
Logic
Operations that make decisions, if this, then that, plus: and, or, and not.
Memory
Space to store information and results, permanently or temporarily.
This is a second paragraph that should appear indented in PDF output.
Memory
Provides storage for the instructions for the CPU and the data they manipulate.
Input/Output (I/O)
Communicates with the outside world and with mass storage devices (, disks).
Bus!
A communication pathway with a protocol specifying exactly how the pathway is used. (The punctuation is just for testing.)
A geometric series. The formula is valid if |x| < 1.
Named Listsnamed listlistnamed
A list can be wrapped with a list element, so that it earns a number, can be given a title and have an introduction and conclusion. Cross-references to individual list items get a bit involved as they are prefixed with the number of the list and then the number of the item, so conceivably you could get a number like 4.5.3:2.a.ii. The colon is used to indicate the transition from the number of the list within divisions and the numbers coming from the list hierarchy, since it has two small dots.
Colors of the Rainbow
Because the colors are always in the same order, an ordered list is natural here. The colors change continuously, but are often divided up into large ranges that human perception can easily distinguish.
Red
Orange
Yellow
Green
Blue
Indigo
Violet
So some people use the acronym ROY-G-BIV to remember this sequence.
This next list is used for testing cross-references to it. See .
A named list of targets
This is the introduction to this named list, which references an item within, via the hybrid text attribute: . At one time this paragraph was inadvertently centeredthat bug has been fixed.
A and i
A and ii
A and iii
B and a
B and b
B and c (target of some cross-references)
The next three cross-references point to a list item, just above. It is interesting because the list is named, hence numbered. The global reference uses the full number, while the local reference uses the number from within the list. The hybrid reference recognizes that the target is within the same named list, so the number can be shorter. An identical hybrid cross-reference appears within the introduction to this list, an immediately following, but outside the list.
Cross-reference within named list (global):
Cross-reference within named list (hybrid):
Cross-reference within named list (local):
C and bullet and 1
C and bullet and 2
C and bullet and 3
C and bullet
C and bullet
This is a paragraph just outside the preceding named list, which references an item within, via the hybrid text attribute: .
listThis is a paragraph with three lists contained within it. For HTML output we have to inside-out the lists.
A one item ordered list.
In other words, the text before, after, and between, needs to each be encapsulated as an HTML p element of its own.
A one item unordered list.
Including definition lists.
Define Me
A one item definition list.
That's all!
A one item list, whose item is a paragraph with two contained ordered lists, separated by text.
Introductory text.
First item, first list.
Intermediate text.
First item, second list.
Concluding text.
Testing List Decompositions
A list in a paragraph is a construction in HTML that browsers try to correct, which leads to unpredictable results, so we have to decompose an author's paragraph with lists into a sequence of HTML paragraphs, interrupted by lists. This subsection is only relevant to HTML output, and only for testing.paragraphnormal
This paragraph opens with an ordered list.
Testing the id, and other info that should be at the top of the paragraph.
Now the paragraph continues, and we have an index item here, so we can test cross-references back here.paragraphopens with listList Column Testing
This is a list arranged into two columns with some intentional layout challenges. The math is too long to fit in one column and can't be wrapped - it reduces the number of columns in its row. The long text items can be wrapped and stay within their column.
A long item that can be wrapped over multiple lines.
Four items.
Another long entry that simultaneously tests that long entries look good in a list,
and also tests an odd number of entries in a two column list.
Exercises (with lists)
This exercise should have several parts, and labels should follow the defaults for second-level lists (since the exercise is numbered according to the top-level default).
Exercise 1, first part.
Exercise 1, second part.
Exercise 1, second part, first refinement.
Exercise 1, third part.
Table Alignment Example
1111, 22223333aaaabbbb,ccccAAAABBBBCCCC
This exercise (a list item really) has a table first. Default aligns it vertically above the exercise number. Placement here tests correcting that alignment.
A small test of cross-references to subsidiary parts of exercises. Exercise 1, third part: . Exercise 1, second part, first refinement: .
References (with lists in Annotations)
Some book would be listed here.
Here is the annotation and an ordered list as part of that annotation.
Book 1, first part.
Book 1, second part.
Book 1, third part.
Table Calisthenics
c = 832
c
That was a Sage cell just now, which has nothing to do with tables. But we needed someplace to test placement right after a division heading. Carry on.
A very minimal table, hence with left-justified cells, no borders. We do wrap the tabular element in a table element to get centering, numbering and a caption. Footnotes inside cells are tested here.
Some ColorsRedGreenGreen can be a very sick looking color.YellowBlueWhitePink
Note that tables may be constructed using the Complex Table Editor tool online at latex-tables.comand then exported in syntax.
Tables can be used and abused many ways. We describe long division of polynomials by using vertical and horizontal borders on individual entries of a tabular. The division lines are slightly thicker than the subtraction lines. This is a good example of the typical abuse of tables for horizontal and vertical layout. At least we have called it a Figure, not a Table.
Polynomial Long Division
x-5x+2x^2-3x-8x^2+2x-5x-8-5x-102
An example of aligning table cells' contents horizontally. See the source for comments.
For a table without a caption, create a tabular and place it directly within the current division. This will allow control over the horizontal placment, but without a caption, there is no number, and the tabular cannot be cross-referenced.
One
Same example as before, but now with vertical rules. See the source for comments.
A list whose first item is a table. In output a \leavevmode is necessary to keep this organized (item number, then table as content).
Table Alignment Example
1111, 22223333aaaabbbb,ccccAAAABBBBCCCC
Example Environment with Leading Table
Column Spans, No col Elements, Nine Columns12+345+6+78+91234567+89123456789
This example tests several things. In output, figures, tables, listings and side-by-sides are floats whose placement can migrate, but we have tries to supress this behavior. However, a float that is the first item of an environment (like a theorem or an example) can still float to a position before its title. If that does not happen here, then our additional defenses are working.
This example also checks that the total number of columns is correctly computed from the first row, which features several colspan attributes.
A bare minimum table (one row with one cell) to test edge cases:
One entry tableOne
Table cells with a fixed width where text wraps are known as paragraph cells. A cell will be created as a paragraph cell if and only if it has p children. And such cells should only have p children. The width of a paragraph cell is determined by a width attribute on the corresponding col (as a percentage). If the column has a non-paragraph cell with contents that are wider than the paragraph cells, results will be undesirable. There is presently no implementation for a paragraph cell that has a colspan greater than 1, although cells with colspan greater than 1 that are above or below a paragraph cell will behave. Setting width on a col that has no paragraph cells may produce unexpected results. A valign for the parent row (or the ambient tabular) can control vertical alignment (top, middle, or bottom). A paragraph cell's halign attribute (left, center, right, or justify) controls how the text is justfied. Cells inherit halign from row, col, and tabular in that order of preference. In a non-paragraph cell where halign='justify', the horizontal alignment will match the behavior of halign='left'.
Time Units
UnitStands ForDefinitionRoughlysecond
the duration of 9192631770 periods of the radiation corresponding to the transition between the two hyperfine levels of the ground state of the cesium-133 atom
an extraneous paragraph just to demonstrate the inter-paragraph formatting.
the time it takes you to say the phrase differential calculus
minute
exactly 60 seconds
how long it takes to microwave a full dinner plate from the refrigerator
hour
exactly 3600 seconds; exaclty 60 minutes
the length of one episode of a premium cable television show
Table cells can have multiline content using line elements. This is not the same thing as a paragraph cellline breaking will happen precisely where the author tells it to. A line will not break, even on a narrow screen. If a cell uses a line, it must only use a sequence of lines and no other content. As with paragraph cells, you can use a valign attribute for the row.
Dr. Seuss linesOne FishTwo FishRed FishBlue FishI am the Lorax.I speak for the trees.Self-referential: Look at me!Look at me!Look at me NOW!It is fun to have fun.But you haveto know how.
This is a table torture test with many combinations of halign, valign, colspan, p children, and line children.
Table Torture Test
Cell too wideLf md
Lef mid par cel
Rt md
Rig mid par cel
Cn md
Cen mid par cel
Js md
Jus mid par cel jus mid par cel
Colspan=2lef midwith linesColspan=3 rig midLinesBetweenParLinesBetweenNo Par
Par in row with lines
L t
Lef top par cel
R t
Rig top par cel
C t
Cen top par cel
J t
Jus top par cel jus top par cel
L b
Lef bot par cel
R b
Rig bot par cel
C b
Cen bot par cel
J b
Jus bot par cel jus bot par cel
Colspan=3 lef botColspan=2rig botwith linesLinesUnderParLinesUnderNo Par
Par in row with lines
And now a sidebyside with a table and a tabular to check that width is scaled appropriately. See Section to learn about sidebysides.
Some text from the US Constitution
A1.S1
All legislative Powers herein granted shall be vested in a Congress of the United States, which shall consist of a Senate and House of Representatives.
Should be 50% of 45% except perhaps on small screens.
A1.S2.C1
The House of Representatives shall be composed of Members chosen every second Year by the People of the several States, and the Electors in each State shall have the Qualifications requisite for Electors of the most numerous Branch of the State Legislature.
Should be 50% of 55% except perhaps on small screens.
Tables are formed in output with copious use of the \multicolumn macro to override more global alignment settings, and to spread the content of one cell across several columns. However, sometimes 's special characters have behaved badly in this situation. So the table below, two items per row, is just designed for testing. But of course, it should still render fine in other formats. The three test cases are from , but without 50 alphabetic characters and 8 digits, which should not be problems in this context. That section says more about making a comprehensive, yet legal, test URL. In order to test the use of a percent sign (%) in a URL, we follow it by two hex digits, specifically, 58, which is a way to represent the character X in a URL. The first column's entries are forced to be wrapped in a \multicolumn by specifying their horizontal alignment. The second column's entries will not be wrapped in a \multicolumn. So the two columns will look identical, other than the first having a left alignment, and the second has the default center alignment. (This table is known to render poorly in a Jupyter notebook. The cause is four dollar signs present in rows 1 and 3, and is explained in .)
Problematic Table Cells for 109az%-._~:/%5B%5D@!$&'()*+,;=#?09az%-._~:/%5B%5D@!$&'()*+,;=#?2e.com/09az%58-._~:/%5B%5D@!$&'()*+,;=#?e.com/09az%58-._~:/%5B%5D@!$&'()*+,;=#?3
Now, the same table repeatedly, but with different headers. No care has been taken with alignment or rules, which could improve how these look.
No HeadersStatePopulationArea (sq. mi.)Statehood (Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
One Row HeaderStatePopulationArea (sq. mi.)Statehood (Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
One Row Header, MultilineStatePopulationArea(sq. mi.)Statehood(Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
Two Row HeadersStatePopulationAreaStatehood(sq. mi.)(Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
One Vertical Row HeaderStatePopulationArea (sq. mi.)Statehood (Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
One Vertical Row Header, MultilineStatePopulationArea(sq. mi.)Statehood(Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
Two Vertical Row HeadersStatePopulationAreaStatehood(sq. mi.)(Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
Test of vertical header orientation and padding with borders
One Row Header, with RulesStatePopulationArea (sq. mi.)Statehood (Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
One Row Header, Multiline, with RulesStatePopulationArea(sq. mi.)Statehood(Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
The next table has a progression of thicker rules in the header, plus a progression of thicker rules across the columns. For testing, not for aesthetics.
We now finish this section with some long tables. Ones that will not fit on a single printed page. So this is only of interest when producing this sample article as a PDF. First a naked tabular, which should force a new page to start, and then still overrun the end of the page.
Now the same tabular, but within a table. Behavior should be similar, a new page and then it overruns the bottom of the page.
A Lot of ColorsRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePink
When you wish to allow a tabular to split itself at a page break, you can add the attribute break with the value yes. Certainly this will control a table or tabular which is longer than a page, but will also allow a shorter one to break. This might useful in a draft stage before undertaking page-fitting.
Here is the long tabular again, but with the break attribute set to yes.
Here is the long table again, but with the break attribute set to yes on the tabular.
A Lot of Colors, BreakingRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePinkRedGreenYellowBlueWhitePink
This device is not ideal, as some features of tables are not behaving as expected. More precisely, we switch from the standard tabular environment to the longtable environment from the package of the same name when table-breaking is requested. So there may be some undesirable interaction with other packages. For one, full-width horizontal rules seem to become as wide as the page (rather than as wide as the tabular). The following table is repeated but as a breakable tabular. The longtable package documentation suggests it accomodates the array package, but it also seems to make a variety of redefinitions. Furthermore, a panel of a side-by-side cannot be a breakable tabular, or a compilation error occurs.
Here is a consecutive pair of baretabular to test vertical space between them.
t2/32/3032/300032/3000003g(t)-1-1-1-1
t2/52/5052/500052/5000005g(t)1111
The longtable package allows for headers and footers indicating continued tables. A possible enhancement is to support this feature in the case of a long table.
When outputting Web page versions, it is possible to embed a variety of dynamic interactive elements. In a /PDF version, these will necessarily need to be replaced by some static substitute, such as a screenshot. See for the specifics of embedding instances of the Sage Cell Server, which is more elaborate, and not entirely similar.
Interactives in this section are those for which you provide code you have authored. Generally, the libraries involved to support this have open licenses, though the player for GeoGebra may be an exception. Creating these assumes some familiarity with HTML and Javascript. See for more interactives that are perhaps simpler to create or use.
(2018-06-22) Almost everything in this section is under active development and not stable yet. Feel free to experiment and make suggestions and requests. This page takes a while to completely load, so be patient.
HTML5 Canvas
HTML5 introduced the canvas element, which can be thought of a blank slate, a place to draw or write on. So has the slate element for a similar purpose. Generally, but not exclusively, HTML5 writes on a canvas using the Javascript language. We demonstrate this approach to interactive diagrams in this subsection.
The following examples are from David Austin's excellent Understanding Linear Algebra textbook, which can be found at understandinglinearalgebra.orgDavid's contribution of examples, and assistance designing the elements is greatly appreciated. Alright, let's learn some linear algebra. Yes, there are some learning opportunities in this subsection.
A simple eigenvector demonstration
Let \vec{x} be represented by the red arrow, and A\vec{x} by the grey arrow, for some particular 2\times 2 matrix A. Drag the tip of the red arrow to see the grey arrow change.
The interactive in shows a vector \vec{x} in red, and the matrix-vector product A\vec{x} in grey, for a particular 2\times 2 matrix A. The four entries of the matrix A are coded into the interactive. Can you deduce A simply by using the interactive? Which theorem is the key?
Eigenvector demonstration
Let \vec{x} be represented by the red arrow, and A\vec{x} by the grey arrow, for a 2\times 2 matrix A. Drag the tip of the red arrow to see the grey arrow change. Or drag the blue sliders to change the numerical values of the four entries of the 2\times 2 matrix A. You will not see the grey vector until you change the matrix using one of the two sliders on the left. Why is that? What are the eigenvectors of the initial matrix?
The next example has ten slate elements communicating with each other, and arranged with the layout features of a sidebyside (see ).
Affine Transformations
Flipping Woody
Parameters a, b, d, and e, form a 2\times 2 matrix A, while c and f form a vector \vec{b}. The two views of Woody shows the effect of the mapping \vec{x}\mapsto A\vec{x} + \vec{b}.
If your interactive employs a slate with a surface attribute whose value is html, then you are advised to augment each top-level (HTML) element within the slate with the attribute:xmlns="http://www.w3.org/1999/xhtml"This will identify all of the elements within the slate as HTML elements and not as elements. The danger is that elements with the same name in both languages, such as li and table, will be mis-identified. This could be harmless, but could also create chaos, such as disrupting numbering of elements.
See the source code of this document for examples: , .
Note that the HTML that is output can vary slightly from your source in small, harmless ways, such as empty (self-closing) elements being output with both an opening and a closing tag. Please report any significant discrepancies. Soon this requirement will be enforced in the code.
It is also possible to add script elements within an interactive that contain properly escaped JS code. These elements will be placed at the end of the document created to hold the interactive content and can interactive with the other elements within the interactive but can not directly interact with the surrounding page.
Authors are strongly discouraged from trying to incorporate complex code in the form of a script, but it can be a useful tool to call more complex code that is linked via source on the interactive.
This example uses a script to draw Hello World to a slate
A simple embedded script example
This next interactive uses ECMAScript module based code. That will not function unless the script's type is set to module in the HTML output. So let's set it here and pass it through. It also generates its own HTML elements, so we hopefully don't get a default empty div.
A simple JS module test
D3.jsD3.js
D3 is a Javascript library for Data-Driven Documents, which might greatly enhance some data you wish to display. In short, it uses the animation capabilities of SVG. Available examples seem sensitive to the version of the library, so we have examples using different versions. Use the version attribute on interactive to specify the version number. The default is 5.
The first example uses the force layout and collision detection from Version 3. (The necessary commands are very different in Version 4.) Pretend you are a working shepherding dog. Can you separate, and catch, one of the herd?
This is adapted from a block by Mike Bostock with a GPL license. A similar demonstration, only using an HTML5 canvas is at .
Force layout and collision detection
Place your mouse/pointer at the center of the interactive to repel the 200 circles.
Similar, but different, this demonstration of a graph layout uses Version 4 of the library. Technical notes:
We have changed the size of the nodes, and their number, to fit in a smaller space.
The Javascript script uses introspection to size itself, which would be a good general practice. (Though it does not resize itself on window resize, only initial load.) The interactive also has the resize-behavior attribute set to responsive.
This is adapted from a block by shimizu with a GPL license.
Graph Layout
Drag a vertex to a new location to see the graph adjust its layout.
Graph Planarity
Can you move the vertices to new locations such that the resulting graph is planar? (In other words, no edges cross?)
Finally an example that actually uses some data. Here is the description from the original block by Martin Chorley with an MIT License.
This visualisation uses a D3 force simulation to show the Twitter relationships between the Assembly Members in the Welsh Assembly in terms of the number of times each assembly member has mentioned another assembly member in a tweet.
Twitter relationships were mined on 22/03/2017, and are representative of the conversational relationships on that date. Links between AMs represent a conversational relationship: one AM has mentioned the other. Party colour indicates the direction of the mention.
Hover over the nodes to fade out non-connected nodes.
Rather than using intermediate nodes to create curved links (as in Mike Bostock's block), this adds curves by adding a calculated control point for each edge.
Technical notes:
Once the nodes organize themselves (automatically in the beginning), they cannot be moved.
We have adjusted the margins in an attempt to keep names visible on the right side, but without giving up too much space.
We have adjust the repelling force, and the collision buffer, to better fit the available space.
This example required its own CSS, which we have included as part of the interactive.
The aspect ratio of the interactive is set to slightly taller than that of the slate it contains. This accounts for the fact that the contents generated by the js/css in the slate occupy slightly too much vertical real estate.
The data collected from the Twitter analysis is contained in a JSON file, mention_network.json, and where the script loads that file, it has a hardcoded path. So this example is a bit brittle, should that file move.
Tweet mentions within the Welsh Assembly
Hover on the name of an Assembly Member to concentrate on their tweet mentions.
SVG
Entirely similar to using an HTML5 canvas element (), it is possible to control an SVG element with Javascript. This example is from Mark McClure.
Look carefully at the source and rendering of this example as HTML. The functions to choose from via radio buttons, and the change in x, denoted later as h, are being rendered as mathematics by the Javascript MathJax library. However, this cannot be accomplished with simply $...$ nor by simply \(...\), but instead by using the \(...\) and then also wrapping that in a span element with a class attribute set to process-math. (The latter is how we instruct MathJax as to which parts of a page to process, or not). So to have MathJax render a nice x^2 in this context (math inside HTML inside a slate inside an interactive) would be accomplished with<span class="process-math">x^2</span>
Tangent and secant slopes
Calculus consists of those problems in mathematics that can be solved with the
following basic approach:
Approximate and take a limit!
The simplest, standard, geometric example of this process is the approximation
of the slope of a tangent line with a secant line.
Here's an illustration of this basic idea.
Select a function with the radio buttons, then use the checkbox to add the secant line. The denominator of the difference quotient, h, can be adjusted with the slider and the red point will react to the different values. The green point is the point of tangency, and can be dragged with the mouse.
Changing Secant Lines
When discussing the derivative as a limit, we think of the point of tangency as being fixed (the green point in ) and the other point defining the secant line as changing (the red point in ). Switch it up! Fix a large value of h (positive or negative) and then change the point of tangency (the green point). Discuss what you observe.
JSXGraphJSXGraph
JSXGraph is a cross-browser JavaScript library for interactive geometry, function plotting, charting, and data visualization in the web browser. Now a slate will be what JSXGraph calls a board. Again, you use Javascript to write onto a slate, but have some powerful shortcuts available from the JSXGraph library. For this reason, calls JSXGraph a language, similar in may respects to how Sage is a language, but is really a Python library. So realize that the syntax for using JSXGraph is that of Javascript.
Place Javascript inside a file that is specified with the source attribute of the interactive element. Then just be certain that xml:id of the interactive element is passed as the HTMLid in an (early) call to JSXGraph's initBoard() method.
The following example was contributed by Rick Roesler. The figure is comprised of four stack elements within a sidebyside. By varying the time in the top box, the reader can observe the displacement, velocity, and acceleration of a ball thrown upward with an initial velocity of 30 m/s.
1-Dimensional Kinematics
Use the time slider in the top panel to vary the time from 0 sec to 6 sec. Observe how the displacement, velocity, and acceleration vary with time.
The plot below is the curve r=a+b\theta in polar coordinates, for 0\leq\theta\leq 8\pi. It may be manipulated with the sliders to control the shape of the curve. Point A is contrained to the curve, but may be dragged to a new location. At A the tangent line and normal line are plotted as dashed red lines. Use the controls in the lower left to adjust the viewing window. This Archimedean Spiral is taken from the JSXGraph example wiki. The code could be written in 7 lines. Width is 80% and aspect ratio is 4:3.
The Archimedian Spiral r = a + b\theta, 0\leq\theta\leq 8\pi
Archimedian Spiral
Drag the sliders to change the parameters a and b. Controls in the lower-right will adjust the viewing window.
Here is a more elaborate example, from the JSXGraph Showcase, titled Infinity.
There are two active sliders to control the shape and shading of the graphic, and hovering the mouse near one of the edges will highlight the entirety of one of the 30 quadrangles. Finally, each of the four red corners may be dragged to a new location. Code is 47 lines. Width is 60% and aspect ratio is the default, 1:1, a square.
Infinity, from the JSXGraph Showcase
Drag the sliders to change the pattern, and drag any of the four red corners to change the overall shape.
Here are the two new examples. They have been included in a sidebyside layout element with equal widths (see ) so they can be placed horizontally across the page. They are not wrapped as figures, so cannot be cross-referenced. These are again from the JSXGraph example wiki, the left being Fermat's Spiral and the right being a demonstration of B-splines.
Drag the slider to change the curve.
Any of the 8 red control points may be moved anywhere.
Finally, a piecewise function you can control, with traces of the domain values and range values in two other JSXGraph boards. Boards and HTML buttons have been laid out using the sidebyside layout element.
Piecewise Function
The slider of the left panel will trace out the piecewise function. Simultaneously, the domain will be traced in the middle panel, and the range in the right panel.
Generally, we load an interactive into an HTML iframe to sandbox (isolate) it from other interactives. We does this for your own protection. So, for example, one interactive cannot talk to another. If two slate need to communicate, then they are related, and should be placed into a single interactive, allowed to layout themselves, or grouped within a sidebyside allowing finer control. Even if we have this under control, you might still enjoy reading Your JS is a Mess at mikecavaliere.com/your-js-is-a-mess-javascript-namespacing/.
JessieCodeJessieCode
JessieCode is a scripting language for JSXGraph. It provides the core geometric and graphing features of JSXGraph without accessing the underlying JavaScript. In order to use JessieCode, you simply create the HTML div element as you would for any other JSXGraph interactive plot and then provide the JessieCode script, which focuses on the geometric elements.
Because JessieCode is provided by JSXGraph, the interactive platform is jsxgraph. The slate, however, uses surface with value jessiecode. The script can be embedded directly in your code. As usual, you would need to remember to escape the special characters. JessieCode uses < and > for inequalities as well as for declaring objects used to style geometric elements, and && is the boolean AND operator. Alternatively, you can provide the file as a separate resource, providing the URL with a source attribute. Attributes defining the JSXBoard at the time it is created should be included as attributes of the slate, including boundingbox, axis, and grid.
For this first example, the JessieCode was included directly in the XML source as the contents of the associated slate.
Use the sliders to set the parameters of the quadratic f(x)=ax^2+bx+c. Drag the point A on the graph and the point P to define a line. Try to make the line tangent at the point at A and observe the resulting slope of the tangent line.
For this second example, the JessieCode was included through an associated script file, loaded by the browser.
Graph of a function that is continuous but not differentiable at x=0 because the slope of the secant line has no limit.
Drag the point B to move the point on the graph and change the secant line. Notice that there is no well-defined limiting tangent line as x \to 0.
Sage InteractsSageinteracts
Sage, and the Sage Cell Server, support interactive demonstrations, called interacts.
The interactive elements are nearly trivial to construct.
An interact is simply a single Python function (acted on by a decorator).
You have the full mathematical power of Sage at your disposal, so can do some very powerful computations with high precision (or exactly).
The interface is not as polished as what you can achieve with Javascript libraries.
Graphics refresh with a round-trip to the server, so are not nearly as fluid as with other tools.
Note that each interact is insulated from the others, unlike our other employment of the Sage Cell Server.
This example is by Marshall Hampton, taken from the Sage interact wiki, specifically Numerical integrals with the midpoint rule.
Also notice that when viewed in dark mode, this sample respects the rendering intent. That is due to dark-mode-enabled applied to it.
Numerical integrals using the midpoint rule
An interactive for numerical integration
An interactive element with a slider allowing the value of m for the number of rectangles, the function f, and start and stop values for the interval of integration. There is an image showing the graph of f on the interval along with m rectangles of equal base width along the interval of integration. The height of each rectangle is determined by the value of f at the midpoint of the base of the rectangle. Above the image, the numerical value of the integral reported by SageMath is provided as well as the sum of the areas of the rectangles as the midpoint estimate.
var('x')
@interact
def midpoint(n = slider(1,100,1,4), f = input_box(default = "x^2", type = str, width=40), start = input_box(default = "0", type = str, width=6), end = input_box(default = "1", type = str,width=6)):
a = N(start)
b = N(end)
func = sage_eval(f, locals={'x':x})
dx = (b-a)/n
midxs = [q*dx+dx/2 + a for q in range(n)]
midys = [func(x=x_val) for x_val in midxs]
rects = Graphics()
for q in range(n):
xm = midxs[q]
ym = midys[q]
rects = rects + line([[xm-dx/2,0],[xm-dx/2,ym],[xm+dx/2,ym],[xm+dx/2,0]], rgbcolor = (1,0,0)) + point((xm,ym), rgbcolor = (1,0,0))
min_y = min(0, find_local_minimum(func,a,b)[0])
max_y = max(0, find_local_maximum(func,a,b)[0])
pretty_print(html('<h3>Numerical integrals with the midpoint rule</h3>'))
pretty_print(html('$\\int_{a}^{b}{f(x) dx} {\\approx} \\sum_i{f(x_i) \\Delta x}$'))
print("\n\nSage numerical answer: " + str(integral_numerical(func,a,b,max_points = 200)[0]))
print("Midpoint estimated answer: " + str(RDF(dx*sum([midys[q] for q in range(n)]))))
show(plot(func,a,b) + rects, xmin = a, xmax = b, ymin = min_y, ymax = max_y,figsize=5)
Geogebra
To embed a GeoGebra applet as-is from GeoGebra's Classroom Resources site (by material ID), see . To design your own applet (either from scratch, or modifying something that already exists in one of those three forms) you may use one of Geogebra's Apps to embed the material in your document. (But note, use of the App comes with licensing restrictions.) will handle most of the technical details for you.
Do one of the following:
Identify a material ID from GeoGebra's Classroom Resources site. You might even make the material yourself on that site.
Obtain a .ggb file from GeoGebra. You might construct something on a desktop installation of GeoGebra and save it. If you have a base64-encoded string for a GeoGebra applet, but you don't have a .ggb file, you can decode the string and save the result. For example, at .
Obtain a base64 encoded string for a GeoGebra applet. You might first open a .ggb file in a desktop installation of GeoGebra, and push ctrl-shift-B (command-shift-B on a Mac) and then the string will be in your clipboard.
None of the above, with the intention to make an applet from scratch.
Then mimic the examples that follow, using GeoGebra API commands documented at Geogebra API Manual, but do not include the ggbApplet. or applet. used in examples to prefix the functionsthat part of the code will be provided automatically by .
There are some optional control elements that Geogebra provides, such as the presence of the toolbar and the reset button. These can be controlled by adding the following additional attributes to the slate and are automatically included in the initialization for the Geogebra applet.
toolbar="yes": add the Geogebra toolbar above the material
algebra-input="yes": add an entry box below the material to add graphical objects using algebra formulas or Geogebra graphical commands
reset-icon="yes": enable the reset icon
shift-drag-zoom="yes": enable ability to drag and zoom the viewing context
zoom-buttons="yes": enable buttons that control zoom
Jack Green created an applet on the Classroom Resources site with ID D4s2v4ft, which you may view at . Suppose you would like to use this in your project, but change something about it. We will change something trivial, making the y-axis ticks be separated 5 apart instead of 10 apart. We also decide we want a different aspect ratio and overall width. One gotcha: the original applet is loaded and then uses width and aspect attributes to resize the viewing window using the top left corner as an anchor. This does not rescale axes and that may leave you with important elements missing from the viewing window. So here we reset the viewing window to return to values that are in the original. Lastly, we disable zooming, which is not helpful for this applet. To do each of these things, we rely on the GeoGebra API manual at Geogebra API Manual. It is important to use one command per line.
The same can be done with a .ggb file. Here we use two provided by David Rosoff, and one provided by Tevian Dray. The path to the file needs to be relative. First, David's original.
In this one provided by Tevian Dray, we make no modifications (except for those imposed by the scaling). You will need to zoom out a bit, and then pan over some, to see all the pieces.
GeoGebra: a constructive proof that SAS congruence holds in Euclidean geometry (from Tevian Dray)
Drag some of the points and some of the circles to change them, and watch the remainder react.
You could also use a base64-encoded string of the .ggb file. You might come across such a string somewhere, or you might generate one by opening a .ggb file in a desktop installation of GeoGebra, and pushing ctrl-shift-B (command-shift-B on a Mac) to get the string in your clipboard. If you do this, you could use a base64 attribute in place of the source attribute in the previous example. We don't do that here because such a string is generally over 5000 characters long and we are keeping the sample article source a bit cleaner.
The next example shows how you can communicate between a GeoGebra applet and a slate contained in the interactive. The process is mediated by javascript code specified in the source attribute of the interactive. Event listeners in the code update the HTML when the diagram changes or vice-versa. MathJax is also notified when it needs to update math.
Note that this example has a slate whose surface is pretextand a slate whose surface is html, the latter requiring a namespace declaration. The former produces HTML according to the templates, which is fairly predictable, but never guaranteed to always be identical over time. A slate uses familiar syntax, produces results styled consistently, but might break in the future. While an HTML slate is similar, the results will not be styled, but it does allow for a wider range of HTML elements (a button element here) and will not change over time.
The indefinite integral in the last row of the table is a gratuitious test that aurhors' macros from docinfo are available to MathJax. Finally, a slate will only recognize p, tabular, sidebyside, and sbsgroup as children. Make a feature request if you have a good case for more.
\ x yz \mathbf{A}\mathbf{B}\indefiniteintegral{x^4}{x}
This interactive shows \vec{r}_{AB}, the displacement vector from \vec{A} to \vec{B} and the corresponding unit displacement vector \lambda_{AB}.
You may change \vec{A} and \vec{B} by moving the red and blue dots.
Click the dot to switch between x-y mode and z mode.
Coordinates of \vec{A} and \vec{B} can also be entered into the table directly.
Lastly, you may just wish to build something from scratch using GeoGebra API. Note that for accessibilty reasons, some objects are rendered unselectable with the setFixed command. Perhaps this should have been done with the previous examples, but that is more difficult when you do not know all of their names. Note that the GeoGebra scripting command setAttribute also changes the webpage's focus, so it is better to set the perspective using an attribute of the slate.
CircuitJS is an electronic circuit simulator. A circuit can be described by a language, which PreTeXt will interpret and submit for rendering. The next two examples are identical, but provided in slightly different ways, see the source for more. Preview images for PDF will be added later.
CircuitJS Example (source via an encoded attribute)
CircuitJS Example (source authored directly)
$ 1 0.000005 10.20027730826997 58 5 50 5e-11
R 464 32 464 -16 0 0 40 3.3 0 0 0.5
g 464 224 464 240 0 0
s 464 32 464 128 0 0 false
s 464 128 464 224 0 1 false
x 274 181 431 184 4 12 bottom\sswitch\s(to\sground)
x 312 85 426 88 4 12 top\sswitch\s(to\sVdd)
O 464 128 544 128 1 0
x 532 110 593 113 4 12 output\spin
IFrames from Files
An iframe is an HTML element that allows embedding of a complete web page within another one. Here we use this device to provide interactive 3D diagrams built with other tools.
We begin with a Jupyter notebook hosted on . News of success on other hosts for Jupyter notebook servers will allow us to expand this description. We use a Sage kernel and create a 3D surface suggested by Juan Carlos Bustamante:var('x,y')plot3d(x^2 - y^2, (x,-1,1), (y,-1,1), color="orange", mesh=true)
News of other computational engines that produce similar graphics will also allow us to further expand this description. Note that for the case of Sage 3D plots, support for the sageplot element makes this even easier. For example, see .
A button in the lower right allows for several options, one is Save as HTML, which will produce a complete self-contained web page we can recycle. We save this file with our other externally-created images, in a directory that we choose to name iframeyou can use another name. Then we make an interactive with an iframe attribute that has the filename, starting from iframe/ (in other words, do not include the name of your managed directory of external images).
Sage+Jupyter iframe
Note that the downloaded file has links to specific versions of the three.js library, which are beyond our control, and beyond your control. So there is a future where these images may need updating. You could put your source code into a (large) comment with your project's source for safe-keeping in the future. See for the server version.
threejs
Once upon a time there was an example here using the threejs 3D Javascript library. It was one of the project's examples, licensed with an MIT License, with minimal modifications.
But it would seem to have become a bit more complicated to embed and our example was not rendering. As of 2022-08-08, we have removed it. Of course, you can find it in the git repository, perhaps searching on the date string just mentioned. It woulld be interesting to see if our interactive framework could still support the changes.
The following two examples are meant to be instructive (only). The end result is accomplished in a much more straightforward way be the method in . We illustrate a way to get a three.js image out of an HTML page as a Javascript file and render it on a slate. We follow the second method in a blog post from the n-Category Cafe.
Open a Jupyter Notebook that utilizes a Sage kernel. This can be done easily at CoCalc (and for free initially).
Sketch a surface using Sage code. We recycle the suggestion from Juan Carlos Bustamante in :var('x,y')plot3d(x^2 - y^2, (x,-1,1), (y,-1,1), color="orange", mesh=true)
Look for a button (in the lower-right) which will provide a menu option Save as HTML. Save the resulting HTML file, and open a copy in a text editor.
You are now looking for two HTMLscript elements. One will tell you just which version of three.js is being used, vis a @src attribute. For the second example below we locatedhttps://cdn.jsdelivr.net/gh/sagemath/threejs-sage@r122/build/three.min.jsThe @r122 will likely be a version number, which is a good thing for the longevity of your work. This will get used in the source attribute of your interactive, which will have platform set to javascript.
The second script element is likely huge and has many generic functions defined it. There may be a huge variable full of data points computed by Sage. Copy the contents of this script element into a new Javascript file (so use a .js extension). Do not edit in any way until you read further. Once adjusted, this file too gets specified in the source attribute of your interactive.
Your interactive needs a slate element for the graphic to draw on, and you will need to give it a proper xml:id attribute, plus teh surface will be set to div. Then you need to edit the Javascript file to connect the graphic with the slate, via IDs in your source and on teh HTMLdiv created by the slate. Look at the provided examples to see how. Do not make any other edits to this file, even if tempted.
Study the two examples below, and mimic how they were constructed.
First, the example given in the blog post referenced above.
threejs catenoid surface, from n-Category Cafe
Second, the example from JC Bustamante.
threejs saddle by Sage
DoenetML
DoenetML is a markup language
inspired by for semantically describing interactive
mathematics applets for the web. Use
interactive[@platform="doenetml"] with a
slate[@surface="doenetml"] to include DoenetML content
within your document.
Since DoenetML is similar to,
but not completely compatible with, XML, it cannot be authored
directly within a PreTeXt document without painstakingly escaping
every < as < and every &
as &. However, a convenient workflow to avoid this
is to author your DoenetML in a separate file like
example.doenetml, then include this file
within your document using
<xi:include parse="text" href="path/to/example.doenetml"/>.
Altenatively, you can enclose your DoenetML in a CDATA, as we do below.
DoenetML example
Adjust the vectors \vec u, \vec v, and \vec w in the left
graph to visualize the areas calculated by
\det[\vec u\hspace{0.5em}\vec w], \det[\vec v\hspace{0.5em}\vec w],
and
\det[\vec u+\vec v\hspace{0.5em}\vec w].
\det[\vec u\hspace{0.5em}\vec w],
\det[\vec v\hspace{0.5em}\vec w]
(6,2)
(3,7)
(9,5)
\det[\vec u+\vec v\hspace{0.5em}\vec w]
$w
$uPlusV
]]>
Interactive Elements, Server & Layoutsinteractive elementsserverinteractive elementslayoutembedded interactive elementsserver
When outputting Web page versions, it is possible to embed a variety of dynamic interactive elements. In a /PDF version, these will necessarily need to be replaced by some static substitute, such as a screenshot. See for the specifics of embedding instances of the Sage Cell Server, which is more elaborate, and not entirely similar.
Interactives in this section have code that lives on a server somewhere (in the cloud). So maybe you uploaded an interactive demonstration, or maybe somebody else did. In this sense, these are easier to create or use. But pay attention, the code may come with restrictive licenses, even if you are the author originally. See for more interactives that can be free as in freedom or liberté. CalcPlot3D is the notable exception here.
(2018-06-22) Almost everything in this section is under active development and not stable yet. Feel free to experiment and make suggestions and requests. This page takes a while to completely load, so be patient.
GeoGebraGeogebraserverGeogebramaterial
A Geogebra material is something you might use in a class. It could also be called an interactive demonstration. Go browsing at and find something appropriate for your project. Or make an account and create your own.
Once you find a material that looks instructive, it will be at a URL such ashttps://www.geogebra.org/m/KGn2d4Qd and you want to pick off the identifier on the end, in this case KGn2d4Qd. Then author<interactive geogebra="KGn2d4Qd" /> At this writing (2018-02-04) you will want to place this inside a figure, with a caption, as we do right now with material KGn2d4Qd.
The shape of the material will be fixed, so determine the dimensions (measure with an on-screen ruler or inspect the underlying definition). Use material-width and material-height with the actual material width and height (units are pixels). These are treated by Geogebra as internal coordinate dimensions and are separate from the physical layout dimensions that appear in your text. In the absence of these attributes, default values are 800 pixels for the width and a height based on the provied aspect ratio.
Right Triangle Paradox
There are some optional control elements that Geogebra provides, such as the presence of the toolbar and the reset button. These can be controlled by adding the following additional attributes to the interactive.
toolbar="yes": add the Geogebra toolbar above the material
algebra-input="yes": add an entry box below the material to add graphical objects using algebra formulas or Geogebra graphical commands
reset-icon="yes": enable the reset icon
shift-drag-zoom="yes": enable ability to drag and zoom the viewing context
zoom-buttons="yes": enable buttons that control zoom
Note that materials hosted at geogebra.org have a non-standard, non-commercial license you must agree to before you can download them as source code. Perhaps you must forfeit your copyright when you upload a material? We have not investigated this thoroughly.
Desmos GraphsDesmos graphs
Desmos provides interactive graphing applications. The following example was created by Ann Cary and made available via the Share function of Desmos. You can make your own Desmos graph, choose the Share icon, and the Embed option, to get a URL such as https://www.desmos.com/calculator/ttox1bvxku You want to pick off the identifier on the end, in this case ttox1bvxku, then author<interactive desmos="ttox1bvxku" width="60%" aspect="2:3" /> as we have done here.
The static image employed in the version of this article was obtained by viewing the graph at the Desmos site (, not the embedded version in the HTML version), and using the Share button to export a PNG image. In this case, we used a Medium Rectangle and Thick lines.
Graph of ln(x^2+5)-3
Note that Desmos has extensive Terms of Service which include restrictions on commercial uses.
CalcPlot3DCalcPlot3D
CalcPlot3D is a Javascript application for creating, visualizing, and understanding plots of 3D surfaces. So it would be an ideal companion to a book on multivariate calculus, but should be useful in other courses of study.
To use it, start at the online app version. Create a plot and adjust the image to a viewpoint and scale if you like. Then, click the menu/hamburger icon in the upper-left and choose File. From here you can save a PNG image for the static version, but you also want to select Encode View in URL. Now your browser address bar is filled with a query string (all the stuff after the question-mark) that has all the information necessary to reproduce your plot (and view). Copy everything after the first question-mark to the interactive/code element. Be sure to replace any ampersands by & (see the Author's Guide for more about certain characters in URLs). Examine the source for the examples below to see how they are authored. The Help Manual for CalcPlot3D is also available off the menu/hamburger icon in the upper-left.
In grab the image with your mouse and rotate it in various directions. Then while the image has focus, press the 3 key (short for 3-D), to get a 3D view, which will require some red-blue 3D glasses to fully appreciate. Press the key again to return to a regular view.
When using a version with controls (e.g. ), or the full application (e.g. ), specify an aspect ratio that is wider than it is tall. Start with aspect="3:2", and perhaps fine-tune from there.
Intersection of two planes (minimal embedding)
Probability wavefunction with contours (includes controls)
Plot of f(x,y)=\dfrac{1}{y-x^2} on [-2,2]\times[-2,2] (full application)
IFrames from Servers
The iFrame versions of interactives can point to a network location, presuming the endpoint is reasonably well-behaved. If you are using this sytematically, let us know and perhpas it should become a more dedicated construction. See for the local file version.
This example is from PhET Interactive Simulations.
Fourier: Making Waves iframe
Anything that suggests you can embed an interactive widget via an iFrame is fair game for this feature. This is a Google Map of the state of California, for use in a French language document, from Julien Giol. The necessary URL is obtained by using the Share feature, and then the Embed a map option has HTML with the URL in a src attribute.
California.
Layout of Interactives
In HTML, interactives are rendered in iframes, which can offer some layout challenges. The PreTeXt page has no direct control over the layout within the interactive. All it does is provide a fixed sized frame in which the interactive content can display itself. The width (a percentage) and aspect (a width:height ratio like 2.1:1 OR a number like 1.5) attributes on the interactive are the main tools to specify the dimensions. Below are three renderings of the same Google map using different widths/heights.
If you know a particular interactive is designed to display at a particular pixel size, you can can specify a design-width like 300 to force exactly that width. Combine that with aspect to also force the height. The example below forces a size of 300x450.
Graph of ln(x^2+5)-3
What happens if there is not enough space to display the requested frame? That depends on the resize-behavior applied to the interactive. The default is fixed-height. In this case, the interactive's height will not change if the window becomes too small to display the full width of the interactive. Instead a horizontal scroll bar will appear. This can be seen in many of the samples in and this CircuitJS sample:
CircuitJS with resize-behavior="fixed-height"
The other option for resize-behavior is responsive. In this case, the interactive's aspect ratio will be maintained. If the width gets smaller, so will the height. This can be seen in the version below.
CircuitJS with resize-behavior="responsive"
The best behavior will be determined by the contents of the interactive. If the interactive knows how to dynamically size itself, responsive is likely the better option. If the interactive assumes that there is a certain amount of space and the contents will never resize themselves, fixed-height will likely work better.
In addition to specifying the resize-behavior in a particular interactive, you can apply a document level default value in your pub file. You can also specify a different default for a specific types of interactive. See the PreTeXt guide for documentation, or the publication.xml file of this Sample Article for an example of configuring defaults.
The code that generates content needs to make sure it does not overflow the available space or you will get scroll bars. Common culprits are canvas or svg elements that are not displayed as blocks or little bits of whitespace.
If an interactive wants to request a change to the amount of vertical space available to it, it can pass a message to the PreTeXt page asking for a lti.frameResize. (It is also possible to request a different amount of horizontal space, but doing so is not guaranteed to work and is much more likely to result in breaking the overall page layout.) The simple demo below uses that process to allow for resizing. A resize request should trump the original aspect ratio.
Growable interactive fixed-height
Growable interactive responsive with % width
Growable interactive responsive and design-width
Interactive Exercises
Interactive components, just for testing, no commentary.
True/False
A True/False question.
True/Falsevector space
Every vector space has finite dimension.
The vector space of all polynomials with finite degree has a basis, B = \{1,x,x^2,x^3,\dots\}, which is infinte.
P_n, the vector space of polynomials with degree at most n, has dimension n+1 by . [Cross-reference is just a demo, content is not relevant.] What happens if we relax the defintion and remove the parameter n?
Multiple-Choice
Multiple-Choice problem
Multiple-Choice, Not Randomized, One Answerstop signs
What color is a stop sign?
Green
Green means go!.
Red
Red is universally used for prohibited activities or serious warnings.
White
White might be hard to see.
What did you see last time you went driving?
Maybe go out for a drive?
Parsons Problem, Math Proof
With some MathJax.
Parsons Problem, Mathematical Proofeven numbers
Create a proof of the theorem: If n is an even number, then n\equiv 0\mod 2.
Suppose n is even.
Then n is a prime number.
Then there exists an m so that n = 2m.
Then there exists an m so that n = 2m + 1.
Click the heels of your ruby slippers together three times.
So we have the displayed equation: n = 2m + 0.
This is a superfluous second paragraph in this block.
Parsons Problem, Programmingprime numbersSieve of Eratosthenes
The Sieve of Eratosthenes computes prime numbers by starting with a finite list of the integers bigger than 1. The first member of the list is a prime and is saved/recorded. Then all multiples of that prime (which not a prime, excepting the prime itself!) are removed from the list. Now the first number remaining in the list is the next prime number. And the process repeats.
The code blocks below can be rearranged to form one of the many possible programs to implement this algorithm to compute a list of all the primes less than 250. [Ed. this version of this problem requires the reader to provide the necessary indentation.]
n = 250primes = []candidates = list(range(2,n))candidates = []primes = list(range(2,n))primes = candidates + [p]while candidates: p = candidates[0] primes.append(p) for nonprime in range(p, n, p): if nonprime in candidates: candidates.remove(nonprime)print(primes)Matching
Events and dates.
Matching Problem, Datesmatching US dates
Match each event in United States history with the year it happened.
Review Encyclopedia Brittania, 25 Decade-Defining Events in U.S. Historyurl.
Monroe Doctrine1823Haymarket Riot1886Louisiana Purchase1803Battle of Gettysburg1863Clickable Area
Words, not code.
Clickable Areas, Regular Text
Identify (by clicking, or by circling) all of the nouns in this quotation by Eleanor Roosevelt.
The future belongs to those who believe in the beauty of their dreams.
The incorrect words are pronouns.
Old-Style Fillin-In
Do not use this as a model for new exercises. Just for backwards-compatibility.
Fill-In, String and Number Answers
Complete the following line of a Python program so that it will declare an integer variable age with an initial value of 5.
age = ;
A variable of type int is appropriate for whole number ages.
Remember that Java uses just the first three letters of the word integer to define an integral type.
An integer variable may be initialized to a value.
Use 5 as the initial value of the variable.
A Reading QuestionShort Answer
This should be built with a text-box, only on a capable server (Runestone). So it can be answered
Faux Subsection
We used exercises divisions above, and need a subsection to feed the schema.
Dynamic Exercises
This section demonstrates the use of dynamic randomized exercises built upon the framework of Runestone components. These demonstration problems incorporate a library supporting mathematical expressions both for varying the content of the statement of the exercises as well as the checking of submitted answers.
Dynamic Fill-In
The first problem illustrates revised markup for fill-in problems that don't involve randomization and use simple string and number comparison tests. Later exercises illustrate the use of dynamically generated mathematical expressions.
Fill-In, String and Number Answers
Complete the following line of a Python program so that it will declare an integer variable age with an initial value of 5.
age = ;
A variable of type int is appropriate for whole number ages.
.*
Remember that Java uses just the first three letters of the word integer to define an integral type.
An integer variable may be initialized to a value.
.*
Use 5 as the initial value of the variable.
Fill-In, Multiple Strings, Custom Checker
In order to apply the Integral Test to a sequence \{a_n\},
the function a(n) = a_n must be
, and .
You already gave that answer.You already gave that answer.Fill-In Formula (Dynamic)
Find a formula for a cubic function f(x) that has roots at x=, x=, and x= and so that f(0)=.
f(x)=
Knowing the roots of a polynomial allows us to write down the formula of f(x) in factored form,
f(x) = A
with an unknown scaling multiple A.
When we evaluate f(x) at x=0 using this formula, we find
f(0) = A.
Since we also know f(0)=, we can write down the equation
A =
and find that A=.
Consequently, we can write our function in the form
f(x)=.
x1+d1x2+d2(x-x1)*(x-x2)*(x-x3)0y0/base_yintA*(x-x1)*(x-x2)*(x-x3)Decompose the Function
Consider the function h(x)=.
Find two nontrivial functions f(x) and g(x) so that h(x) = f(g(x)).
f(x) =
and g(x)=
Noticing that the expression appears inside parentheses with a power,
it makes sense to think of that as the inner function, defining g(x) = .
The outer function describes what happens to that.
If we imagined replacing the formula with a box and then call that box our variable x, we find the outer function is given by f(x) = .
This is not the only non-trivial composition. Can you find others?
a*x^n+bc*x+dx
f(x)=x is not allowed for nontrivial compositions.
You have composed in the wrong order.
g(x)=x is not allowed for nontrivial compositions.
Interactive Coding
More interactive components, just for testing, no commentary.
ActiveCode
ActiveCode, Python program.
An interactive Python program, using Runestone
print("Hello, World!")
An interactive Python program without codelens.
print("Hello, World!")
CodeLens
A steppable Python program.
A Python program, stepable with CodeLens
print('Hello, World!')
Activity with An ActiveCode
Something to do with ActiveCode program.
Activity Coding Exercise
Similar to above, but now as a complete Python program inside an activity. This demonstrates the possibility to use any project-like block (project, activity, exploration, investigation), but not in the case when structured with task.
for i in range(10):
print(i)
We're still not really sure.
YouTube
Video, observable on a Runestone server.
Audio
2019-05-24: this is preliminary, and mostly based on the code for video so read the next section and mimic the style from there. But use an audio element and have the source attribute point to an OGG, MP3, or WAV file. Plus, an aspect attribute will be ignored.
We have not entirely decided how to handle the static version present in a PDF.
First in a figure, so it can be cross-referenced.
MP3 Piano Trill (www.kozco.com/tech/soundtests.html)
Now, naked, between a couple of paragraphs, with specified asymmetric margins, and a computed width.
Now in a sidebyside with an Organ Finale WAV file on the left, and on the right, Bach in OGG format at a very low bit rate (32 kps). From .
Video
First, a gratuitous reference to Exercise about the derivative of a cosine.
You can specify a video by a filename if you host it as part of your document, or a URL giving a location on the Internet. There are a few extra features for YouTube and Vimeo videos, which are near the bottom of this page, so look there first if that meets your needs.
Video Files
Embedded videos can make sense for a web version of your document. This is a video promoting the University of Puget Sound to potential new students, in WebM format. Support is limited to HTML5-capable browsers. The file format can be MP4, Ogg, or WebM, though this may vary depending upon the browser. Use a video element, within either a figure (numbered, captioned) or a sidebyside for more precise control. The source attribute in this first example does not include an extension, and so three possibilities above will be searched for preferentially (you need only provide the video in one format, but providing additional versions will increase the chances every browser will find a compatible format).
University of Puget Sound Promotional Video
You can replace the preview image of a video with one of your own making. HTML refers to this as the poster, presumably because it advertises the video. The image you make should be of the same quality as the video, and with the same aspect-ratio, and is presumably one of the frames of the video. So a screenshot is the likely avenue. (Maybe we will have advice on how to do this easily, or see Issue #853.)
linkexternal, urlreferenceexternal, url
On the video tag, include a preview attribute which is the name of an image file, including a relative path. (JPEG or PNG formats are best. JPEG may be smaller for video screenshots, while PNG is lossless and so may work better for diagrams.) The next video has a preview/poster that is a fram part way into the introduction.
University of Puget Sound Promotional Video
If you find the posters provided automatically for a video to be distracting or objectionable, you can cover them up by requesting a generic poster with the attribute-value pair: preview = "generic".
University of Puget Sound Promotional Video
You can use a very similar construction to point to a video hosted somewhere on the Internet, just use a complete URL for the source attribute. Note that if the URL has a query string (parameters following a question-mark), then any ampersands (&) will need to be escaped, so as to not confuse the XML processor ( use &). Also, the question-mark character needs to not be URL-encoded (%3F), so presumably edit the URL to be the character. Here are several examples, the second one uses the start and stop attributes to limit the video to just the time between the 16-second and 30-second locations, and has asymmetric margins.
Big Buck Bunny from Video for Everybody Test Page
Big Buck Bunny, Controlled Start/End, Asymmetric Margins
Big Buck Bunny, Ogg container, *.ogv extension
Big Buck Bunny, MP4 format
Big Buck Bunny, WebM format
Big Buck Bunny, Automatic best format (temporarily broken)
Videos are assumed to have a 16:9 aspect ratio (width:height). If this is not the case, then you must specify the aspect ratio with either a ratio (e.g. 4:3) or as a number expressing the fraction width/height (e.g. 1.3333). Four decimal places should suffice for the latter. Note that you cannot change the aspect ratio, and you must supply the aspect ratio for any video that does not have the default ratio. This is a technical requirement that allows us to smoothly scale the videos on small devices (try this page on your mobile phone!).
YouTube
YouTubeYouTube videosvideosYouTube videos may be embedded with only knowledge of a video's ID or a playlist ID. A single video's YouTube ID is a string of eleven seemingly random characters that show up in the URL when you watch a video. For the Led Zeppelin performance below, the ID is hAzdgU_kpGo, which you might normally watch directly from the URL . As described just above, you need to specify a different aspect ratio if the video does not have a 16:9 aspect ratio.
Note: some of these videos may not play if viewed locally, and maybe not even if you start up a local web server (such as can be easily done with Python). So if you are testing new features, be careful about assuming videos from cloud services are not working properly.
If you have ever owned a drone, you sympathize with this guy. Way funnier than a cat video.
My first day with my drone
First Drone Flight (1:28)
If you are only interested in a piece of the action, you can limit the video with start and end attributes in seconds. You might make those times clear in the caption for readers getting the link out of a PDF. Some videos may not respect these parameters.
My first day with my drone (Splashdown)
First Drone Flight (Splashdown, 0:54 to 1:12)
This next video comes with a default poster from YouTube featuring Robert Plant. We've replaced it with a poster featuring Jimmy Page.
Kashmir (Live), Led Zeppelin
Kashmir (Live), Led Zeppelin. O2 Arena, London. December 10, 2007. (8:55)
Led Zeppelin video
And if you don't want to be reminded of Plant, Page, Bonham, or Jones, you can cover them up entirely.
Kashmir (Live), Led Zeppelin
Kashmir (Live), Led Zeppelin. O2 Arena, London. December 10, 2007. (8:55)
Led Zeppelin video
Videos were first designed mostly on the assumption that they are wrapped in a figure with a title (which is distinct from a caption). But you can just place a video naked inbetween a couple of paragraphs. This is nice if you don't want the clutter of numbers, and/or if you plan to exclude videos from some edition of your document.
We can pack two videos side-by-side, with a lot of horizontal control, using two panels in the sidebyside element. We have simply chosen here to not provide a caption (overall, or separately) as an illustration. The sizes are purposely a bit odd. See for much more on side-by-side panels. These videos come from the Topic and VEVO areas of YouTube (respectively) and both have start/end times.
These next two videos are evenly spaced, one from YouTube, one from a source file hosted by the author. Now with separate captions, but identical margins (through very different choices of layout parameters than in the preceding pair of videos).
Drone Flight
UPS Promo
A YouTube playlist can be built in one of two ways. You may specify the youtube attribute to be a space-separated list of several video IDs. Alternatively, you may set the youtubeplaylist attribute to a YouTube playlist ID.
Individual IDs specified in an itemized playlist
YouTube playlist ID specified in a named playlist
We test three equally-wide YouTube videos in a sidebyside with a few variations.
Medium Length
Short
A Really Long Caption That Will Wrap onto a New Line
We test three equally-wide YouTube videos in a sidebyside with a few variations, and now contained in a figure.
Author-Hosted videos as Sub-Figures
Medium Length
Short
A Really Long Caption That Will Wrap onto a New Line
We test three equally-wide author-hosted videos in a sidebyside with a few variations.
Medium Length
Short
A Really Long Caption That Will Wrap onto a New Line
We test three equally-wide author-hosted videos in a sidebyside with a few variations, and now contained in a figure.
YouTube videos as Sub-Figures
Medium Length
Short
A Really Long Caption That Will Wrap onto a New Line
Vimeo
We support videos from Vimeo in much the same way as YouTube videos. Now the identifier is a long integer. For example, the video up next would normally be found at https://vimeo.com/27246366. But instead, you can embed the video with as little as <video vimeo="27246366"/>. As of 2019-05-18, we intend to support as many of the options described above as possible. Widths and heights (via the aspect ratio) will perform as expected. We have not investigated start and end times.
MOVE, by Rick Mereki, vimeo.com/rickmereki
Now with an author-supplied poster.
MOVE, by Rick Mereki, vimeo.com/rickmereki
Captions and Subtitles
Experimental support for captions and subtitles first. Look at the source, which mimics the actual HTML. The words of the titles and/or subcaptions (there is a difference!) come from a file in Web Video Text Tracks (WEBVVT) format.
Big Buck Bunny with subtitles adapted from
This video is identical to the previous one, except it tests the use of a default track. The default attribute on track can be set to the value yes to make one set of captions the default (and only one!). Test is a bit lame, the two track use the same file, but just have different labels for the player's menu. Track named US English Two will show as in-use at start-up.
Cross-Referencing
Cross-referencescross-reference are easy, since that is a key reason for having a highly structured document. Here is a useful feature if you elect to use it. Any xref will know what it points to, so you can let it provide the naming part of the cross-reference text. You can turn this on globally with the command-line parameter autonameautoname set to 'yes'. If you do that, you will see most of the names in this document doubled, since the names are written into the source already in most places outside of this section.
Moreover, the names themselves will change with the use of the one language dependent file. And another bonus is that with an autoname, you automatically get a non-breaking space between the name and the reference. The autoname switch makes no sense for provisional cross-references, since there is no information about what they point to.
Here is a reference that has no indication of its type in the source: . So by default you will just see a number that you can click on. If you use the text="type-global" switch then you should see Theorem prepended. Note that if you changed the theorem to a lemma, then that change would be reflected here automatically when autonaming is in effect.
If you set the autonaming behavior globally, or accept the default behavior, there will still be instances where you want to override that choice. Simple: just say text="type-global" or text="global" as part of the xref. Each example below should look the same each time this article is processed, no matter how the global autoname is set.
No name ever:
Always named:
You might also wish to provide a prefix to a cross-reference and have it incorporated into the text of what you would click on in an electronic version. So if you make an xref with some content, then that content will prefix the cross-reference within the clickable/pokeable text and be attached with a non-breaking space. This xref content totally overrides any prefix that might happen otherwise. So the name of an item (corollary) could be replaced, and if you make a cross-reference with custom text, that will be the clickable also. An example:
A grand result: Major Corollary
A grand result: a nice corollary
Suppose you want to reference two theorems, so you might want to say something like Theorems 4.6 and 5.2. With global autonaming on, you can override the first Theorem by providing the content Theorems on the first xref and text="global" on the second xref. (With global autonaming off, you will also get what you want/expect.) Here is the test, which should look correct no matter what the global switch is: Sections and . (But notice that it is up to you to be certain the types of these targets do not change without you changing the content of the first xref. The author-tools mode and careful choices of xml:id strings can help avoid this trap.)
If you set the value of text to title, then the title you assigned to the theorem will be used as the link for a cross-reference. Here is a the final example, which refers to a fundamental theorem by name .
Cross-references to exercises with hard-coded numbers should respect the supplied number. Exercise should reference problem 42a.
Here we form a list to test pointing at various structures. Each of the following should open a knowl in the HTML version, otherwise it will be a traditional hyperlink (if possible). Note that if a knowl opens, there will always be an in-context link which will take you to the actual location, should you have wished instead to just go there.
Footnotes: Fermat allusion at .
Citations: Judson's AATA with annotation at
Citations: Judson's AATA with autoname that should have zero effect
Citations: In a references division inside an appendix
Note: just the annotation of previous citation at
Examples: Mystery derivative at , or a question at .
Definition-like: A mathematical statement with no proof .
A numbered Note:
A link to a proposition element, while this document has globally renamed propositions as Conundrums, so this link should use the new name:
Theorems: Fundamental Theorem of Calculus, with proof at
Proof: of second version of FTC at
Figures: A plot with a derivative at .
A Figure within a side-by-side panel, with its own number:
A Table within a side-by-side panel, with a subnumber:
A Figure, containing a side-by-side with two sub-captioned images:
Display Mathematics: single, first with no name: . Then with an autoname: .
Display Mathematics: multi-row, first with no name: . Then with an autoname: . And two, with a plural form: Equations and .
You can cross-reference The Fundamental Theorem of Calculus via custom text of your choice.
Display mathematics: an equation with local tag, which should not be used so very far away: .
You can author a cross-reference to a displayed equation with no number, but it will not be very satisfying. You should get a warning if you try.
Exercises (divisional), a range, with plural form provided to override autonaming: Exercises.
Exercise (inline): with enclosed hint at
A group of two exercises, with introduction, conclusion:
Solution: An autonamed portion of an exercise:
Parts of a complicated exercise:
A subsidary part of an exercise:
knowlnested
Three cross-references to individual exercises, but due to their location, they should have different type names in the cross-reference: in an exercises division, ; in the narrative, ; and in a worksheet, .
An item buried in nested ordered lists:
List item as knowls in HTML, including nested lists: ,
A titled list:
List item inside a named list, second color in rainbow list:
Second color in rainbow list, but now as a local reference:
An item in ordered list, but contained in an unordered list, hence without a number, so a cross-reference by number would be ambiguous. So we use a cross-reference which relies on custom text: No Number List Item
Several examples of hybrid cross-references to list items within a named list can be found in, and adjacent to, .
An assemblage, which never has a number. A cross-reference now requires content in the xref element, with text='custom': text to xref an assemblage
A cross-reference to a list item in a description list, which has a title, but never a number: . Note that you need to include the attribute text="title" even if that is obvious from the situation. This requirement may be relaxed in a future refactoring of the cross-reference system.
A very similar cross-reference to the previous one, but testing how final punctuation of titles is handled: .
A cross-reference to a paragraphs subdivision, which never has a number (so comments above about description list items and titles applies here too):
A case within the proof of :
A cross-reference to a description list item with a title containing math:
A cross-reference to an aside, by title necessarily, and with some formatting in the title:
A cross-reference to an objectives block, with an autoname. This demonstrates the number of the Objectives here, which is not shown in the original version since it is implicit:
A cross-reference to an individual objective. This is authored as a list item, but displayed as an objective (singular) via an autoname:
A cross-reference to the top-level element (book) will point to a summary page similar to a Table of Contents in HTML. For LaTeX output it will behave similarly, unless there is no Table of Contents, then it will go to the main title page: ToC or Title
Cross-references inside quotations previously lost track of their target, so this tests correcting that, not so much the cross-reference itself:
An activity with full details following:
A type-global cross-reference to a second-level task within a project: , the encompassing project: , and a local reference .
A subcaptioned named list:
This opens a knowl for an example. It has a solution, which is orginally presented as a hidden knowl. But since this version is a duplicate, the knowl for the solution is a file version, not an embedded version, and hence free from duplicating any unique identifaction like an HTML id. So we test its styling and function here:
A cross-reference to a poem, where we need to use a title for the link text, since a poem is not numbered:
A cross-reference to a references division in a subsection, which should not be numbered where born, but which has the number of its parent division in a cross-reference: . And a cross-reference to a references division, which is the main bibliography in the back matter, and so is not numbered where born, nor in a cross-reference (which we must accomplish via it's title): .
A cross-reference to a solutions division in a subsection, which should not be numbered where born, but which has the number of its parent division in a cross-reference: . And a cross-reference to a solutions division, which should appear as an appendix both where born and as a cross-reference: .
A cross-reference to an exercises division in a subsection, which is the only such division in that subsection and therefore should not be numbered where born, but which has the number of its parent division in a cross-reference: . In contrast we cross-reference an exercises division which is one of two inside a section, and therefore is numbered, when born and when cross-referenced, in continuity with the preceding subsections: . Also an exercise within an exercises which should have a cross-reference employing the number of the containing (unstructured) section: which is in which is in the (unstructured) .
A custom cross-reference: Custom
Cross-reference to instructions of an interactive:
A hyperlink to a subexercises via its required title (no number is assigned):
You can request the text to be a type, then a number, then a title:
Asking for the text to be a type, then a number, then a title, when there is no title, is not a problem:
Cross-references to structural elements of the document will always take you there directly, since even in the HTML version these parts never get realized as knowls. You will find such links sprinkled through this document, but here is an autonamed link to a subsubsection: .
Cross-references can be built into display mathematics, but they can only point to one item ( a comma-delimited list of targets is not supported). Examples below should test the distinction in HTML output between a link that opens a knowl and a link that jumps to a larger chunk of content. Notice that display mathematics is entirely syntax, no matter which output format you create. So if you do not use the autoname facility, you need to wrap non-math text in \text{} and perhaps use a tilde (~) as a non-breaking space (examine the source of this article).
Variations on the above include multiple xml:id as the value of a single ref attribute on an xref, in the form of a comma-separated list. In this case, only the numbers are links/knowls and the autonaming attribute is based on the type of the first ref. Wrapping with brackets (citations) or parentheses (equations) is also controlled by the type of the first ref. And the detail attribute for a bibliographic reference is silently ignored. So you can do silly things like have a reference to a theorem within a list of equation numbers and there will be no error message. Handle with care. Spaces after commas in the list will migrate to the output as spaces, so if you don't have any, you won't get any.
Four theorems, with spaces, autonamed:
Two equations, no spaces, autonamed:
Two bibliographic items, no autoname:
If you have a long list of items (such as homework exercises, not in an exercisegroup, or perhaps several chapters), you can get a cross-reference that prints as a range by using xref with two attributes first and last, which may contain a single xml:id each. As with multiple references, first will control autonaming and other features.
A range of exercises, autonamed (this range appears out-of-order since the two exercise are numbered under two different schemes):
A range of equations:
A system of equations, given as range from first to last:
A range of sections, hand-named to be plural: Sections
A range of bibliographic items:
The urlurl element may be used to link to a data file, either externally, or internally, if you want to make such an object available to a reader.referenceexternal A good example use case is a spreadsheet that might be part of an exercise, or contain data relevant to some discussion. First let us suppose the data resides somewhere on the Internet, then just use the complete address. Here is one from Microsoft: Sample Excel Spreadsheet.
For a link like the previous one, you might want to provide advice appropriate for your audience about using a context menu to download a file, or how to configure helper/viewer applications.
You can also provide a file yourself, but now it is your obligation to distribute the file with your document (HTML, PDF, ) and provide a relative link. This creates some complications, such as making sure an electronic PDF has the associated file in the same place relative to the PDF file. Of course, if you make a print PDF, this becomes impossible. Here is a test example anyway, which is highly likely to be broken in a PDF (including at the project site) unless you build this example on your own computer, locally. Here is a template from the Apache OpenOffice project, provided via the Public Documentation License (PDL): Running Statistics Template.
The next four paragraphs are each a single dataurl element. Explore the source and the output from different conversions. Strictly for testing as of 2022-11-04.
Foo Sample Excel Spreadsheet Bar
Foo Runners Template Bar
Foo Sample Excel Spreadsheet Bar
Foo Runners Template Bar
Testing of output positioning for xref's that are inside containers:
Now we have two xref's to that same target that has a runestone component. Only the first one clicked should try to render the runestone.
Internationalizationinternationalization
Supporting a multitude of possible characters, across many languages and across many output formats can be a challenge. One of our goals is to make this much easier for authors. Fortunately, the Unicode standard has led to improvements from the 7-bit ASCII standard of old.
Unicode Characters for HTML Output
First, we discuss HTML output. If you include UnicodeUnicode characters in your source, they should survive just fine en route to a web browser or e-reader. Here are the caveats for HTML output:
So that you can continue to get the best results with print and PDF output, use available empty elements for obscure characters, even if targeting HTML output, before resorting to a Unicode character. For example, use copyright for the copyright symbol in text before resorting to the Unicode character U+00A9. It is a bit more work, but you will get better results with other conversions, even if you initially are only fascinated by HTML.
How you actually enter Unicode characters into your source file is dependent on your editor and operating system, and is therefore outside the scope of our documentation. You can cut-and-paste characters and text from the source of our examples for initial testing and experimentation.
Always, always identify your source as having Unicode characters by including the incantation
<?xml version="1.0" encoding="UTF-8" ?>
as the first line of your source file. (You may be able to accurately cut-and-paste this version here. But if the copy has non-standard characters in it, go back to the top of this source file for a copy.)
Alan Wood’s Unicode Resources has a plethora of samples of various groups of Unicode characters. If you, or your readers, are missing characters in a web browser, this is a good place to start testing the local setup.
Characters in , PDF, print
The situation for is a bit more complicated, since pre-dates Unicode's widespread adoption.
This sample article is intended to work well, out-of-the-box, for authors just starting with . So we only include here examples that we know are likely to convert to PDF without any errors. For more extensive examples and experiments, we provide the sample document examples/fonts/fonts-and-characters.xml, so be aware of that example as you look to see what is possible.
Similarly, you should be able to process this sample article successfully with various engines. We test regularly with pdflatex and xelatex and provide online sample PDF output of this document processed by pdflatex. In principle, you should be able to use latex (to produce a DVI), and possibly other (unsupported) engines, such as lualatex.
Once you get beyond the Latin alphabet, with accents common in Western Europe and the Western Hemisphere, you will almost assuredly need to restrict your attention to producing PDF output with the xelatex engine. This is discussed and tested in examples/fonts/fonts-and-characters.xml.
Basic Latin, U+0000U+007F
Unicode uses multiple 8-bit bytes to represent characters, and these are typically expressed in hexadecimal (base 16) notation. Using just a single byte, we can get 256 values, and the first 128 (hex 00 to 7F) are the usual Latin characters with some values used as control codes. These 95 characters are the most basic, and will all render using pdflatex or xelatex with no special setup (and will render easily in HTML). U+0000 to U+001F are control codes and not used here. U+007F is also a control code and so is excluded, while U+0020 is a space, so appears invisible in the table. In the source we have authored each character by its escaped version using its Unicode number (in hexadecimal). So, for example, capital-B is authored as B.
Now we are interested in the next 128 possible bytes, (hex 80 to FF). The first 32 are again control codes and U+00A0 is a non-breaking space, so is invisible, while U+00AD is a soft hyphen (which we have not implemented and so is excluded). We have taken care to see that the remainder will render using pdflatex or xelatex with no special setup (and HTML). In the source we have authored each character by its escaped version using its Unicode number (in hexadecimal). So, for example, a copyright symbol is authored as ©.
Monospace, Basic Latin and Latin-1 Supplement, U+0000U+00FF
A monospace font is critical for samples of keyboard input and to distinguish exact technical input from running commentary. We list here all of the reasonable characters from the first 256 Unicode code points. (We skip the same 65 control characters from above, and the soft hyphen.) These should all render fine in HTML and when processed with xelatex, however our focus with this sample article for PDF output is the capabilities when processed with pdflatex. First, characters from U+0000U+007F.
Note that the single and double quotes are upright and dumb, not curly and smart: ' " ' " ' ". And a backtick is a backtick: ` ` `. The zero is distinguished from the capital oh: 0 O 0 O 0 O. And the numeral one is slightly different from the lower-case ell: 1 l 1 l 1 l. The hyphen should be short and not expanded into some other kind of dash: - - -. These characters should all cut/paste out of a PDF into a text editor with no conversion to other characters.
Now the remaining characters from U+0080U+00FF. The program tag is implemented in via the listing package and these characters require ad-hoc replacements for processing by pdflatex. (You can see the replacements in the preamble of the source for this document.) The replacement mechanism provided by the listing package will cause the characters below to produce a compilation error if processed by pdflatex and in a table cell in certain situations (which we have avoided in the table below). The only workaround in this case is to switch to xelatex.
The console tag is also implemented with fancyvrb, with adjustments for the input lines. It will not look like it, but these are 8 such inputs, with similar results to above, but now bolded.
We take care to render the U+0080U+00FF characters in Sage cells. This would allow some flexibility in comments and strings employed. The following is just a test of these characters in the input and output of a sage element. This is not functional code.
The table below has a single column, and each cell of the table has a string of 10 characters inside a c element. It is meant to test if the font is monospace in this situation.
Again, more examples and more thorough explanations can be found in the sample: examples/fonts/fonts-and-characters.xml. Be aware that the nature of the more advanced sample is that it will likely produce many errors when processed with pdflatex. Adding -interaction batchmode or -interaction nonstopmode to the pdflatex command-line will sometimes be less painless than acknowledging each error. The more advanced sample will perform well when processed with xelatex.
Pre-Formatted Text
In Sage, if you wanted to build a matrixmatrix, then you would use the matrix() constructor. Here is the matrix of second partials of f(x,y)=x^3+8x^2y^3 + y^4, as you would enter it in Sage. Notice that SR is the ring of symbolic expressions, Symbolic Ring.
That accomplished, Sage will easily and naturally provide a representation of the matrix with the command latex(J).
\left(\begin{array}{rr}
16 \, y^{3} + 6 \, x & -48 \, x y^{2} \\
48 \, x y^{2} & 48 \, x^{2} y + 12 \, y^{2}
\end{array}\right)
The pre element surrounds text that should be preserved verbatim. It is like a special kind of paragraph, and can be used almost everywhere that a paragraph can be used. The realization of preformatted text should be robust enough that it can be cut from documents and pasted without any substitutions of fancier Unicode characters for generic ASCII characters. Try the minus sign on the 48 above to see if it does not become a dash, or the single quotes on the Sage variables.
For Sage input code, the first non-whitespace character sets the left margin, since legitimate Python code has no subsequent lines outdented. For pre-formatted code, the line with the least whitespace leading the line will determine the left margin. If preserving indentation is important, do not mix spaces and tabs. For syntax highlighting of text representing computer programs, or parts of them, see Section. Examine the source of the following example to help understand this paragraph.
A normal line
An indented line
An outdented line
Snippets should also be robust for cut/paste operations. For example, you should not get curlysmart quote marks in verbatim text: this should have "dumb" quote marks. Here are a few characters that should migrate through to a PDF unmolested: '"----"'
If you write a very long snippet of inline code (i.e. within a <c> element) it can impinge on the right margin, since very long words will not hypenate, unless you have a dash/hypen. Such as when you use words like pneumonoultramicroscopicsilicovolcanoconiosis, parastratiosphecomyia stratiosphecomyioides, floccinaucinihilipilification, or subdermatoglyphic. For output in LaTeX we get line-breaking, and perhaps word-spacing, but we do not get hyphenation and the font is fixed-width. So not always perfect. Consider other options like <cd> or <pre> below.
An intermediate type of verbatim text can be accomplished with the cd tag, short for code display. It allows for larger chunks of verbatim text to show up in the middle of a paragraph, but with some vertical space above and below, and centered between the margins. It can beauthored as a single lineor if you wish to have multiple linesthere is the <cline> tagmeant to model the line tagand short for "code line"and you may evenuse a single clineif you like to have your source closely model the visual look of the output.
With the showspaces attribute of cd set to all there will be a visual indication of every space character, which is nice if indentation is critical. For example,there is the <cline> tag meant to model the line tag and short for "code line" and as single line authored as a single line that is not structured with cline elements.
The pre tag is meant for use outside of paragraphs, but is otherwise very similar. The source may also be structured as a sequence of cline as in the next example, recycling content from above.
If you write a very long snippet of inline code (i.e. withina <c> element) it can impinge on the right margin, sincevery long words will not hypenate, unless you have a dash/hypen.Such as when you use words likepneumonoultramicroscopicsilicovolcanoconiosis,parastratiosphecomyia stratiosphecomyioides,floccinaucinihilipilification, or subdermatoglyphic. For outputin LaTeX we get line-breaking, and perhaps word-spacing, but wedo not get hyphenation and the font is fixed-width. So not alwaysperfect. Consider other options like <cd> or <pre> below.
We use a Unicode right arrow (Unicode Character 'RIGHTWARDS ARROW', U+2192) to sometimes indicate the truncation of long lines in a text file. It is available in our usual monospace font for /PDF, but we include a use here in order to make certain that is always the case. Here: →.
Program Listings (with code in the title)
Sage cells can be used for Python examples, but Sage uses a mild amount of pre-parsing, so that might not be a wise decision, especially in instructional settings. We might implement Skulpt or Brython (in-browser Python) or the Python language argument to the Sage Cell Server. To see examples of authoring Sage cells, have a look at Section.
In the meantime, program listings,listingprogram listing especially with syntax highlighting, is useful all by itself. The R language might not be a bad stand-in for pseudo-code, as it supports assignment with a left arrow and has fairly generic procedural syntax for control structures and data structures. Or maybe Pascal would be a good choice? Here is an example of R. Note in the source that the entire block of code is wrapped in a CDATA section due to the four left angle brackets. We do not recommend this technique for isolated problem characters, but it is a life-saver for situations like the XSLT code just following.
And some self-referential XSL:
.
]]>
Matlab is a commercial language for mathematics, while Octave in an open source version. The language values of matlab and octave are somewhat interchangeable. Following is a very slighlty edited version of an example from 50 Basic Examples for Matlab.
a = [0:0.5:5]; % A Matlab comment here
b = 2*a.^2 + 3*a -5;
c = 1.2*a.^2+4*a-3;
subplot(1,2,1)
plot(a,b,'-or','MarkerFaceColor','g','LineWidth',2)
xlabel('X'); ylabel('Y'); legend('Curve ','Location','NorthWest')
subplot(1,2,2)
plot(a,c,'--ok','MarkerFaceColor','c','LineWidth',2)
xlabel('X'); ylabel('Y'); legend('Curve 2','Location','NorthWest')
You can write made-up pseudo-code, but you might explain to a reader what your symbols all mean. This routine takes the m\times n marix A to reduced row-echelon form. Note that with no language specified, there is no special formatting or use of color. Note in the source the use of escaped characters for the three less-than symbols.
input m, n and A
r := 0
for j := 1 to n
i := r+1
while i <= m and A[i,j] == 0
i := i+1
if i < m+1
r := r+1
swap rows i and r of A (row op 1)
scale A[r,j] to a leading 1 (row op 2)
for k := 1 to m, k <> r
make A[k,j] zero (row op 3, employing row r)
output r and A
Look in the pretext-common.xsl file to see the strings to use to identify languages. Always all-lowercase, no symbols, no punctuation.
Note that the above examples all have slightly different widths (theser are very evident in print with the frames). As 2-D atomic objects, to place them in the narrative requires the layout features of a sidebyside element. Then width and/or margin attributes will influence the width of the panel.
A program may also be nested inside a listing, which behaves similar to a figure. You can provide a title, and the listing will be numbered along with tables and figures. This then makes it possible to cross-reference the listing, such as . It also removes the requirement of wrapping the program in a sidebyside. For technical reasons, the three examples above will not split across a page break in PDF output, but the placement inside a listing will allow splits, as you should see in at least one example following.
C Version of Hello, World!
/* Hello World program */
#include<stdio.h>
main()
{
printf("Hello, World!");
}
A program may include line numbers.
A static Java program with line numbers
import javax.swing.JFrame; //Importing class JFrame
import javax.swing.JLabel; //Importing class JLabel
public class HelloWorld {
public static void main(String[] args) {
JFrame frame = new JFrame(); //Creating frame
frame.setTitle("Hi!"); //Setting title frame
frame.add(new JLabel("Hello, world!"));//Adding text to frame
frame.pack(); //Setting size to smallest
frame.setLocationRelativeTo(null); //Centering frame
frame.setVisible(true); //Showing frame
}
}
A program may also include highlighted lines.
A static Java program with line numbers
import javax.swing.JFrame; //Importing class JFrame
import javax.swing.JLabel; //Importing class JLabel
public class HelloWorld {
public static void main(String[] args) {
JFrame frame = new JFrame(); //Creating frame
frame.setTitle("Hi!"); //Setting title frame
frame.add(new JLabel("Hello, world!"));//Adding text to frame
frame.pack(); //Setting size to smallest
frame.setLocationRelativeTo(null); //Centering frame
frame.setVisible(true); //Showing frame
}
}
Although a program should have a code element surrounding its code, we attempt to provide one when it is missing. This next sample tests that and intentionally has no leading or trailing newline inside the program.
print("Hello world")
Sometimes it is nice to author an inline fragment of a program and have the styling of its text match that of a program. To do this we can use the pf tag (program fragment). It is similar to a c element, but will be syntax highlighted according to either a language or the default language for programs. Here is an example in C: printf("The cost is $%f.2", money);. And another that is in Python and tests problematic characters: print("& % $ # _ { } ~ ^ \").
If you are discussing algorithms in the abstract (or even concretely), you can set them off like a theorem, with a number, a title and a target for cross-references. Sometimes you claim an algorithm produces something in particular, or has certain properties, such as a theoretical run time, so a proof may be included. See the discussion just preceding about (limited) options for pseudo-code.
Sieve of Eratosthenes
On input of a positive integer n this algorithm will compute all the prime numbers up to, and including, n. It was named for Eratosthenes of Cyrene ( 276 BC 195/194 BC) by Nicomachus ( 60 120 CE) in Introduction to Arithmetic. (Wikipedia, 2015)
Input: n
Form the list of all integers from 2 to n
Set p = 2
While p < sqrt(n)
If present, remove from the list multiples 2p, 3p, ...
If p is now the last element of the list, stop
Otherwise, set p to the element of the list immediately after current p
Output: the remaining elements of the list
Any element removed is a non-trivial product of two integers and hence composite. So no prime is is ever removed from the list.
Each composite number is a multiple of some prime, and since no prime is ever removed, each composite will be removed. Hence the removed elements are precisely the set of composite numbers in the list and thus the remainder are precisely the primes on the list.
If you are writing about system-level software, you may need to write numbers in hexadecimal or binary. Here we use a numbered, displayed equation (mathematics) and macros such as \texttt for a monospace text font, and \; for spacing/grouping the bits of the binary number. \texttt{6C2A}_{16} = \texttt{0110}\;\texttt{1100}\;\texttt{0010}\;\texttt{1010}_{2} If you use these constructions repeatedly, then some macros might be useful. It might also be beneficial for us to add some markup for such numbers used in a paragraphsend us a feature request.
This is a spurious theorem to break up the run of consecutive listing so we might test the effect.
And this is a spurious paragraph to prove that the theorem beforehand, and the proof following, are distinct from one another.
This is a proof that is authored detached. It is not associated with the theorem above in a way other than simply following it.Footnotes once behaved badly in a detached proof.
Notice that this proof has a ref attribute that points to the theorem being proved. In this way, the proof element doubles as an xref. So the text attribute is also available to fashion how the cross-reference appears. Options are basically the same as for xref, though some things are not possible, such as custom text.
A specialized version of a program listing is an interactive command/response session at a command-line, where differing fonts are used to differentiate the system prompt, the user's commands, and the system's reaction. A console session may be used by itself inside a sidebyside, or it can be wrapped in a listing to get a number and a caption. As elsewhere, you will need to escape ampersands and angle brackets (such as if you have a command using redirection), using &, <, and > in your source.
Console Session: int and float
gcc -Wall -o intAndFloat intAndFloat.c
./intAndFloat
Here is the plain version, some layout control. We simply place a small margin on the left (at 4% width).
If your console input exceeds more than one line, you can author it across several lines and your choice of line breaks will be reflected in the rendering. You can decide to indent lines after the first one for clarity, if desired. You can also decide if your audience needs line-continuation characters or not.
Console Session: int and float (multi-line input)
gcc -Wall
-o intAndFloat intAndFloat.c
./intAndFloat
A console may specify a continuation symbol, as a prefix on every line but the first.
for x in range(0:20):
print(x)
print("Excellent!")
for x in range(0:20):
print(x)
print("Excellent!")
Notice in the HTML version of the above example that when you highlight all, or a portion, of the listing for a cut-and-paste that the prompts are not included.
Now a test of some listings (and pre-formatted text) in a block that likely has a background color in an HTML version.
Code in a colored(?) container
Not really much of an exercise, but it should force a colored box.
Running a program in a console:
./program
A pre
The next listing is just absurdity, to check various characters from that are otherwise employed by the code supporting consoles, and some Latin-1 characters. We test each in a prompt, input, and output. We use (* and *) as sequences used to escape embedded commands, so we test those also.
Console Session: problematic characters
A backslash \ here
A begin group { here
An end group } here
An open escape sequence (* here
An end escape sequence *) here
Some quotation marks ` ' " here
The rest & % $ # _ ~ ^ of LaTeX
Latin-1: ÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß
A program can also have preamble and postamble. They are tested here mostly just for their handling of leading/trailing whitespace. Note that the indentation of the start/end tags for the subelements is intentionally chaotic, that should not affect the indentation of the output. (However, the actual contents of the various parts of the program must all be indented to a similar degree in the source.)
# meta: text in preamble with one trailing authored blank line
def foo():
return 42
# meta: text in code with one authored blank line before and after
# meta: in the output there should be two blank lines above and three below
# Your code for bar()
# meta: text in postamble with two authored blank lines preceding
print(bar())
An interactive rendering of the same program should produce the same visible code. Both samples should end in a newline. There will be a visible difference between how this the empty line created by that newline rendered in plain HTML (the empty line is not included) and Runestone (the empty line is visible).
# meta: text in preamble with one trailing authored blank line
def foo():
return 42
# meta: text in code with one authored blank line before and after
# meta: in the output there should be two blank lines above and three below
# Your code for bar()
# meta: text in postamble with two authored blank lines preceding
print(bar())
We conclude this section with a longer example of a program listing, an assembly language program from Bob Plantz, included to test a listing breaking across pages in PDF output.
A longer program listing
@ structPass2.s
@ Allocates two structs and assigns a value to each field
@ in each struct, then displays the values.
@ Bob Plantz - 6 July 2016
@ Constants for assembler
.include "theTag_struct.s" @ theTag struct defs.
.equ y,-28 @ y struct
.equ x,-16 @ x struct
.equ locals,28 @ space for the structs
@ Constant program data
.section .rodata
.align 2
displayX:
.asciz "x fields:\n"
displayY:
.asciz "y fields:\n"
dispAChar:
.asciz " aChar = "
dispAnInt:
.asciz " anInt = "
dispOtherChar:
.asciz " anotherChar = "
@ The program
.text
.align 2
.global main
.type main, %function
main:
stmfd sp!, {r4, fp, lr} @ save caller's info
add fp, sp, #8 @ our frame pointer
sub sp, sp, #locals @ for the structs
@ fill the x struct
add r0, fp, #x @ address of x struct
mov r1, #'1
mov r2, #456
mov r3, #'2
bl loadStruct
@ fill the y struct
add r0, fp, #y @ address of y struct
mov r1, #'a
mov r2, #123
mov r3, #'b
bl loadStruct
@ display x struct
add r4, fp, #x @ address of x struct
ldr r0, displayXaddr
bl writeStr
ldr r0, dispACharAddr @ display aChar
bl writeStr
ldrb r0, [r4, #aChar]
bl putChar
bl newLine
ldr r0, dispAnIntAddr @ display anInt
bl writeStr
ldr r0, [r4, #anInt]
bl putDecInt
bl newLine
ldr r0, dispOtherCharAddr @ display anotherChar
bl writeStr
ldrb r0, [r4, #anotherChar]
bl putChar
bl newLine
@ display y struct
add r4, fp, #y @ address of y struct
ldr r0, displayXaddr
bl writeStr
ldr r0, dispACharAddr @ display aChar
bl writeStr
ldrb r0, [r4, #aChar]
bl putChar
bl newLine
ldr r0, dispAnIntAddr @ display anInt
bl writeStr
ldr r0, [r4, #anInt]
bl putDecInt
bl newLine
ldr r0, dispOtherCharAddr @ display anotherChar
bl writeStr
ldrb r0, [r4, #anotherChar]
bl putChar
bl newLine
mov r0, #0 @ return 0;
sub sp, fp, #8 @ restore sp
ldmfd sp!, {r4, fp, pc} @ restore and return
.align 2
@ addresses of messages
displayXaddr:
.word displayX
displayYaddr:
.word displayY
dispACharAddr:
.word dispAChar
dispAnIntAddr:
.word dispAnInt
dispOtherCharAddr:
.word dispOtherChar
Units of Measure
Units of measure can be given xml treatment too with the quantity element. In , the siunitxsiunitx packagepackagesiunitxunits package is loaded to achive unit handling. Since that package only offers SI units, some other common units will be added by in the preamble. In HTML, the capabilities of siunitx are simulated, weakly. Note that at present, you should not attempt to use the quantity element within a math environment.
The value of gravitational constant g is 9.8. Force is measured in , also known as one . A quantity with rather ridiculous units is 23. One is the same as . You can have a unitless quantity, like 42, which may help with consistency between such numbers and units in the output. Some non-SI units are available, such as the absurd . The command \pi is recognized within mag in conversions to HTML, which is consistent with the behavior with a conversion to , for example there are
2\pi
in a full circle. This is a similar quantity with multiple occurences of \pi to test a particular template used for HTML output. It is not meant to make any sense:
21\pi45\pi234\pi890.
For a full list of the allowed units and prefixes, see pretext-units.xsl. If you have a need for more units, they need to be added to pretext-units.xsl in the section that deals with units which are not part of siunitx by default. Note that the mag element should come first, followed by the unit element, followed by the per element.
Side-By-Side PanelsIntroduction
The flow of a page is almost universally top-to-bottom. But at times you would like to go across a page, perhaps to compare items (identical content in two different languages), or to make good use of a page real estate by grouping several small items together ( images). So the sidebyside tag is strictly a layout device, though it does convey some meaning by grouping certain objects together. A variety of different objects can be put side-by-side using the sidebyside element. Specifically, figure, image, tabular, p, ol, ul, dl, pre, poem, and more. The individual components of a sidebyside are generically called panelspanels.
As a layout device, the sidebyside does not allow a caption, is never numbered, and therefore cannot be cross-referenced. You may cross-reference whatever element holds the sidebyside, and many of the panels may be cross-referenced individually.
As a first example, we have two single paragraphs, laid out with different widths, and slight margins on each side. The widths have been chosen experimentally to get roughly identical heights for the two paragraphs of varying length.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin lorem diam, convallis in nulla sed, accumsan fermentum urna. Pellentesque aliquet leo elit, ut consequat nunc dapibus ac. Sed lobortis leo tincidunt, vulputate nunc at, ultricies leo. Vivamus purus diam, tristique laoreet purus eget, mollis gravida sapien. Nunc vulputate nisl ac mauris hendrerit cursus. Sed vel molestie velit. Suspendisse sem sem, elementum at vehicula id, volutpat ac mi. Nullam ullamcorper fringilla purus in accumsan. Mauris at nunc accumsan orci dictum vulputate id id augue. Suspendisse at dignissim elit, non euismod nunc. Aliquam faucibus magna ac molestie semper. Aliquam hendrerit sem sit amet metus congue tempor. Donec laoreet laoreet metus, id interdum purus mattis vulputate. Proin condimentum vitae erat varius mollis. Donec venenatis libero sed turpis pretium tempor.
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra. Integer sagittis dictum turpis vel aliquet. Fusce ut suscipit dolor, nec tristique nisl. Aenean luctus, leo et ornare fermentum, nibh dui vulputate leo, nec tincidunt augue ipsum sed odio. Nunc non erat sollicitudin, iaculis eros consequat, dapibus eros.
Figures with Numbers Side-By-Side
Figures, or other captioned items such as tables or listings, can be placed side-by-side using the sidebyside element. The figures will be captioned and numbered as if they were part of the vertical flow of the document. For example, see and
However, if the sidebyside is placed inside another figure, then the outer figure gets an overall caption and a regular number, while the captions of the interior items will be labelled as (a), (b), (c), etc; for example, see the subfigures in . You can also cross-reference the subfigures individually, for example: .
The sidebyside tag can have an attribute widths that specifies a percentage width of the page for each panel of the layout. There are automatic margins by default, and any remaining width is divided evenly to space out the panels. When the margins attribute is given as auto, or in the default case, the margins provided each equal half of the inter-panel space.
With no attributes on the sidebyside, each panel is the same width and there is no inter-panel space and no margin. For a sidebyside with a single panel, with its width specified, the panel will be centered.
Side-by-Side, with figures as children, automatic margin
a white square outlined in blue covered by a black X
Side-by-Side, with figures as children, margin set to zero
width=50%
width=25%
Widths calculated automatically, all defaults
Interior figure
Regular numbering
Regular numbering
Images
We can use the sidebyside element to put imagesimage next to each other. These will illustrate a text, but with no captions or numbers, cannot be cross-referenced. This next example has 10% margins, and the panels have widths 25% and 40%, leaving 15% computed as the one inter-panel space.
Now we fine-tune with different widths (which add up to 100%). The five images have been given different vertical alignments, top middle bottom top middle via the valigns attribute.
If you want an overall caption to a group of images, but no sub-captions on your images, that is also straightforward. This example has no attributes specified. The overall figure may be cross-referenced, as
Two equally-spaced (identical) images
Common Side-By-Side Constructions
We have now seen at least one example of each of the four most common constructions involving sidebyside. Working from the exterior inward, we can go figure, sidebyside, figure, X, where X is some atomic (unnumbered) item we might use elsewhere in a document, the inner figure may be repeated with different objects X, and the figures have captions. Each figure is independently optional, leading to the four combinations in this table. Note this applies to any captioned item used inside the sidebyside, but a figure is the most flexible.
sidebyside and figure interactionsOuter FigureInner FigureEffectAbsentAbsentLayout only, no numbers nor captionsAbsentPresentNumbers and captions on figure(s)PresentAbsentNumber and overall captionPresentPresentNumber and overall caption,sub-numbers and captions on figure(s)
Vertical Alignment
Vertical alignment can be specified using the valign attribute which admits a space-separated list of top, middle, and bottom; the default is top.
Middle
Top
Middle
The singular version of the attribute, valign, can provide the same alignment to each panel, here we use five different widths, but all with vertical alignment of middle.
Text Next to Text and Images
Text can be put next to other blocks of text using the stack element, which can contain multiple paragraphs using the p element (see ). If only one paragraph is required, simply use the p element on its own.
here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text
here is some text here is some text here is some text here is some text here
here is some text here is some text here is some text here is some text here
here is some text here is some text here is some text here is some text here
here is some text here is some text here is some text here is some text here
here is some text here is some text here is some text here is some text here
Similarly, text can be put next to images.
here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text cross reference: and math: x^2
You can place text next to numbered figures, as shown below in .
here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text here is some text; cross reference: and math: x^2
Text next to a figure
Image Formats, Side-by-Sides
Most of our demonstrations here use our square blue cross test image, which is provided as a PNG image. You may specify images by any of the methods described in the section on graphics, . The complete graph below is specified with no file extension, on the assumption that an SVG version exists for HTML output, and a PDF version exists for output. The second is a JPEG image that we use elsewhere for a YouTube video, but recycle here as an image provided in that format. By default, they are aligned at their tops.
Here are two TikZ images, authored side-by-side. The first has had its geometric portions of the original scaled down to 75%, with the effect of increasing the text, relatively, so the application in a side-by-side panel with 25% width has legible text. We caption only the second panel, which has no text adjustments. From TeXample.net.
\begin{tikzpicture}[scale=0.75]
\begin{scope}[blend group = soft light]
\fill[red!30!white] ( 90:1.2) circle (2);
\fill[green!30!white] (210:1.2) circle (2);
\fill[blue!30!white] (330:1.2) circle (2);
\end{scope}
\node at ( 90:2) {Typography};
\node at ( 210:2) {Design};
\node at ( 330:2) {Coding};
\node [font=\Large] {\LaTeX};
\end{tikzpicture}
Tablestable can also be put side-by-side, as demonstrated below in ; naturally, subtables can be referenced as in .
Side-by-Side, with tables as children
width=50%
11112222aaaabbbbAAAABBBB
width=25%
11112222aaaabbbbAAAABBBB
Widths can be calculated automatically
Table with automatic widths
11112222aaaabbbbAAAABBBB
Table with automatic widths
11112222aaaabbbbAAAABBBB
If you put two table elements side-by-side without an enclosing figure, then they will use regular numbering; see Tables.
11112222aaaabbbbAAAABBBB
11112222aaaabbbbAAAABBBB
11112222aaaabbbbAAAABBBB
Tables Next to Figures
Tables and figures can go next to each other, as demonstrated in and , plus within an overall captioned figure, .
Table next to a Figure
11112222aaaabbbbAAAABBBB
Figure next to a Table
Figure and Table, with overall caption, hence sub-captioned
Table next to a Figure
11112222aaaabbbbAAAABBBB
Figure next to a Table
Tables Next to Text
Tables can go next to blocks of text using the stack element (see ).
Table next to text
11112222aaaabbbbAAAABBBB
here is some text here is some text here is some text here is some text here
here is some text here is some text here is some text here is some text here
here is some text here is some text here is some text here is some text here
here is some text here is some text here is some text here is some text here
here is some text here is some text here is some text here is some text here
Tabular Next to Each Other
Four tabular elements inside a single sidebyside will result in no captions at all.
11112222aaaabbbbAAAABBBBCCCCDDDD
11112222aaaabbbbAAAABBBB
11112222aaaabbbbAAAABBBB
11112222aaaabbbbAAAABBBBLists in Side-by-Sides
A regular list normally belongs in a p but it can be placed unadorned into a panel of a side-by-side, as demonstrated below in . You can also put named lists into a panel, and then the title, introduction, conclusion, and caption will behave as expected, along with a number that might be used in a cross-reference (), or perhaps we might cross-reference by title, .
Two named lists
Sea Life
Dr. Seuss again.
One fish
Two fishNot fishes
Red fish
Blue fish
Color Shadescolorsshades
Bluein many shades
Light
Navy
Royal
Red
Maroon
Pink
Shocking
This ends our example.
These same two lists can individually be the panels of a sidebyside, where here vertical alignment on the bottom attempts to align the titles, which are placed below for panels of a sidebyside.
Sea Life
Dr. Seuss again.
One fishNo more fishes
Two fish
Red fish
Blue fish
Color Shadescolorsshades
Blue
Light
Navy
Royal
Reda really nice color
Maroon
Pink
Shocking
This ends our example.
We also need to test a sidebyside in a list. The widths are now relative to the space given over to an indented item. Here we nest and nest and nest and nest to get a big, obvious indentation, and then include an image at 100% width and no margin. In your mind's eye, or with a ruler, check that the image spans all the way over to the right margin.
This is
a very
wide
rectangle
Stacking: Back to Vertical Flow
You might wish to mix disparate items within a panel, returning to a vertical flow within a panel. For example, you might want a diagram to the left and some paragraphs of commentary to the right. Or perhaps a photograph on one side and a list of bullet points to the other side. A stack is a container that can only be used to collect several items into a single panel of a sidebyside. You cannot point to it, but you can point to its contents as usual. Contents may be anything you could otherwise put into a sidebyside panel that does not have a caption or a title. In particular, these panels cannot be sub-numbered since the panel cannot be made into a figure.
Similar items can also be stacked, of course. Most importantly, a normal panel will accept a single paragraph. If you want several paragraphs, simply collect them in a stack.
A simple sentence inside a single p as the first item in a stack.
A less simple sentence that will wrap inside the panel to make the right panel taller and allow us to experiment with sliding the left panel contents up and down, here it is placed in the middle.
We have an image to the left, as a regular panel (not a stack). In the right panel we stack a list of properties, followed by a descriptive paragraph. We middle-align the stack at the bottom, just as a demonstration (it would likely look better with top alignment).
Blue
Square
Geometric
The blue-ness of the border contrasts with the stark emptieness of the white interior, evoking images of blue skies and vast sandy deserts. The harsh black cross draws the viewer's attention to the exact center.
In an image or a tabular can be used within a paragraph. Here we test a mixture of the three items to make sure they are properly separated in a conversion to .
Paragraph one.
Paragraph two.
11112222aaaabbbbAAAABBBB
We imagine a sidebyside using a stack to enable constructions like a table of data in one panel, and maybe a plot with some text next to it.
In the toy example next, the list of data is rigid, so we have set the first panel width to 40%, a value obtained experimentally to just contain the list. This allow us to set the second panel to a width of 58%, and we use no margins. If you try to balance the heights of the two panels, this can become a bit of a zero-sum game. A wider second column means the text occupies fewer lines, but the wider image also creates a taller image, consuming more vertical space.
This set of values and this plot have nothing to do with each other. You'll recognize that they've been liberated from earlier in this work.
Step back and simply examine how the pieces all fit together within a figure.
The next paragraphs should start on a new page in PDF output if the standard publisher file is used.
Bully Pulpit
Remember that sidebyside has attributes that strongly influence layout. That is intentional. But to support a variety of output formats, it does not allow overly-precise control, and they be viewed as providing hints to an implementer of a conversion. So for example, do not expect sidebyside to function like a tabular or an HTMLtable.
In particular, elements of two consecutive stack will not line up, unless perhaps you construct them identically. Consider a sbsgroup for something closer to putting items into rows.
Other Panels
Other elements may be placed within a sidebyside element. Pure lists first.
Footnotes: Fermat allusion at .
Examples: Mystery derivative at .
Definition-like: A mathematical statement with no proof .
Figures: An early plot, Figure.
Footnotes: Fermat allusion at .
Examples: Mystery derivative at .
Definition-like: A mathematical statement with no proof .
Figures: An early plot, Figure.
You can place aligned equations in paragraphs within a sidebyside element.
here is some text, and here is an equation that contains alignment.f(x)&= x^2+3x+2&=(x+2)(x+1)
here is some text, and here is an equation that contains alignment.f(x)&= x^2+3x+2&=(x+2)(x+1)
here is some text, and here is an equation that contains alignment.f(x)&= x^2+3x+2&=(x+2)(x+1)
Pre-formatted text may be included by using the pre element. This content is horizontally-rigid, so as the author, you need to be sure to provide enough width for the panel to contain the content. It is easy to see the boundary of the panels when rendered in HTML since there is a background that fills the panel.
Hello, World! in Pascal and C++
program HelloWorld;begin WriteLn('Hello, world!');end.
Poemspoem may be panels of a side-by-side layout. Here we place some commentary alongside. See for general information about poetry.
Fire and IceFire and Ice, FrostRobert FrostSome say the world will end in fire,Some say in ice.From what I've tasted of desireI hold with those who favor fire.But if it had to perish twice,I think I know enough of hateTo say that for destruction iceIs also greatAnd would suffice.
You might have several things to say about a poem and you could use a sequence of paragraphs immediately adjacent.
This is a second paragraph of commentary.
Poems are not horizontally-rigid, but they are not perfectly horizontally-flexible either. The left copy of this next poem is in a panel roughly 2/3 the width of the page and fits there. The right copy has the first five lines and is in space about half the previous width, and you can see the lines being wrapped with obvious indentation. So you can constrain the width of a poem if you do not mind the additional indentation. (Recognize that this example is a bit extreme.)
Sonnet to LibertySonnet to Liberty, WildeOscar WildeNot that I love thy children, whose dull eyesSee nothing save their own unlovely woe,Whose minds know nothing, nothing care to know,But that the roar of thy Democracies,Thy reigns of Terror, thy great Anarchies,Mirror my wildest passions like the sea,And give my rage a brother! Liberty!For this sake only do thy dissonant criesDelight my discreet soul, else might all kingsBy bloody knout or treacherous cannonadesRob nations of their rights inviolateAnd I remain unmoved-and yet, and yet,These Christs that die upon the barricades,God knows it I am with them, in some things.Sonnet to LibertyOscar WildeNot that I love thy children, whose dull eyesSee nothing save their own unlovely woe,Whose minds know nothing, nothing care to know,But that the roar of thy Democracies,Thy reigns of Terror, thy great Anarchies,Side-By-Side Groups
A side-by-side group,sbsgroup, is still in development. (Notably, subcaptions do not behave as expected.) It is a sequence of sidebyside, which may conceivably use the same margins, widths and vertical alignments for each horizontal run of panels. Attributes on the sbsgroup are global to the group's enclosed sidebyside, and will be used by each contained sidebyside. If attributes are present on an individual sidebyside, they override the global values. The next two examples demonstrate some of this behavior, in a limited way.
Overall SBS Group
One.
Two.
Three.
Four.
Five.
Six.
A long poem, when placed into a sidebyside will not fit onto a physical page and will not break across pages. With a sbsgroup you can put each stanza (say) into its own sidebyside and place something (commentary) next to it. We include the title with the first stanza and the author with the last stanza. This device can also be useful to attach commentary to specific stanzas.
The Stolen ChildStolen Child, The, YeatsWhere dips the rocky highlandOf Sleuth Wood in the lake,There lies a leafy islandWhere flapping herons wakeThe drowsy water-rats;There we've hid our faery vats,Full of berriesAnd of reddest stolen cherries.Come away, O human child!To the waters and the wildWith a faery, hand in hand,For the world's more full of weeping than youcan understand.
Some commentary on Stanza One.
Where the wave of moonlight glossesThe dim grey sands with light,Far off by furthest RossesWe foot it all the night,Weaving olden dances,Mingling hands and mingling glancesTill the moon has taken flight;To and fro we leapAnd chase the frothy bubbles,While the world is full of troublesAnd is anxious in its sleep.Come away, O human child!To the waters and the wildWith a faery, hand in hand,For the world's more full of weeping than youcan understand.
Some commentary on Stanza Two.
Where the wandering water gushesFrom the hills above Glen-Car,In pools among the rushesThat scarce could bathe a star,We seek for slumbering troutAnd whispering in their earsGive them unquiet dreams;Leaning softly outFrom ferns that drop their tearsOver the young streams.Come away, O human child!To the waters and the wildWith a faery, hand in hand,For the world's more full of weeping than youcan understand.
Some commentary on Stanza Three.
William Butler YeatsAway with us he's going,The solemn-eyed:He'll hear no more the lowingOf the calves on the warm hillsideOr the kettle on the hobSing peace into his breast,Or see the brown mice bobRound and round the oatmeal-chest.For he comes, the human child,To the waters and the wildWith a faery, hand in hand,From a world more full of weeping than hecan understand.
Some commentary on Stanza Four.
The main rationale for sbsgroup is to layout a grid of items, and by placing the layout parameters on the sbsgroup element, the items can line up across sidebyside and subcaptioning can run across the whole group. So, for example, if you have images to compare by placing in a grid, then making them all the same size, or of the same aspect ratio, can help with the overall consistency.
This example has three sidebyside, each with four figure containing an identical image. Since the images are identical and the width is set to 20% they should all line up nicely with little effort. Since the default for margins is automatic, the remaining 20% of the overall width will be used for three inter-panel spaces of 5% and two margins of 2.5% each. Note the numbering of these as independent figures. We have left the captions empty for reasons of space, but you could add more information. Note that in print, a page break is allowed between any two of the sidebyside and cannot be suppressed.
We recycle the prior sbsgroup but now put it in its own overall figure. That will allow a caption for the whole group, and will cause the twelve figures to be subcaptioned. Except the subcaptioning is not implemented. Soon.
Twelve images, arranged in a grid
One more test. We override the spacing and vertical alignments of the middle sidebyside. Note that it is easy to make a panel so skinny that even the smallest possible caption does not fit in the width.
Now an sbsgroup that should start on a new page if this sample
article is built to PDF using the distribution publisher file.
The following is a sbsgroup full of operation tables. Once upon a time it was rather cramped vertically in HTML output, but Andrew Scholer improved the spacing at GitHub #2387. The example is from Valerio Monti.
A sidebyside that appears first within some other container can wreak havoc in output. Below we have this situation twice, once in an activity, then in an example, then in a paragraphs.
Here is text block 1
Here is text block 2
Here is text block 1
Here is text block 2
And a sbsgroup in similar circumstances.
Here is text block 1
Here is text block 2
Here is text block 3
Here is text block 4
First Child of a ParagraphsABCD\alpha\beta\gamma\deltaTesting Styling of Related Elements
This subsection has non-side-by-side structures, to aid with the effects of styling decisions across the range of possibilities. First a figure with a caption holding a scaled image and a cross-reference for knowl testing: .
A traditional figure
Side-by-Side Gallery
This subsection attempts to survey all the possible items that can be placed into a sidebyside element, in various combinations. While intended to be exhaustive across contents, it does not test all possibilities, and is not meant to be instructive (see for that). The layout is identical for each sidebyside, 5% margins, panel widths of 40% and 45%, leaving 5% for the space between the panels. The vertical alignment is left at the default, top.
We begin with simpler atomic items. If necessary, comments follow each.
Single p (left), stack (right)
Vestibulum sit amet est non lacus accumsan iaculis aliquam nec leo. Maecenas placerat consequat quam, a lobortis odio convallis vitae. Curabitur sagittis, risus non suscipit pulvinar, enim tortor posuere purus, id dignissim sapien sapien non dui. Vestibulum ultrices, enim a ornare consectetur, nisl est iaculis arcu, eget scelerisque nunc magna a nisl. Vestibulum vestibulum ante sit amet ex vulputate, eu facilisis sapien tempor.
Aliquam dui nisi, pharetra id enim vel, imperdiet laoreet risus. Nunc convallis elit eu erat imperdiet tincidunt. Sed eget augue et nunc mollis tempor. Suspendisse luctus elit non lorem scelerisque, nec lacinia lectus dictum.
Vivamus ut orci nisl. Donec eleifend ultricies tortor, a pellentesque neque dignissim in. Praesent maximus, augue eu pretium auctor, dolor quam feugiat augue, ut vulputate nunc eros vitae massa. Phasellus quis ante quis est venenatis dapibus eget luctus ipsum.
An ol with simple items, a ul with items with paragraphs
Blue
Red
Green
Purple
Violet
Brown
Vestibulum sit amet est non lacus accumsan iaculis aliquam nec leo. Maecenas placerat consequat quam, a lobortis odio convallis vitae.
Curabitur sagittis, risus non suscipit pulvinar, enim tortor posuere purus, id dignissim sapien sapien non dui.
Vestibulum ultrices, enim a ornare consectetur, nisl est iaculis arcu, eget scelerisque nunc magna a nisl.
Vestibulum vestibulum ante sit amet ex vulputate, eu facilisis sapien tempor.
A program and a console
n_loops <- 10
x.means <- numeric(n_loops)
for (i in 1:n_loops){
x <- as.integer(runif(100, 1, 7))
x.means[i] <- mean(x)
}
x.means
gcc -o intAndFloat intAndFloat.c
./intAndFloat
Note that these two chunks of verbatim text will very likely exceed the right side of a too-skinny panel. We have severly edited these two examples from previous appearances just to fit here.
An poem and a tabular
To A Friend Whose Work Has Come To NothingWilliam Butler YeatsNow all the truth is out,Be secret and take defeatFrom any brazen throat,For how can you compete,Being honour bred, with oneWho, were it proved he lies,Were neither shamed in his ownNor in his neighbours' eyes?Bred to a harder thingThan Triumph, turn awayAnd like a laughing stringWhereon mad fingers playAmid a place of stone,Be secret and exult,Because of all things knownThat is most difficult.OrganismClassificationTroutFishMonkeyMammalCrowBirdCriminiFungusBeeInsect
A tabular can exceed the width of its panel in print, while in HTML it may reflow individual cells to stay within a panel, depending on their contents.
A pre, and a pre employing cline
Vestibulum sit amet est non
lacus accumsan iaculis
aliquam nec leo. Maecenas
placerat consequat quam, a
lobortis odio convallis
vitae.
Vestibulum sit amet est non lacus accumsan iaculisaliquam nec leo. Maecenas placerat consequat quam,a lobortis odio convallis vitae.
Be aware that the lines of pre can spill outside of its panel without any word-wrapping. So you may need to vary panel widths or rearrange line breaks manually. Page width is a scarce resource.
An identical image, twice
Images will scale to fill their panel's width. We provide no services to change the aspect ratio of your images, that is your responsibility to accomplish elsewhere. This rectangular image will have slightly different widths, and so will be slightly deeper in the right panel (at a 45:40 ratio). Remember, vertical alignment is at the top.
Now we turn to captioned items: figure, table, listing, and the anomalous named list, list, whose future is uncertain. We test subcaptions here. Note that many different atomic items can go in a figure, and largely they will behave in a sidebyside much as they do when placed in a panel all by themselves ( captionless).
A statistical computation
n_loops <- 10
x.means <- numeric(n_loops)
for (i in 1:n_loops){
x <- as.integer(runif(100, 1, 7))
x.means[i] <- mean(x)
}
x.means
Colors Again
We have named list of colors.
Blue
Red
Green
Purple
Violet
Brown
That was nice.
Now let's test the alignment of various items that might be placed with an image in a figure. We want asymptote links and long descriptions close to the image. The caption for figures should be aligned.
Two Asympote images side-by-side
Asymptote Lever Demonstration
moments on a lever
This diagram has two masses at either end of a lever, namely m and M. They are located at distance x and X on an axis. The resulting center-of-mass is at a point \bar{x}.
Videos can be placed quite compactly for HTML output, but we display a fair amount of information for a YouTube video in print, and therefore two videos side-by-side gets pretty crowded. The examples above have the bare minimum amount of information attached (not in an overarching figure), and the bare amount which which is displayed in print. We could relax our common spacing to make it a bit better. Read about side-by-side groups (sbsgroup) and experiment with stacking several sub-captioned videos into an overall captioned figure (). For other examples see and .
Open Problems
Like for mathematical research. Experimental as of 2023-07-06.
Solve the Riemann HypothesisFootnotes were once incomplete on open problems.and provide a short proof of Fermat's Last Theorem.
Poetry
There is support for poems via the poempoem tag, which can contain a title, author and multiple stanza, each containing multiple line. See the source of the following poem for an example of the exact arrangement. Note how the first quote crosses two line elements and how this is handled in the source. There are many very flexible options for horizontal alignment and indentation. Further extensive examples, constructed by Jahrme Risner, are available in the example Humanities document.
The Charge of the Light BrigadeCharge of the Light Brigade, The, TennysonAlfred Lord TennysonHalf a league, half a league,Half a league onward,All in the valley of DeathRode the six hundred.Forward, the Light Brigade!Charge for the guns! he said:Into the valley of DeathRode the six hundred.Charge of the Light Brigadesecond stanzaForward, the Light Brigade!Was there a man dismay'd?Not tho' the soldier knewSomeone had blunder'd:Theirs not to make reply,Theirs not to reason why,Theirs but to do and die:Into the valley of DeathRode the six hundred.
Ken Levasseur, who teaches at UMass-Lowell, has limericks in his Applied Discrete Structures textbook. When he reported that they were unable to be the target of a cross-reference, Karl-Dieter Crisman penned the following limerick.
Karl-Dieter CrismanCS students studying in LowellRequired their books to have soul.Along came their teacherWho asked for this feature:A poem that lives in a knowl.
And when yours truly tried to joke about poetry on GitHub CLI #182, back came:
Steven ClontzThere once was a maintainer named RobWho told bad jokes while on the jobWhile they were lameYou could say the sameOf Steven's limericks that cause you to sobLiterate Programming
There is support for literate programming using the fragment tag. It should always contain an @xml:id or a @filename attribute, and may contain code segments as well as fragref segments referencing other fragments. The final code is to be assembled starting from a fragment with a filename attribute and traversing the tree of fragment references.
For example here is the gcd algorithm in Python. Note that indentation is hard to get right at the moment.
The GCD algorithm
def gcd(a, b):
while(b):
return a
The key part is the inner part of the loop:
The key loop part
a, b = b, a % b
This double assignment changes both a and b.
Atomic Objects
Some objects are relatively indivisable and are used as components of other structures. We call them atomic, even if the term is not perfect. A good example is image (next, ). This section is arranged according to these objects and tests the various ways they can be employed.
We frequently include some nonsense text inside short intervening paragraphs to test spacing and establish margins.
image
An image can be placed in five different ways:
all by itself, as a peer of p typically, with layout control,
inside a figure, earning a number and caption,
inside a sidebyside, with size and layout configured,
inside a figure inside a sidebyside, with size and layout configured, with a number and caption, and
inside a figure inside a sidebyside inside a figure, with size and layout configured, with a number and caption, but now sub-numbered ((a), (b), (c),).
Examples of each, and more.
All by itsef, with no layout specified, so showing the default size and placement. Vivamus in congue massa. Morbi condimentum ac magna at accumsan. Vestibulum ac augue eu lorem semper gravida.
Width set at 40%, so equal margins and thus centered. Aenean faucibus augue tellus, et sollicitudin tortor finibus non. Maecenas semper dolor quis diam placerat, iaculis sollicitudin augue finibus. Vestibulum facilisis ligula lectus, ac tristique nisl aliquet non.
Asymmetric margins of 20% and 40% given, implying 40% width, equal to previous instance. Vivamus suscipit diam eget mi cursus viverra.
As a plain component of a sidebyside. Widths here are 20% and 30%, margins and gaps are automatic, default alignment on top edges. Nulla pharetra imperdiet elit, in sodales nibh blandit ultricies. Maecenas efficitur ac felis ut pharetra.
Inside a figure with no adjustments, so default behavior. Note how a figure occupies the entire width of the page, so then does the caption.
New Zealand Landscape
Inside a figure with asymmetric (large) margins of 30% and 60%. Quisque finibus augue sit amet facilisis fringilla. Aenean faucibus augue tellus, et sollicitudin tortor finibus non.
New Zealand Landscape
Inside figures inside a sidebyside. Same widths as previous sidebyside but alignment on bottoms of the panels, to partially align captions. Note how the captions are constrained in width by the width of the panels of the side-by-side.
NZ Landscape
New Zealand Terrascape
Identical code to previous example, but now wrapped in an overall figure, which has its own caption and number, leaving the interior figures to be sub-numbered. Cross-references use the full number: .
Amalgamation of Scapes
NZ Landscape
New Zealand Terrascape
For , in some circumstances it is desirable to print the image on the next line, but backed up by some amount.
This top-aligns the image with a number of some sort off to the left. The following are tests for this behavior.
Here is a list.
A rotation="n" attribute applied to a bare image will rotate the image by n. The vertical space adjusts to accomodate the rotated image in the latex version but not in the html version.
Rotated Images
rotate="180"
rotate="15"
For pdf output destined for print, when the publication file entry latex/@print="yes", a @landscape="yes" attribute applied to a figure, table, list or listing will cause the object to be rotated 90 and presented on its own page. Placement of the float is determined by and multipage objects are not supported.
This landscape figure will be rotated so the long edge is vertical, and will appear on its own page in print PDF output.
Wide figure containing a sidebyside containing a rotated image. This will be rotated and appear on its own page in print PDF output.
Quack
Propulsion System
video
An video can be placed in five different ways:
all by itself, as a peer of p typically, with layout control,
inside a figure, earning a number and caption,
inside a sidebyside, with size and layout configured,
inside a figure inside a sidebyside, with size and layout configured, with a number and caption, and
inside a figure inside a sidebyside inside a figure, with size and layout configured, with a number and caption, but now sub-numbered ((a), (b), (c),).
Examples of each, and more.
Videos can be realized in many forms, and can come from a variety of sources. See for tests of some of that variety. Here we are testing placement within surroundings and testing the schema for location. But we do have two videos in each test, one provided as a local file and one embedded from a service.
All by itsef, with no layout specified, so showing the default size and placement. Vivamus in congue massa. Morbi condimentum ac magna at accumsan. Vestibulum ac augue eu lorem semper gravida.
Vestibulum facilisis ligula lectus, ac tristique nisl aliquet non. Quisque ornare felis arcu. Vivamus suscipit diam eget mi cursus viverra.
Width set at 40%, so equal margins and thus centered. Aenean faucibus augue tellus, et sollicitudin tortor finibus non. Maecenas semper dolor quis diam placerat, iaculis sollicitudin augue finibus. Vestibulum facilisis ligula lectus, ac tristique nisl aliquet non.
Vestibulum facilisis ligula lectus, ac tristique nisl aliquet non. Quisque ornare felis arcu. Vivamus suscipit diam eget mi cursus viverra.
This next video should start on a new page if the distribution publication file
is in use.
Asymmetric margins of 20% and 40% given, implying 40% width, equal to previous instance. Vivamus suscipit diam eget mi cursus viverra.
Vestibulum facilisis ligula lectus, ac tristique nisl aliquet non. Quisque ornare felis arcu. Vivamus suscipit diam eget mi cursus viverra.
As a plain component of a sidebyside. Widths here are 20% and 30%, margins and gaps are automatic, default alignment on top edges. Nulla pharetra imperdiet elit, in sodales nibh blandit ultricies. Maecenas efficitur ac felis ut pharetra.
Inside a figure with no adjustments, so default behavior. Note how a figure occupies the entire width of the page, so then does the caption.
University of Puget Sound Promotional Video
Vestibulum facilisis ligula lectus, ac tristique nisl aliquet non. Quisque ornare felis arcu. Vivamus suscipit diam eget mi cursus viverra.
Pre-Roll Countdown
Inside a figure with asymmetric (large) margins of 30% and 60%. Quisque finibus augue sit amet facilisis fringilla. Aenean faucibus augue tellus, et sollicitudin tortor finibus non.
University of Puget Sound Promotional Video
Vestibulum facilisis ligula lectus, ac tristique nisl aliquet non. Quisque ornare felis arcu. Vivamus suscipit diam eget mi cursus viverra.
Pre-Roll Countdown
Inside figures inside a sidebyside. Same widths as previous sidebyside but alignment on bottoms of the panels, to partially align captions. Note how the captions are constrained in width by the width of the panels of the side-by-side.
Pre-Roll Countdown
University of Puget Sound Promotional Video
Identical code to previous example, but now wrapped in an overall figure, which has its own caption and number, leaving the interior figures to be sub-numbered. Cross-references use the full number: .
Amalgamation of Videos
Pre-Roll Countdown
University of Puget Sound Promotional Video
program, console
A program and/or console can be placed in at least six different ways:
all by itself, as a peer of p typically, with layout control
inside a listing, earning a number and caption, with layout control
inside a sidebyside, with size and layout configured
inside a sidebyside, with size and layout configured, and inside a figure
inside a sidebyside, with size and layout configured, with each inside a listing, earning different numbers
inside a figure inside a sidebyside inside a listing, with size and layout configured, with a number and title, but now sub-numbered ((a), (b), (c),).
Examples of each, and more.
Programs can be realized in many forms, and can come from a variety of sources. See for tests of some of that variety. Here we are testing placement within surroundings and testing the schema for location. But we do have two videos in each test, one provided as a local file and one embedded from a service.
All by itsef, with no layout specified, so showing the default size and placement. Vivamus in congue massa. Morbi condimentum ac magna at accumsan. Vestibulum ac augue eu lorem semper gravida.
n_loops <- 10
x.means <- numeric(n_loops) # create a vector of zeros for results
for (i in 1:n_loops){
x <- as.integer(runif(100, 1, 7)) # 1 to 6, uniformly
x.means[i] <- mean(x)
}
x.means
Now a program with shorter lines, with no layout control.
/* Hello World program */
#include<stdio.h>
main()
{
printf("Hello, World!");
}
And a console element, also with no layout control.
gcc -o intAndFloat intAndFloat.c
./intAndFloat
Now similar examples, but with layout control: margins and width.
A program with a width attribute, so centered and with equal margins. Note how the lines word wrap due to the smaller width.
n_loops <- 10
x.means <- numeric(n_loops) # create a vector of zeros for results
for (i in 1:n_loops){
x <- as.integer(runif(100, 1, 7)) # 1 to 6, uniformly
x.means[i] <- mean(x)
}
x.means
A program with short lines, so significant, and asymmetric margins, which experimentally do not induce any word-wrapping.
/* Hello World program */
#include<stdio.h>
main()
{
printf("Hello, World!");
}
A longer console, with margins so significant the appearance is ill-advised.
Hello, World! in C
/* Hello World program */
#include<stdio.h>
main()
{
printf("Hello, World!");
}
A console session on a Raspberry Pi
gcc -Wall -o intAndFloat intAndFloat.c
./intAndFloat
Same two listing, but now with layout control on the program and console.
Hello, World! in C
/* Hello World program */
#include<stdio.h>
main()
{
printf("Hello, World!");
}
A console session on a Raspberry Pi
gcc -Wall -o intAndFloat intAndFloat.c
./intAndFloat
This sidebyside gives each panel a 30% width. The remaining 10% is apportioned for margins and separation.
/* Hello World program */
#include<stdio.h>
main()
{
printf("Hello, World!");
}
gcc -Wall -o intAndFloat intAndFloat.c
./intAndFloat
n_loops <- 10
x.means <- numeric(n_loops) # create a vector of zeros for results
for (i in 1:n_loops){
x <- as.integer(runif(100, 1, 7)) # 1 to 6, uniformly
x.means[i] <- mean(x)
}
x.means
This is the same three-panel sidebyside, but now inside of a figure, earning a number and a caption.
Some Code Samples
/* Hello World program */
#include<stdio.h>
main()
{
printf("Hello, World!");
}
gcc -Wall -o intAndFloat intAndFloat.c
./intAndFloat
n_loops <- 10
x.means <- numeric(n_loops) # create a vector of zeros for results
for (i in 1:n_loops){
x <- as.integer(runif(100, 1, 7)) # 1 to 6, uniformly
x.means[i] <- mean(x)
}
x.means
Finally, a smaller program and a smaller console, each inside a listing, as the two panels of a sidebyside with no margins, and slightly different widths (to control word-wrapping). The panels have been aligned vertically so their captions align.
Hello!
/* Hello World program */
#include<stdio.h>
main()
{
printf("Hello, World!");
}
Raspberry Pi
gcc -Wall -o intAndFloat intAndFloat.c
./intAndFloat
And again, the two-panel sidebyside of listing, but now inside a figure that has a number and a title. And then the listing are sub-numbered as (a) and (b).
Two Code Listings
Hello!
/* Hello World program */
#include<stdio.h>
main()
{
printf("Hello, World!");
}
Raspberry Pi
gcc -Wall -o intAndFloat intAndFloat.c
./intAndFloat
tabular
A tabular can be placed in six different ways:
all by itself, as a peer of p typically, with no layout control and hence with a natural width, and centered
all by itself, as a peer of p typically, with explicit layout control,
inside a table, earning a number and title,
inside a sidebyside, with size and layout configured,
inside a table inside a sidebyside, with size and layout configured, with a number and title, and
inside a table inside a sidebyside inside a figure, with size and layout configured, with a number and title, but now sub-numbered ((a), (b), (c),).
Examples of each, and more.
A tabular realized by for PDF/print will normally be as wide as necessary to hold the content, without word-wrapping the content of any cell that is not explicitly authored that way. This is the most rigid of the content types we call planar. So for output as , when you explicitly constrain the width to be less than the natural width (including use as a panel of a sidebyside, or even setting margins) the table will be scaled down in width, which can result in an apparent font size very much smaller than that of the surrounding text. Note that we do not ever scale a tabular up to be wider with a larger font size. Note also that if there is no attempt to control the space for the table (no layout control, not in a sidebyside) then no scaling is attempted at all and the table may be wider than the text and protrude into the right margin. For more, see the three examples at: , , . Generally, much of the commentary and testing here is about /PDF/print. While for HTML output the cells will usually automatically word-wrap to fit in the available space, without adjusting the font size. Some might like this behavior and some might not.
Data in a table form can be placed in amongst a series of paragraphs. With no layout control, it will occupy its natural width and be centered.
The same effect can be had by specifying that the width attribute have the value auto, but do not specify any margins. We test multiple footnotes in a tabular, not included in a table.
StateOnly from the West Coast.PopulationArea (sq. mi.)Statehood (Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223Wow! That is as big as many countries.163,6961850
In amongst a run of paragraphs (or similar) a tabular can be placed with layout control. For output, this will scale the table to fit within the explicit, or implicit, width. This can result in obvious differences in the apparent font size. We first have a width that is experimentally similar to the natural width, with asymetric margins. Then a narrow width, and a wide width, as an illustration.
Width of 60%, automatic centeringStatePopulationArea (sq. mi.)Statehood (Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
Very narrow, asymmetric margins.
Width of 30%, 30% left margin, 40% right marginStatePopulationArea (sq. mi.)Statehood (Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
Wider than necessary, asymmetric margins.
Width of 90%, 8% left margin, 2% right marginStatePopulationArea (sq. mi.)Statehood (Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
The next table is purposely much too wide. In we make no attempt to control the width, and so it will extend into the margins. In we have simple added the attribute width="auto". This attempt to use layout control will cause an automatic reduction in width and a smaller apparent font size. Adjusting margins providing an explicit percentage width, or placing the tabular as a panel of sidebyside will have the same effect. In we have set the width explicity to 100% and so it should be identical to the automatic width case just prior.
Tabular too wide, no layout controlStatePopulationArea (sq. mi.)Statehood (Year)Capitol CityLargest CityWashington7,614,89371,3621889OlympiaSeattleOregon4,217,73798,3811859SalemPortlandCalifornia39,512,223163,6961850SacrementoLos Angeles
Tabular too wide, scale to automatic widthStatePopulationArea (sq. mi.)Statehood (Year)Capitol CityLargest CityWashington7,614,89371,3621889OlympiaSeattleOregon4,217,73798,3811859SalemPortlandCalifornia39,512,223163,6961850SacrementoLos Angeles
Tabular too wide, scale to 100% widthStatePopulationArea (sq. mi.)Statehood (Year)Capitol CityLargest CityWashington7,614,89371,3621889OlympiaSeattleOregon4,217,73798,3811859SalemPortlandCalifornia39,512,223163,6961850SacrementoLos Angeles
Now into sidebyside in various ways and with various sizes. First, two tabular as panels with widths at 60% and 30%. Note that in /PDF/print the tabular of functional values does not need the full 30% width, so it is at its natural size and centered within its panel.
West CoastStatePopulationArea (sq. mi.)Statehood (Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
Function Valuesxf(x)39.73452.175
Finally, as two individual table, grouped and laid out via a sidebyside, and collected as a figure. Which causes sub-numbering of the two enclosed table.
Geography and Mathematics
West CoastStatePopulationArea (sq. mi.)Statehood (Year)Washington7,614,89371,3621889Oregon4,217,73798,3811859California39,512,223163,6961850
Function Valuesxf(x)39.73452.175
Advanced Numbering
This section demonstrates the numberingnumbering patterns used throughout . There are five subsections. Two intermediate subsections each have two subsubsections. This creates a total of seven divisions that are leaves of the document tree. In each leaf we have placed two numbered theorems, for a total of fourteen. There is no real content, this is just a demonstration.
Use values of 0 through 3 for the numbering.theorems.level parameter to see how these numbers change accordingly. It is easiest to compare if you use chunk.level < 2 so the theorems all land on the same page if you are previewing in HTML.
One
A document leaf.
First TheoremCauchy
No statement.
Second TheoremBunyakovsky
No statement.
Two
Further subdivided.
Uno
A document leaf.
First Theorem!Schwarz
No statement.
Second Theorem?Inequality
No statement.
Dos
A document leaf.
First Theorem?
No statement.
Second Theorem!
No statement.
Three
A document leaf.
First Theorem
No statement.
Second Theorem
No statement.
Four
Further subdivided. We include two theorems as numbered items in the introduction to test their numbers, which should always be logical.
Good Numbered Theorem One
No statement.
Good Numbered Theorem Two
No statement.
Uno
A document leaf.
First Theorem
No statement.
Second Theorem
No statement.
Dos
A document leaf.
First Theorem
No statement.
Second Theorem
No statement.
Conclusion now. We include two theorems as numbered items in the conclusion to test their numbers, which are sometimes totally illogical and are inconsistent across output formats. To see the effect, set the level for numbering theorems to 3. See this GitHub Issue #139 for details.
Bad Numbered Theorem One
No statement.
Bad Numbered Theorem Two
No statement.
Five
A document leaf.
First Theorem
No statement.
Second Theorem
No statement.
Theorems in This Section
We have a lot of theorems in this section, so we illustrate including an automatic list of these here. We use the elements attribute to limit the list to theorem elements, and we use the scope attribute to limit the list to this section. You can use an introductory p like this one, or not. The list gets no title or visual separation, so use the usual subdivision elements to make that happen. The elements attribute can be a space-delimited list of many different elements. This list should not include the Fundamental Theorem of Calculus, Theorem. See a slightly different example in .
Definitions in This Article
Here is a similar list, but for definition elements across the whole article. This list also serves as a regression test. contains a diagram whose source uses a definition element of its own, in the XML namespace. An earlier version of list-of matched descendants by local name only, ignoring namespaces, and so would catch definitions and then fail to produce numbers for them. The list below correctly contains only the definitions.
A Title with ] a Right Bracket
has trouble with brackets that end up inside optional arguments, so this subsection title is only a check on the defense against that. And now an exercise with a title that could really be a problem.
A Right Brace } and a Right Bracket]
The right brace is is used as a grouping character in so this is just a test of its behavior in titles.
A faux hint to get this exercise to migrate into a solutions.
A Title with } a Right Brace
And now a right brace in a division title.
A Title with a]b a Math Right Bracket
And now a right bracket within math in a division title.
We do not test a right brace within math, since it should be escaped, as is normal practice.
Just an ExerciseAn Extraneous Exercise
This exercise is here just as a test of the solutions division coming next. So it is serving a purpose, even if it is not apparent.
A hint, so this exercise looks identical in structure to the one in the previous subsection.
This is a solutions division, which will be a peer of the other subsection in this section. The default behavior is to look to the parent division (a section here) and collect all the hints, answers, and solutions from every exercise (and friends) inside this containing division. (There are just two, similar inline exercise.)
But instead of the default, we employ a scope attribute to define the parent division of the exercises whose solutions will be shown. In this example we specify the subsection that is two back, the one which tests brackets in titles.
CustomizationsRenaming Document Parts, Plus This Is A Really Long Title So That We Can Test How Well It Reacts To The Right Margin And Wraps Around To Form A Couple Of Lines, Plus How It Sits Relative To The Number Of The Subsection
Namesname for various parts of a document are determined exactly once for each language, ensuring consistency and saving you the bother of always typing them in.
However, you may want to have Conundrumsconundrumrepurposed from proposition in your document and you have no use for any Propositions.
conundrumrepurposed from propositionrename an environmentconundrum
So you can repurpose the proposition tag to render a different name. Or you might have a Lab Manual and want to rename subsection as Activity. See the docinfo portion of this sample article to see how this is done, in concert with the example below. Note that you may provide versions for different languages by specifying a xml:lang attribute.
Smith
Aah, this is confusing!
Important Notes
If you are renaming many parts of your document, then you may not understand the design philosophy of . In particular, you should not be doing a wholesale shuffle of part, chapter, section, This feature is intended for very limited use and is not considered best practice.
This feature could also be abused to provide a comprehensive suite of translations into a language not yet supported. If so, please contact us about moving your translations into for the benefit of all. Thanks.
Customizing Phrases
There is a facility for providing alternate text for small or short phrases, or other components of a paragraph. Here we just provide some tests. Each is inside of a block quote to identify it clearly.
We have two auxiliary files of custom elements, so you need to adjust the publisher file to specify the second one during testing. First, a very simple string as the variation.
This is an article about .
Now a string which is partially text and partially simple markup.
We like to write with .
And a mildly more complicated structure (a list) as the variable text.
Some of our favorite colors are
A cross-reference to test, since context is critical.
See also .
The URLs used as a replacement have the visual attribute which is also managed by the assembly pre-processor to provide a parenthetical for print PDF production. So this is a good test of the organization of the multiple passes employed by the pre-processor.
A URL that should have a parenthetical in the print PDF version: .
MyOpenMath Interactive Problems
This is a test with two inline exercises containing MyOpenMath (MOM) problems. None of this is in the schema, and all of it is subject to change.
Negative Numbers and Exponents
This is an introduction, providing articulation between the MOM problem and the contents of the text. For example, you might cross-reference a result or example given previously.
A Statistical Test
This is an introduction, providing articulation between the MOM problem and the contents of the text. For example, you might cross-reference a result or example given previously.
With an image
This is an introduction, providing articulation between the MOM problem and the contents of the text. For example, you might cross-reference a result or example given previously.
Geometry of a Cone
This problem has two figures. They come from the MOM server as SVG files. These image files are then converted to PDF for static formats like PDF, and into PNG for formats like Kindle.
STACK Interactive QuestionsSTACK
These are interactive exercises provided by the STACK Assessment system. In HTML output you will need to ask for a new question to make each question render initially.
STACK integration question
An introduction to a test question, providing context within the larger document.
STACK multiple choice question
This is a multiple choice question where multiple answers can (in principle) be correct.
STACK matrix input question
This is a question where the input is a matrix.
STACK question with generated plot
This is a question that generates a plot that must be rendered in the question text.
STACK question with advanced typesetting and embedded image
This question comes from the HELM project. It features an embedded image in its solution, as well as advanced typesetting and multi-line latex.
Ancillaries
Once your content is in place, you can begin thinking about various useful derivative works. A natural example for a textbook is an Instructor's Version. Various switches for hints, answers, and solutions to exercises would allow you to include more of these for the use of just an instructor. Here we also demonstrate the commentary element. It is similar in many ways to a paragraphs in that it can be placed within any division and must be titled. The main difference is that it is not displayed by default, so you must set the string parameter commentary to the value yes. Other distinctions are:
Since it is elective, you need to be careful about cross-references to and from a commentary. It is highly likely that you will want to make cross-references within a commentarypointing to other portions of your text, and this is always a good idea. You will want to avoid making cross-references to a commentary from other parts of the text, with the exception of a cross-reference that originates within some commentary.
Numbered items are prohibited within a commentary, such as a figure or a theorem. Doing so would disrupt consecutive numbering in different versions, with or without, commentary included. Numbered equations are not prohibited in the schema, but should definitely be avoided anyway.
After some nonsense text in a paragraph, there is a commentary with two paragraphs. For the online version of this sample article, we have enabled commentaries. But if you are experimenting yourself, you will want to be aware if you are enabling these or not.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam odio orci, ullamcorper eget quam et, viverra tristique magna. Integer auctor arcu a sapien pulvinar elementum. Mauris porta, nulla id molestie dignissim, urna dolor rutrum ligula, eu elementum odio nisl sed libero. Nulla nec libero sem.
Sed justo ex, efficitur dictum risus nec, eleifend consequat nibh. Proin rutrum mi id metus viverra blandit. In vel ligula a nibh aliquam pellentesque. Duis placerat purus et ligula sollicitudin, sodales consectetur ante viverra.
Mauris fringilla nulla arcu, sagittis ultrices quam malesuada eleifend. Proin tristique elit eu bibendum tincidunt. Donec commodo lorem in magna egestas, vitae malesuada velit ornare. Pellentesque finibus neque in venenatis tristique. In id blandit est, in euismod urna. Donec commodo sagittis ligula, in venenatis nulla porttitor in. Donec nec tortor sit amet felis posuere ultricies. Suspendisse euismod quis ex eu placerat.
WorksheetsAbout Worksheets
This is a section full of worksheets. Each is a division of its own, via the worksheet element. This is an optional introduction to the current section. In practice you might want to rip out all the worksheets of an entire book and bundle them up as an activity book.
If you make PDF output you will notice an increased amount of control over layout. Also, if the publication file elects draft mode, then there will be visual indicators of prescribed whitespace.
A Geometric Prelude (without authored pages)
Practice visualizing vector addition
Use vectors without explicit coordinates
This two-page worksheet was generously donated to the sample article by Dave Rosoff at a CuratedCourses workshop in August2018. It has the default (skinny) margins.
It was known to Euclid, and probably earlier, that the midpoints of the sides of any quadrilateral all lie in the same plane (even if the vertices of the quadrilateral do not). In fact, these midpoints are the vertices of a parallelogram, as pictured in .
The midpoints of the sides of a quadrilateral are the vertices of a parallelogram.
In this exercise, we'll use vectors to show that the medians of any triangle () intersect at a point. Recall that medians are the lines connecting the vertices of the triangle to the midpoints of their opposite edges, as in the figure. We'll do this in a few steps.
What is the value of \vec{A} + \vec{B} + \vec{C}?
from the previous page is reproduced for your convenience.
The medians of the triangle are \vec{M}_1, \vec{M}_2, and \vec{M}_3.
The medians of the triangle are \vec{M}_1, \vec{M}_2, and \vec{M}_3. This image description should show up in the regular view, but disappear when printing.
Show that \vec{M}_{1} + \vec{M}_{2} + \vec{M}_{3} = 0.
Use .
To show that the point P exists (as the common intersection of the \vec{M}_{i}), show that
\vec{A} + \frac{2}{3} \vec{M}_{3} = \frac{2}{3} \vec{M}_{2} = .
If you have time, try to devise a vector proof of Euclid's result presented at the beginning of the workshop. Recall that a parallelogram is a four-sided polygon whose opposite sides are parallel.
Wrap-up
It's possible to do interesting things with vector arithmetic in a coordinate-free way: we didn't specify an origin, or any entries of any vectors in the examples.
A Geometric Prelude (with authored pages)
Practice visualizing vector addition
Use vectors without explicit coordinates
This two-page worksheet was generously donated to the sample article by Dave Rosoff at a CuratedCourses workshop in August2018. It has the default (skinny) margins.
It was known to Euclid, and probably earlier, that the midpoints of the sides of any quadrilateral all lie in the same plane (even if the vertices of the quadrilateral do not). In fact, these midpoints are the vertices of a parallelogram, as pictured in .
The midpoints of the sides of a quadrilateral are the vertices of a parallelogram.
In this exercise, we'll use vectors to show that the medians of any triangle () intersect at a point. Recall that medians are the lines connecting the vertices of the triangle to the midpoints of their opposite edges, as in the figure. We'll do this in a few steps.
What is the value of \vec{A} + \vec{B} + \vec{C}?
from the previous page is reproduced for your convenience.
The medians of the triangle are \vec{M}_1, \vec{M}_2, and \vec{M}_3.
Show that \vec{M}_{1} + \vec{M}_{2} + \vec{M}_{3} = 0.
Use .
To show that the point P exists (as the common intersection of the \vec{M}_{i}), show that
\vec{A} + \frac{2}{3} \vec{M}_{3} = \frac{2}{3} \vec{M}_{2} = .
If you have time, try to devise a vector proof of Euclid's result presented at the beginning of the workshop. Recall that a parallelogram is a four-sided polygon whose opposite sides are parallel.
Wrap-up
It's possible to do interesting things with vector arithmetic in a coordinate-free way: we didn't specify an origin, or any entries of any vectors in the examples.
Networks Worksheet (no authored pages)Basic laws for electrical circuits
This two-page worksheet was generously donated to the sample article by Virgil Pierce at a CuratedCourses workshop in August2018. It has default (skinny) left and right margins, but we have specified longer top and bottom margins, with the top being the larger of the two.
Ohms Law
The current through a resistor is proportional to the ratio of the Voltage to the Resistance I = \frac{V}{R}
Or for our purposes
I R = V
Kirchoffs Current Law
The sum of the currents in a network meeting at a point is zero.
\sum_{k=1}^n I_k = 0
The sum of the voltages around any closed circuit (or subcircuit) is zero.
\sum_{k=1}^n V_k = 0
Kirchoffs Current Law and Kirkoffs Voltage Law combined with Ohms Law gives for any circuit of resistors and sources a linear system that may (or may not) determine the currents.
For the simple network pictured, calculuate the amperage in each part of the network by setting up a system of linear equations for the amperages.
Compare it with a parallel circuit network. Calculate the amperage in each part of the network by setting up a system of linear equations for the amperages.
Now generalize these ideas to a context outside of electrical circuits. Consider the network of streets given in the diagram (with one-way directions as indicated).
A traffic engineer counts the hourly flow of cars into and out of this network at the entrances. They get (EB = East Bound; WB = West Bound):
Estimated hourly traffic flow for the road network
EB Winooski
WB Winooski
Shelburne St
Willow
Jay
into
50
400
0
10
50
out of
55
390
20
15
30
Use a variable for each segment inside of the network and set up a system of linear equations restricting the flow. Solve the system. Note that you should not get a unique solution as traffic should be able to flow through the network in various ways.
Networks Worksheet (with authored pages)Basic laws for electrical circuits
This two-page worksheet was generously donated to the sample article by Virgil Pierce at a CuratedCourses workshop in August2018. It has default (skinny) left and right margins, but we have specified longer top and bottom margins, with the top being the larger of the two.
Ohms Law
The current through a resistor is proportional to the ratio of the Voltage to the Resistance I = \frac{V}{R}
Or for our purposes
I R = V
Kirchoffs Current Law
The sum of the currents in a network meeting at a point is zero.
\sum_{k=1}^n I_k = 0
The sum of the voltages around any closed circuit (or subcircuit) is zero.
\sum_{k=1}^n V_k = 0
Kirchoffs Current Law and Kirkoffs Voltage Law combined with Ohms Law gives for any circuit of resistors and sources a linear system that may (or may not) determine the currents.
For the simple network pictured, calculuate the amperage in each part of the network by setting up a system of linear equations for the amperages.
Compare it with a parallel circuit network. Calculate the amperage in each part of the network by setting up a system of linear equations for the amperages.
Now generalize these ideas to a context outside of electrical circuits. Consider the network of streets given in the diagram (with one-way directions as indicated).
A traffic engineer counts the hourly flow of cars into and out of this network at the entrances. They get (EB = East Bound; WB = West Bound):
Estimated hourly traffic flow for the road network
EB Winooski
WB Winooski
Shelburne St
Willow
Jay
into
50
400
0
10
50
out of
55
390
20
15
30
Use a variable for each segment inside of the network and set up a system of linear equations restricting the flow. Solve the system. Note that you should not get a unique solution as traffic should be able to flow through the network in various ways.
This is a mock one-page worksheet for testing purposes. We have specified an overall margin just slightly less than the default.
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra.
Integer sagittis dictum turpis vel aliquet. Fusce ut suscipit dolor, nec tristique nisl. Aenean luctus, leo et ornare fermentum, nibh dui vulputate leo, nec tincidunt augue ipsum sed odio. Nunc non erat sollicitudin, iaculis eros consequat, dapibus eros.
This is a hint. You can hide it in the print preview before printing.
Here is an answer. Also hidable.
This is a rather long solution. When you hide or show it in the print preview, the workspace should be adjusted (the page will reload).
Integer sagittis dictum turpis vel aliquet. Fusce ut suscipit dolor, nec tristique nisl. Aenean luctus, leo et ornare fermentum, nibh dui vulputate leo, nec tincidunt augue ipsum sed odio. Nunc non erat sollicitudin, iaculis eros consequat, dapibus eros.
A two-line paragraph interspersed to check on spacing, breaks and all that.
A full-width exercise
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra.
Integer sagittis dictum turpis vel aliquet. Fusce ut suscipit dolor, nec tristique nisl. Aenean luctus, leo et ornare fermentum, nibh dui vulputate leo, nec tincidunt augue ipsum sed odio. Nunc non erat sollicitudin, iaculis eros consequat, dapibus eros.
Another two-line paragraph interspersed to check on spacing, breaks and all that.
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra.
Integer sagittis dictum turpis vel aliquet. Fusce ut suscipit dolor, nec tristique nisl. Aenean luctus, leo et ornare fermentum, nibh dui vulputate leo, nec tincidunt augue ipsum sed odio. Nunc non erat sollicitudin, iaculis eros consequat, dapibus eros.
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra.
A Mock Activity
The problem, as we see it.
A worksheet could have hints, no? But no spacing. Note row below has widths set to balance the heights.
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra.
Integer sagittis dictum turpis vel aliquet. Fusce ut suscipit dolor, nec tristique nisl. Aenean luctus, leo et ornare fermentum, nibh dui vulputate leo, nec tincidunt augue ipsum sed odio. Nunc non erat sollicitudin, iaculis eros consequat, dapibus eros.
Praesent rutrum scelerisque felis sit amet adipiscing. Phasellus in mollis velit. Nunc malesuada felis sit amet massa cursus, eget elementum neque viverra.
Dot products and projection
Let
{\vec v}_1 = (-4,1),
{\vec v}_2 = (2,2),
{\vec v}_3 = (1,2,3),
{\vec v}_4 = (-2,1,0).
Find the values of the following expressions:
{\vec v}_1 \cdot {\vec v}_2 =
{\vec v}_3 \cdot {\vec v}_4 =
\lVert{\vec v}_1\rVert =
\lVert{\vec v}_4\rVert =
Are any of these vectors perpendicular to each other?
The vectors \vec a = (3,9) and \vec b = (4,2) are pictured below. Derive the formula for projection on a line and use it to find the projection of \vec a on the line spanned by \vec u. Also compute the length of the residual vector.
xy\vec a\vec btwo vectors in a Cartesian plane
Two vectors \vec a and \vec b.
Consider the vector equation
m \begin{bmatrix}2 \\ 5\end{bmatrix} = \begin{bmatrix}3 \\ 7\end{bmatrix}
.
Check that there is no solution m that makes the equation true.
Use projection to find the best approximation \hat m.
Compute \hat m \begin{bmatrix}2 \\ 5\end{bmatrix} .
Compute the residual vector.
Compute the length of the residual vector and explain what it means.
Consider the system of equations
3t \amp =5 2t \amp = 9 .
Write the system in vector form.
Find the best estimate, \hat t, of t using projection.
Compute the length of the residual vector.
Just a simple activity here.
Here is a second activity.
This is going to be an activity with tasks.
Here is the first task.
Here is the second task.
Here is the third task.
This is a conclusion that comes after the last task.
This is a mock worksheet for testing the use of workspace for exercise within an exercisegroup.
Do things to the following.
Apple
Banana
Cherry
Durian
Elderberry (with workspace override)
Fig
Guava
Habanero
I can't think of an I fruit.
Jackfruit
Now with one column, do things to the following.
Apple
Banana
Cherry
Durian
Elderberry (with workspace override)
Fig
Guava
Habanero
I can't think of an I fruit.
Jackfruit
Worksheet with an exercise with tasks and subtasks
Page breaking between tasks in a single exercise can be tricky. This is a test for that.
Here are multiple tasks with just enough workspace to cause a page break after the third one.
This task has two short subtasks that should be indented under it.
The first subtask.
The second subtask.
Conclusion for the first task.
The second task.
The third task.
The fourth task.
Conclusion for the entire exercise.
An exercise without any tasks but some workspace.
Worksheet with paragraphs
This is a test of the paragraphs element within a worksheet. It should be able to contain exercises that have workspace, and we should be able to insert page breaks even inside of paragraphs.
Warm up
This is a warm-up exercise. It should have a small workspace and be on the first page of the worksheet.
More exercises
This is a second exercise. It should have a larger workspace and be on the second page of the worksheet.
This is a third exercise with some tasks. The workspace should be such that there will be a page break between tasks.
Do the first thing.
Do the second thing.
Do the third thing.
A third division
This is a paragraph that starts the third paragraphs division.
This is an exercise in the third paragraphs division inside a side-by-side.
This is a second exercise in the third paragraphs division. It should have a larger workspace and be on the fourth page of the worksheet.
This is a third exercise in the third paragraphs division. It should have a larger workspace and be on the fifth page of the worksheet.
HandoutsAbout Handouts
Like worksheets, a handout is a division that is inteded to be printed for use in a classroom.
In HTML output, you get the same print preview and page layout as you do with worksheets; in PDF, these will start on a new page with possibly different margins than the rest of the document.
Unlike worksheets, handouts do not have a special class of exercises or activities (exercises in a handout are treated like an inline exercise).
The other main distinction is that a handout lets workspace be specified on pretty much any block or paragraph element, not just exercises, tasks, and project-like elements. This allows them to be used in the creation of guided notes containing some premade content with lots of space for students to fill in details during class.
Derivative RulesRules for specific types of functions
Today we will explore how to take the derivative of the sum of two functions. For example, if f(x) = x^2 + 3x, what is f'(x)? What two functions is this the sum of? What are the derivatives of each of those functions?
To be sure of the derivative of the sum, we should use the definition of the derivative.
Definition of the Derivative
The derivative of a function f(x) at any point x is defined as...
Now let's apply this definition to the function f(x) = x^2 + 3x. We have:
What should the general rule be?
For any two differentiable functions f(x) and g(x), the derivative of their sum h(x) = f(x) + g(x) is given by:
Let f(x) and g(x) be differentiable functions and let h(x) = f(x) + g(x). Then by the limit definition of the derivative,
Find the derivative of f(x) = x^5 + e^x.
Find the derivative of f(x) = \sqrt{x} + x^3 + 7x.
Find the derivative of f(x) = 5x^4.
Worksheet Solution Testing
Solutions to projects and worksheets can both be selected independently for the auto-generated solutions divisions. What happens when a worksheet contains a project? Here we explore the various combinations.
This section of the sample article demonstrates an unstructured division. There are no subsection, you are just reading the first two paragraphs, followed by some nonsense text. Then there is a singleexercises division. Note that this division is not numbered (since it is unique within the section). And a cross-reference to one of the contained exercise will be numbered as a member of the section, .
If you use the unstructured form of a division, and have both inline and divisional exercises, there is a potential to form ambiguous cross-references. To wit, check that and are really different exercises (which you are unable to do if you are reading this in print!). The solution is to include the type of exercise in the reference, which will assist everybody, but especially your print readers: and .
Compare this section with the similar , next. The following text is mostly nonsense, just for testing purposes.
Inline One
Aliquam vitae risus placerat, pellentesque leo vitae, iaculis ante. Praesent ac odio eget mi bibendum eleifend ac eget metus. Morbi in dolor et diam accumsan mattis. Aenean elementum pulvinar efficitur. Etiam viverra ut tellus quis consequat. Phasellus sit amet nisl a ligula pharetra tempus id in elit. Maecenas congue quam eu purus fermentum pretium. Fusce pellentesque ultricies arcu, egestas sollicitudin erat condimentum non. Integer non velit at dolor dictum aliquam et rhoncus mauris. Sed nec nibh id nunc convallis tincidunt ut at ligula. Etiam elementum nisl eu erat dapibus rhoncus.
Pellentesque nec condimentum ligula, quis interdum mauris. Ut sed urna lacinia, aliquam arcu id, faucibus nisi. Suspendisse potenti. Curabitur in erat ultricies, condimentum mi nec, vehicula mauris. Duis faucibus risus fermentum velit hendrerit, non laoreet massa maximus. Donec bibendum elit ac lectus lobortis luctus. Ut finibus, dolor ut euismod tristique, ligula tortor tempus arcu, finibus semper purus erat ut ligula. Aenean accumsan ut ante vel euismod.
Inline Two
Ut porttitor neque a pharetra euismod. Vivamus ut metus pretium, placerat massa tempor, condimentum metus. Phasellus vestibulum iaculis turpis non posuere. Vestibulum quis aliquet neque. Donec nec metus iaculis, laoreet massa vitae, suscipit tellus. Etiam et ultrices quam, quis pretium ligula. In ut cursus metus. Aenean volutpat quam odio, quis tempus dolor egestas eget. Nunc fringilla lobortis nunc, ut interdum lorem posuere sed. Sed sodales risus a laoreet venenatis. Nunc sodales tempor mollis. Nam sollicitudin velit sed ex viverra feugiat. Nunc consectetur mi vitae urna sollicitudin malesuada. Fusce eget risus lectus. Mauris augue velit, vestibulum vitae tempus sit amet, porttitor eget turpis.
Major Result
Vivamus tortor tortor, lobortis et sem vel, accumsan placerat libero. Sed eget metus non magna accumsan efficitur a non turpis. Curabitur maximus arcu ipsum, eget vestibulum nulla mollis ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis vel eleifend risus. Morbi hendrerit tellus eget nibh imperdiet, ac mollis nisl sagittis. Ut commodo pharetra leo. Suspendisse consequat velit eget velit condimentum feugiat.
Inline Three
Suspendisse lacinia mattis risus, eget viverra urna dictum eu. Maecenas ut sem in turpis egestas varius nec at ipsum. Praesent bibendum nisi et turpis congue, a pellentesque felis tempor. Vivamus non dolor in risus interdum mattis. In tempus iaculis velit, sit amet rhoncus tellus aliquam convallis. Sed ut tellus id ipsum blandit convallis sed eget tortor. Nunc leo felis, scelerisque vel ante porta, volutpat rhoncus neque. Mauris convallis, felis at aliquam aliquet, felis ipsum semper mi, vitae auctor purus ante non erat. Ut nec felis mi.
Exercise CollectionDrill One
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras congue urna nulla. Aliquam eget euismod tellus. Maecenas nibh libero, venenatis a laoreet in, tempor sit amet sem. Morbi sit amet justo tempor velit auctor placerat. Maecenas nec lobortis orci. Aenean dictum enim lacus, ac blandit lacus elementum nec. Mauris porttitor neque volutpat tincidunt sollicitudin. Cras porta lectus ac facilisis tempor. Suspendisse in velit nisl. Sed convallis leo at nunc aliquet fermentum. Pellentesque feugiat at ex sed elementum. In porta vulputate ipsum sit amet consectetur.
A figure in an exercise in an unstructured division to test that it is numbered as if the containing exercises is not present
A side-by-side in a figure in an exercise in an unstructured division to test that it is numbered as if the containing exercises is not present and to test the numbering of the panels in a solutions manual
First Panel, subcaptioned
Second Panel, subcaptioned
First Panel, not subcaptioned
Second Panel, not subcaptioned
Drill Two
Aliquam sagittis ex at magna porttitor, quis scelerisque ligula malesuada. Vestibulum vitae mauris id nisi pretium ornare a id lectus. Nam suscipit magna id sem ultricies vestibulum. Nulla facilisi. Duis venenatis lectus massa, ac mollis nisi suscipit non. Sed et sapien vulputate, imperdiet nibh vel, lobortis nisl. Curabitur sagittis justo nibh. Nulla vulputate sodales justo at efficitur. Cras justo augue, mollis vitae nulla sed, vestibulum tincidunt ante. Vestibulum et lorem lectus. Maecenas accumsan lacus a nisi euismod rutrum eu dapibus justo. Etiam scelerisque a odio a euismod. Pellentesque vestibulum pellentesque nisi, a tempus erat cursus ac. Morbi ut auctor lectus.
Testing numbering, figure in a exercise in an un-numbered exercises
Drill Three
Nam congue ex nec justo iaculis maximus. Vestibulum lobortis magna sed urna auctor, vel dignissim massa posuere. In sed venenatis elit. Vivamus congue gravida tempus. Nunc quis fermentum nisi. Nullam hendrerit lorem et tellus semper, sit amet scelerisque purus lobortis. Quisque sollicitudin quis neque eu suscipit. Praesent volutpat justo quis magna vehicula molestie.
Challenging One
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras congue urna nulla. Aliquam eget euismod tellus. Maecenas nibh libero, venenatis a laoreet in, tempor sit amet sem. Morbi sit amet justo tempor velit auctor placerat. Maecenas nec lobortis orci. Aenean dictum enim lacus, ac blandit lacus elementum nec. Mauris porttitor neque volutpat tincidunt sollicitudin. Cras porta lectus ac facilisis tempor. Suspendisse in velit nisl. Sed convallis leo at nunc aliquet fermentum. Pellentesque feugiat at ex sed elementum. In porta vulputate ipsum sit amet consectetur.
An introduction to an exercisegroup. This is here to attempt to interrupt the flow of the counting from this division to the next.
Challenging Two
Aliquam sagittis ex at magna porttitor, quis scelerisque ligula malesuada. Vestibulum vitae mauris id nisi pretium ornare a id lectus. Nam suscipit magna id sem ultricies vestibulum. Nulla facilisi. Duis venenatis lectus massa, ac mollis nisi suscipit non. Sed et sapien vulputate, imperdiet nibh vel, lobortis nisl. Curabitur sagittis justo nibh.
Nulla vulputate sodales justo at efficitur. Cras justo augue, mollis vitae nulla sed, vestibulum tincidunt ante. Vestibulum et lorem lectus. Maecenas accumsan lacus a nisi euismod rutrum eu dapibus justo. Etiam scelerisque a odio a euismod. Pellentesque vestibulum pellentesque nisi, a tempus erat cursus ac. Morbi ut auctor lectus.
Challenging Three
Nam congue ex nec justo iaculis maximus. Vestibulum lobortis magna sed urna auctor, vel dignissim massa posuere. In sed venenatis elit. Vivamus congue gravida tempus. Nunc quis fermentum nisi. Nullam hendrerit lorem et tellus semper, sit amet scelerisque purus lobortis. Quisque sollicitudin quis neque eu suscipit. Praesent volutpat justo quis magna vehicula molestie.
Impossible One
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras congue urna nulla. Aliquam eget euismod tellus. Maecenas nibh libero, venenatis a laoreet in, tempor sit amet sem. Morbi sit amet justo tempor velit auctor placerat. Maecenas nec lobortis orci. Aenean dictum enim lacus, ac blandit lacus elementum nec. Mauris porttitor neque volutpat tincidunt sollicitudin. Cras porta lectus ac facilisis tempor. Suspendisse in velit nisl. Sed convallis leo at nunc aliquet fermentum. Pellentesque feugiat at ex sed elementum. In porta vulputate ipsum sit amet consectetur.
Impossible Two
Aliquam sagittis ex at magna porttitor, quis scelerisque ligula malesuada. Vestibulum vitae mauris id nisi pretium ornare a id lectus. Nam suscipit magna id sem ultricies vestibulum. Nulla facilisi. Duis venenatis lectus massa, ac mollis nisi suscipit non. Sed et sapien vulputate, imperdiet nibh vel, lobortis nisl. Curabitur sagittis justo nibh. Nulla vulputate sodales justo at efficitur. Cras justo augue, mollis vitae nulla sed, vestibulum tincidunt ante. Vestibulum et lorem lectus. Maecenas accumsan lacus a nisi euismod rutrum eu dapibus justo. Etiam scelerisque a odio a euismod. Pellentesque vestibulum pellentesque nisi, a tempus erat cursus ac. Morbi ut auctor lectus.
Impossible Three
Nam congue ex nec justo iaculis maximus. Vestibulum lobortis magna sed urna auctor, vel dignissim massa posuere. In sed venenatis elit. Vivamus congue gravida tempus. Nunc quis fermentum nisi. Nullam hendrerit lorem et tellus semper, sit amet scelerisque purus lobortis. Quisque sollicitudin quis neque eu suscipit. Praesent volutpat justo quis magna vehicula molestie.
More Reading
Left intentionally blank, just checking sectioning.
David C. Lay, Subspaces and Echelon Forms. The College Mathematics Journal, January 1993, 241, 5762.Exercise Section, Structured
A collection of exercises, in a top-level exercises division, structured with subexercises.
Easy ExercisesArithmetic
Compute 3+4.
7
Trigonometry
Compute \sin(\pi/4).
Hard ProblemsNumber Theory
Prove Fermat's Last Theorem.
Millenial
Find general solutions to the Navier-Stokes equation.
With an Exercise Group
This is an exercise group, and this is its introduction.
One
6-5
Subtract.
Two
1+1
Outside exercisegroup, inside subexercises
6+5
Exercises, Multiple Subsections
This section of the sample article demonstrates a structured division. You are reading the introduction to the division, then there is a faux subsection, followed by three exercises divisions. Note that the three are numbered as if they are also fellowsubsection. And a cross-reference to one of the contained exercise will be numbered use the number of the subsection, .
Compare this section with the similar , previous. The following text is mostly nonsense, just for testing purposes.
Faux SubsectionInline One
Aliquam vitae risus placerat, pellentesque leo vitae, iaculis ante. Praesent ac odio eget mi bibendum eleifend ac eget metus. Morbi in dolor et diam accumsan mattis. Aenean elementum pulvinar efficitur. Etiam viverra ut tellus quis consequat. Phasellus sit amet nisl a ligula pharetra tempus id in elit. Maecenas congue quam eu purus fermentum pretium. Fusce pellentesque ultricies arcu, egestas sollicitudin erat condimentum non. Integer non velit at dolor dictum aliquam et rhoncus mauris. Sed nec nibh id nunc convallis tincidunt ut at ligula. Etiam elementum nisl eu erat dapibus rhoncus.
Pellentesque nec condimentum ligula, quis interdum mauris. Ut sed urna lacinia, aliquam arcu id, faucibus nisi. Suspendisse potenti. Curabitur in erat ultricies, condimentum mi nec, vehicula mauris. Duis faucibus risus fermentum velit hendrerit, non laoreet massa maximus. Donec bibendum elit ac lectus lobortis luctus. Ut finibus, dolor ut euismod tristique, ligula tortor tempus arcu, finibus semper purus erat ut ligula. Aenean accumsan ut ante vel euismod.
Inline Two
Ut porttitor neque a pharetra euismod. Vivamus ut metus pretium, placerat massa tempor, condimentum metus. Phasellus vestibulum iaculis turpis non posuere. Vestibulum quis aliquet neque. Donec nec metus iaculis, laoreet massa vitae, suscipit tellus. Etiam et ultrices quam, quis pretium ligula. In ut cursus metus. Aenean volutpat quam odio, quis tempus dolor egestas eget. Nunc fringilla lobortis nunc, ut interdum lorem posuere sed. Sed sodales risus a laoreet venenatis. Nunc sodales tempor mollis. Nam sollicitudin velit sed ex viverra feugiat. Nunc consectetur mi vitae urna sollicitudin malesuada. Fusce eget risus lectus. Mauris augue velit, vestibulum vitae tempus sit amet, porttitor eget turpis.
Major Result
Vivamus tortor tortor, lobortis et sem vel, accumsan placerat libero. Sed eget metus non magna accumsan efficitur a non turpis. Curabitur maximus arcu ipsum, eget vestibulum nulla mollis ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis vel eleifend risus. Morbi hendrerit tellus eget nibh imperdiet, ac mollis nisl sagittis. Ut commodo pharetra leo. Suspendisse consequat velit eget velit condimentum feugiat.
Inline Three
Suspendisse lacinia mattis risus, eget viverra urna dictum eu. Maecenas ut sem in turpis egestas varius nec at ipsum. Praesent bibendum nisi et turpis congue, a pellentesque felis tempor. Vivamus non dolor in risus interdum mattis. In tempus iaculis velit, sit amet rhoncus tellus aliquam convallis. Sed ut tellus id ipsum blandit convallis sed eget tortor. Nunc leo felis, scelerisque vel ante porta, volutpat rhoncus neque. Mauris convallis, felis at aliquam aliquet, felis ipsum semper mi, vitae auctor purus ante non erat. Ut nec felis mi.
Drill ExercisesDrill One
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras congue urna nulla. Aliquam eget euismod tellus. Maecenas nibh libero, venenatis a laoreet in, tempor sit amet sem. Morbi sit amet justo tempor velit auctor placerat. Maecenas nec lobortis orci. Aenean dictum enim lacus, ac blandit lacus elementum nec. Mauris porttitor neque volutpat tincidunt sollicitudin. Cras porta lectus ac facilisis tempor. Suspendisse in velit nisl. Sed convallis leo at nunc aliquet fermentum. Pellentesque feugiat at ex sed elementum. In porta vulputate ipsum sit amet consectetur.
A figure in an exercise in a structured division to test that it is numbered with consideration of the containing exercises
Drill Two
Aliquam sagittis ex at magna porttitor, quis scelerisque ligula malesuada. Vestibulum vitae mauris id nisi pretium ornare a id lectus. Nam suscipit magna id sem ultricies vestibulum. Nulla facilisi. Duis venenatis lectus massa, ac mollis nisi suscipit non. Sed et sapien vulputate, imperdiet nibh vel, lobortis nisl. Curabitur sagittis justo nibh. Nulla vulputate sodales justo at efficitur. Cras justo augue, mollis vitae nulla sed, vestibulum tincidunt ante. Vestibulum et lorem lectus. Maecenas accumsan lacus a nisi euismod rutrum eu dapibus justo. Etiam scelerisque a odio a euismod. Pellentesque vestibulum pellentesque nisi, a tempus erat cursus ac. Morbi ut auctor lectus.
Drill Three
Nam congue ex nec justo iaculis maximus. Vestibulum lobortis magna sed urna auctor, vel dignissim massa posuere. In sed venenatis elit. Vivamus congue gravida tempus. Nunc quis fermentum nisi. Nullam hendrerit lorem et tellus semper, sit amet scelerisque purus lobortis. Quisque sollicitudin quis neque eu suscipit. Praesent volutpat justo quis magna vehicula molestie.
Challenging ExercisesChallenging One
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras congue urna nulla. Aliquam eget euismod tellus. Maecenas nibh libero, venenatis a laoreet in, tempor sit amet sem. Morbi sit amet justo tempor velit auctor placerat. Maecenas nec lobortis orci. Aenean dictum enim lacus, ac blandit lacus elementum nec. Mauris porttitor neque volutpat tincidunt sollicitudin. Cras porta lectus ac facilisis tempor. Suspendisse in velit nisl. Sed convallis leo at nunc aliquet fermentum. Pellentesque feugiat at ex sed elementum. In porta vulputate ipsum sit amet consectetur.
An introduction to an exercisegroup. This is here to attempt to interrupt the flow of the counting from this division to the next.
Challenging Two
Aliquam sagittis ex at magna porttitor, quis scelerisque ligula malesuada. Vestibulum vitae mauris id nisi pretium ornare a id lectus. Nam suscipit magna id sem ultricies vestibulum. Nulla facilisi. Duis venenatis lectus massa, ac mollis nisi suscipit non. Sed et sapien vulputate, imperdiet nibh vel, lobortis nisl. Curabitur sagittis justo nibh.
Nulla vulputate sodales justo at efficitur. Cras justo augue, mollis vitae nulla sed, vestibulum tincidunt ante. Vestibulum et lorem lectus. Maecenas accumsan lacus a nisi euismod rutrum eu dapibus justo. Etiam scelerisque a odio a euismod. Pellentesque vestibulum pellentesque nisi, a tempus erat cursus ac. Morbi ut auctor lectus.
Challenging Three
Nam congue ex nec justo iaculis maximus. Vestibulum lobortis magna sed urna auctor, vel dignissim massa posuere. In sed venenatis elit. Vivamus congue gravida tempus. Nunc quis fermentum nisi. Nullam hendrerit lorem et tellus semper, sit amet scelerisque purus lobortis. Quisque sollicitudin quis neque eu suscipit. Praesent volutpat justo quis magna vehicula molestie.
Impossible ExercisesImpossible One
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras congue urna nulla. Aliquam eget euismod tellus. Maecenas nibh libero, venenatis a laoreet in, tempor sit amet sem. Morbi sit amet justo tempor velit auctor placerat. Maecenas nec lobortis orci. Aenean dictum enim lacus, ac blandit lacus elementum nec. Mauris porttitor neque volutpat tincidunt sollicitudin. Cras porta lectus ac facilisis tempor. Suspendisse in velit nisl. Sed convallis leo at nunc aliquet fermentum. Pellentesque feugiat at ex sed elementum. In porta vulputate ipsum sit amet consectetur.
Impossible Two
Aliquam sagittis ex at magna porttitor, quis scelerisque ligula malesuada. Vestibulum vitae mauris id nisi pretium ornare a id lectus. Nam suscipit magna id sem ultricies vestibulum. Nulla facilisi. Duis venenatis lectus massa, ac mollis nisi suscipit non. Sed et sapien vulputate, imperdiet nibh vel, lobortis nisl. Curabitur sagittis justo nibh. Nulla vulputate sodales justo at efficitur. Cras justo augue, mollis vitae nulla sed, vestibulum tincidunt ante. Vestibulum et lorem lectus. Maecenas accumsan lacus a nisi euismod rutrum eu dapibus justo. Etiam scelerisque a odio a euismod. Pellentesque vestibulum pellentesque nisi, a tempus erat cursus ac. Morbi ut auctor lectus.
Impossible Three
Nam congue ex nec justo iaculis maximus. Vestibulum lobortis magna sed urna auctor, vel dignissim massa posuere. In sed venenatis elit. Vivamus congue gravida tempus. Nunc quis fermentum nisi. Nullam hendrerit lorem et tellus semper, sit amet scelerisque purus lobortis. Quisque sollicitudin quis neque eu suscipit. Praesent volutpat justo quis magna vehicula molestie.
Layout challenge
A multicolumn exercisegroup with layout challenges. The first two should be on one row. The next two should be on one row until the hint is opened. Then one that takes up an entire row. The final row should always have two exercises.
Left intentionally blank, just checking sectioning.
David C. Lay, Subspaces and Echelon Forms. The College Mathematics Journal, January 1993, 241, 5762.Exercises, Top-Level
This exercises of the sample article is a peer of all the preceding section and is the only such exercises. As such, it is not numbered, and contains only exercise, but for this introduction you are reading. The exercises contained within will be numbered in cross-references according to the enclosing division, in this case the entire article and so without any qualification, to wit, .
Drill One
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras congue urna nulla. Aliquam eget euismod tellus. Maecenas nibh libero, venenatis a laoreet in, tempor sit amet sem. Morbi sit amet justo tempor velit auctor placerat. Maecenas nec lobortis orci. Aenean dictum enim lacus, ac blandit lacus elementum nec. Mauris porttitor neque volutpat tincidunt sollicitudin. Cras porta lectus ac facilisis tempor. Suspendisse in velit nisl. Sed convallis leo at nunc aliquet fermentum. Pellentesque feugiat at ex sed elementum. In porta vulputate ipsum sit amet consectetur.
Drill Two
Aliquam sagittis ex at magna porttitor, quis scelerisque ligula malesuada. Vestibulum vitae mauris id nisi pretium ornare a id lectus. Nam suscipit magna id sem ultricies vestibulum. Nulla facilisi. Duis venenatis lectus massa, ac mollis nisi suscipit non. Sed et sapien vulputate, imperdiet nibh vel, lobortis nisl. Curabitur sagittis justo nibh. Nulla vulputate sodales justo at efficitur. Cras justo augue, mollis vitae nulla sed, vestibulum tincidunt ante. Vestibulum et lorem lectus. Maecenas accumsan lacus a nisi euismod rutrum eu dapibus justo. Etiam scelerisque a odio a euismod. Pellentesque vestibulum pellentesque nisi, a tempus erat cursus ac. Morbi ut auctor lectus.
Testing numbering in a exercises without a number
Drill Three
Nam congue ex nec justo iaculis maximus. Vestibulum lobortis magna sed urna auctor, vel dignissim massa posuere. In sed venenatis elit. Vivamus congue gravida tempus. Nunc quis fermentum nisi. Nullam hendrerit lorem et tellus semper, sit amet scelerisque purus lobortis. Quisque sollicitudin quis neque eu suscipit. Praesent volutpat justo quis magna vehicula molestie.
Challenging One
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras congue urna nulla. Aliquam eget euismod tellus. Maecenas nibh libero, venenatis a laoreet in, tempor sit amet sem. Morbi sit amet justo tempor velit auctor placerat. Maecenas nec lobortis orci. Aenean dictum enim lacus, ac blandit lacus elementum nec. Mauris porttitor neque volutpat tincidunt sollicitudin. Cras porta lectus ac facilisis tempor. Suspendisse in velit nisl. Sed convallis leo at nunc aliquet fermentum. Pellentesque feugiat at ex sed elementum. In porta vulputate ipsum sit amet consectetur.
An introduction to an exercisegroup. This is here to attempt to interrupt the flow of the counting from this division to the next.
Challenging Two
Aliquam sagittis ex at magna porttitor, quis scelerisque ligula malesuada. Vestibulum vitae mauris id nisi pretium ornare a id lectus. Nam suscipit magna id sem ultricies vestibulum. Nulla facilisi. Duis venenatis lectus massa, ac mollis nisi suscipit non. Sed et sapien vulputate, imperdiet nibh vel, lobortis nisl. Curabitur sagittis justo nibh.
Nulla vulputate sodales justo at efficitur. Cras justo augue, mollis vitae nulla sed, vestibulum tincidunt ante. Vestibulum et lorem lectus. Maecenas accumsan lacus a nisi euismod rutrum eu dapibus justo. Etiam scelerisque a odio a euismod. Pellentesque vestibulum pellentesque nisi, a tempus erat cursus ac. Morbi ut auctor lectus.
Challenging Three
Nam congue ex nec justo iaculis maximus. Vestibulum lobortis magna sed urna auctor, vel dignissim massa posuere. In sed venenatis elit. Vivamus congue gravida tempus. Nunc quis fermentum nisi. Nullam hendrerit lorem et tellus semper, sit amet scelerisque purus lobortis. Quisque sollicitudin quis neque eu suscipit. Praesent volutpat justo quis magna vehicula molestie.
Impossible One
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras congue urna nulla. Aliquam eget euismod tellus. Maecenas nibh libero, venenatis a laoreet in, tempor sit amet sem. Morbi sit amet justo tempor velit auctor placerat. Maecenas nec lobortis orci. Aenean dictum enim lacus, ac blandit lacus elementum nec. Mauris porttitor neque volutpat tincidunt sollicitudin. Cras porta lectus ac facilisis tempor. Suspendisse in velit nisl. Sed convallis leo at nunc aliquet fermentum. Pellentesque feugiat at ex sed elementum. In porta vulputate ipsum sit amet consectetur.
Impossible Two
Aliquam sagittis ex at magna porttitor, quis scelerisque ligula malesuada. Vestibulum vitae mauris id nisi pretium ornare a id lectus. Nam suscipit magna id sem ultricies vestibulum. Nulla facilisi. Duis venenatis lectus massa, ac mollis nisi suscipit non. Sed et sapien vulputate, imperdiet nibh vel, lobortis nisl. Curabitur sagittis justo nibh. Nulla vulputate sodales justo at efficitur. Cras justo augue, mollis vitae nulla sed, vestibulum tincidunt ante. Vestibulum et lorem lectus. Maecenas accumsan lacus a nisi euismod rutrum eu dapibus justo. Etiam scelerisque a odio a euismod. Pellentesque vestibulum pellentesque nisi, a tempus erat cursus ac. Morbi ut auctor lectus.
Impossible Three
Nam congue ex nec justo iaculis maximus. Vestibulum lobortis magna sed urna auctor, vel dignissim massa posuere. In sed venenatis elit. Vivamus congue gravida tempus. Nunc quis fermentum nisi. Nullam hendrerit lorem et tellus semper, sit amet scelerisque purus lobortis. Quisque sollicitudin quis neque eu suscipit. Praesent volutpat justo quis magna vehicula molestie.
An Exercise in a Section
Exercises can appear in a section of their own. You need to give the section a title, even if it seems obvious what to call it. Individual exercises may have titles, as you choose. Problem: How should we hide solutions?
Maybe a global switch should be used to suppress solutions, while a separate processing regime could use them as part of a solutions manual.
An Exercise with a Hard-Coded Problem Number
Compute the definite integral \definiteintegral{2}{4}{x^2}{x}, not as an approximate value from a Riemann sum, but as an exact value based of the limit by using the Fundamental Theorem.
An antiderivative of x^2 is F(x)=x^3/3, so by the FTC,\definiteintegral{2}{4}{x^2}{x}=F(4)-F(2)=\frac{1}{3}\left(4^3-2^3\right)=\frac{56}{3}!?! This is indeed an exciting result, but we are mostly interested in seeing that the sentence-ending punctuation is absorbed properly into the displayed equation.
And sentence-ending punctuation is also placed carefully when display math finishes with a cases environment. To wit, the absolute value can be defined by
|x| = \begin{cases}
x \amp \text{if } x \ge 0 \\
-x \amp \text{if } x \lt 0
\end{cases}
.
Can you prove Corollary directly? If not consider that a problem could have several parts, which should be formatted as a second-level list, since the problems normally get numbered at the top level.
Why is this result a Corollary?
Could you interchange the Theorem and Corollary?
MVT
Consider the definite integral as an area function and employ the Mean Value Theorem.
Motivator
Think harder!
Helpful
It follows easily.
Yes.
We could prove either result first, then obtain the other as an easy consequence.
ReferenceNotation
This is some notation introduced in the article. allows the notation list generator anywhere, so we have this paragraph to test spacing above and below the table. We'll say that again.
This is some notation introduced in the article. allows the notation list generator anywhere, so we have this paragraph to test spacing above and below the table. We'll say that again.
This is some notation introduced in the article. allows the notation list generator anywhere, so we have this paragraph to test spacing above and below the table. We'll say that again.
This is some notation introduced in the article. allows the notation list generator anywhere, so we have this paragraph to test spacing above and below the table. We'll say that again.
Solutions to Selected Exercisessolutionsas an appendix
This is an introduction, where you might explain that this division of the back matter contains various hints, answers, solutions of inline exercises, divisional exercises, project-like blocks, worksheet exercises, and/or reading questions. See the source to see just how this solutions division was built.
And a conclusion to this solutions division, which may not be readily apparent as distinct from the final division's worth of solutions, but since it is not prefixed with a number, it may be different enough.
Solutions to a Single Exercises Divisionsolutionsfor one group of exercises
Sometimes you may want the solutions to exercises within a single exercises division (or similar, like a worksheet). Default behavior in this situation can produce two titles, when just one would be sufficient. Here we have used the scope attribute to point to a specific exercises, and provided a (single) very specific title.
All Solutions that are Answerssolutionsall answers
The back matter solutions appendix requests every answer, and only answer, of all types of exercises: inline, divisional, worksheet, reading questions, and projects. Now, as observed by Bruce Yoshiwara, it gets a bit tedious to see the Answer heading over and over in print, when every entry has that heading. So we squelch it for you in print/PDF output. (For HTML output we use knowls and need to have something to click on. But perhaps for EPUB we should be more careful?) Note that you might want to use a title, or an introduction, that explains which component of the exercises is being displayed, so there is no confusion.
All Solutions that are Answers to Odd Exercisessolutionsall even answers
This should be identical to the previous collection of answers, except only exercises with an even number are reported (via the admit attribute).
List of Results
We had an automatic list of theorems for just one section, back in . Here we expand to include corollary in our space-delimited list of elements and we request divisions (headings) at each subsection and section. The default scope is the entire document, which is appropriate here in the backmatter. There are many subsections with no results, so we set the empty attribute to no to suppress them, though this is the default behavior (yes being the other option to see divisions with no list items). These lists are most valuable if you are in the practice of giving items titles.
Lists of Exercises
Since exercise come in several flavors, we use pseudo-elements to specify the distinct types. There are not many reading questionsbut here is a list of all of them, by section, using a readingquestion pseudo-element.
And now a list of all the inline exercises, and including the title of every section, even if there is no inline exercise contained inside it. The pseudo-element is inlineexercise.
A Structured Appendix
A deeply-structured appendix for testing purposes.
A Subsection in an Appendix
Inside a subsection.
A Subsubsection in a Subsection in an Appendix
Nearly terminal.
Paragraphs in a Subsubsection in a Subsection in an Appendix
The paragraphs element can go in any division, but does not get a number.
Index
There is an index manufactured at the end of the back matter. So we are talking about it here, rather than within the index, which is an impossibility. It contains some sample entries, and is not meant to be comprehensive. Look at the source of this XML file, searching on idx, to see how they are written. They may be placed inside of a a variety of structures, and their location greatly influences the cross-references produced in the HTML version of the index.
The version of the index is more traditional, using page numbers to reference locations. A newer package is used to create the index, and so there is no extra intermediate step required to process the index. The one downside of this convenience is that index entries may not be placed in the back colophon (which is the only subdivision that may follow the index).
There is an index entry about multicolumn lists which spans more than one page. This requires doubly-linked index entries, the first has the index content and points to the xml:id of the second. The second is an empty element, but points back to the xml:id of the first entry. So each has a marker and a reference, which allows the span of the index topic to cut across XML boundaries in the source. This is the mechanism to produce a page range in the index. See the source of this article for syntax details.
Bully Pulpit: Index Headings
Professionals do not capitalize the headings (entries) of an index, unless it is a proper noun (name, place, ). We do not provide any enforcement of this advice, nor any assistance. It is your responsibility to provide quality source material in this regard.
Note
Most all of the index entries below to page 2 (PDF output) are just from a suite of non-sensical tests. These are harder to recognize in the HTML output.
glossary
A glossary may have a headnote, perhaps with some explanation. This glossary is placed in the back matter. Placement as a specialized division is another option, see .
You might want to have lists of references, in the back, but with multiple such lists. Make an appendix to hold them, give it some structure (for an article, a leading subsection, such as the one you are reading right now), then follow with multiple references divisions. A typical citation will then look like: .
2025-05-23: currently testing citations to CSL-style references in the back matter. These should go eventually somewhere besides right where the references are.
Judson:
Lay:
Doe:
Doe, later:
Conrey/Farmer:
D'Arcus:
Two, authored in-order:
Two, authored out-of-order:
Three, authored reverse-order:
General ReferencesGilbert Strang, The Fundamental Theorem of Linear Algebra, The American Mathematical Monthly November 1993, 1009, 848855.Specialized ReferencesTom Judson, Abstract Algebra: Theory and Applications.
Another online, open-source offering.
Gilbert Strang, The Fundamental Theorem of Linear Algebra, The American Mathematical Monthly November 1993, 1009, 848855.ReferencesThomasJudsonAbstract Algebra: Theory and ApplicationsDavid C.LaySubspaces and Echelon FormsThe College Mathematics Journal24157-62DoeJohnStill Anonymous, But now IbidDoeJohnHis Anonymous LifeConreyJ. B.FarmerD. W.Mean values of L-functions and symmetryInternat. Math. Res. Notices17883-908D'ArcusBrucefalseBoundaries of Dissent: Protest and State Power in the Media AgeRoutledgeNew Yorkhttp://www.test01.comIndex
This article was authored in, and produced with, . It is typeset with the Latin Modern font.
================================================
FILE: examples/sample-book/README.md
================================================
# PreTeXt Sample Book
This sample book began as a subset of Tom Judson's
_Abstract Algebra: Theory and Applications_ textbook.
Superfluous material has been added to demonstrate and
test various aspects of a book-length project. So
this should not be taken as representative of the
real version of Judson's book.
It is meant to illustrate
- how to structure the "extra" components of a book,
such as the preface, appendices, index, and so on.
- how to modularize a large project across multiple files
- how Runestone's chapter/subchapter model maps onto a
PreTeXt `book` with `chapter` and `section`
- as an example for Runestone, many Runestone features
are tested in a new chapter devoted to these features.
The Sample Book comes in several flavors:
* Wihout any parts, use `sample-book.xml` as the source
with the "no-parts" publication file.
* With parts, use `sample-book-parts.xml` as the source
with the "decorative" or "structural" publication files.
* As a solution manual, use `sample-book-solutions-manual.xsl`
as the source, with the "solution-manual" publication file.
Other than changes in organization, the only difference in content
comes in the front matter, where the Preface has cross-references
to items in parts, or no such cross-references.
================================================
FILE: examples/sample-book/appendix-two.xml
================================================
Second Appendix
This is a nonsense appendix, to check that numbering (lettering) proceeds correctly.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam finibus lacus at molestie tristique. Vivamus in feugiat nibh, ut condimentum nibh. Praesent pretium est ante, et sagittis nisi tempor sed. Aenean eu odio nunc. Suspendisse dolor sem, feugiat nec ullamcorper in, cursus eu lectus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla at diam ac ex efficitur sagittis vitae sit amet est. Suspendisse fermentum orci at justo feugiat, a molestie mi consectetur. Proin volutpat eleifend accumsan. Ut sit amet dolor leo. Morbi tempus tortor at gravida rutrum. Morbi ultricies pharetra lobortis. Cras mollis, massa nec convallis luctus, erat magna finibus lectus, non venenatis massa magna quis lectus. In eu mollis odio. In hac habitasse platea dictumst. Nulla elementum urna ut felis rhoncus fermentum.
Nullam vitae velit vel ligula ultricies dapibus sit amet et sapien. Sed consequat, purus vitae dictum viverra, nunc dui molestie purus, quis luctus ipsum turpis sit amet justo. Aenean faucibus leo eget risus blandit, posuere semper felis placerat. Donec bibendum fringilla pellentesque. Nam vehicula risus placerat arcu scelerisque lacinia. Suspendisse vitae neque in ipsum rhoncus dignissim eu id magna. Phasellus vel eros est.
Integer congue quam eget augue fermentum porttitor. Aliquam erat volutpat. Nunc tempus mi leo, non vehicula sapien mollis in. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris lorem arcu, pretium ut convallis at, malesuada non libero. Curabitur ac eros efficitur eros ullamcorper facilisis. Morbi tellus erat, aliquet in metus et, posuere facilisis metus. Duis nulla augue, dictum nec pharetra blandit, elementum et mauris. Nunc vestibulum vestibulum blandit.
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum at mattis nisl. Nunc sit amet libero vel neque consectetur interdum a eu purus. Mauris lacus eros, vulputate ut erat ac, viverra tristique lectus. Proin sed pellentesque neque. Proin bibendum lorem quis volutpat porttitor. Aenean a est orci. Morbi imperdiet et nisl quis ultrices. Maecenas at tellus quis magna accumsan semper id posuere quam. Quisque eu orci sit amet mauris aliquam mattis vitae sed mi. Etiam nec justo semper, malesuada justo sed, convallis lorem. Mauris consequat sit amet dui at hendrerit. Praesent quis arcu felis.
Aliquam pellentesque pellentesque lacus, in gravida magna ullamcorper et. Maecenas vitae nisl lectus. Mauris sed erat ipsum. Aliquam vestibulum vel sem nec ultricies. Donec mattis egestas sodales. Sed quis pulvinar orci. Nam ultrices finibus augue, id convallis eros consequat id. Quisque elementum hendrerit ex, vitae tristique purus convallis sed. Nullam ut eros at magna pretium cursus. Mauris iaculis pulvinar dolor, in lacinia nisl molestie in. Donec molestie hendrerit elit ac sagittis. Nullam id luctus ligula. Sed bibendum nibh non dapibus feugiat. Mauris elit sapien, maximus tempus turpis at, luctus accumsan velit. Etiam id libero vel ante aliquet elementum. Morbi efficitur mauris sed nunc egestas egestas.
Cras pellentesque nunc ligula, at accumsan lacus sodales eget. Donec a pulvinar sem. Sed sollicitudin pretium tortor. Proin eget nibh mauris. Nam non justo sodales, hendrerit velit vitae, tincidunt nisl. Suspendisse in eros non ligula aliquam fringilla. Ut a dignissim erat. Quisque iaculis justo nisi, eget vehicula elit condimentum tincidunt. Duis scelerisque tincidunt tincidunt. In mollis nibh ut nisl malesuada feugiat. Vestibulum nisl nisi, consectetur et purus vel, mattis pharetra nunc.
Sed pretium lorem et felis mollis laoreet. Donec laoreet lorem sed urna fringilla, eget ullamcorper massa finibus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas suscipit nibh iaculis nibh lacinia ultrices. Aenean eget laoreet odio. Vivamus nec euismod libero, at vestibulum dui. Aliquam sodales pretium mauris varius venenatis. Nam sit amet porta lacus, eget tempus ante. Suspendisse potenti. Nunc dignissim suscipit urna, ut fringilla urna bibendum sed. Donec eget placerat sem. Curabitur ut augue sodales, aliquet ex a, aliquet ex. Maecenas sagittis convallis justo, sed pellentesque elit tempus sed. Pellentesque a scelerisque erat. Vestibulum suscipit rhoncus sem, nec fermentum ante consectetur ut.
Pellentesque ac diam mi. Suspendisse vitae semper sapien, vel iaculis ipsum. Suspendisse interdum pretium eros in venenatis. In nec est in nunc accumsan condimentum. Sed vulputate ultricies ipsum, sit amet tincidunt nisi. Vivamus aliquet interdum lacus, vel porttitor erat sollicitudin id. Donec eu tortor aliquam, vehicula lorem vel, condimentum nulla. Cras pellentesque congue est eget iaculis. Morbi ut mauris tristique risus fermentum ultrices quis sed magna. Etiam faucibus nisi dui, a bibendum ante sagittis vitae. Suspendisse nunc turpis, posuere eu sodales et, condimentum eu diam. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce tempus eget turpis vitae pulvinar. Aenean magna augue, sodales non tempor ut, lobortis auctor nunc. Nunc gravida lectus vel sapien hendrerit feugiat. Duis et nibh pellentesque, auctor nunc id, suscipit purus.
Nullam bibendum enim justo, sit amet dictum justo ullamcorper quis. Curabitur vitae molestie metus. Proin convallis, lorem nec ullamcorper ullamcorper, ante libero hendrerit nunc, et sollicitudin ante nisi varius massa. Pellentesque accumsan dolor vel porta vestibulum. Suspendisse in lacus suscipit, fringilla dui vitae, fermentum leo. Sed ultricies maximus lectus quis suscipit. Sed dignissim interdum ipsum sed ullamcorper. Suspendisse fringilla eleifend est at lobortis.
================================================
FILE: examples/sample-book/backmatter.xml
================================================
Back MatterNotation
The following table defines the notation used in this book. Page numbers or references refer to the first appearance of each symbol.
Hints and Answers to Selected Odd ExercisesHints and Answers to Selected Even ExercisesHints and Answers to Selected ExercisesA Structured Appendix
A deeply-structured appendix for testing purposes.
A Section in an Appendix
Inside a section.
A Subsection in a Section in an Appendix
Inside a subsection.
A Subsubsection in a Subsection in a Section in an Appendix
Nearly terminal.
Paragraphs in a Subsubsection in a Subsection in a Section in an Appendix
The paragraphs element can go in any division, but does not get a number.
Numbering in the Back Matter
Numbered blocks in an appendix in the backmatter of a book with part were once getting an extra level in HTML output. With standard defaults, the number of the following example should have two periods as separators, just like an example in the main matter when the part number is not included.
An Example Example
What's my number?
Some Runestone Elements
These elements should end up in the Runestone manifest.
Ipsum lorem...
print("Hello from the appendix!")
This book was authored in MathBook XML.
================================================
FILE: examples/sample-book/bookinfo.xml
================================================
This is a book written in PreTeXt, in order to provide testing for a variety of purposes, not least a conversion to Runestone Academy.PTXSBSB
\newcommand{\identity}{\mathrm{id}}
\newcommand{\notdivide}{{\not{\mid}}}
\newcommand{\notsubset}{\not\subset}
\newcommand{\lcm}{\operatorname{lcm}}
\newcommand{\gf}{\operatorname{GF}}
\newcommand{\inn}{\operatorname{Inn}}
\newcommand{\aut}{\operatorname{Aut}}
\newcommand{\Hom}{\operatorname{Hom}}
\newcommand{\cis}{\operatorname{cis}}
\newcommand{\chr}{\operatorname{char}}
\newcommand{\Null}{\operatorname{Null}}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\usetikzlibrary{arrows,matrix}
\usetikzlibrary{snakes}
================================================
FILE: examples/sample-book/code/symmetric-group-8.sage
================================================
S8 = SymmetricGroup(8)
a = S8.random_element()
[a(x) for x in S8.domain()] # random
================================================
FILE: examples/sample-book/codechat_config.yaml
================================================
# .. Copyright (C) 2012-2020 Bryan A. Jones.
#
# This file is part of the CodeChat System.
#
# The CodeChat System is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# The CodeChat System is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the CodeChat System. If not, see
# .
#
# ************************************************
# |docname| - Configuration for a CodeChat project
# ************************************************
# This file defines the configuration for a CodeChat project. It contains a working `Sphinx `_ configuration.
#
# ``source_path``: optional; defaults to ``.`` (the current directory). A path to the root of the source tree. Relative paths are rooted in the directory containing this configuration file.
#source_path: .
# ``output_path``: required. A path to the root of the HTML output produced by this renderer. Relative paths are rooted in the directory containing this configuration file.
output_path: _build
# ``args``: required string or sequence of strings. This provides the arguments to invoke the renderer. These strings may optionally contain the following replacement values:
#
# - ``{project_path}``: an absolute path to the directory containing this file.
# - ``{source_path}``: the ``source_path`` above, but as an absolute path.
# - ``{output_path}``: the ``output_path`` above, but as an absolute path.
#
# The line below could also be written ``args: sphinx-build . _build``.
args: c:/Users/bjones/documents/git/CodeChat_System/.venv/Scripts/python ../../pretext/pretext --component all --format html --directory {output_path} sample-book.xml
# ``html_ext``: optional; defaults to ``.html``. The extension used by this renderer when generating HTML files.
#html_ext: .html
# ``project_type``: optional; defaults to ``general``. Define the project type, which enables special processing based on the type. Valid values are ``general`` (no special processing), ``Doxygen``, and ``PreTeXt``.
project_type: PreTeXt
================================================
FILE: examples/sample-book/cyclic.xml
================================================
Cyclic GroupsCyclicity
The groups \mathbb Z and {\mathbb Z}_n, which are among the most familiar and easily understood groups, are both examples of what are called cyclic groups. In this chapter we will study the properties of cyclic groups and cyclic subgroups, which play a fundamental part in the classification of all abelian groups.
Cyclic groups
Often a subgroup will depend entirely on a single element of the group; that is, knowing that particular element will allow us to compute any other element in the subgroup.
An Infinite Cyclic Subgroup, Modular Addition
Suppose that we consider 3 \in {\mathbb Z} and look at all multiples (both positive and negative) of 3. As a set, this is 3 {\mathbb Z} = \{ \ldots, -3, 0, 3, 6, \ldots \}. It is easy to see that 3 {\mathbb Z} is a subgroup of the integers. This subgroup is completely determined by the element 3 since we can obtain all of the other elements of the group by taking multiples of 3. Every element in the subgroup is generated by 3.
An Infinite Cyclic Subgroup, Multiplication of Rational Numbers
If H = \{ 2^n : n \in {\mathbb Z} \}, then H is a subgroup of the multiplicative group of nonzero rational numbers, {\mathbb Q}^*. If a = 2^m and b = 2^n are in H, then ab^{-1} = 2^m 2^{-n} = 2^{m-n} is also in H. By , H is a subgroup of {\mathbb Q}^* determined by the element 2.
Let G be a group and a be any element in G. Then the set \langle a \rangle = \{ a^k : k \in {\mathbb Z} \} is a subgroup of G. Furthermore, \langle a \rangle is the smallest subgroup of G that contains~a.\langle a \ranglecyclic group generated by a
The identity is in \langle a \rangle since a^0 = e. If g and h are any two elements in \langle a \rangle , then by the definition of \langle a \rangle we can write g = a^m and h = a^n for some integers m and n. So gh = a^m a^n = a^{m+n} is again in \langle a \rangle . Finally, if g = a^n in \langle a \rangle , then the inverse g^{-1} = a^{-n} is also in \langle a \rangle . Clearly, any subgroup H of G containing a must contain all the powers of a by closure; hence, H contains \langle a \rangle . Therefore, \langle a \rangle is the smallest subgroup of G containing a.
If we are using the + notation, as in the case of the integers under addition, we write \langle a \rangle = \{ na : n \in {\mathbb Z} \}.
For a \in G, we call \langle a \rangle the cyclic subgroupSubgroupcyclic generated by a. If G contains some element a such that G = \langle a \rangle , then G is a cyclic groupGroupcyclic. In this case a is a generatorGenerator of a cyclic subgroup of G. If a is an element of a group G, we define the orderElementorder of of a to be the smallest positive integer n such that a^n= e, and we write |a| = n. |a|the order of an element a If there is no such integer n, we say that the order of a is infinite and write |a| = \infty to denote the order of a.
Generators of a Finite Cyclic Group
Notice that a cyclic group can have more than a single generator. Both 1 and 5 generate {\mathbb Z}_6; hence, {\mathbb Z}_6 is a cyclic group. Not every element in a cyclic group is necessarily a generator of the group. The order of 2 \in {\mathbb Z}_6 is 3. The cyclic subgroup generated by 2 is \langle 2 \rangle = \{ 0, 2, 4 \}.
The groups {\mathbb Z} and {\mathbb Z}_n are cyclic groups. The elements 1 and -1 are generators for {\mathbb Z}. We can certainly generate {\mathbb Z}_n with 1 although there may be other generators of {\mathbb Z}_n, as in the case of {\mathbb Z}_6.
A Cyclic Group of Units
The group of units, U(9), in {\mathbb Z}_9 is a cyclic group. As a set, U(9) is \{ 1, 2, 4, 5, 7, 8 \}. The element 2 is a generator for U(9) since2^1 & = 2 \qquad 2^2 = 42^3 & = 8 \qquad 2^4 = 72^5 & = 5 \qquad 2^6 = 1.
A Group That is Not Cyclic
Not every group is a cyclic group. Consider the symmetry group of an equilateral triangle S_3. The subgroups of S_3 are shown in . Notice that every subgroup is cyclic; however, no single element generates the entire group.
Subgroups of S_3
Every cyclic group is abelian.
Let G be a cyclic group and a \in G be a generator for G. If g and h are in G, then they can be written as powers of a, say g = a^r and h = a^s. Since g h = a^r a^s = a^{r+s} = a^{s+r} = a^s a^r = h g, G is abelian.
Subgroups of a Cyclic Group
We can ask some interesting questions about cyclic subgroups of a group and subgroups of a cyclic group. If G is a group, which subgroups of G are cyclic? If G is a cyclic group, what type of subgroups does G possess?
Every subgroup of a cyclic group is cyclic.
The main tools used in this proof are the division algorithm and the Principle of Well-Ordering. Let G be a cyclic group generated by a and suppose that H is a subgroup of G. If H = \{ e \}, then trivially H is cyclic. Suppose that H contains some other element g distinct from the identity. Then g can be written as a^n for some integer n. Since H is a subgroup, g^{-1} = a^{n} must also be in H. Since either n or -n is positive, we can assume that H contains positive powers of a and n \gt 0. Let m be the smallest natural number such that a^m \in H. Such an m exists by the Principle of Well-Ordering.
We claim that h = a^m is a generator for H. We must show that every h' \in H can be written as a power of h. Since h' \in H and H is a subgroup of G, h' = a^k for some integer k. Using the division algorithm, we can find numbers q and r such that k = mq +r where 0 \leq r \lt m; hence, a^k = a^{mq +r} = (a^m)^q a^r = h^q a^r. So a^r = a^k h^{-q}. Since a^k and h^{-q} are in H, a^r must also be in H. However, m was the smallest positive number such that a^m was in H; consequently, r=0 and so k=mq. Therefore, h' = a^k = a^{mq} = h^q
and H is generated by h.
The subgroups of {\mathbb Z} are exactly n{\mathbb Z} for n = 0, 1, 2,\ldots.
Let G be a cyclic group of order n and suppose that a is a generator for G. Then a^k=e if and only if n divides k.
First suppose that a^k=e. By the division algorithm, k = nq + r where 0 \leq r \lt n; hence, e = a^k = a^{nq + r} = a^{nq} a^r = e a^r = a^r. Since the smallest positive integer m such that a^m = e is n, r= 0.
Conversely, if n divides k, then k=ns for some integer s. Consequently, a^k = a^{ns} = (a^n)^s = e^s = e.
Let G be a cyclic group of order n and suppose that a \in G is a generator of the group. If b = a^k, then the order of b is n/d, where d = \gcd(k,n).
We wish to find the smallest integer m such that e = b^m = a^{km}. By , this is the smallest integer m such that n divides km or, equivalently, n/d divides m(k/d). Since d is the greatest common divisor of n and k, n/d and k/d are relatively prime. Hence, for n/d to divide m(k/d) it must divide m. The smallest such m is n/d.
The generators of {\mathbb Z}_n are the integers r such that 1 \leq r \lt n and \gcd(r,n) = 1.
A Finite Cyclic Group of Order 16
Let us examine the group {\mathbb Z}_{16}. The numbers 1, 3, 5, 7, 9, 11, 13, and 15 are the elements of {\mathbb Z}_{16} that are relatively prime to 16. Each of these elements generates {\mathbb Z}_{16}. For example, 1 \cdot 9 & = 9 & 2 \cdot 9 & = 2 & 3 \cdot 9 & = 114 \cdot 9 & = 4 & 5 \cdot 9 & = 13 & 6 \cdot 9 & = 67 \cdot 9 & = 15 & 8 \cdot 9 & = 8 & 9 \cdot 9 & = 110 \cdot 9 & = 10 & 11 \cdot 9 & = 3 & 12 \cdot 9 & = 1213 \cdot 9 & = 5 & 14 \cdot 9 & = 14 & 15 \cdot 9 & = 7.
Cyclic Groups of Complex Numbers
The complex numbers are defined as {\mathbb C} = \{ a + bi : a, b \in {\mathbb R} \}, where i^2 = -1. If z = a + bi, then a is the real part of z and b is the imaginary part of z.
To add two complex numbers z=a+bi and w= c+di, we just add the corresponding real and imaginary parts: z + w=(a + bi ) + (c + di) = (a + c) + (b + d)i. Remembering that i^2 = -1, we multiply complex numbers just like polynomials. The product of z and w is (a + bi )(c + di) = ac + bdi^2 + adi + bci = (ac -bd) +(ad + bc)i.
Every nonzero complex number z = a +bi has a multiplicative inverse; that is, there exists a z^{-1} \in {\mathbb C}^\ast such that z z^{-1} = z^{-1} z = 1. If z = a + bi, then z^{-1} = \frac{a-bi}{ a^2 + b^2 }. The complex conjugateConjugate, complex of a complex number z = a + bi is defined to be \overline{z} = a- bi. The absolute value or modulus of z = a + bi is |z| = \sqrt{a^2 + b^2}.
Complex Number Operations
Let z = 2 + 3i and w = 1-2i. Then z + w = (2 + 3i) + (1 - 2i) = 3 + i and z w = (2 + 3i)(1 - 2i ) = 8 - i. Also,z^{-1} & = \frac{2}{13} - \frac{3}{13}i|z| & = \sqrt{13}\overline{z} & = 2-3i.
Rectangular coordinates of a complex number
] (0,-5) -- (0,5);
\draw [->] (-8,0) -- (8,0);
\node [right] at (0,5) {$y$};
\node [below] at (8,0) {$x$};
\node [below] at (0.5,0) {$0$};
\filldraw[fill=black, draw=black] (2,3) circle (0.05cm);
\node [right] at (2,3) {$z_1 = 2 + 3i$};
\filldraw[fill=black, draw=black] (-3,2) circle (0.05cm);
\node [left] at (-3, 2) {$z_3 = -3 + 2i$};
\filldraw[fill=black, draw=black] (1,-2) circle (0.05cm);
\node [right] at (1, -2) {$z_2 = 1 - 2i$};
\end{tikzpicture}]]>
There are several ways of graphically representing complex numbers. We can represent a complex number z = a +bi as an ordered pair on the xy plane where a is the x (or real) coordinate and b is the y (or imaginary) coordinate. This is called the rectangular or Cartesian representation. The rectangular representations of z_1 = 2 + 3i, z_2 = 1 - 2i, and z_3 = - 3 + 2i are depicted in .
Polar coordinates of a complex number
] (0,-5) -- (0,5);
\draw [->] (-8,0) -- (8,0);
\node [right] at (0,5) {$y$};
\node [below] at (8,0) {$x$};
\node [below] at (0.5,0) {$0$};
\draw (0,0) -- (35:6);
\draw (2,0) arc (0:35:2);
\filldraw[fill=black, draw=black] (35:6) circle (0.05cm);
\node [right] at (35:6) {$a + bi$};
\node [above] at (35:3) {$r$};
\node [right] at (17:2) {$\theta$};
\end{tikzpicture}]]>
Nonzero complex numbers can also be represented using polar coordinates. To specify any nonzero point on the plane, it suffices to give an angle \theta from the positive x axis in the counterclockwise direction and a distance r from the origin, as in . We can see that z = a + bi = r( \cos \theta + i \sin \theta). Hence, r = |z| = \sqrt{a^2 + b^2} and a & = r \cos \thetab & = r \sin \theta. We sometimes abbreviate r( \cos \theta + i \sin \theta) as r \cis \theta. To assure that the representation of z is well-defined, we also require that 0^{\circ} \leq \theta \lt 360^{\circ}. If the measurement is in radians, then 0 \leq \theta \lt2 \pi.\cis \theta\cos \theta + i \sin \theta
Complex Numbers in Polar Form
Suppose that z = 2 \cis 60^{\circ}. Then a = 2 \cos 60^{\circ} = 1 and b = 2 \sin 60^{\circ} = \sqrt{3}. Hence, the rectangular representation is z = 1+\sqrt{3}\, i.
Conversely, if we are given a rectangular representation of a complex number, it is often useful to know the number's polar representation. If z = 3 \sqrt{2} - 3 \sqrt{2}\, i, then r = \sqrt{a^2 + b^2} = \sqrt{36 } = 6 and \theta = \arctan \left( \frac{b}{a} \right) = \arctan( - 1) = 315^{\circ}, so 3 \sqrt{2} - 3 \sqrt{2}\, i=6 \cis 315^{\circ}.
The polar representation of a complex number makes it easy to find products and powers of complex numbers. The proof of the following proposition is straightforward and is left as an exercise.
Let z = r \cis \theta and w = s \cis \phi be two nonzero complex numbers. Then zw = r s \cis( \theta + \phi).
Multiplication of Complex Numbers in Polar Form
If z = 3 \cis( \pi / 3 ) and w = 2 \cis(\pi / 6 ), then zw = 6 \cis( \pi / 2 ) = 6i.
DeMoivreDeMoivre's Theorem
Let z = r \cis \theta be a nonzero complex number. Then [r \cis \theta ]^n = r^n \cis( n \theta) for n = 1, 2, \ldots.
We will use induction on n (see ). For n = 1 the theorem is trivial. Assume that the theorem is true for all k such that 1 \leq k \leq n. Thenz^{n+1} & = z^n z& = r^n( \cos n \theta + i \sin n \theta ) r( \cos \theta + i\sin \theta )& = r^{n+1} [( \cos n \theta \cos \theta - \sin n \theta \sin \theta ) + i ( \sin n \theta \cos \theta + \cos n \theta \sin \theta)]& = r^{n+1} [ \cos( n \theta + \theta) + i \sin( n \theta + \theta) ]& = r^{n+1} [ \cos( n +1) \theta + i \sin( n+1) \theta ].
Powers of Complex Numbers
Suppose that z= 1+i and we wish to compute z^{10}. Rather than computing (1 + i)^{10} directly, it is much easier to switch to polar coordinates and calculate z^{10} using DeMoivre's Theorem:z^{10} & = (1+i)^{10}& = \left( \sqrt{2} \cis \left( \frac{\pi }{4} \right) \right)^{10} & = ( \sqrt{2}\, )^{10} \cis \left( \frac{5\pi }{2} \right)& = 32 \cis \left( \frac{\pi }{2} \right)& = 32i.
The multiplicative group of the complex numbers, {\mathbb C}^*, possesses some interesting subgroups. Whereas {\mathbb Q}^* and {\mathbb R}^* have no interesting subgroups of finite order, {\mathbb C}^* has many. We first consider the circle groupGroupcircle, {\mathbb T} = \{ z \in {\mathbb C} : |z| = 1 \}. The following proposition is a direct result of .\mathbb Tthe circle group
The circle group is a subgroup of {\mathbb C}^*.
Although the circle group has infinite order, it has many interesting finite subgroups. Suppose that H = \{ 1, -1, i, -i \}. Then H is a subgroup of the circle group. Also, 1, -1, i, and -i are exactly those complex numbers that satisfy the equation z^4 = 1. The complex numbers satisfying the equation z^n=1 are called the nth roots of unitynth root of unity.
If z^n = 1, then the nth roots of unity are z = \cis\left( \frac{2 k \pi}{n } \right), where k = 0, 1, \ldots, n-1. Furthermore, the nth roots of unity form a cyclic subgroup of {\mathbb T} of order n
By DeMoivre's Theorem, z^n = \cis \left( n \frac{2 k \pi}{n } \right) = \cis( 2 k \pi ) = 1. The z's are distinct since the numbers 2 k \pi /n are all distinct and are greater than or equal to 0 but less than 2 \pi. We will leave the proof that the nth roots of unity form a cyclic subgroup of {\mathbb T} as an exercise.
A generator for the group of the nth roots of unity is called a primitive nth root of unityPrimitive nth root of unity.
Roots of Unity
The 8th roots of unity can be represented as eight equally spaced points on the unit circle (). The primitive 8th roots of unity are\omega & = \frac{\sqrt{2}}{2} + \frac{\sqrt{2}}{2} i\omega^3 & = -\frac{\sqrt{2}}{2} + \frac{\sqrt{2}}{2} i\omega^5 & = -\frac{\sqrt{2}}{2} - \frac{\sqrt{2}}{2} i\omega^7 & = \frac{\sqrt{2}}{2} - \frac{\sqrt{2}}{2}i.
8th roots of unity
We interrupt this exposition to repeat the previous diagram, wrapped as different figure with a different caption. The TikZ code to produce these diagrams lives in an external file, tikz/cyclic-roots-unity.tex, which is pure text, freed from any need to format for XML processing. So, in particular, there is no need to escape ampersands and angle brackets, nor is there employment of the CDATA mechanism. But the real value is that there is just one version to edit, and any changes will be reflected in both copies.
Repeat: 8th roots of unity
Another version of this diagram, authored in , is also included in .
8th roots of unity, authored in
alignments=['se','ne','ne','nw','sw','sw','sw','se']
labels=['1',r'\omega','i',r'\omega^3','-1',r'\omega^5','-i',r'\omega^7']
f(t)=(cos(pi*t/4),sin(pi*t/4))${labels[k]}Large Powers of Integers
Computing large powers can be very time-consuming. Just as anyone can compute 2^2 or 2^8, everyone knows how to compute
2^{2^{1000000} }.
However, such numbers are so large that we do not want to attempt the calculations; moreover, past a certain point the computations would not be feasible even if we had every computer in the world at our disposal. Even writing down the decimal representation of a very large number may not be reasonable. It could be thousands or even millions of digits long. However, if we could compute something like 2^{37398332 } \pmod{ 46389}, we could very easily write the result down since it would be a number between 0 and 46,388. If we want to compute powers modulo n quickly and efficiently, we will have to be clever.The results in this section are needed only in (not really).
The first thing to notice is that any number a can be written as the sum of distinct powers of 2; that is, we can write a = 2^{k_1} + 2^{k_2} + \cdots + 2^{k_n}, where k_1 \lt k_2 \lt \cdots \lt k_n. This is just the binary representation of a. For example, the binary representation of 57 is 111001, since we can write 57 = 2^0 + 2^3 + 2^4 + 2^5.
The laws of exponents still work in {\mathbb Z}_n; that is, if b \equiv a^x \pmod{ n} and c \equiv a^y \pmod{ n}, then bc \equiv a^{x+y} \pmod{ n}. We can compute a^{2^k} \pmod{ n} in k multiplications by computinga^{2^0} \pmod{ n}a^{2^1} \pmod{ n }\vdotsa^{2^k} \pmod{ n}. Each step involves squaring the answer obtained in the previous step, dividing by n, and taking the remainder.
Repeated Squares
We will compute 271^{321} \pmod{ 481}. Notice that 321 = 2^0 +2^6 + 2^8; hence, computing 271^{321} \pmod{ 481} is the same as computing 271^{2^0 +2^6 + 2^8 } \equiv 271^{2^0} \cdot 271^{2^6} \cdot 271^{2^8} \pmod{481}. So it will suffice to compute 271^{2^i} \pmod{481} where i = 0, 6, 8. It is very easy to see that 271^{2^1} = \mbox{73,441} \equiv 329 \pmod{481}. We can square this result to obtain a value for 271^{2^2} \pmod{481}:271^{ 2^2} & \equiv (271^{ 2^1})^2 \pmod{ 481}& \equiv (329)^2 \pmod{ 481}& \equiv \mbox{108,241} \pmod{ 481}& \equiv 16 \pmod{ 481}. We are using the fact that (a^{2^n})^2 \equiv a^{2 \cdot 2^n} \equiv a^{ 2^{n+1} } \pmod{ n}. Continuing, we can calculate 271^{ 2^6 } \equiv 419 \pmod{ 481} and 271^{ 2^8 } \equiv 16 \pmod{ 481}. Therefore,271^{ 321} & \equiv 271^{ 2^0 +2^6 + 2^8 } \pmod{ 481}& \equiv 271^{ 2^0 } \cdot 271^{ 2^6 } \cdot 271^{ 2^8 } \pmod{ 481}& \equiv 271 \cdot 419 \cdot 16 \pmod{ 481}& \equiv \mbox{1,816,784} \pmod{ 481}& \equiv 47 \pmod{ 481}.
The method of repeated squares will prove to be a very useful tool when we explore RSA cryptography. To encode and decode messages in a reasonable manner under this scheme, it is necessary to be able to quickly compute large powers of integers mod n.
Programming Exercises
Write a computer program that will write any decimal number as the sum of distinct powers of 2. What is the largest integer that your program will handle?
Write a computer program to calculate a^x \pmod{ n} by the method of repeated squares. What are the largest values of n and x that your program will accept?
References and Suggested ReadingsKoblitz, N. A Course in Number Theory and Cryptography. 2nd ed. Springer, New York, 1994.Pomerance, C. Cryptology and Computational Number TheoryAn Introduction, in Cryptology and Computational Number Theory, Pomerance, C., ed. Proceedings of Symposia in Applied Mathematics, vol. 42, American Mathematical Society, Providence, RI, 1990. This book gives an excellent account of how the method of repeated squares is used in cryptography.
================================================
FILE: examples/sample-book/exercises/cyclic.xml
================================================
Exercises
Prove or disprove each of the following statements.
All of the generators of {\mathbb Z}_{60} are prime.
U(8) is cyclic.
{\mathbb Q} is cyclic.
If every proper subgroup of a group G is cyclic, then G is a cyclic group.
A group with a finite number of subgroups is finite.
Find the order of each of the following elements.
5 \in {\mathbb Z}_{12}
\sqrt{3} \in {\mathbb R}
\sqrt{3} \in {\mathbb R}^\ast
-i \in {\mathbb C}^\ast
72 in {\mathbb Z}_{240}
312 in {\mathbb Z}_{471}
List all of the elements in each of the following subgroups.
The subgroup of {\mathbb Z} generated by 7
The subgroup of {\mathbb Z}_{24} generated by 15
All subgroups of {\mathbb Z}_{12}
All subgroups of {\mathbb Z}_{60}
All subgroups of {\mathbb Z}_{13}
All subgroups of {\mathbb Z}_{48}
The subgroup generated by 3 in U(20)
The subgroup generated by 5 in U(18)
The subgroup of {\mathbb R}^\ast generated by 7
The subgroup of {\mathbb C}^\ast generated by i where i^2 = -1
The subgroup of {\mathbb C}^\ast generated by 2i
The subgroup of {\mathbb C}^\ast generated by (1 + i) / \sqrt{2}
The subgroup of {\mathbb C}^\ast generated by (1 + \sqrt{3}\, i) / 2
Find the subgroups of GL_2( {\mathbb R }) generated by each of the following matrices.
Find the order of every element in {\mathbb Z}_{18}.
Find the order of every element in the symmetry group of the square, D_4.
What are all of the cyclic subgroups of the quaternion group, Q_8?
List all of the cyclic subgroups of U(30).
List every generator of each subgroup of order 8 in {\mathbb Z}_{32}.
Find all elements of finite order in each of the following groups. Here the \ast indicates the set with zero removed.
{\mathbb Z}
{\mathbb Q}^\ast
{\mathbb R}^\ast
If a^{24} =e in a group G, what are the possible orders of a?
Find a cyclic group with exactly one generator. Can you find cyclic groups with exactly two generators? Four generators? How about n generators?
For n \leq 20, which groups U(n) are cyclic? Make a conjecture as to what is true in general. Can you prove your conjecture?
Let
A =
\begin{pmatrix}
0 & 1 \\
-1 & 0
\end{pmatrix}
\qquad \text{and} \qquad
B =
\begin{pmatrix}
0 & -1 \\
1 & -1
\end{pmatrix}
be elements in GL_2( {\mathbb R} ). Show that A and B have finite orders but AB does not.
Evaluate each of the following.
(3-2i)+ (5i-6)
(4-5i)-\overline{(4i -4)}
(5-4i)(7+2i)
(9-i) \overline{(9-i)}
i^{45}
(1+i)+\overline{(1+i)}
Convert the following complex numbers to the form a + bi.
2 \cis(\pi / 6 )
5 \cis(9\pi/4)
3 \cis(\pi)
\cis(7\pi/4) /2
Change the following complex numbers to polar representation.
1-i
-5
2+2i
\sqrt{3} + i
-3i
2i + 2 \sqrt{3}
Calculate each of the following expressions.
(1+i)^{-1}
(1 - i)^{6}
(\sqrt{3} + i)^{5}
(-i)^{10}
((1-i)/2)^{4}
(-\sqrt{2} - \sqrt{2}\, i)^{12}
(-2 + 2i)^{-5}
Prove each of the following statements.
|z| = | \overline{z}|
z \overline{z} = |z|^2
z^{-1} = \overline{z} / |z|^2
|z +w| \leq |z| + |w|
|z - w| \geq | |z| - |w||
|z w| = |z| |w|
List and graph the 6th roots of unity. What are the generators of this group? What are the primitive 6th roots of unity?
List and graph the 5th roots of unity. What are the generators of this group? What are the primitive 5th roots of unity?
Calculate each of the following.
292^{3171} \pmod{ 582}
2557^{ 341} \pmod{ 5681}
2071^{ 9521} \pmod{ 4724}
971^{ 321} \pmod{ 765}
Let a, b \in G. Prove the following statements.
The order of a is the same as the order of a^{-1}.
For all g \in G, |a| = |g^{-1}ag|.
The order of ab is the same as the order of ba.
Let p and q be distinct primes. How many generators does {\mathbb Z}_{pq} have?
Let p be prime and r be a positive integer. How many generators does {\mathbb Z}_{p^r} have?
Prove that {\mathbb Z}_{p} has no nontrivial subgroups if p is prime.
If g and h have orders 15 and 16 respectively in a group G, what is the order of \langle g \rangle \cap \langle h \rangle ?
Let a be an element in a group G. What is a generator for the subgroup \langle a^m \rangle \cap \langle a^n \rangle?
Prove that {\mathbb Z}_n has an even number of generators for n \gt 2.
Suppose that G is a group and let a, b \in G. Prove that if |a| = m and |b| = n with \gcd(m,n) = 1, then \langle a \rangle \cap \langle b \rangle = \{ e \}.
Let G be an abelian group. Show that the elements of finite order in G form a subgroup. This subgroup is called the torsion subgroup of G.
Let G be a finite cyclic group of order n generated by x. Show that if y = x^k where \gcd(k,n) = 1, then y must be a generator of G.
If G is an abelian group that contains a pair of cyclic subgroups of order 2, show that G must contain a subgroup of order 4. Does this subgroup have to be cyclic?
Let G be an abelian group of order pq where \gcd(p,q) = 1. If G contains elements a and b of order p and q respectively, then show that G is cyclic.
Prove that the subgroups of \mathbb Z are exactly n{\mathbb Z} for n = 0, 1, 2, \ldots.
Prove that the generators of {\mathbb Z}_n are the integers r such that 1 \leq r \lt n and \gcd(r,n) = 1.
Prove that if G has no proper nontrivial subgroups, then G is a cyclic group.
Prove that the order of an element in a cyclic group G must divide the order of the group.
Prove that if G is a cyclic group of order m and d \mid m, then G must have a subgroup of order d.
For what integers n is -1 an nth root of unity?
If z = r( \cos \theta + i \sin \theta) and w = s(\cos \phi + i \sin \phi) are two nonzero complex numbers, show that
zw = rs[ \cos( \theta + \phi) + i \sin( \theta + \phi)].
Prove that the circle group is a subgroup of {\mathbb C}^*.
Prove that the nth roots of unity form a cyclic subgroup of {\mathbb T} of order n.
Let \alpha \in \mathbb T. Prove that \alpha^m =1 and \alpha^n = 1 if and only if \alpha^d = 1 for d = \gcd(m,n).
Let z \in {\mathbb C}^\ast. If |z| \neq 1, prove that the order of z is infinite.
Let z =\cos \theta + i \sin \theta be in {\mathbb T} where \theta \in {\mathbb Q}. Prove that the order of z is infinite.
Which of the following multiplication tables defined on the set G = \{ a, b, c, d \} form a group? Support your answer in each case.
\begin{array}{c|cccc}
\circ & a & b & c & d \\
\hline
a & a & c & d & a \\
b & b & b & c & d \\
c & c & d & a & b \\
d & d & a & b & c
\end{array}
\begin{array}{c|cccc}
\circ & a & b & c & d \\
\hline
a & a & b & c & d \\
b & b & a & d & c \\
c & c & d & a & b \\
d & d & c & b & a
\end{array}
\begin{array}{c|cccc}
\circ & a & b & c & d \\
\hline
a & a & b & c & d \\
b & b & c & d & a \\
c & c & d & a & b \\
d & d & a & b & c
\end{array}
\begin{array}{c|cccc}
\circ & a & b & c & d \\
\hline
a & a & b & c & d \\
b & b & a & c & d \\
c & c & b & a & d \\
d & d & d & b & c
\end{array}
(a) Not a group; (c) a group.
Write out Cayley tables for groups formed by the symmetries of a rectangle and for ({\mathbb Z}_4, +). How many elements are in each group? Are the groups the same? Why or why not?
Describe the symmetries of a rhombus and prove that the set of symmetries forms a group. Give Cayley tables for both the symmetries of a rectangle and the symmetries of a rhombus. Are the symmetries of a rectangle and those of a rhombus the same?
Describe the symmetries of a square and prove that the set of symmetries is a group. Give a Cayley table for the symmetries. How many ways can the vertices of a square be permuted? Is each permutation necessarily a symmetry of the square? The symmetry group of the square is denoted by D_4.
Let S = {\mathbb R} \setminus \{ -1 \} and define a binary operation on S by a \ast b = a + b + ab. Prove that (S, \ast) is an abelian group.
Give an example of two elements A and B in GL_2({\mathbb R}) with AB \neq BA.
Pick two matrices. Almost any pair will work.
Prove that the product of two matrices in SL_2({\mathbb R}) has determinant one.
Prove that the set of matrices of the form
\begin{pmatrix}
1 & x & y \\
0 & 1 & z \\
0 & 0 & 1
\end{pmatrix}
is a group under matrix multiplication. This group, known as the
Heisenberg group, is important in quantum physics. Matrix multiplication in the Heisenberg group is defined by
\begin{pmatrix}
1 & x & y \\
0 & 1 & z \\
0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
1 & x' & y' \\
0 & 1 & z' \\
0 & 0 & 1
\end{pmatrix}
=
\begin{pmatrix}
1 & x+x' & y+y'+xz' \\
0 & 1 & z+z' \\
0 & 0 & 1
\end{pmatrix}.
Prove that \det(AB) = \det(A) \det(B) in GL_2({\mathbb R}). Use this result to show that the binary operation in the group GL_2({\mathbb R}) is closed; that is, if A and B are in GL_2({\mathbb R}), then AB \in GL_2({\mathbb R}).
Let {\mathbb Z}_2^n = \{ (a_1, a_2, \ldots, a_n) : a_i \in {\mathbb Z}_2 \}. Define a binary operation on {\mathbb Z}_2^n by
(a_1, a_2, \ldots, a_n) + (b_1, b_2, \ldots, b_n) = (a_1 + b_1, a_2 + b_2, \ldots, a_n + b_n).
Prove that {\mathbb Z}_2^n is a group under this operation. This group is important in algebraic coding theory.
Show that {\mathbb R}^{\ast} = {\mathbb R} \setminus \{0 \} is a group under the operation of multiplication.
Given the groups {\mathbb R}^{\ast} and {\mathbb Z}, let G = {\mathbb R}^{\ast} \times {\mathbb Z}. Define a binary operation \circ on G by (a,m) \circ (b,n) = (ab, m + n). Show that G is a group under this operation.
Prove or disprove that every group containing six elements is abelian.
There is a nonabelian group containing six elements.
Give a specific example of some group G and elements g, h \in G where (gh)^n \neq g^nh^n.
Look at the symmetry group of an equilateral triangle or a square.
Give an example of three different groups with eight elements. Why are the groups different?
The are five different groups of order 8.
Show that there are n! permutations of a set containing n items.
Let
\sigma =
\begin{pmatrix}
1 & 2 & \cdots & n \\ a_1 & a_2 & \cdots & a_n
\end{pmatrix}
be in S_n. All of the a_is must be distinct. There are n ways to choose a_1, n-1 ways to choose a_2, \ldots, 2 ways to choose a_{n - 1}, and only one way to choose a_n. Therefore, we can form \sigma in n(n - 1) \cdots 2 \cdot 1 = n! ways.
Show that
0 + a \equiv a + 0 \equiv a \pmod{ n }
for all a \in {\mathbb Z}_n.
Prove that there is a multiplicative identity for the integers modulo n:
a \cdot 1 \equiv a \pmod{n}.
For each a \in {\mathbb Z}_n find an element b \in {\mathbb Z}_n such that
a + b \equiv b + a \equiv 0 \pmod{ n}.
Show that addition and multiplication mod $n$ are well defined operations. That is, show that the operations do not depend on the choice of the representative from the equivalence classes mod n.
Show that addition and multiplication mod n are associative operations.
Show that multiplication distributes over addition modulo n:
a(b + c) \equiv ab + ac \pmod{n}.
Let a and b be elements in a group G. Prove that ab^na^{-1} = (aba^{-1})^n for n \in \mathbb Z.
Let U(n) be the group of units in {\mathbb Z}_n. If n \gt 2, prove that there is an element k \in U(n) such that k^2 = 1 and k \neq 1.
Prove that the inverse of g _1 g_2 \cdots g_n is g_n^{-1} g_{n-1}^{-1} \cdots g_1^{-1}.
Prove the remainder of : if G is a group and a, b \in G, then the equation xa = b has a unique solution in G.
Prove .
Prove the right and left cancellation laws for a group G; that is, show that in the group G, ba = ca implies b = c and ab = ac implies b = c for elements a, b, c \in G.
Show that if a^2 = e for all elements a in a group G, then G must be abelian.
Since abab = (ab)^2 = e = a^2 b^2 = aabb, we know that ba = ab.
Show that if G is a finite group of even order, then there is an a \in G such that a is not the identity and a^2 = e.
Let G be a group and suppose that (ab)^2 = a^2b^2 for all a and b in G. Prove that G is an abelian group.
Find all the subgroups of {\mathbb Z}_3 \times {\mathbb Z}_3. Use this information to show that {\mathbb Z}_3 \times {\mathbb Z}_3 is not the same group as {\mathbb Z}_9. (See for a short description of the product of groups.)
Find all the subgroups of the symmetry group of an equilateral triangle.
Compute the subgroups of the symmetry group of a square.
Let H = \{2^k : k \in {\mathbb Z} \}. Show that H is a subgroup of {\mathbb Q}^*.
Let n = 0, 1, 2, \ldots and n {\mathbb Z} = \{ nk : k \in {\mathbb Z} \}. Prove that n {\mathbb Z} is a subgroup of {\mathbb Z}. Show that these subgroups are the only subgroups of \mathbb{Z}.
Let {\mathbb T} = \{ z \in {\mathbb C}^* : |z| =1 \}. Prove that {\mathbb T} is a subgroup of {\mathbb C}^*.
\begin{pmatrix}
\cos \theta & -\sin \theta \\
\sin \theta & \cos \theta
\end{pmatrix}
where \theta \in {\mathbb R}. Prove that G is a subgroup of SL_2({\mathbb R}).
Prove that
G = \{ a + b \sqrt{2} : a, b \in {\mathbb Q} \text{ and } a \text{ and } b \text{ are not both zero} \}
is a subgroup of {\mathbb R}^{\ast} under the group operation of multiplication.
The identity of G is 1 = 1 + 0 \sqrt{2}. Since (a + b \sqrt{2}\, )(c + d \sqrt{2}\, ) = (ac + 2bd) + (ad + bc)\sqrt{2}, G is closed under multiplication. Finally, (a + b \sqrt{2}\, )^{-1} = a/(a^2 - 2b^2) - b\sqrt{2}/(a^2 - 2 b^2).
Let G be the group of 2 \times 2 matrices under addition and
H =
\left\{
\begin{pmatrix}
a & b \\
c & d
\end{pmatrix} :
a + d = 0
\right\}.
Prove that H is a subgroup of G.
Prove or disprove: SL_2( {\mathbb Z} ), the set of 2 \times 2 matrices with integer entries and determinant one, is a subgroup of SL_2( {\mathbb R} ).
List the subgroups of the quaternion group, Q_8.
Prove that the intersection of two subgroups of a group G is also a subgroup of G.
Prove or disprove: If H and K are subgroups of a group G, then H \cup K is a subgroup of G.
Look at S_3.
Prove or disprove: If H and K are subgroups of a group G, then H K = \{hk : h \in H \text{ and } k \in K \} is a subgroup of G. What if G is abelian?
Let G be a group and g \in G. Show that
Z(G) = \{ x \in G : gx = xg \text{ for all } g \in G \} is a subgroup of G. This subgroup is called the center of G. Z(G)the center of a group
Let a and b be elements of a group G. If a^4b = ba and a^3 = e, prove that ab = ba.
Since a^4b = ba, it must be the case that b = a^6 b = a^2 b a, and we can conclude that ab = a^3 b a = ba.
Give an example of an infinite group in which every nontrivial subgroup is infinite.
If xy = x^{-1} y^{-1} for all x and y in G, prove that G must be abelian.
Prove or disprove: Every proper subgroup of an nonabelian group is nonabelian.
Let H be a subgroup of G and
C(H) = \{ g \in G : gh = hg \text{ for all } h \in H \}.
Prove C(H) is a subgroup of G. This subgroup is called the centralizer of H in G.
Let H be a subgroup of G. If g \in G, show that gHg^{-1} = \{g^{-1}hg : h\in H\} is also a subgroup of G.
In each group, how many solutions are there to x^2=e?
Prove that
1^2 + 2^2 + \cdots + n^2 = \frac{n(n + 1)(2n + 1)}{6}
for n \in {\mathbb N}.
The base case, S(1): [1(1 + 1)(2(1) + 1)]/6 = 1 = 1^2 is true.
Assume that S(k): 1^2 + 2^2 + \cdots + k^2 = [k(k + 1)(2k + 1)]/6 is true. Then1^2 + 2^2 + \cdots + k^2 + (k + 1)^2 & = [k(k + 1)(2k + 1)]/6 + (k + 1)^2& = [(k + 1)((k + 1) + 1)(2(k + 1) + 1)]/6,and so S(k + 1) is true. Thus, S(n) is true for all positive integers n.
Prove that
1^3 + 2^3 + \cdots + n^3 = \frac{n^2(n + 1)^2}{4}
for n \in {\mathbb N}.
Prove that n! \gt 2^n for n \geq 4.
The base case, S(4): 4! = 24 \gt 16 =2^4 is true. Assume S(k): k! \gt 2^k is true. Then (k + 1)! = k! (k + 1) \gt 2^k \cdot 2 = 2^{k + 1}, so S(k + 1) is true. Thus, S(n) is true for all positive integers n.
Prove that
x + 4x + 7x + \cdots + (3n - 2)x = \frac{n(3n - 1)x}{2}
for n \in {\mathbb N}.
Prove that 10^{n + 1} + 10^n + 1 is divisible by 3 for n \in {\mathbb N}.
Prove that 4 \cdot 10^{2n} + 9 \cdot 10^{2n - 1} + 5 is divisible by 99 for n \in {\mathbb N}.
Show that
\sqrt[n]{a_1 a_2 \cdots a_n} \leq \frac{1}{n} \sum_{k = 1}^{n} a_k.
Use induction to prove that 1 + 2 + 2^2 + \cdots + 2^n = 2^{n + 1} - 1 for n \in {\mathbb N}.
Prove the Leibniz rule for f^{(n)} (x), where f^{(n)} is the nth derivative of f; that is, show that
(fg)^{(n)}(x) = \sum_{k = 0}^{n} \binom{n}{k} f^{(k)}(x) g^{(n - k)}(x).
Follow the proof in .
Prove that
\frac{1}{2}+ \frac{1}{6} + \cdots + \frac{1}{n(n + 1)} = \frac{n}{n + 1}
for n \in {\mathbb N}.
If x is a nonnegative real number, then show that (1 + x)^n - 1 \geq nx for n = 0, 1, 2, \ldots.
The base case, S(0): (1 + x)^0 - 1 = 0 \geq 0 = 0 \cdot x is true. Assume S(k): (1 + x)^k -1 \geq kx is true. Then(1 + x)^{k + 1} - 1 & = (1 + x)(1 + x)^k -1& = (1 + x)^k + x(1 + x)^k - 1& \geq kx + x(1 + x)^k& \geq kx + x& = (k + 1)x,so S(k + 1) is true. Therefore, S(n) is true for all positive integers n.
Power Sets
Let X be a set. Define the power set of X, denoted {\mathcal P}(X), to be the set of all subsets of X. \mathcal P(X)power set of X For example,
{\mathcal P}( \{a, b\} ) = \{ \emptyset, \{a\}, \{b\}, \{a, b\} \}.
For every positive integer n, show that a set with exactly n elements has a power set with exactly 2^n elements.
Prove that the two principles of mathematical induction stated in are equivalent.
Show that the Principle of Well-Ordering for the natural numbers implies that 1 is the smallest natural number. Use this result to show that the Principle of Well-Ordering implies the Principle of Mathematical Induction; that is, show that if S \subset {\mathbb N} such that 1 \in S and n + 1 \in S whenever n \in S, then S = {\mathbb N}.
For each of the following pairs of numbers a and b, calculate \gcd(a,b) and find integers r and s such that \gcd(a,b) = ra + sb.
14 and 39
234 and 165
1739 and 9923
471 and 562
23,771 and 19,945
-4357 and 3754
Let a and b be nonzero integers. If there exist integers r and s such that ar + bs =1, show that a and b are relatively prime.
Fibonacci Numbers
The Fibonacci numbers are
1, 1, 2, 3, 5, 8, 13, 21, \ldots.
We can define them inductively by f_1 = 1, f_2 = 1, and f_{n + 2} = f_{n + 1} + f_n for n \in {\mathbb N}.
Prove that f_n \lt 2^n.
Prove that f_{n + 1} f_{n - 1} = f^2_n + (-1)^n, n \geq 2.
Show that \lim_{n \rightarrow \infty} f_n / f_{n + 1} = (\sqrt{5} - 1)/2.
Prove that f_n and f_{n + 1} are relatively prime.
For and use mathematical induction.
Show that f_1 = 1, f_2 = 1, and f_{n + 2} = f_{n + 1} + f_n.
Use part .
Use part and .
Let a and b be integers such that \gcd(a,b) = 1. Let r and s be integers such that ar + bs =1. Prove that
\gcd(a,s) = \gcd(r,b) = \gcd(r,s) = 1.
Let x, y \in {\mathbb N} be relatively prime. If xy is a perfect square, prove that x and y must both be perfect squares.
Use the Fundamental Theorem of Arithmetic.
Using the division algorithm, show that every perfect square is of the form 4k or 4k + 1 for some nonnegative integer k.
Suppose that a, b, r, s are pairwise relatively prime and thata^2 + b^2 & = r^2a^2 - b^2 & = s^2.
Prove that a, r, and s are odd and b is even.
Let n \in {\mathbb N}. Use the division algorithm to prove that every integer is congruent mod n to precisely one of the integers 0, 1, \ldots, n-1. Conclude that if r is an integer, then there is exactly one s in {\mathbb Z} such that 0 \leq s \lt n and [r] = [s]. Hence, the integers are indeed partitioned by congruence mod n.
Define the least common multiple of two nonzero integers a and b, denoted by \lcm(a,b), to be the nonnegative integer m such that both a and b divide m, and if a and b divide any other integer n, then m also divides n. \lcm(m,n)the least common multiple of m and n Prove that any two integers a and b have a unique least common multiple.
Let S = \{s \in {\mathbb N} : a \mid s, b \mid s \}. Then S \neq \emptyset, since |ab| \in S. By the Principle of Well-Ordering, S contains a least element m. To show uniqueness, suppose that a \mid n and b \mid n for some n \in {\mathbb N}. By the division algorithm, there exist unique integers q and r such that n = mq + r, where 0 \leq r \lt m. Since a and b divide both m, and n, it must be the case that a and b both divide r. Thus, r = 0 by the minimality of m. Therefore, m \mid n.
If d= \gcd(a, b) and m = \lcm(a, b), prove that dm = |ab|.
Show that \lcm(a,b) = ab if and only if \gcd(a,b) = 1.
Prove that \gcd(a,c) = \gcd(b,c) =1 if and only if \gcd(ab,c) = 1 for integers a, b, and c.
Let a, b, c \in {\mathbb Z}. Prove that if \gcd(a,b) = 1 and a \mid bc, then a \mid c.
Since \gcd(a,b) = 1, there exist integers r and s such that ar + bs = 1. Thus, acr + bcs = c. Since a divides both bc and itself, a must divide c.
Let p \geq 2. Prove that if 2^p - 1 is prime, then p must also be prime.
Prove that there are an infinite number of primes of the form 6n + 5.
Every prime must be of the form 2, 3, 6n + 1, or 6n + 5. Suppose there are only finitely many primes of the form 6k + 5.
Prove that there are an infinite number of primes of the form 4n - 1.
Using the fact that 2 is prime, show that there do not exist integers p and q such that p^2 = 2 q^2. Demonstrate that therefore \sqrt{2} cannot be a rational number.
This is a meaningless subdivision of the exercises for the sake of testing output.
Suppose thatA & = \{ x : x \in \mathbb N \text{ and } x \text{ is even} \},B & = \{x : x \in \mathbb N \text{ and } x \text{ is prime}\},C & = \{ x : x \in \mathbb N \text{ and } x \text{ is a multiple of 5}\}.
Describe each of the following sets.
A \cap B
B \cap C
A \cup B
A \cap (B \cup C)
If A = \{ a, b, c \}, B = \{ 1, 2, 3 \}, C = \{ x \}, and D = \emptyset, list all of the elements in each of the following sets.
A \times B
B \times A
A \times B \times C
A \times D
(a) A \times B = \{ (a,1), (a,2), (a,3), (b,1), (b,2), (b,3), (c,1), (c,2), (c,3) \}; (d) A \times D = \emptyset.
Find an example of two nonempty sets A and B for which A \times B = B \times A is true.
Prove A \cup \emptyset = A and A \cap \emptyset = \emptyset.
Prove A \cup B = B \cup A and A \cap B = B \cap A.
Prove A \cup (B \cap C) = (A \cup B) \cap (A \cup C).
If x \in A \cup (B \cap C), then either x \in A or x \in B \cap C. Thus, x \in A \cup B and A \cup C. Hence, x \in (A \cup B) \cap (A \cup C). Therefore, A \cup (B \cap C) \subset (A \cup B) \cap (A \cup C). Conversely, if x \in (A \cup B) \cap (A \cup C), then x \in A \cup B and A \cup C. Thus, x \in A or x is in both B and C. So x \in A \cup (B \cap C) and therefore (A \cup B) \cap (A \cup C) \subset A \cup (B \cap C). Hence, A \cup (B \cap C) = (A \cup B) \cap (A \cup C).
Prove A \cap (B \cup C) = (A \cap B) \cup (A \cap C).
Prove A \subset B if and only if A \cap B = A.
Prove (A \cap B)' = A' \cup B'.
Prove A \cup B = (A \cap B) \cup (A \setminus B) \cup (B \setminus A).
(A \cap B) \cup (A \setminus B) \cup (B \setminus A) = (A \cap B) \cup (A \cap B') \cup (B \cap A') = [A \cap (B \cup B')] \cup (B \cap A') = A \cup (B \cap A') = (A \cup B) \cap (A \cup A') = A \cup B.
Prove (A \cup B) \times C = (A \times C ) \cup (B \times C).
Prove (A \cap B) \setminus B = \emptyset.
Prove (A \cup B) \setminus B = A \setminus B.
Prove A \setminus (B \cup C) = (A \setminus B) \cap (A \setminus C).
A \setminus (B \cup C) = A \cap (B \cup C)' = (A \cap A) \cap (B' \cap C') = (A \cap B') \cap (A \cap C') = (A \setminus B) \cap (A \setminus C).
More Exercises
This is a meaningless subdivision of the exercises for the sake of testing output.
Prove A \cap (B \setminus C) = (A \cap B) \setminus (A \cap C).
Prove (A \setminus B) \cup (B \setminus A) = (A \cup B) \setminus (A \cap B).
Which of the following relations f: {\mathbb Q} \rightarrow {\mathbb Q} define a mapping? In each case, supply a reason why f is or is not a mapping.
Determine which of the following functions are one-to-one and which are onto. If the function is not onto, determine its range.
f: {\mathbb R} \rightarrow {\mathbb R} defined by f(x) = e^x
f: {\mathbb Z} \rightarrow {\mathbb Z} defined by f(n) = n^2 + 3
f: {\mathbb R} \rightarrow {\mathbb R} defined by f(x) = \sin x
f: {\mathbb Z} \rightarrow {\mathbb Z} defined by f(x) = x^2
(a) f is one-to-one but not onto. f({\mathbb R} ) = \{ x \in {\mathbb R} : x \gt 0 \}. (c) f is neither one-to-one nor onto. f(\mathbb R) = \{ x : -1 \leq x \leq 1 \}.
Let f :A \rightarrow B and g : B \rightarrow C be invertible mappings; that is, mappings such that f^{-1} and g^{-1} exist. Show that (g \circ f)^{-1} =f^{-1} \circ g^{-1}.
Define a function f: {\mathbb N} \rightarrow {\mathbb N} that is one-to-one but not onto.
Define a function f: {\mathbb N} \rightarrow {\mathbb N} that is onto but not one-to-one.
(a) f(n) = n + 1.
Prove the relation defined on {\mathbb R}^2 by (x_1, y_1 ) \sim (x_2, y_2) if x_1^2 + y_1^2 = x_2^2 + y_2^2 is an equivalence relation.
Let f : A \rightarrow B and g : B \rightarrow C be maps.
If f and g are both one-to-one functions, show that g \circ f is one-to-one.
If g \circ f is onto, show that g is onto.
If g \circ f is one-to-one, show that f is one-to-one.
If g \circ f is one-to-one and f is onto, show that g is one-to-one.
If g \circ f is onto and g is one-to-one, show that f is onto.
(a) Let x, y \in A. Then g(f(x)) = (g \circ f)(x) = (g \circ f)(y) = g(f(y)). Thus, f(x) = f(y) and x = y, so g \circ f is one-to-one. (b) Let c \in C, then c = (g \circ f)(x) = g(f(x)) for some x \in A. Since f(x) \in B, g is onto.
Define a function on the real numbers by
f(x) = \frac{x + 1}{x - 1}.
What are the domain and range of f? What is the inverse of f? Compute f \circ f^{-1} and f^{-1} \circ f.
Let f: X \rightarrow Y be a map with A_1, A_2 \subset X and B_1, B_2 \subset Y.
Prove f( A_1 \cup A_2 ) = f( A_1) \cup f( A_2 ).
Prove f( A_1 \cap A_2 ) \subset f( A_1) \cap f( A_2 ). Give an example in which equality fails.
Prove f^{-1}( B_1 \cup B_2 ) = f^{-1}( B_1) \cup f^{-1}(B_2 ), where f^{-1}(B) = \{ x \in X : f(x) \in B \}.
Prove f^{-1}( Y \setminus B_1 ) = X \setminus f^{-1}( B_1).
(a) Let y \in f(A_1 \cup A_2). Then there exists an x \in A_1 \cup A_2 such that f(x) = y. Hence, y \in f(A_1) or f(A_2) . Therefore, y \in f(A_1) \cup f(A_2). Consequently, f(A_1 \cup A_2) \subset f(A_1) \cup f(A_2). Conversely, if y \in f(A_1) \cup f(A_2), then y \in f(A_1) or f(A_2). Hence, there exists an x \in A_1 or there exists an x \in A_2 such that f(x) = y. Thus, there exists an x \in A_1 \cup A_2 such that f(x) = y. Therefore, f(A_1) \cup f(A_2) \subset f(A_1 \cup A_2), and f(A_1 \cup A_2) = f(A_1) \cup f(A_2).
Determine whether or not the following relations are equivalence relations on the given set. If the relation is an equivalence relation, describe the partition given by it. If the relation is not an equivalence relation, state why it fails to be one.
x \sim y in {\mathbb R} if x \geq y
m \sim n in {\mathbb Z} if mn > 0
x \sim y in {\mathbb R} if |x - y| \leq 4
m \sim n in {\mathbb Z} if m \equiv n \pmod{6}
Define a relation \sim on {\mathbb R}^2 by stating that (a, b) \sim (c, d) if and only if a^2 + b^2 \leq c^2 + d^2. Show that \sim is reflexive and transitive but not symmetric.
Show that an m \times n matrix gives rise to a well-defined map from {\mathbb R}^n to {\mathbb R}^m.
Find the error in the following argument by providing a counterexample. The reflexive property is redundant in the axioms for an equivalence relation. If x \sim y, then y \sim x by the symmetric property. Using the transitive property, we can deduce that x \sim x.
Let X = {\mathbb N} \cup \{ \sqrt{2}\, \} and define x \sim y if x + y \in {\mathbb N}.
Projective Real Line
Define a relation on {\mathbb R}^2 \setminus \{ (0,0) \} by letting (x_1, y_1) \sim (x_2, y_2) if there exists a nonzero real number \lambda such that (x_1, y_1) = ( \lambda x_2, \lambda y_2). Prove that \sim defines an equivalence relation on {\mathbb R}^2 \setminus (0,0). What are the corresponding equivalence classes? This equivalence relation defines the projective line, denoted by {\mathbb P}({\mathbb R}) , which is very important in geometry.
================================================
FILE: examples/sample-book/ext/datafiles/stackoverflow.csv
================================================
Respondent|Country|JobSatisfaction|UndergradMajor|ConvertedSalary|Exercise|Gender|RaceEthnicity|EducationParents|HoursOutside|Age|LastNewJob|LanguageWorkedWith
51900|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|94455.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|35 - 44 years old|Between 1 and 2 years ago|C;C#;Java;JavaScript;Objective-C;PHP;Swift;HTML;CSS
95836|Argentina|Slightly satisfied|A business discipline (ex. accounting, finance, marketing)|45600.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;CoffeeScript;JavaScript;Ruby;HTML;CSS;Bash/Shell
51710|Germany|Slightly dissatisfied|A social science (ex. anthropology, psychology, political science)|807756.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;Python;TypeScript;HTML;Bash/Shell
44125|United States|Moderately dissatisfied|A social science (ex. anthropology, psychology, political science)|175000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|45 - 54 years old|Between 1 and 2 years ago|JavaScript;Python
35167|United Kingdom|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|90288.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Go;JavaScript;Ruby;HTML;CSS
31721|Japan|Slightly dissatisfied|Information systems, information technology, or system administration|77433.0|3 - 4 times per week|Male|East Asian|They never completed any formal education|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP
36729|Brazil|Moderately dissatisfied|Computer science, computer engineering, or software engineering|16848.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS
38620|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|73433.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Groovy;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
54695|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|82000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;Python;SQL
22810|Turkey|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|25428.0|I don't typically exercise|Male|Middle Eastern|Primary/elementary school|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#
6289|Germany|Extremely satisfied|Information systems, information technology, or system administration|79552.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Java;JavaScript;HTML
48220|Turkey|Moderately dissatisfied|Computer science, computer engineering, or software engineering|12720.0|1 - 2 times per week|Male|Middle Eastern|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;PHP;SQL;HTML;CSS
72519|Belgium|Extremely satisfied|Information systems, information technology, or system administration|44064.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C#;Erlang;Haskell;Java;JavaScript;Matlab;Objective-C;PHP;Python;R;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS
99498|Estonia|Slightly satisfied|Computer science, computer engineering, or software engineering|32316.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Python;SQL;HTML;CSS
42989|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|57170.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;CoffeeScript;F#;JavaScript;SQL;VB.NET;HTML;CSS;Bash/Shell
75468|Ukraine|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|6684.0|Daily or almost every day|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;HTML;CSS
4814|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|50000.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;JavaScript;PHP;Python;SQL;Delphi/Object Pascal;HTML;CSS;Bash/Shell
62436|Argentina|Slightly dissatisfied|Computer science, computer engineering, or software engineering|27336.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Java;JavaScript;Python;HTML;Bash/Shell
54029|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|115000.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|Assembly;C;C++;C#;Java;Bash/Shell
9393|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|70000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|45 - 54 years old|More than 4 years ago|Python;SQL;VB.NET;Visual Basic 6
80650|Australia|Extremely satisfied|Computer science, computer engineering, or software engineering|73576.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Go;Groovy;Java;JavaScript;Python;Kotlin;Delphi/Object Pascal;HTML;CSS
1105|Switzerland|Extremely satisfied|Computer science, computer engineering, or software engineering|99056.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C++;Go;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
20184|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|67313.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
64870|France|Extremely satisfied|Mathematics or statistics|61194.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Matlab;Python;HTML;CSS
50097|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|78000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;HTML;CSS;Bash/Shell
45899|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|83000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|JavaScript;Objective-C;Python;Swift;HTML;CSS
1862|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|71597.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;Java;JavaScript;HTML
41764|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|146000.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Erlang;JavaScript;Ruby;HTML;CSS
566|Canada|Moderately dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|1000000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Go;JavaScript;PHP;SQL;HTML;CSS
86353|United Kingdom|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|34726.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Python;SQL;HTML;CSS
47618|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|57400.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
49562|Mexico|Slightly dissatisfied|Information systems, information technology, or system administration|22560.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;SQL;VB.NET;Visual Basic 6;HTML;CSS
98428|Philippines|Slightly dissatisfied|Computer science, computer engineering, or software engineering|119088.0|3 - 4 times per week|Male|East Asian;South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;Java;JavaScript;Python;TypeScript;HTML;CSS;Bash/Shell
97868|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|67313.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#
35152|Netherlands|Moderately dissatisfied|Web development or web design|58752.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;HTML;CSS;Bash/Shell
20771|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|26513.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
25005|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|50000.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C#;CoffeeScript;Java;JavaScript;SQL;HTML;CSS
60393|Australia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|115162.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;C++;Python;Rust
43413|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|62486.0|1 - 2 times per week|Female|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Julia;Bash/Shell
4998|Argentina|Slightly dissatisfied|Computer science, computer engineering, or software engineering|23500.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS
20573|Qatar|Moderately satisfied|Computer science, computer engineering, or software engineering|75000.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
69177|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|36716.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C++
40065|Sri Lanka|Slightly satisfied|Information systems, information technology, or system administration|12000.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;HTML;CSS
58855|United States|Extremely satisfied|Information systems, information technology, or system administration|60000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;TypeScript;HTML;CSS
51948|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|110000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;CoffeeScript;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
62327|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|44916.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C#;Java;JavaScript;SQL;VBA;HTML;CSS;Bash/Shell
84278|Russian Federation|Slightly satisfied|Information systems, information technology, or system administration|25476.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;Python;Bash/Shell
16749|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|143328.0|Daily or almost every day|Female;Non-binary, genderqueer, or gender non-conforming|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Haskell;Java;JavaScript;TypeScript;Ocaml;HTML;CSS;Bash/Shell
100350|The former Yugoslav Republic of Macedonia|Slightly satisfied|Computer science, computer engineering, or software engineering|7152.0|1 - 2 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|18 - 24 years old|Less than a year ago|Assembly;C++;C#;F#;Java;SQL;CSS
71690|Canada|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|72469.0|3 - 4 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Python;HTML;CSS;Bash/Shell
6329|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|72469.0|1 - 2 times per week|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Python;HTML;CSS
76220|United Kingdom|Extremely dissatisfied|Computer science, computer engineering, or software engineering|48616.0|1 - 2 times per week|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
21455|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|70000.0|1 - 2 times per week|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;CoffeeScript;Groovy;Java;JavaScript;Objective-C;Ruby;SQL;Swift;HTML;CSS;Bash/Shell
26541|Italy|Moderately satisfied|Computer science, computer engineering, or software engineering|440592.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;SQL;HTML;CSS
5282|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|70368.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
1859|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|82890.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
94909|Mexico|Extremely satisfied|Computer science, computer engineering, or software engineering|19980.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C#;Java;JavaScript;PHP;SQL;HTML;CSS
91689|Netherlands|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|44064.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
62081|Netherlands|Extremely satisfied|Mathematics or statistics|41124.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
15965|Germany|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|67313.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|3 - 4 hours|35 - 44 years old|Less than a year ago|JavaScript;Ruby;VBA
62544|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|12396.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;PHP;Python;Ruby;SQL;TypeScript;Visual Basic 6;HTML;CSS;Bash/Shell
92573|Japan|Slightly dissatisfied|Computer science, computer engineering, or software engineering|36015.0|Daily or almost every day|Female|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|18 - 24 years old|Less than a year ago|C#;Java;SQL
55775|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|35000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|I've never had a job|C#;Java;JavaScript;Python;HTML;CSS
60088|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|50005.0|3 - 4 times per week|Male|White or of European descent|They never completed any formal education|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
83226|Israel|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|94788.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|Java;JavaScript;TypeScript;HTML;CSS
85616|Sweden|Moderately dissatisfied|Computer science, computer engineering, or software engineering|68868.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Groovy;Java;Python
19271|Sri Lanka|Moderately satisfied|Information systems, information technology, or system administration|11076.0|1 - 2 times per week|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C;JavaScript;Objective-C;PHP;Swift;Kotlin;HTML;CSS
20776|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|120000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;PHP;Python;HTML;CSS;Bash/Shell
61323|India|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|150288.0|I don't typically exercise|Male|South Asian|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Objective-C;Swift;TypeScript;HTML;CSS
92023|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|72209.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;Python;Bash/Shell
29397|New Zealand|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|1000000.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;Perl;Python;SQL;VBA;HTML;Bash/Shell
22450|Germany|Slightly satisfied|Mathematics or statistics|44060.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;Java;JavaScript;Matlab;PHP;Python;R;HTML;CSS
32148|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|58410.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
79753|United Kingdom|Neither satisfied nor dissatisfied|Web development or web design|41671.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Objective-C;Python;Swift;TypeScript;HTML;CSS;Bash/Shell
96505|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|137000.0|1 - 2 times per week|Female|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;Python;HTML;CSS;Bash/Shell
3462|United Kingdom|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|83342.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;Groovy;Java;Python;Ruby;Bash/Shell
86789|Belgium|Extremely satisfied|Computer science, computer engineering, or software engineering|26436.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;Objective-C;PHP;SQL;HTML;Bash/Shell
77857|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|260000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
34236|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|55 - 64 years old|More than 4 years ago|C++;C#;Java;JavaScript;SQL;HTML;CSS
55287|United States|Slightly satisfied|Mathematics or statistics|145000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|35 - 44 years old|Between 1 and 2 years ago|Java;Python;Scala;SQL;Bash/Shell
89804|United States|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|114000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
42366|Bangladesh|Moderately satisfied|Computer science, computer engineering, or software engineering|9552.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Java;JavaScript;PHP;Python;SQL;VBA;VB.NET;HTML;CSS
4505|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|58752.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
34225|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|50005.0|Daily or almost every day|Male;Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
52702|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|57576.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|JavaScript;SQL;HTML;CSS
50169|United Kingdom|Moderately dissatisfied|Web development or web design|241692.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS
69694|United States|Slightly satisfied|I never declared a major|65000.0|I don't typically exercise|Male|White or of European descent|Associate degree|Less than 30 minutes|18 - 24 years old|Less than a year ago|C#;Go;Java;SQL;VB.NET;HTML;CSS;Bash/Shell
83115|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|66674.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;Swift;Kotlin;Bash/Shell
40830|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|45000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C++;C#;Java;JavaScript;Objective-C;SQL;Swift;HTML;CSS
71351|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|83000.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C;C++;C#;Visual Basic 6;Bash/Shell
19495|Belgium|Moderately satisfied|Computer science, computer engineering, or software engineering|30840.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
9180|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|67977.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;PHP;SQL;TypeScript;VB.NET;HTML;CSS
101526|Lithuania|Moderately dissatisfied|Computer science, computer engineering, or software engineering|44064.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python;SQL;CSS;Bash/Shell
34897|Serbia|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|11784.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Swift
28328|Belgium|Slightly satisfied|Computer science, computer engineering, or software engineering|1000000.0|1 - 2 times per week|Female|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Python;SQL;HTML;CSS
14652|Austria|Extremely satisfied|Computer science, computer engineering, or software engineering|85671.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;Swift;HTML;CSS
14638|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|112000.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;C#;Java;Python;SQL;Kotlin;HTML;CSS;Bash/Shell
31224|Australia|Moderately dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|53582.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
90398|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|59880.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;Java;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
73197|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|63642.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java
61385|United Kingdom|Moderately dissatisfied|Computer science, computer engineering, or software engineering|45838.0|I don't typically exercise|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;JavaScript;HTML;CSS;Bash/Shell
71885|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|79552.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Go;Java;JavaScript;Lua;Python;R;SQL;HTML;CSS;Bash/Shell
89480|Canada|Neither satisfied nor dissatisfied|A business discipline (ex. accounting, finance, marketing)|40261.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|CoffeeScript;JavaScript;Ruby;SQL;HTML;CSS
57133|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|75000.0|3 - 4 times per week|Female|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Go;JavaScript;HTML;CSS;Bash/Shell
50575|United Kingdom|Moderately satisfied|Information systems, information technology, or system administration|62507.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;SQL
9757|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|73619.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
7628|France|Extremely dissatisfied|Computer science, computer engineering, or software engineering|110149.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;HTML;CSS
83801|Netherlands|Slightly satisfied|Information systems, information technology, or system administration|61194.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C#;SQL
99551|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|70138.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Go;Java;JavaScript;Objective-C;Python;Swift;TypeScript;Kotlin
13809|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|61194.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Go;Java;JavaScript;Perl;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
45507|Denmark|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|77416.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
57858|Poland|Moderately dissatisfied|A humanities discipline (ex. literature, history, philosophy)|73428.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|CoffeeScript;JavaScript;Ruby;SQL;HTML;CSS
14173|Pakistan|Slightly dissatisfied|Computer science, computer engineering, or software engineering|12000.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;JavaScript;Matlab;Objective-C;PHP;SQL;Swift
87452|United Kingdom|Moderately satisfied|I never declared a major|566724.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;PHP;Python;VB.NET;Delphi/Object Pascal;HTML;CSS
8752|United States|Extremely satisfied|Web development or web design|70000.0|3 - 4 times per week|Male|Native American, Pacific Islander, or Indigenous Australian;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
60397|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|2000000.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;Go;Java;JavaScript;Python;Scala;SQL
27294|France|Moderately satisfied|Computer science, computer engineering, or software engineering|48955.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
21557|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|65000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|Python;HTML
90588|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|152000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C++;Groovy;Java;JavaScript;SQL;Bash/Shell
74127|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|120000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript;Python;Ruby;SQL;TypeScript;Kotlin;Ocaml;HTML;CSS;Bash/Shell
76121|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|74316.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
17443|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|80000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|PHP;SQL;HTML;Bash/Shell
17481|Netherlands|Slightly dissatisfied|Computer science, computer engineering, or software engineering|22030.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;JavaScript;Python;HTML;CSS
101129|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|30597.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Go;Java;JavaScript;R;Rust;Scala;SQL;TypeScript;Kotlin;HTML;CSS;Bash/Shell
73468|Germany|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|75880.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C;C++;C#;JavaScript;PHP;SQL;HTML;Bash/Shell
27037|Denmark|Moderately satisfied|Computer science, computer engineering, or software engineering|78900.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;TypeScript
46999|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;F#;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
59557|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|85000.0|3 - 4 times per week|Male|Black or of African descent|Other doctoral degree (Ph.D, Ed.D., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Java;Python;R;SQL;VBA
36288|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|48000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;Matlab;TypeScript;Kotlin;HTML;CSS;Bash/Shell
34997|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|48300.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
96751|United States|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|100000.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|Less than 30 minutes|45 - 54 years old|More than 4 years ago|Java;JavaScript;PHP;SQL;VBA;HTML;CSS
59125|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|50179.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
42688|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|40000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;Java;JavaScript;SQL;TypeScript;VB.NET;HTML;CSS
50437|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|77100.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;HTML;Bash/Shell
13782|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|123000.0|Daily or almost every day|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|Java;Kotlin
27915|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|108000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Go;JavaScript;SQL;HTML;CSS;Bash/Shell
69925|Canada|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|72469.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Ruby;HTML;CSS
96804|Brazil|Extremely satisfied|Information systems, information technology, or system administration|30504.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Go;Java;PHP
25904|United States|Extremely dissatisfied|Web development or web design|42000.0|Daily or almost every day|Female|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
31547|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|104000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;F#;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
25690|Finland|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|64620.0|Daily or almost every day|Male|White or of European descent|Primary/elementary school|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;SQL
34181|United States|Extremely satisfied|Information systems, information technology, or system administration|28000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
76968|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|97826.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;JavaScript;PHP;SQL;HTML;CSS
68780|Australia|Moderately satisfied|Mathematics or statistics|71976.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|More than 4 years ago|C;C++;Python
47710|United Kingdom|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|194466.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;SQL
74024|Russian Federation|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|24000.0|Daily or almost every day|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|PHP;Python;SQL;Bash/Shell
50677|China|Moderately dissatisfied|Computer science, computer engineering, or software engineering|37400.0|3 - 4 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Java;Lua;Rust;Bash/Shell
78292|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|21133.0|Daily or almost every day|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;TypeScript;CSS
56626|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|50005.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
9541|Iran, Islamic Republic of...|Moderately satisfied|Computer science, computer engineering, or software engineering|23304.0|1 - 2 times per week|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
17867|Pakistan|Moderately satisfied|Computer science, computer engineering, or software engineering|8136.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;Objective-C;Python;Swift
6115|India|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|14089.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
233|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|105000.0|Daily or almost every day|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;Python;HTML;CSS
58499|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|85000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
80960|Bangladesh|Extremely satisfied|Computer science, computer engineering, or software engineering|48000.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;Java;JavaScript;PHP;SQL;HTML;CSS
25948|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|105000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS
83560|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|48955.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
36407|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|68868.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;C++;Python;Bash/Shell
53292|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|126000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;PHP;Python;Bash/Shell
69311|Sweden|Moderately dissatisfied|Computer science, computer engineering, or software engineering|682692.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
62109|Georgia|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|29220.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;SQL;Kotlin;HTML;CSS;Bash/Shell
38148|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Ruby;HTML;CSS
48896|Spain|Slightly dissatisfied|Computer science, computer engineering, or software engineering|1000000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Bash/Shell
632|United States|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|75000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
78373|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|135000.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|45 - 54 years old|Between 2 and 4 years ago|C;C++;Go;Java;JavaScript;Julia;Lua;Perl;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
78062|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|130000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;R;SQL;HTML;CSS
43389|Romania|Moderately satisfied|Information systems, information technology, or system administration|17628.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Python;HTML;CSS
51075|South Africa|Moderately satisfied|Web development or web design|10872.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
58655|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|2000000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;HTML;CSS
45914|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|87800.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;Java;JavaScript;Python;HTML;CSS
54054|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|93000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C;C++
96458|Lithuania|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|51408.0|1 - 2 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|C;C++;C#;Go;Groovy;Java;JavaScript;Lua;Perl;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
68501|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|400000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C++;Matlab;Python;R;HTML;Bash/Shell
27846|United Kingdom|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|500052.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|Python;Scala;SQL;Bash/Shell
71610|India|Slightly satisfied|Computer science, computer engineering, or software engineering|11268.0|3 - 4 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|C;C++;C#;Java;JavaScript;SQL;VB.NET;HTML;CSS;Bash/Shell
43064|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|90000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Erlang;JavaScript;PHP;SQL;Swift;HTML;CSS;Bash/Shell
79434|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;JavaScript;TypeScript;HTML;CSS
92105|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|100000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|JavaScript;Ruby;TypeScript
91341|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|916764.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;PHP;Python;Scala;SQL;TypeScript;HTML;CSS;Bash/Shell
71899|United States|Moderately satisfied|Information systems, information technology, or system administration|59000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;PHP;R;SQL;HTML;CSS;Bash/Shell
2243|India|Extremely satisfied|Computer science, computer engineering, or software engineering|11724.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|35 - 44 years old|Less than a year ago|Java;JavaScript;Python;Scala;Kotlin;HTML;CSS
42435|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|115000.0|I don't typically exercise|Male|East Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
43236|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|50000.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Ruby;HTML;CSS
99014|Portugal|Moderately dissatisfied|Computer science, computer engineering, or software engineering|39164.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;SQL
84028|India|Moderately satisfied|Computer science, computer engineering, or software engineering|15654.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;Python;HTML;CSS;Bash/Shell
63602|Spain|Moderately dissatisfied|Computer science, computer engineering, or software engineering|70350.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C#
65984|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|82000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
41064|United States|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|25000.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;VBA;HTML;CSS;Bash/Shell
19829|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|12000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;C++;C#;Java;JavaScript;Python;R;SQL;HTML;CSS
36969|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|36716.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Erlang;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
48326|United Kingdom|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|650076.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Matlab;Python;Bash/Shell
9434|Poland|Moderately dissatisfied|Computer science, computer engineering, or software engineering|24696.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
25721|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|24478.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;VB.NET;Visual Basic 6;HTML;CSS
12916|Belarus|Moderately satisfied|Computer science, computer engineering, or software engineering|49308.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Objective-C;Swift
81997|Brazil|Extremely satisfied|Information systems, information technology, or system administration|22452.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
97467|United States|Slightly dissatisfied|A social science (ex. anthropology, psychology, political science)|85000.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Ruby;HTML;CSS;Bash/Shell
91866|Bulgaria|Moderately satisfied|Computer science, computer engineering, or software engineering|9756.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|SQL;Delphi/Object Pascal
48114|South Africa|Moderately satisfied|Computer science, computer engineering, or software engineering|29664.0|I don't typically exercise|Male|Black or of African descent|Primary/elementary school|3 - 4 hours|35 - 44 years old|Between 1 and 2 years ago|C#;JavaScript;Perl;PHP;SQL;HTML;CSS
94729|Brazil|Extremely satisfied|Computer science, computer engineering, or software engineering|74856.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|PHP;Delphi/Object Pascal
70724|Brazil|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|6360.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;PHP;HTML;CSS
79053|Czech Republic|Extremely satisfied|Computer science, computer engineering, or software engineering|73428.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;Go;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
3034|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|60216.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C++;C#;Java;JavaScript;Matlab;Objective-C;PHP;SQL;Delphi/Object Pascal;HTML;CSS
40519|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|72000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|More than 4 years ago|Assembly;C;C#;VB.NET
26919|Denmark|Slightly dissatisfied|Computer science, computer engineering, or software engineering|87768.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Scala;TypeScript;HTML;CSS
90797|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|153000.0|1 - 2 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C;C++;C#;JavaScript;Matlab;Python;SQL;Bash/Shell
73676|India|Moderately satisfied|Computer science, computer engineering, or software engineering|3984.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Java;JavaScript;Swift;TypeScript;HTML;CSS
29857|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|55020.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
91701|France|Moderately satisfied|Computer science, computer engineering, or software engineering|47736.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|Java;Python;Scala;SQL;HTML
99652|Germany|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|20556.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;Java;Matlab;Python;SQL;VBA
7328|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|90000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
73680|Ireland|Moderately dissatisfied|Computer science, computer engineering, or software engineering|352476.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Haskell;JavaScript;PHP;Python;SQL;HTML;CSS
50527|India|Moderately satisfied|Computer science, computer engineering, or software engineering|4128.0|3 - 4 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Java;JavaScript;HTML;CSS
979|Russian Federation|Slightly satisfied|Mathematics or statistics|28800.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C++;Java;JavaScript;PHP;Python;SQL;Visual Basic 6;Delphi/Object Pascal;HTML;CSS;Bash/Shell
42592|Switzerland|Moderately satisfied|Computer science, computer engineering, or software engineering|118872.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|45 - 54 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Java;JavaScript;SQL;TypeScript;VBA;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
97920|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|54755.0|Daily or almost every day|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Python
20179|Hong Kong (S.A.R.)|Moderately satisfied|Computer science, computer engineering, or software engineering|76754.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;Python
20072|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|70000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;SQL;TypeScript;HTML;CSS
51748|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|102000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;SQL
80139|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|141960.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
60418|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|160000.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;HTML;CSS;Bash/Shell
27251|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|36115.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Go;JavaScript;PHP;Python;Rust;SQL;HTML;CSS;Bash/Shell
78798|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|79562.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|Assembly;Perl;Python;Ruby;SQL;HTML;CSS;Bash/Shell
32731|United States|Moderately satisfied|Mathematics or statistics|105000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
96407|Germany|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|96686.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Go;Groovy;Java;Python;Ruby;Scala;SQL;HTML;CSS;Bash/Shell
28910|Singapore|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|59052.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Java;Python
92718|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
28835|Mexico|Extremely satisfied|Computer science, computer engineering, or software engineering|103140.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Primary/elementary school|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;SQL;Delphi/Object Pascal
82654|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|144000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Matlab;HTML;CSS;Bash/Shell
74770|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|125000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;Groovy;JavaScript;PHP;Python;Ruby;SQL;TypeScript;VB.NET;HTML;Bash/Shell
21127|Germany|Slightly satisfied|Mathematics or statistics|29376.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Java;JavaScript;Python;R;SQL;TypeScript;HTML;CSS;Bash/Shell
60626|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|97233.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Ruby;SQL;HTML
11953|Turkey|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|25428.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|Between 2 and 4 years ago|C#;CoffeeScript;Groovy;Java;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS
52894|United States|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|110000.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;Python;Ruby;SQL;HTML;CSS;Bash/Shell
56008|United States|Slightly satisfied|A business discipline (ex. accounting, finance, marketing)|55000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
12951|India|Slightly satisfied|Computer science, computer engineering, or software engineering|25047.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Python
87993|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|39699.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Java;Python;SQL
45781|Netherlands|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|53851.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
68304|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|58752.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;SQL;HTML;CSS
36223|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|160000.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Go;Java;JavaScript;Objective-C;R;Ruby;Rust;Scala;HTML;CSS
13353|France|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|61194.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;Java;Bash/Shell
1422|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|140800.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Go;JavaScript;Python;Scala
27013|Mexico|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|20000.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;C#;JavaScript;SQL;HTML;CSS
81806|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|152794.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|35 - 44 years old|Between 2 and 4 years ago|Python
37503|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|86120.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;Python;Bash/Shell
64322|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|115000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Go;JavaScript;PHP;TypeScript;HTML;CSS;Bash/Shell
74894|Russian Federation|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|33972.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
16235|Argentina|Extremely satisfied|Computer science, computer engineering, or software engineering|38136.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Python;R;SQL;HTML;Bash/Shell
13398|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|Assembly;C;C++;CoffeeScript;Clojure;JavaScript;Lua;Python;Rust;HTML;CSS;Bash/Shell
75170|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|48313.0|1 - 2 times per week|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Go;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
27884|Poland|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|22056.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Perl;SQL
87973|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|140000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript
62138|United States|Moderately dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|70000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;Lua;PHP;Python
50736|Belarus|Extremely satisfied|Information systems, information technology, or system administration|27528.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript;Bash/Shell
95007|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|95000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;CoffeeScript;JavaScript;TypeScript;HTML;CSS
19505|United States|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|95000.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;HTML;CSS
49495|New Zealand|Moderately satisfied|Information systems, information technology, or system administration|1000000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;C#;Java;JavaScript;Objective-C;Swift;HTML;CSS
38099|United Kingdom|Moderately satisfied|Information systems, information technology, or system administration|41671.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|JavaScript;PHP;Python;HTML;CSS;Bash/Shell
48266|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|126000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;Python;TypeScript;HTML;CSS
91534|China|Moderately satisfied|Computer science, computer engineering, or software engineering|32725.0|1 - 2 times per week|Male|East Asian|Primary/elementary school|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;Groovy;Java;JavaScript;SQL;HTML;CSS
8104|Brazil|Extremely dissatisfied|Computer science, computer engineering, or software engineering|11232.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;Objective-C;SQL;TypeScript;HTML;CSS;Bash/Shell
47331|Serbia|Slightly satisfied|Computer science, computer engineering, or software engineering|70500.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|C++;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
15819|India|Moderately satisfied|Computer science, computer engineering, or software engineering|7827.0|I don't typically exercise|Male|South Asian|Primary/elementary school|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Python;TypeScript
15957|Czech Republic|Extremely satisfied|Computer science, computer engineering, or software engineering|20268.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C#;PHP;SQL;HTML;CSS
54501|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|140000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;TypeScript;HTML;CSS
8734|Lithuania|Extremely satisfied|Computer science, computer engineering, or software engineering|23796.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
43219|New Zealand|Moderately satisfied|Computer science, computer engineering, or software engineering|631452.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Go;JavaScript;Python;Rust;SQL;TypeScript;HTML;CSS;Bash/Shell
73138|India|Moderately satisfied|Computer science, computer engineering, or software engineering|6262.0|Daily or almost every day|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;Java;JavaScript;SQL;HTML;CSS
24294|United States|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|195000.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;Python;Scala;SQL
161|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Go;JavaScript;Python;R;SQL;HTML;CSS;Bash/Shell
100021|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|58500.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C;Java;JavaScript;PHP;Python;SQL;HTML;Bash/Shell
12271|Germany|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|63642.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|Erlang;Go;Java;JavaScript;Lua;PHP;Python;Ruby;Scala;Cobol;HTML;CSS;Bash/Shell
95493|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|36720.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;Python;Bash/Shell
88632|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|107152.0|I don't typically exercise|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
13279|Romania|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|33780.0|Daily or almost every day|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;HTML;CSS
76677|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|30708.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C++;Java;JavaScript;Matlab;Python;R;VBA;HTML;CSS
87157|Portugal|Moderately satisfied|Computer science, computer engineering, or software engineering|8808.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Clojure;Haskell;JavaScript;Python;HTML;CSS;Bash/Shell
24815|United Kingdom|Neither satisfied nor dissatisfied|A natural science (ex. biology, chemistry, physics)|69452.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Go;Scala;SQL
86897|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|41671.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|Less than a year ago|C#;F#;JavaScript;PHP;Python;SQL;HTML;CSS
21899|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|89000.0|1 - 2 times per week|Female|White or of European descent|Associate degree|30 - 59 minutes|35 - 44 years old|Less than a year ago|JavaScript;PHP;HTML;CSS
76693|Canada|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|64417.0|I don't typically exercise|Female|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Python;R;SQL;HTML;CSS;Bash/Shell
23199|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|108000.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C++;Objective-C;PHP;Python
97499|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|109000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Objective-C;Scala;SQL;HTML;CSS
71741|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|130000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Python;Scala;TypeScript
12770|United Kingdom|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|101400.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|45 - 54 years old|More than 4 years ago|Assembly;C;Perl;Python;Bash/Shell
1036|Pakistan|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|2172.0|Daily or almost every day|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Java;JavaScript;PHP;SQL;VB.NET;HTML;CSS
25907|United States|Slightly dissatisfied|A business discipline (ex. accounting, finance, marketing)|85000.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python;R;SQL;Delphi/Object Pascal
66091|United Kingdom|Extremely dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|26808.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Haskell;Python
66572|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|52933.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|More than 4 years ago|C++;C#;CoffeeScript;Go;Java;JavaScript;PHP;Python;SQL;HTML;CSS
28783|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|29376.0|I don't typically exercise|Female|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|HTML;CSS
25944|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|36115.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS
7957|France|Moderately satisfied|Computer science, computer engineering, or software engineering|22032.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|55 - 64 years old|Less than a year ago|C;C++;Java;JavaScript;Objective-C;PHP;Python;SQL;Visual Basic 6;HTML;CSS;Bash/Shell
78262|Switzerland|Moderately satisfied|Computer science, computer engineering, or software engineering|93842.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;Go;Perl;Python;SQL;Bash/Shell
35444|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|75000.0|1 - 2 times per week|Male|Black or of African descent;East Asian;Hispanic or Latino/Latina|Associate degree|3 - 4 hours|45 - 54 years old|More than 4 years ago|C#;Java;JavaScript;Perl;Visual Basic 6;HTML;Bash/Shell
62429|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|883428.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
97893|Indonesia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|111880.0|I don't typically exercise|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Scala;SQL;Kotlin;HTML;CSS
97450|India|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|5640.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|I've never had a job|Java;JavaScript;PHP;Python;SQL;HTML;CSS
94978|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|48313.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;PHP;Delphi/Object Pascal;HTML;CSS
48989|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|13619.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C;C++;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
54953|Italy|Slightly dissatisfied|Mathematics or statistics|381852.0|I don't typically exercise|Female|White or of European descent|Primary/elementary school|Less than 30 minutes|25 - 34 years old|Less than a year ago|Python;R;Scala;SQL
63438|Ukraine|Slightly satisfied|Computer science, computer engineering, or software engineering|24000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;JavaScript;Python;SQL;Bash/Shell
21169|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|38000.0|I don't typically exercise|Male|East Asian;South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C;JavaScript;Python;HTML
81659|Chile|Moderately dissatisfied|Information systems, information technology, or system administration|9912.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Over 4 hours|18 - 24 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;SQL;HTML;CSS
20022|United States|Slightly dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|92500.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;SQL;TypeScript
23928|New Zealand|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|74911.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;Groovy;Java;SQL;Bash/Shell
73270|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
58397|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|38893.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;Go;Haskell;Java;JavaScript;PHP;Python;Scala;SQL;HTML;CSS;Bash/Shell
41705|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|74856.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;Java;JavaScript;SQL;TypeScript;Kotlin;Delphi/Object Pascal;HTML;CSS
29213|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|40261.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
16141|Argentina|Slightly dissatisfied|Information systems, information technology, or system administration|50844.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
7888|Iran, Islamic Republic of...|Moderately dissatisfied|Computer science, computer engineering, or software engineering|21648.0|1 - 2 times per week|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Objective-C;Python;Swift
42002|Germany|Extremely satisfied|Information systems, information technology, or system administration|73428.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;JavaScript;Python;R;Ruby;Rust;Scala;SQL;Swift;HTML;CSS;Bash/Shell
19662|Taiwan|Slightly satisfied|Computer science, computer engineering, or software engineering|22368.0|I don't typically exercise|Male|East Asian|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python;Ruby
64228|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|49404.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|Go;Groovy;Java;JavaScript;Python;Scala;Kotlin;HTML;Bash/Shell
79523|Germany|Moderately satisfied|Mathematics or statistics|73433.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|JavaScript;PHP;Python;SQL;Bash/Shell
98224|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|77786.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C#
88422|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|106000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
75860|Austria|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|22032.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Matlab;R
88525|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|145000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;VB.NET;HTML;CSS
75420|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|130000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;TypeScript;HTML;CSS
71276|Sweden|Extremely satisfied|Computer science, computer engineering, or software engineering|224550.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Over 4 hours|25 - 34 years old|Between 2 and 4 years ago|C#;F#;SQL;VB.NET;Bash/Shell
65182|Belarus|Slightly dissatisfied|Computer science, computer engineering, or software engineering|11748.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#
37265|Brazil|Extremely satisfied|Computer science, computer engineering, or software engineering|52404.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;Scala
2146|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|73000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;Ruby;SQL;VB.NET;HTML;CSS;Bash/Shell
82663|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|96000.0|Daily or almost every day|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;Java;JavaScript;Lua;Perl;PHP;Python;R;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
62307|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|120000.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;C#;SQL
62113|Colombia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|42000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
33973|United States|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|72000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Objective-C;Swift
76763|Czech Republic|Extremely satisfied|Computer science, computer engineering, or software engineering|40536.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;Python;SQL
25030|United States|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|128000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;Groovy;Java;JavaScript;Python;SQL;TypeScript;HTML;CSS
20403|South Africa|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|9888.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
40920|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|160000.0|I don't typically exercise|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;F#;JavaScript;SQL;CSS
94403|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|67560.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;Swift;HTML;CSS;Bash/Shell
2697|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|50769.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|More than 4 years ago|Java;Bash/Shell
69237|India|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|25047.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#
100877|United States|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|135000.0|Daily or almost every day|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;JavaScript;Python
38373|Canada|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|72469.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|Go;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
30518|Thailand|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|39492.0|3 - 4 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;Python;TypeScript;HTML;CSS
14866|India|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|35379.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;TypeScript;HTML;CSS
83946|Egypt|Moderately satisfied|Computer science, computer engineering, or software engineering|1020.0|I don't typically exercise|Male|Middle Eastern|Associate degree|3 - 4 hours|18 - 24 years old|Less than a year ago|Assembly;C++;C#;Groovy;Java;JavaScript;R;SQL;HTML;CSS
15325|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;SQL;Kotlin
83054|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|35292.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Scala;SQL;HTML;CSS;Bash/Shell
32758|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|20664.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;SQL
57764|United States|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|125000.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;Ruby;Rust;Bash/Shell
85168|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|93000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
16206|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|70000.0|1 - 2 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Java;JavaScript;TypeScript;HTML;CSS
54436|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|82612.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;HTML;CSS
40563|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Java;JavaScript;Ruby;HTML;CSS;Bash/Shell
46381|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|59988.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS
66863|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|95000.0|3 - 4 times per week|Female|Black or of African descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|PHP;Python
1668|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|61194.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Scala;SQL
9106|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|73433.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
97921|Azerbaijan|Slightly satisfied|Computer science, computer engineering, or software engineering|44064.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|Java;SQL
41555|Italy|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|183582.0|3 - 4 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|65 years or older|More than 4 years ago|Assembly;C++;C#;Python;SQL;VBA;VB.NET;Visual Basic 6;Cobol;HTML
56808|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|39164.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;C#;JavaScript;HTML;CSS;Bash/Shell
10539|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|156000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|45 - 54 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Kotlin;HTML;CSS;Bash/Shell
45687|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|94000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|CoffeeScript;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
8628|Germany|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|17628.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C#
42827|United Kingdom|Moderately satisfied|Mathematics or statistics|48616.0|Daily or almost every day|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|R;SQL;VBA
64556|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|52089.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Objective-C;SQL;Swift;Bash/Shell
15629|United Kingdom|Slightly satisfied|Web development or web design|34726.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Go;Groovy;Java;JavaScript;PHP;Python;SQL;HTML;CSS
28282|Italy|Slightly satisfied|Computer science, computer engineering, or software engineering|30597.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;TypeScript;HTML;CSS
16317|Bosnia and Herzegovina|Slightly dissatisfied|Computer science, computer engineering, or software engineering|15024.0|3 - 4 times per week|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|JavaScript;SQL;TypeScript;HTML;CSS
78299|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|80000.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Clojure;JavaScript;SQL;CSS;Bash/Shell
7335|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|125014.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
66330|Romania|Extremely satisfied|Computer science, computer engineering, or software engineering|29376.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
37599|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|36720.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Go;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
565|Latvia|Moderately satisfied|Computer science, computer engineering, or software engineering|31664.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;TypeScript;HTML;CSS
45923|Israel|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|112344.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|C#;Java
46902|South Africa|Moderately satisfied|Computer science, computer engineering, or software engineering|23916.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
42928|Netherlands|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|36716.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C++;C#;Python
26295|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|14089.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;PHP;SQL;Visual Basic 6;HTML;CSS
77641|United States|Moderately satisfied|Mathematics or statistics|95000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|JavaScript;Python;SQL
31097|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|35559.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C++;Java;JavaScript;PHP;SQL
10322|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|110000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
35045|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;VB.NET;HTML;CSS
51528|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|23482.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;SQL
29004|Slovakia|Moderately satisfied|Computer science, computer engineering, or software engineering|35244.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;HTML;Bash/Shell
83837|India|Moderately satisfied|Computer science, computer engineering, or software engineering|13463.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;Matlab
73897|United States|Moderately satisfied|Information systems, information technology, or system administration|60000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|Assembly;C++;C#;Java;JavaScript;Matlab;Python;Ruby;Scala;SQL;HTML;CSS;Bash/Shell
63371|Estonia|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|29376.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;JavaScript;PHP;Python;R;Swift;HTML;CSS
60107|Poland|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|31764.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;F#;Haskell;Java;JavaScript;Python;SQL;TypeScript;Kotlin;HTML;CSS
49408|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|30559.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;C#;SQL;Cobol;Bash/Shell
80854|United States|Moderately dissatisfied|I never declared a major|120000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|55 - 64 years old|Less than a year ago|Java;JavaScript;Objective-C;Ruby;Swift
63075|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|165000.0|3 - 4 times per week|Male|East Asian;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|CoffeeScript;Groovy;Java;JavaScript;Python;SQL;Kotlin;HTML;CSS;Bash/Shell
83339|Iran, Islamic Republic of...|Moderately satisfied|Web development or web design|22860.0|1 - 2 times per week|Non-binary, genderqueer, or gender non-conforming|Middle Eastern|Associate degree|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;SQL;Delphi/Object Pascal;HTML;CSS
86784|Hungary|Moderately satisfied|Computer science, computer engineering, or software engineering|28584.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Objective-C;SQL;TypeScript;HTML;CSS
51733|Canada|Extremely satisfied|Mathematics or statistics|79555.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Java;JavaScript;Perl;SQL;HTML;CSS
55963|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|80000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C;C#;JavaScript;Objective-C;Perl;PHP;Python;R;SQL;HTML;Bash/Shell
13843|Russian Federation|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|16140.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Matlab;VBA;VB.NET;Visual Basic 6;Bash/Shell
47935|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|73433.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;Python;Rust;SQL
13722|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|60948.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C++;C#;JavaScript;SQL;HTML;CSS
88204|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|21300.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;Java;JavaScript;Python;SQL;VB.NET;HTML;CSS
60859|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|538968.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;JavaScript;SQL;TypeScript;HTML;CSS
37586|France|Moderately satisfied|Computer science, computer engineering, or software engineering|73433.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;F#;Java;JavaScript;SQL;HTML;CSS
38441|Colombia|Extremely dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|13500.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;JavaScript;PHP;SQL;HTML;CSS
56436|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|483384.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS
46408|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|45000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C++;C#;JavaScript;Ruby;SQL;HTML;CSS
33179|Spain|Extremely satisfied|Computer science, computer engineering, or software engineering|48955.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C#;Go;JavaScript;R;SQL;TypeScript;HTML;CSS;Bash/Shell
86764|Italy|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|23496.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java
70560|Ireland|Extremely satisfied|Web development or web design|1000000.0|3 - 4 times per week|Male|White or of European descent|They never completed any formal education|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Ruby;SQL;Swift;HTML;CSS
72249|Greece|Moderately dissatisfied|Web development or web design|14688.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
63834|United States|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|720000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|Between 1 and 2 years ago|JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
5935|New Zealand|Moderately satisfied|Computer science, computer engineering, or software engineering|69430.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java;JavaScript;PHP;Python;SQL;VB.NET;HTML;CSS;Bash/Shell
63942|United States|Extremely satisfied|Mathematics or statistics|105000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
93367|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|140000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Some college/university study without earning a degree|Over 4 hours|35 - 44 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Swift;Kotlin;HTML;CSS
55870|Sweden|Slightly dissatisfied|Web development or web design|65868.0|Daily or almost every day|Male|White or of European descent|They never completed any formal education|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Objective-C;PHP;Ruby;HTML;CSS;Bash/Shell
15420|United Kingdom|Extremely dissatisfied|Information systems, information technology, or system administration|41671.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Go;JavaScript;PHP;Python;SQL;TypeScript;Kotlin;HTML;CSS;Bash/Shell
26635|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|I don't typically exercise|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;Python;R;SQL
92152|India|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|31309.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript
85207|Sweden|Moderately satisfied|Information systems, information technology, or system administration|76353.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C++;C#;Java;JavaScript;Objective-C;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
76533|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|95015.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Scala;SQL;Kotlin;HTML;Bash/Shell
29345|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|46533.0|Daily or almost every day|Male|Native American, Pacific Islander, or Indigenous Australian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;Python;Kotlin
18706|Iran, Islamic Republic of...|Moderately dissatisfied|Computer science, computer engineering, or software engineering|13320.0|1 - 2 times per week|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;HTML;CSS
76852|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|0.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Objective-C;PHP;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
74072|United Kingdom|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|51672.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
24638|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|80000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;Perl;Python;SQL;HTML;CSS;Bash/Shell
74593|United States|Moderately dissatisfied|I never declared a major|1800000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;HTML;CSS
3595|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|48616.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;VB.NET;HTML;CSS;Bash/Shell
90796|India|Slightly satisfied|Computer science, computer engineering, or software engineering|6012.0|Daily or almost every day|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Between 2 and 4 years ago|JavaScript;PHP;HTML;CSS
14145|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|102500.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;Kotlin;HTML;CSS
78475|Australia|Moderately satisfied|Information systems, information technology, or system administration|43985.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;SQL;VB.NET;CSS
53176|Australia|Moderately satisfied|Information systems, information technology, or system administration|87971.0|I don't typically exercise|Male|Middle Eastern;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
56840|Sweden|Extremely satisfied|Computer science, computer engineering, or software engineering|70368.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Erlang;Ruby;Scala
45343|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|111123.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|JavaScript;Python;SQL;VBA;Delphi/Object Pascal
29200|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|49200.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;JavaScript;Python;HTML;CSS;Bash/Shell
63063|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|156000.0|I don't typically exercise|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS;Bash/Shell
100663|United States|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|96000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;Go;Groovy;Java;JavaScript;Objective-C;Python;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
54808|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|100000.0|Daily or almost every day|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS;Bash/Shell
1997|Germany|Moderately satisfied|Information systems, information technology, or system administration|60216.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;JavaScript;PHP;SQL;HTML;CSS
30642|Sweden|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|104799.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;Python;R;Scala;SQL;Bash/Shell
21906|Russian Federation|Slightly dissatisfied|Computer science, computer engineering, or software engineering|17616.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;JavaScript;PHP;SQL;HTML;CSS
60364|Canada|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|36235.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;PHP;SQL;Delphi/Object Pascal;HTML;CSS;Bash/Shell
90384|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|91791.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Groovy;Java;Python;SQL;Kotlin;Bash/Shell
34114|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|97680.0|I don't typically exercise|Female|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL
25671|United Kingdom|Slightly satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|66674.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;VBA;Bash/Shell
70751|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;Java;JavaScript;PHP;Python;HTML;CSS;Bash/Shell
13064|Spain|Slightly dissatisfied|Computer science, computer engineering, or software engineering|55075.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;PHP;Python;HTML;CSS;Bash/Shell
42614|India|Extremely dissatisfied|Computer science, computer engineering, or software engineering|9393.0|1 - 2 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;Groovy;Java;Kotlin
8260|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|130000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;C#;JavaScript;Matlab;Ruby;SQL;HTML;CSS;Bash/Shell
81737|Iran, Islamic Republic of...|Moderately satisfied|Computer science, computer engineering, or software engineering|14988.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#
73407|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|83800.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
89963|Norway|Slightly dissatisfied|Computer science, computer engineering, or software engineering|79064.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Groovy;Haskell;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
15481|France|Slightly satisfied|Computer science, computer engineering, or software engineering|42836.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;SQL;HTML
69980|United States|Moderately satisfied|Information systems, information technology, or system administration|74000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;SQL;Bash/Shell
24271|Belgium|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|925248.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;TypeScript;HTML;CSS
13675|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|70000.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Haskell;JavaScript;Python;SQL;TypeScript;Kotlin;Ocaml;HTML;CSS;Bash/Shell
22188|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|39164.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;HTML;CSS
48286|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|500052.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;C#;Java;JavaScript;Matlab;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
89668|Austria|Slightly satisfied|Computer science, computer engineering, or software engineering|39648.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;JavaScript;Lua;PHP;SQL;TypeScript;HTML;CSS
58671|Finland|Moderately satisfied|Computer science, computer engineering, or software engineering|66089.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
84019|Canada|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|95015.0|1 - 2 times per week|Male|White or of European descent|They never completed any formal education|30 - 59 minutes|25 - 34 years old|Less than a year ago|Clojure;Java;JavaScript;PHP;Ruby;Scala;SQL;TypeScript;HTML;CSS;Bash/Shell
29406|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|83224.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;C#
54802|France|Moderately satisfied|Computer science, computer engineering, or software engineering|807756.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C#;Java;JavaScript;PHP;SQL;VB.NET;HTML;CSS;Bash/Shell
8375|Bangladesh|Slightly satisfied|Computer science, computer engineering, or software engineering|30000.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;CoffeeScript;Java;JavaScript;Matlab;Perl;PHP;Python;Ruby;SQL;Swift;TypeScript;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
101245|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|79552.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|Python;Ruby;Rust;Bash/Shell
42802|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|140000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Go;Groovy;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
29567|South Africa|Slightly satisfied|Computer science, computer engineering, or software engineering|48.0|Daily or almost every day|Male|South Asian|Primary/elementary school|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C#;JavaScript;SQL;TypeScript;HTML;CSS
86256|United States|Extremely satisfied|I never declared a major|125000.0|Daily or almost every day|Male|Hispanic or Latino/Latina;Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Ruby;HTML;CSS
24541|Australia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|111963.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C++;C#;JavaScript;Lua;SQL;TypeScript;HTML;CSS
7596|Finland|Extremely satisfied|Computer science, computer engineering, or software engineering|69761.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;Python;TypeScript
28442|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|108000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|CoffeeScript;JavaScript;PHP;Python;SQL;HTML;CSS
70216|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Java;JavaScript;Ruby;Swift;HTML;CSS
74451|India|Extremely dissatisfied|Computer science, computer engineering, or software engineering|15811.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Matlab;PHP;Python;SQL
3805|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|48955.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;Java;JavaScript;Objective-C;Python;R;Swift;Visual Basic 6;HTML;CSS;Bash/Shell
61154|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|110000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C;Matlab;Python
8347|Switzerland|Slightly dissatisfied|A natural science (ex. biology, chemistry, physics)|250248.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;Python;SQL;HTML;Bash/Shell
68949|France|Moderately satisfied|Computer science, computer engineering, or software engineering|51408.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;JavaScript;PHP;Ruby;HTML;CSS
10018|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|10400.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Java;JavaScript
95677|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|102000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C++;C#;Java;JavaScript;SQL;VBA;HTML;CSS;Bash/Shell
36277|France|Moderately satisfied|Computer science, computer engineering, or software engineering|56298.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Python
2255|Dominican Republic|Slightly satisfied|Computer science, computer engineering, or software engineering|24000.0|3 - 4 times per week|Male|Black or of African descent;Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
66935|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|75000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;SQL;TypeScript;HTML;CSS
12339|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|47904.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C;C++;Matlab;Python;HTML;CSS;Bash/Shell
28876|United Kingdom|Moderately dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|20836.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
13489|Brazil|Moderately dissatisfied|Computer science, computer engineering, or software engineering|6552.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C#;JavaScript;Python;R;Ruby;HTML;CSS
9968|Greece|Moderately dissatisfied|Computer science, computer engineering, or software engineering|23496.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;C++;Java;JavaScript
75116|Czech Republic|Extremely satisfied|Information systems, information technology, or system administration|69024.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;PHP;Python;SQL;HTML;CSS;Bash/Shell
17069|Sweden|Moderately satisfied|Mathematics or statistics|52404.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Matlab;Objective-C;Python;SQL;VBA
87128|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|29376.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;PHP;HTML;CSS;Bash/Shell
86670|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|40584.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;C#;Java;JavaScript;Matlab;PHP;SQL;TypeScript;HTML;CSS
75820|Spain|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|30597.0|Daily or almost every day|Female|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|R
43725|India|Moderately satisfied|Computer science, computer engineering, or software engineering|12524.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Python;Ruby;SQL;HTML;CSS
60465|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|1500.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C#;Java;JavaScript;Perl;PHP;Python;SQL;HTML;CSS;Bash/Shell
64424|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|41916.0|I don't typically exercise|Female|East Asian;Hispanic or Latino/Latina;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;HTML;CSS;Bash/Shell
99135|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|91800.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java
65264|Romania|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|58752.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|3 - 4 hours|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS
95790|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|82000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;SQL;TypeScript;HTML;CSS
20664|United Kingdom|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|56395.0|3 - 4 times per week|Male|Middle Eastern;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
49222|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|83342.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
71095|Greece|Moderately satisfied|Computer science, computer engineering, or software engineering|33192.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Scala;SQL;HTML;CSS
3088|Turkey|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|50868.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|JavaScript;R;HTML;CSS
6575|United States|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|60000.0|Daily or almost every day|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
25531|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|60000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;JavaScript;Python;HTML;CSS
32882|Poland|Extremely satisfied|Computer science, computer engineering, or software engineering|35292.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;TypeScript;CSS
23924|Poland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|14704.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
68845|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|86000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Perl;Rust;SQL;TypeScript;HTML;CSS;Bash/Shell
88454|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|127000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|C;C++;C#;Clojure;Go;Groovy;Java;JavaScript;SQL;TypeScript;VB.NET;Visual Basic 6;HTML;Bash/Shell
13767|Germany|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|14688.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;C#;Matlab;Bash/Shell
19973|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|100652.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|45 - 54 years old|More than 4 years ago|C;C++;JavaScript;Perl;Python;SQL;HTML;CSS;Bash/Shell
75213|Switzerland|Slightly satisfied|Computer science, computer engineering, or software engineering|106356.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;Java;JavaScript;PHP;R;SQL;VB.NET;HTML
74530|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|135000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;Go;Python;Ruby;HTML;CSS
64951|United States|Extremely satisfied|Mathematics or statistics|140000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|65 years or older|More than 4 years ago|C;C++;C#;Java;VB.NET;Delphi/Object Pascal;HTML;CSS
49683|United Kingdom|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|108345.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;SQL;VB.NET;HTML;CSS
69835|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|85000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;Python;Ruby;Scala;SQL;HTML;CSS;Bash/Shell
16223|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|15000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
21043|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|132000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C++;C#;Java;JavaScript;Objective-C;SQL;Swift;VB.NET;HTML;CSS
93935|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|62412.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C;C++;C#;Java;JavaScript;Lua
76975|Bangladesh|Moderately satisfied|Computer science, computer engineering, or software engineering|17328.0|I don't typically exercise|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;PHP;Python;SQL;HTML;CSS
27005|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|163000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
41122|United States|Moderately satisfied|Mathematics or statistics|65000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|PHP;Python;HTML;CSS;Bash/Shell
93236|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|75880.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;Java
64376|Australia|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|63979.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C++;C#;Java;JavaScript;Lua;Objective-C;PHP;SQL;TypeScript;VBA;VB.NET;HTML;CSS
22857|Greece|Extremely satisfied|Computer science, computer engineering, or software engineering|73428.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C++;C#;Groovy;Java;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
13870|Brazil|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|33684.0|I don't typically exercise|Male|Hispanic or Latino/Latina|They never completed any formal education|Over 4 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;TypeScript;HTML;CSS
89681|Netherlands|Extremely satisfied|Information systems, information technology, or system administration|66084.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;Objective-C;Perl;PHP;SQL;Swift;VBA;HTML;CSS;Bash/Shell
65773|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|55562.0|1 - 2 times per week|Male|Middle Eastern|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;Java;JavaScript;Matlab;PHP;Python;SQL;VBA;VB.NET;Visual Basic 6;Delphi/Object Pascal;HTML;CSS;Bash/Shell
24093|Malaysia|Slightly satisfied|Information systems, information technology, or system administration|29640.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;HTML;CSS
14962|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|20292.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;R;SQL;HTML;CSS;Bash/Shell
75196|Netherlands|Slightly satisfied|Computer science, computer engineering, or software engineering|65352.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;CoffeeScript;Erlang;Groovy;Java;JavaScript;Matlab;Objective-C;PHP;Python;Ruby;SQL;Swift;HTML;CSS;Bash/Shell
76278|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|44916.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;Python;SQL;Swift;HTML;CSS;Bash/Shell
60180|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|78750.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;SQL;CSS;Bash/Shell
69084|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|70985.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;SQL;HTML;CSS
41201|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|58746.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;HTML;CSS
41836|India|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|109581.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Python;R
91450|Israel|Moderately satisfied|Computer science, computer engineering, or software engineering|93960.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Python
45100|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|54000.0|3 - 4 times per week|Male|Black or of African descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
35653|Croatia|Moderately satisfied|Mathematics or statistics|29373.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|Haskell;Python
24202|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|85000.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;SQL;HTML;CSS
75819|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|74000.0|Daily or almost every day|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Ruby;TypeScript;HTML;CSS;Bash/Shell
20880|Iceland|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|62856.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C;C#;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
754|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|80000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C;C++;C#;Python;VB.NET
57449|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|21168.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;TypeScript;HTML;CSS;Bash/Shell
59294|Switzerland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|109483.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Python;Bash/Shell
11006|France|Extremely satisfied|Computer science, computer engineering, or software engineering|31821.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
90683|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|170000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;Java;JavaScript;Lua;Matlab;Python;Ruby
65610|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|59970.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;SQL
6002|Poland|Moderately satisfied|Information systems, information technology, or system administration|49404.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
48952|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|24478.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;SQL;HTML;CSS
19805|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|146000.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C;Go;Java;Perl;Python;SQL;Bash/Shell
30961|Iran, Islamic Republic of...|Extremely satisfied|Computer science, computer engineering, or software engineering|27636.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C++;Python;Bash/Shell
63771|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|55981.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
49234|Jordan|Slightly satisfied|Computer science, computer engineering, or software engineering|15600.0|I don't typically exercise|Male|Middle Eastern;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Objective-C;Swift
89142|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|55000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;Lua;Python;Ruby;Rust;SQL;TypeScript;HTML;CSS;Bash/Shell
2659|Serbia|Moderately dissatisfied|Computer science, computer engineering, or software engineering|44064.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;Objective-C
97902|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|8076.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;C#;Java;JavaScript;Python;Scala;HTML;CSS;Bash/Shell
37626|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|75000.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Java;SQL;Swift;VBA;VB.NET;Visual Basic 6;HTML;CSS
70039|Finland|Moderately satisfied|Computer science, computer engineering, or software engineering|44064.0|1 - 2 times per week|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|Less than a year ago|C++;C#;Java;JavaScript;Matlab;Python;Scala;SQL;HTML;CSS;Bash/Shell
33939|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|68537.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
64138|Bulgaria|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|37500.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C#;Java;JavaScript;PHP;Python;VBA;VB.NET;Visual Basic 6;HTML;CSS
30442|Germany|Extremely satisfied|Information systems, information technology, or system administration|134627.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
86149|United States|Moderately satisfied|Information systems, information technology, or system administration|78200.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
84599|Italy|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|36716.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
19005|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|140000.0|I don't typically exercise|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;TypeScript;Kotlin;HTML;CSS;Bash/Shell
42046|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|165000.0|1 - 2 times per week|Male|East Asian|Some college/university study without earning a degree|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;Python;TypeScript;HTML;CSS
81760|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|95000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|C;Java;JavaScript;Perl;PHP;SQL;HTML;CSS;Bash/Shell
82502|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|58752.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Assembly;C;C++;Hack;Java;JavaScript;Objective-C;PHP;Rust;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
29036|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|36000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Assembly;C;C++;Matlab;Python;SQL;HTML;CSS
35735|Russian Federation|Moderately satisfied|Computer science, computer engineering, or software engineering|74304.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Go;Groovy;Java;JavaScript;Lua;Scala;SQL;TypeScript;HTML;CSS;Bash/Shell
53616|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|42300.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Java;Python;HTML;CSS
40332|India|Extremely satisfied|Computer science, computer engineering, or software engineering|23482.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;Go;Java;JavaScript;Matlab;PHP;Python;R;SQL;HTML;CSS;Bash/Shell
63937|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|90000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;Objective-C;Ruby;Swift;Kotlin;Bash/Shell
53663|Canada|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|32209.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|45 - 54 years old|Between 2 and 4 years ago|Java;SQL;Visual Basic 6
94766|United States|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|200000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|Assembly;C;C++;Python;Bash/Shell
57422|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|66027.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Go;Java;JavaScript;Objective-C;PHP;Python;SQL;Swift;Kotlin;HTML;CSS
95987|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|1000000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Groovy;Java;JavaScript;Objective-C;SQL;Swift;TypeScript;Kotlin;HTML;CSS
53434|France|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|56543.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;Haskell;Python;SQL;Bash/Shell
28845|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|84000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
18841|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|53851.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;HTML;CSS
73618|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|2000000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Python;SQL;Swift;TypeScript;HTML;CSS
11924|Venezuela, Bolivarian Republic of...|Extremely satisfied|Information systems, information technology, or system administration|600.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
76150|Sweden|Extremely satisfied|Computer science, computer engineering, or software engineering|49404.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#
63262|Germany|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|72209.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Objective-C;TypeScript;HTML;CSS
1759|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|154000.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;Perl;Ruby;SQL;HTML;CSS;Bash/Shell
84550|United States|Moderately satisfied|I never declared a major|100000.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Perl;PHP;Python;HTML;CSS;Bash/Shell
35747|Canada|Slightly satisfied|Computer science, computer engineering, or software engineering|104678.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;PHP;Python;SQL;TypeScript;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
43292|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|100000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;Java;JavaScript;Objective-C;Python;Swift;HTML;CSS;Bash/Shell
6987|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|59880.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;Lua;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
21801|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|121000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
75652|Philippines|Extremely satisfied|Computer science, computer engineering, or software engineering|14652.0|I don't typically exercise|Male|East Asian;South Asian|Associate degree|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;SQL;VBA;VB.NET;Visual Basic 6;Delphi/Object Pascal
47300|Canada|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|72469.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Lua;Python;Bash/Shell
98155|Italy|Moderately dissatisfied|Computer science, computer engineering, or software engineering|22284.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C;C++;Haskell;Java;JavaScript;PHP;Python;SQL;Visual Basic 6;HTML;CSS;Bash/Shell
81920|Armenia|Moderately satisfied|Computer science, computer engineering, or software engineering|23628.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;SQL;HTML;CSS
51944|Russian Federation|Slightly satisfied|Mathematics or statistics|14856.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;Python;SQL;Bash/Shell
14261|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|125014.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
51422|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|103000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Python
7868|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript;Python;R;Scala;TypeScript
19604|United States|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|108252.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Kotlin;HTML;CSS;Bash/Shell
91500|United States|Extremely satisfied|Information systems, information technology, or system administration|88500.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Go;Java;JavaScript;Ruby;SQL;VB.NET;HTML;CSS;Bash/Shell
8570|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|58000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Lua;SQL;HTML;CSS
62203|Ireland|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|61194.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|JavaScript;Python;SQL;HTML;CSS
77965|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|120000.0|I don't typically exercise|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Perl;Python;SQL;HTML;CSS;Bash/Shell
54241|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|53892.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Python;Swift;Kotlin;HTML;CSS;Bash/Shell
51899|Russian Federation|Moderately satisfied|Computer science, computer engineering, or software engineering|20808.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;Scala;SQL
42384|Indonesia|Extremely satisfied|Computer science, computer engineering, or software engineering|107400.0|I don't typically exercise|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;PHP;Python;SQL;VB.NET;Visual Basic 6;Kotlin;HTML;CSS
63202|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|6204.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;Python
35898|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|80000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;Groovy;Java;JavaScript;Objective-C;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
84867|Pakistan|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|11820.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL
71735|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|38820.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;HTML;CSS
54691|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|25047.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript
83990|Brazil|Neither satisfied nor dissatisfied|A business discipline (ex. accounting, finance, marketing)|10476.0|Daily or almost every day|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;HTML;CSS
98776|India|Moderately satisfied|Computer science, computer engineering, or software engineering|28178.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;JavaScript;Python;R
1742|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|160000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;JavaScript;Objective-C;SQL;Swift;HTML;CSS;Bash/Shell
662|Bulgaria|Extremely dissatisfied|A business discipline (ex. accounting, finance, marketing)|12000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
47379|Belgium|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|146868.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Python;VBA;VB.NET;Visual Basic 6
4583|Russian Federation|Slightly satisfied|Information systems, information technology, or system administration|25476.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java;JavaScript;Matlab;PHP;Python;SQL;HTML;CSS;Bash/Shell
2578|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|138904.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
25836|Nigeria|Slightly satisfied|Computer science, computer engineering, or software engineering|13332.0|Daily or almost every day|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|More than 4 years ago|Java;Kotlin;HTML
14757|Poland|Moderately satisfied|Mathematics or statistics|22932.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL
60999|Mexico|Moderately satisfied|Computer science, computer engineering, or software engineering|22560.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
8384|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|29376.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;C#;Go;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
73938|New Zealand|Extremely satisfied|Computer science, computer engineering, or software engineering|40196.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Clojure;Java;JavaScript;Perl;PHP;Python;SQL;TypeScript;Delphi/Object Pascal;HTML;CSS
19156|Uruguay|Moderately satisfied|Computer science, computer engineering, or software engineering|60000.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
27072|Norway|Moderately dissatisfied|Computer science, computer engineering, or software engineering|84165.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;Python;Ruby;Scala;SQL;HTML;CSS;Bash/Shell
22567|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|74550.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS
76423|Taiwan|Slightly satisfied|Computer science, computer engineering, or software engineering|84743.0|I don't typically exercise|Male|East Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C++;C#;Groovy;Java;JavaScript;Python;HTML;Bash/Shell
47039|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|2000000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|55 - 64 years old|More than 4 years ago|Assembly;C;C++;C#;Java;JavaScript;Objective-C;PHP;Python;SQL;Swift;VBA;VB.NET;Delphi/Object Pascal;HTML;CSS;Bash/Shell
10743|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|88119.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Groovy;Java;Python;SQL;TypeScript;Kotlin;HTML;CSS;Bash/Shell
50829|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|1000000.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Python
75243|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|60000.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;Kotlin;HTML;CSS
93360|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|106000.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
40163|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|165000.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
57297|France|Moderately satisfied|Computer science, computer engineering, or software engineering|34269.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;Clojure;Haskell;Java;JavaScript;Python;HTML;CSS
30587|United Kingdom|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|37504.0|I don't typically exercise|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
34801|United States|Moderately satisfied|Information systems, information technology, or system administration|85000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;C#;Go;Java;JavaScript;Matlab;Objective-C;PHP;VBA;Kotlin;HTML;CSS;Bash/Shell
47469|Croatia|Moderately satisfied|Computer science, computer engineering, or software engineering|25656.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
75609|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|59980.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;Lua;Python
38237|Canada|Slightly dissatisfied|Computer science, computer engineering, or software engineering|80521.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C#;Clojure;Erlang;F#;Go;Haskell;JavaScript;Python;Ruby;Rust;VB.NET;Visual Basic 6
35052|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|107964.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|C;C++;Go;JavaScript;Objective-C;Python;SQL;HTML;CSS;Bash/Shell
61282|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|10236.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Matlab;PHP;Python;SQL;HTML;CSS;Bash/Shell
29848|Belgium|Moderately satisfied|Computer science, computer engineering, or software engineering|55686.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;Lua;SQL;HTML;CSS
27109|Canada|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|24156.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript
39791|Philippines|Slightly satisfied|Information systems, information technology, or system administration|6120.0|I don't typically exercise|Male|East Asian;South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;HTML;CSS
39629|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|58000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Java;PHP;Python;HTML;CSS
8559|Ireland|Extremely satisfied|Computer science, computer engineering, or software engineering|90288.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript;R;SQL;TypeScript;Kotlin;HTML;CSS;Bash/Shell
66591|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|94000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Java;JavaScript;Python;HTML;Bash/Shell
96319|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|67069.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java
76379|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|105000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C;C++;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
10062|Malta|Moderately satisfied|Computer science, computer engineering, or software engineering|39776.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
54223|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|90000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C;C++;Python;Bash/Shell
20856|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|103300.0|1 - 2 times per week|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;Groovy;Java;JavaScript;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
83561|India|Slightly satisfied|Computer science, computer engineering, or software engineering|11741.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;SQL;HTML;CSS
64160|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|63896.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;Python;Ruby;HTML;CSS;Bash/Shell
55491|France|Moderately satisfied|Computer science, computer engineering, or software engineering|51403.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Go;Java;JavaScript;Python;Scala;Bash/Shell
8446|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|105000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;F#;Java;JavaScript;SQL;HTML;CSS
29303|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|61752.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Go;PHP;SQL;HTML;CSS;Bash/Shell
86128|Australia|Slightly satisfied|Computer science, computer engineering, or software engineering|57581.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
20763|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|130000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Go;Java;JavaScript;TypeScript;HTML;CSS
99911|Ukraine|Slightly satisfied|Computer science, computer engineering, or software engineering|36000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;CSS
57656|India|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|13306.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;Python;R;TypeScript;HTML;CSS
6181|India|Slightly dissatisfied|Information systems, information technology, or system administration|5640.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;HTML;CSS
76715|Mexico|Slightly dissatisfied|Computer science, computer engineering, or software engineering|5796.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;C++;Objective-C;Swift
90037|United Kingdom|Slightly dissatisfied|A natural science (ex. biology, chemistry, physics)|683412.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C++;C#;JavaScript;PHP;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS
81185|Cuba|Moderately satisfied|Computer science, computer engineering, or software engineering|876.0|Daily or almost every day|Male|Black or of African descent;Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|Between 1 and 2 years ago|C++
45373|India|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|27708.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;SQL
90276|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|122000.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Groovy;Java;JavaScript;Perl;Python;TypeScript;Bash/Shell
30624|Poland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|21876.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;Go
92258|Canada|Extremely satisfied|A health science (ex. nursing, pharmacy, radiology)|61196.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
52971|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|3757.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
62765|United States|Extremely satisfied|Web development or web design|50000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
88501|Poland|Slightly dissatisfied|Mathematics or statistics|30000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
93045|Bulgaria|Slightly dissatisfied|Computer science, computer engineering, or software engineering|26256.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;Ruby;TypeScript;Kotlin
84335|Bulgaria|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|12000.0|I don't typically exercise|Female|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|PHP;SQL;HTML;CSS
41006|Australia|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|74375.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|Java;JavaScript;SQL
31418|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|56365.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Rust;SQL;TypeScript;HTML;CSS;Bash/Shell
62709|Russian Federation|Extremely satisfied|Computer science, computer engineering, or software engineering|115000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C++;Objective-C;Swift
68114|Netherlands|Slightly satisfied|Computer science, computer engineering, or software engineering|79552.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;Python;Kotlin
95558|Russian Federation|Slightly dissatisfied|Computer science, computer engineering, or software engineering|12.0|I don't typically exercise|Female;Transgender|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
86398|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|15600.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C++;C#;Python;VBA;VB.NET
24186|United States|Moderately satisfied|A health science (ex. nursing, pharmacy, radiology)|120000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;Go;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
63928|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|68000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;Perl;Python;SQL;Swift;TypeScript;Kotlin;HTML;CSS;Bash/Shell
78437|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|95000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript
68457|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;C#;JavaScript;Perl;SQL;TypeScript;HTML;CSS;Bash/Shell
87207|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Assembly;C#;Matlab;Bash/Shell
89623|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;Objective-C;Python;Bash/Shell
15827|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|170000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Groovy;Java;JavaScript;Objective-C;Python;Ruby;SQL;Swift;HTML;CSS;Bash/Shell
76384|United Kingdom|Slightly satisfied|Mathematics or statistics|46498.0|1 - 2 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#
31770|Germany|Moderately satisfied|Information systems, information technology, or system administration|61194.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;SQL
68677|Russian Federation|Moderately satisfied|Web development or web design|17088.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;JavaScript;Lua;Perl;PHP;SQL;HTML;CSS;Bash/Shell
98051|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|44400.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript
54992|United Kingdom|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|55006.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;SQL;VBA;VB.NET;HTML;CSS
76940|Brazil|Slightly dissatisfied|Computer science, computer engineering, or software engineering|811000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;JavaScript;Ruby;SQL;HTML;CSS
9042|Russian Federation|Moderately satisfied|Information systems, information technology, or system administration|37152.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;HTML;CSS
18947|Maldives|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|15588.0|3 - 4 times per week|Female|South Asian|Primary/elementary school|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;SQL;HTML;CSS
50503|Germany|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|43320.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;Java;Matlab;Python;Bash/Shell
37946|Portugal|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|18360.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;SQL;VBA;VB.NET;Visual Basic 6
40193|United States|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|80000.0|I don't typically exercise|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;Matlab;Python
21258|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|16000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;Java;JavaScript;Python
99474|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|70000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Perl;Python;HTML;CSS
42902|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|109200.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Java;JavaScript;PHP;Python;SQL;Bash/Shell
59582|Colombia|Slightly satisfied|Computer science, computer engineering, or software engineering|16872.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;Groovy;Java;JavaScript;Python;SQL;TypeScript;Cobol;HTML;CSS;Bash/Shell
99441|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|55562.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|55 - 64 years old|Less than a year ago|Assembly;C;C++;C#;HTML;Bash/Shell
12166|India|Moderately satisfied|Computer science, computer engineering, or software engineering|4692.0|3 - 4 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Between 1 and 2 years ago|Swift
13006|Italy|Slightly satisfied|Computer science, computer engineering, or software engineering|30597.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C++;Java;JavaScript;Lua;PHP;Python;SQL;HTML;CSS;Bash/Shell
42202|Argentina|Slightly satisfied|Information systems, information technology, or system administration|20340.0|I don't typically exercise|Female|Hispanic or Latino/Latina;White or of European descent|Professional degree (JD, MD, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Haskell;Java;JavaScript;Objective-C;Python;Swift;TypeScript;Kotlin;HTML;CSS;Bash/Shell
94706|Lebanon|Slightly dissatisfied|Computer science, computer engineering, or software engineering|21384.0|I don't typically exercise|Female|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Java;Matlab;R;Swift;Cobol;HTML;CSS
77558|Austria|Slightly satisfied|Computer science, computer engineering, or software engineering|35688.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;JavaScript;Python;Bash/Shell
86195|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|50000.0|Daily or almost every day|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;SQL;HTML;CSS
52440|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|44449.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;Matlab;Python;Ruby;HTML;CSS;Bash/Shell
95199|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|69000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Java;Bash/Shell
57989|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|63000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;HTML;CSS
26999|United States|Slightly dissatisfied|A humanities discipline (ex. literature, history, philosophy)|175000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Groovy;Java;HTML;Bash/Shell
12026|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|128000.0|I don't typically exercise|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;Python
63243|Poland|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|15180.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS
33018|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|54336.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Haskell;Java;JavaScript;Scala;SQL;TypeScript;HTML;CSS;Bash/Shell
74694|Colombia|Moderately dissatisfied|Computer science, computer engineering, or software engineering|29520.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;HTML
60299|Germany|Slightly dissatisfied|Web development or web design|22032.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
48153|France|Moderately dissatisfied|Computer science, computer engineering, or software engineering|36716.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Clojure;Java;JavaScript;Python;TypeScript;Bash/Shell
95880|India|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|5260.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C++;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
90296|Israel|Moderately satisfied|Computer science, computer engineering, or software engineering|129900.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|Clojure;Groovy;JavaScript;Python;Ruby;Bash/Shell
59039|Netherlands|Moderately satisfied|Information systems, information technology, or system administration|91791.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;SQL;HTML;CSS
12403|United States|Moderately satisfied|Information systems, information technology, or system administration|83200.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
46195|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|42348.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript
54437|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|54336.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;JavaScript;PHP;Python;TypeScript;HTML;CSS
10113|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|235000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Assembly;C;C++;JavaScript;Objective-C;Python;Swift;HTML;CSS
12713|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|41124.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|PHP;SQL;HTML;CSS
22558|Turkey|Extremely satisfied|Computer science, computer engineering, or software engineering|146865.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;C#;JavaScript;Objective-C;PHP;Python;VB.NET
11375|Dominican Republic|Moderately dissatisfied|Computer science, computer engineering, or software engineering|16860.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Some college/university study without earning a degree|Over 4 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;HTML
3337|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|84165.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|C#;SQL;Delphi/Object Pascal;HTML;CSS
58940|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|5088.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;SQL;VB.NET;HTML
62937|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|25000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;Perl;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
70203|Germany|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|58752.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
42068|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|275000.0|I don't typically exercise|Male|East Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Assembly;C;Java;Objective-C
46104|Czech Republic|Slightly satisfied|Computer science, computer engineering, or software engineering|27900.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
55152|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|170000.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java;Kotlin
17901|Belgium|Moderately dissatisfied|Computer science, computer engineering, or software engineering|38184.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
66005|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|131000.0|3 - 4 times per week|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;Python;TypeScript;Visual Basic 6;HTML;CSS;Bash/Shell
32349|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|91791.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;SQL;Bash/Shell
13253|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|88119.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;Java;Objective-C;Python;SQL;Bash/Shell
71877|Sweden|Moderately dissatisfied|Mathematics or statistics|56292.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;Haskell;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
62587|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|9424.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Between 2 and 4 years ago|Objective-C;Swift
77234|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|41000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;VB.NET;HTML;CSS
56304|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|38893.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
101567|Australia|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|111963.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;SQL;Bash/Shell
73781|United States|Extremely satisfied|Information systems, information technology, or system administration|90000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
59609|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;VB.NET;HTML;CSS
33066|France|Slightly satisfied|Computer science, computer engineering, or software engineering|39164.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;Go;Java;JavaScript;PHP;Scala;TypeScript;Ocaml;HTML;CSS;Bash/Shell
76128|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|104030.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Go;JavaScript;PHP;Python;R;SQL;HTML;CSS;Bash/Shell
5419|Turkey|Extremely satisfied|Mathematics or statistics|600000.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
80769|Slovenia|Slightly satisfied|Computer science, computer engineering, or software engineering|22032.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;Java;PHP;SQL;VBA;VB.NET;HTML;CSS
19051|United Kingdom|Moderately dissatisfied|Computer science, computer engineering, or software engineering|34726.0|3 - 4 times per week|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;Swift;HTML
21021|Greece|Moderately satisfied|Computer science, computer engineering, or software engineering|46992.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;SQL
48564|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|61580.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS
12707|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|54755.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Matlab;Python;Bash/Shell
57240|Germany|Slightly satisfied|A social science (ex. anthropology, psychology, political science)|36716.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
44654|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|34726.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;C#;Java;JavaScript;Matlab;Python;Bash/Shell
64092|Sweden|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|93420.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;Matlab;SQL;VB.NET;HTML;CSS
26973|United States|Extremely dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|68000.0|I don't typically exercise|Female|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|HTML;CSS
75591|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|64417.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;SQL;VBA;VB.NET;Visual Basic 6;Delphi/Object Pascal;HTML;CSS
9287|Australia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|87971.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|C++;C#;JavaScript;SQL;VB.NET;HTML;CSS;Bash/Shell
87545|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|135000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;C;Go;Java;JavaScript;Lua;Python;Ruby;Rust;Scala;SQL;HTML;CSS;Bash/Shell
98849|Sweden|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|74856.0|I don't typically exercise|Male|White or of European descent|Associate degree|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C++;C#;Python
50530|Russian Federation|Moderately satisfied|Computer science, computer engineering, or software engineering|36084.0|I don't typically exercise|Female|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;Python;HTML;CSS;Bash/Shell
11814|Portugal|Moderately satisfied|Computer science, computer engineering, or software engineering|30840.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;HTML
89307|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|73433.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Java;Scala;Kotlin
21804|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|More than 4 years ago|Java;JavaScript;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
9933|Pakistan|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|11928.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
87614|France|Extremely satisfied|Computer science, computer engineering, or software engineering|97910.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;Bash/Shell
14793|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
30224|United States|Slightly satisfied|Mathematics or statistics|132000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;Ruby;CSS
55276|Italy|Moderately dissatisfied|Computer science, computer engineering, or software engineering|33657.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;HTML;CSS
88901|Japan|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|37812.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;CoffeeScript;Go;Java;JavaScript;Objective-C;PHP;Python;Ruby;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
96731|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|4740.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;PHP;Python;SQL;Swift;Cobol;HTML;CSS
32179|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|160000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|C;C++;Java;JavaScript;Perl;PHP;Ruby;Rust;Scala;HTML;CSS;Bash/Shell
33803|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|250000.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Ruby;HTML;CSS
83190|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|95462.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Objective-C;Python;Ruby;Swift
65782|Russian Federation|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|61992.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;SQL
25565|India|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|19568.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Python;R;VBA
80703|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|14400.0|3 - 4 times per week|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
63405|Thailand|Moderately satisfied|Computer science, computer engineering, or software engineering|7524.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|Go;JavaScript;PHP;Python;Ruby;HTML
63114|Czech Republic|Moderately satisfied|Information systems, information technology, or system administration|29376.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Java
42749|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|65000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C;C++;C#;Java;Python;SQL;VBA;VB.NET
70448|United Kingdom|Extremely satisfied|Mathematics or statistics|69452.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|JavaScript;Python;SQL;TypeScript;HTML;CSS
96450|Poland|Neither satisfied nor dissatisfied|A natural science (ex. biology, chemistry, physics)|59988.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Go;JavaScript;Python;SQL;HTML;CSS
89392|United States|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|90000.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
87160|Israel|Moderately satisfied|Computer science, computer engineering, or software engineering|88224.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C++;C#;Java;JavaScript;SQL;TypeScript;Visual Basic 6;HTML;CSS;Bash/Shell
83898|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|18785.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Erlang;JavaScript;Python;R;HTML;CSS
74443|India|Slightly satisfied|Computer science, computer engineering, or software engineering|10175.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|JavaScript;TypeScript;HTML;CSS
3225|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|62418.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C#;Groovy;Java;Objective-C;Rust;Scala;SQL;TypeScript;VBA;Kotlin;HTML;CSS;Bash/Shell
69151|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|61194.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Go;Java;JavaScript;SQL;Kotlin;HTML;CSS;Bash/Shell
81460|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|13872.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;Java;JavaScript;HTML;CSS
49856|Norway|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|63762.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;TypeScript;HTML
73628|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|95000.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript
94405|United Kingdom|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|56951.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
44672|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|133000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;Java;JavaScript;Matlab;Python;HTML;CSS;Bash/Shell
13496|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|129000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C#;Objective-C;Swift;Bash/Shell
25950|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|46507.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Java;Python;TypeScript
59871|United Kingdom|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|55562.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
60380|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|185000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;CoffeeScript;Java;JavaScript;Perl;PHP;Python;SQL;TypeScript;VBA;HTML;CSS;Bash/Shell
67897|India|Moderately satisfied|Computer science, computer engineering, or software engineering|11268.0|I don't typically exercise|Male|South Asian|Primary/elementary school|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;PHP;SQL;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
72422|Ukraine|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|18000.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;Clojure;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
21772|Russian Federation|Moderately satisfied|Computer science, computer engineering, or software engineering|28656.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;SQL;HTML;CSS
41981|India|Moderately satisfied|Computer science, computer engineering, or software engineering|7984.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|SQL
80258|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|20351.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Java;JavaScript;R;Scala;SQL;TypeScript
27245|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|190000.0|1 - 2 times per week|Male|East Asian;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C;C++;Java;Python;Bash/Shell
64672|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|23808.0|3 - 4 times per week|Female|Hispanic or Latino/Latina|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java
98427|Belgium|Moderately satisfied|Computer science, computer engineering, or software engineering|33780.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C++;C#;Java;HTML;CSS
28588|Romania|Moderately satisfied|Information systems, information technology, or system administration|48955.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|SQL
67274|Malta|Moderately satisfied|Computer science, computer engineering, or software engineering|22032.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;Java;Python
81522|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|174000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Go;Java;JavaScript;HTML;CSS;Bash/Shell
89855|Germany|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|61680.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|45 - 54 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;Perl;PHP;SQL;HTML;CSS;Bash/Shell
61348|Germany|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|46992.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|R
43880|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|400044.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;Java;JavaScript;PHP;SQL;HTML;CSS
91547|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|86676.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS
52029|United States|Moderately satisfied|Information systems, information technology, or system administration|124500.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|JavaScript;Perl;SQL;HTML;CSS;Bash/Shell
67308|Colombia|Slightly satisfied|Information systems, information technology, or system administration|7176.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;SQL
4784|Lithuania|Moderately satisfied|Computer science, computer engineering, or software engineering|42504.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP
65690|Canada|Slightly dissatisfied|Computer science, computer engineering, or software engineering|48313.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C;Go;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
3878|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|122100.0|I don't typically exercise|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;HTML;CSS
91650|India|Moderately satisfied|Computer science, computer engineering, or software engineering|3500.0|Daily or almost every day|Male|East Asian|They never completed any formal education|3 - 4 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;Python;HTML;CSS
62947|Turkey|Moderately satisfied|Computer science, computer engineering, or software engineering|26544.0|I don't typically exercise|Male|Middle Eastern;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;HTML;CSS
39517|United Kingdom|Slightly dissatisfied|Web development or web design|52783.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS
82665|Turkey|Slightly dissatisfied|Computer science, computer engineering, or software engineering|38148.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|35 - 44 years old|Less than a year ago|C#;Go;JavaScript;Ruby
11342|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|33120.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Java;Kotlin
69446|Canada|Extremely dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|112730.0|1 - 2 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|Groovy;Java;Bash/Shell
97228|Latvia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|29376.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C#;JavaScript;HTML;CSS
71761|India|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|5636.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Python;HTML;CSS
64513|United Kingdom|Extremely satisfied|Mathematics or statistics|33615.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;SQL;TypeScript;HTML;CSS
51916|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|107000.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|55 - 64 years old|More than 4 years ago|C;C#;JavaScript;Julia;Objective-C;SQL;TypeScript;HTML
760|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|99468.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;Go;Groovy;Java;JavaScript;Objective-C;Python;Ruby;Swift;Kotlin;HTML;CSS;Bash/Shell
23513|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|66000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;Bash/Shell
24905|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|31764.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;C#
67756|Pakistan|Moderately satisfied|Computer science, computer engineering, or software engineering|9756.0|1 - 2 times per week|Female|Middle Eastern;South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;Java;JavaScript;Python;HTML;CSS
95633|United States|Moderately dissatisfied|A social science (ex. anthropology, psychology, political science)|95000.0|3 - 4 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Python;SQL;TypeScript;HTML;CSS
76889|Nigeria|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|5004.0|I don't typically exercise|Male|Black or of African descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
74425|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|76000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;JavaScript;Rust;Bash/Shell
66673|United States|Slightly satisfied|Information systems, information technology, or system administration|117000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Java;Perl;SQL;Bash/Shell
37862|Australia|Extremely satisfied|Computer science, computer engineering, or software engineering|112762.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Python;SQL;TypeScript;HTML;CSS
28600|United Kingdom|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|62507.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Python;Ruby;Scala;Kotlin
48883|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|35244.0|3 - 4 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|More than 4 years ago|Groovy;Java;JavaScript
13234|Hungary|Slightly satisfied|Computer science, computer engineering, or software engineering|40392.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;C++;Java;JavaScript;Lua;Perl;SQL
39646|United States|Slightly dissatisfied|A social science (ex. anthropology, psychology, political science)|1164000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;HTML;CSS;Bash/Shell
95524|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|102000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;Python;SQL;TypeScript;VB.NET;HTML;CSS;Bash/Shell
81448|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|125014.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Groovy;Java;Python;Scala;HTML;CSS;Bash/Shell
327|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|23440.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;VBA;VB.NET;Visual Basic 6;HTML
70748|Ireland|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|44060.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Haskell;Java;Matlab;Ruby;Scala;Bash/Shell
34422|Iran, Islamic Republic of...|Moderately dissatisfied|Information systems, information technology, or system administration|36000.0|I don't typically exercise|Male|Middle Eastern|They never completed any formal education|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java
53513|Italy|Moderately dissatisfied|Computer science, computer engineering, or software engineering|29373.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;VBA;HTML;CSS;Bash/Shell
19630|Italy|Moderately dissatisfied|Computer science, computer engineering, or software engineering|64866.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Groovy;Java;Python;SQL;Cobol;Bash/Shell
96390|South Africa|Slightly satisfied|Computer science, computer engineering, or software engineering|54384.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;TypeScript;HTML;CSS
48420|Czech Republic|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|27804.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Python;VBA;Bash/Shell
75954|Denmark|Moderately satisfied|Mathematics or statistics|49308.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Matlab;Python;R;Bash/Shell
37201|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|47000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
54106|Netherlands|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|68537.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;Scala;SQL;Swift;HTML;CSS
95701|United States|Slightly dissatisfied|I never declared a major|90000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;HTML;CSS;Bash/Shell
10317|Portugal|Slightly satisfied|Computer science, computer engineering, or software engineering|14688.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
39800|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|95000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Python;SQL;CSS
22566|Canada|Moderately dissatisfied|Computer science, computer engineering, or software engineering|96626.0|I don't typically exercise|Female|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
66207|United Kingdom|Moderately dissatisfied|Computer science, computer engineering, or software engineering|38893.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;HTML;CSS
66788|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|118068.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;Ruby;Kotlin
11559|Switzerland|Extremely satisfied|Computer science, computer engineering, or software engineering|83416.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
88541|Poland|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|63516.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Python;R;Scala
24620|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|76514.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Swift
54979|Qatar|Slightly dissatisfied|Computer science, computer engineering, or software engineering|120000.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
53442|India|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|18780.0|Daily or almost every day|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|PHP;Python;SQL;HTML;CSS;Bash/Shell
13237|Canada|Slightly dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|48313.0|Daily or almost every day|Female|Native American, Pacific Islander, or Indigenous Australian;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
46824|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|3756.0|I don't typically exercise|Male|South Asian|They never completed any formal education|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
90267|United States|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|2000000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|55 - 64 years old|Less than a year ago|C;Go;Perl;PHP;SQL;Bash/Shell
97711|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|79973.0|3 - 4 times per week|Male|East Asian;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Ruby;HTML;CSS
47043|Japan|Moderately dissatisfied|Information systems, information technology, or system administration|54023.0|Daily or almost every day|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|CoffeeScript;JavaScript;PHP;Ruby;HTML;CSS;Bash/Shell
78240|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|63642.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;Python;R;SQL;TypeScript;HTML;CSS
27054|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|135000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|CoffeeScript;Haskell;Java;JavaScript;Ruby;HTML;CSS;Bash/Shell
20656|United States|Slightly satisfied|A business discipline (ex. accounting, finance, marketing)|70000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS
85667|United Republic of Tanzania|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|37500.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS
4746|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|73433.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;Java;JavaScript;SQL;HTML
78606|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|20000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;Lua;Matlab;Python;Bash/Shell
37621|India|Slightly satisfied|Computer science, computer engineering, or software engineering|4692.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;Java;JavaScript;PHP;SQL;VB.NET;HTML;CSS
30340|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|1000000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;PHP;SQL;HTML
35729|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|9706.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Objective-C;Swift
95852|Ukraine|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|18000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;SQL
10997|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|130000.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;Groovy;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
78878|India|Moderately satisfied|Computer science, computer engineering, or software engineering|7200.0|I don't typically exercise|Male|East Asian|Primary/elementary school|Over 4 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
95197|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|68500.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
58025|Australia|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|123959.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;Objective-C;Ruby;Swift;Bash/Shell
6660|Romania|Extremely dissatisfied|Computer science, computer engineering, or software engineering|58752.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Swift;Kotlin
66063|Myanmar|Slightly dissatisfied|Computer science, computer engineering, or software engineering|6000.0|3 - 4 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Groovy;Java;JavaScript;HTML;CSS;Bash/Shell
96035|Denmark|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|52597.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Swift;Ocaml;HTML;CSS
96482|France|Moderately satisfied|Computer science, computer engineering, or software engineering|121164.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Java;JavaScript;Perl;Python;Ruby;Rust;Scala;SQL;Swift;Bash/Shell
38046|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|142000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Lua;Python;HTML;CSS
64294|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|150000.0|1 - 2 times per week|Female|South Asian;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;Python;SQL;TypeScript
98973|Germany|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|55075.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;HTML
14782|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|70000.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C++;CoffeeScript;Java;JavaScript;SQL;TypeScript;HTML;CSS
95338|United States|Moderately satisfied|Mathematics or statistics|75000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C;Python;R;SQL;HTML;CSS;Bash/Shell
33297|Netherlands|Slightly dissatisfied|Computer science, computer engineering, or software engineering|48955.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java
19466|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|114596.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Clojure;Ruby
9944|Brazil|Slightly satisfied|Computer science, computer engineering, or software engineering|11604.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;TypeScript;HTML;CSS
26164|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|50000.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
44463|Canada|Slightly dissatisfied|Information systems, information technology, or system administration|60391.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Ruby;SQL;HTML;CSS
69530|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|10175.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;HTML;CSS
92572|Austria|Extremely satisfied|Web development or web design|82000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C;C#;JavaScript;Objective-C;PHP;Swift;TypeScript;VB.NET;HTML
51971|Denmark|Moderately satisfied|Computer science, computer engineering, or software engineering|887580.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C++;C#;SQL;VB.NET
7075|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|45624.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C++;Java;JavaScript;Lua;Python;R;Bash/Shell
16088|Germany|Moderately satisfied|Mathematics or statistics|117492.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;Rust
64501|Russian Federation|Extremely satisfied|Computer science, computer engineering, or software engineering|31848.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Assembly;C++;Go;Java;JavaScript;Lua;PHP;Python;Scala;SQL;TypeScript;Bash/Shell
75367|United States|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|45000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;Go;Groovy;Ruby;Bash/Shell
32729|India|Moderately dissatisfied|Information systems, information technology, or system administration|26400.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;Python;SQL
60772|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|68040.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;Java;Python;Cobol
39437|Brazil|Extremely dissatisfied|Computer science, computer engineering, or software engineering|32127.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
7580|Netherlands|Slightly dissatisfied|A business discipline (ex. accounting, finance, marketing)|85671.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Objective-C;Python;Ruby;Swift
80738|Romania|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|34680.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;JavaScript;Python
81401|India|Extremely satisfied|Computer science, computer engineering, or software engineering|8448.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;TypeScript;HTML;CSS
14902|Australia|Extremely dissatisfied|Computer science, computer engineering, or software engineering|99967.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|Between 1 and 2 years ago|C#;JavaScript;R;SQL;TypeScript;HTML;CSS
90240|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|57200.0|Daily or almost every day|Male;Transgender|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|More than 4 years ago|C#;JavaScript;Python;SQL;VB.NET;HTML;CSS;Bash/Shell
53894|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|112400.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;Bash/Shell
49337|Canada|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|76495.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;HTML;CSS
84518|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|160000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Go;Groovy;Java;JavaScript
19477|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|23652.0|I don't typically exercise|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java
66518|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|66089.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|More than 4 years ago|JavaScript;Python;Ruby;Scala;Swift;TypeScript
36045|United States|Extremely satisfied|Information systems, information technology, or system administration|115000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
71740|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|6000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Java;Lua;PHP;SQL;HTML;CSS;Bash/Shell
33005|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|49032.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS
30951|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|150000.0|3 - 4 times per week|Male|Black or of African descent;East Asian;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;Erlang;Go;Haskell;Java;JavaScript;Rust;Scala;TypeScript;Bash/Shell
75510|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|21000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;C#;JavaScript;Python;SQL;VBA;HTML;CSS;Bash/Shell
35833|France|Moderately dissatisfied|Computer science, computer engineering, or software engineering|125124.0|3 - 4 times per week|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C++;Erlang;Go;Haskell;Java;JavaScript;Matlab;Perl;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
27692|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|76397.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;TypeScript
57718|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|91791.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
64887|Bangladesh|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|5160.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS
17525|Austria|Extremely satisfied|Computer science, computer engineering, or software engineering|122388.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;Swift;VBA;VB.NET;HTML;CSS
47020|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|135000.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Java;Objective-C;Swift;Kotlin
45879|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|29373.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;Go;Java;JavaScript;Objective-C;PHP;SQL;Swift;Bash/Shell
35576|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|115000.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|CoffeeScript;JavaScript;Python;Ruby;HTML;CSS;Bash/Shell
19380|Finland|Moderately satisfied|Computer science, computer engineering, or software engineering|44064.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Go;Java;JavaScript;PHP;R;SQL;Swift;HTML;CSS
10047|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|80000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Objective-C;SQL;Swift;TypeScript;HTML;CSS
9651|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|28000.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
29455|Germany|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|67313.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;R;SQL;HTML;CSS
22209|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|144000.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|Over 4 hours|45 - 54 years old|More than 4 years ago|JavaScript;SQL
84041|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|200000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;Clojure;Erlang;Java;JavaScript;Ruby;SQL;HTML;Bash/Shell
98497|United States|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|65000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;HTML;CSS
47708|Mexico|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|12888.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;CoffeeScript;JavaScript;Python;Ruby;SQL;HTML;CSS
72530|India|Extremely dissatisfied|Computer science, computer engineering, or software engineering|2820.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;JavaScript;PHP;SQL;HTML;CSS
10826|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|75000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
14597|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|154000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C++;C#;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
22936|United Kingdom|Moderately satisfied|Mathematics or statistics|27781.0|1 - 2 times per week|Male;Transgender|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;JavaScript;Matlab;R;HTML;CSS;Bash/Shell
12276|Iran, Islamic Republic of...|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|1200.0|1 - 2 times per week|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;C#;JavaScript;Python;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
59073|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|60000.0|1 - 2 times per week|Female|Black or of African descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Ruby;SQL;HTML;CSS
51487|France|Slightly satisfied|Computer science, computer engineering, or software engineering|41612.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
76565|Libyan Arab Jamahiriya|Extremely satisfied|Computer science, computer engineering, or software engineering|3900.0|I don't typically exercise|Male|Middle Eastern|They never completed any formal education|3 - 4 hours|45 - 54 years old|More than 4 years ago|C;C++;C#;JavaScript;SQL;VB.NET;Delphi/Object Pascal;HTML;CSS
90914|United States|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|90000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Go;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
85308|India|Extremely satisfied|Computer science, computer engineering, or software engineering|6576.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Java;Python
75575|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|58000.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Associate degree|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;Python;HTML;CSS
74877|Canada|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|74885.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|45 - 54 years old|More than 4 years ago|C++;C#;Java;JavaScript;Objective-C;PHP;Python;SQL;VBA;Bash/Shell
94611|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|94000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Assembly;Python
52323|France|Moderately dissatisfied|Computer science, computer engineering, or software engineering|30840.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Java;JavaScript;PHP;Python;SQL;VB.NET;HTML;CSS;Bash/Shell
22692|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|56460.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Groovy;Java;SQL;Bash/Shell
54589|India|Moderately satisfied|Computer science, computer engineering, or software engineering|18780.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Java;JavaScript;Matlab;Python;SQL;HTML;CSS
26327|France|Slightly satisfied|Information systems, information technology, or system administration|42836.0|1 - 2 times per week|Male|Black or of African descent;White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Groovy;Java;SQL;HTML;CSS
93266|Belgium|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|73433.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|55 - 64 years old|More than 4 years ago|C;C#;SQL;HTML;CSS
109|Azerbaijan|Slightly satisfied|A business discipline (ex. accounting, finance, marketing)|144.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|3 - 4 hours|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
1923|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|70000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
13094|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|51983.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Java;Python
397|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|2000000.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;Matlab;Python;Bash/Shell
64244|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|31000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Java;JavaScript;PHP;Python;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS
71846|Ukraine|Extremely satisfied|Computer science, computer engineering, or software engineering|45096.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C++;Go;Java;Objective-C;Python;Swift;Kotlin
41972|Belarus|Moderately satisfied|Information systems, information technology, or system administration|32664.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C++;C#;Java;JavaScript;SQL;HTML;CSS
44613|Italy|Moderately satisfied|Computer science, computer engineering, or software engineering|42836.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;Erlang;Groovy;Java;JavaScript;Objective-C;Perl;PHP;Python;Scala;Delphi/Object Pascal;Bash/Shell
72477|Ecuador|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|3600.0|I don't typically exercise|Female|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;Java;JavaScript;PHP;Python;R;SQL;HTML;CSS
28306|Thailand|Slightly satisfied|Information systems, information technology, or system administration|293736.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C++
20960|Brazil|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|77979.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS
33696|Australia|Moderately dissatisfied|Computer science, computer engineering, or software engineering|119960.0|3 - 4 times per week|Male|Middle Eastern|Primary/elementary school|1 - 2 hours|35 - 44 years old|Less than a year ago|JavaScript;Objective-C;Swift;HTML;CSS
20381|United Kingdom|Extremely satisfied|Web development or web design|29170.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;CoffeeScript;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
69430|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|29376.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;Python;SQL;HTML;CSS
28143|Poland|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|24702.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;SQL;VBA;VB.NET;HTML;Bash/Shell
9309|Australia|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|83172.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;C#;Java;JavaScript;PHP;Python;SQL;TypeScript;VBA;HTML;CSS;Bash/Shell
67341|United States|Extremely satisfied|Web development or web design|103000.0|1 - 2 times per week|Male;Transgender|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;Visual Basic 6;HTML;CSS
46142|India|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|150288.0|Daily or almost every day|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;SQL;TypeScript;HTML;CSS
99337|United States|Moderately dissatisfied|A social science (ex. anthropology, psychology, political science)|58000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|45 - 54 years old|More than 4 years ago|C++;C#;Java;HTML;CSS
30203|France|Moderately dissatisfied|Web development or web design|33780.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;CoffeeScript;Java;JavaScript;Perl;PHP;Ruby;Rust;Swift;TypeScript;HTML;CSS;Bash/Shell
47879|India|Moderately satisfied|Computer science, computer engineering, or software engineering|18785.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;SQL;TypeScript;HTML;CSS
72708|Pakistan|Moderately satisfied|Computer science, computer engineering, or software engineering|32532.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;Python;SQL;TypeScript;Bash/Shell
3285|Singapore|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|56779.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;Python;SQL;TypeScript;HTML;CSS
14443|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|10140.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#
10877|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|96626.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript
49168|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|150000.0|3 - 4 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Groovy;JavaScript;Python;HTML;CSS;Bash/Shell
37287|United Kingdom|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|852876.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|SQL
71744|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|38184.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
71432|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|110000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|45 - 54 years old|Between 2 and 4 years ago|Groovy;Java;SQL;VBA
1517|Peru|Slightly dissatisfied|Computer science, computer engineering, or software engineering|88000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;CoffeeScript;Erlang;Haskell;Java;JavaScript;Lua;Matlab;Perl;Python;R;Ruby;SQL;HTML;CSS;Bash/Shell
97131|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|110000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Ruby;SQL;HTML;CSS
25292|Bulgaria|Moderately satisfied|Mathematics or statistics|26400.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Python;SQL;HTML
90855|South Africa|Slightly dissatisfied|Information systems, information technology, or system administration|62304.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;JavaScript;PHP;R;Delphi/Object Pascal;HTML;CSS
34211|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|90000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|55 - 64 years old|More than 4 years ago|C++;C#;Java;JavaScript;Python;SQL;Swift;HTML;CSS;Bash/Shell
99837|Serbia|Moderately satisfied|Computer science, computer engineering, or software engineering|20556.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C++;JavaScript;Objective-C;PHP;Python;SQL;Swift;HTML;CSS;Bash/Shell
40262|Ethiopia|Extremely dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|6972.0|1 - 2 times per week|Male|Black or of African descent|Associate degree|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python;TypeScript
14284|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|70000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;Java;JavaScript;Matlab;Python;R;SQL;HTML;CSS;Bash/Shell
22957|Australia|Extremely satisfied|Computer science, computer engineering, or software engineering|111963.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;TypeScript
79645|Spain|Extremely satisfied|Computer science, computer engineering, or software engineering|367164.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;TypeScript;HTML;CSS;Bash/Shell
3646|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|JavaScript;SQL;VB.NET;HTML;CSS
61098|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|80776.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Assembly;C;C++;Java;JavaScript;Objective-C;SQL;Swift;HTML;CSS;Bash/Shell
13504|United States|Moderately dissatisfied|Information systems, information technology, or system administration|60000.0|Daily or almost every day|Female;Transgender|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;SQL;Delphi/Object Pascal;HTML;CSS
80749|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|80772.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;SQL;HTML
39006|France|Slightly satisfied|Computer science, computer engineering, or software engineering|122388.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;F#;TypeScript
86376|France|Moderately satisfied|Computer science, computer engineering, or software engineering|55075.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript
99104|Russian Federation|Slightly dissatisfied|Computer science, computer engineering, or software engineering|10620.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|18 - 24 years old|More than 4 years ago|C;C++;JavaScript;Matlab;Python;SQL;Visual Basic 6;HTML;CSS
15503|India|Extremely satisfied|Computer science, computer engineering, or software engineering|11268.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|JavaScript
27374|Canada|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|82132.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;Python;SQL;Bash/Shell
58214|Brazil|Moderately satisfied|Information systems, information technology, or system administration|1000000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;HTML;CSS
11804|United Kingdom|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|45838.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;JavaScript;Ruby;HTML;CSS;Bash/Shell
575|Ireland|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|63642.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;TypeScript;HTML;CSS
10770|Portugal|Extremely satisfied|Computer science, computer engineering, or software engineering|38552.0|I don't typically exercise|Male|White or of European descent|They never completed any formal education|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;Go;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
78807|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|80000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;HTML;CSS;Bash/Shell
4004|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|63516.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;Python;TypeScript;HTML;CSS
1599|China|Extremely dissatisfied|Computer science, computer engineering, or software engineering|60000.0|Daily or almost every day|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;C#;Java;JavaScript;PHP;SQL;HTML;CSS
45525|Brazil|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|29076.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;Bash/Shell
100475|Russian Federation|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|42456.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;HTML;CSS
69472|Portugal|Slightly satisfied|Computer science, computer engineering, or software engineering|41124.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C;C++;CoffeeScript;Erlang;JavaScript;PHP;Ruby;Rust;SQL;HTML;CSS
71422|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|17640.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;JavaScript;PHP;Python;HTML;CSS
2676|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;Python;Scala;SQL;HTML;CSS;Bash/Shell
7309|Australia|Neither satisfied nor dissatisfied|A natural science (ex. biology, chemistry, physics)|121560.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
94688|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|0.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;F#;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
1628|India|Slightly satisfied|Computer science, computer engineering, or software engineering|281784.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
28843|United States|Moderately satisfied|A health science (ex. nursing, pharmacy, radiology)|120000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;JavaScript;Python;SQL;TypeScript;VBA
25238|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|84000.0|Daily or almost every day|Male|Native American, Pacific Islander, or Indigenous Australian;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Python;R;SQL;HTML;CSS
80971|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|90000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
37329|Australia|Slightly satisfied|Computer science, computer engineering, or software engineering|59980.0|1 - 2 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;CoffeeScript;JavaScript;Ruby;HTML;CSS
21234|Australia|Moderately satisfied|Mathematics or statistics|63979.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C++;Java;JavaScript;Python;R;SQL;Swift;Kotlin;CSS
84373|United States|Slightly dissatisfied|A social science (ex. anthropology, psychology, political science)|1020000.0|1 - 2 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;TypeScript;HTML;CSS;Bash/Shell
84281|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|15132.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Python;TypeScript;HTML;CSS
50496|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|29000.0|Daily or almost every day|Female|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;Java;Matlab;Python;SQL
65661|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|120000.0|Daily or almost every day|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;Ruby;HTML;CSS
58900|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;HTML;CSS;Bash/Shell
63868|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|80000.0|I don't typically exercise|Male|South Asian|Associate degree|3 - 4 hours|25 - 34 years old|Less than a year ago|C++;Java;JavaScript;SQL;HTML;CSS
4324|Germany|Moderately dissatisfied|Information systems, information technology, or system administration|734328.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;PHP;HTML;CSS
84821|France|Slightly satisfied|A health science (ex. nursing, pharmacy, radiology)|36716.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C;Java;JavaScript;Objective-C;PHP;Ruby;SQL;Swift;VBA;VB.NET;Visual Basic 6;Kotlin;HTML;CSS;Bash/Shell
6165|Russian Federation|Moderately satisfied|Web development or web design|8850.0|Daily or almost every day|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
28879|Austria|Extremely dissatisfied|Computer science, computer engineering, or software engineering|79552.0|1 - 2 times per week|Male|Middle Eastern|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;Python;R;TypeScript;HTML;CSS
92117|France|Extremely satisfied|Web development or web design|14688.0|1 - 2 times per week|Male|Black or of African descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;Java;JavaScript;PHP;Python;Scala;SQL;HTML;CSS;Bash/Shell
14978|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|100000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;Java;JavaScript;Objective-C;Python;Ruby;SQL;Swift;HTML;CSS;Bash/Shell
41310|Italy|Moderately satisfied|Computer science, computer engineering, or software engineering|26436.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Objective-C;PHP;SQL;Swift;HTML;CSS
73845|Hungary|Moderately satisfied|Computer science, computer engineering, or software engineering|34296.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;Groovy;Java;JavaScript;Ruby;HTML;CSS;Bash/Shell
31973|Czech Republic|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|40536.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;Lua;Python;SQL;HTML;CSS;Bash/Shell
52154|Turkey|Slightly dissatisfied|Computer science, computer engineering, or software engineering|8004.0|I don't typically exercise|Male|Middle Eastern;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS
48208|Iran, Islamic Republic of...|Extremely satisfied|Computer science, computer engineering, or software engineering|0.0|I don't typically exercise|Male|Middle Eastern|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|18 - 24 years old|I've never had a job|Assembly;C;C++;Java;Python;SQL;HTML;CSS;Bash/Shell
61588|Italy|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|22032.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|55 - 64 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS
96446|Croatia|Moderately satisfied|Computer science, computer engineering, or software engineering|25656.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Python
11514|Australia|Extremely dissatisfied|A business discipline (ex. accounting, finance, marketing)|47984.0|3 - 4 times per week|Female|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|JavaScript;PHP;Ruby;SQL;HTML;CSS
22740|Bangladesh|Moderately satisfied|Computer science, computer engineering, or software engineering|1444.0|3 - 4 times per week|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;SQL;TypeScript;HTML
739|Iran, Islamic Republic of...|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|20000.0|1 - 2 times per week|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
51724|Czech Republic|Slightly satisfied|Computer science, computer engineering, or software engineering|17376.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Java
93728|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|110000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C;C++;C#;Java;JavaScript;SQL;Kotlin;Bash/Shell
53978|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|42000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Go;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
75843|South Korea|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|26352.0|I don't typically exercise|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Ruby;TypeScript;HTML;CSS
60446|India|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|23482.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
52330|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|50904.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
17298|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|52783.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#
95882|India|Slightly satisfied|Computer science, computer engineering, or software engineering|3756.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;SQL;HTML;CSS
99565|Australia|Extremely dissatisfied|A natural science (ex. biology, chemistry, physics)|84497.0|1 - 2 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;Python;R;HTML;CSS
9849|Sri Lanka|Extremely satisfied|Computer science, computer engineering, or software engineering|11700.0|3 - 4 times per week|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|18 - 24 years old|I've never had a job|C++;C#;Java;JavaScript;PHP;SQL;HTML;CSS
2586|United States|Moderately satisfied|Mathematics or statistics|57000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;Perl;R;Bash/Shell
47087|Canada|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|32209.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|R;SQL
20326|Viet Nam|Slightly satisfied|Computer science, computer engineering, or software engineering|3600.0|I don't typically exercise|Male|East Asian|Some college/university study without earning a degree|3 - 4 hours|18 - 24 years old|Less than a year ago|C++;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
35251|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|62000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
27230|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|62507.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
10395|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|93500.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
4138|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|43482.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;C#;Python;SQL;HTML;CSS;Bash/Shell
56644|Canada|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|44609.0|1 - 2 times per week|Female|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL
30890|India|Extremely satisfied|Computer science, computer engineering, or software engineering|16437.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
19432|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|60000.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;Java;JavaScript;Perl;Python;SQL;HTML;CSS;Bash/Shell
3|United Kingdom|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|70841.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;Python;Bash/Shell
99139|Turkey|Moderately dissatisfied|Computer science, computer engineering, or software engineering|23844.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP
28919|Israel|Moderately satisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;Python;R;SQL;TypeScript
83780|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|14976.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;SQL;Bash/Shell
54688|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|690000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Ruby;HTML;CSS;Bash/Shell
24765|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|110000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;TypeScript
96527|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|70985.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Ruby;SQL
12130|United States|Slightly satisfied|A social science (ex. anthropology, psychology, political science)|30000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Python;R;HTML
11832|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|44449.0|1 - 2 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;SQL;HTML;CSS;Bash/Shell
57366|Germany|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|1000000.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Perl;SQL;HTML;CSS;Bash/Shell
70359|Other Country (Not Listed Above)|Moderately satisfied|Computer science, computer engineering, or software engineering|12480.0|I don't typically exercise|Female|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C++;Java;JavaScript;Matlab;PHP;Python;SQL;Visual Basic 6;HTML;CSS
32452|United Kingdom|Slightly dissatisfied|Web development or web design|33.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;HTML;CSS
81220|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|85000.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;Groovy;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
54378|Egypt|Slightly dissatisfied|Computer science, computer engineering, or software engineering|1800.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|More than 4 years ago|C;C++;C#;SQL;VBA;Visual Basic 6;HTML;CSS;Bash/Shell
12328|Norway|Moderately satisfied|Information systems, information technology, or system administration|53560.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
72867|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|96000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;Scala;TypeScript;Bash/Shell
81698|Algeria|Slightly dissatisfied|Computer science, computer engineering, or software engineering|4728.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;Matlab;PHP;Python;SQL;Delphi/Object Pascal;HTML;CSS
19984|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|79552.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS
54322|Czech Republic|Moderately satisfied|Computer science, computer engineering, or software engineering|28956.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Perl;PHP;Python;SQL;HTML;CSS;Bash/Shell
25522|United Kingdom|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|70841.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
65851|Australia|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|103965.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;VBA;HTML;CSS;Bash/Shell
3119|Ireland|Moderately satisfied|Computer science, computer engineering, or software engineering|88119.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Go;Haskell;Java;JavaScript;R;Scala;SQL;Bash/Shell
22065|United States|Extremely dissatisfied|I never declared a major|98000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;Bash/Shell
89450|Argentina|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|30000.0|1 - 2 times per week|Female|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;SQL;HTML;Bash/Shell
21867|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|41671.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;C#
98905|Japan|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|120000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|JavaScript;Ruby;HTML;CSS
93735|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|30000.0|3 - 4 times per week|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C++;JavaScript;Python;R;SQL;HTML;CSS;Bash/Shell
65710|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|100000.0|3 - 4 times per week|Male|Black or of African descent;East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
50835|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|70000.0|3 - 4 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|CoffeeScript;Clojure;Java;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
40989|Ukraine|Slightly satisfied|Computer science, computer engineering, or software engineering|48000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C++;Java;JavaScript;Objective-C;Python;TypeScript;Kotlin;HTML;CSS;Bash/Shell
89218|United States|Moderately dissatisfied|Information systems, information technology, or system administration|95000.0|I don't typically exercise|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Ruby;SQL
69039|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|17640.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;C#;Haskell;Java;JavaScript;Python;Scala;Kotlin;HTML;CSS;Bash/Shell
96869|United States|Moderately satisfied|I never declared a major|90000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
37945|Hungary|Slightly satisfied|Computer science, computer engineering, or software engineering|35724.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;Erlang;Java;JavaScript;Matlab;Objective-C;Python;SQL;Swift;Kotlin;HTML;CSS;Bash/Shell
3472|Ukraine|Slightly satisfied|Computer science, computer engineering, or software engineering|12108.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;SQL
60176|Serbia|Extremely satisfied|Computer science, computer engineering, or software engineering|8808.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;SQL
32041|Malaysia|Slightly satisfied|Mathematics or statistics|19116.0|I don't typically exercise|Female|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C;Java;JavaScript;Objective-C;Swift;HTML;CSS
25425|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|136000.0|Daily or almost every day|Female|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Go;Java;Python;Bash/Shell
74236|United States|Extremely dissatisfied|A humanities discipline (ex. literature, history, philosophy)|55000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;Objective-C;R;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
68601|United Kingdom|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|716748.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;Perl;Python;Bash/Shell
6077|Sweden|Extremely dissatisfied|A natural science (ex. biology, chemistry, physics)|52404.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;Python;SQL;Bash/Shell
101576|United States|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|80000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;PHP;SQL;TypeScript;VB.NET;HTML;CSS
85084|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|109500.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;HTML;CSS
38647|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|180000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C++;JavaScript;Lua;Python;TypeScript;Bash/Shell
71593|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|32000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C#
28195|United States|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|225000.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Python;SQL;HTML;Bash/Shell
45129|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|52872.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Python;SQL;TypeScript;Kotlin;HTML;CSS;Bash/Shell
100511|Ireland|Moderately satisfied|Computer science, computer engineering, or software engineering|85671.0|Daily or almost every day|Female|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;Hack;Haskell;Lua;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
23379|Croatia|Slightly satisfied|Computer science, computer engineering, or software engineering|30588.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
99897|United States|Moderately satisfied|Mathematics or statistics|150000.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|CoffeeScript;JavaScript;Python;R;SQL;HTML;Bash/Shell
38054|Belarus|Slightly dissatisfied|Computer science, computer engineering, or software engineering|9684.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
13361|Australia|Moderately dissatisfied|A business discipline (ex. accounting, finance, marketing)|134352.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Clojure;Groovy;Java;JavaScript;Matlab;Python;SQL;Bash/Shell
3552|India|Extremely satisfied|Computer science, computer engineering, or software engineering|9396.0|Daily or almost every day|Male|South Asian|Primary/elementary school|Over 4 hours|18 - 24 years old|Less than a year ago|JavaScript;PHP;SQL;Swift;TypeScript;HTML;CSS
74771|United States|Extremely satisfied|Web development or web design|108600.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS
14129|Spain|Extremely satisfied|Information systems, information technology, or system administration|97910.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;Scala
9178|Russian Federation|Slightly satisfied|Computer science, computer engineering, or software engineering|8496.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;C#;Java;Objective-C;Python;SQL;Swift
50265|Brazil|Extremely satisfied|Computer science, computer engineering, or software engineering|26196.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;C#;Python;Ruby;TypeScript;Bash/Shell
67284|Venezuela, Bolivarian Republic of...|Moderately satisfied|Information systems, information technology, or system administration|1000000.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
27361|Albania|Slightly dissatisfied|Computer science, computer engineering, or software engineering|35244.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;HTML;CSS
32211|Canada|Slightly satisfied|Computer science, computer engineering, or software engineering|64417.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Erlang;Java;Scala;Swift
92596|United States|Moderately satisfied|Mathematics or statistics|90000.0|Daily or almost every day|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python
68693|United States|Moderately satisfied|Mathematics or statistics|2600.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;Python;HTML;CSS
13475|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|56460.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C++;C#;CoffeeScript;Java;JavaScript;SQL;HTML;CSS
73635|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|104030.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;Java;Python;Scala;SQL
83171|Bangladesh|Slightly dissatisfied|Computer science, computer engineering, or software engineering|2892.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C;C++;Java;PHP;SQL;HTML;CSS
42916|Poland|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|21876.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Java;SQL
14854|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|118366.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Assembly;C;C++;C#;Groovy;Java;JavaScript;Lua;Python;TypeScript;HTML;CSS;Bash/Shell
69500|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|50179.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|JavaScript;TypeScript;HTML;CSS;Bash/Shell
90282|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|19236.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;C#;Java;JavaScript;TypeScript;HTML
78866|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|106000.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++
61575|France|Moderately satisfied|Computer science, computer engineering, or software engineering|36716.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|55 - 64 years old|Between 2 and 4 years ago|PHP;SQL;HTML;CSS
36229|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|104678.0|1 - 2 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|Java;Python;Kotlin;HTML;CSS;Bash/Shell
73482|United States|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|125000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|45 - 54 years old|Less than a year ago|Java;JavaScript;SQL;VBA;HTML;CSS;Bash/Shell
100806|Iran, Islamic Republic of...|Moderately satisfied|Computer science, computer engineering, or software engineering|2328.0|Daily or almost every day|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|35 - 44 years old|Between 2 and 4 years ago|C#;SQL;Visual Basic 6;HTML;CSS
93854|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|88000.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|Go;Groovy;Java;JavaScript;Perl;Rust;SQL;TypeScript;Kotlin;HTML;CSS;Bash/Shell
1491|Australia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|36468.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;C#;Java;JavaScript;Python;HTML;CSS;Bash/Shell
78846|Belarus|Moderately dissatisfied|Computer science, computer engineering, or software engineering|34800.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java
46475|Germany|Extremely satisfied|Information systems, information technology, or system administration|67560.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|CoffeeScript;Java;JavaScript;Python;Ruby;SQL;CSS;Bash/Shell
16524|China|Moderately satisfied|Computer science, computer engineering, or software engineering|20568.0|1 - 2 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Python;R;SQL;TypeScript;HTML;CSS
23659|Canada|Extremely satisfied|Mathematics or statistics|64417.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|CoffeeScript;Go;JavaScript;Lua;PHP;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
55797|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|31948.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;JavaScript;SQL;VB.NET;Visual Basic 6;HTML;CSS
53683|United Kingdom|Moderately satisfied|Web development or web design|69452.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;Kotlin;HTML;CSS;Bash/Shell
67567|United States|Moderately satisfied|Information systems, information technology, or system administration|63000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;Cobol;HTML;CSS;Bash/Shell
65905|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|68000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Perl;Ruby;Rust;HTML;CSS;Bash/Shell
52846|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|41000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|More than 4 years ago|C++;C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS
74298|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|100000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
11565|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|60000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;Haskell;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
13432|China|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|31788.0|1 - 2 times per week|Female;Transgender;Non-binary, genderqueer, or gender non-conforming|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Groovy;Java;JavaScript;Python;HTML;CSS;Bash/Shell
16723|Russian Federation|Slightly dissatisfied|Mathematics or statistics|12732.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Java;JavaScript;SQL
2380|Serbia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|27276.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Java
51735|Poland|Moderately dissatisfied|Computer science, computer engineering, or software engineering|59988.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
80999|United States|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|82000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java;JavaScript;PHP;SQL;Bash/Shell
4046|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|119058.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Haskell;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
77052|United States|Moderately satisfied|Web development or web design|10000.0|1 - 2 times per week|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Java;PHP;SQL;Swift;HTML;CSS
33532|India|Slightly satisfied|Web development or web design|4512.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;PHP;SQL;VBA;VB.NET;HTML;CSS
43376|United Kingdom|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|150012.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;Python;Ruby;HTML;CSS
72696|Russian Federation|Moderately satisfied|Information systems, information technology, or system administration|21228.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;PHP;TypeScript;HTML;CSS
29028|Canada|Slightly satisfied|Computer science, computer engineering, or software engineering|66027.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;Visual Basic 6
39401|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|82500.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
94400|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|66674.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C++;C#;JavaScript;Lua;SQL;TypeScript;HTML;CSS;Bash/Shell
51679|United States|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|101000.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|PHP;Ruby;Scala;SQL;TypeScript;HTML;CSS
67118|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|73433.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Haskell;JavaScript;Python;Rust;Scala;SQL;HTML;CSS;Bash/Shell
2423|India|Moderately satisfied|Information systems, information technology, or system administration|2820.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|PHP;Python
92180|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|155000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|45 - 54 years old|Less than a year ago|Erlang;JavaScript;Python;Ruby;SQL;HTML;CSS;Bash/Shell
1381|Brazil|Slightly dissatisfied|Information systems, information technology, or system administration|37428.0|Daily or almost every day|Male|White or of European descent|They never completed any formal education|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Perl;PHP;SQL;TypeScript;VBA;VB.NET;Visual Basic 6;HTML;CSS
18603|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|75000.0|1 - 2 times per week|Male|South Asian|Associate degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;Objective-C;Swift;HTML;CSS
74152|Australia|Extremely satisfied|Computer science, computer engineering, or software engineering|15000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;Go;Java;JavaScript;Python;TypeScript;HTML;CSS;Bash/Shell
33569|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|190000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Java;JavaScript;Python;HTML;CSS
25229|Other Country (Not Listed Above)|Moderately satisfied|Computer science, computer engineering, or software engineering|30600.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|PHP;SQL;Delphi/Object Pascal;HTML
50720|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|125000.0|I don't typically exercise|Male|Black or of African descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Go;Lua;Perl;Python;SQL
51356|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|101383.0|1 - 2 times per week|Female|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;SQL;HTML;CSS;Bash/Shell
6774|Hong Kong (S.A.R.)|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|130896.0|I don't typically exercise|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|I've never had a job|Assembly;C#;Erlang;Java;JavaScript;Objective-C;PHP;Python;SQL;TypeScript;HTML;CSS
94763|United States|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|43000.0|1 - 2 times per week|Female|Black or of African descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;HTML;CSS
66432|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|19464.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript
100060|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|100000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#
47630|United States|Moderately satisfied|Mathematics or statistics|262000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|45 - 54 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML
47544|United States|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|55000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;Python;SQL;VB.NET;HTML;CSS;Bash/Shell
59201|New Zealand|Moderately satisfied|Computer science, computer engineering, or software engineering|87701.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|Go;JavaScript;Lua;PHP;Python;SQL;HTML;CSS;Bash/Shell
48597|France|Moderately satisfied|Information systems, information technology, or system administration|38184.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C++;Java;JavaScript;SQL;TypeScript;Visual Basic 6;HTML;CSS
70671|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|140000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;JavaScript;Objective-C;Ruby;Swift;HTML;CSS;Bash/Shell
58427|Argentina|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|26400.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
70505|Finland|Moderately dissatisfied|A business discipline (ex. accounting, finance, marketing)|64620.0|I don't typically exercise|Male|White or of European descent|Associate degree|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;HTML;CSS
71718|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|180000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|55 - 64 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Python;Ruby;Scala;SQL;Bash/Shell
31961|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|84000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
69533|India|Moderately satisfied|Computer science, computer engineering, or software engineering|5640.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|JavaScript;PHP;Python;HTML;CSS
91590|Germany|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|85671.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;PHP;Python;HTML;CSS;Bash/Shell
32597|Japan|Moderately satisfied|Computer science, computer engineering, or software engineering|0.0|Daily or almost every day|Male|White or of European descent|Associate degree|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Ruby;HTML;CSS;Bash/Shell
73273|India|Moderately satisfied|Computer science, computer engineering, or software engineering|20000.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;PHP;Python;SQL;VB.NET;HTML;CSS
60219|Hong Kong (S.A.R.)|Slightly satisfied|Computer science, computer engineering, or software engineering|67351.0|I don't typically exercise|Male|East Asian;South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C;C++;JavaScript;Python;TypeScript;Ocaml;Bash/Shell
98153|Australia|Extremely dissatisfied|A business discipline (ex. accounting, finance, marketing)|51983.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Ruby;SQL;HTML;CSS
51967|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|185400.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;F#
44558|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|51408.0|I don't typically exercise|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;PHP;TypeScript;HTML;CSS;Bash/Shell
43523|Germany|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|40388.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|R
68343|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|63979.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|45 - 54 years old|Between 1 and 2 years ago|C;CoffeeScript;JavaScript;Perl;PHP;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
70062|United States|Extremely satisfied|Information systems, information technology, or system administration|70000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Python;R;SQL
79309|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|160000.0|I don't typically exercise|Male|Black or of African descent|Primary/elementary school|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;Python;SQL;TypeScript;HTML;CSS
71745|Indonesia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|6984.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C;C++;C#;Java;JavaScript;PHP;SQL;TypeScript;VB.NET;Visual Basic 6;Kotlin;Delphi/Object Pascal;HTML;CSS
62008|Austria|Extremely satisfied|Computer science, computer engineering, or software engineering|22032.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Java;JavaScript;Python;Swift;Bash/Shell
941|United States|Neither satisfied nor dissatisfied|I never declared a major|72000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;VB.NET;HTML;CSS;Bash/Shell
52581|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|1000000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Go;Java;JavaScript;Python;Rust;HTML;CSS;Bash/Shell
69528|Bangladesh|Moderately satisfied|Computer science, computer engineering, or software engineering|10824.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Python
9141|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|70000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;C#;F#;Java;Python
100803|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|70000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;Python;HTML;CSS
487|Australia|Slightly satisfied|Computer science, computer engineering, or software engineering|87971.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C++;C#;JavaScript;SQL;TypeScript;HTML;CSS
92012|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|110000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;Objective-C;SQL;HTML;CSS;Bash/Shell
67184|Spain|Extremely satisfied|Computer science, computer engineering, or software engineering|24478.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Primary/elementary school|Over 4 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;PHP;Python;Delphi/Object Pascal;HTML;CSS;Bash/Shell
40645|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|175384.0|I don't typically exercise|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|55 - 64 years old|Less than a year ago|C;C++;Objective-C;Python
7842|Poland|Slightly satisfied|I never declared a major|12348.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;JavaScript;Lua;TypeScript;HTML;CSS;Bash/Shell
54102|India|Extremely satisfied|Computer science, computer engineering, or software engineering|18785.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Go;Java;PHP;Python;TypeScript;HTML;CSS
12334|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|37572.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;Python
5549|Hungary|Moderately satisfied|Computer science, computer engineering, or software engineering|32160.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C#;Java;JavaScript;SQL;TypeScript;HTML;CSS
85263|Australia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|63979.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Between 1 and 2 years ago|C;C++;Java;Objective-C;SQL;Swift
94464|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|280000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;Java;JavaScript;Lua;Objective-C;Python;R;Ruby;Rust;SQL;HTML;CSS;Bash/Shell
53082|Japan|Extremely dissatisfied|Computer science, computer engineering, or software engineering|54293.0|1 - 2 times per week|Male|East Asian|They never completed any formal education|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
43419|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|20592.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;Python;SQL;HTML;CSS;Bash/Shell
60065|Russian Federation|Slightly satisfied|Computer science, computer engineering, or software engineering|50400.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;CSS;Bash/Shell
51539|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|45528.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|More than 4 years ago|Java;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
45478|Canada|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|70054.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Python;SQL;CSS
93300|India|Slightly satisfied|Computer science, computer engineering, or software engineering|6576.0|1 - 2 times per week|Female|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;SQL
24330|Sri Lanka|Moderately satisfied|Computer science, computer engineering, or software engineering|16200.0|I don't typically exercise|Male|South Asian|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;SQL;TypeScript;HTML;CSS
63727|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|1440000.0|3 - 4 times per week|Female|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Python;SQL;HTML;CSS;Bash/Shell
96429|Liechtenstein|Extremely satisfied|Information systems, information technology, or system administration|0.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;JavaScript;Python;SQL;Swift;TypeScript;HTML;CSS
28342|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|35768.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;C#;Haskell;Java;Scala;SQL;Swift;HTML;CSS
80964|Argentina|Extremely satisfied|Computer science, computer engineering, or software engineering|14400.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;Python;TypeScript;HTML;CSS
49057|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|50005.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;PHP;TypeScript;HTML;CSS
49447|United Kingdom|Slightly dissatisfied|A natural science (ex. biology, chemistry, physics)|53061.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Python;R;SQL;Bash/Shell
24085|Nigeria|Moderately dissatisfied|Mathematics or statistics|2664.0|I don't typically exercise|Male|Black or of African descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;PHP;TypeScript;HTML;CSS
59755|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|55075.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;Python;HTML;CSS
14849|United States|Extremely satisfied|I never declared a major|120000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;R;SQL;TypeScript;VB.NET;HTML;CSS
34164|Philippines|Extremely satisfied|Computer science, computer engineering, or software engineering|18192.0|1 - 2 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C++;C#;Java;JavaScript;PHP;SQL;HTML;CSS
71508|Sweden|Slightly dissatisfied|Computer science, computer engineering, or software engineering|89832.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;F#;Java;Bash/Shell
18933|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|96000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Go;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
30031|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|135441.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;C++;C#;Lua;Matlab;Python;Bash/Shell
68789|Japan|Slightly dissatisfied|Information systems, information technology, or system administration|39257.0|1 - 2 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;Go;Java;JavaScript;Matlab;PHP;Swift;VBA;HTML
22841|Poland|Extremely satisfied|Computer science, computer engineering, or software engineering|35292.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
54999|Portugal|Slightly satisfied|Mathematics or statistics|73433.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;JavaScript;SQL;HTML;CSS;Bash/Shell
34076|United States|Moderately dissatisfied|A humanities discipline (ex. literature, history, philosophy)|82000.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
71431|Ukraine|Moderately dissatisfied|Computer science, computer engineering, or software engineering|14400.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Groovy;Java;Scala
70262|Switzerland|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|625620.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|65 years or older|More than 4 years ago|C;JavaScript;Perl;PHP;Ruby;HTML;CSS;Bash/Shell
5280|France|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|42836.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;SQL;Delphi/Object Pascal;HTML;CSS
101502|France|Moderately satisfied|Computer science, computer engineering, or software engineering|55075.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;Kotlin;HTML;CSS
47205|United Kingdom|Moderately dissatisfied|I never declared a major|62507.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;Rust;SQL;HTML;CSS;Bash/Shell
41513|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|2000000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;HTML;CSS
41433|Germany|Extremely dissatisfied|Computer science, computer engineering, or software engineering|85671.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;SQL;TypeScript;VB.NET;HTML;Bash/Shell
87857|Turkey|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|22248.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;SQL;Delphi/Object Pascal;HTML;CSS
69492|Poland|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|70572.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;R;Ruby;SQL;HTML;CSS;Bash/Shell
85880|United States|Moderately satisfied|I never declared a major|145000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Haskell;Java;JavaScript;Python;Scala;SQL;Bash/Shell
19053|Philippines|Moderately satisfied|Information systems, information technology, or system administration|15360.0|3 - 4 times per week|Male|East Asian|They never completed any formal education|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;VB.NET
28210|India|Slightly satisfied|Computer science, computer engineering, or software engineering|3756.0|Daily or almost every day|Female;Male|South Asian|Primary/elementary school|1 - 2 hours|18 - 24 years old|Less than a year ago|Assembly;Java;JavaScript;PHP;Python;SQL;HTML;CSS
21359|Switzerland|Slightly satisfied|Computer science, computer engineering, or software engineering|65064.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;C#;Java;JavaScript;PHP;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
89756|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|160000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;Objective-C;Ruby;Swift;HTML;CSS;Bash/Shell
12505|South Korea|Slightly satisfied|Information systems, information technology, or system administration|80000.0|I don't typically exercise|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;Objective-C;PHP;Python;SQL;Swift;Bash/Shell
13283|Norway|Moderately dissatisfied|Information systems, information technology, or system administration|765138.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C#;Python;SQL;TypeScript;Bash/Shell
20770|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|100652.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Clojure;Java;Ruby;SQL;Ocaml;HTML;CSS;Bash/Shell
15281|Brazil|Extremely dissatisfied|Computer science, computer engineering, or software engineering|22452.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Python
20489|Bangladesh|Slightly satisfied|Computer science, computer engineering, or software engineering|21660.0|3 - 4 times per week|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Scala;SQL;TypeScript;HTML;CSS;Bash/Shell
2941|Canada|Slightly satisfied|Computer science, computer engineering, or software engineering|74885.0|I don't typically exercise|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|Java;JavaScript;HTML;CSS;Bash/Shell
5875|Nigeria|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|4164.0|3 - 4 times per week|Male|Black or of African descent|Professional degree (JD, MD, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS
30029|Brazil|Moderately satisfied|Web development or web design|11232.0|I don't typically exercise|Male|Black or of African descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;PHP;SQL;Kotlin;HTML;CSS
84753|China|Moderately satisfied|Computer science, computer engineering, or software engineering|82592.0|3 - 4 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Ruby;SQL;Swift;HTML;CSS
9193|Paraguay|Extremely dissatisfied|Computer science, computer engineering, or software engineering|200000.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;Objective-C;PHP;Python;SQL;Swift;HTML;CSS
60144|France|Moderately satisfied|Computer science, computer engineering, or software engineering|50179.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;JavaScript;Objective-C;Python;SQL;HTML;CSS;Bash/Shell
21376|Russian Federation|Slightly satisfied|Computer science, computer engineering, or software engineering|10620.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|PHP;Ruby;HTML;CSS
55750|Ireland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|85671.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;CoffeeScript;JavaScript;Ruby;SQL;TypeScript;HTML;CSS
52650|Russian Federation|Moderately satisfied|Information systems, information technology, or system administration|12732.0|3 - 4 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|18 - 24 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
7045|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|58340.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
74974|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|200000.0|3 - 4 times per week|Female|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C#;Java;Objective-C;PHP;Python;Ruby;SQL;Swift;VBA;VB.NET;Visual Basic 6
48918|Denmark|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|89148.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;Python;Delphi/Object Pascal
96692|Brazil|Slightly satisfied|Computer science, computer engineering, or software engineering|21336.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Ruby;SQL;HTML;CSS
23466|Germany|Moderately satisfied|Information systems, information technology, or system administration|16884.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C++;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
16315|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|45876.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C++;C#;Objective-C;Python;Ruby;SQL;Swift
64699|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|71000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;JavaScript;TypeScript;HTML;CSS
1225|United States|Moderately dissatisfied|A business discipline (ex. accounting, finance, marketing)|170000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
6917|France|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|58752.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|45 - 54 years old|Less than a year ago|Assembly;C;SQL;Delphi/Object Pascal;HTML;Bash/Shell
42719|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|89175.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|45 - 54 years old|More than 4 years ago|Java;JavaScript;SQL;HTML;CSS
44316|Norway|Moderately dissatisfied|Information systems, information technology, or system administration|77789.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|Groovy;JavaScript;Lua;Perl;HTML;CSS
41163|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|156000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Assembly;C;Java;Python;HTML;Bash/Shell
57059|Russian Federation|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|34176.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java
71567|France|Slightly dissatisfied|Computer science, computer engineering, or software engineering|51408.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;TypeScript;Kotlin;HTML;CSS;Bash/Shell
80244|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|82000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
40583|Brazil|Moderately dissatisfied|Computer science, computer engineering, or software engineering|22452.0|1 - 2 times per week|Male|Black or of African descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;HTML;CSS
63877|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|62000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;TypeScript;HTML
75721|United States|Moderately satisfied|Mathematics or statistics|120000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|45 - 54 years old|Between 1 and 2 years ago|JavaScript;SQL;Bash/Shell
9044|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|100000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Python;R;SQL;HTML;Bash/Shell
94033|Poland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|28236.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
21842|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|63979.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Python;Bash/Shell
25412|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|1800000.0|1 - 2 times per week|Female|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|JavaScript;Perl;PHP;Python;SQL;HTML;CSS;Bash/Shell
5637|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|145000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;PHP;SQL;VB.NET;HTML;CSS
81885|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|76514.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|45 - 54 years old|Between 2 and 4 years ago|Java;SQL;TypeScript;HTML;CSS
23811|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|36720.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Go;Java;JavaScript;Lua;Objective-C;Perl;PHP;Python;Rust;Swift
8491|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|155000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Clojure;Python;Ruby
22497|Russian Federation|Moderately satisfied|Computer science, computer engineering, or software engineering|14856.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Assembly;Groovy;Java;SQL;Bash/Shell
54105|United Kingdom|Moderately dissatisfied|Computer science, computer engineering, or software engineering|55562.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
34938|Brazil|Moderately dissatisfied|Web development or web design|33684.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
3527|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;SQL
33264|United States|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|88000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|45 - 54 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS
99086|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|100000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
73875|Pakistan|Extremely satisfied|Computer science, computer engineering, or software engineering|18000.0|1 - 2 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;TypeScript;Kotlin
52562|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;VB.NET;HTML;CSS
58428|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|135000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|55 - 64 years old|Between 2 and 4 years ago|Perl;Python
62328|Germany|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|17628.0|3 - 4 times per week|Male|Middle Eastern;White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;Java;JavaScript;Matlab;PHP;SQL
31791|Ireland|Moderately satisfied|Mathematics or statistics|64254.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
99681|United Kingdom|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|88899.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;Matlab;Python;HTML;CSS;Bash/Shell
49150|France|Moderately satisfied|Computer science, computer engineering, or software engineering|22320.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;Lua;PHP;Python;SQL;TypeScript;VBA;HTML;CSS;Bash/Shell
2590|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|137000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;Ruby;SQL;HTML;CSS
34691|Denmark|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|69036.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;Lua;Python;Bash/Shell
47689|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|56673.0|I don't typically exercise|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;PHP;Python;HTML;CSS;Bash/Shell
28311|France|Slightly dissatisfied|A business discipline (ex. accounting, finance, marketing)|48955.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;HTML;CSS
73456|Finland|Extremely satisfied|Computer science, computer engineering, or software engineering|63642.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Clojure;Java;JavaScript;Scala;SQL;HTML;CSS;Bash/Shell
86363|Italy|Slightly satisfied|Computer science, computer engineering, or software engineering|44060.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;PHP;Python;Ruby;HTML;CSS;Bash/Shell
41676|France|Moderately dissatisfied|Computer science, computer engineering, or software engineering|45732.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Python;Scala;TypeScript;HTML;CSS
30328|Australia|Slightly satisfied|Computer science, computer engineering, or software engineering|71976.0|3 - 4 times per week|Female|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;Java
49531|Belarus|Slightly satisfied|Computer science, computer engineering, or software engineering|8472.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|Python;SQL
1395|Brazil|Slightly satisfied|Information systems, information technology, or system administration|9360.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;Python;SQL;HTML;CSS
63102|Australia|Extremely satisfied|Computer science, computer engineering, or software engineering|127957.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Clojure;JavaScript;Objective-C;Python;SQL;Swift;HTML;CSS;Bash/Shell
64911|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|966768.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;Java;JavaScript;SQL;HTML;CSS
39116|China|Slightly dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|13092.0|1 - 2 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Python;HTML;CSS
90189|India|Slightly satisfied|Computer science, computer engineering, or software engineering|2256.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|JavaScript;HTML;CSS
44567|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|122388.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;SQL;VBA;VB.NET;HTML;CSS
17871|United States|Slightly satisfied|Information systems, information technology, or system administration|58000.0|1 - 2 times per week|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
97417|Belarus|Moderately dissatisfied|Computer science, computer engineering, or software engineering|30000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C++;C#;SQL
93613|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|38337.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;C#;CoffeeScript;Java;JavaScript;Matlab;PHP;Python;SQL;TypeScript;VB.NET;HTML;CSS;Bash/Shell
28193|United Kingdom|Neither satisfied nor dissatisfied|A natural science (ex. biology, chemistry, physics)|173650.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Less than a year ago|C;Java;Objective-C;Swift;Kotlin;HTML
57405|Spain|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|32979.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;Python;Bash/Shell
96255|Spain|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|24478.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS
56472|Finland|Moderately satisfied|Mathematics or statistics|71232.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;Groovy;Java;JavaScript;PHP;Python;SQL;TypeScript;HTML
83120|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|61194.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
99052|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|67313.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;SQL
66979|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|92000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;Clojure;F#;Go;JavaScript;SQL;TypeScript
31119|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|173650.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Objective-C;Swift
38899|Israel|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|64944.0|I don't typically exercise|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Objective-C;Python;SQL;Swift;HTML;CSS
80757|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|30559.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Groovy;Java;JavaScript;Scala;Swift;Kotlin;Ocaml;Bash/Shell
62003|United States|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|87000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;Java;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
89038|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|822444.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Objective-C;HTML;CSS
23672|Ecuador|Slightly satisfied|Computer science, computer engineering, or software engineering|42000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Groovy;Java;JavaScript;Objective-C;SQL;TypeScript;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
49372|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|48000.0|1 - 2 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;HTML;CSS
22513|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|17592.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
64426|Spain|Moderately satisfied|Information systems, information technology, or system administration|29373.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;SQL
77327|India|Moderately satisfied|Computer science, computer engineering, or software engineering|15888.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
68270|India|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|6951.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;TypeScript;HTML;CSS
19324|Canada|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|32209.0|I don't typically exercise|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;C#;Java;JavaScript;Julia;Matlab;PHP;Python;Bash/Shell
78291|Sweden|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|56591.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;Java;JavaScript;Ruby;SQL
19125|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|62507.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Go;Java;JavaScript;Python;HTML;CSS
2404|Australia|Slightly satisfied|Information systems, information technology, or system administration|63835.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;Perl;PHP;Python;SQL;HTML;CSS;Bash/Shell
84046|France|Extremely satisfied|Computer science, computer engineering, or software engineering|35988.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;PHP;HTML;CSS
89877|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|67000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|35 - 44 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
84796|India|Slightly satisfied|Computer science, computer engineering, or software engineering|5256.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Objective-C;Swift
10333|El Salvador|Slightly dissatisfied|Computer science, computer engineering, or software engineering|9432.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C#;Python;VB.NET;Visual Basic 6
35830|Mexico|Moderately dissatisfied|Web development or web design|13536.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;PHP;SQL;TypeScript;VB.NET;HTML;CSS
56268|Canada|Extremely dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|201303.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;Haskell;JavaScript;Matlab;Python;SQL;VB.NET;HTML;CSS;Bash/Shell
33451|United States|Extremely satisfied|Information systems, information technology, or system administration|92000.0|Daily or almost every day|Male|White or of European descent|Associate degree|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
81|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|73428.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C;C++;C#;Java;JavaScript;VB.NET;HTML;CSS;Bash/Shell
58242|Bangladesh|Slightly satisfied|Computer science, computer engineering, or software engineering|2604.0|I don't typically exercise|Female|East Asian|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS
16314|Nigeria|Moderately dissatisfied|Computer science, computer engineering, or software engineering|3096.0|I don't typically exercise|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;SQL;HTML;CSS
48723|Canada|Slightly dissatisfied|Computer science, computer engineering, or software engineering|96626.0|1 - 2 times per week|Female|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;Perl;HTML
19428|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|71500.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Objective-C;Python;SQL;Swift;TypeScript;Kotlin;HTML;CSS;Bash/Shell
2382|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|57400.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C;Java;Python;Ruby
75427|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|88000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
37441|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|106000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|Python;R;SQL;Bash/Shell
25755|Netherlands|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|61194.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Matlab;Python;Ruby;HTML;CSS
2367|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Java
81005|Russian Federation|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|24000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Python;TypeScript;HTML;CSS;Bash/Shell
6976|United States|Slightly dissatisfied|A social science (ex. anthropology, psychology, political science)|60060.0|1 - 2 times per week|Female|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;R;SQL;VBA;HTML;CSS
51524|France|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|46507.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;SQL;Bash/Shell
67784|Switzerland|Extremely dissatisfied|Computer science, computer engineering, or software engineering|62556.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;R
91089|Poland|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|44111.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|45 - 54 years old|More than 4 years ago|JavaScript;Lua;PHP;Python;SQL;HTML;CSS;Bash/Shell
98712|France|Moderately dissatisfied|Web development or web design|666744.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS
11126|India|Slightly satisfied|Computer science, computer engineering, or software engineering|10958.0|Daily or almost every day|Male|South Asian|Primary/elementary school|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;Python;TypeScript;HTML;CSS;Bash/Shell
41240|Singapore|Slightly satisfied|Computer science, computer engineering, or software engineering|54504.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;Objective-C;PHP;Python;SQL;HTML;CSS;Bash/Shell
71104|Switzerland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|112611.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;Java
16345|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|155000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Less than a year ago|C;C++;C#;Go;Groovy;Java;JavaScript;Lua;Objective-C;Perl;PHP;Python;SQL;TypeScript;VB.NET;HTML;CSS;Bash/Shell
48980|Canada|Slightly dissatisfied|Computer science, computer engineering, or software engineering|30598.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;C#;JavaScript;SQL;HTML;CSS
4495|Netherlands|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|105253.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C;C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS
101524|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|80000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Go;JavaScript;Python;SQL;TypeScript;Bash/Shell
96543|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
51342|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|40000.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Assembly;C;C++;C#;JavaScript;Lua;Objective-C;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
41205|Poland|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|32460.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;SQL;Bash/Shell
89555|Spain|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|35492.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;C#
9323|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|90000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS
94866|Italy|Moderately satisfied|Computer science, computer engineering, or software engineering|39164.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Go;Java
46524|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|225000.0|I don't typically exercise|Male|East Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|45 - 54 years old|Less than a year ago|C++;Java;Python;R;Scala;Bash/Shell
12942|India|Slightly satisfied|Computer science, computer engineering, or software engineering|28961.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python;SQL;HTML;CSS
28200|United Kingdom|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|58340.0|3 - 4 times per week|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;R
75631|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|112730.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
14693|Viet Nam|Slightly satisfied|Computer science, computer engineering, or software engineering|7200.0|I don't typically exercise|Male|Native American, Pacific Islander, or Indigenous Australian|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|PHP;Python;Ruby;HTML
84818|Belarus|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|6048.0|I don't typically exercise|Female|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;SQL;Kotlin
56038|Canada|Moderately dissatisfied|Computer science, computer engineering, or software engineering|58781.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;C++;C#;Java;JavaScript;SQL;VBA;HTML
11653|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|70000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Go;Python;Ruby;SQL;Kotlin;HTML;CSS;Bash/Shell
87536|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|345000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
1790|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|60000.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
39829|United States|Moderately dissatisfied|Mathematics or statistics|75000.0|I don't typically exercise|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|PHP;Python
8186|United States|Moderately dissatisfied|Mathematics or statistics|100000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Python;SQL;HTML;Bash/Shell
34981|Australia|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|53582.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|Java;SQL;Bash/Shell
570|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|34726.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;Scala;SQL;HTML;CSS
9385|Romania|Moderately dissatisfied|Mathematics or statistics|10284.0|I don't typically exercise|Male|White or of European descent|Associate degree|3 - 4 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;C#;Java;Matlab
21140|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|6012.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C#;Java;JavaScript;Ruby
63173|United States|Moderately satisfied|Mathematics or statistics|66000.0|3 - 4 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;C#;JavaScript;PHP;Python;R;Ruby;SQL;VBA;Visual Basic 6;HTML;CSS
74670|Russian Federation|Moderately satisfied|Information systems, information technology, or system administration|33972.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
2813|Spain|Moderately dissatisfied|A humanities discipline (ex. literature, history, philosophy)|35988.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|Between 1 and 2 years ago|JavaScript;PHP;Ruby;SQL;HTML;CSS
24634|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|80000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C;C#;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
30790|Poland|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|40584.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|PHP;Python;Ruby;HTML;CSS;Bash/Shell
19820|Costa Rica|Slightly satisfied|Computer science, computer engineering, or software engineering|45000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|More than 4 years ago|Java;JavaScript;SQL;HTML;CSS;Bash/Shell
6792|France|Moderately satisfied|Computer science, computer engineering, or software engineering|0.0|3 - 4 times per week|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Scala;SQL;CSS;Bash/Shell
50772|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|35244.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
21268|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|58340.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS
16814|Switzerland|Extremely satisfied|Computer science, computer engineering, or software engineering|93842.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;Java;JavaScript;Lua;Perl;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
78559|Brazil|Slightly dissatisfied|Mathematics or statistics|524016.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|55 - 64 years old|More than 4 years ago|Java;JavaScript;PHP;SQL;Cobol;HTML;CSS;Bash/Shell
13456|Australia|Slightly satisfied|Mathematics or statistics|111963.0|I don't typically exercise|Male|East Asian|Professional degree (JD, MD, etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|C;C++;R;SQL;Bash/Shell
82479|United States|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|64000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C;Java;JavaScript;PHP;Python;SQL;HTML;CSS
12687|United States|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|85000.0|1 - 2 times per week|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|R;SQL;HTML
95004|United States|Extremely satisfied|Information systems, information technology, or system administration|84000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;HTML
68560|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|50000.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;Go;Haskell;Java;Python;Ruby;HTML;CSS;Bash/Shell
73332|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|25003.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS
35379|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|82000.0|1 - 2 times per week|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C++;Java;JavaScript;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
490|Ireland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|48955.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Go;Groovy;JavaScript;Python;Ruby;SQL;HTML;CSS;Bash/Shell
87076|United Kingdom|Moderately satisfied|I never declared a major|44449.0|I don't typically exercise|Male|White or of European descent|They never completed any formal education|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
79639|India|Moderately satisfied|Web development or web design|5640.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;Java;JavaScript;PHP;HTML;CSS
15904|Nepal|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|1176.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;Matlab;PHP;SQL;HTML;CSS
51794|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|48616.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;SQL;Kotlin
63047|Australia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|59980.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;Groovy;PHP;SQL;VB.NET;HTML;CSS
42429|Germany|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|30597.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Python;R;Scala
32414|France|Extremely satisfied|Computer science, computer engineering, or software engineering|153000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;F#;JavaScript;PHP;SQL;TypeScript;HTML;CSS
4503|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|122388.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#
7602|Netherlands|Slightly dissatisfied|Computer science, computer engineering, or software engineering|44064.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
72122|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|170000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Bash/Shell
3013|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|70000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;C#;Clojure;Java;JavaScript;PHP;Python;Ruby;SQL;HTML;CSS
62829|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|79973.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Groovy;JavaScript;Python;Ruby;Bash/Shell
5123|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|78000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Go;Groovy;Java;Python;Scala;Bash/Shell
88781|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|51408.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Haskell;Java;JavaScript;PHP;Python;Scala;SQL;Bash/Shell
63483|United States|Slightly dissatisfied|A humanities discipline (ex. literature, history, philosophy)|110.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|55 - 64 years old|Between 2 and 4 years ago|R;SQL;VBA;VB.NET;HTML
16053|India|Extremely dissatisfied|Computer science, computer engineering, or software engineering|9393.0|I don't typically exercise|Male|South Asian|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|C#;JavaScript;Python;HTML;CSS;Bash/Shell
69725|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|51403.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
10999|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Lua;TypeScript;HTML;CSS;Bash/Shell
83532|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|87140.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;C++;Java;Perl;SQL;Bash/Shell
76724|Switzerland|Moderately satisfied|Web development or web design|145977.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
85116|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|73433.0|1 - 2 times per week|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Scala
20951|United Kingdom|Slightly dissatisfied|I never declared a major|60423.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
60284|Sweden|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|1000000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|Less than a year ago|C++;Java;Python;HTML
22627|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|126000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
20435|India|Slightly satisfied|Computer science, computer engineering, or software engineering|15588.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Assembly;JavaScript;Python;SQL;HTML;CSS
72885|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|49000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;Python;Ruby;SQL;HTML;CSS
32001|Estonia|Moderately satisfied|Computer science, computer engineering, or software engineering|33780.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
62735|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|85000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
5375|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|35292.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;HTML;CSS;Bash/Shell
42856|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|0.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|PHP;R;SQL;HTML
48911|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|128000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;Java;JavaScript;Python;Rust;TypeScript;HTML;CSS;Bash/Shell
57001|Sweden|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|45960.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;Python;HTML;CSS;Bash/Shell
66260|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|125000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|Assembly;C;Go;Haskell;Rust;SQL;HTML;Bash/Shell
73890|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|145000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|55 - 64 years old|Between 1 and 2 years ago|SQL;Bash/Shell
76127|France|Extremely satisfied|Computer science, computer engineering, or software engineering|63642.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Clojure;Go;Python;SQL
19519|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|50000.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
60684|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|85000.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
87223|India|Moderately satisfied|Computer science, computer engineering, or software engineering|16152.0|3 - 4 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
70924|Russian Federation|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|16980.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;Python
14094|Ukraine|Slightly dissatisfied|Computer science, computer engineering, or software engineering|37200.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
66626|Pakistan|Slightly satisfied|Information systems, information technology, or system administration|36000.0|Daily or almost every day|Male|South Asian|Professional degree (JD, MD, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;Java
60140|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|130000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Go;Java;JavaScript;Scala;SQL;Bash/Shell
91030|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|1000000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|C;Go;Ruby;Bash/Shell
53954|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|55075.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Python
95445|Belgium|Extremely dissatisfied|Computer science, computer engineering, or software engineering|122388.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Java;JavaScript;Python;Swift
12183|Italy|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|63642.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;PHP;Rust;SQL;Bash/Shell
44304|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|138000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Bash/Shell
77250|Brazil|Slightly dissatisfied|Information systems, information technology, or system administration|13104.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS
79913|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|136000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;JavaScript;Objective-C;Perl;Python;Ruby;Rust;Swift;HTML;CSS;Bash/Shell
78332|India|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|187848.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Python;SQL;Bash/Shell
28716|United States|Slightly satisfied|A social science (ex. anthropology, psychology, political science)|180000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Groovy;Java;JavaScript;HTML;CSS;Bash/Shell
84879|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|85000.0|1 - 2 times per week|Female|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|45 - 54 years old|More than 4 years ago|JavaScript;SQL;VB.NET;HTML;CSS
28120|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|2160.0|1 - 2 times per week|Male|South Asian|Primary/elementary school|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Java
50021|Russian Federation|Slightly satisfied|Computer science, computer engineering, or software engineering|37800.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
100789|Bosnia and Herzegovina|Slightly dissatisfied|Information systems, information technology, or system administration|31705.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;Java;JavaScript;SQL;HTML;CSS
90390|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|100000.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Groovy;Java;JavaScript;PHP;Ruby;SQL;TypeScript;HTML;CSS
16471|United Kingdom|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|152794.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C++;Hack;Java;JavaScript;Python;HTML
24464|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|98000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
88527|Ecuador|Moderately satisfied|Computer science, computer engineering, or software engineering|21600.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;Matlab;Python;SQL;HTML;CSS;Bash/Shell
6695|United Kingdom|Moderately satisfied|Information systems, information technology, or system administration|23336.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|More than 4 years ago|JavaScript;Lua;PHP;SQL;Delphi/Object Pascal;HTML;CSS
90321|Finland|Extremely satisfied|Computer science, computer engineering, or software engineering|55075.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Java;JavaScript;PHP;Scala;HTML;CSS
29047|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|300000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;Java;JavaScript;PHP;SQL;VBA;VB.NET;HTML
97644|India|Extremely satisfied|Computer science, computer engineering, or software engineering|3756.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Java;JavaScript;Ruby;SQL;HTML;CSS
4160|United States|Neither satisfied nor dissatisfied|Mathematics or statistics|60000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|SQL;HTML;CSS
99606|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|140000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;SQL;CSS;Bash/Shell
55512|Portugal|Moderately satisfied|Computer science, computer engineering, or software engineering|15864.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C#;Java;JavaScript;Swift
50338|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|145000.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|45 - 54 years old|Between 2 and 4 years ago|Groovy;JavaScript;Python;Bash/Shell
81234|Portugal|Moderately dissatisfied|Web development or web design|22275.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;Lua;Matlab;Objective-C;PHP;SQL;HTML;CSS
40875|Germany|Moderately satisfied|Information systems, information technology, or system administration|383074.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
72137|India|Moderately satisfied|Computer science, computer engineering, or software engineering|8448.0|Daily or almost every day|Male|South Asian|Primary/elementary school|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;HTML;CSS
20875|India|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|11268.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
73453|Czech Republic|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|23172.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;HTML;CSS
73300|United States|Slightly satisfied|Information systems, information technology, or system administration|50000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
41867|Philippines|Moderately satisfied|Computer science, computer engineering, or software engineering|500.0|1 - 2 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Over 4 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;JavaScript;PHP;SQL;VB.NET;Visual Basic 6;HTML;CSS
43320|New Zealand|Slightly dissatisfied|Computer science, computer engineering, or software engineering|86000.0|Daily or almost every day|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Scala;SQL;HTML;CSS
20538|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|110000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Ruby;HTML;CSS;Bash/Shell
85535|United States|Moderately dissatisfied|Mathematics or statistics|80000.0|Daily or almost every day|Female;Transgender|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Objective-C;Python;SQL;Swift;HTML;CSS
29774|Spain|Slightly dissatisfied|Computer science, computer engineering, or software engineering|22030.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
46476|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|56376.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java
24181|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|107500.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|45 - 54 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
17184|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|95000.0|3 - 4 times per week|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Swift;Kotlin
4356|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|75000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
57826|United States|Moderately satisfied|Mathematics or statistics|86000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;CoffeeScript;JavaScript;R;TypeScript;HTML;CSS;Bash/Shell
2031|Serbia|Moderately satisfied|Computer science, computer engineering, or software engineering|5880.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|CoffeeScript;Go;JavaScript;HTML;CSS
534|France|Extremely satisfied|Computer science, computer engineering, or software engineering|39776.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Go;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
11106|India|Slightly satisfied|Computer science, computer engineering, or software engineering|266748.0|1 - 2 times per week|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Python;TypeScript;HTML;CSS
29410|France|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|58746.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;Lua;PHP;Python;HTML;CSS;Bash/Shell
71361|Poland|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|15876.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;JavaScript;TypeScript;Kotlin;Bash/Shell
16811|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|5256.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;PHP;SQL;HTML;CSS
46426|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|150000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Clojure;Go;Java;JavaScript;Objective-C;Python;Ruby;Swift;HTML;CSS;Bash/Shell
43088|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|63642.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;TypeScript;HTML;CSS
99172|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|125000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|F#;Haskell;Python;Rust;HTML;CSS
84987|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;CoffeeScript;Java;JavaScript;PHP;Python;SQL;HTML;CSS
75959|Czech Republic|Moderately satisfied|Computer science, computer engineering, or software engineering|57912.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Objective-C;Swift
50364|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|62500.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|CoffeeScript;Haskell;JavaScript;Perl;PHP;Python;R;SQL;HTML;CSS;Bash/Shell
23574|Germany|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|79552.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C++;Java;Matlab;Python
52222|France|Extremely satisfied|Computer science, computer engineering, or software engineering|53239.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;JavaScript;Python
64444|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|39648.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;HTML;CSS
78138|Australia|Moderately satisfied|Information systems, information technology, or system administration|145552.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;Ruby;HTML;CSS;Bash/Shell
48051|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|31253.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;TypeScript
61359|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|120000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;C#;Groovy;Java;JavaScript;Python;Ruby;TypeScript;HTML;CSS;Bash/Shell
2780|India|Moderately satisfied|Computer science, computer engineering, or software engineering|17220.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Ruby;TypeScript
63808|Australia|Moderately satisfied|Information systems, information technology, or system administration|79973.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|Between 2 and 4 years ago|Python;SQL
16265|Algeria|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|18000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Perl;PHP;Python;HTML;CSS
101560|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|85000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
12381|Mexico|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|22560.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
78828|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|96538.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;SQL;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
75343|United Kingdom|Extremely dissatisfied|Computer science, computer engineering, or software engineering|38199.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;Groovy;Java;JavaScript;Objective-C;PHP;SQL;HTML;CSS;Bash/Shell
20023|Russian Federation|Extremely dissatisfied|Computer science, computer engineering, or software engineering|25476.0|1 - 2 times per week|Male|Native American, Pacific Islander, or Indigenous Australian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;HTML;CSS
101179|Canada|Slightly satisfied|Information systems, information technology, or system administration|56365.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;Go;Groovy;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
55250|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|33684.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Python;Bash/Shell
30850|United Kingdom|Extremely satisfied|Mathematics or statistics|122930.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;JavaScript;Python;SQL;Bash/Shell
51819|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|50000.0|I don't typically exercise|Female|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;SQL;HTML;CSS;Bash/Shell
33471|Dominican Republic|Slightly satisfied|Mathematics or statistics|15000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Matlab;SQL;TypeScript;HTML;CSS
30604|India|Slightly dissatisfied|A business discipline (ex. accounting, finance, marketing)|9393.0|I don't typically exercise|Male|South Asian|Associate degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;Python;TypeScript;CSS
83499|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|23614.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;PHP;Python;TypeScript;HTML;CSS;Bash/Shell
83639|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|230000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|45 - 54 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
83783|Germany|Extremely satisfied|Mathematics or statistics|111373.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;VB.NET
79780|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;C++;Python;Bash/Shell
86720|Hungary|Moderately satisfied|Computer science, computer engineering, or software engineering|30960.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
48282|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|195000.0|Daily or almost every day|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Java;JavaScript;SQL;HTML;Bash/Shell
84910|India|Extremely satisfied|Computer science, computer engineering, or software engineering|5256.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;Python;HTML;CSS;Bash/Shell
100004|Colombia|Slightly satisfied|Computer science, computer engineering, or software engineering|4800.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;Java;SQL
75517|Poland|Slightly dissatisfied|Information systems, information technology, or system administration|19056.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Go;Lua;Python;SQL;HTML;CSS;Bash/Shell
98211|Ukraine|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|18792.0|1 - 2 times per week|Male|Middle Eastern|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Python;TypeScript;HTML;CSS;Bash/Shell
27604|United States|Slightly satisfied|Information systems, information technology, or system administration|80000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;HTML;CSS;Bash/Shell
23397|France|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|32808.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C++;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
46202|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|8448.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C++;Java;Kotlin
76568|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|169000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Go;Java;JavaScript;Python;HTML;CSS;Bash/Shell
48134|China|Slightly dissatisfied|Computer science, computer engineering, or software engineering|46752.0|3 - 4 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;C#;Go;Java;JavaScript;Lua;Rust;SQL;TypeScript;HTML;Bash/Shell
22334|Iran, Islamic Republic of...|Moderately satisfied|Computer science, computer engineering, or software engineering|16644.0|I don't typically exercise|Male|Middle Eastern|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Groovy;Java;PHP;SQL;HTML;CSS;Bash/Shell
15385|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|60000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|They never completed any formal education|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;JavaScript;PHP;SQL;TypeScript;HTML;CSS
82822|Australia|Extremely satisfied|Computer science, computer engineering, or software engineering|99967.0|I don't typically exercise|Male|White or of European descent|They never completed any formal education|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;Python;R;Scala;SQL
97738|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|97233.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;Perl;Python;Ruby;SQL;HTML;Bash/Shell
16896|Canada|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|64417.0|3 - 4 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Matlab;Python;R;SQL;TypeScript;HTML;CSS;Bash/Shell
93479|Philippines|Moderately dissatisfied|Information systems, information technology, or system administration|2364.0|3 - 4 times per week|Male|South Asian|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C#;Java;JavaScript;PHP;TypeScript;HTML;CSS
71306|India|Extremely dissatisfied|Computer science, computer engineering, or software engineering|7827.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;Matlab;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
93666|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|82000.0|1 - 2 times per week|Female;Transgender|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C++;JavaScript;Python;HTML;CSS;Bash/Shell
50748|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|20664.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;Python;Bash/Shell
36106|Ethiopia|Slightly satisfied|Computer science, computer engineering, or software engineering|8712.0|1 - 2 times per week|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
90850|United Kingdom|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|51394.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Go;Julia;Python;Bash/Shell
55558|France|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|44064.0|Daily or almost every day|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|3 - 4 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Python;SQL;HTML;CSS;Bash/Shell
62237|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|134627.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|C++;Go;Haskell;Java;JavaScript;Perl;Python;Ruby;Scala;SQL;CSS;Bash/Shell
97861|India|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|7512.0|1 - 2 times per week|Female|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;HTML;CSS
36530|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|40388.0|3 - 4 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;R;Scala
9678|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|58869.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Perl
19688|United Kingdom|Moderately satisfied|Mathematics or statistics|90288.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;VBA;VB.NET;HTML;CSS;Bash/Shell
15942|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|74500.0|3 - 4 times per week|Male|Native American, Pacific Islander, or Indigenous Australian;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
59483|Australia|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|67977.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Go;JavaScript;Python;TypeScript;HTML;CSS;Bash/Shell
61127|Denmark|Extremely satisfied|Computer science, computer engineering, or software engineering|69036.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Go;JavaScript;PHP;Rust;HTML;CSS;Bash/Shell
80668|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|75000.0|3 - 4 times per week|Male|Middle Eastern;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
69440|Malta|Moderately satisfied|Information systems, information technology, or system administration|55075.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML
63833|Russian Federation|Moderately satisfied|A health science (ex. nursing, pharmacy, radiology)|55200.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;Objective-C;PHP;Python;SQL;Swift;HTML;CSS;Bash/Shell
90696|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|1000000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|Between 1 and 2 years ago|C++;PHP;Delphi/Object Pascal
85099|Sri Lanka|Moderately satisfied|Information systems, information technology, or system administration|17124.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
99863|Sweden|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|43416.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
96909|Russian Federation|Moderately satisfied|Computer science, computer engineering, or software engineering|10620.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Java;PHP;Python;Rust;SQL;Bash/Shell
51449|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|76368.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;JavaScript;Python;Bash/Shell
62686|Ghana|Slightly dissatisfied|Computer science, computer engineering, or software engineering|10008.0|I don't typically exercise|Female|Black or of African descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Groovy;Java;JavaScript;Objective-C;Python;SQL;Swift;Kotlin;HTML;CSS
59537|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|2000000.0|3 - 4 times per week|Male|Native American, Pacific Islander, or Indigenous Australian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Python;R;SQL;VBA
22311|United States|Slightly dissatisfied|A humanities discipline (ex. literature, history, philosophy)|85000.0|3 - 4 times per week|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|JavaScript;Python;R;SQL;HTML;CSS
39522|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|56298.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;R;HTML
97303|United States|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|115000.0|I don't typically exercise|Male|East Asian;White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;SQL;Swift;HTML;CSS
45144|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|170000.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Assembly;C;C++;Python;Bash/Shell
10607|Italy|Slightly satisfied|Computer science, computer engineering, or software engineering|3060.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;Java;JavaScript;Matlab;PHP;HTML;CSS
3243|Malaysia|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|12132.0|3 - 4 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|Go;JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
92845|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|104678.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C#;Java;JavaScript;Perl;SQL;VB.NET;HTML;CSS
15321|United States|Extremely satisfied|I never declared a major|50000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Objective-C;Python;SQL;Swift;TypeScript;HTML;CSS
95388|Canada|Moderately dissatisfied|Computer science, computer engineering, or software engineering|66027.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;C;Go;Python;Ruby;SQL;Swift;HTML;CSS;Bash/Shell
29027|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Groovy;JavaScript;Lua;TypeScript;HTML;CSS
52183|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|19920.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS
60295|Poland|Moderately dissatisfied|A business discipline (ex. accounting, finance, marketing)|28236.0|1 - 2 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;HTML;CSS
93138|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|73433.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C++;C#;HTML;CSS
10267|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|89266.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
5998|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|41671.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
14244|Spain|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|33045.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;SQL
25786|Netherlands|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|30156.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Groovy;Java;JavaScript;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
27262|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;F#;JavaScript;SQL;HTML;CSS
22522|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|40000.0|I don't typically exercise|Transgender|White or of European descent|Associate degree|Less than 30 minutes|55 - 64 years old|More than 4 years ago|Delphi/Object Pascal
49890|Austria|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|20556.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;Java;Objective-C;PHP;Python;R;SQL;Swift;VBA;VB.NET;Visual Basic 6;Delphi/Object Pascal;HTML;CSS;Bash/Shell
14105|France|Moderately satisfied|Computer science, computer engineering, or software engineering|646212.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Objective-C;Swift
30500|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|30108.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Objective-C;Swift
28912|United Kingdom|Extremely satisfied|Mathematics or statistics|44449.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Python;R;SQL;VBA
38265|India|Moderately satisfied|Computer science, computer engineering, or software engineering|18785.0|Daily or almost every day|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python
17638|Canada|Extremely satisfied|Information systems, information technology, or system administration|48152.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
9686|Nepal|Slightly satisfied|Computer science, computer engineering, or software engineering|91644.0|I don't typically exercise|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS
101333|Japan|Slightly satisfied|Computer science, computer engineering, or software engineering|30252.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
41415|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|36720.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|More than 4 years ago|C#;JavaScript;PHP;Python;SQL;Swift;HTML;CSS
17445|United States|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|2000000.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;PHP;SQL;TypeScript;VBA;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
68783|Italy|Extremely satisfied|Computer science, computer engineering, or software engineering|12239.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|Assembly;C;C++;Java;JavaScript;Matlab;PHP;SQL;Visual Basic 6;Kotlin;Cobol;HTML;CSS;Bash/Shell
69496|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|44916.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;SQL
65777|China|Extremely satisfied|Computer science, computer engineering, or software engineering|31167.0|3 - 4 times per week|Male|South Asian|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
26886|Netherlands|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|46992.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;HTML;CSS
63693|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|140000.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|3 - 4 hours|35 - 44 years old|Between 1 and 2 years ago|JavaScript;Objective-C;PHP;SQL;Swift;HTML;CSS;Bash/Shell
81657|Philippines|Extremely dissatisfied|Information systems, information technology, or system administration|2880.0|3 - 4 times per week|Male|East Asian;South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;HTML;CSS
24645|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|122500.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Go;Python;Bash/Shell
25501|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|52339.0|1 - 2 times per week|Female|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
56974|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|55000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|3 - 4 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML
64248|France|Moderately satisfied|Computer science, computer engineering, or software engineering|64866.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS
2996|Pakistan|Slightly satisfied|Computer science, computer engineering, or software engineering|1632.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;C#;Objective-C;PHP;Python;SQL;VB.NET;Visual Basic 6;HTML;CSS
90854|Italy|Slightly satisfied|Computer science, computer engineering, or software engineering|411228.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript
20057|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|101200.0|Daily or almost every day|Female|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;R;SQL;TypeScript;HTML;CSS
97256|Belgium|Slightly dissatisfied|A health science (ex. nursing, pharmacy, radiology)|35244.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Perl;PHP;R;SQL;Delphi/Object Pascal;HTML;CSS;Bash/Shell
23532|India|Slightly satisfied|Computer science, computer engineering, or software engineering|2256.0|Daily or almost every day|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;Python;HTML;CSS
73523|Bosnia and Herzegovina|Moderately satisfied|Computer science, computer engineering, or software engineering|24972.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
13367|Colombia|Slightly satisfied|Computer science, computer engineering, or software engineering|14760.0|Daily or almost every day|Female|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;Objective-C;Python;SQL;Swift;TypeScript;HTML;CSS
10529|France|Moderately satisfied|Computer science, computer engineering, or software engineering|46507.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;JavaScript;Rust;SQL;HTML
39759|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|44287.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;HTML;CSS
66148|South Korea|Extremely satisfied|Computer science, computer engineering, or software engineering|62808.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;Python
51814|Spain|Slightly satisfied|Computer science, computer engineering, or software engineering|176244.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|Over 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
64181|United States|Moderately satisfied|Information systems, information technology, or system administration|85000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;HTML;CSS
730|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|63979.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;Visual Basic 6;HTML;CSS
23233|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|66767.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|R
18141|United States|Moderately satisfied|Web development or web design|94000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;PHP;SQL;HTML;CSS
45551|United Kingdom|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|750084.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;SQL;HTML;CSS
93449|United Kingdom|Slightly dissatisfied|Web development or web design|34726.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS
10026|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|90000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C++;C#;Java;JavaScript;Matlab;PHP;Python;SQL;HTML;CSS;Bash/Shell
74621|Australia|Extremely dissatisfied|Information systems, information technology, or system administration|1000000.0|I don't typically exercise|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C#;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
7708|Belgium|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|61680.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|45 - 54 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
7447|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|58746.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;Bash/Shell
79990|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|44300.0|3 - 4 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Assembly;C++;JavaScript;TypeScript;HTML;CSS;Bash/Shell
28161|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|64417.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;JavaScript;Python;Bash/Shell
10413|Sri Lanka|Moderately satisfied|Computer science, computer engineering, or software engineering|1560.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;VB.NET;HTML;CSS
95567|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|25008.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|CoffeeScript;JavaScript;TypeScript;HTML;CSS
100370|India|Moderately satisfied|Computer science, computer engineering, or software engineering|1884.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;Java;JavaScript;PHP;SQL;VB.NET;Visual Basic 6;HTML;CSS
54239|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|1000000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
3153|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|100000.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Python
10899|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|117000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|Assembly;C;C++;Go;Haskell;JavaScript;Python;SQL;HTML
18893|Indonesia|Slightly satisfied|Computer science, computer engineering, or software engineering|3576.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS
25177|Germany|Extremely dissatisfied|Information systems, information technology, or system administration|73433.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
73107|India|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|3757.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;Python;HTML;CSS
88965|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|14652.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Hack;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
58969|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|19447.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C++;Matlab;Perl;Python;R;Bash/Shell
27413|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|88000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
73404|Germany|Slightly satisfied|A business discipline (ex. accounting, finance, marketing)|97910.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|JavaScript;PHP;HTML;CSS;Bash/Shell
17508|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|76397.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;VBA;VB.NET;HTML;CSS
58546|Denmark|Extremely dissatisfied|A business discipline (ex. accounting, finance, marketing)|164366.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|55 - 64 years old|Between 2 and 4 years ago|C;C#;VBA;VB.NET;Visual Basic 6;HTML
27955|Czech Republic|Moderately satisfied|Computer science, computer engineering, or software engineering|23748.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;SQL;TypeScript;HTML;CSS
100426|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|90000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
99601|Pakistan|Extremely satisfied|Computer science, computer engineering, or software engineering|8676.0|3 - 4 times per week|Male|South Asian|Primary/elementary school|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;C#;Java;JavaScript;PHP;SQL;HTML;CSS
98246|Spain|Slightly satisfied|Computer science, computer engineering, or software engineering|381852.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Python
30279|Iceland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|116862.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;TypeScript;HTML;CSS;Bash/Shell
33525|Spain|Slightly dissatisfied|Computer science, computer engineering, or software engineering|44060.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
48188|United States|Moderately dissatisfied|A social science (ex. anthropology, psychology, political science)|55000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS
76866|Iran, Islamic Republic of...|Moderately satisfied|Computer science, computer engineering, or software engineering|26640.0|I don't typically exercise|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C#;Java
6252|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|38893.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;Matlab;Objective-C;PHP;SQL;Swift;HTML;CSS
95184|India|Moderately satisfied|Computer science, computer engineering, or software engineering|17220.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
34209|Germany|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|88119.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|55 - 64 years old|Between 2 and 4 years ago|Assembly;C;JavaScript;Perl;Cobol
8224|India|Moderately satisfied|Computer science, computer engineering, or software engineering|6262.0|Daily or almost every day|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
6928|South Africa|Extremely dissatisfied|A natural science (ex. biology, chemistry, physics)|19584.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Python
64192|Germany|Moderately dissatisfied|A social science (ex. anthropology, psychology, political science)|44064.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;Go;JavaScript;Python;Rust;HTML;CSS;Bash/Shell
41846|Czech Republic|Moderately satisfied|Computer science, computer engineering, or software engineering|45972.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Clojure;Go;Groovy;Java;JavaScript;PHP;Scala;HTML;CSS;Bash/Shell
50698|United Kingdom|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|62507.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;Python;SQL
71898|United States|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|148000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Clojure;Groovy;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
22169|United States|Moderately dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|115000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
30372|Canada|Slightly satisfied|Computer science, computer engineering, or software engineering|38652.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Go;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
17509|Australia|Slightly dissatisfied|Information systems, information technology, or system administration|43985.0|1 - 2 times per week|Male|South Asian|They never completed any formal education|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;PHP;HTML;CSS
76892|Singapore|Slightly satisfied|Computer science, computer engineering, or software engineering|90840.0|3 - 4 times per week|Male|South Asian|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java
4577|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|118280.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C#;SQL
32046|United States|Extremely satisfied|Information systems, information technology, or system administration|150000.0|3 - 4 times per week|Male|Middle Eastern;White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;Python;SQL;HTML;CSS;Bash/Shell
95347|Japan|Moderately satisfied|Computer science, computer engineering, or software engineering|59424.0|I don't typically exercise|Male|East Asian;South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;Objective-C;Python;Ruby;SQL;Swift;Kotlin
84660|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|127000.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;HTML;CSS
66907|Canada|Slightly dissatisfied|Computer science, computer engineering, or software engineering|88573.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|PHP;Python;Ruby;Bash/Shell
40805|Bangladesh|Moderately satisfied|Mathematics or statistics|6612.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Python;SQL;HTML;CSS
61661|Sweden|Moderately satisfied|Mathematics or statistics|73433.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C++;C#;JavaScript;Julia;Python;SQL;HTML;CSS;Bash/Shell
17582|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|72500.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#
51534|Australia|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|60000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Python;SQL;HTML;CSS;Bash/Shell
32113|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|116268.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C++;Go;Java;Python;SQL;HTML;CSS;Bash/Shell
6716|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|66084.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Erlang;JavaScript;Ruby
387|Russian Federation|Extremely satisfied|Mathematics or statistics|20808.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;Python;SQL;HTML;CSS
24685|India|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|44328.0|I don't typically exercise|Male|South Asian|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript
90333|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|75000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;SQL;HTML;CSS
99735|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|78000.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Java;JavaScript;Python;SQL;Swift;HTML;CSS;Bash/Shell
64408|Belarus|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|9600.0|3 - 4 times per week|Female;Male;Transgender;Non-binary, genderqueer, or gender non-conforming|Black or of African descent;East Asian;Hispanic or Latino/Latina;Middle Eastern;Native American, Pacific Islander, or Indigenous Australian;South Asian;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|Java;Kotlin;Bash/Shell
55300|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|145000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;Objective-C;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
13674|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|75000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;SQL;HTML;CSS;Bash/Shell
86194|Poland|Slightly satisfied|Information systems, information technology, or system administration|17640.0|I don't typically exercise|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C++
47647|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|51403.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS
6954|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|76000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;C#;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
65285|United States|Slightly dissatisfied|I never declared a major|80000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
61631|Italy|Moderately satisfied|Computer science, computer engineering, or software engineering|36716.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C++;C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
16673|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|57276.0|1 - 2 times per week|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Ruby;SQL;HTML;CSS
23474|China|Slightly dissatisfied|Computer science, computer engineering, or software engineering|19632.0|1 - 2 times per week|Male|East Asian|Primary/elementary school|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;Java;JavaScript;PHP;Python;SQL;Kotlin;HTML;CSS;Bash/Shell
17548|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|52783.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|R;SQL
77808|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|38650.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;Objective-C;SQL;Swift
16656|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|9393.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;Java;JavaScript;PHP;SQL;HTML;CSS
17905|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|50304.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Ruby
4279|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|180000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|55 - 64 years old|Between 1 and 2 years ago|C;C++;Java;Matlab;Python;R;Scala;Bash/Shell
31114|Malaysia|Extremely dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|10320.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;JavaScript;Objective-C;Ruby;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS
61657|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|62380.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;C#
15160|United States|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|56000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;Python;R;SQL;TypeScript;VBA;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
67365|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|94000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C#;Go;JavaScript;PHP;Python;Ruby;Rust;SQL;HTML;CSS;Bash/Shell
13682|Netherlands|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|77104.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Perl;Python;HTML;CSS
44164|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|100000.0|3 - 4 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C;C++;Python;SQL;Bash/Shell
61263|Iran, Islamic Republic of...|Moderately dissatisfied|Computer science, computer engineering, or software engineering|16644.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|Between 2 and 4 years ago|C++;C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS
95237|Russian Federation|Slightly satisfied|A business discipline (ex. accounting, finance, marketing)|12732.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;PHP;HTML;CSS
13689|Greece|Moderately dissatisfied|Computer science, computer engineering, or software engineering|24478.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
6831|France|Moderately satisfied|Computer science, computer engineering, or software engineering|66089.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C++;JavaScript;TypeScript
11878|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|95000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;F#;JavaScript;TypeScript;HTML;CSS
53400|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|308412.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Primary/elementary school|Over 4 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;Matlab;Objective-C;PHP;Python;R;SQL;Swift;HTML;CSS
4370|India|Slightly satisfied|Computer science, computer engineering, or software engineering|150288.0|3 - 4 times per week|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;Python;R;SQL
46785|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|48616.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Python;HTML;CSS
98025|Switzerland|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|118872.0|3 - 4 times per week|Male|East Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|45 - 54 years old|Between 1 and 2 years ago|C++;C#;JavaScript;PHP;Python;TypeScript
4673|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|140000.0|3 - 4 times per week|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;Java;JavaScript;Python;R;Ruby;SQL;HTML;CSS;Bash/Shell
32291|Singapore|Slightly satisfied|Computer science, computer engineering, or software engineering|34067.0|3 - 4 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Ruby;SQL;VBA;VB.NET;HTML
34562|Finland|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|32316.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java;SQL;HTML
35875|Belgium|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|55812.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;HTML;CSS;Bash/Shell
788|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|55000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;Lua;Python;HTML;CSS;Bash/Shell
25607|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|75000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Go;Java;JavaScript;Objective-C;PHP;Python;SQL;HTML;CSS;Bash/Shell
15348|France|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|58746.0|I don't typically exercise|Male|White or of European descent|They never completed any formal education|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Objective-C;Swift
94897|Spain|Extremely satisfied|Computer science, computer engineering, or software engineering|44060.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Python;TypeScript
55669|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|58746.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;SQL
69847|United States|Extremely satisfied|Information systems, information technology, or system administration|83000.0|Daily or almost every day|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;Bash/Shell
81418|Lebanon|Extremely satisfied|Computer science, computer engineering, or software engineering|13200.0|I don't typically exercise|Male|Middle Eastern|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS
72016|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|33280.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;Go;Java;JavaScript;PHP;SQL;CSS;Bash/Shell
95560|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|107000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Java;Scala
10622|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|115000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C#;Go;JavaScript;Python;SQL;TypeScript
80194|Germany|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|39648.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java;VBA;HTML;CSS
5771|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|100500.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|Java;SQL
96383|Other Country (Not Listed Above)|Neither satisfied nor dissatisfied|A natural science (ex. biology, chemistry, physics)|58340.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Python;R;SQL;HTML;CSS;Bash/Shell
9349|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|150000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|JavaScript;Python;HTML;CSS
30759|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|56365.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Go;Java;JavaScript;Objective-C;Python;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
82086|Uruguay|Slightly satisfied|Computer science, computer engineering, or software engineering|7992.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;PHP;HTML;CSS
62954|United States|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|95000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
52466|Germany|Extremely dissatisfied|Computer science, computer engineering, or software engineering|58746.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C;C++;Python
5917|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|96626.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C;C++;Java;Python;Bash/Shell
52129|United States|Slightly satisfied|Mathematics or statistics|140000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;SQL;Bash/Shell
94259|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|180000.0|1 - 2 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;TypeScript;HTML;CSS
36813|Colombia|Slightly dissatisfied|Information systems, information technology, or system administration|21300.0|3 - 4 times per week|Male|Black or of African descent;Hispanic or Latino/Latina|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;HTML;CSS;Bash/Shell
26385|New Zealand|Slightly satisfied|Computer science, computer engineering, or software engineering|41658.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;SQL;HTML;CSS
23720|France|Slightly satisfied|Web development or web design|10284.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;SQL;HTML;CSS;Bash/Shell
58233|Brazil|Extremely dissatisfied|Information systems, information technology, or system administration|65508.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;CSS
38718|Iran, Islamic Republic of...|Slightly dissatisfied|Computer science, computer engineering, or software engineering|11652.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Java;Python
70644|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|55981.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
80275|India|Slightly satisfied|Computer science, computer engineering, or software engineering|5640.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;JavaScript;Objective-C;PHP;Swift;HTML;CSS
30508|Pakistan|Extremely satisfied|Computer science, computer engineering, or software engineering|7200.0|I don't typically exercise|Male|East Asian|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|Java;PHP;Swift
14183|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|30000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java
55113|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|200016.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;Python;SQL;Kotlin;Bash/Shell
3756|Israel|Moderately satisfied|Computer science, computer engineering, or software engineering|94788.0|I don't typically exercise|Male|Middle Eastern;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Matlab;Perl;PHP;Python;Ruby;SQL;VB.NET;HTML;CSS;Bash/Shell
59679|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|102000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|JavaScript;Python
26958|Jordan|Moderately satisfied|Computer science, computer engineering, or software engineering|30468.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS
42011|Russian Federation|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|8846.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|More than 4 years ago|C;C++;JavaScript;Matlab;Python;Visual Basic 6;HTML;CSS;Bash/Shell
128|United States|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|14000.0|3 - 4 times per week|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS;Bash/Shell
16168|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|110000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
37058|Russian Federation|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|42456.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|PHP;Python;SQL;VBA
99799|China|Slightly dissatisfied|Mathematics or statistics|23375.0|I don't typically exercise|Male|East Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;Java;Delphi/Object Pascal
14939|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|83224.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;Java
28530|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|112000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
85452|Saudi Arabia|Moderately satisfied|Computer science, computer engineering, or software engineering|33600.0|3 - 4 times per week|Female|South Asian|Professional degree (JD, MD, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS
55769|France|Slightly satisfied|Computer science, computer engineering, or software engineering|48955.0|I don't typically exercise|Male|Black or of African descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;Matlab;Python;SQL;HTML;CSS;Bash/Shell
20898|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|55075.0|3 - 4 times per week|Male|White or of European descent|They never completed any formal education|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;TypeScript;HTML;CSS
574|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|106000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Ruby;SQL
18121|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|75000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;PHP;Python;R;SQL;TypeScript;HTML;CSS;Bash/Shell
1295|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|200000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C++;Java;JavaScript;Python;SQL;Bash/Shell
98884|United States|Moderately satisfied|Information systems, information technology, or system administration|125000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;Python
26723|Switzerland|Moderately satisfied|Computer science, computer engineering, or software engineering|125123.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C++;C#;Java;Swift;HTML;CSS;Bash/Shell
65376|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|55075.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|Between 1 and 2 years ago|Java;JavaScript;Ruby;SQL;Kotlin;HTML;Bash/Shell
318|Slovakia|Extremely satisfied|Computer science, computer engineering, or software engineering|46992.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|More than 4 years ago|CoffeeScript;JavaScript;TypeScript;HTML
30754|United Kingdom|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|24308.0|3 - 4 times per week|Male|White or of European descent|They never completed any formal education|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Java;Python;HTML;Bash/Shell
18398|Finland|Moderately satisfied|Computer science, computer engineering, or software engineering|76368.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;Python;HTML
33170|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|75000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|35 - 44 years old|More than 4 years ago|Python;HTML;Bash/Shell
95021|Egypt|Moderately satisfied|Computer science, computer engineering, or software engineering|1704.0|I don't typically exercise|Female|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Assembly;C;C++;C#;Go;Java;JavaScript;Matlab;PHP;R;Visual Basic 6;HTML;CSS
79134|United Kingdom|Moderately dissatisfied|Computer science, computer engineering, or software engineering|600060.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
82284|Switzerland|Neither satisfied nor dissatisfied|A business discipline (ex. accounting, finance, marketing)|93842.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Java;JavaScript;HTML
64121|Germany|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|78328.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Clojure;Java;JavaScript;Objective-C;Kotlin
47869|Denmark|Extremely satisfied|Computer science, computer engineering, or software engineering|73636.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Objective-C;Perl;Swift
68404|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|116500.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
78569|Canada|Moderately satisfied|Web development or web design|101457.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
92034|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|110000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;F#;Lua;Python;SQL;TypeScript;Kotlin;HTML;CSS
18974|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|960000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;JavaScript
41811|Netherlands|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|82000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Python;Scala;SQL;Bash/Shell
63462|United States|Moderately satisfied|Information systems, information technology, or system administration|50000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
37770|United Kingdom|Slightly dissatisfied|Mathematics or statistics|60423.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C;Java;Python;HTML;CSS;Bash/Shell
62917|Gambia|Moderately satisfied|Web development or web design|3780.0|1 - 2 times per week|Male|Black or of African descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;PHP;SQL;VBA;VB.NET;HTML;CSS
32893|United States|Moderately satisfied|I never declared a major|105000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
31671|Belgium|Moderately dissatisfied|Computer science, computer engineering, or software engineering|36720.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML
42230|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|80000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C;C++;Objective-C;Python;Swift
39027|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|1056000.0|3 - 4 times per week|Male|East Asian;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Matlab;Python;SQL;HTML;CSS;Bash/Shell
64419|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|140000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Groovy;JavaScript;Ruby;TypeScript;HTML;CSS;Bash/Shell
79331|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|67000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;Perl;PHP;Python;R;SQL;HTML;CSS;Bash/Shell
30361|Malaysia|Moderately satisfied|Computer science, computer engineering, or software engineering|10620.0|1 - 2 times per week|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Swift
68174|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|150000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C;Go;JavaScript;PHP;R;Ruby;SQL;HTML;CSS;Bash/Shell
51987|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;JavaScript
53132|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|70000.0|Daily or almost every day|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;Java;Python;SQL;Kotlin;Bash/Shell
27320|United States|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|115000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS
81059|Russian Federation|Slightly satisfied|Computer science, computer engineering, or software engineering|44064.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C++;Python;Bash/Shell
52068|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|134500.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;Bash/Shell
85808|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|156000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;Go;Haskell;Java;JavaScript;PHP;Python;R;Ruby;SQL;Swift;HTML;CSS;Bash/Shell
49935|Mexico|Extremely satisfied|Computer science, computer engineering, or software engineering|16116.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;SQL;HTML;CSS
68263|India|Slightly satisfied|Computer science, computer engineering, or software engineering|6653.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;JavaScript;PHP;Python;TypeScript;HTML;CSS
49638|France|Extremely satisfied|Computer science, computer engineering, or software engineering|24478.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|C#
22455|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|105000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;Objective-C;SQL;Swift;VB.NET;HTML;CSS
43358|Ireland|Moderately dissatisfied|Computer science, computer engineering, or software engineering|97910.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Erlang;Go;Java;Julia;Rust;Kotlin
26621|Canada|Extremely satisfied|Information systems, information technology, or system administration|96624.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C;C++;Java;JavaScript;Python;Bash/Shell
73754|Bangladesh|Moderately satisfied|Computer science, computer engineering, or software engineering|16164.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
40106|Brazil|Slightly satisfied|A social science (ex. anthropology, psychology, political science)|7488.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;Objective-C;HTML;CSS
99244|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|883428.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;C#;Java;JavaScript;TypeScript;HTML;CSS;Bash/Shell
8608|United Kingdom|Moderately satisfied|Mathematics or statistics|40282.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|More than 4 years ago|C#;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
86327|Colombia|Extremely dissatisfied|Computer science, computer engineering, or software engineering|48000.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
56948|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|45000.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C++;Java;JavaScript;Objective-C;PHP;Python;SQL;HTML;CSS;Bash/Shell
52348|Canada|Moderately dissatisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Java;JavaScript;Objective-C;PHP;CSS
10200|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|17640.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C#;JavaScript;Python;HTML;CSS
9409|Russian Federation|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|4248.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;Python;VBA;HTML;CSS
32808|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|1 - 2 times per week|Female|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|55 - 64 years old|Between 1 and 2 years ago|Java;SQL
81863|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|62001.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;Groovy;Java;JavaScript;Perl;Python;R;Scala;SQL;HTML;CSS;Bash/Shell
100143|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|5213.0|I don't typically exercise|Male|South Asian|Primary/elementary school|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;Matlab;PHP;SQL;HTML;CSS;Bash/Shell
70731|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|55000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
1368|Ukraine|Slightly satisfied|Mathematics or statistics|4680.0|1 - 2 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|18 - 24 years old|Less than a year ago|Python;SQL;Bash/Shell
43397|Canada|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|80521.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;R;VBA
99904|Russian Federation|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|31848.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript
34651|Germany|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|5880.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Groovy;Java;JavaScript;Python;SQL;HTML;CSS
57063|France|Moderately dissatisfied|A health science (ex. nursing, pharmacy, radiology)|36716.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;PHP;Python;HTML;CSS;Bash/Shell
20248|India|Slightly satisfied|Computer science, computer engineering, or software engineering|2818.0|3 - 4 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;TypeScript;HTML;CSS
80474|Turkey|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|48000.0|1 - 2 times per week|Male|Middle Eastern;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Objective-C;SQL;Kotlin;Bash/Shell
35332|United States|Extremely satisfied|Information systems, information technology, or system administration|65000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;VB.NET;Visual Basic 6;HTML;CSS
32312|United States|Extremely satisfied|Information systems, information technology, or system administration|110000.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Go;Bash/Shell
20981|Finland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|55812.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;Ruby;SQL;Delphi/Object Pascal;HTML;CSS;Bash/Shell
11137|Netherlands|Moderately dissatisfied|Computer science, computer engineering, or software engineering|56298.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;Python
8917|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|43416.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
88005|India|Moderately dissatisfied|Information systems, information technology, or system administration|114588.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Perl;Python;SQL;HTML;CSS;Bash/Shell
24332|Ireland|Moderately satisfied|Mathematics or statistics|61194.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Python;R;Scala;SQL
85515|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|49000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Go;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
84696|Czech Republic|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|55020.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C++;C#;F#;Java;JavaScript;SQL
73675|Canada|Extremely satisfied|Mathematics or statistics|104678.0|1 - 2 times per week|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;SQL;HTML;CSS
7614|United States|Slightly dissatisfied|A natural science (ex. biology, chemistry, physics)|90000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|JavaScript;Python
52271|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|1000000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|More than 4 years ago|Go;JavaScript;Lua;Perl;PHP;Python;SQL;HTML;CSS;Bash/Shell
34978|Russian Federation|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|63684.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|35 - 44 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;Go;JavaScript;Python;SQL;VBA;HTML;CSS;Bash/Shell
42027|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|83342.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
90666|Hong Kong (S.A.R.)|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|41136.0|1 - 2 times per week|Male|East Asian|They never completed any formal education|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Python;R
37537|Canada|Slightly satisfied|Computer science, computer engineering, or software engineering|112730.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|45 - 54 years old|Less than a year ago|C#;Python;VB.NET;Bash/Shell
92840|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|8808.0|I don't typically exercise|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;JavaScript;TypeScript;HTML;CSS
56635|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|47500.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Perl;Python;SQL;Bash/Shell
44897|United States|Moderately dissatisfied|Information systems, information technology, or system administration|65000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Groovy;Java;JavaScript;HTML;CSS
35542|India|Moderately satisfied|Computer science, computer engineering, or software engineering|5256.0|1 - 2 times per week|Non-binary, genderqueer, or gender non-conforming|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Objective-C;Swift
4186|India|Moderately satisfied|Computer science, computer engineering, or software engineering|8268.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Go;Java;JavaScript;PHP;Python;SQL;TypeScript;HTML;Bash/Shell
52890|Singapore|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|59052.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Groovy;JavaScript;Ruby;HTML;CSS;Bash/Shell
16757|United States|Slightly dissatisfied|A natural science (ex. biology, chemistry, physics)|91000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
79549|Bulgaria|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|14688.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C++;Java;JavaScript;PHP;Python;HTML;CSS
7530|United Kingdom|Slightly satisfied|Web development or web design|41671.0|I don't typically exercise|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;Ruby;SQL;HTML;CSS
95566|France|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|82000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;SQL
24723|Germany|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|13956.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|More than 4 years ago|C;C#;Go;Java;JavaScript;Rust;TypeScript;Kotlin
59669|Israel|Moderately satisfied|Computer science, computer engineering, or software engineering|112344.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;TypeScript
83530|Romania|Slightly dissatisfied|Computer science, computer engineering, or software engineering|16152.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;HTML;CSS
86270|Netherlands|Slightly dissatisfied|Web development or web design|117492.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Scala;Bash/Shell
24131|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|52627.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Haskell;Java;Python;Scala
82203|Slovakia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|29376.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS
99525|Norway|Slightly satisfied|Computer science, computer engineering, or software engineering|68862.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;CSS
88071|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|160000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C++;C#;JavaScript;Perl;Bash/Shell
33564|Mexico|Moderately satisfied|Computer science, computer engineering, or software engineering|74772.0|3 - 4 times per week|Female|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Python
53824|India|Moderately satisfied|Computer science, computer engineering, or software engineering|9396.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Haskell;JavaScript;Python
93400|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|78000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Rust;SQL;HTML;CSS;Bash/Shell
42596|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|33000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;C#;Java;JavaScript;Python;SQL;Swift;HTML;CSS;Bash/Shell
33851|Mexico|Moderately dissatisfied|Information systems, information technology, or system administration|35448.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Some college/university study without earning a degree|3 - 4 hours|55 - 64 years old|More than 4 years ago|Assembly;C;C++;Java;SQL;VBA;VB.NET;Visual Basic 6;Cobol
33801|Libyan Arab Jamahiriya|Slightly dissatisfied|Computer science, computer engineering, or software engineering|42635.0|1 - 2 times per week|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|Between 1 and 2 years ago|Go;Java;JavaScript;PHP;TypeScript;HTML;CSS
34032|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|160000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Between 1 and 2 years ago|C++;C#;Python;SQL;Bash/Shell
66419|Morocco|Moderately dissatisfied|Computer science, computer engineering, or software engineering|9744.0|3 - 4 times per week|Male|Middle Eastern|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;VB.NET;HTML;CSS
16543|Belgium|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|51648.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript
87954|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|84000.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Python
51798|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|75000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Go;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
80368|United States|Moderately satisfied|Web development or web design|70000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
34307|Greece|Slightly satisfied|Computer science, computer engineering, or software engineering|12239.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;Python;Scala
85481|United States|Slightly satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|147000.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C#;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
88959|Lebanon|Extremely satisfied|Computer science, computer engineering, or software engineering|16800.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;Haskell;Java;JavaScript;Kotlin;HTML;CSS;Bash/Shell
41742|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
32689|Brazil|Slightly dissatisfied|Computer science, computer engineering, or software engineering|13104.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
25353|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|110000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;SQL;TypeScript;HTML;CSS
27912|France|Extremely satisfied|Computer science, computer engineering, or software engineering|64866.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|Assembly;C;JavaScript;Perl;PHP;Python;SQL;VBA;Delphi/Object Pascal;Cobol;HTML;CSS;Bash/Shell
80795|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|24000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Swift;Kotlin
58766|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|134000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;Bash/Shell
27933|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|66000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;Python
86625|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|42000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;JavaScript;SQL;VBA;HTML;CSS
36922|Turkey|Moderately satisfied|Computer science, computer engineering, or software engineering|10488.0|I don't typically exercise|Male|Middle Eastern;White or of European descent|They never completed any formal education|30 - 59 minutes|18 - 24 years old|Less than a year ago|Java;Python
72952|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|6384.0|I don't typically exercise|Male|South Asian|Associate degree|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;HTML;CSS
31603|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|58752.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;JavaScript;PHP;SQL;TypeScript;Delphi/Object Pascal;HTML;CSS;Bash/Shell
60232|Russian Federation|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|26532.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;Python;Scala;Bash/Shell
91713|Canada|Slightly dissatisfied|Computer science, computer engineering, or software engineering|56365.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Go;Java;JavaScript;Lua;Python;SQL;HTML;CSS;Bash/Shell
53449|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|23891.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
58620|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|87127.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|C#;Groovy;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
61515|United States|Slightly satisfied|Mathematics or statistics|73000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Python;Swift;VBA;HTML;CSS
36826|Brazil|Extremely satisfied|Computer science, computer engineering, or software engineering|22452.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java
29257|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|75000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Python;R;SQL;Bash/Shell
94000|France|Slightly satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|39164.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;HTML;CSS
85999|Bosnia and Herzegovina|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|29376.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Objective-C;Swift
19953|India|Extremely satisfied|Computer science, computer engineering, or software engineering|18780.0|I don't typically exercise|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;Python;TypeScript;Kotlin;HTML;CSS;Bash/Shell
82345|Switzerland|Moderately satisfied|Information systems, information technology, or system administration|131379.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;Java;JavaScript;PHP;Scala;Delphi/Object Pascal;HTML;CSS;Bash/Shell
65380|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|90000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Go;JavaScript;Ruby;HTML;CSS;Bash/Shell
35226|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|51408.0|1 - 2 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C++;C#;Python;VBA
51531|Mexico|Moderately dissatisfied|Information systems, information technology, or system administration|16116.0|I don't typically exercise|Female|Black or of African descent;East Asian;Hispanic or Latino/Latina;Middle Eastern;Native American, Pacific Islander, or Indigenous Australian;South Asian;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;PHP;Ruby;SQL;TypeScript;HTML;CSS
28258|United Kingdom|Moderately satisfied|Mathematics or statistics|55562.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|45 - 54 years old|Between 1 and 2 years ago|JavaScript;Ruby;SQL;HTML;CSS
92128|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|101000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C++;Groovy;Java;JavaScript;HTML;CSS
8823|Austria|Extremely satisfied|Computer science, computer engineering, or software engineering|15276.0|3 - 4 times per week|Female|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Haskell;Java;JavaScript;Matlab;Python;R;SQL;HTML;CSS;Bash/Shell
94202|United States|Moderately satisfied|Web development or web design|32500.0|1 - 2 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Between 2 and 4 years ago|JavaScript;PHP;HTML;CSS
94144|Ukraine|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|48000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
25231|Kenya|Moderately satisfied|Mathematics or statistics|40824.0|I don't typically exercise|Male|Black or of African descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|More than 4 years ago|PHP
23670|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|70000.0|1 - 2 times per week|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;Go;Java;JavaScript;PHP;Python;SQL;Swift;TypeScript;HTML;CSS
27434|France|Moderately dissatisfied|Web development or web design|48955.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Java;Swift;Bash/Shell
66250|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|55075.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|PHP;SQL
97892|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|2000000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|55 - 64 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;Objective-C;SQL;Swift;TypeScript;VB.NET;HTML;CSS;Bash/Shell
88132|Russian Federation|Slightly dissatisfied|Mathematics or statistics|27600.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Objective-C;Swift
87288|United States|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|140000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|45 - 54 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
44962|United States|Slightly satisfied|Web development or web design|175000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|3 - 4 hours|35 - 44 years old|More than 4 years ago|JavaScript;HTML;CSS
24302|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|100000.0|1 - 2 times per week|Male|Black or of African descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;CoffeeScript;Go;Java;JavaScript;Lua;Objective-C;PHP;Python;Ruby;SQL;Swift;TypeScript;Kotlin;HTML;CSS;Bash/Shell
81708|Austria|Moderately dissatisfied|Computer science, computer engineering, or software engineering|142872.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|C;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
35755|Israel|Extremely satisfied|Computer science, computer engineering, or software engineering|154476.0|3 - 4 times per week|Male|Middle Eastern;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Groovy;Java;JavaScript;Python;SQL;HTML;Bash/Shell
36342|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|44060.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
97060|Brazil|Moderately satisfied|Information systems, information technology, or system administration|5616.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|JavaScript;PHP;SQL;TypeScript;VB.NET;HTML;CSS
49651|Cyprus|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|51408.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;HTML;Bash/Shell
3826|United Kingdom|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|145849.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Objective-C;HTML;CSS
97944|United Kingdom|Slightly satisfied|Information systems, information technology, or system administration|76397.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;Perl;SQL;HTML;CSS;Bash/Shell
75725|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|86716.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|C;JavaScript;Perl;PHP;SQL;CSS;Bash/Shell
12153|India|Moderately satisfied|Computer science, computer engineering, or software engineering|52442.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;Java;Lua;Matlab;PHP;Python;R;Scala;SQL;HTML;CSS;Bash/Shell
85983|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|100000.0|I don't typically exercise|Male|White or of European descent|Associate degree|Less than 30 minutes|45 - 54 years old|More than 4 years ago|C#;JavaScript;Matlab;SQL;TypeScript;HTML;CSS
35562|Italy|Moderately satisfied|Computer science, computer engineering, or software engineering|24972.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Java;JavaScript;Matlab;Objective-C;PHP;Python;SQL
80333|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|74000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Objective-C;Swift
42389|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|50448.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Go;Java;Matlab;PHP;Python;HTML;CSS;Bash/Shell
76912|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|123000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|JavaScript;SQL
23596|Russian Federation|Slightly satisfied|Information systems, information technology, or system administration|12204.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;HTML;CSS
56958|United States|Moderately satisfied|Web development or web design|70000.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|PHP;HTML;CSS
85820|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|79552.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|Between 2 and 4 years ago|C#;Groovy;Java;JavaScript;Python;SQL;TypeScript;Bash/Shell
91042|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|75000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Delphi/Object Pascal
13046|Spain|Moderately dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|16884.0|1 - 2 times per week|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;HTML;CSS;Bash/Shell
27017|Spain|Neither satisfied nor dissatisfied|Web development or web design|31821.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|18 - 24 years old|Less than a year ago|CoffeeScript;JavaScript;TypeScript;HTML;CSS
78483|Brazil|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|18715.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Python;R;SQL;Bash/Shell
42468|Nepal|Extremely dissatisfied|Information systems, information technology, or system administration|1000.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Assembly;C;Java;JavaScript;PHP;Python;SQL;HTML;CSS
74344|Switzerland|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|93840.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Swift;Kotlin
19990|Austria|Slightly satisfied|Computer science, computer engineering, or software engineering|42360.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;PHP;SQL;TypeScript;Kotlin;HTML;CSS
61052|United States|Moderately satisfied|Information systems, information technology, or system administration|151000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
71568|Colombia|Slightly satisfied|Computer science, computer engineering, or software engineering|25308.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;Ruby;SQL;TypeScript;Visual Basic 6;HTML;CSS
47023|United States|Moderately satisfied|Mathematics or statistics|115000.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|JavaScript;Perl;Python;SQL;HTML;CSS
82643|Russian Federation|Moderately satisfied|Information systems, information technology, or system administration|42000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Python;Ruby;Bash/Shell
9619|India|Moderately satisfied|Computer science, computer engineering, or software engineering|9960.0|Daily or almost every day|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Groovy;Java
40725|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|112000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP;Python;SQL;VBA;HTML;CSS;Bash/Shell
72808|United States|Moderately satisfied|Information systems, information technology, or system administration|85748.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;Clojure;JavaScript;SQL;Visual Basic 6
56542|France|Slightly dissatisfied|Computer science, computer engineering, or software engineering|55075.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;JavaScript;SQL;HTML;CSS;Bash/Shell
54482|Germany|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|38184.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|CoffeeScript;JavaScript;Ruby;HTML;CSS
86364|United States|Slightly satisfied|A social science (ex. anthropology, psychology, political science)|123500.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Go;JavaScript;Objective-C;Python;Swift;Bash/Shell
71560|Japan|Slightly satisfied|Computer science, computer engineering, or software engineering|72031.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;JavaScript;Matlab;Python;R;TypeScript;HTML;CSS
67168|Saudi Arabia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|19200.0|3 - 4 times per week|Male|Black or of African descent;East Asian;Hispanic or Latino/Latina;Middle Eastern;Native American, Pacific Islander, or Indigenous Australian;South Asian;White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Objective-C;Swift
85454|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|East Asian;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C++;C#;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
59967|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|50000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|18 - 24 years old|Between 2 and 4 years ago|Assembly;C++;C#;JavaScript;Python;Rust;SQL;TypeScript;HTML;CSS;Bash/Shell
100644|Portugal|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|14688.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;Python
8643|Sweden|Extremely satisfied|Computer science, computer engineering, or software engineering|1000000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript
52973|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|62000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Ruby;HTML;CSS
46440|South Africa|Extremely satisfied|Computer science, computer engineering, or software engineering|63512.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;Objective-C;TypeScript;HTML;CSS
52766|Australia|Moderately satisfied|Information systems, information technology, or system administration|51983.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
82119|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|61194.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C++
23072|Hungary|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|21432.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Objective-C;Python;Swift;TypeScript;Kotlin;HTML;CSS;Bash/Shell
37129|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|76500.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;CSS
2041|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|130000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;JavaScript;Objective-C;Ruby;SQL;Swift;HTML;CSS
87531|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|97233.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;SQL;Kotlin;HTML;CSS
77409|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|70000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;Erlang;Go;Haskell;Java;JavaScript;Objective-C;PHP;Python;Ruby;SQL;Swift;TypeScript;Kotlin;HTML;CSS;Bash/Shell
74811|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|65000.0|I don't typically exercise|Female;Non-binary, genderqueer, or gender non-conforming|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
84361|Croatia|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|32364.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C++;Java;Python;Rust;Scala;Bash/Shell
89574|Bosnia and Herzegovina|Slightly dissatisfied|Computer science, computer engineering, or software engineering|7512.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C++;Java;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
2185|United States|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|71250.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
98951|United States|Extremely satisfied|I never declared a major|85000.0|I don't typically exercise|Female;Transgender|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;VB.NET;HTML;CSS;Bash/Shell
25172|United States|Moderately satisfied|Information systems, information technology, or system administration|98000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Go;JavaScript;Python;SQL;HTML;CSS
72753|Germany|Slightly dissatisfied|Mathematics or statistics|77104.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Matlab;Python;Bash/Shell
63125|Viet Nam|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|4800.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
36708|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|245000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
47885|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|135000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|Assembly;C++;C#;Objective-C;Perl;Bash/Shell
95952|Dominican Republic|Moderately satisfied|Computer science, computer engineering, or software engineering|22356.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|3 - 4 hours|25 - 34 years old|More than 4 years ago|C#;Java;JavaScript;Ruby;SQL;VB.NET
44360|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|7860.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C;C++;JavaScript;Matlab;Objective-C;Python;Ruby;Swift;HTML;CSS;Bash/Shell
73319|Switzerland|Extremely dissatisfied|Computer science, computer engineering, or software engineering|121995.0|I don't typically exercise|Female|Black or of African descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;Python;Scala;SQL;Bash/Shell
4346|India|Extremely dissatisfied|Computer science, computer engineering, or software engineering|5640.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;JavaScript;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
37351|United Kingdom|Moderately dissatisfied|Computer science, computer engineering, or software engineering|37504.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Assembly;C;C++;Java;JavaScript;Objective-C;PHP;Python;SQL;Swift;HTML;CSS;Bash/Shell
44823|United States|Moderately satisfied|Mathematics or statistics|120000.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Python;R;SQL;Bash/Shell
15005|Australia|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|159947.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Assembly;C;C++;C#;Erlang;Groovy;Java;JavaScript;R;SQL;TypeScript;VBA;HTML;CSS;Bash/Shell
98834|France|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|79552.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Scala;SQL
23981|United States|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|80000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|Assembly;C;C++;Java;JavaScript;Matlab;HTML
65730|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|87000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|CoffeeScript;JavaScript;PHP;HTML;CSS
35899|Ukraine|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|4680.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Ruby;SQL;HTML;CSS
74470|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|440592.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;Java;Python;R;SQL;HTML;CSS
59521|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|52627.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|JavaScript;HTML;CSS;Bash/Shell
51190|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|50004.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C++;Matlab;Python
75724|India|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|50094.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C++;Go;Java;Rust;Kotlin
58353|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|130000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Ruby;HTML;CSS
50731|Ukraine|Extremely dissatisfied|Computer science, computer engineering, or software engineering|25200.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Objective-C;Python;Swift;Bash/Shell
90041|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
99603|Lithuania|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|36720.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Go;JavaScript;Python;Bash/Shell
33013|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|110000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
42628|Hungary|Extremely satisfied|Computer science, computer engineering, or software engineering|43668.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;JavaScript;Python;HTML;CSS
20170|Kenya|Moderately satisfied|Computer science, computer engineering, or software engineering|8160.0|I don't typically exercise|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
77546|Sweden|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|51152.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Assembly;C;C++;Groovy;Perl;Python;SQL;Bash/Shell
80459|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|69452.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;Python;SQL;VBA;VB.NET;HTML;CSS;Bash/Shell
80088|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|27000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
20353|Spain|Slightly satisfied|Computer science, computer engineering, or software engineering|15298.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;SQL;HTML;CSS
56375|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|62000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;Python;SQL;TypeScript;HTML;CSS
42375|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|7140.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;Java;Matlab;Objective-C;PHP;SQL;Swift;VB.NET;Visual Basic 6;HTML;CSS
================================================
FILE: examples/sample-book/ext/splice/splice-resize.js
================================================
const bodyEl = document.body;
bodyEl.style.background = 'red';
const growBtn = document.createElement('button');
growBtn.textContent = 'Grow';
document.currentScript.parentElement.appendChild(growBtn);
growBtn.addEventListener('click', () => {
const currentHeight = bodyEl.clientHeight;
const newHeight = currentHeight + 100;
bodyEl.style.height = `${newHeight}px`;
window.parent.postMessage(
{
subject: 'lti.frameResize',
height: newHeight,
},
'*'
)
});
================================================
FILE: examples/sample-book/frontmatter.xml
================================================
Thomas W. JudsonDepartment of Mathematics and StatisticsStephen F. Austin State Universityjudsontw@sfasu.eduIsaac NewtonTrinity CollegeSage Exercises for Abstract AlgebraRobert A. BeezerDepartment of Mathematics and Computer ScienceUniversity of Puget Soundbeezer@pugetsound.eduCover DesignCovers 4 UProduction EditorVilma MesaAnnual Edition 2015Some text to test bug report19972015Thomas W. Judson, Robert A. BeezerGFDL LicensePermission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the appendix entitled GNU Free Documentation License. All trademarks are the registered marks of their respective owners. An external link is includedA second footnote, as well. to test its footnote.abstract algebraPreTeXtsamples
This work has received assistance from numerous volunteer contributors.
Thomas W. Judson did his undergraduate work in Illinois, his graduate work in Oregon and presently teaches in Texas.
He likes to ride his bicycle in France, especially in the high Alps and Pyrenees on the roads of the Tour de France.
About Robert A. Beezer
Rob Beezer designed, wrote, and tested the Sage exercises as a contribution to this open source project.
He also likes to ride his bicycle, and once rode with Tom Judson in the high Alps, in addition to some hiking there, up above the passes the cyclists ride.
To students of algebra everywherethey are the reason
And to those who teach them
I would like to acknowledge the following reviewers for their helpful comments and suggestions.
David Anderson, University of Tennessee, Knoxville
Robert Beezer, University of Puget Sound
Myron Hood, California Polytechnic State University
Herbert Kasube, Bradley University
John Kurtzke, University of Portland
Inessa Levi, University of Louisville
Geoffrey Mason, University of California, Santa Cruz
Bruce Mericle, Mankato State University
Kimmo Rosenthal, Union College
Mark Teply, University of Wisconsin
I would also like to thank Steve Quigley, Marnie Pommett, Cathie Griffin, Kelle Karshick, and the rest of the staff at PWS Publishing for their guidance throughout this project. It has been a pleasure to work with them.
Robert Beezer encouraged me to make Abstract Algebra: Theory and Applications available as an open source textbook, a decision that I have never regretted. With his assistance, the book has been rewritten in PreTeXt (), making it possible to quickly output print, web, PDF versions and more from the same source. The open source version of this book has received support from the National Science Foundation (Award #DUE-1020957).
This text is intended for a one or two-semester undergraduate course in abstract algebra. Traditionally, these courses have covered the theoretical aspects of groups, rings, and fields. However, with the development of computing in the last several decades, applications that involve abstract algebra and discrete mathematics have become increasingly important, and many science, engineering, and computer science students are now electing to minor in mathematics. Though theory still occupies a central role in the subject of abstract algebra and no student should go through such a course without a good notion of what a proof is, the importance of applications such as coding theory and cryptography has grown significantly.
Until recently most abstract algebra texts included few if any applications. However, one of the major problems in teaching an abstract algebra course is that for many students it is their first encounter with an environment that requires them to do rigorous proofs. Such students often find it hard to see the use of learning to prove theorems and propositions; applied examples help the instructor provide motivation.
This text contains more material than can possibly be covered in a single semester. Certainly there is adequate material for a two-semester course, and perhaps more; however, for a one-semester course it would be quite easy to omit selected chapters and still have a useful text. The order of presentation of topics is standard: groups, then rings, and finally fields. Emphasis can be placed either on theory or on applications. A typical one-semester course might cover groups and rings while briefly touching on field theory, using Chapters1 through 6, 9, 10, 11, 13 (the first part), 16, 17, 18 (the first part), 20, and 21. Parts of these chapters could be deleted and applications substituted according to the interests of the students and the instructor. A two-semester course emphasizing theory might cover Chapters1 through 6, 9, 10, 11, 13 through 18, 20, 21, 22 (the first part), and 23. On the other hand, if applications are to be emphasized, the course might cover Chapters 1 through 14, and 16 through 22. In an applied course, some of the more theoretical results could be assumed or omitted. A chapter dependency chart appears below. (A broken line indicates a partial dependency.) See the Table of Contents for more.
This real text has been used as the basis of a sample book for testing . So it is slowly migrating away from what the real book looks like and should not be construed as representative. For example, we have reduced the book to four chapters.
This real text has been used as the basis of a sample book for testing . So it is slowly migrating away from what the real book looks like and should not be construed as representative. For example, we have reduced the book to four chapters, broken into two parts, and . Indeed, that previous sentence was more an excuse to test some cross-references with parts in the structural case, such as this one to DeMoivre's Theorem, .
Though there are no specific prerequisites for a course in abstract algebra, students who have had other higher-level courses in mathematics will generally be more prepared than those who have not, because they will possess a bit more mathematical sophistication. Occasionally, we shall assume some basic linear algebra; that is, we shall take for granted an elementary knowledge of matrices and determinants. This should present no great problem, since most students taking a course in abstract algebra have been introduced to matrices and determinants elsewhere in their career, if they have not already taken a sophomore or junior-level course in linear algebra.
Exercise sections are the heart of any mathematics text. An exercise set appears at the end of each chapter. The nature of the exercises ranges over several categories; computational, conceptual, and theoretical problems are included. A section presenting hints and solutions to many of the exercises appears at the end of the text. Often in the solutions a proof is only sketched, and it is up to the student to provide the details. The exercises range in difficulty from very easy to very challenging. Many of the more substantial problems require careful thought, so the student should not be discouraged if the solution is not forthcoming after a few minutes of work.
There are additional exercises or computer projects at the ends of many of the chapters. The computer projects usually require a knowledge of programming. All of these exercises and projects are more substantial in nature and allow the exploration of new results and theory.
Sage () is a free, open source, software system for advanced mathematics, which is ideal for assisting with a study of abstract algebra. Sage can be used either on your own computer, a local server, or on SageMathCloud (). Robert Beezer has written a comprehensive introduction to Sage and a selection of relevant exercises that appear at the end of each chapter, including live Sage cells in the web version of the book.
Thomas W. JudsonNacogdoches, Texas 2015Contributors to the 4^\mathrm{th} Edition
Many individuals have made this book possible. We will try to thank a few of them here, and hope we have not forgotten anybody really important.
Thomas JudsonDepartment of Mathematics and StatisticsStephen F. Austin State Universityjudsontw@sfasu.eduDavid FarmerAmerican Institute of Mathematicsfarmer@aimath.orgRobert BeezerDepartment of Mathematics and Computer ScienceUniversity of Puget SoundTacoma, Washington, USAbeezer@pugetsound.eduAlex JordanDepartment of MathematicsPortland Community CollegePortland, ORalex.jordan@pcc.eduThomas JudsonDepartment of Mathematics and StatisticsStephen F. Austin State Universityjudsontw@sfasu.eduDavid FarmerAmerican Institute of Mathematicsfarmer@aimath.orgRobert BeezerDepartment of Mathematics and Computer ScienceUniversity of Puget SoundTacoma, Washington, USAbeezer@pugetsound.eduAlex JordanDepartment of MathematicsPortland Community CollegePortland, ORalex.jordan@pcc.eduThomas JudsonDepartment of Mathematics and StatisticsStephen F. Austin State Universityjudsontw@sfasu.eduDavid FarmerAmerican Institute of Mathematicsfarmer@aimath.orgRobert BeezerDepartment of Mathematics and Computer ScienceUniversity of Puget SoundTacoma, Washington, USAbeezer@pugetsound.eduAlex JordanDepartment of MathematicsPortland Community CollegePortland, ORalex.jordan@pcc.eduThomas JudsonDepartment of Mathematics and StatisticsStephen F. Austin State Universityjudsontw@sfasu.eduDavid FarmerAmerican Institute of Mathematicsfarmer@aimath.orgRobert BeezerDepartment of Mathematics and Computer ScienceUniversity of Puget SoundTacoma, Washington, USAbeezer@pugetsound.eduAlex JordanDepartment of MathematicsPortland Community CollegePortland, ORalex.jordan@pcc.eduThomas JudsonDepartment of Mathematics and StatisticsStephen F. Austin State Universityjudsontw@sfasu.eduDavid FarmerAmerican Institute of Mathematicsfarmer@aimath.orgRobert BeezerDepartment of Mathematics and Computer ScienceUniversity of Puget SoundTacoma, Washington, USAbeezer@pugetsound.eduAlex JordanDepartment of MathematicsPortland Community CollegePortland, ORalex.jordan@pcc.edu
That's it. Thanks everybody.
================================================
FILE: examples/sample-book/gen/datafile/beach-datafile.xml
================================================
================================================
FILE: examples/sample-book/gen/datafile/file-picture-classes-jar.xml
================================================
import java.awt.Image;
import java.awt.image.BufferedImage;
/**
* Interface to describe a digital picture. A digital picture can have an
* associated file name. It can have a title. It has pixels
* associated with it and you can get and set the pixels. You
* can get an Image from a picture or a BufferedImage. You can load
* it from a file name or image. You can show a picture. You can
* explore a picture. You can create a new image for it.
*
* @author Barb Ericson ericson@cc.gatech.edu
*/
public interface DigitalPicture
{
public String getFileName(); // get the file name that the picture came from
public String getTitle(); // get the title of the picture
public void setTitle(String title); // set the title of the picture
public int getWidth(); // get the width of the picture in pixels
public int getHeight(); // get the height of the picture in pixels
public Image getImage(); // get the image from the picture
public BufferedImage getBufferedImage(); // get the buffered image
public int getBasicPixel(int x, int y); // get the pixel information as an int
public void setBasicPixel(int x, int y, int rgb); // set the pixel information
public Pixel getPixel(int x, int y); // get the pixel information as an object
public Pixel[] getPixels(); // get all pixels in row-major order
public Pixel[][] getPixels2D(); // get 2-D array of pixels in row-major order
public void load(Image image); // load the image into the picture
public boolean load(String fileName); // load the picture from a file
public void show(); // show the picture
public boolean write(String fileName); // write out a file
}
import java.awt.Color;
/**
* Class that references a pixel in a picture. Pixel
* stands for picture element where picture is
* abbreviated pix. A pixel has a column (x) and
* row (y) location in a picture. A pixel knows how
* to get and set the red, green, blue, and alpha
* values in the picture. A pixel also knows how to get
* and set the color using a Color object.
*
* @author Barb Ericson ericson@cc.gatech.edu
*/
public class Pixel
{
////////////////////////// fields ///////////////////////////////////
/** the digital picture this pixel belongs to */
private DigitalPicture picture;
/** the x (column) location of this pixel in the picture; (0,0) is top left */
private int x;
/** the y (row) location of this pixel in the picture; (0,0) is top left */
private int y;
////////////////////// constructors /////////////////////////////////
/**
* A constructor that takes the x and y location for the pixel and
* the picture the pixel is coming from
* @param picture the picture that the pixel is in
* @param x the x location of the pixel in the picture
* @param y the y location of the pixel in the picture
*/
public Pixel(DigitalPicture picture, int x, int y)
{
// set the picture
this.picture = picture;
// set the x location
this.x = x;
// set the y location
this.y = y;
}
///////////////////////// methods //////////////////////////////
/**
* Method to get the x location of this pixel.
* @return the x location of the pixel in the picture
*/
public int getX() { return x; }
/**
* Method to get the y location of this pixel.
* @return the y location of the pixel in the picture
*/
public int getY() { return y; }
/**
* Method to get the row (y value)
* @return the row (y value) of the pixel in the picture
*/
public int getRow() { return y; }
/**
* Method to get the column (x value)
* @return the column (x value) of the pixel
*/
public int getCol() { return x; }
/**
* Method to get the amount of alpha (transparency) at this pixel.
* It will be from 0-255.
* @return the amount of alpha (transparency)
*/
public int getAlpha() {
/* get the value at the location from the picture as a 32 bit int
* with alpha, red, green, blue each taking 8 bits from left to right
*/
int value = picture.getBasicPixel(x,y);
// get the alpha value (starts at 25 so shift right 24)
// then and it with all 1's for the first 8 bits to keep
// end up with from 0 to 255
int alpha = (value >> 24) & 0xff;
return alpha;
}
/**
* Method to get the amount of red at this pixel. It will be
* from 0-255 with 0 being no red and 255 being as much red as
* you can have.
* @return the amount of red from 0 for none to 255 for max
*/
public int getRed() {
/* get the value at the location from the picture as a 32 bit int
* with alpha, red, green, blue each taking 8 bits from left to right
*/
int value = picture.getBasicPixel(x,y);
// get the red value (starts at 17 so shift right 16)
// then AND it with all 1's for the first 8 bits to
// end up with a resulting value from 0 to 255
int red = (value >> 16) & 0xff;
return red;
}
/**
* Method to get the red value from a pixel represented as an int
* @param value the color value as an int
* @return the amount of red
*/
public static int getRed(int value)
{
int red = (value >> 16) & 0xff;
return red;
}
/**
* Method to get the amount of green at this pixel. It will be
* from 0-255 with 0 being no green and 255 being as much green as
* you can have.
* @return the amount of green from 0 for none to 255 for max
*/
public int getGreen() {
/* get the value at the location from the picture as a 32 bit int
* with alpha, red, green, blue each taking 8 bits from left to right
*/
int value = picture.getBasicPixel(x,y);
// get the green value (starts at 9 so shift right 8)
int green = (value >> 8) & 0xff;
return green;
}
/**
* Method to get the green value from a pixel represented as an int
* @param value the color value as an int
* @return the amount of green
*/
public static int getGreen(int value)
{
int green = (value >> 8) & 0xff;
return green;
}
/**
* Method to get the amount of blue at this pixel. It will be
* from 0-255 with 0 being no blue and 255 being as much blue as
* you can have.
* @return the amount of blue from 0 for none to 255 for max
*/
public int getBlue() {
/* get the value at the location from the picture as a 32 bit int
* with alpha, red, green, blue each taking 8 bits from left to right
*/
int value = picture.getBasicPixel(x,y);
// get the blue value (starts at 0 so no shift required)
int blue = value & 0xff;
return blue;
}
/**
* Method to get the blue value from a pixel represented as an int
* @param value the color value as an int
* @return the amount of blue
*/
public static int getBlue(int value)
{
int blue = value & 0xff;
return blue;
}
/**
* Method to get a color object that represents the color at this pixel.
* @return a color object that represents the pixel color
*/
public Color getColor()
{
/* get the value at the location from the picture as a 32 bit int
* with alpha, red, green, blue each taking 8 bits from left to right
*/
int value = picture.getBasicPixel(x,y);
// get the red value (starts at 17 so shift right 16)
// then AND it with all 1's for the first 8 bits to
// end up with a resulting value from 0 to 255
int red = (value >> 16) & 0xff;
// get the green value (starts at 9 so shift right 8)
int green = (value >> 8) & 0xff;
// get the blue value (starts at 0 so no shift required)
int blue = value & 0xff;
return new Color(red,green,blue);
}
/**
* Method to set the pixel color to the passed in color object.
* @param newColor the new color to use
*/
public void setColor(Color newColor)
{
// set the red, green, and blue values
int red = newColor.getRed();
int green = newColor.getGreen();
int blue = newColor.getBlue();
// update the associated picture
updatePicture(this.getAlpha(),red,green,blue);
}
/**
* Method to update the picture based on the passed color
* values for this pixel
* @param alpha the alpha (transparency) at this pixel
* @param red the red value for the color at this pixel
* @param green the green value for the color at this pixel
* @param blue the blue value for the color at this pixel
*/
public void updatePicture(int alpha, int red, int green, int blue)
{
// create a 32 bit int with alpha, red, green blue from left to right
int value = (alpha << 24) + (red << 16) + (green << 8) + blue;
// update the picture with the int value
picture.setBasicPixel(x,y,value);
}
/**
* Method to correct a color value to be within 0 to 255
* @param the value to use
* @return a value within 0 to 255
*/
private static int correctValue(int value)
{
if (value < 0)
value = 0;
if (value > 255)
value = 255;
return value;
}
/**
* Method to set the red to a new red value
* @param value the new value to use
*/
public void setRed(int value)
{
// set the red value to the corrected value
int red = correctValue(value);
// update the pixel value in the picture
updatePicture(getAlpha(), red, getGreen(), getBlue());
}
/**
* Method to set the green to a new green value
* @param value the value to use
*/
public void setGreen(int value)
{
// set the green value to the corrected value
int green = correctValue(value);
// update the pixel value in the picture
updatePicture(getAlpha(), getRed(), green, getBlue());
}
/**
* Method to set the blue to a new blue value
* @param value the new value to use
*/
public void setBlue(int value)
{
// set the blue value to the corrected value
int blue = correctValue(value);
// update the pixel value in the picture
updatePicture(getAlpha(), getRed(), getGreen(), blue);
}
/**
* Method to set the alpha (transparency) to a new alpha value
* @param value the new value to use
*/
public void setAlpha(int value)
{
// make sure that the alpha is from 0 to 255
int alpha = correctValue(value);
// update the associated picture
updatePicture(alpha, getRed(), getGreen(), getBlue());
}
/**
* Method to get the distance between this pixel's color and the passed color
* @param testColor the color to compare to
* @return the distance between this pixel's color and the passed color
*/
public double colorDistance(Color testColor)
{
double redDistance = this.getRed() - testColor.getRed();
double greenDistance = this.getGreen() - testColor.getGreen();
double blueDistance = this.getBlue() - testColor.getBlue();
double distance = Math.sqrt(redDistance * redDistance +
greenDistance * greenDistance +
blueDistance * blueDistance);
return distance;
}
/**
* Method to compute the color distances between two color objects
* @param color1 a color object
* @param color2 a color object
* @return the distance between the two colors
*/
public static double colorDistance(Color color1,Color color2)
{
double redDistance = color1.getRed() - color2.getRed();
double greenDistance = color1.getGreen() - color2.getGreen();
double blueDistance = color1.getBlue() - color2.getBlue();
double distance = Math.sqrt(redDistance * redDistance +
greenDistance * greenDistance +
blueDistance * blueDistance);
return distance;
}
/**
* Method to get the average of the colors of this pixel
* @return the average of the red, green, and blue values
*/
public double getAverage()
{
double average = (getRed() + getGreen() + getBlue()) / 3.0;
return average;
}
/**
* Method to return a string with information about this pixel
* @return a string with information about this pixel
*/
public String toString()
{
return "Pixel row=" + getRow() +
" col=" + getCol() +
" red=" + getRed() +
" green=" + getGreen() +
" blue=" + getBlue();
}
}
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import java.awt.*;
import java.io.*;
import java.awt.geom.*;
import java.io.ByteArrayOutputStream;
//import javax.xml.bind.DatatypeConverter;
import java.util.Base64;
import java.util.Scanner;
/**
* A class that represents a simple picture. A simple picture may have
* an associated file name and a title. A simple picture has pixels,
* width, and height. A simple picture uses a BufferedImage to
* hold the pixels. You can also explore a simple picture.
*
* @author Barb Ericson ericson@cc.gatech.edu
*/
public class SimplePicture implements DigitalPicture
{
/////////////////////// Fields /////////////////////////
/**
* the file name associated with the simple picture
*/
private String fileName;
/**
* the path name for the file
*/
private String pathName;
/**
* the title of the simple picture
*/
private String title;
/**
* buffered image to hold pixels for the simple picture
*/
private BufferedImage bufferedImage;
/**
* extension for this file (jpg or bmp)
*/
private String extension;
/////////////////////// Constructors /////////////////////////
/**
* A Constructor that takes no arguments. It creates a picture with
* a width of 200 and a height of 100 that is all white.
* A no-argument constructor must be given in order for a class to
* be able to be subclassed. By default all subclasses will implicitly
* call this in their parent's no-argument constructor unless a
* different call to super() is explicitly made as the first line
* of code in a constructor.
*/
public SimplePicture()
{this(200,100);}
/**
* A Constructor that takes a file name and uses the file to create
* a picture
* @param fileName the file name to use in creating the picture
*/
public SimplePicture(String fileName)
{
// load the picture into the buffered image
load(fileName);
}
/**
* A constructor that takes the width and height desired for a picture and
* creates a buffered image of that size. This constructor doesn't
* show the picture. The pixels will all be white.
* @param width the desired width
* @param height the desired height
*/
public SimplePicture(int width, int height)
{
bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
title = "None";
fileName = "None";
extension = "jpg";
setAllPixelsToAColor(Color.white);
}
/**
* A constructor that takes the width and height desired for a picture and
* creates a buffered image of that size. It also takes the
* color to use for the background of the picture.
* @param width the desired width
* @param height the desired height
* @param theColor the background color for the picture
*/
public SimplePicture(int width, int height, Color theColor)
{
this(width,height);
setAllPixelsToAColor(theColor);
}
/**
* A Constructor that takes a picture to copy information from
* @param copyPicture the picture to copy from
*/
public SimplePicture(SimplePicture copyPicture)
{
if (copyPicture.fileName != null)
{
this.fileName = new String(copyPicture.fileName);
this.extension = copyPicture.extension;
}
if (copyPicture.title != null)
this.title = new String(copyPicture.title);
if (copyPicture.bufferedImage != null)
{
this.bufferedImage = new BufferedImage(copyPicture.getWidth(), copyPicture.getHeight(), BufferedImage.TYPE_INT_RGB);
this.copyPicture(copyPicture);
}
}
/**
* A constructor that takes a buffered image
* @param image the buffered image
*/
public SimplePicture(BufferedImage image)
{
this.bufferedImage = image;
title = "None";
fileName = "None";
extension = "jpg";
}
////////////////////////// Methods //////////////////////////////////
/**
* Method to get the extension for this picture
* @return the extension (jpg, bmp, giff, etc)
*/
public String getExtension() { return extension; }
/**
* Method that will copy all of the passed source picture into
* the current picture object
* @param sourcePicture the picture object to copy
*/
public void copyPicture(SimplePicture sourcePicture)
{
Pixel sourcePixel = null;
Pixel targetPixel = null;
// loop through the columns
for (int sourceX = 0, targetX = 0;
sourceX < sourcePicture.getWidth() &&
targetX < this.getWidth();
sourceX++, targetX++)
{
// loop through the rows
for (int sourceY = 0, targetY = 0;
sourceY < sourcePicture.getHeight() &&
targetY < this.getHeight();
sourceY++, targetY++)
{
sourcePixel = sourcePicture.getPixel(sourceX,sourceY);
targetPixel = this.getPixel(targetX,targetY);
targetPixel.setColor(sourcePixel.getColor());
}
}
}
/**
* Method to set the color in the picture to the passed color
* @param color the color to set to
*/
public void setAllPixelsToAColor(Color color)
{
// loop through all x
for (int x = 0; x < this.getWidth(); x++)
{
// loop through all y
for (int y = 0; y < this.getHeight(); y++)
{
getPixel(x,y).setColor(color);
}
}
}
/**
* Method to get the buffered image
* @return the buffered image
*/
public BufferedImage getBufferedImage()
{
return bufferedImage;
}
/**
* Method to get a graphics object for this picture to use to draw on
* @return a graphics object to use for drawing
*/
public Graphics getGraphics()
{
return bufferedImage.getGraphics();
}
/**
* Method to get a Graphics2D object for this picture which can
* be used to do 2D drawing on the picture
*/
public Graphics2D createGraphics()
{
return bufferedImage.createGraphics();
}
/**
* Method to get the file name associated with the picture
* @return the file name associated with the picture
*/
public String getFileName() { return fileName; }
/**
* Method to set the file name
* @param name the full pathname of the file
*/
public void setFileName(String name)
{
fileName = name;
}
/**
* Method to get the title of the picture
* @return the title of the picture
*/
public String getTitle()
{ return title; }
/**
* Method to set the title for the picture
* @param title the title to use for the picture
*/
public void setTitle(String title)
{
this.title = title;
}
/**
* Method to get the width of the picture in pixels
* @return the width of the picture in pixels
*/
public int getWidth() { return bufferedImage.getWidth(); }
/**
* Method to get the height of the picture in pixels
* @return the height of the picture in pixels
*/
public int getHeight() { return bufferedImage.getHeight(); }
/**
* Method to get an image from the picture
* @return the buffered image since it is an image
*/
public Image getImage()
{
return bufferedImage;
}
/**
* Method to return the pixel value as an int for the given x and y location
* @param x the x coordinate of the pixel
* @param y the y coordinate of the pixel
* @return the pixel value as an integer (alpha, red, green, blue)
*/
public int getBasicPixel(int x, int y)
{
return bufferedImage.getRGB(x,y);
}
/**
* Method to set the value of a pixel in the picture from an int
* @param x the x coordinate of the pixel
* @param y the y coordinate of the pixel
* @param rgb the new rgb value of the pixel (alpha, red, green, blue)
*/
public void setBasicPixel(int x, int y, int rgb)
{
bufferedImage.setRGB(x,y,rgb);
}
/**
* Method to get a pixel object for the given x and y location
* @param x the x location of the pixel in the picture
* @param y the y location of the pixel in the picture
* @return a Pixel object for this location
*/
public Pixel getPixel(int x, int y)
{
// create the pixel object for this picture and the given x and y location
Pixel pixel = new Pixel(this,x,y);
return pixel;
}
/**
* Method to get a one-dimensional array of Pixels for this simple picture
* @return a one-dimensional array of Pixel objects starting with y=0
* to y=height-1 and x=0 to x=width-1.
*/
public Pixel[] getPixels()
{
int width = getWidth();
int height = getHeight();
Pixel[] pixelArray = new Pixel[width * height];
// loop through height rows from top to bottom
for (int row = 0; row < height; row++)
for (int col = 0; col < width; col++)
pixelArray[row * width + col] = new Pixel(this,col,row);
return pixelArray;
}
/**
* Method to get a two-dimensional array of Pixels for this simple picture
* @return a two-dimensional array of Pixel objects in row-major order.
*/
public Pixel[][] getPixels2D()
{
int width = getWidth();
int height = getHeight();
Pixel[][] pixelArray = new Pixel[height][width];
// loop through height rows from top to bottom
for (int row = 0; row < height; row++)
for (int col = 0; col < width; col++)
pixelArray[row][col] = new Pixel(this,col,row);
return pixelArray;
}
/**
* Method to load the buffered image with the passed image
* @param image the image to use
*/
public void load(Image image)
{
// get a graphics context to use to draw on the buffered image
Graphics2D graphics2d = bufferedImage.createGraphics();
// draw the image on the buffered image starting at 0,0
graphics2d.drawImage(image,0,0,null);
// show the new image
show();
}
/**
* Method to show the picture in a picture frame
*/
public void show()
{
try {
ByteArrayOutputStream output = new ByteArrayOutputStream();
ImageIO.write(this.bufferedImage, "png", output);
String result = Base64.getEncoder().encodeToString(output.toByteArray());
//BH: using Base64 instead of DatatypeConverter.printBase64Binary(output.toByteArray());
System.out.println("<img src=\'data:image/" + this.extension + ";base64," + result + "\'/>");
} catch (IOException e) {
System.out.println("Errors occured in image conversion");
}
}
/**
* Method to open a picture explorer on a copy (in memory) of this
* simple picture
*/
/*
public void explore()
{
// create a copy of the current picture and explore it
new PictureExplorer(new SimplePicture(this));
}
*/
/**
* Method to load the picture from the passed file name
* @param fileName the file name to use to load the picture from
* @throws IOException if the picture isn't found
*/
public void loadOrFail(String fileName) throws IOException
{
// set the current picture's file name
this.fileName = fileName;
// set the extension
int posDot = fileName.lastIndexOf('.');
if (posDot >= 0)
this.extension = fileName.substring(posDot + 1);
// get file location
String[] paths = fileName.split("/");
this.pathName = "";
if(paths.length != 1) {
for(int i = 0; i < paths.length - 1; i++) {
this.pathName = this.pathName + paths[i] + "/";
}
}
// if the current title is null use the file name
if (title == null)
title = fileName;
File file = new File(this.fileName);
if (!file.canRead())
{
throw new IOException(this.fileName +
" could not be opened. Check that you specified the path");
}
this.bufferedImage = ImageIO.read(file);
}
/**
* Method to read the contents of the picture from a filename
* without throwing errors
* @param fileName the name of the file to write the picture to
* @return true if success else false
*/
public boolean load(String fileName)
{
try {
this.loadOrFail(fileName);
return true;
} catch (Exception ex) {
System.out.println("There was an error trying to open " + fileName);
bufferedImage = new BufferedImage(600,200,
BufferedImage.TYPE_INT_RGB);
addMessage("Couldn't load " + fileName,5,100);
return false;
}
}
/**
* Method to load the picture from the passed file name
* this just calls load(fileName) and is for name compatibility
* @param fileName the file name to use to load the picture from
* @return true if success else false
*/
public boolean loadImage(String fileName)
{
return load(fileName);
}
/**
* Method to draw a message as a string on the buffered image
* @param message the message to draw on the buffered image
* @param xPos the x coordinate of the leftmost point of the string
* @param yPos the y coordinate of the bottom of the string
*/
public void addMessage(String message, int xPos, int yPos)
{
// get a graphics context to use to draw on the buffered image
Graphics2D graphics2d = bufferedImage.createGraphics();
// set the color to white
graphics2d.setPaint(Color.white);
// set the font to Helvetica bold style and size 16
graphics2d.setFont(new Font("Helvetica",Font.BOLD,16));
// draw the message
graphics2d.drawString(message,xPos,yPos);
}
/**
* Method to draw a string at the given location on the picture
* @param text the text to draw
* @param xPos the left x for the text
* @param yPos the top y for the text
*/
public void drawString(String text, int xPos, int yPos)
{
addMessage(text,xPos,yPos);
}
/**
* Method to create a new picture by scaling the current
* picture by the given x and y factors
* @param xFactor the amount to scale in x
* @param yFactor the amount to scale in y
* @return the resulting picture
*/
public Picture scale(double xFactor, double yFactor)
{
// set up the scale transform
AffineTransform scaleTransform = new AffineTransform();
scaleTransform.scale(xFactor,yFactor);
// create a new picture object that is the right size
Picture result = new Picture((int) (getHeight() * yFactor),
(int) (getWidth() * xFactor));
// get the graphics 2d object to draw on the result
Graphics graphics = result.getGraphics();
Graphics2D g2 = (Graphics2D) graphics;
// draw the current image onto the result image scaled
g2.drawImage(this.getImage(),scaleTransform,null);
return result;
}
/**
* Method to create a new picture of the passed width.
* The aspect ratio of the width and height will stay
* the same.
* @param width the desired width
* @return the resulting picture
*/
public Picture getPictureWithWidth(int width)
{
// set up the scale transform
double xFactor = (double) width / this.getWidth();
Picture result = scale(xFactor,xFactor);
return result;
}
/**
* Method to create a new picture of the passed height.
* The aspect ratio of the width and height will stay
* the same.
* @param height the desired height
* @return the resulting picture
*/
public Picture getPictureWithHeight(int height)
{
// set up the scale transform
double yFactor = (double) height / this.getHeight();
Picture result = scale(yFactor,yFactor);
return result;
}
/**
* Method to load a picture from a file name and show it in a picture frame
* @param fileName the file name to load the picture from
* @return true if success else false
*/
public boolean loadPictureAndShowIt(String fileName)
{
boolean result = true; // the default is that it worked
// try to load the picture into the buffered image from the file name
result = load(fileName);
// show the picture in a picture frame
show();
return result;
}
/**
* Method to write the contents of the picture to a file with
* the passed name
* @param fileName the name of the file to write the picture to
*/
public void writeOrFail(String fileName) throws IOException
{
String extension = this.extension; // the default is current
// create the file object
File file = new File(this.pathName + fileName);
//File fileLoc = file.getParentFile(); // directory name
// if there is no parent directory use the current media dir
//if (fileLoc == null)
//{
//fileName = FileChooser.getMediaPath(fileName);
//file = new File(fileName);
//fileLoc = file.getParentFile();
//}
// check that you can write to the directory
//if (!fileLoc.canWrite()) {
// throw new IOException(fileName +
// " could not be opened. Check to see if you can write to the directory.");
//}
// get the extension
int posDot = fileName.indexOf('.');
if (posDot >= 0)
extension = fileName.substring(posDot + 1);
// write the contents of the buffered image to the file
ImageIO.write(bufferedImage, extension, file);
}
/**
* Method to write the contents of the picture to a file with
* the passed name without throwing errors
* @param fileName the name of the file to write the picture to
* @return true if success else false
*/
public boolean write(String fileName)
{
try {
this.writeOrFail(fileName);
return true;
} catch (Exception ex) {
System.out.println("There was an error trying to write " + fileName);
ex.printStackTrace();
return false;
}
}
/**
* Method to get the coordinates of the enclosing rectangle after this
* transformation is applied to the current picture
* @return the enclosing rectangle
*/
public Rectangle2D getTransformEnclosingRect(AffineTransform trans)
{
int width = getWidth();
int height = getHeight();
double maxX = width - 1;
double maxY = height - 1;
double minX, minY;
Point2D.Double p1 = new Point2D.Double(0,0);
Point2D.Double p2 = new Point2D.Double(maxX,0);
Point2D.Double p3 = new Point2D.Double(maxX,maxY);
Point2D.Double p4 = new Point2D.Double(0,maxY);
Point2D.Double result = new Point2D.Double(0,0);
Rectangle2D.Double rect = null;
// get the new points and min x and y and max x and y
trans.deltaTransform(p1,result);
minX = result.getX();
maxX = result.getX();
minY = result.getY();
maxY = result.getY();
trans.deltaTransform(p2,result);
minX = Math.min(minX,result.getX());
maxX = Math.max(maxX,result.getX());
minY = Math.min(minY,result.getY());
maxY = Math.max(maxY,result.getY());
trans.deltaTransform(p3,result);
minX = Math.min(minX,result.getX());
maxX = Math.max(maxX,result.getX());
minY = Math.min(minY,result.getY());
maxY = Math.max(maxY,result.getY());
trans.deltaTransform(p4,result);
minX = Math.min(minX,result.getX());
maxX = Math.max(maxX,result.getX());
minY = Math.min(minY,result.getY());
maxY = Math.max(maxY,result.getY());
// create the bounding rectangle to return
rect = new Rectangle2D.Double(minX,minY,maxX - minX + 1, maxY - minY + 1);
return rect;
}
/**
* Method to get the coordinates of the enclosing rectangle after this
* transformation is applied to the current picture
* @return the enclosing rectangle
*/
public Rectangle2D getTranslationEnclosingRect(AffineTransform trans)
{
return getTransformEnclosingRect(trans);
}
/**
* Method to return a string with information about this picture
* @return a string with information about the picture
*/
public String toString()
{
String output = "Simple Picture, filename " + fileName +
" height " + getHeight() + " width " + getWidth();
return output;
}
} // end of SimplePicture class
================================================
FILE: examples/sample-book/gen/datafile/flower1-datafile.xml
================================================
================================================
FILE: examples/sample-book/gen/datafile/flower2-datafile.xml
================================================
================================================
FILE: examples/sample-book/gen/datafile/golden-gate.xml
================================================
================================================
FILE: examples/sample-book/gen/datafile/golden-gate2.xml
================================================
================================================
FILE: examples/sample-book/gen/datafile/luther-bell.xml
================================================
================================================
FILE: examples/sample-book/gen/datafile/stack-overflow-survey.xml
================================================
Respondent|Country|JobSatisfaction|UndergradMajor|ConvertedSalary|Exercise|Gender|RaceEthnicity|EducationParents|HoursOutside|Age|LastNewJob|LanguageWorkedWith
51900|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|94455.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|35 - 44 years old|Between 1 and 2 years ago|C;C#;Java;JavaScript;Objective-C;PHP;Swift;HTML;CSS
95836|Argentina|Slightly satisfied|A business discipline (ex. accounting, finance, marketing)|45600.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;CoffeeScript;JavaScript;Ruby;HTML;CSS;Bash/Shell
51710|Germany|Slightly dissatisfied|A social science (ex. anthropology, psychology, political science)|807756.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;Python;TypeScript;HTML;Bash/Shell
44125|United States|Moderately dissatisfied|A social science (ex. anthropology, psychology, political science)|175000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|45 - 54 years old|Between 1 and 2 years ago|JavaScript;Python
35167|United Kingdom|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|90288.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Go;JavaScript;Ruby;HTML;CSS
31721|Japan|Slightly dissatisfied|Information systems, information technology, or system administration|77433.0|3 - 4 times per week|Male|East Asian|They never completed any formal education|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP
36729|Brazil|Moderately dissatisfied|Computer science, computer engineering, or software engineering|16848.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS
38620|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|73433.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Groovy;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
54695|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|82000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;Python;SQL
22810|Turkey|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|25428.0|I don't typically exercise|Male|Middle Eastern|Primary/elementary school|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#
6289|Germany|Extremely satisfied|Information systems, information technology, or system administration|79552.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Java;JavaScript;HTML
48220|Turkey|Moderately dissatisfied|Computer science, computer engineering, or software engineering|12720.0|1 - 2 times per week|Male|Middle Eastern|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;PHP;SQL;HTML;CSS
72519|Belgium|Extremely satisfied|Information systems, information technology, or system administration|44064.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C#;Erlang;Haskell;Java;JavaScript;Matlab;Objective-C;PHP;Python;R;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS
99498|Estonia|Slightly satisfied|Computer science, computer engineering, or software engineering|32316.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Python;SQL;HTML;CSS
42989|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|57170.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;CoffeeScript;F#;JavaScript;SQL;VB.NET;HTML;CSS;Bash/Shell
75468|Ukraine|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|6684.0|Daily or almost every day|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;HTML;CSS
4814|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|50000.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;JavaScript;PHP;Python;SQL;Delphi/Object Pascal;HTML;CSS;Bash/Shell
62436|Argentina|Slightly dissatisfied|Computer science, computer engineering, or software engineering|27336.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Java;JavaScript;Python;HTML;Bash/Shell
54029|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|115000.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|Assembly;C;C++;C#;Java;Bash/Shell
9393|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|70000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|45 - 54 years old|More than 4 years ago|Python;SQL;VB.NET;Visual Basic 6
80650|Australia|Extremely satisfied|Computer science, computer engineering, or software engineering|73576.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Go;Groovy;Java;JavaScript;Python;Kotlin;Delphi/Object Pascal;HTML;CSS
1105|Switzerland|Extremely satisfied|Computer science, computer engineering, or software engineering|99056.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C++;Go;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
20184|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|67313.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
64870|France|Extremely satisfied|Mathematics or statistics|61194.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Matlab;Python;HTML;CSS
50097|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|78000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;HTML;CSS;Bash/Shell
45899|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|83000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|JavaScript;Objective-C;Python;Swift;HTML;CSS
1862|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|71597.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;Java;JavaScript;HTML
41764|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|146000.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Erlang;JavaScript;Ruby;HTML;CSS
566|Canada|Moderately dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|1000000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Go;JavaScript;PHP;SQL;HTML;CSS
86353|United Kingdom|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|34726.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Python;SQL;HTML;CSS
47618|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|57400.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
49562|Mexico|Slightly dissatisfied|Information systems, information technology, or system administration|22560.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;SQL;VB.NET;Visual Basic 6;HTML;CSS
98428|Philippines|Slightly dissatisfied|Computer science, computer engineering, or software engineering|119088.0|3 - 4 times per week|Male|East Asian;South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;Java;JavaScript;Python;TypeScript;HTML;CSS;Bash/Shell
97868|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|67313.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#
35152|Netherlands|Moderately dissatisfied|Web development or web design|58752.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;HTML;CSS;Bash/Shell
20771|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|26513.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
25005|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|50000.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C#;CoffeeScript;Java;JavaScript;SQL;HTML;CSS
60393|Australia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|115162.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;C++;Python;Rust
43413|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|62486.0|1 - 2 times per week|Female|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Julia;Bash/Shell
4998|Argentina|Slightly dissatisfied|Computer science, computer engineering, or software engineering|23500.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS
20573|Qatar|Moderately satisfied|Computer science, computer engineering, or software engineering|75000.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
69177|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|36716.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C++
40065|Sri Lanka|Slightly satisfied|Information systems, information technology, or system administration|12000.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;HTML;CSS
58855|United States|Extremely satisfied|Information systems, information technology, or system administration|60000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;TypeScript;HTML;CSS
51948|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|110000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;CoffeeScript;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
62327|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|44916.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C#;Java;JavaScript;SQL;VBA;HTML;CSS;Bash/Shell
84278|Russian Federation|Slightly satisfied|Information systems, information technology, or system administration|25476.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;Python;Bash/Shell
16749|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|143328.0|Daily or almost every day|Female;Non-binary, genderqueer, or gender non-conforming|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Haskell;Java;JavaScript;TypeScript;Ocaml;HTML;CSS;Bash/Shell
100350|The former Yugoslav Republic of Macedonia|Slightly satisfied|Computer science, computer engineering, or software engineering|7152.0|1 - 2 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|18 - 24 years old|Less than a year ago|Assembly;C++;C#;F#;Java;SQL;CSS
71690|Canada|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|72469.0|3 - 4 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Python;HTML;CSS;Bash/Shell
6329|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|72469.0|1 - 2 times per week|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Python;HTML;CSS
76220|United Kingdom|Extremely dissatisfied|Computer science, computer engineering, or software engineering|48616.0|1 - 2 times per week|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
21455|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|70000.0|1 - 2 times per week|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;CoffeeScript;Groovy;Java;JavaScript;Objective-C;Ruby;SQL;Swift;HTML;CSS;Bash/Shell
26541|Italy|Moderately satisfied|Computer science, computer engineering, or software engineering|440592.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;SQL;HTML;CSS
5282|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|70368.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
1859|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|82890.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
94909|Mexico|Extremely satisfied|Computer science, computer engineering, or software engineering|19980.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C#;Java;JavaScript;PHP;SQL;HTML;CSS
91689|Netherlands|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|44064.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
62081|Netherlands|Extremely satisfied|Mathematics or statistics|41124.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
15965|Germany|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|67313.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|3 - 4 hours|35 - 44 years old|Less than a year ago|JavaScript;Ruby;VBA
62544|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|12396.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;PHP;Python;Ruby;SQL;TypeScript;Visual Basic 6;HTML;CSS;Bash/Shell
92573|Japan|Slightly dissatisfied|Computer science, computer engineering, or software engineering|36015.0|Daily or almost every day|Female|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|18 - 24 years old|Less than a year ago|C#;Java;SQL
55775|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|35000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|I've never had a job|C#;Java;JavaScript;Python;HTML;CSS
60088|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|50005.0|3 - 4 times per week|Male|White or of European descent|They never completed any formal education|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
83226|Israel|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|94788.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|Java;JavaScript;TypeScript;HTML;CSS
85616|Sweden|Moderately dissatisfied|Computer science, computer engineering, or software engineering|68868.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Groovy;Java;Python
19271|Sri Lanka|Moderately satisfied|Information systems, information technology, or system administration|11076.0|1 - 2 times per week|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C;JavaScript;Objective-C;PHP;Swift;Kotlin;HTML;CSS
20776|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|120000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;PHP;Python;HTML;CSS;Bash/Shell
61323|India|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|150288.0|I don't typically exercise|Male|South Asian|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Objective-C;Swift;TypeScript;HTML;CSS
92023|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|72209.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;Python;Bash/Shell
29397|New Zealand|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|1000000.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;Perl;Python;SQL;VBA;HTML;Bash/Shell
22450|Germany|Slightly satisfied|Mathematics or statistics|44060.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;Java;JavaScript;Matlab;PHP;Python;R;HTML;CSS
32148|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|58410.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
79753|United Kingdom|Neither satisfied nor dissatisfied|Web development or web design|41671.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Objective-C;Python;Swift;TypeScript;HTML;CSS;Bash/Shell
96505|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|137000.0|1 - 2 times per week|Female|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;Python;HTML;CSS;Bash/Shell
3462|United Kingdom|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|83342.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;Groovy;Java;Python;Ruby;Bash/Shell
86789|Belgium|Extremely satisfied|Computer science, computer engineering, or software engineering|26436.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;Objective-C;PHP;SQL;HTML;Bash/Shell
77857|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|260000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
34236|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|55 - 64 years old|More than 4 years ago|C++;C#;Java;JavaScript;SQL;HTML;CSS
55287|United States|Slightly satisfied|Mathematics or statistics|145000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|35 - 44 years old|Between 1 and 2 years ago|Java;Python;Scala;SQL;Bash/Shell
89804|United States|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|114000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
42366|Bangladesh|Moderately satisfied|Computer science, computer engineering, or software engineering|9552.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Java;JavaScript;PHP;Python;SQL;VBA;VB.NET;HTML;CSS
4505|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|58752.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
34225|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|50005.0|Daily or almost every day|Male;Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
52702|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|57576.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|JavaScript;SQL;HTML;CSS
50169|United Kingdom|Moderately dissatisfied|Web development or web design|241692.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS
69694|United States|Slightly satisfied|I never declared a major|65000.0|I don't typically exercise|Male|White or of European descent|Associate degree|Less than 30 minutes|18 - 24 years old|Less than a year ago|C#;Go;Java;SQL;VB.NET;HTML;CSS;Bash/Shell
83115|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|66674.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;Swift;Kotlin;Bash/Shell
40830|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|45000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C++;C#;Java;JavaScript;Objective-C;SQL;Swift;HTML;CSS
71351|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|83000.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C;C++;C#;Visual Basic 6;Bash/Shell
19495|Belgium|Moderately satisfied|Computer science, computer engineering, or software engineering|30840.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
9180|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|67977.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;PHP;SQL;TypeScript;VB.NET;HTML;CSS
101526|Lithuania|Moderately dissatisfied|Computer science, computer engineering, or software engineering|44064.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python;SQL;CSS;Bash/Shell
34897|Serbia|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|11784.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Swift
28328|Belgium|Slightly satisfied|Computer science, computer engineering, or software engineering|1000000.0|1 - 2 times per week|Female|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Python;SQL;HTML;CSS
14652|Austria|Extremely satisfied|Computer science, computer engineering, or software engineering|85671.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;Swift;HTML;CSS
14638|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|112000.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;C#;Java;Python;SQL;Kotlin;HTML;CSS;Bash/Shell
31224|Australia|Moderately dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|53582.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
90398|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|59880.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;Java;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
73197|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|63642.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java
61385|United Kingdom|Moderately dissatisfied|Computer science, computer engineering, or software engineering|45838.0|I don't typically exercise|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;JavaScript;HTML;CSS;Bash/Shell
71885|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|79552.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Go;Java;JavaScript;Lua;Python;R;SQL;HTML;CSS;Bash/Shell
89480|Canada|Neither satisfied nor dissatisfied|A business discipline (ex. accounting, finance, marketing)|40261.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|CoffeeScript;JavaScript;Ruby;SQL;HTML;CSS
57133|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|75000.0|3 - 4 times per week|Female|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Go;JavaScript;HTML;CSS;Bash/Shell
50575|United Kingdom|Moderately satisfied|Information systems, information technology, or system administration|62507.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;SQL
9757|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|73619.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
7628|France|Extremely dissatisfied|Computer science, computer engineering, or software engineering|110149.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;HTML;CSS
83801|Netherlands|Slightly satisfied|Information systems, information technology, or system administration|61194.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C#;SQL
99551|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|70138.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Go;Java;JavaScript;Objective-C;Python;Swift;TypeScript;Kotlin
13809|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|61194.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Go;Java;JavaScript;Perl;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
45507|Denmark|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|77416.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
57858|Poland|Moderately dissatisfied|A humanities discipline (ex. literature, history, philosophy)|73428.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|CoffeeScript;JavaScript;Ruby;SQL;HTML;CSS
14173|Pakistan|Slightly dissatisfied|Computer science, computer engineering, or software engineering|12000.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;JavaScript;Matlab;Objective-C;PHP;SQL;Swift
87452|United Kingdom|Moderately satisfied|I never declared a major|566724.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;PHP;Python;VB.NET;Delphi/Object Pascal;HTML;CSS
8752|United States|Extremely satisfied|Web development or web design|70000.0|3 - 4 times per week|Male|Native American, Pacific Islander, or Indigenous Australian;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
60397|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|2000000.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;Go;Java;JavaScript;Python;Scala;SQL
27294|France|Moderately satisfied|Computer science, computer engineering, or software engineering|48955.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
21557|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|65000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|Python;HTML
90588|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|152000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C++;Groovy;Java;JavaScript;SQL;Bash/Shell
74127|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|120000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript;Python;Ruby;SQL;TypeScript;Kotlin;Ocaml;HTML;CSS;Bash/Shell
76121|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|74316.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
17443|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|80000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|PHP;SQL;HTML;Bash/Shell
17481|Netherlands|Slightly dissatisfied|Computer science, computer engineering, or software engineering|22030.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;JavaScript;Python;HTML;CSS
101129|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|30597.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Go;Java;JavaScript;R;Rust;Scala;SQL;TypeScript;Kotlin;HTML;CSS;Bash/Shell
73468|Germany|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|75880.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C;C++;C#;JavaScript;PHP;SQL;HTML;Bash/Shell
27037|Denmark|Moderately satisfied|Computer science, computer engineering, or software engineering|78900.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;TypeScript
46999|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;F#;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
59557|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|85000.0|3 - 4 times per week|Male|Black or of African descent|Other doctoral degree (Ph.D, Ed.D., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Java;Python;R;SQL;VBA
36288|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|48000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;Matlab;TypeScript;Kotlin;HTML;CSS;Bash/Shell
34997|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|48300.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
96751|United States|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|100000.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|Less than 30 minutes|45 - 54 years old|More than 4 years ago|Java;JavaScript;PHP;SQL;VBA;HTML;CSS
59125|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|50179.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
42688|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|40000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;Java;JavaScript;SQL;TypeScript;VB.NET;HTML;CSS
50437|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|77100.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;HTML;Bash/Shell
13782|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|123000.0|Daily or almost every day|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|Java;Kotlin
27915|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|108000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Go;JavaScript;SQL;HTML;CSS;Bash/Shell
69925|Canada|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|72469.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Ruby;HTML;CSS
96804|Brazil|Extremely satisfied|Information systems, information technology, or system administration|30504.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Go;Java;PHP
25904|United States|Extremely dissatisfied|Web development or web design|42000.0|Daily or almost every day|Female|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
31547|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|104000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;F#;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
25690|Finland|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|64620.0|Daily or almost every day|Male|White or of European descent|Primary/elementary school|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;SQL
34181|United States|Extremely satisfied|Information systems, information technology, or system administration|28000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
76968|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|97826.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;JavaScript;PHP;SQL;HTML;CSS
68780|Australia|Moderately satisfied|Mathematics or statistics|71976.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|More than 4 years ago|C;C++;Python
47710|United Kingdom|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|194466.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;SQL
74024|Russian Federation|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|24000.0|Daily or almost every day|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|PHP;Python;SQL;Bash/Shell
50677|China|Moderately dissatisfied|Computer science, computer engineering, or software engineering|37400.0|3 - 4 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Java;Lua;Rust;Bash/Shell
78292|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|21133.0|Daily or almost every day|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;TypeScript;CSS
56626|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|50005.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
9541|Iran, Islamic Republic of...|Moderately satisfied|Computer science, computer engineering, or software engineering|23304.0|1 - 2 times per week|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
17867|Pakistan|Moderately satisfied|Computer science, computer engineering, or software engineering|8136.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;Objective-C;Python;Swift
6115|India|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|14089.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
233|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|105000.0|Daily or almost every day|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;Python;HTML;CSS
58499|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|85000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
80960|Bangladesh|Extremely satisfied|Computer science, computer engineering, or software engineering|48000.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;Java;JavaScript;PHP;SQL;HTML;CSS
25948|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|105000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS
83560|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|48955.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
36407|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|68868.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;C++;Python;Bash/Shell
53292|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|126000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;PHP;Python;Bash/Shell
69311|Sweden|Moderately dissatisfied|Computer science, computer engineering, or software engineering|682692.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
62109|Georgia|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|29220.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;SQL;Kotlin;HTML;CSS;Bash/Shell
38148|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Ruby;HTML;CSS
48896|Spain|Slightly dissatisfied|Computer science, computer engineering, or software engineering|1000000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Bash/Shell
632|United States|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|75000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
78373|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|135000.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|45 - 54 years old|Between 2 and 4 years ago|C;C++;Go;Java;JavaScript;Julia;Lua;Perl;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
78062|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|130000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;R;SQL;HTML;CSS
43389|Romania|Moderately satisfied|Information systems, information technology, or system administration|17628.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Python;HTML;CSS
51075|South Africa|Moderately satisfied|Web development or web design|10872.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
58655|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|2000000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;HTML;CSS
45914|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|87800.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;Java;JavaScript;Python;HTML;CSS
54054|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|93000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C;C++
96458|Lithuania|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|51408.0|1 - 2 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|C;C++;C#;Go;Groovy;Java;JavaScript;Lua;Perl;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
68501|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|400000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C++;Matlab;Python;R;HTML;Bash/Shell
27846|United Kingdom|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|500052.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|Python;Scala;SQL;Bash/Shell
71610|India|Slightly satisfied|Computer science, computer engineering, or software engineering|11268.0|3 - 4 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|C;C++;C#;Java;JavaScript;SQL;VB.NET;HTML;CSS;Bash/Shell
43064|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|90000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Erlang;JavaScript;PHP;SQL;Swift;HTML;CSS;Bash/Shell
79434|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;JavaScript;TypeScript;HTML;CSS
92105|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|100000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|JavaScript;Ruby;TypeScript
91341|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|916764.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;PHP;Python;Scala;SQL;TypeScript;HTML;CSS;Bash/Shell
71899|United States|Moderately satisfied|Information systems, information technology, or system administration|59000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;PHP;R;SQL;HTML;CSS;Bash/Shell
2243|India|Extremely satisfied|Computer science, computer engineering, or software engineering|11724.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|35 - 44 years old|Less than a year ago|Java;JavaScript;Python;Scala;Kotlin;HTML;CSS
42435|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|115000.0|I don't typically exercise|Male|East Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
43236|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|50000.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Ruby;HTML;CSS
99014|Portugal|Moderately dissatisfied|Computer science, computer engineering, or software engineering|39164.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;SQL
84028|India|Moderately satisfied|Computer science, computer engineering, or software engineering|15654.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;Python;HTML;CSS;Bash/Shell
63602|Spain|Moderately dissatisfied|Computer science, computer engineering, or software engineering|70350.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C#
65984|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|82000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
41064|United States|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|25000.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;VBA;HTML;CSS;Bash/Shell
19829|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|12000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;C++;C#;Java;JavaScript;Python;R;SQL;HTML;CSS
36969|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|36716.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Erlang;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
48326|United Kingdom|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|650076.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Matlab;Python;Bash/Shell
9434|Poland|Moderately dissatisfied|Computer science, computer engineering, or software engineering|24696.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
25721|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|24478.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;VB.NET;Visual Basic 6;HTML;CSS
12916|Belarus|Moderately satisfied|Computer science, computer engineering, or software engineering|49308.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Objective-C;Swift
81997|Brazil|Extremely satisfied|Information systems, information technology, or system administration|22452.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
97467|United States|Slightly dissatisfied|A social science (ex. anthropology, psychology, political science)|85000.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Ruby;HTML;CSS;Bash/Shell
91866|Bulgaria|Moderately satisfied|Computer science, computer engineering, or software engineering|9756.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|SQL;Delphi/Object Pascal
48114|South Africa|Moderately satisfied|Computer science, computer engineering, or software engineering|29664.0|I don't typically exercise|Male|Black or of African descent|Primary/elementary school|3 - 4 hours|35 - 44 years old|Between 1 and 2 years ago|C#;JavaScript;Perl;PHP;SQL;HTML;CSS
94729|Brazil|Extremely satisfied|Computer science, computer engineering, or software engineering|74856.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|PHP;Delphi/Object Pascal
70724|Brazil|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|6360.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;PHP;HTML;CSS
79053|Czech Republic|Extremely satisfied|Computer science, computer engineering, or software engineering|73428.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;Go;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
3034|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|60216.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C++;C#;Java;JavaScript;Matlab;Objective-C;PHP;SQL;Delphi/Object Pascal;HTML;CSS
40519|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|72000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|More than 4 years ago|Assembly;C;C#;VB.NET
26919|Denmark|Slightly dissatisfied|Computer science, computer engineering, or software engineering|87768.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Scala;TypeScript;HTML;CSS
90797|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|153000.0|1 - 2 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C;C++;C#;JavaScript;Matlab;Python;SQL;Bash/Shell
73676|India|Moderately satisfied|Computer science, computer engineering, or software engineering|3984.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Java;JavaScript;Swift;TypeScript;HTML;CSS
29857|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|55020.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
91701|France|Moderately satisfied|Computer science, computer engineering, or software engineering|47736.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|Java;Python;Scala;SQL;HTML
99652|Germany|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|20556.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;Java;Matlab;Python;SQL;VBA
7328|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|90000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
73680|Ireland|Moderately dissatisfied|Computer science, computer engineering, or software engineering|352476.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Haskell;JavaScript;PHP;Python;SQL;HTML;CSS
50527|India|Moderately satisfied|Computer science, computer engineering, or software engineering|4128.0|3 - 4 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Java;JavaScript;HTML;CSS
979|Russian Federation|Slightly satisfied|Mathematics or statistics|28800.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C++;Java;JavaScript;PHP;Python;SQL;Visual Basic 6;Delphi/Object Pascal;HTML;CSS;Bash/Shell
42592|Switzerland|Moderately satisfied|Computer science, computer engineering, or software engineering|118872.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|45 - 54 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Java;JavaScript;SQL;TypeScript;VBA;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
97920|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|54755.0|Daily or almost every day|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Python
20179|Hong Kong (S.A.R.)|Moderately satisfied|Computer science, computer engineering, or software engineering|76754.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;Python
20072|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|70000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;SQL;TypeScript;HTML;CSS
51748|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|102000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;SQL
80139|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|141960.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
60418|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|160000.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;HTML;CSS;Bash/Shell
27251|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|36115.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Go;JavaScript;PHP;Python;Rust;SQL;HTML;CSS;Bash/Shell
78798|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|79562.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|Assembly;Perl;Python;Ruby;SQL;HTML;CSS;Bash/Shell
32731|United States|Moderately satisfied|Mathematics or statistics|105000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
96407|Germany|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|96686.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Go;Groovy;Java;Python;Ruby;Scala;SQL;HTML;CSS;Bash/Shell
28910|Singapore|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|59052.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Java;Python
92718|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
28835|Mexico|Extremely satisfied|Computer science, computer engineering, or software engineering|103140.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Primary/elementary school|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;SQL;Delphi/Object Pascal
82654|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|144000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Matlab;HTML;CSS;Bash/Shell
74770|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|125000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;Groovy;JavaScript;PHP;Python;Ruby;SQL;TypeScript;VB.NET;HTML;Bash/Shell
21127|Germany|Slightly satisfied|Mathematics or statistics|29376.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Java;JavaScript;Python;R;SQL;TypeScript;HTML;CSS;Bash/Shell
60626|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|97233.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Ruby;SQL;HTML
11953|Turkey|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|25428.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|Between 2 and 4 years ago|C#;CoffeeScript;Groovy;Java;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS
52894|United States|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|110000.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;Python;Ruby;SQL;HTML;CSS;Bash/Shell
56008|United States|Slightly satisfied|A business discipline (ex. accounting, finance, marketing)|55000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
12951|India|Slightly satisfied|Computer science, computer engineering, or software engineering|25047.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Python
87993|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|39699.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Java;Python;SQL
45781|Netherlands|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|53851.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
68304|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|58752.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;SQL;HTML;CSS
36223|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|160000.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Go;Java;JavaScript;Objective-C;R;Ruby;Rust;Scala;HTML;CSS
13353|France|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|61194.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;Java;Bash/Shell
1422|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|140800.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Go;JavaScript;Python;Scala
27013|Mexico|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|20000.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;C#;JavaScript;SQL;HTML;CSS
81806|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|152794.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|35 - 44 years old|Between 2 and 4 years ago|Python
37503|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|86120.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;Python;Bash/Shell
64322|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|115000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Go;JavaScript;PHP;TypeScript;HTML;CSS;Bash/Shell
74894|Russian Federation|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|33972.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
16235|Argentina|Extremely satisfied|Computer science, computer engineering, or software engineering|38136.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Python;R;SQL;HTML;Bash/Shell
13398|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|Assembly;C;C++;CoffeeScript;Clojure;JavaScript;Lua;Python;Rust;HTML;CSS;Bash/Shell
75170|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|48313.0|1 - 2 times per week|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Go;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
27884|Poland|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|22056.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Perl;SQL
87973|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|140000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript
62138|United States|Moderately dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|70000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;Lua;PHP;Python
50736|Belarus|Extremely satisfied|Information systems, information technology, or system administration|27528.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript;Bash/Shell
95007|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|95000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;CoffeeScript;JavaScript;TypeScript;HTML;CSS
19505|United States|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|95000.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;HTML;CSS
49495|New Zealand|Moderately satisfied|Information systems, information technology, or system administration|1000000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;C#;Java;JavaScript;Objective-C;Swift;HTML;CSS
38099|United Kingdom|Moderately satisfied|Information systems, information technology, or system administration|41671.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|JavaScript;PHP;Python;HTML;CSS;Bash/Shell
48266|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|126000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;Python;TypeScript;HTML;CSS
91534|China|Moderately satisfied|Computer science, computer engineering, or software engineering|32725.0|1 - 2 times per week|Male|East Asian|Primary/elementary school|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;Groovy;Java;JavaScript;SQL;HTML;CSS
8104|Brazil|Extremely dissatisfied|Computer science, computer engineering, or software engineering|11232.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;Objective-C;SQL;TypeScript;HTML;CSS;Bash/Shell
47331|Serbia|Slightly satisfied|Computer science, computer engineering, or software engineering|70500.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|C++;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
15819|India|Moderately satisfied|Computer science, computer engineering, or software engineering|7827.0|I don't typically exercise|Male|South Asian|Primary/elementary school|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Python;TypeScript
15957|Czech Republic|Extremely satisfied|Computer science, computer engineering, or software engineering|20268.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C#;PHP;SQL;HTML;CSS
54501|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|140000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;TypeScript;HTML;CSS
8734|Lithuania|Extremely satisfied|Computer science, computer engineering, or software engineering|23796.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
43219|New Zealand|Moderately satisfied|Computer science, computer engineering, or software engineering|631452.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Go;JavaScript;Python;Rust;SQL;TypeScript;HTML;CSS;Bash/Shell
73138|India|Moderately satisfied|Computer science, computer engineering, or software engineering|6262.0|Daily or almost every day|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;Java;JavaScript;SQL;HTML;CSS
24294|United States|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|195000.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;Python;Scala;SQL
161|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Go;JavaScript;Python;R;SQL;HTML;CSS;Bash/Shell
100021|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|58500.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C;Java;JavaScript;PHP;Python;SQL;HTML;Bash/Shell
12271|Germany|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|63642.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|Erlang;Go;Java;JavaScript;Lua;PHP;Python;Ruby;Scala;Cobol;HTML;CSS;Bash/Shell
95493|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|36720.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;Python;Bash/Shell
88632|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|107152.0|I don't typically exercise|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
13279|Romania|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|33780.0|Daily or almost every day|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;HTML;CSS
76677|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|30708.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C++;Java;JavaScript;Matlab;Python;R;VBA;HTML;CSS
87157|Portugal|Moderately satisfied|Computer science, computer engineering, or software engineering|8808.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Clojure;Haskell;JavaScript;Python;HTML;CSS;Bash/Shell
24815|United Kingdom|Neither satisfied nor dissatisfied|A natural science (ex. biology, chemistry, physics)|69452.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Go;Scala;SQL
86897|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|41671.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|Less than a year ago|C#;F#;JavaScript;PHP;Python;SQL;HTML;CSS
21899|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|89000.0|1 - 2 times per week|Female|White or of European descent|Associate degree|30 - 59 minutes|35 - 44 years old|Less than a year ago|JavaScript;PHP;HTML;CSS
76693|Canada|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|64417.0|I don't typically exercise|Female|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Python;R;SQL;HTML;CSS;Bash/Shell
23199|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|108000.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C++;Objective-C;PHP;Python
97499|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|109000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Objective-C;Scala;SQL;HTML;CSS
71741|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|130000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Python;Scala;TypeScript
12770|United Kingdom|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|101400.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|45 - 54 years old|More than 4 years ago|Assembly;C;Perl;Python;Bash/Shell
1036|Pakistan|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|2172.0|Daily or almost every day|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Java;JavaScript;PHP;SQL;VB.NET;HTML;CSS
25907|United States|Slightly dissatisfied|A business discipline (ex. accounting, finance, marketing)|85000.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python;R;SQL;Delphi/Object Pascal
66091|United Kingdom|Extremely dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|26808.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Haskell;Python
66572|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|52933.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|More than 4 years ago|C++;C#;CoffeeScript;Go;Java;JavaScript;PHP;Python;SQL;HTML;CSS
28783|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|29376.0|I don't typically exercise|Female|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|HTML;CSS
25944|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|36115.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS
7957|France|Moderately satisfied|Computer science, computer engineering, or software engineering|22032.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|55 - 64 years old|Less than a year ago|C;C++;Java;JavaScript;Objective-C;PHP;Python;SQL;Visual Basic 6;HTML;CSS;Bash/Shell
78262|Switzerland|Moderately satisfied|Computer science, computer engineering, or software engineering|93842.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;Go;Perl;Python;SQL;Bash/Shell
35444|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|75000.0|1 - 2 times per week|Male|Black or of African descent;East Asian;Hispanic or Latino/Latina|Associate degree|3 - 4 hours|45 - 54 years old|More than 4 years ago|C#;Java;JavaScript;Perl;Visual Basic 6;HTML;Bash/Shell
62429|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|883428.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
97893|Indonesia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|111880.0|I don't typically exercise|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Scala;SQL;Kotlin;HTML;CSS
97450|India|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|5640.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|I've never had a job|Java;JavaScript;PHP;Python;SQL;HTML;CSS
94978|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|48313.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;PHP;Delphi/Object Pascal;HTML;CSS
48989|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|13619.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C;C++;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
54953|Italy|Slightly dissatisfied|Mathematics or statistics|381852.0|I don't typically exercise|Female|White or of European descent|Primary/elementary school|Less than 30 minutes|25 - 34 years old|Less than a year ago|Python;R;Scala;SQL
63438|Ukraine|Slightly satisfied|Computer science, computer engineering, or software engineering|24000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;JavaScript;Python;SQL;Bash/Shell
21169|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|38000.0|I don't typically exercise|Male|East Asian;South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C;JavaScript;Python;HTML
81659|Chile|Moderately dissatisfied|Information systems, information technology, or system administration|9912.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Over 4 hours|18 - 24 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;SQL;HTML;CSS
20022|United States|Slightly dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|92500.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;SQL;TypeScript
23928|New Zealand|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|74911.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;Groovy;Java;SQL;Bash/Shell
73270|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
58397|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|38893.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;Go;Haskell;Java;JavaScript;PHP;Python;Scala;SQL;HTML;CSS;Bash/Shell
41705|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|74856.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;Java;JavaScript;SQL;TypeScript;Kotlin;Delphi/Object Pascal;HTML;CSS
29213|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|40261.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
16141|Argentina|Slightly dissatisfied|Information systems, information technology, or system administration|50844.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
7888|Iran, Islamic Republic of...|Moderately dissatisfied|Computer science, computer engineering, or software engineering|21648.0|1 - 2 times per week|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Objective-C;Python;Swift
42002|Germany|Extremely satisfied|Information systems, information technology, or system administration|73428.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;JavaScript;Python;R;Ruby;Rust;Scala;SQL;Swift;HTML;CSS;Bash/Shell
19662|Taiwan|Slightly satisfied|Computer science, computer engineering, or software engineering|22368.0|I don't typically exercise|Male|East Asian|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python;Ruby
64228|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|49404.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|Go;Groovy;Java;JavaScript;Python;Scala;Kotlin;HTML;Bash/Shell
79523|Germany|Moderately satisfied|Mathematics or statistics|73433.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|JavaScript;PHP;Python;SQL;Bash/Shell
98224|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|77786.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C#
88422|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|106000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
75860|Austria|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|22032.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Matlab;R
88525|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|145000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;VB.NET;HTML;CSS
75420|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|130000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;TypeScript;HTML;CSS
71276|Sweden|Extremely satisfied|Computer science, computer engineering, or software engineering|224550.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Over 4 hours|25 - 34 years old|Between 2 and 4 years ago|C#;F#;SQL;VB.NET;Bash/Shell
65182|Belarus|Slightly dissatisfied|Computer science, computer engineering, or software engineering|11748.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#
37265|Brazil|Extremely satisfied|Computer science, computer engineering, or software engineering|52404.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;Scala
2146|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|73000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;Ruby;SQL;VB.NET;HTML;CSS;Bash/Shell
82663|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|96000.0|Daily or almost every day|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;Java;JavaScript;Lua;Perl;PHP;Python;R;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
62307|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|120000.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;C#;SQL
62113|Colombia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|42000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
33973|United States|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|72000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Objective-C;Swift
76763|Czech Republic|Extremely satisfied|Computer science, computer engineering, or software engineering|40536.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;Python;SQL
25030|United States|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|128000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;Groovy;Java;JavaScript;Python;SQL;TypeScript;HTML;CSS
20403|South Africa|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|9888.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
40920|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|160000.0|I don't typically exercise|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;F#;JavaScript;SQL;CSS
94403|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|67560.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;Swift;HTML;CSS;Bash/Shell
2697|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|50769.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|More than 4 years ago|Java;Bash/Shell
69237|India|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|25047.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#
100877|United States|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|135000.0|Daily or almost every day|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;JavaScript;Python
38373|Canada|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|72469.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|Go;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
30518|Thailand|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|39492.0|3 - 4 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;Python;TypeScript;HTML;CSS
14866|India|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|35379.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;TypeScript;HTML;CSS
83946|Egypt|Moderately satisfied|Computer science, computer engineering, or software engineering|1020.0|I don't typically exercise|Male|Middle Eastern|Associate degree|3 - 4 hours|18 - 24 years old|Less than a year ago|Assembly;C++;C#;Groovy;Java;JavaScript;R;SQL;HTML;CSS
15325|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;SQL;Kotlin
83054|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|35292.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Scala;SQL;HTML;CSS;Bash/Shell
32758|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|20664.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;SQL
57764|United States|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|125000.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;Ruby;Rust;Bash/Shell
85168|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|93000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
16206|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|70000.0|1 - 2 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Java;JavaScript;TypeScript;HTML;CSS
54436|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|82612.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;HTML;CSS
40563|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Java;JavaScript;Ruby;HTML;CSS;Bash/Shell
46381|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|59988.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS
66863|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|95000.0|3 - 4 times per week|Female|Black or of African descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|PHP;Python
1668|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|61194.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Scala;SQL
9106|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|73433.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
97921|Azerbaijan|Slightly satisfied|Computer science, computer engineering, or software engineering|44064.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|Java;SQL
41555|Italy|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|183582.0|3 - 4 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|65 years or older|More than 4 years ago|Assembly;C++;C#;Python;SQL;VBA;VB.NET;Visual Basic 6;Cobol;HTML
56808|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|39164.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;C#;JavaScript;HTML;CSS;Bash/Shell
10539|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|156000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|45 - 54 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Kotlin;HTML;CSS;Bash/Shell
45687|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|94000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|CoffeeScript;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
8628|Germany|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|17628.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C#
42827|United Kingdom|Moderately satisfied|Mathematics or statistics|48616.0|Daily or almost every day|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|R;SQL;VBA
64556|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|52089.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Objective-C;SQL;Swift;Bash/Shell
15629|United Kingdom|Slightly satisfied|Web development or web design|34726.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Go;Groovy;Java;JavaScript;PHP;Python;SQL;HTML;CSS
28282|Italy|Slightly satisfied|Computer science, computer engineering, or software engineering|30597.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;TypeScript;HTML;CSS
16317|Bosnia and Herzegovina|Slightly dissatisfied|Computer science, computer engineering, or software engineering|15024.0|3 - 4 times per week|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|JavaScript;SQL;TypeScript;HTML;CSS
78299|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|80000.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Clojure;JavaScript;SQL;CSS;Bash/Shell
7335|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|125014.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
66330|Romania|Extremely satisfied|Computer science, computer engineering, or software engineering|29376.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
37599|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|36720.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Go;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
565|Latvia|Moderately satisfied|Computer science, computer engineering, or software engineering|31664.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;TypeScript;HTML;CSS
45923|Israel|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|112344.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|C#;Java
46902|South Africa|Moderately satisfied|Computer science, computer engineering, or software engineering|23916.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
42928|Netherlands|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|36716.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C++;C#;Python
26295|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|14089.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;PHP;SQL;Visual Basic 6;HTML;CSS
77641|United States|Moderately satisfied|Mathematics or statistics|95000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|JavaScript;Python;SQL
31097|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|35559.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C++;Java;JavaScript;PHP;SQL
10322|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|110000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
35045|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;VB.NET;HTML;CSS
51528|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|23482.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;SQL
29004|Slovakia|Moderately satisfied|Computer science, computer engineering, or software engineering|35244.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;HTML;Bash/Shell
83837|India|Moderately satisfied|Computer science, computer engineering, or software engineering|13463.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;Matlab
73897|United States|Moderately satisfied|Information systems, information technology, or system administration|60000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|Assembly;C++;C#;Java;JavaScript;Matlab;Python;Ruby;Scala;SQL;HTML;CSS;Bash/Shell
63371|Estonia|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|29376.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;JavaScript;PHP;Python;R;Swift;HTML;CSS
60107|Poland|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|31764.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;F#;Haskell;Java;JavaScript;Python;SQL;TypeScript;Kotlin;HTML;CSS
49408|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|30559.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;C#;SQL;Cobol;Bash/Shell
80854|United States|Moderately dissatisfied|I never declared a major|120000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|55 - 64 years old|Less than a year ago|Java;JavaScript;Objective-C;Ruby;Swift
63075|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|165000.0|3 - 4 times per week|Male|East Asian;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|CoffeeScript;Groovy;Java;JavaScript;Python;SQL;Kotlin;HTML;CSS;Bash/Shell
83339|Iran, Islamic Republic of...|Moderately satisfied|Web development or web design|22860.0|1 - 2 times per week|Non-binary, genderqueer, or gender non-conforming|Middle Eastern|Associate degree|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;SQL;Delphi/Object Pascal;HTML;CSS
86784|Hungary|Moderately satisfied|Computer science, computer engineering, or software engineering|28584.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Objective-C;SQL;TypeScript;HTML;CSS
51733|Canada|Extremely satisfied|Mathematics or statistics|79555.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Java;JavaScript;Perl;SQL;HTML;CSS
55963|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|80000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C;C#;JavaScript;Objective-C;Perl;PHP;Python;R;SQL;HTML;Bash/Shell
13843|Russian Federation|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|16140.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Matlab;VBA;VB.NET;Visual Basic 6;Bash/Shell
47935|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|73433.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;Python;Rust;SQL
13722|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|60948.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C++;C#;JavaScript;SQL;HTML;CSS
88204|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|21300.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;Java;JavaScript;Python;SQL;VB.NET;HTML;CSS
60859|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|538968.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;JavaScript;SQL;TypeScript;HTML;CSS
37586|France|Moderately satisfied|Computer science, computer engineering, or software engineering|73433.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;F#;Java;JavaScript;SQL;HTML;CSS
38441|Colombia|Extremely dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|13500.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;JavaScript;PHP;SQL;HTML;CSS
56436|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|483384.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS
46408|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|45000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C++;C#;JavaScript;Ruby;SQL;HTML;CSS
33179|Spain|Extremely satisfied|Computer science, computer engineering, or software engineering|48955.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C#;Go;JavaScript;R;SQL;TypeScript;HTML;CSS;Bash/Shell
86764|Italy|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|23496.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java
70560|Ireland|Extremely satisfied|Web development or web design|1000000.0|3 - 4 times per week|Male|White or of European descent|They never completed any formal education|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Ruby;SQL;Swift;HTML;CSS
72249|Greece|Moderately dissatisfied|Web development or web design|14688.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
63834|United States|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|720000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|Between 1 and 2 years ago|JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
5935|New Zealand|Moderately satisfied|Computer science, computer engineering, or software engineering|69430.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java;JavaScript;PHP;Python;SQL;VB.NET;HTML;CSS;Bash/Shell
63942|United States|Extremely satisfied|Mathematics or statistics|105000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
93367|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|140000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Some college/university study without earning a degree|Over 4 hours|35 - 44 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Swift;Kotlin;HTML;CSS
55870|Sweden|Slightly dissatisfied|Web development or web design|65868.0|Daily or almost every day|Male|White or of European descent|They never completed any formal education|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Objective-C;PHP;Ruby;HTML;CSS;Bash/Shell
15420|United Kingdom|Extremely dissatisfied|Information systems, information technology, or system administration|41671.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Go;JavaScript;PHP;Python;SQL;TypeScript;Kotlin;HTML;CSS;Bash/Shell
26635|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|I don't typically exercise|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;Python;R;SQL
92152|India|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|31309.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript
85207|Sweden|Moderately satisfied|Information systems, information technology, or system administration|76353.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C++;C#;Java;JavaScript;Objective-C;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
76533|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|95015.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Scala;SQL;Kotlin;HTML;Bash/Shell
29345|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|46533.0|Daily or almost every day|Male|Native American, Pacific Islander, or Indigenous Australian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;Python;Kotlin
18706|Iran, Islamic Republic of...|Moderately dissatisfied|Computer science, computer engineering, or software engineering|13320.0|1 - 2 times per week|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;HTML;CSS
76852|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|0.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Objective-C;PHP;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
74072|United Kingdom|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|51672.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
24638|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|80000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;Perl;Python;SQL;HTML;CSS;Bash/Shell
74593|United States|Moderately dissatisfied|I never declared a major|1800000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;HTML;CSS
3595|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|48616.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;VB.NET;HTML;CSS;Bash/Shell
90796|India|Slightly satisfied|Computer science, computer engineering, or software engineering|6012.0|Daily or almost every day|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Between 2 and 4 years ago|JavaScript;PHP;HTML;CSS
14145|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|102500.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;Kotlin;HTML;CSS
78475|Australia|Moderately satisfied|Information systems, information technology, or system administration|43985.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;SQL;VB.NET;CSS
53176|Australia|Moderately satisfied|Information systems, information technology, or system administration|87971.0|I don't typically exercise|Male|Middle Eastern;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
56840|Sweden|Extremely satisfied|Computer science, computer engineering, or software engineering|70368.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Erlang;Ruby;Scala
45343|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|111123.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|JavaScript;Python;SQL;VBA;Delphi/Object Pascal
29200|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|49200.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;JavaScript;Python;HTML;CSS;Bash/Shell
63063|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|156000.0|I don't typically exercise|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS;Bash/Shell
100663|United States|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|96000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;Go;Groovy;Java;JavaScript;Objective-C;Python;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
54808|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|100000.0|Daily or almost every day|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS;Bash/Shell
1997|Germany|Moderately satisfied|Information systems, information technology, or system administration|60216.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;JavaScript;PHP;SQL;HTML;CSS
30642|Sweden|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|104799.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;Python;R;Scala;SQL;Bash/Shell
21906|Russian Federation|Slightly dissatisfied|Computer science, computer engineering, or software engineering|17616.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;JavaScript;PHP;SQL;HTML;CSS
60364|Canada|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|36235.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;PHP;SQL;Delphi/Object Pascal;HTML;CSS;Bash/Shell
90384|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|91791.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Groovy;Java;Python;SQL;Kotlin;Bash/Shell
34114|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|97680.0|I don't typically exercise|Female|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL
25671|United Kingdom|Slightly satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|66674.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;VBA;Bash/Shell
70751|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;Java;JavaScript;PHP;Python;HTML;CSS;Bash/Shell
13064|Spain|Slightly dissatisfied|Computer science, computer engineering, or software engineering|55075.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;PHP;Python;HTML;CSS;Bash/Shell
42614|India|Extremely dissatisfied|Computer science, computer engineering, or software engineering|9393.0|1 - 2 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;Groovy;Java;Kotlin
8260|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|130000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;C#;JavaScript;Matlab;Ruby;SQL;HTML;CSS;Bash/Shell
81737|Iran, Islamic Republic of...|Moderately satisfied|Computer science, computer engineering, or software engineering|14988.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#
73407|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|83800.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
89963|Norway|Slightly dissatisfied|Computer science, computer engineering, or software engineering|79064.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Groovy;Haskell;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
15481|France|Slightly satisfied|Computer science, computer engineering, or software engineering|42836.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;SQL;HTML
69980|United States|Moderately satisfied|Information systems, information technology, or system administration|74000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;SQL;Bash/Shell
24271|Belgium|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|925248.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;TypeScript;HTML;CSS
13675|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|70000.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Haskell;JavaScript;Python;SQL;TypeScript;Kotlin;Ocaml;HTML;CSS;Bash/Shell
22188|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|39164.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;HTML;CSS
48286|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|500052.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;C#;Java;JavaScript;Matlab;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
89668|Austria|Slightly satisfied|Computer science, computer engineering, or software engineering|39648.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;JavaScript;Lua;PHP;SQL;TypeScript;HTML;CSS
58671|Finland|Moderately satisfied|Computer science, computer engineering, or software engineering|66089.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
84019|Canada|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|95015.0|1 - 2 times per week|Male|White or of European descent|They never completed any formal education|30 - 59 minutes|25 - 34 years old|Less than a year ago|Clojure;Java;JavaScript;PHP;Ruby;Scala;SQL;TypeScript;HTML;CSS;Bash/Shell
29406|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|83224.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;C#
54802|France|Moderately satisfied|Computer science, computer engineering, or software engineering|807756.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C#;Java;JavaScript;PHP;SQL;VB.NET;HTML;CSS;Bash/Shell
8375|Bangladesh|Slightly satisfied|Computer science, computer engineering, or software engineering|30000.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;CoffeeScript;Java;JavaScript;Matlab;Perl;PHP;Python;Ruby;SQL;Swift;TypeScript;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
101245|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|79552.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|Python;Ruby;Rust;Bash/Shell
42802|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|140000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Go;Groovy;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
29567|South Africa|Slightly satisfied|Computer science, computer engineering, or software engineering|48.0|Daily or almost every day|Male|South Asian|Primary/elementary school|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C#;JavaScript;SQL;TypeScript;HTML;CSS
86256|United States|Extremely satisfied|I never declared a major|125000.0|Daily or almost every day|Male|Hispanic or Latino/Latina;Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Ruby;HTML;CSS
24541|Australia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|111963.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C++;C#;JavaScript;Lua;SQL;TypeScript;HTML;CSS
7596|Finland|Extremely satisfied|Computer science, computer engineering, or software engineering|69761.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;Python;TypeScript
28442|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|108000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|CoffeeScript;JavaScript;PHP;Python;SQL;HTML;CSS
70216|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Java;JavaScript;Ruby;Swift;HTML;CSS
74451|India|Extremely dissatisfied|Computer science, computer engineering, or software engineering|15811.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Matlab;PHP;Python;SQL
3805|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|48955.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;Java;JavaScript;Objective-C;Python;R;Swift;Visual Basic 6;HTML;CSS;Bash/Shell
61154|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|110000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C;Matlab;Python
8347|Switzerland|Slightly dissatisfied|A natural science (ex. biology, chemistry, physics)|250248.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;Python;SQL;HTML;Bash/Shell
68949|France|Moderately satisfied|Computer science, computer engineering, or software engineering|51408.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;JavaScript;PHP;Ruby;HTML;CSS
10018|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|10400.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Java;JavaScript
95677|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|102000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C++;C#;Java;JavaScript;SQL;VBA;HTML;CSS;Bash/Shell
36277|France|Moderately satisfied|Computer science, computer engineering, or software engineering|56298.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Python
2255|Dominican Republic|Slightly satisfied|Computer science, computer engineering, or software engineering|24000.0|3 - 4 times per week|Male|Black or of African descent;Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
66935|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|75000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;SQL;TypeScript;HTML;CSS
12339|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|47904.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C;C++;Matlab;Python;HTML;CSS;Bash/Shell
28876|United Kingdom|Moderately dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|20836.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
13489|Brazil|Moderately dissatisfied|Computer science, computer engineering, or software engineering|6552.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C#;JavaScript;Python;R;Ruby;HTML;CSS
9968|Greece|Moderately dissatisfied|Computer science, computer engineering, or software engineering|23496.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;C++;Java;JavaScript
75116|Czech Republic|Extremely satisfied|Information systems, information technology, or system administration|69024.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;PHP;Python;SQL;HTML;CSS;Bash/Shell
17069|Sweden|Moderately satisfied|Mathematics or statistics|52404.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Matlab;Objective-C;Python;SQL;VBA
87128|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|29376.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;PHP;HTML;CSS;Bash/Shell
86670|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|40584.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;C#;Java;JavaScript;Matlab;PHP;SQL;TypeScript;HTML;CSS
75820|Spain|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|30597.0|Daily or almost every day|Female|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|R
43725|India|Moderately satisfied|Computer science, computer engineering, or software engineering|12524.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Python;Ruby;SQL;HTML;CSS
60465|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|1500.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C#;Java;JavaScript;Perl;PHP;Python;SQL;HTML;CSS;Bash/Shell
64424|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|41916.0|I don't typically exercise|Female|East Asian;Hispanic or Latino/Latina;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;HTML;CSS;Bash/Shell
99135|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|91800.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java
65264|Romania|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|58752.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|3 - 4 hours|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS
95790|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|82000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;SQL;TypeScript;HTML;CSS
20664|United Kingdom|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|56395.0|3 - 4 times per week|Male|Middle Eastern;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
49222|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|83342.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
71095|Greece|Moderately satisfied|Computer science, computer engineering, or software engineering|33192.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Scala;SQL;HTML;CSS
3088|Turkey|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|50868.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|JavaScript;R;HTML;CSS
6575|United States|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|60000.0|Daily or almost every day|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
25531|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|60000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;JavaScript;Python;HTML;CSS
32882|Poland|Extremely satisfied|Computer science, computer engineering, or software engineering|35292.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;TypeScript;CSS
23924|Poland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|14704.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
68845|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|86000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Perl;Rust;SQL;TypeScript;HTML;CSS;Bash/Shell
88454|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|127000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|C;C++;C#;Clojure;Go;Groovy;Java;JavaScript;SQL;TypeScript;VB.NET;Visual Basic 6;HTML;Bash/Shell
13767|Germany|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|14688.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;C#;Matlab;Bash/Shell
19973|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|100652.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|45 - 54 years old|More than 4 years ago|C;C++;JavaScript;Perl;Python;SQL;HTML;CSS;Bash/Shell
75213|Switzerland|Slightly satisfied|Computer science, computer engineering, or software engineering|106356.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;Java;JavaScript;PHP;R;SQL;VB.NET;HTML
74530|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|135000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;Go;Python;Ruby;HTML;CSS
64951|United States|Extremely satisfied|Mathematics or statistics|140000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|65 years or older|More than 4 years ago|C;C++;C#;Java;VB.NET;Delphi/Object Pascal;HTML;CSS
49683|United Kingdom|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|108345.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;SQL;VB.NET;HTML;CSS
69835|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|85000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;Python;Ruby;Scala;SQL;HTML;CSS;Bash/Shell
16223|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|15000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
21043|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|132000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C++;C#;Java;JavaScript;Objective-C;SQL;Swift;VB.NET;HTML;CSS
93935|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|62412.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C;C++;C#;Java;JavaScript;Lua
76975|Bangladesh|Moderately satisfied|Computer science, computer engineering, or software engineering|17328.0|I don't typically exercise|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;PHP;Python;SQL;HTML;CSS
27005|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|163000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
41122|United States|Moderately satisfied|Mathematics or statistics|65000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|PHP;Python;HTML;CSS;Bash/Shell
93236|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|75880.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;Java
64376|Australia|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|63979.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C++;C#;Java;JavaScript;Lua;Objective-C;PHP;SQL;TypeScript;VBA;VB.NET;HTML;CSS
22857|Greece|Extremely satisfied|Computer science, computer engineering, or software engineering|73428.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C++;C#;Groovy;Java;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
13870|Brazil|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|33684.0|I don't typically exercise|Male|Hispanic or Latino/Latina|They never completed any formal education|Over 4 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;TypeScript;HTML;CSS
89681|Netherlands|Extremely satisfied|Information systems, information technology, or system administration|66084.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;Objective-C;Perl;PHP;SQL;Swift;VBA;HTML;CSS;Bash/Shell
65773|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|55562.0|1 - 2 times per week|Male|Middle Eastern|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;Java;JavaScript;Matlab;PHP;Python;SQL;VBA;VB.NET;Visual Basic 6;Delphi/Object Pascal;HTML;CSS;Bash/Shell
24093|Malaysia|Slightly satisfied|Information systems, information technology, or system administration|29640.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;HTML;CSS
14962|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|20292.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;R;SQL;HTML;CSS;Bash/Shell
75196|Netherlands|Slightly satisfied|Computer science, computer engineering, or software engineering|65352.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;CoffeeScript;Erlang;Groovy;Java;JavaScript;Matlab;Objective-C;PHP;Python;Ruby;SQL;Swift;HTML;CSS;Bash/Shell
76278|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|44916.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;Python;SQL;Swift;HTML;CSS;Bash/Shell
60180|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|78750.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;SQL;CSS;Bash/Shell
69084|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|70985.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;SQL;HTML;CSS
41201|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|58746.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;HTML;CSS
41836|India|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|109581.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Python;R
91450|Israel|Moderately satisfied|Computer science, computer engineering, or software engineering|93960.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Python
45100|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|54000.0|3 - 4 times per week|Male|Black or of African descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
35653|Croatia|Moderately satisfied|Mathematics or statistics|29373.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|Haskell;Python
24202|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|85000.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;SQL;HTML;CSS
75819|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|74000.0|Daily or almost every day|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Ruby;TypeScript;HTML;CSS;Bash/Shell
20880|Iceland|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|62856.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C;C#;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
754|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|80000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C;C++;C#;Python;VB.NET
57449|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|21168.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;TypeScript;HTML;CSS;Bash/Shell
59294|Switzerland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|109483.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Python;Bash/Shell
11006|France|Extremely satisfied|Computer science, computer engineering, or software engineering|31821.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
90683|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|170000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;Java;JavaScript;Lua;Matlab;Python;Ruby
65610|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|59970.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;SQL
6002|Poland|Moderately satisfied|Information systems, information technology, or system administration|49404.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
48952|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|24478.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;SQL;HTML;CSS
19805|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|146000.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C;Go;Java;Perl;Python;SQL;Bash/Shell
30961|Iran, Islamic Republic of...|Extremely satisfied|Computer science, computer engineering, or software engineering|27636.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C++;Python;Bash/Shell
63771|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|55981.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
49234|Jordan|Slightly satisfied|Computer science, computer engineering, or software engineering|15600.0|I don't typically exercise|Male|Middle Eastern;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Objective-C;Swift
89142|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|55000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;Lua;Python;Ruby;Rust;SQL;TypeScript;HTML;CSS;Bash/Shell
2659|Serbia|Moderately dissatisfied|Computer science, computer engineering, or software engineering|44064.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;Objective-C
97902|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|8076.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;C#;Java;JavaScript;Python;Scala;HTML;CSS;Bash/Shell
37626|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|75000.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Java;SQL;Swift;VBA;VB.NET;Visual Basic 6;HTML;CSS
70039|Finland|Moderately satisfied|Computer science, computer engineering, or software engineering|44064.0|1 - 2 times per week|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|Less than a year ago|C++;C#;Java;JavaScript;Matlab;Python;Scala;SQL;HTML;CSS;Bash/Shell
33939|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|68537.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
64138|Bulgaria|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|37500.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C#;Java;JavaScript;PHP;Python;VBA;VB.NET;Visual Basic 6;HTML;CSS
30442|Germany|Extremely satisfied|Information systems, information technology, or system administration|134627.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
86149|United States|Moderately satisfied|Information systems, information technology, or system administration|78200.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
84599|Italy|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|36716.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
19005|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|140000.0|I don't typically exercise|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;TypeScript;Kotlin;HTML;CSS;Bash/Shell
42046|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|165000.0|1 - 2 times per week|Male|East Asian|Some college/university study without earning a degree|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;Python;TypeScript;HTML;CSS
81760|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|95000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|C;Java;JavaScript;Perl;PHP;SQL;HTML;CSS;Bash/Shell
82502|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|58752.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Assembly;C;C++;Hack;Java;JavaScript;Objective-C;PHP;Rust;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
29036|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|36000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Assembly;C;C++;Matlab;Python;SQL;HTML;CSS
35735|Russian Federation|Moderately satisfied|Computer science, computer engineering, or software engineering|74304.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Go;Groovy;Java;JavaScript;Lua;Scala;SQL;TypeScript;HTML;CSS;Bash/Shell
53616|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|42300.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Java;Python;HTML;CSS
40332|India|Extremely satisfied|Computer science, computer engineering, or software engineering|23482.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;Go;Java;JavaScript;Matlab;PHP;Python;R;SQL;HTML;CSS;Bash/Shell
63937|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|90000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;Objective-C;Ruby;Swift;Kotlin;Bash/Shell
53663|Canada|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|32209.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|45 - 54 years old|Between 2 and 4 years ago|Java;SQL;Visual Basic 6
94766|United States|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|200000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|Assembly;C;C++;Python;Bash/Shell
57422|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|66027.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Go;Java;JavaScript;Objective-C;PHP;Python;SQL;Swift;Kotlin;HTML;CSS
95987|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|1000000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Groovy;Java;JavaScript;Objective-C;SQL;Swift;TypeScript;Kotlin;HTML;CSS
53434|France|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|56543.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;Haskell;Python;SQL;Bash/Shell
28845|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|84000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
18841|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|53851.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;HTML;CSS
73618|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|2000000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Python;SQL;Swift;TypeScript;HTML;CSS
11924|Venezuela, Bolivarian Republic of...|Extremely satisfied|Information systems, information technology, or system administration|600.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
76150|Sweden|Extremely satisfied|Computer science, computer engineering, or software engineering|49404.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#
63262|Germany|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|72209.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Objective-C;TypeScript;HTML;CSS
1759|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|154000.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;Perl;Ruby;SQL;HTML;CSS;Bash/Shell
84550|United States|Moderately satisfied|I never declared a major|100000.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Perl;PHP;Python;HTML;CSS;Bash/Shell
35747|Canada|Slightly satisfied|Computer science, computer engineering, or software engineering|104678.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;PHP;Python;SQL;TypeScript;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
43292|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|100000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;Java;JavaScript;Objective-C;Python;Swift;HTML;CSS;Bash/Shell
6987|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|59880.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;Lua;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
21801|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|121000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
75652|Philippines|Extremely satisfied|Computer science, computer engineering, or software engineering|14652.0|I don't typically exercise|Male|East Asian;South Asian|Associate degree|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;SQL;VBA;VB.NET;Visual Basic 6;Delphi/Object Pascal
47300|Canada|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|72469.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Lua;Python;Bash/Shell
98155|Italy|Moderately dissatisfied|Computer science, computer engineering, or software engineering|22284.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C;C++;Haskell;Java;JavaScript;PHP;Python;SQL;Visual Basic 6;HTML;CSS;Bash/Shell
81920|Armenia|Moderately satisfied|Computer science, computer engineering, or software engineering|23628.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;SQL;HTML;CSS
51944|Russian Federation|Slightly satisfied|Mathematics or statistics|14856.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;Python;SQL;Bash/Shell
14261|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|125014.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
51422|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|103000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Python
7868|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript;Python;R;Scala;TypeScript
19604|United States|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|108252.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Kotlin;HTML;CSS;Bash/Shell
91500|United States|Extremely satisfied|Information systems, information technology, or system administration|88500.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Go;Java;JavaScript;Ruby;SQL;VB.NET;HTML;CSS;Bash/Shell
8570|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|58000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Lua;SQL;HTML;CSS
62203|Ireland|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|61194.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|JavaScript;Python;SQL;HTML;CSS
77965|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|120000.0|I don't typically exercise|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Perl;Python;SQL;HTML;CSS;Bash/Shell
54241|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|53892.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Python;Swift;Kotlin;HTML;CSS;Bash/Shell
51899|Russian Federation|Moderately satisfied|Computer science, computer engineering, or software engineering|20808.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;Scala;SQL
42384|Indonesia|Extremely satisfied|Computer science, computer engineering, or software engineering|107400.0|I don't typically exercise|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;PHP;Python;SQL;VB.NET;Visual Basic 6;Kotlin;HTML;CSS
63202|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|6204.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;Python
35898|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|80000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;Groovy;Java;JavaScript;Objective-C;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
84867|Pakistan|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|11820.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL
71735|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|38820.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;HTML;CSS
54691|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|25047.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript
83990|Brazil|Neither satisfied nor dissatisfied|A business discipline (ex. accounting, finance, marketing)|10476.0|Daily or almost every day|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;HTML;CSS
98776|India|Moderately satisfied|Computer science, computer engineering, or software engineering|28178.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;JavaScript;Python;R
1742|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|160000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;JavaScript;Objective-C;SQL;Swift;HTML;CSS;Bash/Shell
662|Bulgaria|Extremely dissatisfied|A business discipline (ex. accounting, finance, marketing)|12000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
47379|Belgium|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|146868.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Python;VBA;VB.NET;Visual Basic 6
4583|Russian Federation|Slightly satisfied|Information systems, information technology, or system administration|25476.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java;JavaScript;Matlab;PHP;Python;SQL;HTML;CSS;Bash/Shell
2578|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|138904.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
25836|Nigeria|Slightly satisfied|Computer science, computer engineering, or software engineering|13332.0|Daily or almost every day|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|More than 4 years ago|Java;Kotlin;HTML
14757|Poland|Moderately satisfied|Mathematics or statistics|22932.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL
60999|Mexico|Moderately satisfied|Computer science, computer engineering, or software engineering|22560.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
8384|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|29376.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;C#;Go;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
73938|New Zealand|Extremely satisfied|Computer science, computer engineering, or software engineering|40196.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Clojure;Java;JavaScript;Perl;PHP;Python;SQL;TypeScript;Delphi/Object Pascal;HTML;CSS
19156|Uruguay|Moderately satisfied|Computer science, computer engineering, or software engineering|60000.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
27072|Norway|Moderately dissatisfied|Computer science, computer engineering, or software engineering|84165.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;Python;Ruby;Scala;SQL;HTML;CSS;Bash/Shell
22567|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|74550.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS
76423|Taiwan|Slightly satisfied|Computer science, computer engineering, or software engineering|84743.0|I don't typically exercise|Male|East Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C++;C#;Groovy;Java;JavaScript;Python;HTML;Bash/Shell
47039|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|2000000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|55 - 64 years old|More than 4 years ago|Assembly;C;C++;C#;Java;JavaScript;Objective-C;PHP;Python;SQL;Swift;VBA;VB.NET;Delphi/Object Pascal;HTML;CSS;Bash/Shell
10743|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|88119.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Groovy;Java;Python;SQL;TypeScript;Kotlin;HTML;CSS;Bash/Shell
50829|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|1000000.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Python
75243|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|60000.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;Kotlin;HTML;CSS
93360|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|106000.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
40163|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|165000.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
57297|France|Moderately satisfied|Computer science, computer engineering, or software engineering|34269.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;Clojure;Haskell;Java;JavaScript;Python;HTML;CSS
30587|United Kingdom|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|37504.0|I don't typically exercise|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
34801|United States|Moderately satisfied|Information systems, information technology, or system administration|85000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;C#;Go;Java;JavaScript;Matlab;Objective-C;PHP;VBA;Kotlin;HTML;CSS;Bash/Shell
47469|Croatia|Moderately satisfied|Computer science, computer engineering, or software engineering|25656.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
75609|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|59980.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;Lua;Python
38237|Canada|Slightly dissatisfied|Computer science, computer engineering, or software engineering|80521.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C#;Clojure;Erlang;F#;Go;Haskell;JavaScript;Python;Ruby;Rust;VB.NET;Visual Basic 6
35052|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|107964.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|C;C++;Go;JavaScript;Objective-C;Python;SQL;HTML;CSS;Bash/Shell
61282|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|10236.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Matlab;PHP;Python;SQL;HTML;CSS;Bash/Shell
29848|Belgium|Moderately satisfied|Computer science, computer engineering, or software engineering|55686.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;Lua;SQL;HTML;CSS
27109|Canada|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|24156.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript
39791|Philippines|Slightly satisfied|Information systems, information technology, or system administration|6120.0|I don't typically exercise|Male|East Asian;South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;HTML;CSS
39629|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|58000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Java;PHP;Python;HTML;CSS
8559|Ireland|Extremely satisfied|Computer science, computer engineering, or software engineering|90288.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Groovy;Java;JavaScript;R;SQL;TypeScript;Kotlin;HTML;CSS;Bash/Shell
66591|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|94000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Java;JavaScript;Python;HTML;Bash/Shell
96319|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|67069.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java
76379|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|105000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C;C++;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
10062|Malta|Moderately satisfied|Computer science, computer engineering, or software engineering|39776.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
54223|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|90000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C;C++;Python;Bash/Shell
20856|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|103300.0|1 - 2 times per week|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;Groovy;Java;JavaScript;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
83561|India|Slightly satisfied|Computer science, computer engineering, or software engineering|11741.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;SQL;HTML;CSS
64160|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|63896.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;Python;Ruby;HTML;CSS;Bash/Shell
55491|France|Moderately satisfied|Computer science, computer engineering, or software engineering|51403.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Go;Java;JavaScript;Python;Scala;Bash/Shell
8446|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|105000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;F#;Java;JavaScript;SQL;HTML;CSS
29303|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|61752.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Go;PHP;SQL;HTML;CSS;Bash/Shell
86128|Australia|Slightly satisfied|Computer science, computer engineering, or software engineering|57581.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
20763|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|130000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Go;Java;JavaScript;TypeScript;HTML;CSS
99911|Ukraine|Slightly satisfied|Computer science, computer engineering, or software engineering|36000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;CSS
57656|India|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|13306.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;Python;R;TypeScript;HTML;CSS
6181|India|Slightly dissatisfied|Information systems, information technology, or system administration|5640.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;HTML;CSS
76715|Mexico|Slightly dissatisfied|Computer science, computer engineering, or software engineering|5796.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;C++;Objective-C;Swift
90037|United Kingdom|Slightly dissatisfied|A natural science (ex. biology, chemistry, physics)|683412.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C++;C#;JavaScript;PHP;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS
81185|Cuba|Moderately satisfied|Computer science, computer engineering, or software engineering|876.0|Daily or almost every day|Male|Black or of African descent;Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|Between 1 and 2 years ago|C++
45373|India|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|27708.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;SQL
90276|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|122000.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Groovy;Java;JavaScript;Perl;Python;TypeScript;Bash/Shell
30624|Poland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|21876.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;Go
92258|Canada|Extremely satisfied|A health science (ex. nursing, pharmacy, radiology)|61196.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
52971|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|3757.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
62765|United States|Extremely satisfied|Web development or web design|50000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
88501|Poland|Slightly dissatisfied|Mathematics or statistics|30000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
93045|Bulgaria|Slightly dissatisfied|Computer science, computer engineering, or software engineering|26256.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;Ruby;TypeScript;Kotlin
84335|Bulgaria|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|12000.0|I don't typically exercise|Female|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|PHP;SQL;HTML;CSS
41006|Australia|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|74375.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|Java;JavaScript;SQL
31418|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|56365.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Rust;SQL;TypeScript;HTML;CSS;Bash/Shell
62709|Russian Federation|Extremely satisfied|Computer science, computer engineering, or software engineering|115000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C++;Objective-C;Swift
68114|Netherlands|Slightly satisfied|Computer science, computer engineering, or software engineering|79552.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;Python;Kotlin
95558|Russian Federation|Slightly dissatisfied|Computer science, computer engineering, or software engineering|12.0|I don't typically exercise|Female;Transgender|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
86398|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|15600.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C++;C#;Python;VBA;VB.NET
24186|United States|Moderately satisfied|A health science (ex. nursing, pharmacy, radiology)|120000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;Go;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
63928|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|68000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;Perl;Python;SQL;Swift;TypeScript;Kotlin;HTML;CSS;Bash/Shell
78437|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|95000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript
68457|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;C#;JavaScript;Perl;SQL;TypeScript;HTML;CSS;Bash/Shell
87207|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Assembly;C#;Matlab;Bash/Shell
89623|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;Objective-C;Python;Bash/Shell
15827|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|170000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Groovy;Java;JavaScript;Objective-C;Python;Ruby;SQL;Swift;HTML;CSS;Bash/Shell
76384|United Kingdom|Slightly satisfied|Mathematics or statistics|46498.0|1 - 2 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#
31770|Germany|Moderately satisfied|Information systems, information technology, or system administration|61194.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;SQL
68677|Russian Federation|Moderately satisfied|Web development or web design|17088.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;JavaScript;Lua;Perl;PHP;SQL;HTML;CSS;Bash/Shell
98051|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|44400.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript
54992|United Kingdom|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|55006.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;SQL;VBA;VB.NET;HTML;CSS
76940|Brazil|Slightly dissatisfied|Computer science, computer engineering, or software engineering|811000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;JavaScript;Ruby;SQL;HTML;CSS
9042|Russian Federation|Moderately satisfied|Information systems, information technology, or system administration|37152.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;HTML;CSS
18947|Maldives|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|15588.0|3 - 4 times per week|Female|South Asian|Primary/elementary school|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;SQL;HTML;CSS
50503|Germany|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|43320.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;Java;Matlab;Python;Bash/Shell
37946|Portugal|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|18360.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;SQL;VBA;VB.NET;Visual Basic 6
40193|United States|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|80000.0|I don't typically exercise|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;Matlab;Python
21258|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|16000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;Java;JavaScript;Python
99474|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|70000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Perl;Python;HTML;CSS
42902|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|109200.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Java;JavaScript;PHP;Python;SQL;Bash/Shell
59582|Colombia|Slightly satisfied|Computer science, computer engineering, or software engineering|16872.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;Groovy;Java;JavaScript;Python;SQL;TypeScript;Cobol;HTML;CSS;Bash/Shell
99441|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|55562.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|55 - 64 years old|Less than a year ago|Assembly;C;C++;C#;HTML;Bash/Shell
12166|India|Moderately satisfied|Computer science, computer engineering, or software engineering|4692.0|3 - 4 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Between 1 and 2 years ago|Swift
13006|Italy|Slightly satisfied|Computer science, computer engineering, or software engineering|30597.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C++;Java;JavaScript;Lua;PHP;Python;SQL;HTML;CSS;Bash/Shell
42202|Argentina|Slightly satisfied|Information systems, information technology, or system administration|20340.0|I don't typically exercise|Female|Hispanic or Latino/Latina;White or of European descent|Professional degree (JD, MD, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Haskell;Java;JavaScript;Objective-C;Python;Swift;TypeScript;Kotlin;HTML;CSS;Bash/Shell
94706|Lebanon|Slightly dissatisfied|Computer science, computer engineering, or software engineering|21384.0|I don't typically exercise|Female|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Java;Matlab;R;Swift;Cobol;HTML;CSS
77558|Austria|Slightly satisfied|Computer science, computer engineering, or software engineering|35688.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;JavaScript;Python;Bash/Shell
86195|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|50000.0|Daily or almost every day|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;SQL;HTML;CSS
52440|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|44449.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;Matlab;Python;Ruby;HTML;CSS;Bash/Shell
95199|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|69000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Java;Bash/Shell
57989|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|63000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;HTML;CSS
26999|United States|Slightly dissatisfied|A humanities discipline (ex. literature, history, philosophy)|175000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Groovy;Java;HTML;Bash/Shell
12026|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|128000.0|I don't typically exercise|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;Python
63243|Poland|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|15180.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS
33018|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|54336.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Haskell;Java;JavaScript;Scala;SQL;TypeScript;HTML;CSS;Bash/Shell
74694|Colombia|Moderately dissatisfied|Computer science, computer engineering, or software engineering|29520.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;HTML
60299|Germany|Slightly dissatisfied|Web development or web design|22032.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
48153|France|Moderately dissatisfied|Computer science, computer engineering, or software engineering|36716.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Clojure;Java;JavaScript;Python;TypeScript;Bash/Shell
95880|India|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|5260.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C++;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
90296|Israel|Moderately satisfied|Computer science, computer engineering, or software engineering|129900.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|Clojure;Groovy;JavaScript;Python;Ruby;Bash/Shell
59039|Netherlands|Moderately satisfied|Information systems, information technology, or system administration|91791.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;SQL;HTML;CSS
12403|United States|Moderately satisfied|Information systems, information technology, or system administration|83200.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
46195|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|42348.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript
54437|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|54336.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;JavaScript;PHP;Python;TypeScript;HTML;CSS
10113|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|235000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Assembly;C;C++;JavaScript;Objective-C;Python;Swift;HTML;CSS
12713|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|41124.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|PHP;SQL;HTML;CSS
22558|Turkey|Extremely satisfied|Computer science, computer engineering, or software engineering|146865.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;C#;JavaScript;Objective-C;PHP;Python;VB.NET
11375|Dominican Republic|Moderately dissatisfied|Computer science, computer engineering, or software engineering|16860.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Some college/university study without earning a degree|Over 4 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;HTML
3337|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|84165.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|C#;SQL;Delphi/Object Pascal;HTML;CSS
58940|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|5088.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;SQL;VB.NET;HTML
62937|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|25000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;Perl;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
70203|Germany|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|58752.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
42068|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|275000.0|I don't typically exercise|Male|East Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Assembly;C;Java;Objective-C
46104|Czech Republic|Slightly satisfied|Computer science, computer engineering, or software engineering|27900.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
55152|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|170000.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java;Kotlin
17901|Belgium|Moderately dissatisfied|Computer science, computer engineering, or software engineering|38184.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
66005|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|131000.0|3 - 4 times per week|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;Python;TypeScript;Visual Basic 6;HTML;CSS;Bash/Shell
32349|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|91791.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;SQL;Bash/Shell
13253|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|88119.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;Java;Objective-C;Python;SQL;Bash/Shell
71877|Sweden|Moderately dissatisfied|Mathematics or statistics|56292.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;Haskell;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
62587|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|9424.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Between 2 and 4 years ago|Objective-C;Swift
77234|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|41000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;VB.NET;HTML;CSS
56304|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|38893.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
101567|Australia|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|111963.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;SQL;Bash/Shell
73781|United States|Extremely satisfied|Information systems, information technology, or system administration|90000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
59609|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;VB.NET;HTML;CSS
33066|France|Slightly satisfied|Computer science, computer engineering, or software engineering|39164.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;Go;Java;JavaScript;PHP;Scala;TypeScript;Ocaml;HTML;CSS;Bash/Shell
76128|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|104030.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Go;JavaScript;PHP;Python;R;SQL;HTML;CSS;Bash/Shell
5419|Turkey|Extremely satisfied|Mathematics or statistics|600000.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
80769|Slovenia|Slightly satisfied|Computer science, computer engineering, or software engineering|22032.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;Java;PHP;SQL;VBA;VB.NET;HTML;CSS
19051|United Kingdom|Moderately dissatisfied|Computer science, computer engineering, or software engineering|34726.0|3 - 4 times per week|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;Swift;HTML
21021|Greece|Moderately satisfied|Computer science, computer engineering, or software engineering|46992.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;SQL
48564|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|61580.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS
12707|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|54755.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Matlab;Python;Bash/Shell
57240|Germany|Slightly satisfied|A social science (ex. anthropology, psychology, political science)|36716.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
44654|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|34726.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;C#;Java;JavaScript;Matlab;Python;Bash/Shell
64092|Sweden|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|93420.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;Matlab;SQL;VB.NET;HTML;CSS
26973|United States|Extremely dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|68000.0|I don't typically exercise|Female|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|HTML;CSS
75591|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|64417.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;SQL;VBA;VB.NET;Visual Basic 6;Delphi/Object Pascal;HTML;CSS
9287|Australia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|87971.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|C++;C#;JavaScript;SQL;VB.NET;HTML;CSS;Bash/Shell
87545|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|135000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;C;Go;Java;JavaScript;Lua;Python;Ruby;Rust;Scala;SQL;HTML;CSS;Bash/Shell
98849|Sweden|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|74856.0|I don't typically exercise|Male|White or of European descent|Associate degree|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C++;C#;Python
50530|Russian Federation|Moderately satisfied|Computer science, computer engineering, or software engineering|36084.0|I don't typically exercise|Female|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;Python;HTML;CSS;Bash/Shell
11814|Portugal|Moderately satisfied|Computer science, computer engineering, or software engineering|30840.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;HTML
89307|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|73433.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Java;Scala;Kotlin
21804|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|More than 4 years ago|Java;JavaScript;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
9933|Pakistan|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|11928.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
87614|France|Extremely satisfied|Computer science, computer engineering, or software engineering|97910.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;Bash/Shell
14793|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
30224|United States|Slightly satisfied|Mathematics or statistics|132000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;Ruby;CSS
55276|Italy|Moderately dissatisfied|Computer science, computer engineering, or software engineering|33657.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;HTML;CSS
88901|Japan|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|37812.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;CoffeeScript;Go;Java;JavaScript;Objective-C;PHP;Python;Ruby;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
96731|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|4740.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;PHP;Python;SQL;Swift;Cobol;HTML;CSS
32179|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|160000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|C;C++;Java;JavaScript;Perl;PHP;Ruby;Rust;Scala;HTML;CSS;Bash/Shell
33803|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|250000.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Ruby;HTML;CSS
83190|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|95462.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Objective-C;Python;Ruby;Swift
65782|Russian Federation|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|61992.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;SQL
25565|India|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|19568.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Python;R;VBA
80703|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|14400.0|3 - 4 times per week|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
63405|Thailand|Moderately satisfied|Computer science, computer engineering, or software engineering|7524.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|Go;JavaScript;PHP;Python;Ruby;HTML
63114|Czech Republic|Moderately satisfied|Information systems, information technology, or system administration|29376.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Java
42749|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|65000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C;C++;C#;Java;Python;SQL;VBA;VB.NET
70448|United Kingdom|Extremely satisfied|Mathematics or statistics|69452.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|JavaScript;Python;SQL;TypeScript;HTML;CSS
96450|Poland|Neither satisfied nor dissatisfied|A natural science (ex. biology, chemistry, physics)|59988.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Go;JavaScript;Python;SQL;HTML;CSS
89392|United States|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|90000.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
87160|Israel|Moderately satisfied|Computer science, computer engineering, or software engineering|88224.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C++;C#;Java;JavaScript;SQL;TypeScript;Visual Basic 6;HTML;CSS;Bash/Shell
83898|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|18785.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Erlang;JavaScript;Python;R;HTML;CSS
74443|India|Slightly satisfied|Computer science, computer engineering, or software engineering|10175.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|JavaScript;TypeScript;HTML;CSS
3225|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|62418.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C#;Groovy;Java;Objective-C;Rust;Scala;SQL;TypeScript;VBA;Kotlin;HTML;CSS;Bash/Shell
69151|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|61194.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Go;Java;JavaScript;SQL;Kotlin;HTML;CSS;Bash/Shell
81460|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|13872.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;Java;JavaScript;HTML;CSS
49856|Norway|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|63762.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;TypeScript;HTML
73628|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|95000.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript
94405|United Kingdom|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|56951.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
44672|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|133000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;Java;JavaScript;Matlab;Python;HTML;CSS;Bash/Shell
13496|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|129000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C#;Objective-C;Swift;Bash/Shell
25950|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|46507.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Java;Python;TypeScript
59871|United Kingdom|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|55562.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
60380|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|185000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;CoffeeScript;Java;JavaScript;Perl;PHP;Python;SQL;TypeScript;VBA;HTML;CSS;Bash/Shell
67897|India|Moderately satisfied|Computer science, computer engineering, or software engineering|11268.0|I don't typically exercise|Male|South Asian|Primary/elementary school|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;PHP;SQL;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
72422|Ukraine|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|18000.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;Clojure;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
21772|Russian Federation|Moderately satisfied|Computer science, computer engineering, or software engineering|28656.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;SQL;HTML;CSS
41981|India|Moderately satisfied|Computer science, computer engineering, or software engineering|7984.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|SQL
80258|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|20351.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Java;JavaScript;R;Scala;SQL;TypeScript
27245|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|190000.0|1 - 2 times per week|Male|East Asian;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C;C++;Java;Python;Bash/Shell
64672|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|23808.0|3 - 4 times per week|Female|Hispanic or Latino/Latina|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java
98427|Belgium|Moderately satisfied|Computer science, computer engineering, or software engineering|33780.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C++;C#;Java;HTML;CSS
28588|Romania|Moderately satisfied|Information systems, information technology, or system administration|48955.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|SQL
67274|Malta|Moderately satisfied|Computer science, computer engineering, or software engineering|22032.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;Java;Python
81522|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|174000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Go;Java;JavaScript;HTML;CSS;Bash/Shell
89855|Germany|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|61680.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|45 - 54 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;Perl;PHP;SQL;HTML;CSS;Bash/Shell
61348|Germany|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|46992.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|R
43880|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|400044.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;Java;JavaScript;PHP;SQL;HTML;CSS
91547|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|86676.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS
52029|United States|Moderately satisfied|Information systems, information technology, or system administration|124500.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|JavaScript;Perl;SQL;HTML;CSS;Bash/Shell
67308|Colombia|Slightly satisfied|Information systems, information technology, or system administration|7176.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;SQL
4784|Lithuania|Moderately satisfied|Computer science, computer engineering, or software engineering|42504.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP
65690|Canada|Slightly dissatisfied|Computer science, computer engineering, or software engineering|48313.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C;Go;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
3878|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|122100.0|I don't typically exercise|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;HTML;CSS
91650|India|Moderately satisfied|Computer science, computer engineering, or software engineering|3500.0|Daily or almost every day|Male|East Asian|They never completed any formal education|3 - 4 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;Python;HTML;CSS
62947|Turkey|Moderately satisfied|Computer science, computer engineering, or software engineering|26544.0|I don't typically exercise|Male|Middle Eastern;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;HTML;CSS
39517|United Kingdom|Slightly dissatisfied|Web development or web design|52783.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS
82665|Turkey|Slightly dissatisfied|Computer science, computer engineering, or software engineering|38148.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|35 - 44 years old|Less than a year ago|C#;Go;JavaScript;Ruby
11342|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|33120.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Java;Kotlin
69446|Canada|Extremely dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|112730.0|1 - 2 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|Groovy;Java;Bash/Shell
97228|Latvia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|29376.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C#;JavaScript;HTML;CSS
71761|India|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|5636.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Python;HTML;CSS
64513|United Kingdom|Extremely satisfied|Mathematics or statistics|33615.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;SQL;TypeScript;HTML;CSS
51916|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|107000.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|55 - 64 years old|More than 4 years ago|C;C#;JavaScript;Julia;Objective-C;SQL;TypeScript;HTML
760|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|99468.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;Go;Groovy;Java;JavaScript;Objective-C;Python;Ruby;Swift;Kotlin;HTML;CSS;Bash/Shell
23513|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|66000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;Bash/Shell
24905|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|31764.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;C#
67756|Pakistan|Moderately satisfied|Computer science, computer engineering, or software engineering|9756.0|1 - 2 times per week|Female|Middle Eastern;South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;Java;JavaScript;Python;HTML;CSS
95633|United States|Moderately dissatisfied|A social science (ex. anthropology, psychology, political science)|95000.0|3 - 4 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Python;SQL;TypeScript;HTML;CSS
76889|Nigeria|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|5004.0|I don't typically exercise|Male|Black or of African descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
74425|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|76000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;JavaScript;Rust;Bash/Shell
66673|United States|Slightly satisfied|Information systems, information technology, or system administration|117000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Java;Perl;SQL;Bash/Shell
37862|Australia|Extremely satisfied|Computer science, computer engineering, or software engineering|112762.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Python;SQL;TypeScript;HTML;CSS
28600|United Kingdom|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|62507.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Python;Ruby;Scala;Kotlin
48883|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|35244.0|3 - 4 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|More than 4 years ago|Groovy;Java;JavaScript
13234|Hungary|Slightly satisfied|Computer science, computer engineering, or software engineering|40392.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;C++;Java;JavaScript;Lua;Perl;SQL
39646|United States|Slightly dissatisfied|A social science (ex. anthropology, psychology, political science)|1164000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;HTML;CSS;Bash/Shell
95524|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|102000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;Python;SQL;TypeScript;VB.NET;HTML;CSS;Bash/Shell
81448|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|125014.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Groovy;Java;Python;Scala;HTML;CSS;Bash/Shell
327|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|23440.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;VBA;VB.NET;Visual Basic 6;HTML
70748|Ireland|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|44060.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Haskell;Java;Matlab;Ruby;Scala;Bash/Shell
34422|Iran, Islamic Republic of...|Moderately dissatisfied|Information systems, information technology, or system administration|36000.0|I don't typically exercise|Male|Middle Eastern|They never completed any formal education|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java
53513|Italy|Moderately dissatisfied|Computer science, computer engineering, or software engineering|29373.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;VBA;HTML;CSS;Bash/Shell
19630|Italy|Moderately dissatisfied|Computer science, computer engineering, or software engineering|64866.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Groovy;Java;Python;SQL;Cobol;Bash/Shell
96390|South Africa|Slightly satisfied|Computer science, computer engineering, or software engineering|54384.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;TypeScript;HTML;CSS
48420|Czech Republic|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|27804.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Python;VBA;Bash/Shell
75954|Denmark|Moderately satisfied|Mathematics or statistics|49308.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Matlab;Python;R;Bash/Shell
37201|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|47000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
54106|Netherlands|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|68537.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;Scala;SQL;Swift;HTML;CSS
95701|United States|Slightly dissatisfied|I never declared a major|90000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;HTML;CSS;Bash/Shell
10317|Portugal|Slightly satisfied|Computer science, computer engineering, or software engineering|14688.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
39800|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|95000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Python;SQL;CSS
22566|Canada|Moderately dissatisfied|Computer science, computer engineering, or software engineering|96626.0|I don't typically exercise|Female|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
66207|United Kingdom|Moderately dissatisfied|Computer science, computer engineering, or software engineering|38893.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;HTML;CSS
66788|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|118068.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;Ruby;Kotlin
11559|Switzerland|Extremely satisfied|Computer science, computer engineering, or software engineering|83416.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
88541|Poland|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|63516.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Python;R;Scala
24620|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|76514.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Swift
54979|Qatar|Slightly dissatisfied|Computer science, computer engineering, or software engineering|120000.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
53442|India|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|18780.0|Daily or almost every day|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|PHP;Python;SQL;HTML;CSS;Bash/Shell
13237|Canada|Slightly dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|48313.0|Daily or almost every day|Female|Native American, Pacific Islander, or Indigenous Australian;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
46824|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|3756.0|I don't typically exercise|Male|South Asian|They never completed any formal education|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
90267|United States|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|2000000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|55 - 64 years old|Less than a year ago|C;Go;Perl;PHP;SQL;Bash/Shell
97711|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|79973.0|3 - 4 times per week|Male|East Asian;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Ruby;HTML;CSS
47043|Japan|Moderately dissatisfied|Information systems, information technology, or system administration|54023.0|Daily or almost every day|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|CoffeeScript;JavaScript;PHP;Ruby;HTML;CSS;Bash/Shell
78240|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|63642.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;Python;R;SQL;TypeScript;HTML;CSS
27054|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|135000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|CoffeeScript;Haskell;Java;JavaScript;Ruby;HTML;CSS;Bash/Shell
20656|United States|Slightly satisfied|A business discipline (ex. accounting, finance, marketing)|70000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS
85667|United Republic of Tanzania|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|37500.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS
4746|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|73433.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;Java;JavaScript;SQL;HTML
78606|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|20000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;Lua;Matlab;Python;Bash/Shell
37621|India|Slightly satisfied|Computer science, computer engineering, or software engineering|4692.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;Java;JavaScript;PHP;SQL;VB.NET;HTML;CSS
30340|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|1000000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;PHP;SQL;HTML
35729|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|9706.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Objective-C;Swift
95852|Ukraine|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|18000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;SQL
10997|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|130000.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;Groovy;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
78878|India|Moderately satisfied|Computer science, computer engineering, or software engineering|7200.0|I don't typically exercise|Male|East Asian|Primary/elementary school|Over 4 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
95197|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|68500.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
58025|Australia|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|123959.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;Objective-C;Ruby;Swift;Bash/Shell
6660|Romania|Extremely dissatisfied|Computer science, computer engineering, or software engineering|58752.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Swift;Kotlin
66063|Myanmar|Slightly dissatisfied|Computer science, computer engineering, or software engineering|6000.0|3 - 4 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Groovy;Java;JavaScript;HTML;CSS;Bash/Shell
96035|Denmark|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|52597.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Swift;Ocaml;HTML;CSS
96482|France|Moderately satisfied|Computer science, computer engineering, or software engineering|121164.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Java;JavaScript;Perl;Python;Ruby;Rust;Scala;SQL;Swift;Bash/Shell
38046|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|142000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Lua;Python;HTML;CSS
64294|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|150000.0|1 - 2 times per week|Female|South Asian;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;Python;SQL;TypeScript
98973|Germany|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|55075.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;HTML
14782|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|70000.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C++;CoffeeScript;Java;JavaScript;SQL;TypeScript;HTML;CSS
95338|United States|Moderately satisfied|Mathematics or statistics|75000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C;Python;R;SQL;HTML;CSS;Bash/Shell
33297|Netherlands|Slightly dissatisfied|Computer science, computer engineering, or software engineering|48955.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java
19466|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|114596.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Clojure;Ruby
9944|Brazil|Slightly satisfied|Computer science, computer engineering, or software engineering|11604.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;TypeScript;HTML;CSS
26164|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|50000.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
44463|Canada|Slightly dissatisfied|Information systems, information technology, or system administration|60391.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Ruby;SQL;HTML;CSS
69530|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|10175.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;HTML;CSS
92572|Austria|Extremely satisfied|Web development or web design|82000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C;C#;JavaScript;Objective-C;PHP;Swift;TypeScript;VB.NET;HTML
51971|Denmark|Moderately satisfied|Computer science, computer engineering, or software engineering|887580.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C++;C#;SQL;VB.NET
7075|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|45624.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C++;Java;JavaScript;Lua;Python;R;Bash/Shell
16088|Germany|Moderately satisfied|Mathematics or statistics|117492.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;Rust
64501|Russian Federation|Extremely satisfied|Computer science, computer engineering, or software engineering|31848.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Assembly;C++;Go;Java;JavaScript;Lua;PHP;Python;Scala;SQL;TypeScript;Bash/Shell
75367|United States|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|45000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;Go;Groovy;Ruby;Bash/Shell
32729|India|Moderately dissatisfied|Information systems, information technology, or system administration|26400.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;Python;SQL
60772|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|68040.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;Java;Python;Cobol
39437|Brazil|Extremely dissatisfied|Computer science, computer engineering, or software engineering|32127.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
7580|Netherlands|Slightly dissatisfied|A business discipline (ex. accounting, finance, marketing)|85671.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Objective-C;Python;Ruby;Swift
80738|Romania|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|34680.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;JavaScript;Python
81401|India|Extremely satisfied|Computer science, computer engineering, or software engineering|8448.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;TypeScript;HTML;CSS
14902|Australia|Extremely dissatisfied|Computer science, computer engineering, or software engineering|99967.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|Between 1 and 2 years ago|C#;JavaScript;R;SQL;TypeScript;HTML;CSS
90240|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|57200.0|Daily or almost every day|Male;Transgender|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|More than 4 years ago|C#;JavaScript;Python;SQL;VB.NET;HTML;CSS;Bash/Shell
53894|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|112400.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;Bash/Shell
49337|Canada|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|76495.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;HTML;CSS
84518|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|160000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Go;Groovy;Java;JavaScript
19477|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|23652.0|I don't typically exercise|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java
66518|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|66089.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|More than 4 years ago|JavaScript;Python;Ruby;Scala;Swift;TypeScript
36045|United States|Extremely satisfied|Information systems, information technology, or system administration|115000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
71740|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|6000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Java;Lua;PHP;SQL;HTML;CSS;Bash/Shell
33005|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|49032.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS
30951|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|150000.0|3 - 4 times per week|Male|Black or of African descent;East Asian;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;Erlang;Go;Haskell;Java;JavaScript;Rust;Scala;TypeScript;Bash/Shell
75510|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|21000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;C#;JavaScript;Python;SQL;VBA;HTML;CSS;Bash/Shell
35833|France|Moderately dissatisfied|Computer science, computer engineering, or software engineering|125124.0|3 - 4 times per week|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C++;Erlang;Go;Haskell;Java;JavaScript;Matlab;Perl;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
27692|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|76397.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;TypeScript
57718|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|91791.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
64887|Bangladesh|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|5160.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS
17525|Austria|Extremely satisfied|Computer science, computer engineering, or software engineering|122388.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;Swift;VBA;VB.NET;HTML;CSS
47020|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|135000.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Java;Objective-C;Swift;Kotlin
45879|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|29373.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;Go;Java;JavaScript;Objective-C;PHP;SQL;Swift;Bash/Shell
35576|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|115000.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|CoffeeScript;JavaScript;Python;Ruby;HTML;CSS;Bash/Shell
19380|Finland|Moderately satisfied|Computer science, computer engineering, or software engineering|44064.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Go;Java;JavaScript;PHP;R;SQL;Swift;HTML;CSS
10047|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|80000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Objective-C;SQL;Swift;TypeScript;HTML;CSS
9651|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|28000.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
29455|Germany|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|67313.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;R;SQL;HTML;CSS
22209|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|144000.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|Over 4 hours|45 - 54 years old|More than 4 years ago|JavaScript;SQL
84041|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|200000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;Clojure;Erlang;Java;JavaScript;Ruby;SQL;HTML;Bash/Shell
98497|United States|Extremely satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|65000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;HTML;CSS
47708|Mexico|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|12888.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;CoffeeScript;JavaScript;Python;Ruby;SQL;HTML;CSS
72530|India|Extremely dissatisfied|Computer science, computer engineering, or software engineering|2820.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;JavaScript;PHP;SQL;HTML;CSS
10826|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|75000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
14597|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|154000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C++;C#;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
22936|United Kingdom|Moderately satisfied|Mathematics or statistics|27781.0|1 - 2 times per week|Male;Transgender|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;JavaScript;Matlab;R;HTML;CSS;Bash/Shell
12276|Iran, Islamic Republic of...|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|1200.0|1 - 2 times per week|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;C#;JavaScript;Python;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
59073|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|60000.0|1 - 2 times per week|Female|Black or of African descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Ruby;SQL;HTML;CSS
51487|France|Slightly satisfied|Computer science, computer engineering, or software engineering|41612.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
76565|Libyan Arab Jamahiriya|Extremely satisfied|Computer science, computer engineering, or software engineering|3900.0|I don't typically exercise|Male|Middle Eastern|They never completed any formal education|3 - 4 hours|45 - 54 years old|More than 4 years ago|C;C++;C#;JavaScript;SQL;VB.NET;Delphi/Object Pascal;HTML;CSS
90914|United States|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|90000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Go;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
85308|India|Extremely satisfied|Computer science, computer engineering, or software engineering|6576.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Java;Python
75575|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|58000.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Associate degree|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;Python;HTML;CSS
74877|Canada|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|74885.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|45 - 54 years old|More than 4 years ago|C++;C#;Java;JavaScript;Objective-C;PHP;Python;SQL;VBA;Bash/Shell
94611|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|94000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Assembly;Python
52323|France|Moderately dissatisfied|Computer science, computer engineering, or software engineering|30840.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Java;JavaScript;PHP;Python;SQL;VB.NET;HTML;CSS;Bash/Shell
22692|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|56460.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Groovy;Java;SQL;Bash/Shell
54589|India|Moderately satisfied|Computer science, computer engineering, or software engineering|18780.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Java;JavaScript;Matlab;Python;SQL;HTML;CSS
26327|France|Slightly satisfied|Information systems, information technology, or system administration|42836.0|1 - 2 times per week|Male|Black or of African descent;White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Groovy;Java;SQL;HTML;CSS
93266|Belgium|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|73433.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|55 - 64 years old|More than 4 years ago|C;C#;SQL;HTML;CSS
109|Azerbaijan|Slightly satisfied|A business discipline (ex. accounting, finance, marketing)|144.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|3 - 4 hours|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
1923|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|70000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
13094|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|51983.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Java;Python
397|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|2000000.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;Matlab;Python;Bash/Shell
64244|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|31000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Java;JavaScript;PHP;Python;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS
71846|Ukraine|Extremely satisfied|Computer science, computer engineering, or software engineering|45096.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C++;Go;Java;Objective-C;Python;Swift;Kotlin
41972|Belarus|Moderately satisfied|Information systems, information technology, or system administration|32664.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C++;C#;Java;JavaScript;SQL;HTML;CSS
44613|Italy|Moderately satisfied|Computer science, computer engineering, or software engineering|42836.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;Erlang;Groovy;Java;JavaScript;Objective-C;Perl;PHP;Python;Scala;Delphi/Object Pascal;Bash/Shell
72477|Ecuador|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|3600.0|I don't typically exercise|Female|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;Java;JavaScript;PHP;Python;R;SQL;HTML;CSS
28306|Thailand|Slightly satisfied|Information systems, information technology, or system administration|293736.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C++
20960|Brazil|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|77979.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS
33696|Australia|Moderately dissatisfied|Computer science, computer engineering, or software engineering|119960.0|3 - 4 times per week|Male|Middle Eastern|Primary/elementary school|1 - 2 hours|35 - 44 years old|Less than a year ago|JavaScript;Objective-C;Swift;HTML;CSS
20381|United Kingdom|Extremely satisfied|Web development or web design|29170.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;CoffeeScript;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
69430|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|29376.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;Python;SQL;HTML;CSS
28143|Poland|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|24702.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;SQL;VBA;VB.NET;HTML;Bash/Shell
9309|Australia|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|83172.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;C#;Java;JavaScript;PHP;Python;SQL;TypeScript;VBA;HTML;CSS;Bash/Shell
67341|United States|Extremely satisfied|Web development or web design|103000.0|1 - 2 times per week|Male;Transgender|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;Visual Basic 6;HTML;CSS
46142|India|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|150288.0|Daily or almost every day|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;SQL;TypeScript;HTML;CSS
99337|United States|Moderately dissatisfied|A social science (ex. anthropology, psychology, political science)|58000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|45 - 54 years old|More than 4 years ago|C++;C#;Java;HTML;CSS
30203|France|Moderately dissatisfied|Web development or web design|33780.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;CoffeeScript;Java;JavaScript;Perl;PHP;Ruby;Rust;Swift;TypeScript;HTML;CSS;Bash/Shell
47879|India|Moderately satisfied|Computer science, computer engineering, or software engineering|18785.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;SQL;TypeScript;HTML;CSS
72708|Pakistan|Moderately satisfied|Computer science, computer engineering, or software engineering|32532.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;Python;SQL;TypeScript;Bash/Shell
3285|Singapore|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|56779.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;Python;SQL;TypeScript;HTML;CSS
14443|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|10140.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#
10877|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|96626.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript
49168|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|150000.0|3 - 4 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Groovy;JavaScript;Python;HTML;CSS;Bash/Shell
37287|United Kingdom|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|852876.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|SQL
71744|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|38184.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
71432|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|110000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|45 - 54 years old|Between 2 and 4 years ago|Groovy;Java;SQL;VBA
1517|Peru|Slightly dissatisfied|Computer science, computer engineering, or software engineering|88000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;CoffeeScript;Erlang;Haskell;Java;JavaScript;Lua;Matlab;Perl;Python;R;Ruby;SQL;HTML;CSS;Bash/Shell
97131|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|110000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Ruby;SQL;HTML;CSS
25292|Bulgaria|Moderately satisfied|Mathematics or statistics|26400.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Python;SQL;HTML
90855|South Africa|Slightly dissatisfied|Information systems, information technology, or system administration|62304.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;JavaScript;PHP;R;Delphi/Object Pascal;HTML;CSS
34211|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|90000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|55 - 64 years old|More than 4 years ago|C++;C#;Java;JavaScript;Python;SQL;Swift;HTML;CSS;Bash/Shell
99837|Serbia|Moderately satisfied|Computer science, computer engineering, or software engineering|20556.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C++;JavaScript;Objective-C;PHP;Python;SQL;Swift;HTML;CSS;Bash/Shell
40262|Ethiopia|Extremely dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|6972.0|1 - 2 times per week|Male|Black or of African descent|Associate degree|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python;TypeScript
14284|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|70000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;Java;JavaScript;Matlab;Python;R;SQL;HTML;CSS;Bash/Shell
22957|Australia|Extremely satisfied|Computer science, computer engineering, or software engineering|111963.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;TypeScript
79645|Spain|Extremely satisfied|Computer science, computer engineering, or software engineering|367164.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;TypeScript;HTML;CSS;Bash/Shell
3646|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|JavaScript;SQL;VB.NET;HTML;CSS
61098|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|80776.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Assembly;C;C++;Java;JavaScript;Objective-C;SQL;Swift;HTML;CSS;Bash/Shell
13504|United States|Moderately dissatisfied|Information systems, information technology, or system administration|60000.0|Daily or almost every day|Female;Transgender|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;SQL;Delphi/Object Pascal;HTML;CSS
80749|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|80772.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;SQL;HTML
39006|France|Slightly satisfied|Computer science, computer engineering, or software engineering|122388.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;F#;TypeScript
86376|France|Moderately satisfied|Computer science, computer engineering, or software engineering|55075.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript
99104|Russian Federation|Slightly dissatisfied|Computer science, computer engineering, or software engineering|10620.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|18 - 24 years old|More than 4 years ago|C;C++;JavaScript;Matlab;Python;SQL;Visual Basic 6;HTML;CSS
15503|India|Extremely satisfied|Computer science, computer engineering, or software engineering|11268.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|JavaScript
27374|Canada|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|82132.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;Python;SQL;Bash/Shell
58214|Brazil|Moderately satisfied|Information systems, information technology, or system administration|1000000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;HTML;CSS
11804|United Kingdom|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|45838.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;JavaScript;Ruby;HTML;CSS;Bash/Shell
575|Ireland|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|63642.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;TypeScript;HTML;CSS
10770|Portugal|Extremely satisfied|Computer science, computer engineering, or software engineering|38552.0|I don't typically exercise|Male|White or of European descent|They never completed any formal education|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;Go;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
78807|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|80000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;HTML;CSS;Bash/Shell
4004|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|63516.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;Python;TypeScript;HTML;CSS
1599|China|Extremely dissatisfied|Computer science, computer engineering, or software engineering|60000.0|Daily or almost every day|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;C#;Java;JavaScript;PHP;SQL;HTML;CSS
45525|Brazil|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|29076.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;Bash/Shell
100475|Russian Federation|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|42456.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;HTML;CSS
69472|Portugal|Slightly satisfied|Computer science, computer engineering, or software engineering|41124.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C;C++;CoffeeScript;Erlang;JavaScript;PHP;Ruby;Rust;SQL;HTML;CSS
71422|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|17640.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;JavaScript;PHP;Python;HTML;CSS
2676|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|150000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;Python;Scala;SQL;HTML;CSS;Bash/Shell
7309|Australia|Neither satisfied nor dissatisfied|A natural science (ex. biology, chemistry, physics)|121560.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
94688|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|0.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;F#;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
1628|India|Slightly satisfied|Computer science, computer engineering, or software engineering|281784.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
28843|United States|Moderately satisfied|A health science (ex. nursing, pharmacy, radiology)|120000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;JavaScript;Python;SQL;TypeScript;VBA
25238|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|84000.0|Daily or almost every day|Male|Native American, Pacific Islander, or Indigenous Australian;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Python;R;SQL;HTML;CSS
80971|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|90000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
37329|Australia|Slightly satisfied|Computer science, computer engineering, or software engineering|59980.0|1 - 2 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;CoffeeScript;JavaScript;Ruby;HTML;CSS
21234|Australia|Moderately satisfied|Mathematics or statistics|63979.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C++;Java;JavaScript;Python;R;SQL;Swift;Kotlin;CSS
84373|United States|Slightly dissatisfied|A social science (ex. anthropology, psychology, political science)|1020000.0|1 - 2 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;TypeScript;HTML;CSS;Bash/Shell
84281|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|15132.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Python;TypeScript;HTML;CSS
50496|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|29000.0|Daily or almost every day|Female|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;Java;Matlab;Python;SQL
65661|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|120000.0|Daily or almost every day|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;Ruby;HTML;CSS
58900|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;HTML;CSS;Bash/Shell
63868|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|80000.0|I don't typically exercise|Male|South Asian|Associate degree|3 - 4 hours|25 - 34 years old|Less than a year ago|C++;Java;JavaScript;SQL;HTML;CSS
4324|Germany|Moderately dissatisfied|Information systems, information technology, or system administration|734328.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;PHP;HTML;CSS
84821|France|Slightly satisfied|A health science (ex. nursing, pharmacy, radiology)|36716.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C;Java;JavaScript;Objective-C;PHP;Ruby;SQL;Swift;VBA;VB.NET;Visual Basic 6;Kotlin;HTML;CSS;Bash/Shell
6165|Russian Federation|Moderately satisfied|Web development or web design|8850.0|Daily or almost every day|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
28879|Austria|Extremely dissatisfied|Computer science, computer engineering, or software engineering|79552.0|1 - 2 times per week|Male|Middle Eastern|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;Python;R;TypeScript;HTML;CSS
92117|France|Extremely satisfied|Web development or web design|14688.0|1 - 2 times per week|Male|Black or of African descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;Java;JavaScript;PHP;Python;Scala;SQL;HTML;CSS;Bash/Shell
14978|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|100000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;Java;JavaScript;Objective-C;Python;Ruby;SQL;Swift;HTML;CSS;Bash/Shell
41310|Italy|Moderately satisfied|Computer science, computer engineering, or software engineering|26436.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Objective-C;PHP;SQL;Swift;HTML;CSS
73845|Hungary|Moderately satisfied|Computer science, computer engineering, or software engineering|34296.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;Groovy;Java;JavaScript;Ruby;HTML;CSS;Bash/Shell
31973|Czech Republic|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|40536.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;Lua;Python;SQL;HTML;CSS;Bash/Shell
52154|Turkey|Slightly dissatisfied|Computer science, computer engineering, or software engineering|8004.0|I don't typically exercise|Male|Middle Eastern;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS
48208|Iran, Islamic Republic of...|Extremely satisfied|Computer science, computer engineering, or software engineering|0.0|I don't typically exercise|Male|Middle Eastern|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|18 - 24 years old|I've never had a job|Assembly;C;C++;Java;Python;SQL;HTML;CSS;Bash/Shell
61588|Italy|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|22032.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|55 - 64 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS
96446|Croatia|Moderately satisfied|Computer science, computer engineering, or software engineering|25656.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Python
11514|Australia|Extremely dissatisfied|A business discipline (ex. accounting, finance, marketing)|47984.0|3 - 4 times per week|Female|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|JavaScript;PHP;Ruby;SQL;HTML;CSS
22740|Bangladesh|Moderately satisfied|Computer science, computer engineering, or software engineering|1444.0|3 - 4 times per week|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;SQL;TypeScript;HTML
739|Iran, Islamic Republic of...|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|20000.0|1 - 2 times per week|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
51724|Czech Republic|Slightly satisfied|Computer science, computer engineering, or software engineering|17376.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Java
93728|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|110000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C;C++;C#;Java;JavaScript;SQL;Kotlin;Bash/Shell
53978|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|42000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Go;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
75843|South Korea|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|26352.0|I don't typically exercise|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Ruby;TypeScript;HTML;CSS
60446|India|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|23482.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
52330|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|50904.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
17298|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|52783.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#
95882|India|Slightly satisfied|Computer science, computer engineering, or software engineering|3756.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;SQL;HTML;CSS
99565|Australia|Extremely dissatisfied|A natural science (ex. biology, chemistry, physics)|84497.0|1 - 2 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;Python;R;HTML;CSS
9849|Sri Lanka|Extremely satisfied|Computer science, computer engineering, or software engineering|11700.0|3 - 4 times per week|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|18 - 24 years old|I've never had a job|C++;C#;Java;JavaScript;PHP;SQL;HTML;CSS
2586|United States|Moderately satisfied|Mathematics or statistics|57000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;Perl;R;Bash/Shell
47087|Canada|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|32209.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|R;SQL
20326|Viet Nam|Slightly satisfied|Computer science, computer engineering, or software engineering|3600.0|I don't typically exercise|Male|East Asian|Some college/university study without earning a degree|3 - 4 hours|18 - 24 years old|Less than a year ago|C++;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
35251|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|62000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
27230|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|62507.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
10395|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|93500.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
4138|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|43482.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;C#;Python;SQL;HTML;CSS;Bash/Shell
56644|Canada|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|44609.0|1 - 2 times per week|Female|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL
30890|India|Extremely satisfied|Computer science, computer engineering, or software engineering|16437.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
19432|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|60000.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C#;Java;JavaScript;Perl;Python;SQL;HTML;CSS;Bash/Shell
3|United Kingdom|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|70841.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;Python;Bash/Shell
99139|Turkey|Moderately dissatisfied|Computer science, computer engineering, or software engineering|23844.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP
28919|Israel|Moderately satisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;Python;R;SQL;TypeScript
83780|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|14976.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;SQL;Bash/Shell
54688|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|690000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Ruby;HTML;CSS;Bash/Shell
24765|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|110000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;TypeScript
96527|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|70985.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Ruby;SQL
12130|United States|Slightly satisfied|A social science (ex. anthropology, psychology, political science)|30000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Python;R;HTML
11832|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|44449.0|1 - 2 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;SQL;HTML;CSS;Bash/Shell
57366|Germany|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|1000000.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Perl;SQL;HTML;CSS;Bash/Shell
70359|Other Country (Not Listed Above)|Moderately satisfied|Computer science, computer engineering, or software engineering|12480.0|I don't typically exercise|Female|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C++;Java;JavaScript;Matlab;PHP;Python;SQL;Visual Basic 6;HTML;CSS
32452|United Kingdom|Slightly dissatisfied|Web development or web design|33.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;HTML;CSS
81220|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|85000.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;Groovy;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
54378|Egypt|Slightly dissatisfied|Computer science, computer engineering, or software engineering|1800.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|More than 4 years ago|C;C++;C#;SQL;VBA;Visual Basic 6;HTML;CSS;Bash/Shell
12328|Norway|Moderately satisfied|Information systems, information technology, or system administration|53560.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
72867|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|96000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;Scala;TypeScript;Bash/Shell
81698|Algeria|Slightly dissatisfied|Computer science, computer engineering, or software engineering|4728.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;Matlab;PHP;Python;SQL;Delphi/Object Pascal;HTML;CSS
19984|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|79552.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS
54322|Czech Republic|Moderately satisfied|Computer science, computer engineering, or software engineering|28956.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Perl;PHP;Python;SQL;HTML;CSS;Bash/Shell
25522|United Kingdom|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|70841.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
65851|Australia|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|103965.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;VBA;HTML;CSS;Bash/Shell
3119|Ireland|Moderately satisfied|Computer science, computer engineering, or software engineering|88119.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Go;Haskell;Java;JavaScript;R;Scala;SQL;Bash/Shell
22065|United States|Extremely dissatisfied|I never declared a major|98000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;Bash/Shell
89450|Argentina|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|30000.0|1 - 2 times per week|Female|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;SQL;HTML;Bash/Shell
21867|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|41671.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;C#
98905|Japan|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|120000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|JavaScript;Ruby;HTML;CSS
93735|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|30000.0|3 - 4 times per week|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C++;JavaScript;Python;R;SQL;HTML;CSS;Bash/Shell
65710|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|100000.0|3 - 4 times per week|Male|Black or of African descent;East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
50835|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|70000.0|3 - 4 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|CoffeeScript;Clojure;Java;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
40989|Ukraine|Slightly satisfied|Computer science, computer engineering, or software engineering|48000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C++;Java;JavaScript;Objective-C;Python;TypeScript;Kotlin;HTML;CSS;Bash/Shell
89218|United States|Moderately dissatisfied|Information systems, information technology, or system administration|95000.0|I don't typically exercise|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Ruby;SQL
69039|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|17640.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;C#;Haskell;Java;JavaScript;Python;Scala;Kotlin;HTML;CSS;Bash/Shell
96869|United States|Moderately satisfied|I never declared a major|90000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
37945|Hungary|Slightly satisfied|Computer science, computer engineering, or software engineering|35724.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;Erlang;Java;JavaScript;Matlab;Objective-C;Python;SQL;Swift;Kotlin;HTML;CSS;Bash/Shell
3472|Ukraine|Slightly satisfied|Computer science, computer engineering, or software engineering|12108.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;SQL
60176|Serbia|Extremely satisfied|Computer science, computer engineering, or software engineering|8808.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;SQL
32041|Malaysia|Slightly satisfied|Mathematics or statistics|19116.0|I don't typically exercise|Female|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C;Java;JavaScript;Objective-C;Swift;HTML;CSS
25425|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|136000.0|Daily or almost every day|Female|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Go;Java;Python;Bash/Shell
74236|United States|Extremely dissatisfied|A humanities discipline (ex. literature, history, philosophy)|55000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;Objective-C;R;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
68601|United Kingdom|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|716748.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;Perl;Python;Bash/Shell
6077|Sweden|Extremely dissatisfied|A natural science (ex. biology, chemistry, physics)|52404.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;Python;SQL;Bash/Shell
101576|United States|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|80000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;PHP;SQL;TypeScript;VB.NET;HTML;CSS
85084|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|109500.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;HTML;CSS
38647|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|180000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C++;JavaScript;Lua;Python;TypeScript;Bash/Shell
71593|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|32000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C#
28195|United States|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|225000.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Python;SQL;HTML;Bash/Shell
45129|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|52872.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Python;SQL;TypeScript;Kotlin;HTML;CSS;Bash/Shell
100511|Ireland|Moderately satisfied|Computer science, computer engineering, or software engineering|85671.0|Daily or almost every day|Female|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;Hack;Haskell;Lua;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
23379|Croatia|Slightly satisfied|Computer science, computer engineering, or software engineering|30588.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
99897|United States|Moderately satisfied|Mathematics or statistics|150000.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|CoffeeScript;JavaScript;Python;R;SQL;HTML;Bash/Shell
38054|Belarus|Slightly dissatisfied|Computer science, computer engineering, or software engineering|9684.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
13361|Australia|Moderately dissatisfied|A business discipline (ex. accounting, finance, marketing)|134352.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Clojure;Groovy;Java;JavaScript;Matlab;Python;SQL;Bash/Shell
3552|India|Extremely satisfied|Computer science, computer engineering, or software engineering|9396.0|Daily or almost every day|Male|South Asian|Primary/elementary school|Over 4 hours|18 - 24 years old|Less than a year ago|JavaScript;PHP;SQL;Swift;TypeScript;HTML;CSS
74771|United States|Extremely satisfied|Web development or web design|108600.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS
14129|Spain|Extremely satisfied|Information systems, information technology, or system administration|97910.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;Scala
9178|Russian Federation|Slightly satisfied|Computer science, computer engineering, or software engineering|8496.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;C#;Java;Objective-C;Python;SQL;Swift
50265|Brazil|Extremely satisfied|Computer science, computer engineering, or software engineering|26196.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;C#;Python;Ruby;TypeScript;Bash/Shell
67284|Venezuela, Bolivarian Republic of...|Moderately satisfied|Information systems, information technology, or system administration|1000000.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
27361|Albania|Slightly dissatisfied|Computer science, computer engineering, or software engineering|35244.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;HTML;CSS
32211|Canada|Slightly satisfied|Computer science, computer engineering, or software engineering|64417.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Erlang;Java;Scala;Swift
92596|United States|Moderately satisfied|Mathematics or statistics|90000.0|Daily or almost every day|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python
68693|United States|Moderately satisfied|Mathematics or statistics|2600.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;Python;HTML;CSS
13475|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|56460.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C++;C#;CoffeeScript;Java;JavaScript;SQL;HTML;CSS
73635|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|104030.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;Java;Python;Scala;SQL
83171|Bangladesh|Slightly dissatisfied|Computer science, computer engineering, or software engineering|2892.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C;C++;Java;PHP;SQL;HTML;CSS
42916|Poland|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|21876.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Java;SQL
14854|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|118366.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Assembly;C;C++;C#;Groovy;Java;JavaScript;Lua;Python;TypeScript;HTML;CSS;Bash/Shell
69500|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|50179.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|JavaScript;TypeScript;HTML;CSS;Bash/Shell
90282|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|19236.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;C#;Java;JavaScript;TypeScript;HTML
78866|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|106000.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++
61575|France|Moderately satisfied|Computer science, computer engineering, or software engineering|36716.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|55 - 64 years old|Between 2 and 4 years ago|PHP;SQL;HTML;CSS
36229|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|104678.0|1 - 2 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|Java;Python;Kotlin;HTML;CSS;Bash/Shell
73482|United States|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|125000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|45 - 54 years old|Less than a year ago|Java;JavaScript;SQL;VBA;HTML;CSS;Bash/Shell
100806|Iran, Islamic Republic of...|Moderately satisfied|Computer science, computer engineering, or software engineering|2328.0|Daily or almost every day|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|35 - 44 years old|Between 2 and 4 years ago|C#;SQL;Visual Basic 6;HTML;CSS
93854|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|88000.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|Go;Groovy;Java;JavaScript;Perl;Rust;SQL;TypeScript;Kotlin;HTML;CSS;Bash/Shell
1491|Australia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|36468.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;C#;Java;JavaScript;Python;HTML;CSS;Bash/Shell
78846|Belarus|Moderately dissatisfied|Computer science, computer engineering, or software engineering|34800.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java
46475|Germany|Extremely satisfied|Information systems, information technology, or system administration|67560.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|CoffeeScript;Java;JavaScript;Python;Ruby;SQL;CSS;Bash/Shell
16524|China|Moderately satisfied|Computer science, computer engineering, or software engineering|20568.0|1 - 2 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Python;R;SQL;TypeScript;HTML;CSS
23659|Canada|Extremely satisfied|Mathematics or statistics|64417.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|CoffeeScript;Go;JavaScript;Lua;PHP;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
55797|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|31948.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;JavaScript;SQL;VB.NET;Visual Basic 6;HTML;CSS
53683|United Kingdom|Moderately satisfied|Web development or web design|69452.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;Kotlin;HTML;CSS;Bash/Shell
67567|United States|Moderately satisfied|Information systems, information technology, or system administration|63000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;Cobol;HTML;CSS;Bash/Shell
65905|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|68000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Perl;Ruby;Rust;HTML;CSS;Bash/Shell
52846|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|41000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|More than 4 years ago|C++;C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS
74298|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|100000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
11565|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|60000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;Haskell;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
13432|China|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|31788.0|1 - 2 times per week|Female;Transgender;Non-binary, genderqueer, or gender non-conforming|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Groovy;Java;JavaScript;Python;HTML;CSS;Bash/Shell
16723|Russian Federation|Slightly dissatisfied|Mathematics or statistics|12732.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Java;JavaScript;SQL
2380|Serbia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|27276.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Java
51735|Poland|Moderately dissatisfied|Computer science, computer engineering, or software engineering|59988.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
80999|United States|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|82000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java;JavaScript;PHP;SQL;Bash/Shell
4046|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|119058.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Haskell;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
77052|United States|Moderately satisfied|Web development or web design|10000.0|1 - 2 times per week|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Java;PHP;SQL;Swift;HTML;CSS
33532|India|Slightly satisfied|Web development or web design|4512.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;PHP;SQL;VBA;VB.NET;HTML;CSS
43376|United Kingdom|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|150012.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;Python;Ruby;HTML;CSS
72696|Russian Federation|Moderately satisfied|Information systems, information technology, or system administration|21228.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;PHP;TypeScript;HTML;CSS
29028|Canada|Slightly satisfied|Computer science, computer engineering, or software engineering|66027.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;Visual Basic 6
39401|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|82500.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
94400|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|66674.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C++;C#;JavaScript;Lua;SQL;TypeScript;HTML;CSS;Bash/Shell
51679|United States|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|101000.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|PHP;Ruby;Scala;SQL;TypeScript;HTML;CSS
67118|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|73433.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Haskell;JavaScript;Python;Rust;Scala;SQL;HTML;CSS;Bash/Shell
2423|India|Moderately satisfied|Information systems, information technology, or system administration|2820.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|PHP;Python
92180|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|155000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|45 - 54 years old|Less than a year ago|Erlang;JavaScript;Python;Ruby;SQL;HTML;CSS;Bash/Shell
1381|Brazil|Slightly dissatisfied|Information systems, information technology, or system administration|37428.0|Daily or almost every day|Male|White or of European descent|They never completed any formal education|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Perl;PHP;SQL;TypeScript;VBA;VB.NET;Visual Basic 6;HTML;CSS
18603|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|75000.0|1 - 2 times per week|Male|South Asian|Associate degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;Objective-C;Swift;HTML;CSS
74152|Australia|Extremely satisfied|Computer science, computer engineering, or software engineering|15000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;Go;Java;JavaScript;Python;TypeScript;HTML;CSS;Bash/Shell
33569|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|190000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Java;JavaScript;Python;HTML;CSS
25229|Other Country (Not Listed Above)|Moderately satisfied|Computer science, computer engineering, or software engineering|30600.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|PHP;SQL;Delphi/Object Pascal;HTML
50720|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|125000.0|I don't typically exercise|Male|Black or of African descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Go;Lua;Perl;Python;SQL
51356|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|101383.0|1 - 2 times per week|Female|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;SQL;HTML;CSS;Bash/Shell
6774|Hong Kong (S.A.R.)|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|130896.0|I don't typically exercise|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|I've never had a job|Assembly;C#;Erlang;Java;JavaScript;Objective-C;PHP;Python;SQL;TypeScript;HTML;CSS
94763|United States|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|43000.0|1 - 2 times per week|Female|Black or of African descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;HTML;CSS
66432|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|19464.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript
100060|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|100000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#
47630|United States|Moderately satisfied|Mathematics or statistics|262000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|45 - 54 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML
47544|United States|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|55000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;Python;SQL;VB.NET;HTML;CSS;Bash/Shell
59201|New Zealand|Moderately satisfied|Computer science, computer engineering, or software engineering|87701.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|Go;JavaScript;Lua;PHP;Python;SQL;HTML;CSS;Bash/Shell
48597|France|Moderately satisfied|Information systems, information technology, or system administration|38184.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C++;Java;JavaScript;SQL;TypeScript;Visual Basic 6;HTML;CSS
70671|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|140000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;JavaScript;Objective-C;Ruby;Swift;HTML;CSS;Bash/Shell
58427|Argentina|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|26400.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
70505|Finland|Moderately dissatisfied|A business discipline (ex. accounting, finance, marketing)|64620.0|I don't typically exercise|Male|White or of European descent|Associate degree|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;HTML;CSS
71718|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|180000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|55 - 64 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Python;Ruby;Scala;SQL;Bash/Shell
31961|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|84000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
69533|India|Moderately satisfied|Computer science, computer engineering, or software engineering|5640.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|JavaScript;PHP;Python;HTML;CSS
91590|Germany|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|85671.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;PHP;Python;HTML;CSS;Bash/Shell
32597|Japan|Moderately satisfied|Computer science, computer engineering, or software engineering|0.0|Daily or almost every day|Male|White or of European descent|Associate degree|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Ruby;HTML;CSS;Bash/Shell
73273|India|Moderately satisfied|Computer science, computer engineering, or software engineering|20000.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;PHP;Python;SQL;VB.NET;HTML;CSS
60219|Hong Kong (S.A.R.)|Slightly satisfied|Computer science, computer engineering, or software engineering|67351.0|I don't typically exercise|Male|East Asian;South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C;C++;JavaScript;Python;TypeScript;Ocaml;Bash/Shell
98153|Australia|Extremely dissatisfied|A business discipline (ex. accounting, finance, marketing)|51983.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Ruby;SQL;HTML;CSS
51967|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|185400.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;F#
44558|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|51408.0|I don't typically exercise|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;PHP;TypeScript;HTML;CSS;Bash/Shell
43523|Germany|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|40388.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|R
68343|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|63979.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|45 - 54 years old|Between 1 and 2 years ago|C;CoffeeScript;JavaScript;Perl;PHP;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
70062|United States|Extremely satisfied|Information systems, information technology, or system administration|70000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Python;R;SQL
79309|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|160000.0|I don't typically exercise|Male|Black or of African descent|Primary/elementary school|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;Python;SQL;TypeScript;HTML;CSS
71745|Indonesia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|6984.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C;C++;C#;Java;JavaScript;PHP;SQL;TypeScript;VB.NET;Visual Basic 6;Kotlin;Delphi/Object Pascal;HTML;CSS
62008|Austria|Extremely satisfied|Computer science, computer engineering, or software engineering|22032.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Java;JavaScript;Python;Swift;Bash/Shell
941|United States|Neither satisfied nor dissatisfied|I never declared a major|72000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;VB.NET;HTML;CSS;Bash/Shell
52581|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|1000000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Go;Java;JavaScript;Python;Rust;HTML;CSS;Bash/Shell
69528|Bangladesh|Moderately satisfied|Computer science, computer engineering, or software engineering|10824.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Python
9141|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|70000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;C#;F#;Java;Python
100803|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|70000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;Python;HTML;CSS
487|Australia|Slightly satisfied|Computer science, computer engineering, or software engineering|87971.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C++;C#;JavaScript;SQL;TypeScript;HTML;CSS
92012|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|110000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;Objective-C;SQL;HTML;CSS;Bash/Shell
67184|Spain|Extremely satisfied|Computer science, computer engineering, or software engineering|24478.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Primary/elementary school|Over 4 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;PHP;Python;Delphi/Object Pascal;HTML;CSS;Bash/Shell
40645|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|175384.0|I don't typically exercise|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|55 - 64 years old|Less than a year ago|C;C++;Objective-C;Python
7842|Poland|Slightly satisfied|I never declared a major|12348.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;JavaScript;Lua;TypeScript;HTML;CSS;Bash/Shell
54102|India|Extremely satisfied|Computer science, computer engineering, or software engineering|18785.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Go;Java;PHP;Python;TypeScript;HTML;CSS
12334|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|37572.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;Python
5549|Hungary|Moderately satisfied|Computer science, computer engineering, or software engineering|32160.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C#;Java;JavaScript;SQL;TypeScript;HTML;CSS
85263|Australia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|63979.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Between 1 and 2 years ago|C;C++;Java;Objective-C;SQL;Swift
94464|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|280000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;Java;JavaScript;Lua;Objective-C;Python;R;Ruby;Rust;SQL;HTML;CSS;Bash/Shell
53082|Japan|Extremely dissatisfied|Computer science, computer engineering, or software engineering|54293.0|1 - 2 times per week|Male|East Asian|They never completed any formal education|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
43419|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|20592.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;Python;SQL;HTML;CSS;Bash/Shell
60065|Russian Federation|Slightly satisfied|Computer science, computer engineering, or software engineering|50400.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;CSS;Bash/Shell
51539|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|45528.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|More than 4 years ago|Java;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
45478|Canada|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|70054.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Python;SQL;CSS
93300|India|Slightly satisfied|Computer science, computer engineering, or software engineering|6576.0|1 - 2 times per week|Female|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;SQL
24330|Sri Lanka|Moderately satisfied|Computer science, computer engineering, or software engineering|16200.0|I don't typically exercise|Male|South Asian|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;SQL;TypeScript;HTML;CSS
63727|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|1440000.0|3 - 4 times per week|Female|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Python;SQL;HTML;CSS;Bash/Shell
96429|Liechtenstein|Extremely satisfied|Information systems, information technology, or system administration|0.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;JavaScript;Python;SQL;Swift;TypeScript;HTML;CSS
28342|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|35768.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;C#;Haskell;Java;Scala;SQL;Swift;HTML;CSS
80964|Argentina|Extremely satisfied|Computer science, computer engineering, or software engineering|14400.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;Python;TypeScript;HTML;CSS
49057|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|50005.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;PHP;TypeScript;HTML;CSS
49447|United Kingdom|Slightly dissatisfied|A natural science (ex. biology, chemistry, physics)|53061.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Python;R;SQL;Bash/Shell
24085|Nigeria|Moderately dissatisfied|Mathematics or statistics|2664.0|I don't typically exercise|Male|Black or of African descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;PHP;TypeScript;HTML;CSS
59755|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|55075.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;Python;HTML;CSS
14849|United States|Extremely satisfied|I never declared a major|120000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;R;SQL;TypeScript;VB.NET;HTML;CSS
34164|Philippines|Extremely satisfied|Computer science, computer engineering, or software engineering|18192.0|1 - 2 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C++;C#;Java;JavaScript;PHP;SQL;HTML;CSS
71508|Sweden|Slightly dissatisfied|Computer science, computer engineering, or software engineering|89832.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;F#;Java;Bash/Shell
18933|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|96000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Go;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
30031|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|135441.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;C++;C#;Lua;Matlab;Python;Bash/Shell
68789|Japan|Slightly dissatisfied|Information systems, information technology, or system administration|39257.0|1 - 2 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;Go;Java;JavaScript;Matlab;PHP;Swift;VBA;HTML
22841|Poland|Extremely satisfied|Computer science, computer engineering, or software engineering|35292.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
54999|Portugal|Slightly satisfied|Mathematics or statistics|73433.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;JavaScript;SQL;HTML;CSS;Bash/Shell
34076|United States|Moderately dissatisfied|A humanities discipline (ex. literature, history, philosophy)|82000.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
71431|Ukraine|Moderately dissatisfied|Computer science, computer engineering, or software engineering|14400.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Groovy;Java;Scala
70262|Switzerland|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|625620.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|65 years or older|More than 4 years ago|C;JavaScript;Perl;PHP;Ruby;HTML;CSS;Bash/Shell
5280|France|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|42836.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;SQL;Delphi/Object Pascal;HTML;CSS
101502|France|Moderately satisfied|Computer science, computer engineering, or software engineering|55075.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;Kotlin;HTML;CSS
47205|United Kingdom|Moderately dissatisfied|I never declared a major|62507.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;Rust;SQL;HTML;CSS;Bash/Shell
41513|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|2000000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;HTML;CSS
41433|Germany|Extremely dissatisfied|Computer science, computer engineering, or software engineering|85671.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;SQL;TypeScript;VB.NET;HTML;Bash/Shell
87857|Turkey|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|22248.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;SQL;Delphi/Object Pascal;HTML;CSS
69492|Poland|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|70572.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;R;Ruby;SQL;HTML;CSS;Bash/Shell
85880|United States|Moderately satisfied|I never declared a major|145000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Haskell;Java;JavaScript;Python;Scala;SQL;Bash/Shell
19053|Philippines|Moderately satisfied|Information systems, information technology, or system administration|15360.0|3 - 4 times per week|Male|East Asian|They never completed any formal education|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;VB.NET
28210|India|Slightly satisfied|Computer science, computer engineering, or software engineering|3756.0|Daily or almost every day|Female;Male|South Asian|Primary/elementary school|1 - 2 hours|18 - 24 years old|Less than a year ago|Assembly;Java;JavaScript;PHP;Python;SQL;HTML;CSS
21359|Switzerland|Slightly satisfied|Computer science, computer engineering, or software engineering|65064.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;C#;Java;JavaScript;PHP;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
89756|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|160000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;Objective-C;Ruby;Swift;HTML;CSS;Bash/Shell
12505|South Korea|Slightly satisfied|Information systems, information technology, or system administration|80000.0|I don't typically exercise|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;Objective-C;PHP;Python;SQL;Swift;Bash/Shell
13283|Norway|Moderately dissatisfied|Information systems, information technology, or system administration|765138.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C#;Python;SQL;TypeScript;Bash/Shell
20770|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|100652.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Clojure;Java;Ruby;SQL;Ocaml;HTML;CSS;Bash/Shell
15281|Brazil|Extremely dissatisfied|Computer science, computer engineering, or software engineering|22452.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Python
20489|Bangladesh|Slightly satisfied|Computer science, computer engineering, or software engineering|21660.0|3 - 4 times per week|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Scala;SQL;TypeScript;HTML;CSS;Bash/Shell
2941|Canada|Slightly satisfied|Computer science, computer engineering, or software engineering|74885.0|I don't typically exercise|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|Java;JavaScript;HTML;CSS;Bash/Shell
5875|Nigeria|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|4164.0|3 - 4 times per week|Male|Black or of African descent|Professional degree (JD, MD, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS
30029|Brazil|Moderately satisfied|Web development or web design|11232.0|I don't typically exercise|Male|Black or of African descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;PHP;SQL;Kotlin;HTML;CSS
84753|China|Moderately satisfied|Computer science, computer engineering, or software engineering|82592.0|3 - 4 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;Ruby;SQL;Swift;HTML;CSS
9193|Paraguay|Extremely dissatisfied|Computer science, computer engineering, or software engineering|200000.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;Objective-C;PHP;Python;SQL;Swift;HTML;CSS
60144|France|Moderately satisfied|Computer science, computer engineering, or software engineering|50179.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;JavaScript;Objective-C;Python;SQL;HTML;CSS;Bash/Shell
21376|Russian Federation|Slightly satisfied|Computer science, computer engineering, or software engineering|10620.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|PHP;Ruby;HTML;CSS
55750|Ireland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|85671.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;CoffeeScript;JavaScript;Ruby;SQL;TypeScript;HTML;CSS
52650|Russian Federation|Moderately satisfied|Information systems, information technology, or system administration|12732.0|3 - 4 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|18 - 24 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
7045|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|58340.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
74974|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|200000.0|3 - 4 times per week|Female|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C#;Java;Objective-C;PHP;Python;Ruby;SQL;Swift;VBA;VB.NET;Visual Basic 6
48918|Denmark|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|89148.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;Python;Delphi/Object Pascal
96692|Brazil|Slightly satisfied|Computer science, computer engineering, or software engineering|21336.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Ruby;SQL;HTML;CSS
23466|Germany|Moderately satisfied|Information systems, information technology, or system administration|16884.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C++;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
16315|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|45876.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C++;C#;Objective-C;Python;Ruby;SQL;Swift
64699|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|71000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;JavaScript;TypeScript;HTML;CSS
1225|United States|Moderately dissatisfied|A business discipline (ex. accounting, finance, marketing)|170000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
6917|France|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|58752.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|45 - 54 years old|Less than a year ago|Assembly;C;SQL;Delphi/Object Pascal;HTML;Bash/Shell
42719|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|89175.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|45 - 54 years old|More than 4 years ago|Java;JavaScript;SQL;HTML;CSS
44316|Norway|Moderately dissatisfied|Information systems, information technology, or system administration|77789.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|Groovy;JavaScript;Lua;Perl;HTML;CSS
41163|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|156000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Assembly;C;Java;Python;HTML;Bash/Shell
57059|Russian Federation|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|34176.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Java
71567|France|Slightly dissatisfied|Computer science, computer engineering, or software engineering|51408.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;TypeScript;Kotlin;HTML;CSS;Bash/Shell
80244|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|82000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
40583|Brazil|Moderately dissatisfied|Computer science, computer engineering, or software engineering|22452.0|1 - 2 times per week|Male|Black or of African descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;HTML;CSS
63877|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|62000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;TypeScript;HTML
75721|United States|Moderately satisfied|Mathematics or statistics|120000.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|45 - 54 years old|Between 1 and 2 years ago|JavaScript;SQL;Bash/Shell
9044|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|100000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Python;R;SQL;HTML;Bash/Shell
94033|Poland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|28236.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
21842|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|63979.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Python;Bash/Shell
25412|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|1800000.0|1 - 2 times per week|Female|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|JavaScript;Perl;PHP;Python;SQL;HTML;CSS;Bash/Shell
5637|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|145000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;PHP;SQL;VB.NET;HTML;CSS
81885|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|76514.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|45 - 54 years old|Between 2 and 4 years ago|Java;SQL;TypeScript;HTML;CSS
23811|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|36720.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Go;Java;JavaScript;Lua;Objective-C;Perl;PHP;Python;Rust;Swift
8491|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|155000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Clojure;Python;Ruby
22497|Russian Federation|Moderately satisfied|Computer science, computer engineering, or software engineering|14856.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Assembly;Groovy;Java;SQL;Bash/Shell
54105|United Kingdom|Moderately dissatisfied|Computer science, computer engineering, or software engineering|55562.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
34938|Brazil|Moderately dissatisfied|Web development or web design|33684.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
3527|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|90000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;SQL
33264|United States|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|88000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|45 - 54 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS
99086|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|100000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
73875|Pakistan|Extremely satisfied|Computer science, computer engineering, or software engineering|18000.0|1 - 2 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;TypeScript;Kotlin
52562|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;VB.NET;HTML;CSS
58428|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|135000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|55 - 64 years old|Between 2 and 4 years ago|Perl;Python
62328|Germany|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|17628.0|3 - 4 times per week|Male|Middle Eastern;White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;Java;JavaScript;Matlab;PHP;SQL
31791|Ireland|Moderately satisfied|Mathematics or statistics|64254.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
99681|United Kingdom|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|88899.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;Matlab;Python;HTML;CSS;Bash/Shell
49150|France|Moderately satisfied|Computer science, computer engineering, or software engineering|22320.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;Lua;PHP;Python;SQL;TypeScript;VBA;HTML;CSS;Bash/Shell
2590|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|137000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;Ruby;SQL;HTML;CSS
34691|Denmark|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|69036.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;Lua;Python;Bash/Shell
47689|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|56673.0|I don't typically exercise|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;PHP;Python;HTML;CSS;Bash/Shell
28311|France|Slightly dissatisfied|A business discipline (ex. accounting, finance, marketing)|48955.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;HTML;CSS
73456|Finland|Extremely satisfied|Computer science, computer engineering, or software engineering|63642.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Clojure;Java;JavaScript;Scala;SQL;HTML;CSS;Bash/Shell
86363|Italy|Slightly satisfied|Computer science, computer engineering, or software engineering|44060.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;PHP;Python;Ruby;HTML;CSS;Bash/Shell
41676|France|Moderately dissatisfied|Computer science, computer engineering, or software engineering|45732.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Python;Scala;TypeScript;HTML;CSS
30328|Australia|Slightly satisfied|Computer science, computer engineering, or software engineering|71976.0|3 - 4 times per week|Female|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;Java
49531|Belarus|Slightly satisfied|Computer science, computer engineering, or software engineering|8472.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|More than 4 years ago|Python;SQL
1395|Brazil|Slightly satisfied|Information systems, information technology, or system administration|9360.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Java;JavaScript;Python;SQL;HTML;CSS
63102|Australia|Extremely satisfied|Computer science, computer engineering, or software engineering|127957.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Clojure;JavaScript;Objective-C;Python;SQL;Swift;HTML;CSS;Bash/Shell
64911|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|966768.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;Java;JavaScript;SQL;HTML;CSS
39116|China|Slightly dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|13092.0|1 - 2 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Python;HTML;CSS
90189|India|Slightly satisfied|Computer science, computer engineering, or software engineering|2256.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|JavaScript;HTML;CSS
44567|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|122388.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;SQL;VBA;VB.NET;HTML;CSS
17871|United States|Slightly satisfied|Information systems, information technology, or system administration|58000.0|1 - 2 times per week|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
97417|Belarus|Moderately dissatisfied|Computer science, computer engineering, or software engineering|30000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C++;C#;SQL
93613|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|38337.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;C#;CoffeeScript;Java;JavaScript;Matlab;PHP;Python;SQL;TypeScript;VB.NET;HTML;CSS;Bash/Shell
28193|United Kingdom|Neither satisfied nor dissatisfied|A natural science (ex. biology, chemistry, physics)|173650.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Less than a year ago|C;Java;Objective-C;Swift;Kotlin;HTML
57405|Spain|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|32979.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;Python;Bash/Shell
96255|Spain|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|24478.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS
56472|Finland|Moderately satisfied|Mathematics or statistics|71232.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;Groovy;Java;JavaScript;PHP;Python;SQL;TypeScript;HTML
83120|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|61194.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
99052|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|67313.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;SQL
66979|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|92000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;Clojure;F#;Go;JavaScript;SQL;TypeScript
31119|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|173650.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Objective-C;Swift
38899|Israel|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|64944.0|I don't typically exercise|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Objective-C;Python;SQL;Swift;HTML;CSS
80757|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|30559.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Groovy;Java;JavaScript;Scala;Swift;Kotlin;Ocaml;Bash/Shell
62003|United States|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|87000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;Java;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
89038|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|822444.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Objective-C;HTML;CSS
23672|Ecuador|Slightly satisfied|Computer science, computer engineering, or software engineering|42000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Groovy;Java;JavaScript;Objective-C;SQL;TypeScript;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
49372|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|48000.0|1 - 2 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;HTML;CSS
22513|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|17592.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
64426|Spain|Moderately satisfied|Information systems, information technology, or system administration|29373.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;SQL
77327|India|Moderately satisfied|Computer science, computer engineering, or software engineering|15888.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
68270|India|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|6951.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;TypeScript;HTML;CSS
19324|Canada|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|32209.0|I don't typically exercise|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;C;C++;C#;Java;JavaScript;Julia;Matlab;PHP;Python;Bash/Shell
78291|Sweden|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|56591.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;Java;JavaScript;Ruby;SQL
19125|United Kingdom|Slightly dissatisfied|Computer science, computer engineering, or software engineering|62507.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Go;Java;JavaScript;Python;HTML;CSS
2404|Australia|Slightly satisfied|Information systems, information technology, or system administration|63835.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;Perl;PHP;Python;SQL;HTML;CSS;Bash/Shell
84046|France|Extremely satisfied|Computer science, computer engineering, or software engineering|35988.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;PHP;HTML;CSS
89877|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|67000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|35 - 44 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
84796|India|Slightly satisfied|Computer science, computer engineering, or software engineering|5256.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Objective-C;Swift
10333|El Salvador|Slightly dissatisfied|Computer science, computer engineering, or software engineering|9432.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C#;Python;VB.NET;Visual Basic 6
35830|Mexico|Moderately dissatisfied|Web development or web design|13536.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;PHP;SQL;TypeScript;VB.NET;HTML;CSS
56268|Canada|Extremely dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|201303.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;Haskell;JavaScript;Matlab;Python;SQL;VB.NET;HTML;CSS;Bash/Shell
33451|United States|Extremely satisfied|Information systems, information technology, or system administration|92000.0|Daily or almost every day|Male|White or of European descent|Associate degree|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
81|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|73428.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|C;C++;C#;Java;JavaScript;VB.NET;HTML;CSS;Bash/Shell
58242|Bangladesh|Slightly satisfied|Computer science, computer engineering, or software engineering|2604.0|I don't typically exercise|Female|East Asian|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS
16314|Nigeria|Moderately dissatisfied|Computer science, computer engineering, or software engineering|3096.0|I don't typically exercise|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;SQL;HTML;CSS
48723|Canada|Slightly dissatisfied|Computer science, computer engineering, or software engineering|96626.0|1 - 2 times per week|Female|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;Perl;HTML
19428|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|71500.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;Objective-C;Python;SQL;Swift;TypeScript;Kotlin;HTML;CSS;Bash/Shell
2382|Austria|Moderately satisfied|Computer science, computer engineering, or software engineering|57400.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C;Java;Python;Ruby
75427|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|88000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS;Bash/Shell
37441|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|106000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|Python;R;SQL;Bash/Shell
25755|Netherlands|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|61194.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Matlab;Python;Ruby;HTML;CSS
2367|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Java
81005|Russian Federation|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|24000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Python;TypeScript;HTML;CSS;Bash/Shell
6976|United States|Slightly dissatisfied|A social science (ex. anthropology, psychology, political science)|60060.0|1 - 2 times per week|Female|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;R;SQL;VBA;HTML;CSS
51524|France|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|46507.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;SQL;Bash/Shell
67784|Switzerland|Extremely dissatisfied|Computer science, computer engineering, or software engineering|62556.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;R
91089|Poland|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|44111.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|45 - 54 years old|More than 4 years ago|JavaScript;Lua;PHP;Python;SQL;HTML;CSS;Bash/Shell
98712|France|Moderately dissatisfied|Web development or web design|666744.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS
11126|India|Slightly satisfied|Computer science, computer engineering, or software engineering|10958.0|Daily or almost every day|Male|South Asian|Primary/elementary school|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;Python;TypeScript;HTML;CSS;Bash/Shell
41240|Singapore|Slightly satisfied|Computer science, computer engineering, or software engineering|54504.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;Objective-C;PHP;Python;SQL;HTML;CSS;Bash/Shell
71104|Switzerland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|112611.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;Java
16345|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|155000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Less than a year ago|C;C++;C#;Go;Groovy;Java;JavaScript;Lua;Objective-C;Perl;PHP;Python;SQL;TypeScript;VB.NET;HTML;CSS;Bash/Shell
48980|Canada|Slightly dissatisfied|Computer science, computer engineering, or software engineering|30598.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;C#;JavaScript;SQL;HTML;CSS
4495|Netherlands|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|105253.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C;C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS
101524|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|80000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Go;JavaScript;Python;SQL;TypeScript;Bash/Shell
96543|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
51342|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|40000.0|Daily or almost every day|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Assembly;C;C++;C#;JavaScript;Lua;Objective-C;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
41205|Poland|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|32460.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;SQL;Bash/Shell
89555|Spain|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|35492.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;C#
9323|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|90000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS
94866|Italy|Moderately satisfied|Computer science, computer engineering, or software engineering|39164.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Go;Java
46524|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|225000.0|I don't typically exercise|Male|East Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|45 - 54 years old|Less than a year ago|C++;Java;Python;R;Scala;Bash/Shell
12942|India|Slightly satisfied|Computer science, computer engineering, or software engineering|28961.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python;SQL;HTML;CSS
28200|United Kingdom|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|58340.0|3 - 4 times per week|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;R
75631|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|112730.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
14693|Viet Nam|Slightly satisfied|Computer science, computer engineering, or software engineering|7200.0|I don't typically exercise|Male|Native American, Pacific Islander, or Indigenous Australian|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|PHP;Python;Ruby;HTML
84818|Belarus|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|6048.0|I don't typically exercise|Female|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|Java;SQL;Kotlin
56038|Canada|Moderately dissatisfied|Computer science, computer engineering, or software engineering|58781.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C;C++;C#;Java;JavaScript;SQL;VBA;HTML
11653|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|70000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Go;Python;Ruby;SQL;Kotlin;HTML;CSS;Bash/Shell
87536|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|345000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
1790|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|60000.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
39829|United States|Moderately dissatisfied|Mathematics or statistics|75000.0|I don't typically exercise|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|PHP;Python
8186|United States|Moderately dissatisfied|Mathematics or statistics|100000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;Python;SQL;HTML;Bash/Shell
34981|Australia|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|53582.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|Java;SQL;Bash/Shell
570|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|34726.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;Scala;SQL;HTML;CSS
9385|Romania|Moderately dissatisfied|Mathematics or statistics|10284.0|I don't typically exercise|Male|White or of European descent|Associate degree|3 - 4 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;C#;Java;Matlab
21140|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|6012.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C#;Java;JavaScript;Ruby
63173|United States|Moderately satisfied|Mathematics or statistics|66000.0|3 - 4 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;C#;JavaScript;PHP;Python;R;Ruby;SQL;VBA;Visual Basic 6;HTML;CSS
74670|Russian Federation|Moderately satisfied|Information systems, information technology, or system administration|33972.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
2813|Spain|Moderately dissatisfied|A humanities discipline (ex. literature, history, philosophy)|35988.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|Between 1 and 2 years ago|JavaScript;PHP;Ruby;SQL;HTML;CSS
24634|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|80000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C;C#;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
30790|Poland|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|40584.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|PHP;Python;Ruby;HTML;CSS;Bash/Shell
19820|Costa Rica|Slightly satisfied|Computer science, computer engineering, or software engineering|45000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|More than 4 years ago|Java;JavaScript;SQL;HTML;CSS;Bash/Shell
6792|France|Moderately satisfied|Computer science, computer engineering, or software engineering|0.0|3 - 4 times per week|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Scala;SQL;CSS;Bash/Shell
50772|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|35244.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
21268|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|58340.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;Python;SQL;HTML;CSS
16814|Switzerland|Extremely satisfied|Computer science, computer engineering, or software engineering|93842.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;Java;JavaScript;Lua;Perl;PHP;Ruby;SQL;HTML;CSS;Bash/Shell
78559|Brazil|Slightly dissatisfied|Mathematics or statistics|524016.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|55 - 64 years old|More than 4 years ago|Java;JavaScript;PHP;SQL;Cobol;HTML;CSS;Bash/Shell
13456|Australia|Slightly satisfied|Mathematics or statistics|111963.0|I don't typically exercise|Male|East Asian|Professional degree (JD, MD, etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|C;C++;R;SQL;Bash/Shell
82479|United States|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|64000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C;Java;JavaScript;PHP;Python;SQL;HTML;CSS
12687|United States|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|85000.0|1 - 2 times per week|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|R;SQL;HTML
95004|United States|Extremely satisfied|Information systems, information technology, or system administration|84000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;HTML
68560|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|50000.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;Go;Haskell;Java;Python;Ruby;HTML;CSS;Bash/Shell
73332|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|25003.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS
35379|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|82000.0|1 - 2 times per week|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C++;Java;JavaScript;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
490|Ireland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|48955.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Go;Groovy;JavaScript;Python;Ruby;SQL;HTML;CSS;Bash/Shell
87076|United Kingdom|Moderately satisfied|I never declared a major|44449.0|I don't typically exercise|Male|White or of European descent|They never completed any formal education|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
79639|India|Moderately satisfied|Web development or web design|5640.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;Java;JavaScript;PHP;HTML;CSS
15904|Nepal|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|1176.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;Matlab;PHP;SQL;HTML;CSS
51794|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|48616.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;SQL;Kotlin
63047|Australia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|59980.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;Groovy;PHP;SQL;VB.NET;HTML;CSS
42429|Germany|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|30597.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Python;R;Scala
32414|France|Extremely satisfied|Computer science, computer engineering, or software engineering|153000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;F#;JavaScript;PHP;SQL;TypeScript;HTML;CSS
4503|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|122388.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#
7602|Netherlands|Slightly dissatisfied|Computer science, computer engineering, or software engineering|44064.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
72122|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|170000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Bash/Shell
3013|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|70000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;C#;Clojure;Java;JavaScript;PHP;Python;Ruby;SQL;HTML;CSS
62829|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|79973.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Groovy;JavaScript;Python;Ruby;Bash/Shell
5123|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|78000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Go;Groovy;Java;Python;Scala;Bash/Shell
88781|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|51408.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Haskell;Java;JavaScript;PHP;Python;Scala;SQL;Bash/Shell
63483|United States|Slightly dissatisfied|A humanities discipline (ex. literature, history, philosophy)|110.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|55 - 64 years old|Between 2 and 4 years ago|R;SQL;VBA;VB.NET;HTML
16053|India|Extremely dissatisfied|Computer science, computer engineering, or software engineering|9393.0|I don't typically exercise|Male|South Asian|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|C#;JavaScript;Python;HTML;CSS;Bash/Shell
69725|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|51403.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
10999|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Lua;TypeScript;HTML;CSS;Bash/Shell
83532|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|87140.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;C++;Java;Perl;SQL;Bash/Shell
76724|Switzerland|Moderately satisfied|Web development or web design|145977.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
85116|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|73433.0|1 - 2 times per week|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Scala
20951|United Kingdom|Slightly dissatisfied|I never declared a major|60423.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
60284|Sweden|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|1000000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|Less than a year ago|C++;Java;Python;HTML
22627|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|126000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
20435|India|Slightly satisfied|Computer science, computer engineering, or software engineering|15588.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Assembly;JavaScript;Python;SQL;HTML;CSS
72885|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|49000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;Python;Ruby;SQL;HTML;CSS
32001|Estonia|Moderately satisfied|Computer science, computer engineering, or software engineering|33780.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Python;HTML;CSS;Bash/Shell
62735|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|85000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
5375|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|35292.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;HTML;CSS;Bash/Shell
42856|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|0.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|3 - 4 hours|35 - 44 years old|More than 4 years ago|PHP;R;SQL;HTML
48911|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|128000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|Assembly;Java;JavaScript;Python;Rust;TypeScript;HTML;CSS;Bash/Shell
57001|Sweden|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|45960.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;Python;HTML;CSS;Bash/Shell
66260|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|125000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|Assembly;C;Go;Haskell;Rust;SQL;HTML;Bash/Shell
73890|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|145000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|55 - 64 years old|Between 1 and 2 years ago|SQL;Bash/Shell
76127|France|Extremely satisfied|Computer science, computer engineering, or software engineering|63642.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Clojure;Go;Python;SQL
19519|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|50000.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
60684|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|85000.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
87223|India|Moderately satisfied|Computer science, computer engineering, or software engineering|16152.0|3 - 4 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
70924|Russian Federation|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|16980.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;Python
14094|Ukraine|Slightly dissatisfied|Computer science, computer engineering, or software engineering|37200.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
66626|Pakistan|Slightly satisfied|Information systems, information technology, or system administration|36000.0|Daily or almost every day|Male|South Asian|Professional degree (JD, MD, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;Java
60140|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|130000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Go;Java;JavaScript;Scala;SQL;Bash/Shell
91030|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|1000000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|C;Go;Ruby;Bash/Shell
53954|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|55075.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Python
95445|Belgium|Extremely dissatisfied|Computer science, computer engineering, or software engineering|122388.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Java;JavaScript;Python;Swift
12183|Italy|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|63642.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;PHP;Rust;SQL;Bash/Shell
44304|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|138000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Bash/Shell
77250|Brazil|Slightly dissatisfied|Information systems, information technology, or system administration|13104.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS
79913|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|136000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;JavaScript;Objective-C;Perl;Python;Ruby;Rust;Swift;HTML;CSS;Bash/Shell
78332|India|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|187848.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Python;SQL;Bash/Shell
28716|United States|Slightly satisfied|A social science (ex. anthropology, psychology, political science)|180000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Groovy;Java;JavaScript;HTML;CSS;Bash/Shell
84879|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|85000.0|1 - 2 times per week|Female|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|45 - 54 years old|More than 4 years ago|JavaScript;SQL;VB.NET;HTML;CSS
28120|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|2160.0|1 - 2 times per week|Male|South Asian|Primary/elementary school|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Java
50021|Russian Federation|Slightly satisfied|Computer science, computer engineering, or software engineering|37800.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
100789|Bosnia and Herzegovina|Slightly dissatisfied|Information systems, information technology, or system administration|31705.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;Java;JavaScript;SQL;HTML;CSS
90390|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|100000.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Groovy;Java;JavaScript;PHP;Ruby;SQL;TypeScript;HTML;CSS
16471|United Kingdom|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|152794.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C++;Hack;Java;JavaScript;Python;HTML
24464|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|98000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
88527|Ecuador|Moderately satisfied|Computer science, computer engineering, or software engineering|21600.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;Matlab;Python;SQL;HTML;CSS;Bash/Shell
6695|United Kingdom|Moderately satisfied|Information systems, information technology, or system administration|23336.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|More than 4 years ago|JavaScript;Lua;PHP;SQL;Delphi/Object Pascal;HTML;CSS
90321|Finland|Extremely satisfied|Computer science, computer engineering, or software engineering|55075.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Java;JavaScript;PHP;Scala;HTML;CSS
29047|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|300000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C#;Java;JavaScript;PHP;SQL;VBA;VB.NET;HTML
97644|India|Extremely satisfied|Computer science, computer engineering, or software engineering|3756.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Java;JavaScript;Ruby;SQL;HTML;CSS
4160|United States|Neither satisfied nor dissatisfied|Mathematics or statistics|60000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|SQL;HTML;CSS
99606|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|140000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;SQL;CSS;Bash/Shell
55512|Portugal|Moderately satisfied|Computer science, computer engineering, or software engineering|15864.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C#;Java;JavaScript;Swift
50338|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|145000.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|45 - 54 years old|Between 2 and 4 years ago|Groovy;JavaScript;Python;Bash/Shell
81234|Portugal|Moderately dissatisfied|Web development or web design|22275.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;Lua;Matlab;Objective-C;PHP;SQL;HTML;CSS
40875|Germany|Moderately satisfied|Information systems, information technology, or system administration|383074.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
72137|India|Moderately satisfied|Computer science, computer engineering, or software engineering|8448.0|Daily or almost every day|Male|South Asian|Primary/elementary school|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;HTML;CSS
20875|India|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|11268.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
73453|Czech Republic|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|23172.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;HTML;CSS
73300|United States|Slightly satisfied|Information systems, information technology, or system administration|50000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
41867|Philippines|Moderately satisfied|Computer science, computer engineering, or software engineering|500.0|1 - 2 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Over 4 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;JavaScript;PHP;SQL;VB.NET;Visual Basic 6;HTML;CSS
43320|New Zealand|Slightly dissatisfied|Computer science, computer engineering, or software engineering|86000.0|Daily or almost every day|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Scala;SQL;HTML;CSS
20538|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|110000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Ruby;HTML;CSS;Bash/Shell
85535|United States|Moderately dissatisfied|Mathematics or statistics|80000.0|Daily or almost every day|Female;Transgender|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Objective-C;Python;SQL;Swift;HTML;CSS
29774|Spain|Slightly dissatisfied|Computer science, computer engineering, or software engineering|22030.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
46476|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|56376.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java
24181|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|107500.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|45 - 54 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
17184|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|95000.0|3 - 4 times per week|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Swift;Kotlin
4356|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|75000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
57826|United States|Moderately satisfied|Mathematics or statistics|86000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;CoffeeScript;JavaScript;R;TypeScript;HTML;CSS;Bash/Shell
2031|Serbia|Moderately satisfied|Computer science, computer engineering, or software engineering|5880.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|CoffeeScript;Go;JavaScript;HTML;CSS
534|France|Extremely satisfied|Computer science, computer engineering, or software engineering|39776.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Go;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
11106|India|Slightly satisfied|Computer science, computer engineering, or software engineering|266748.0|1 - 2 times per week|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Python;TypeScript;HTML;CSS
29410|France|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|58746.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;Lua;PHP;Python;HTML;CSS;Bash/Shell
71361|Poland|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|15876.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;JavaScript;TypeScript;Kotlin;Bash/Shell
16811|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|5256.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;PHP;SQL;HTML;CSS
46426|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|150000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;Clojure;Go;Java;JavaScript;Objective-C;Python;Ruby;Swift;HTML;CSS;Bash/Shell
43088|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|63642.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;TypeScript;HTML;CSS
99172|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|125000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|F#;Haskell;Python;Rust;HTML;CSS
84987|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;CoffeeScript;Java;JavaScript;PHP;Python;SQL;HTML;CSS
75959|Czech Republic|Moderately satisfied|Computer science, computer engineering, or software engineering|57912.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Objective-C;Swift
50364|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|62500.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Less than a year ago|CoffeeScript;Haskell;JavaScript;Perl;PHP;Python;R;SQL;HTML;CSS;Bash/Shell
23574|Germany|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|79552.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C++;Java;Matlab;Python
52222|France|Extremely satisfied|Computer science, computer engineering, or software engineering|53239.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;JavaScript;Python
64444|Netherlands|Extremely satisfied|Computer science, computer engineering, or software engineering|39648.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;HTML;CSS
78138|Australia|Moderately satisfied|Information systems, information technology, or system administration|145552.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;Ruby;HTML;CSS;Bash/Shell
48051|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|31253.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;TypeScript
61359|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|120000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;C#;Groovy;Java;JavaScript;Python;Ruby;TypeScript;HTML;CSS;Bash/Shell
2780|India|Moderately satisfied|Computer science, computer engineering, or software engineering|17220.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Ruby;TypeScript
63808|Australia|Moderately satisfied|Information systems, information technology, or system administration|79973.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|Between 2 and 4 years ago|Python;SQL
16265|Algeria|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|18000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Perl;PHP;Python;HTML;CSS
101560|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|85000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
12381|Mexico|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|22560.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
78828|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|96538.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;SQL;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
75343|United Kingdom|Extremely dissatisfied|Computer science, computer engineering, or software engineering|38199.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;Groovy;Java;JavaScript;Objective-C;PHP;SQL;HTML;CSS;Bash/Shell
20023|Russian Federation|Extremely dissatisfied|Computer science, computer engineering, or software engineering|25476.0|1 - 2 times per week|Male|Native American, Pacific Islander, or Indigenous Australian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;HTML;CSS
101179|Canada|Slightly satisfied|Information systems, information technology, or system administration|56365.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;Go;Groovy;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
55250|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|33684.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|Python;Bash/Shell
30850|United Kingdom|Extremely satisfied|Mathematics or statistics|122930.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;JavaScript;Python;SQL;Bash/Shell
51819|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|50000.0|I don't typically exercise|Female|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;SQL;HTML;CSS;Bash/Shell
33471|Dominican Republic|Slightly satisfied|Mathematics or statistics|15000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Matlab;SQL;TypeScript;HTML;CSS
30604|India|Slightly dissatisfied|A business discipline (ex. accounting, finance, marketing)|9393.0|I don't typically exercise|Male|South Asian|Associate degree|30 - 59 minutes|18 - 24 years old|Less than a year ago|JavaScript;Python;TypeScript;CSS
83499|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|23614.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;PHP;Python;TypeScript;HTML;CSS;Bash/Shell
83639|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|230000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|45 - 54 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
83783|Germany|Extremely satisfied|Mathematics or statistics|111373.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;VB.NET
79780|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;C++;Python;Bash/Shell
86720|Hungary|Moderately satisfied|Computer science, computer engineering, or software engineering|30960.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
48282|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|195000.0|Daily or almost every day|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Java;JavaScript;SQL;HTML;Bash/Shell
84910|India|Extremely satisfied|Computer science, computer engineering, or software engineering|5256.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;Python;HTML;CSS;Bash/Shell
100004|Colombia|Slightly satisfied|Computer science, computer engineering, or software engineering|4800.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;Java;SQL
75517|Poland|Slightly dissatisfied|Information systems, information technology, or system administration|19056.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Go;Lua;Python;SQL;HTML;CSS;Bash/Shell
98211|Ukraine|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|18792.0|1 - 2 times per week|Male|Middle Eastern|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Python;TypeScript;HTML;CSS;Bash/Shell
27604|United States|Slightly satisfied|Information systems, information technology, or system administration|80000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Assembly;C;C++;Java;JavaScript;HTML;CSS;Bash/Shell
23397|France|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|32808.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C++;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
46202|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|8448.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C++;Java;Kotlin
76568|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|169000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Go;Java;JavaScript;Python;HTML;CSS;Bash/Shell
48134|China|Slightly dissatisfied|Computer science, computer engineering, or software engineering|46752.0|3 - 4 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;C#;Go;Java;JavaScript;Lua;Rust;SQL;TypeScript;HTML;Bash/Shell
22334|Iran, Islamic Republic of...|Moderately satisfied|Computer science, computer engineering, or software engineering|16644.0|I don't typically exercise|Male|Middle Eastern|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Groovy;Java;PHP;SQL;HTML;CSS;Bash/Shell
15385|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|60000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|They never completed any formal education|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;JavaScript;PHP;SQL;TypeScript;HTML;CSS
82822|Australia|Extremely satisfied|Computer science, computer engineering, or software engineering|99967.0|I don't typically exercise|Male|White or of European descent|They never completed any formal education|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;Python;R;Scala;SQL
97738|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|97233.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;Perl;Python;Ruby;SQL;HTML;Bash/Shell
16896|Canada|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|64417.0|3 - 4 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Matlab;Python;R;SQL;TypeScript;HTML;CSS;Bash/Shell
93479|Philippines|Moderately dissatisfied|Information systems, information technology, or system administration|2364.0|3 - 4 times per week|Male|South Asian|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C#;Java;JavaScript;PHP;TypeScript;HTML;CSS
71306|India|Extremely dissatisfied|Computer science, computer engineering, or software engineering|7827.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;Matlab;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
93666|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|82000.0|1 - 2 times per week|Female;Transgender|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C++;JavaScript;Python;HTML;CSS;Bash/Shell
50748|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|20664.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;Python;Bash/Shell
36106|Ethiopia|Slightly satisfied|Computer science, computer engineering, or software engineering|8712.0|1 - 2 times per week|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
90850|United Kingdom|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|51394.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Go;Julia;Python;Bash/Shell
55558|France|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|44064.0|Daily or almost every day|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|3 - 4 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Python;SQL;HTML;CSS;Bash/Shell
62237|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|134627.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|C++;Go;Haskell;Java;JavaScript;Perl;Python;Ruby;Scala;SQL;CSS;Bash/Shell
97861|India|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|7512.0|1 - 2 times per week|Female|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;HTML;CSS
36530|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|40388.0|3 - 4 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;R;Scala
9678|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|58869.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Perl
19688|United Kingdom|Moderately satisfied|Mathematics or statistics|90288.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;TypeScript;VBA;VB.NET;HTML;CSS;Bash/Shell
15942|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|74500.0|3 - 4 times per week|Male|Native American, Pacific Islander, or Indigenous Australian;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
59483|Australia|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|67977.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Go;JavaScript;Python;TypeScript;HTML;CSS;Bash/Shell
61127|Denmark|Extremely satisfied|Computer science, computer engineering, or software engineering|69036.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Go;JavaScript;PHP;Rust;HTML;CSS;Bash/Shell
80668|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|75000.0|3 - 4 times per week|Male|Middle Eastern;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
69440|Malta|Moderately satisfied|Information systems, information technology, or system administration|55075.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;HTML
63833|Russian Federation|Moderately satisfied|A health science (ex. nursing, pharmacy, radiology)|55200.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;Objective-C;PHP;Python;SQL;Swift;HTML;CSS;Bash/Shell
90696|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|1000000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|Between 1 and 2 years ago|C++;PHP;Delphi/Object Pascal
85099|Sri Lanka|Moderately satisfied|Information systems, information technology, or system administration|17124.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
99863|Sweden|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|43416.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
96909|Russian Federation|Moderately satisfied|Computer science, computer engineering, or software engineering|10620.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Java;PHP;Python;Rust;SQL;Bash/Shell
51449|Germany|Extremely satisfied|Computer science, computer engineering, or software engineering|76368.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C++;JavaScript;Python;Bash/Shell
62686|Ghana|Slightly dissatisfied|Computer science, computer engineering, or software engineering|10008.0|I don't typically exercise|Female|Black or of African descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Groovy;Java;JavaScript;Objective-C;Python;SQL;Swift;Kotlin;HTML;CSS
59537|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|2000000.0|3 - 4 times per week|Male|Native American, Pacific Islander, or Indigenous Australian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Python;R;SQL;VBA
22311|United States|Slightly dissatisfied|A humanities discipline (ex. literature, history, philosophy)|85000.0|3 - 4 times per week|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|JavaScript;Python;R;SQL;HTML;CSS
39522|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|56298.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;R;HTML
97303|United States|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|115000.0|I don't typically exercise|Male|East Asian;White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;SQL;Swift;HTML;CSS
45144|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|170000.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Assembly;C;C++;Python;Bash/Shell
10607|Italy|Slightly satisfied|Computer science, computer engineering, or software engineering|3060.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;Java;JavaScript;Matlab;PHP;HTML;CSS
3243|Malaysia|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|12132.0|3 - 4 times per week|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|Go;JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
92845|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|104678.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C#;Java;JavaScript;Perl;SQL;VB.NET;HTML;CSS
15321|United States|Extremely satisfied|I never declared a major|50000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Objective-C;Python;SQL;Swift;TypeScript;HTML;CSS
95388|Canada|Moderately dissatisfied|Computer science, computer engineering, or software engineering|66027.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Assembly;C;Go;Python;Ruby;SQL;Swift;HTML;CSS;Bash/Shell
29027|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Groovy;JavaScript;Lua;TypeScript;HTML;CSS
52183|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|19920.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS
60295|Poland|Moderately dissatisfied|A business discipline (ex. accounting, finance, marketing)|28236.0|1 - 2 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;HTML;CSS
93138|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|73433.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C++;C#;HTML;CSS
10267|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|89266.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
5998|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|41671.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
14244|Spain|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|33045.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;SQL
25786|Netherlands|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|30156.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Groovy;Java;JavaScript;PHP;Python;Ruby;SQL;HTML;CSS;Bash/Shell
27262|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;F#;JavaScript;SQL;HTML;CSS
22522|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|40000.0|I don't typically exercise|Transgender|White or of European descent|Associate degree|Less than 30 minutes|55 - 64 years old|More than 4 years ago|Delphi/Object Pascal
49890|Austria|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|20556.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;Java;Objective-C;PHP;Python;R;SQL;Swift;VBA;VB.NET;Visual Basic 6;Delphi/Object Pascal;HTML;CSS;Bash/Shell
14105|France|Moderately satisfied|Computer science, computer engineering, or software engineering|646212.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Objective-C;Swift
30500|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|30108.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Objective-C;Swift
28912|United Kingdom|Extremely satisfied|Mathematics or statistics|44449.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Python;R;SQL;VBA
38265|India|Moderately satisfied|Computer science, computer engineering, or software engineering|18785.0|Daily or almost every day|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Python
17638|Canada|Extremely satisfied|Information systems, information technology, or system administration|48152.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
9686|Nepal|Slightly satisfied|Computer science, computer engineering, or software engineering|91644.0|I don't typically exercise|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS
101333|Japan|Slightly satisfied|Computer science, computer engineering, or software engineering|30252.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
41415|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|36720.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|More than 4 years ago|C#;JavaScript;PHP;Python;SQL;Swift;HTML;CSS
17445|United States|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|2000000.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;PHP;SQL;TypeScript;VBA;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
68783|Italy|Extremely satisfied|Computer science, computer engineering, or software engineering|12239.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|Assembly;C;C++;Java;JavaScript;Matlab;PHP;SQL;Visual Basic 6;Kotlin;Cobol;HTML;CSS;Bash/Shell
69496|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|44916.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;SQL
65777|China|Extremely satisfied|Computer science, computer engineering, or software engineering|31167.0|3 - 4 times per week|Male|South Asian|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
26886|Netherlands|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|46992.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;HTML;CSS
63693|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|140000.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|3 - 4 hours|35 - 44 years old|Between 1 and 2 years ago|JavaScript;Objective-C;PHP;SQL;Swift;HTML;CSS;Bash/Shell
81657|Philippines|Extremely dissatisfied|Information systems, information technology, or system administration|2880.0|3 - 4 times per week|Male|East Asian;South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;HTML;CSS
24645|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|122500.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Go;Python;Bash/Shell
25501|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|52339.0|1 - 2 times per week|Female|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
56974|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|55000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|3 - 4 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML
64248|France|Moderately satisfied|Computer science, computer engineering, or software engineering|64866.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS
2996|Pakistan|Slightly satisfied|Computer science, computer engineering, or software engineering|1632.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;C#;Objective-C;PHP;Python;SQL;VB.NET;Visual Basic 6;HTML;CSS
90854|Italy|Slightly satisfied|Computer science, computer engineering, or software engineering|411228.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript
20057|United States|Extremely satisfied|A business discipline (ex. accounting, finance, marketing)|101200.0|Daily or almost every day|Female|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;R;SQL;TypeScript;HTML;CSS
97256|Belgium|Slightly dissatisfied|A health science (ex. nursing, pharmacy, radiology)|35244.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Perl;PHP;R;SQL;Delphi/Object Pascal;HTML;CSS;Bash/Shell
23532|India|Slightly satisfied|Computer science, computer engineering, or software engineering|2256.0|Daily or almost every day|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;Python;HTML;CSS
73523|Bosnia and Herzegovina|Moderately satisfied|Computer science, computer engineering, or software engineering|24972.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Less than a year ago|Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
13367|Colombia|Slightly satisfied|Computer science, computer engineering, or software engineering|14760.0|Daily or almost every day|Female|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;Objective-C;Python;SQL;Swift;TypeScript;HTML;CSS
10529|France|Moderately satisfied|Computer science, computer engineering, or software engineering|46507.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;JavaScript;Rust;SQL;HTML
39759|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|44287.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;HTML;CSS
66148|South Korea|Extremely satisfied|Computer science, computer engineering, or software engineering|62808.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;Python
51814|Spain|Slightly satisfied|Computer science, computer engineering, or software engineering|176244.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|Over 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
64181|United States|Moderately satisfied|Information systems, information technology, or system administration|85000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;SQL;HTML;CSS
730|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|63979.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;Visual Basic 6;HTML;CSS
23233|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|66767.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|R
18141|United States|Moderately satisfied|Web development or web design|94000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;JavaScript;PHP;SQL;HTML;CSS
45551|United Kingdom|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|750084.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Python;SQL;HTML;CSS
93449|United Kingdom|Slightly dissatisfied|Web development or web design|34726.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS
10026|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|90000.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C++;C#;Java;JavaScript;Matlab;PHP;Python;SQL;HTML;CSS;Bash/Shell
74621|Australia|Extremely dissatisfied|Information systems, information technology, or system administration|1000000.0|I don't typically exercise|Male|East Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C#;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
7708|Belgium|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|61680.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|45 - 54 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
7447|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|58746.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;Bash/Shell
79990|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|44300.0|3 - 4 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Assembly;C++;JavaScript;TypeScript;HTML;CSS;Bash/Shell
28161|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|64417.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;JavaScript;Python;Bash/Shell
10413|Sri Lanka|Moderately satisfied|Computer science, computer engineering, or software engineering|1560.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;VB.NET;HTML;CSS
95567|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|25008.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|CoffeeScript;JavaScript;TypeScript;HTML;CSS
100370|India|Moderately satisfied|Computer science, computer engineering, or software engineering|1884.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;C#;Java;JavaScript;PHP;SQL;VB.NET;Visual Basic 6;HTML;CSS
54239|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|1000000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
3153|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|100000.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Python
10899|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|117000.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|Assembly;C;C++;Go;Haskell;JavaScript;Python;SQL;HTML
18893|Indonesia|Slightly satisfied|Computer science, computer engineering, or software engineering|3576.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS
25177|Germany|Extremely dissatisfied|Information systems, information technology, or system administration|73433.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
73107|India|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|3757.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;Python;HTML;CSS
88965|India|Slightly dissatisfied|Computer science, computer engineering, or software engineering|14652.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Hack;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
58969|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|19447.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C++;Matlab;Perl;Python;R;Bash/Shell
27413|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|88000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
73404|Germany|Slightly satisfied|A business discipline (ex. accounting, finance, marketing)|97910.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|JavaScript;PHP;HTML;CSS;Bash/Shell
17508|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|76397.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;VBA;VB.NET;HTML;CSS
58546|Denmark|Extremely dissatisfied|A business discipline (ex. accounting, finance, marketing)|164366.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|55 - 64 years old|Between 2 and 4 years ago|C;C#;VBA;VB.NET;Visual Basic 6;HTML
27955|Czech Republic|Moderately satisfied|Computer science, computer engineering, or software engineering|23748.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;SQL;TypeScript;HTML;CSS
100426|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|90000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
99601|Pakistan|Extremely satisfied|Computer science, computer engineering, or software engineering|8676.0|3 - 4 times per week|Male|South Asian|Primary/elementary school|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;C#;Java;JavaScript;PHP;SQL;HTML;CSS
98246|Spain|Slightly satisfied|Computer science, computer engineering, or software engineering|381852.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Python
30279|Iceland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|116862.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;TypeScript;HTML;CSS;Bash/Shell
33525|Spain|Slightly dissatisfied|Computer science, computer engineering, or software engineering|44060.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
48188|United States|Moderately dissatisfied|A social science (ex. anthropology, psychology, political science)|55000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS
76866|Iran, Islamic Republic of...|Moderately satisfied|Computer science, computer engineering, or software engineering|26640.0|I don't typically exercise|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C#;Java
6252|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|38893.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;Matlab;Objective-C;PHP;SQL;Swift;HTML;CSS
95184|India|Moderately satisfied|Computer science, computer engineering, or software engineering|17220.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
34209|Germany|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|88119.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|55 - 64 years old|Between 2 and 4 years ago|Assembly;C;JavaScript;Perl;Cobol
8224|India|Moderately satisfied|Computer science, computer engineering, or software engineering|6262.0|Daily or almost every day|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
6928|South Africa|Extremely dissatisfied|A natural science (ex. biology, chemistry, physics)|19584.0|I don't typically exercise|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Python
64192|Germany|Moderately dissatisfied|A social science (ex. anthropology, psychology, political science)|44064.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;C;C++;Go;JavaScript;Python;Rust;HTML;CSS;Bash/Shell
41846|Czech Republic|Moderately satisfied|Computer science, computer engineering, or software engineering|45972.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Clojure;Go;Groovy;Java;JavaScript;PHP;Scala;HTML;CSS;Bash/Shell
50698|United Kingdom|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|62507.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;Python;SQL
71898|United States|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|148000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Clojure;Groovy;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
22169|United States|Moderately dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|115000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
30372|Canada|Slightly satisfied|Computer science, computer engineering, or software engineering|38652.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Go;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
17509|Australia|Slightly dissatisfied|Information systems, information technology, or system administration|43985.0|1 - 2 times per week|Male|South Asian|They never completed any formal education|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;PHP;HTML;CSS
76892|Singapore|Slightly satisfied|Computer science, computer engineering, or software engineering|90840.0|3 - 4 times per week|Male|South Asian|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java
4577|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|118280.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|C#;SQL
32046|United States|Extremely satisfied|Information systems, information technology, or system administration|150000.0|3 - 4 times per week|Male|Middle Eastern;White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;Python;SQL;HTML;CSS;Bash/Shell
95347|Japan|Moderately satisfied|Computer science, computer engineering, or software engineering|59424.0|I don't typically exercise|Male|East Asian;South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;Objective-C;Python;Ruby;SQL;Swift;Kotlin
84660|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|127000.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;HTML;CSS
66907|Canada|Slightly dissatisfied|Computer science, computer engineering, or software engineering|88573.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|PHP;Python;Ruby;Bash/Shell
40805|Bangladesh|Moderately satisfied|Mathematics or statistics|6612.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Python;SQL;HTML;CSS
61661|Sweden|Moderately satisfied|Mathematics or statistics|73433.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C++;C#;JavaScript;Julia;Python;SQL;HTML;CSS;Bash/Shell
17582|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|72500.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#
51534|Australia|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|60000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Python;SQL;HTML;CSS;Bash/Shell
32113|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|116268.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C++;Go;Java;Python;SQL;HTML;CSS;Bash/Shell
6716|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|66084.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Erlang;JavaScript;Ruby
387|Russian Federation|Extremely satisfied|Mathematics or statistics|20808.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|JavaScript;Python;SQL;HTML;CSS
24685|India|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|44328.0|I don't typically exercise|Male|South Asian|Associate degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript
90333|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|75000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;SQL;HTML;CSS
99735|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|78000.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Java;JavaScript;Python;SQL;Swift;HTML;CSS;Bash/Shell
64408|Belarus|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|9600.0|3 - 4 times per week|Female;Male;Transgender;Non-binary, genderqueer, or gender non-conforming|Black or of African descent;East Asian;Hispanic or Latino/Latina;Middle Eastern;Native American, Pacific Islander, or Indigenous Australian;South Asian;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Between 1 and 2 years ago|Java;Kotlin;Bash/Shell
55300|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|145000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Java;JavaScript;Objective-C;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
13674|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|75000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;SQL;HTML;CSS;Bash/Shell
86194|Poland|Slightly satisfied|Information systems, information technology, or system administration|17640.0|I don't typically exercise|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C++
47647|Germany|Moderately dissatisfied|Computer science, computer engineering, or software engineering|51403.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML;CSS
6954|United States|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|76000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;C#;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
65285|United States|Slightly dissatisfied|I never declared a major|80000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
61631|Italy|Moderately satisfied|Computer science, computer engineering, or software engineering|36716.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C++;C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
16673|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|57276.0|1 - 2 times per week|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Ruby;SQL;HTML;CSS
23474|China|Slightly dissatisfied|Computer science, computer engineering, or software engineering|19632.0|1 - 2 times per week|Male|East Asian|Primary/elementary school|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;Java;JavaScript;PHP;Python;SQL;Kotlin;HTML;CSS;Bash/Shell
17548|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|52783.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|R;SQL
77808|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|38650.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Java;Objective-C;SQL;Swift
16656|India|Moderately dissatisfied|Computer science, computer engineering, or software engineering|9393.0|3 - 4 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;Java;JavaScript;PHP;SQL;HTML;CSS
17905|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|50304.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Ruby
4279|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|180000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|55 - 64 years old|Between 1 and 2 years ago|C;C++;Java;Matlab;Python;R;Scala;Bash/Shell
31114|Malaysia|Extremely dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|10320.0|I don't typically exercise|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C++;JavaScript;Objective-C;Ruby;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS
61657|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|62380.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;C#
15160|United States|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|56000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C#;JavaScript;PHP;Python;R;SQL;TypeScript;VBA;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
67365|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|94000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C#;Go;JavaScript;PHP;Python;Ruby;Rust;SQL;HTML;CSS;Bash/Shell
13682|Netherlands|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|77104.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Perl;Python;HTML;CSS
44164|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|100000.0|3 - 4 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C;C++;Python;SQL;Bash/Shell
61263|Iran, Islamic Republic of...|Moderately dissatisfied|Computer science, computer engineering, or software engineering|16644.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|Between 2 and 4 years ago|C++;C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS
95237|Russian Federation|Slightly satisfied|A business discipline (ex. accounting, finance, marketing)|12732.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;PHP;HTML;CSS
13689|Greece|Moderately dissatisfied|Computer science, computer engineering, or software engineering|24478.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
6831|France|Moderately satisfied|Computer science, computer engineering, or software engineering|66089.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C++;JavaScript;TypeScript
11878|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|95000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;F#;JavaScript;TypeScript;HTML;CSS
53400|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|308412.0|1 - 2 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Primary/elementary school|Over 4 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;Matlab;Objective-C;PHP;Python;R;SQL;Swift;HTML;CSS
4370|India|Slightly satisfied|Computer science, computer engineering, or software engineering|150288.0|3 - 4 times per week|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;Python;R;SQL
46785|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|48616.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Python;HTML;CSS
98025|Switzerland|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|118872.0|3 - 4 times per week|Male|East Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|45 - 54 years old|Between 1 and 2 years ago|C++;C#;JavaScript;PHP;Python;TypeScript
4673|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|140000.0|3 - 4 times per week|Non-binary, genderqueer, or gender non-conforming|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;Java;JavaScript;Python;R;Ruby;SQL;HTML;CSS;Bash/Shell
32291|Singapore|Slightly satisfied|Computer science, computer engineering, or software engineering|34067.0|3 - 4 times per week|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Ruby;SQL;VBA;VB.NET;HTML
34562|Finland|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|32316.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java;SQL;HTML
35875|Belgium|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|55812.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;HTML;CSS;Bash/Shell
788|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|55000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;Lua;Python;HTML;CSS;Bash/Shell
25607|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|75000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Go;Java;JavaScript;Objective-C;PHP;Python;SQL;HTML;CSS;Bash/Shell
15348|France|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|58746.0|I don't typically exercise|Male|White or of European descent|They never completed any formal education|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Objective-C;Swift
94897|Spain|Extremely satisfied|Computer science, computer engineering, or software engineering|44060.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Python;TypeScript
55669|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|58746.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;SQL
69847|United States|Extremely satisfied|Information systems, information technology, or system administration|83000.0|Daily or almost every day|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;Bash/Shell
81418|Lebanon|Extremely satisfied|Computer science, computer engineering, or software engineering|13200.0|I don't typically exercise|Male|Middle Eastern|Other doctoral degree (Ph.D, Ed.D., etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS
72016|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|33280.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;Go;Java;JavaScript;PHP;SQL;CSS;Bash/Shell
95560|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|107000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|Java;Scala
10622|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|115000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C#;Go;JavaScript;Python;SQL;TypeScript
80194|Germany|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|39648.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java;VBA;HTML;CSS
5771|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|100500.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|Java;SQL
96383|Other Country (Not Listed Above)|Neither satisfied nor dissatisfied|A natural science (ex. biology, chemistry, physics)|58340.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Python;R;SQL;HTML;CSS;Bash/Shell
9349|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|150000.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|JavaScript;Python;HTML;CSS
30759|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|56365.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Go;Java;JavaScript;Objective-C;Python;SQL;Swift;TypeScript;HTML;CSS;Bash/Shell
82086|Uruguay|Slightly satisfied|Computer science, computer engineering, or software engineering|7992.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;PHP;HTML;CSS
62954|United States|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|95000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
52466|Germany|Extremely dissatisfied|Computer science, computer engineering, or software engineering|58746.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|18 - 24 years old|Less than a year ago|C;C++;Python
5917|Canada|Extremely satisfied|Computer science, computer engineering, or software engineering|96626.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|C;C++;Java;Python;Bash/Shell
52129|United States|Slightly satisfied|Mathematics or statistics|140000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;SQL;Bash/Shell
94259|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|180000.0|1 - 2 times per week|Male|East Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;TypeScript;HTML;CSS
36813|Colombia|Slightly dissatisfied|Information systems, information technology, or system administration|21300.0|3 - 4 times per week|Male|Black or of African descent;Hispanic or Latino/Latina|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;HTML;CSS;Bash/Shell
26385|New Zealand|Slightly satisfied|Computer science, computer engineering, or software engineering|41658.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;PHP;SQL;HTML;CSS
23720|France|Slightly satisfied|Web development or web design|10284.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java;JavaScript;SQL;HTML;CSS;Bash/Shell
58233|Brazil|Extremely dissatisfied|Information systems, information technology, or system administration|65508.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;CSS
38718|Iran, Islamic Republic of...|Slightly dissatisfied|Computer science, computer engineering, or software engineering|11652.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Java;Python
70644|Australia|Moderately satisfied|Computer science, computer engineering, or software engineering|55981.0|I don't typically exercise|Male|Middle Eastern|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
80275|India|Slightly satisfied|Computer science, computer engineering, or software engineering|5640.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Assembly;JavaScript;Objective-C;PHP;Swift;HTML;CSS
30508|Pakistan|Extremely satisfied|Computer science, computer engineering, or software engineering|7200.0|I don't typically exercise|Male|East Asian|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|Java;PHP;Swift
14183|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|30000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Java
55113|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|200016.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;Python;SQL;Kotlin;Bash/Shell
3756|Israel|Moderately satisfied|Computer science, computer engineering, or software engineering|94788.0|I don't typically exercise|Male|Middle Eastern;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Matlab;Perl;PHP;Python;Ruby;SQL;VB.NET;HTML;CSS;Bash/Shell
59679|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|102000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|JavaScript;Python
26958|Jordan|Moderately satisfied|Computer science, computer engineering, or software engineering|30468.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;HTML;CSS
42011|Russian Federation|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|8846.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|More than 4 years ago|C;C++;JavaScript;Matlab;Python;Visual Basic 6;HTML;CSS;Bash/Shell
128|United States|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|14000.0|3 - 4 times per week|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS;Bash/Shell
16168|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|110000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
37058|Russian Federation|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|42456.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|PHP;Python;SQL;VBA
99799|China|Slightly dissatisfied|Mathematics or statistics|23375.0|I don't typically exercise|Male|East Asian|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;Java;Delphi/Object Pascal
14939|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|83224.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;Java
28530|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|112000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;VB.NET;HTML;CSS
85452|Saudi Arabia|Moderately satisfied|Computer science, computer engineering, or software engineering|33600.0|3 - 4 times per week|Female|South Asian|Professional degree (JD, MD, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;HTML;CSS
55769|France|Slightly satisfied|Computer science, computer engineering, or software engineering|48955.0|I don't typically exercise|Male|Black or of African descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;Matlab;Python;SQL;HTML;CSS;Bash/Shell
20898|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|55075.0|3 - 4 times per week|Male|White or of European descent|They never completed any formal education|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;TypeScript;HTML;CSS
574|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|106000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Ruby;SQL
18121|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|75000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;PHP;Python;R;SQL;TypeScript;HTML;CSS;Bash/Shell
1295|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|200000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C++;Java;JavaScript;Python;SQL;Bash/Shell
98884|United States|Moderately satisfied|Information systems, information technology, or system administration|125000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;Python
26723|Switzerland|Moderately satisfied|Computer science, computer engineering, or software engineering|125123.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C++;C#;Java;Swift;HTML;CSS;Bash/Shell
65376|Germany|Slightly satisfied|Computer science, computer engineering, or software engineering|55075.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|Between 1 and 2 years ago|Java;JavaScript;Ruby;SQL;Kotlin;HTML;Bash/Shell
318|Slovakia|Extremely satisfied|Computer science, computer engineering, or software engineering|46992.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|More than 4 years ago|CoffeeScript;JavaScript;TypeScript;HTML
30754|United Kingdom|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|24308.0|3 - 4 times per week|Male|White or of European descent|They never completed any formal education|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Java;Python;HTML;Bash/Shell
18398|Finland|Moderately satisfied|Computer science, computer engineering, or software engineering|76368.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;Python;HTML
33170|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|75000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|35 - 44 years old|More than 4 years ago|Python;HTML;Bash/Shell
95021|Egypt|Moderately satisfied|Computer science, computer engineering, or software engineering|1704.0|I don't typically exercise|Female|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|Assembly;C;C++;C#;Go;Java;JavaScript;Matlab;PHP;R;Visual Basic 6;HTML;CSS
79134|United Kingdom|Moderately dissatisfied|Computer science, computer engineering, or software engineering|600060.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
82284|Switzerland|Neither satisfied nor dissatisfied|A business discipline (ex. accounting, finance, marketing)|93842.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Java;JavaScript;HTML
64121|Germany|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|78328.0|3 - 4 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Clojure;Java;JavaScript;Objective-C;Kotlin
47869|Denmark|Extremely satisfied|Computer science, computer engineering, or software engineering|73636.0|Daily or almost every day|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Objective-C;Perl;Swift
68404|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|116500.0|3 - 4 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
78569|Canada|Moderately satisfied|Web development or web design|101457.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C#;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
92034|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|110000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;F#;Lua;Python;SQL;TypeScript;Kotlin;HTML;CSS
18974|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|960000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;JavaScript
41811|Netherlands|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|82000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Python;Scala;SQL;Bash/Shell
63462|United States|Moderately satisfied|Information systems, information technology, or system administration|50000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;HTML;CSS;Bash/Shell
37770|United Kingdom|Slightly dissatisfied|Mathematics or statistics|60423.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|C;Java;Python;HTML;CSS;Bash/Shell
62917|Gambia|Moderately satisfied|Web development or web design|3780.0|1 - 2 times per week|Male|Black or of African descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Java;JavaScript;PHP;SQL;VBA;VB.NET;HTML;CSS
32893|United States|Moderately satisfied|I never declared a major|105000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|CoffeeScript;JavaScript;Ruby;SQL;HTML;CSS;Bash/Shell
31671|Belgium|Moderately dissatisfied|Computer science, computer engineering, or software engineering|36720.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;TypeScript;HTML
42230|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|80000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C;C++;Objective-C;Python;Swift
39027|United States|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|1056000.0|3 - 4 times per week|Male|East Asian;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Matlab;Python;SQL;HTML;CSS;Bash/Shell
64419|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|140000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Groovy;JavaScript;Ruby;TypeScript;HTML;CSS;Bash/Shell
79331|United States|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|67000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|JavaScript;Perl;PHP;Python;R;SQL;HTML;CSS;Bash/Shell
30361|Malaysia|Moderately satisfied|Computer science, computer engineering, or software engineering|10620.0|1 - 2 times per week|Male|South Asian|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;Swift
68174|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|150000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C;Go;JavaScript;PHP;R;Ruby;SQL;HTML;CSS;Bash/Shell
51987|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|90000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C++;JavaScript
53132|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|70000.0|Daily or almost every day|Female|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;Java;Python;SQL;Kotlin;Bash/Shell
27320|United States|Extremely satisfied|A humanities discipline (ex. literature, history, philosophy)|115000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS
81059|Russian Federation|Slightly satisfied|Computer science, computer engineering, or software engineering|44064.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C;C++;Python;Bash/Shell
52068|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|134500.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;Bash/Shell
85808|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|156000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|CoffeeScript;Go;Haskell;Java;JavaScript;PHP;Python;R;Ruby;SQL;Swift;HTML;CSS;Bash/Shell
49935|Mexico|Extremely satisfied|Computer science, computer engineering, or software engineering|16116.0|Daily or almost every day|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;SQL;HTML;CSS
68263|India|Slightly satisfied|Computer science, computer engineering, or software engineering|6653.0|I don't typically exercise|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;JavaScript;PHP;Python;TypeScript;HTML;CSS
49638|France|Extremely satisfied|Computer science, computer engineering, or software engineering|24478.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|C#
22455|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|105000.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;Objective-C;SQL;Swift;VB.NET;HTML;CSS
43358|Ireland|Moderately dissatisfied|Computer science, computer engineering, or software engineering|97910.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Erlang;Go;Java;Julia;Rust;Kotlin
26621|Canada|Extremely satisfied|Information systems, information technology, or system administration|96624.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|45 - 54 years old|More than 4 years ago|C;C++;Java;JavaScript;Python;Bash/Shell
73754|Bangladesh|Moderately satisfied|Computer science, computer engineering, or software engineering|16164.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
40106|Brazil|Slightly satisfied|A social science (ex. anthropology, psychology, political science)|7488.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;Objective-C;HTML;CSS
99244|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|883428.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;C#;Java;JavaScript;TypeScript;HTML;CSS;Bash/Shell
8608|United Kingdom|Moderately satisfied|Mathematics or statistics|40282.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|More than 4 years ago|C#;Java;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
86327|Colombia|Extremely dissatisfied|Computer science, computer engineering, or software engineering|48000.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
56948|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|45000.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C++;Java;JavaScript;Objective-C;PHP;Python;SQL;HTML;CSS;Bash/Shell
52348|Canada|Moderately dissatisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|Java;JavaScript;Objective-C;PHP;CSS
10200|Poland|Moderately satisfied|Computer science, computer engineering, or software engineering|17640.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C;C#;JavaScript;Python;HTML;CSS
9409|Russian Federation|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|4248.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;Python;VBA;HTML;CSS
32808|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|115000.0|1 - 2 times per week|Female|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|55 - 64 years old|Between 1 and 2 years ago|Java;SQL
81863|Canada|Moderately satisfied|Computer science, computer engineering, or software engineering|62001.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;Groovy;Java;JavaScript;Perl;Python;R;Scala;SQL;HTML;CSS;Bash/Shell
100143|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|5213.0|I don't typically exercise|Male|South Asian|Primary/elementary school|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Java;JavaScript;Matlab;PHP;SQL;HTML;CSS;Bash/Shell
70731|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|55000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
1368|Ukraine|Slightly satisfied|Mathematics or statistics|4680.0|1 - 2 times per week|Male|White or of European descent|Associate degree|1 - 2 hours|18 - 24 years old|Less than a year ago|Python;SQL;Bash/Shell
43397|Canada|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|80521.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;R;VBA
99904|Russian Federation|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|31848.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Groovy;Java;JavaScript
34651|Germany|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|5880.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Groovy;Java;JavaScript;Python;SQL;HTML;CSS
57063|France|Moderately dissatisfied|A health science (ex. nursing, pharmacy, radiology)|36716.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;PHP;Python;HTML;CSS;Bash/Shell
20248|India|Slightly satisfied|Computer science, computer engineering, or software engineering|2818.0|3 - 4 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;TypeScript;HTML;CSS
80474|Turkey|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|48000.0|1 - 2 times per week|Male|Middle Eastern;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Objective-C;SQL;Kotlin;Bash/Shell
35332|United States|Extremely satisfied|Information systems, information technology, or system administration|65000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;SQL;VB.NET;Visual Basic 6;HTML;CSS
32312|United States|Extremely satisfied|Information systems, information technology, or system administration|110000.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|Go;Bash/Shell
20981|Finland|Slightly dissatisfied|Computer science, computer engineering, or software engineering|55812.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Java;JavaScript;Ruby;SQL;Delphi/Object Pascal;HTML;CSS;Bash/Shell
11137|Netherlands|Moderately dissatisfied|Computer science, computer engineering, or software engineering|56298.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C++;Python
8917|Sweden|Moderately satisfied|Computer science, computer engineering, or software engineering|43416.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
88005|India|Moderately dissatisfied|Information systems, information technology, or system administration|114588.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;Perl;Python;SQL;HTML;CSS;Bash/Shell
24332|Ireland|Moderately satisfied|Mathematics or statistics|61194.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|JavaScript;Python;R;Scala;SQL
85515|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|49000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;Go;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
84696|Czech Republic|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|55020.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Between 2 and 4 years ago|Assembly;C++;C#;F#;Java;JavaScript;SQL
73675|Canada|Extremely satisfied|Mathematics or statistics|104678.0|1 - 2 times per week|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;Java;JavaScript;SQL;HTML;CSS
7614|United States|Slightly dissatisfied|A natural science (ex. biology, chemistry, physics)|90000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|JavaScript;Python
52271|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|1000000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|More than 4 years ago|Go;JavaScript;Lua;Perl;PHP;Python;SQL;HTML;CSS;Bash/Shell
34978|Russian Federation|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|63684.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|35 - 44 years old|Between 2 and 4 years ago|Assembly;C;C++;C#;Go;JavaScript;Python;SQL;VBA;HTML;CSS;Bash/Shell
42027|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|83342.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|C#;JavaScript;SQL;HTML;CSS
90666|Hong Kong (S.A.R.)|Moderately dissatisfied|A natural science (ex. biology, chemistry, physics)|41136.0|1 - 2 times per week|Male|East Asian|They never completed any formal education|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Python;R
37537|Canada|Slightly satisfied|Computer science, computer engineering, or software engineering|112730.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|45 - 54 years old|Less than a year ago|C#;Python;VB.NET;Bash/Shell
92840|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|8808.0|I don't typically exercise|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C++;C#;JavaScript;TypeScript;HTML;CSS
56635|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|47500.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Perl;Python;SQL;Bash/Shell
44897|United States|Moderately dissatisfied|Information systems, information technology, or system administration|65000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Groovy;Java;JavaScript;HTML;CSS
35542|India|Moderately satisfied|Computer science, computer engineering, or software engineering|5256.0|1 - 2 times per week|Non-binary, genderqueer, or gender non-conforming|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Objective-C;Swift
4186|India|Moderately satisfied|Computer science, computer engineering, or software engineering|8268.0|I don't typically exercise|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C#;Go;Java;JavaScript;PHP;Python;SQL;TypeScript;HTML;Bash/Shell
52890|Singapore|Extremely satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|59052.0|1 - 2 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Groovy;JavaScript;Ruby;HTML;CSS;Bash/Shell
16757|United States|Slightly dissatisfied|A natural science (ex. biology, chemistry, physics)|91000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
79549|Bulgaria|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|14688.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C++;Java;JavaScript;PHP;Python;HTML;CSS
7530|United Kingdom|Slightly satisfied|Web development or web design|41671.0|I don't typically exercise|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;Ruby;SQL;HTML;CSS
95566|France|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|82000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;SQL
24723|Germany|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|13956.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|More than 4 years ago|C;C#;Go;Java;JavaScript;Rust;TypeScript;Kotlin
59669|Israel|Moderately satisfied|Computer science, computer engineering, or software engineering|112344.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;TypeScript
83530|Romania|Slightly dissatisfied|Computer science, computer engineering, or software engineering|16152.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;SQL;HTML;CSS
86270|Netherlands|Slightly dissatisfied|Web development or web design|117492.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;Scala;Bash/Shell
24131|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|52627.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;C++;C#;Haskell;Java;Python;Scala
82203|Slovakia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|29376.0|I don't typically exercise|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS
99525|Norway|Slightly satisfied|Computer science, computer engineering, or software engineering|68862.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;CSS
88071|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|160000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|C;C++;C#;JavaScript;Perl;Bash/Shell
33564|Mexico|Moderately satisfied|Computer science, computer engineering, or software engineering|74772.0|3 - 4 times per week|Female|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Python
53824|India|Moderately satisfied|Computer science, computer engineering, or software engineering|9396.0|Daily or almost every day|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Haskell;JavaScript;Python
93400|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|78000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C#;JavaScript;Rust;SQL;HTML;CSS;Bash/Shell
42596|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|33000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C++;C#;Java;JavaScript;Python;SQL;Swift;HTML;CSS;Bash/Shell
33851|Mexico|Moderately dissatisfied|Information systems, information technology, or system administration|35448.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Some college/university study without earning a degree|3 - 4 hours|55 - 64 years old|More than 4 years ago|Assembly;C;C++;Java;SQL;VBA;VB.NET;Visual Basic 6;Cobol
33801|Libyan Arab Jamahiriya|Slightly dissatisfied|Computer science, computer engineering, or software engineering|42635.0|1 - 2 times per week|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|Over 4 hours|25 - 34 years old|Between 1 and 2 years ago|Go;Java;JavaScript;PHP;TypeScript;HTML;CSS
34032|United States|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|160000.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Between 1 and 2 years ago|C++;C#;Python;SQL;Bash/Shell
66419|Morocco|Moderately dissatisfied|Computer science, computer engineering, or software engineering|9744.0|3 - 4 times per week|Male|Middle Eastern|Some college/university study without earning a degree|3 - 4 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;PHP;SQL;VB.NET;HTML;CSS
16543|Belgium|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|51648.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript
87954|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|84000.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;C#;Python
51798|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|75000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Go;JavaScript;PHP;SQL;HTML;CSS;Bash/Shell
80368|United States|Moderately satisfied|Web development or web design|70000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
34307|Greece|Slightly satisfied|Computer science, computer engineering, or software engineering|12239.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|Less than a year ago|Java;Python;Scala
85481|United States|Slightly satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|147000.0|I don't typically exercise|Female|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|C;C#;JavaScript;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
88959|Lebanon|Extremely satisfied|Computer science, computer engineering, or software engineering|16800.0|I don't typically exercise|Male|Middle Eastern|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|C;C++;Haskell;Java;JavaScript;Kotlin;HTML;CSS;Bash/Shell
41742|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|62507.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
32689|Brazil|Slightly dissatisfied|Computer science, computer engineering, or software engineering|13104.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;Python;Ruby;SQL;TypeScript;HTML;CSS;Bash/Shell
25353|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|110000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Python;SQL;TypeScript;HTML;CSS
27912|France|Extremely satisfied|Computer science, computer engineering, or software engineering|64866.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|Assembly;C;JavaScript;Perl;PHP;Python;SQL;VBA;Delphi/Object Pascal;Cobol;HTML;CSS;Bash/Shell
80795|Ukraine|Moderately satisfied|Computer science, computer engineering, or software engineering|24000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Swift;Kotlin
58766|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|134000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;Bash/Shell
27933|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|66000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Less than a year ago|C;Python
86625|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|42000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;JavaScript;SQL;VBA;HTML;CSS
36922|Turkey|Moderately satisfied|Computer science, computer engineering, or software engineering|10488.0|I don't typically exercise|Male|Middle Eastern;White or of European descent|They never completed any formal education|30 - 59 minutes|18 - 24 years old|Less than a year ago|Java;Python
72952|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|6384.0|I don't typically exercise|Male|South Asian|Associate degree|3 - 4 hours|25 - 34 years old|Less than a year ago|JavaScript;PHP;HTML;CSS
31603|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|58752.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|C++;JavaScript;PHP;SQL;TypeScript;Delphi/Object Pascal;HTML;CSS;Bash/Shell
60232|Russian Federation|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|26532.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C++;Python;Scala;Bash/Shell
91713|Canada|Slightly dissatisfied|Computer science, computer engineering, or software engineering|56365.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Go;Java;JavaScript;Lua;Python;SQL;HTML;CSS;Bash/Shell
53449|United Kingdom|Moderately satisfied|Computer science, computer engineering, or software engineering|23891.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
58620|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|87127.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|C#;Groovy;Java;JavaScript;SQL;HTML;CSS;Bash/Shell
61515|United States|Slightly satisfied|Mathematics or statistics|73000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;Python;Swift;VBA;HTML;CSS
36826|Brazil|Extremely satisfied|Computer science, computer engineering, or software engineering|22452.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|Java
29257|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|75000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Python;R;SQL;Bash/Shell
94000|France|Slightly satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|39164.0|1 - 2 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;HTML;CSS
85999|Bosnia and Herzegovina|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|29376.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Objective-C;Swift
19953|India|Extremely satisfied|Computer science, computer engineering, or software engineering|18780.0|I don't typically exercise|Male|East Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|More than 4 years ago|Java;JavaScript;Python;TypeScript;Kotlin;HTML;CSS;Bash/Shell
82345|Switzerland|Moderately satisfied|Information systems, information technology, or system administration|131379.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;Java;JavaScript;PHP;Scala;Delphi/Object Pascal;HTML;CSS;Bash/Shell
65380|United States|Slightly satisfied|Computer science, computer engineering, or software engineering|90000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|More than 4 years ago|Go;JavaScript;Ruby;HTML;CSS;Bash/Shell
35226|Netherlands|Moderately satisfied|Computer science, computer engineering, or software engineering|51408.0|1 - 2 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|C++;C#;Python;VBA
51531|Mexico|Moderately dissatisfied|Information systems, information technology, or system administration|16116.0|I don't typically exercise|Female|Black or of African descent;East Asian;Hispanic or Latino/Latina;Middle Eastern;Native American, Pacific Islander, or Indigenous Australian;South Asian;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|25 - 34 years old|More than 4 years ago|C#;JavaScript;PHP;Ruby;SQL;TypeScript;HTML;CSS
28258|United Kingdom|Moderately satisfied|Mathematics or statistics|55562.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|45 - 54 years old|Between 1 and 2 years ago|JavaScript;Ruby;SQL;HTML;CSS
92128|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|101000.0|1 - 2 times per week|Male|White or of European descent|Associate degree|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C++;Groovy;Java;JavaScript;HTML;CSS
8823|Austria|Extremely satisfied|Computer science, computer engineering, or software engineering|15276.0|3 - 4 times per week|Female|White or of European descent|Some college/university study without earning a degree|1 - 2 hours|18 - 24 years old|Less than a year ago|C;C++;Haskell;Java;JavaScript;Matlab;Python;R;SQL;HTML;CSS;Bash/Shell
94202|United States|Moderately satisfied|Web development or web design|32500.0|1 - 2 times per week|Female|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|18 - 24 years old|Between 2 and 4 years ago|JavaScript;PHP;HTML;CSS
94144|Ukraine|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|48000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
25231|Kenya|Moderately satisfied|Mathematics or statistics|40824.0|I don't typically exercise|Male|Black or of African descent|Some college/university study without earning a degree|1 - 2 hours|35 - 44 years old|More than 4 years ago|PHP
23670|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|70000.0|1 - 2 times per week|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;Go;Java;JavaScript;PHP;Python;SQL;Swift;TypeScript;HTML;CSS
27434|France|Moderately dissatisfied|Web development or web design|48955.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Between 2 and 4 years ago|Java;Swift;Bash/Shell
66250|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|55075.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|PHP;SQL
97892|United States|Extremely dissatisfied|Computer science, computer engineering, or software engineering|2000000.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|55 - 64 years old|Between 1 and 2 years ago|C;C++;C#;Java;JavaScript;Objective-C;SQL;Swift;TypeScript;VB.NET;HTML;CSS;Bash/Shell
88132|Russian Federation|Slightly dissatisfied|Mathematics or statistics|27600.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Objective-C;Swift
87288|United States|Slightly satisfied|A humanities discipline (ex. literature, history, philosophy)|140000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina;White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|45 - 54 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
44962|United States|Slightly satisfied|Web development or web design|175000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|3 - 4 hours|35 - 44 years old|More than 4 years ago|JavaScript;HTML;CSS
24302|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|100000.0|1 - 2 times per week|Male|Black or of African descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;CoffeeScript;Go;Java;JavaScript;Lua;Objective-C;PHP;Python;Ruby;SQL;Swift;TypeScript;Kotlin;HTML;CSS;Bash/Shell
81708|Austria|Moderately dissatisfied|Computer science, computer engineering, or software engineering|142872.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|Less than a year ago|C;JavaScript;Python;Scala;SQL;HTML;CSS;Bash/Shell
35755|Israel|Extremely satisfied|Computer science, computer engineering, or software engineering|154476.0|3 - 4 times per week|Male|Middle Eastern;White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|Less than a year ago|Groovy;Java;JavaScript;Python;SQL;HTML;Bash/Shell
36342|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|44060.0|I don't typically exercise|Male|White or of European descent|Associate degree|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
97060|Brazil|Moderately satisfied|Information systems, information technology, or system administration|5616.0|I don't typically exercise|Male|Hispanic or Latino/Latina;White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|3 - 4 hours|18 - 24 years old|Less than a year ago|JavaScript;PHP;SQL;TypeScript;VB.NET;HTML;CSS
49651|Cyprus|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|51408.0|I don't typically exercise|Male|White or of European descent|Professional degree (JD, MD, etc.)|Less than 30 minutes|35 - 44 years old|Between 1 and 2 years ago|JavaScript;PHP;SQL;HTML;Bash/Shell
3826|United Kingdom|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|145849.0|I don't typically exercise|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Objective-C;HTML;CSS
97944|United Kingdom|Slightly satisfied|Information systems, information technology, or system administration|76397.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;Perl;SQL;HTML;CSS;Bash/Shell
75725|Norway|Moderately satisfied|Computer science, computer engineering, or software engineering|86716.0|1 - 2 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|Between 1 and 2 years ago|C;JavaScript;Perl;PHP;SQL;CSS;Bash/Shell
12153|India|Moderately satisfied|Computer science, computer engineering, or software engineering|52442.0|3 - 4 times per week|Male|South Asian|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C;C++;Java;Lua;Matlab;PHP;Python;R;Scala;SQL;HTML;CSS;Bash/Shell
85983|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|100000.0|I don't typically exercise|Male|White or of European descent|Associate degree|Less than 30 minutes|45 - 54 years old|More than 4 years ago|C#;JavaScript;Matlab;SQL;TypeScript;HTML;CSS
35562|Italy|Moderately satisfied|Computer science, computer engineering, or software engineering|24972.0|3 - 4 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C;C++;C#;Java;JavaScript;Matlab;Objective-C;PHP;Python;SQL
80333|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|74000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Objective-C;Swift
42389|Romania|Moderately satisfied|Computer science, computer engineering, or software engineering|50448.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;C#;Go;Java;Matlab;PHP;Python;HTML;CSS;Bash/Shell
76912|United States|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|123000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|JavaScript;SQL
23596|Russian Federation|Slightly satisfied|Information systems, information technology, or system administration|12204.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;HTML;CSS
56958|United States|Moderately satisfied|Web development or web design|70000.0|Daily or almost every day|Male|White or of European descent|Some college/university study without earning a degree|Less than 30 minutes|25 - 34 years old|Less than a year ago|PHP;HTML;CSS
85820|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|79552.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|Between 2 and 4 years ago|C#;Groovy;Java;JavaScript;Python;SQL;TypeScript;Bash/Shell
91042|United States|Extremely satisfied|Computer science, computer engineering, or software engineering|75000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Delphi/Object Pascal
13046|Spain|Moderately dissatisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|16884.0|1 - 2 times per week|Male|Middle Eastern|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|JavaScript;HTML;CSS;Bash/Shell
27017|Spain|Neither satisfied nor dissatisfied|Web development or web design|31821.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|18 - 24 years old|Less than a year ago|CoffeeScript;JavaScript;TypeScript;HTML;CSS
78483|Brazil|Moderately satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|18715.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 1 and 2 years ago|Python;R;SQL;Bash/Shell
42468|Nepal|Extremely dissatisfied|Information systems, information technology, or system administration|1000.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Assembly;C;Java;JavaScript;PHP;Python;SQL;HTML;CSS
74344|Switzerland|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|93840.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Objective-C;Swift;Kotlin
19990|Austria|Slightly satisfied|Computer science, computer engineering, or software engineering|42360.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|Java;JavaScript;PHP;SQL;TypeScript;Kotlin;HTML;CSS
61052|United States|Moderately satisfied|Information systems, information technology, or system administration|151000.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Primary/elementary school|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;SQL;HTML;CSS
71568|Colombia|Slightly satisfied|Computer science, computer engineering, or software engineering|25308.0|3 - 4 times per week|Male|Hispanic or Latino/Latina|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C#;JavaScript;Ruby;SQL;TypeScript;Visual Basic 6;HTML;CSS
47023|United States|Moderately satisfied|Mathematics or statistics|115000.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|JavaScript;Perl;Python;SQL;HTML;CSS
82643|Russian Federation|Moderately satisfied|Information systems, information technology, or system administration|42000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Python;Ruby;Bash/Shell
9619|India|Moderately satisfied|Computer science, computer engineering, or software engineering|9960.0|Daily or almost every day|Male|South Asian|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Groovy;Java
40725|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|112000.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Between 2 and 4 years ago|JavaScript;PHP;Python;SQL;VBA;HTML;CSS;Bash/Shell
72808|United States|Moderately satisfied|Information systems, information technology, or system administration|85748.0|1 - 2 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|C#;Clojure;JavaScript;SQL;Visual Basic 6
56542|France|Slightly dissatisfied|Computer science, computer engineering, or software engineering|55075.0|1 - 2 times per week|Male|White or of European descent|Professional degree (JD, MD, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|C;C++;C#;JavaScript;SQL;HTML;CSS;Bash/Shell
54482|Germany|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|38184.0|3 - 4 times per week|Male|White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Less than a year ago|CoffeeScript;JavaScript;Ruby;HTML;CSS
86364|United States|Slightly satisfied|A social science (ex. anthropology, psychology, political science)|123500.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|Go;JavaScript;Objective-C;Python;Swift;Bash/Shell
71560|Japan|Slightly satisfied|Computer science, computer engineering, or software engineering|72031.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;JavaScript;Matlab;Python;R;TypeScript;HTML;CSS
67168|Saudi Arabia|Slightly dissatisfied|Computer science, computer engineering, or software engineering|19200.0|3 - 4 times per week|Male|Black or of African descent;East Asian;Hispanic or Latino/Latina;Middle Eastern;Native American, Pacific Islander, or Indigenous Australian;South Asian;White or of European descent|Primary/elementary school|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Objective-C;Swift
85454|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|East Asian;White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C;C++;C#;Java;JavaScript;Python;SQL;HTML;CSS;Bash/Shell
59967|United States|Slightly dissatisfied|Computer science, computer engineering, or software engineering|50000.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|18 - 24 years old|Between 2 and 4 years ago|Assembly;C++;C#;JavaScript;Python;Rust;SQL;TypeScript;HTML;CSS;Bash/Shell
100644|Portugal|Slightly satisfied|A natural science (ex. biology, chemistry, physics)|14688.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C++;Python
8643|Sweden|Extremely satisfied|Computer science, computer engineering, or software engineering|1000000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;TypeScript
52973|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|62000.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Java;JavaScript;Ruby;HTML;CSS
46440|South Africa|Extremely satisfied|Computer science, computer engineering, or software engineering|63512.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|18 - 24 years old|Between 2 and 4 years ago|C;C++;C#;Java;JavaScript;Objective-C;TypeScript;HTML;CSS
52766|Australia|Moderately satisfied|Information systems, information technology, or system administration|51983.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
82119|Germany|Slightly dissatisfied|Computer science, computer engineering, or software engineering|61194.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C++
23072|Hungary|Moderately dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|21432.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;Java;JavaScript;Objective-C;Python;Swift;TypeScript;Kotlin;HTML;CSS;Bash/Shell
37129|United States|Moderately satisfied|A social science (ex. anthropology, psychology, political science)|76500.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|Java;JavaScript;CSS
2041|United States|Extremely satisfied|A social science (ex. anthropology, psychology, political science)|130000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|C;JavaScript;Objective-C;Ruby;SQL;Swift;HTML;CSS
87531|United Kingdom|Moderately satisfied|A natural science (ex. biology, chemistry, physics)|97233.0|3 - 4 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|Java;JavaScript;PHP;SQL;Kotlin;HTML;CSS
77409|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|70000.0|Daily or almost every day|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|1 - 2 hours|18 - 24 years old|Between 1 and 2 years ago|Assembly;C;C++;Erlang;Go;Haskell;Java;JavaScript;Objective-C;PHP;Python;Ruby;SQL;Swift;TypeScript;Kotlin;HTML;CSS;Bash/Shell
74811|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|65000.0|I don't typically exercise|Female;Non-binary, genderqueer, or gender non-conforming|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C#;JavaScript;SQL;TypeScript;HTML;CSS
84361|Croatia|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|32364.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C++;Java;Python;Rust;Scala;Bash/Shell
89574|Bosnia and Herzegovina|Slightly dissatisfied|Computer science, computer engineering, or software engineering|7512.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 1 and 2 years ago|C;C++;Java;JavaScript;PHP;Python;SQL;TypeScript;HTML;CSS;Bash/Shell
2185|United States|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|71250.0|1 - 2 times per week|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|More than 4 years ago|JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
98951|United States|Extremely satisfied|I never declared a major|85000.0|I don't typically exercise|Female;Transgender|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|JavaScript;PHP;Python;SQL;VB.NET;HTML;CSS;Bash/Shell
25172|United States|Moderately satisfied|Information systems, information technology, or system administration|98000.0|I don't typically exercise|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C++;Go;JavaScript;Python;SQL;HTML;CSS
72753|Germany|Slightly dissatisfied|Mathematics or statistics|77104.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Matlab;Python;Bash/Shell
63125|Viet Nam|Neither satisfied nor dissatisfied|Information systems, information technology, or system administration|4800.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|3 - 4 hours|18 - 24 years old|Between 1 and 2 years ago|JavaScript;HTML;CSS
36708|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|245000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|C#;JavaScript;SQL;HTML;CSS
47885|United States|Moderately satisfied|Computer science, computer engineering, or software engineering|135000.0|3 - 4 times per week|Male|White or of European descent|Some college/university study without earning a degree|30 - 59 minutes|18 - 24 years old|Between 2 and 4 years ago|Assembly;C++;C#;Objective-C;Perl;Bash/Shell
95952|Dominican Republic|Moderately satisfied|Computer science, computer engineering, or software engineering|22356.0|1 - 2 times per week|Male|Hispanic or Latino/Latina|Professional degree (JD, MD, etc.)|3 - 4 hours|25 - 34 years old|More than 4 years ago|C#;Java;JavaScript;Ruby;SQL;VB.NET
44360|Brazil|Moderately satisfied|Computer science, computer engineering, or software engineering|7860.0|I don't typically exercise|Male|Hispanic or Latino/Latina|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C;C++;JavaScript;Matlab;Objective-C;Python;Ruby;Swift;HTML;CSS;Bash/Shell
73319|Switzerland|Extremely dissatisfied|Computer science, computer engineering, or software engineering|121995.0|I don't typically exercise|Female|Black or of African descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Java;Python;Scala;SQL;Bash/Shell
4346|India|Extremely dissatisfied|Computer science, computer engineering, or software engineering|5640.0|1 - 2 times per week|Male|South Asian|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Between 1 and 2 years ago|Assembly;C;C++;JavaScript;SQL;VBA;VB.NET;Visual Basic 6;HTML;CSS;Bash/Shell
37351|United Kingdom|Moderately dissatisfied|Computer science, computer engineering, or software engineering|37504.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|30 - 59 minutes|45 - 54 years old|More than 4 years ago|Assembly;C;C++;Java;JavaScript;Objective-C;PHP;Python;SQL;Swift;HTML;CSS;Bash/Shell
44823|United States|Moderately satisfied|Mathematics or statistics|120000.0|3 - 4 times per week|Female|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|Python;R;SQL;Bash/Shell
15005|Australia|Neither satisfied nor dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|159947.0|I don't typically exercise|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|45 - 54 years old|More than 4 years ago|Assembly;C;C++;C#;Erlang;Groovy;Java;JavaScript;R;SQL;TypeScript;VBA;HTML;CSS;Bash/Shell
98834|France|Slightly satisfied|Another engineering discipline (ex. civil, electrical, mechanical)|79552.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|C#;Java;JavaScript;Scala;SQL
23981|United States|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|80000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|45 - 54 years old|Between 2 and 4 years ago|Assembly;C;C++;Java;JavaScript;Matlab;HTML
65730|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|87000.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|CoffeeScript;JavaScript;PHP;HTML;CSS
35899|Ukraine|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|4680.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|JavaScript;Ruby;SQL;HTML;CSS
74470|Spain|Moderately satisfied|Computer science, computer engineering, or software engineering|440592.0|1 - 2 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Less than a year ago|C++;Java;Python;R;SQL;HTML;CSS
59521|Germany|Moderately satisfied|Computer science, computer engineering, or software engineering|52627.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|18 - 24 years old|Between 2 and 4 years ago|JavaScript;HTML;CSS;Bash/Shell
51190|United Kingdom|Extremely satisfied|Computer science, computer engineering, or software engineering|50004.0|Daily or almost every day|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|Less than 30 minutes|25 - 34 years old|Less than a year ago|C++;Matlab;Python
75724|India|Slightly dissatisfied|Another engineering discipline (ex. civil, electrical, mechanical)|50094.0|1 - 2 times per week|Male|South Asian|Bachelor’s degree (BA, BS, B.Eng., etc.)|Less than 30 minutes|35 - 44 years old|Less than a year ago|C++;Go;Java;Rust;Kotlin
58353|United States|Moderately satisfied|A humanities discipline (ex. literature, history, philosophy)|130000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|35 - 44 years old|Between 2 and 4 years ago|JavaScript;Ruby;HTML;CSS
50731|Ukraine|Extremely dissatisfied|Computer science, computer engineering, or software engineering|25200.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|25 - 34 years old|Between 2 and 4 years ago|Objective-C;Python;Swift;Bash/Shell
90041|United States|Moderately dissatisfied|Computer science, computer engineering, or software engineering|120000.0|1 - 2 times per week|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|1 - 2 hours|25 - 34 years old|Between 2 and 4 years ago|Go;JavaScript;PHP;Python;SQL;HTML;CSS;Bash/Shell
99603|Lithuania|Moderately satisfied|A business discipline (ex. accounting, finance, marketing)|36720.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|Go;JavaScript;Python;Bash/Shell
33013|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|110000.0|3 - 4 times per week|Male|White or of European descent|Associate degree|30 - 59 minutes|25 - 34 years old|Less than a year ago|JavaScript;TypeScript;HTML;CSS
42628|Hungary|Extremely satisfied|Computer science, computer engineering, or software engineering|43668.0|I don't typically exercise|Male|White or of European descent|Associate degree|1 - 2 hours|35 - 44 years old|Between 1 and 2 years ago|C;JavaScript;Python;HTML;CSS
20170|Kenya|Moderately satisfied|Computer science, computer engineering, or software engineering|8160.0|I don't typically exercise|Male|Black or of African descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|3 - 4 hours|25 - 34 years old|Between 1 and 2 years ago|Java;JavaScript;PHP;SQL;TypeScript;HTML;CSS;Bash/Shell
77546|Sweden|Extremely satisfied|A natural science (ex. biology, chemistry, physics)|51152.0|1 - 2 times per week|Male|White or of European descent|Other doctoral degree (Ph.D, Ed.D., etc.)|1 - 2 hours|35 - 44 years old|More than 4 years ago|Assembly;C;C++;Groovy;Perl;Python;SQL;Bash/Shell
80459|United Kingdom|Slightly satisfied|Computer science, computer engineering, or software engineering|69452.0|3 - 4 times per week|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|Less than 30 minutes|35 - 44 years old|More than 4 years ago|C#;JavaScript;Python;SQL;VBA;VB.NET;HTML;CSS;Bash/Shell
80088|Poland|Slightly satisfied|Computer science, computer engineering, or software engineering|27000.0|I don't typically exercise|Male|White or of European descent|Master’s degree (MA, MS, M.Eng., MBA, etc.)|30 - 59 minutes|25 - 34 years old|Between 2 and 4 years ago|Groovy;Java;JavaScript;SQL;TypeScript;HTML;CSS;Bash/Shell
20353|Spain|Slightly satisfied|Computer science, computer engineering, or software engineering|15298.0|I don't typically exercise|Male|White or of European descent|Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)|30 - 59 minutes|18 - 24 years old|Less than a year ago|C#;Java;JavaScript;SQL;HTML;CSS
56375|United States|Moderately satisfied|Fine arts or performing arts (ex. graphic design, music, studio art)|62000.0|Daily or almost every day|Male|White or of European descent|Bachelor’s degree (BA, BS, B.Eng., etc.)|1 - 2 hours|25 - 34 years old|Less than a year ago|C#;JavaScript;Python;SQL;TypeScript;HTML;CSS
42375|India|Neither satisfied nor dissatisfied|Computer science, computer engineering, or software engineering|7140.0|I don't typically exercise|Male|South Asian|Some college/university study without earning a degree|30 - 59 minutes|25 - 34 years old|Between 1 and 2 years ago|C;Java;Matlab;Objective-C;PHP;SQL;Swift;VB.NET;Visual Basic 6;HTML;CSS
================================================
FILE: examples/sample-book/gen/dynamic_subs/dynamic_substitutions.xml
================================================
749-2 x-6-3-66-2-1 x^{5}-10-\left(5 x^{4}\right)-\left(20 x^{3}\right)-10544 \left(-x-3\right)^{3}+54 x^{3}+5-x-3
================================================
FILE: examples/sample-book/gen/qrcode/OpenDSA-integration-bs-url.xml
================================================
https://pretextbook.org/examples/noparts/decorative/html/OpenDSA-integration-bs.htmlhttps://pretextbook.org/examples/noparts/decorative/html/splice-integration.html#OpenDSA-integration-bs
================================================
FILE: examples/sample-book/gen/qrcode/OpenDSA-integration-dijkstra-url.xml
================================================
https://pretextbook.org/examples/noparts/decorative/html/OpenDSA-integration-dijkstra.htmlhttps://pretextbook.org/examples/noparts/decorative/html/splice-integration.html#OpenDSA-integration-dijkstra
================================================
FILE: examples/sample-book/gen/qrcode/OpenDSA-list-insertion-exercise-url.xml
================================================
https://pretextbook.org/examples/noparts/decorative/html/OpenDSA-list-insertion-exercise.htmlhttps://pretextbook.org/examples/noparts/decorative/html/splice-integration.html#OpenDSA-list-insertion-exercise
================================================
FILE: examples/sample-book/gen/qrcode/OpenDSA-list-insertion-url.xml
================================================
https://pretextbook.org/examples/noparts/decorative/html/OpenDSA-list-insertion.htmlhttps://pretextbook.org/examples/noparts/decorative/html/splice-integration.html#OpenDSA-list-insertion
================================================
FILE: examples/sample-book/gen/qrcode/doenet-velocity-url.xml
================================================
https://pretextbook.org/examples/noparts/decorative/html/doenet-velocity.htmlhttps://pretextbook.org/examples/noparts/decorative/html/splice-integration.html#doenet-velocityhttps://pretextbook.org/examples/noparts/decorative/html/doenet-velocity-if.html
================================================
FILE: examples/sample-book/gen/qrcode/interactive-doenetml-example-url.xml
================================================
https://pretextbook.org/examples/noparts/decorative/html/interactive-doenetml-example.htmlhttps://pretextbook.org/examples/noparts/decorative/html/doenet.html#interactive-doenetml-examplehttps://pretextbook.org/examples/noparts/decorative/html/interactive-doenetml-example-if.html
================================================
FILE: examples/sample-book/gen/qrcode/interactive-horstmann-codecheck-url.xml
================================================
https://pretextbook.org/examples/noparts/decorative/html/interactive-horstmann-codecheck.htmlhttps://pretextbook.org/examples/noparts/decorative/html/splice-integration.html#interactive-horstmann-codecheck
================================================
FILE: examples/sample-book/gen/qrcode/opendsa-slideshow-pop-url.xml
================================================
https://pretextbook.org/examples/noparts/decorative/html/opendsa-slideshow-pop.htmlhttps://pretextbook.org/examples/noparts/decorative/html/splice-integration.html#opendsa-slideshow-pop
================================================
FILE: examples/sample-book/gen/qrcode/show-eval-visualization-url.xml
================================================
https://pretextbook.org/examples/noparts/decorative/html/show-eval-visualization.htmlhttps://pretextbook.org/examples/noparts/decorative/html/splice-integration.html#show-eval-visualizationhttps://pretextbook.org/examples/noparts/decorative/html/show-eval-visualization-if.html
================================================
FILE: examples/sample-book/gen/qrcode/splice-resize-example-url.xml
================================================
https://pretextbook.org/examples/noparts/decorative/html/splice-resize-example.htmlhttps://pretextbook.org/examples/noparts/decorative/html/splice-integration.html#splice-resize-examplehttps://pretextbook.org/examples/noparts/decorative/html/splice-resize-example-if.html
================================================
FILE: examples/sample-book/gen/qrcode/youtube-list-vars-eight-url.xml
================================================
https://www.youtube.com/watch?v=X1-UNHUajfkhttps://pretextbook.org/examples/noparts/decorative/html/atomic-video.html#youtube-list-vars-eight
================================================
FILE: examples/sample-book/gen/qrcode/youtube-list-vars-eleven-url.xml
================================================
https://www.youtube.com/watch?v=X1-UNHUajfkhttps://pretextbook.org/examples/noparts/decorative/html/atomic-video.html#youtube-list-vars-eleven
================================================
FILE: examples/sample-book/gen/qrcode/youtube-list-vars-five-url.xml
================================================
https://www.youtube.com/watch?v=X1-UNHUajfkhttps://pretextbook.org/examples/noparts/decorative/html/atomic-video.html#youtube-list-vars-five
================================================
FILE: examples/sample-book/gen/qrcode/youtube-list-vars-four-url.xml
================================================
https://www.youtube.com/watch?v=X1-UNHUajfkhttps://pretextbook.org/examples/noparts/decorative/html/atomic-video.html#youtube-list-vars-four
================================================
FILE: examples/sample-book/gen/qrcode/youtube-list-vars-nine-url.xml
================================================
https://www.youtube.com/watch?v=X1-UNHUajfkhttps://pretextbook.org/examples/noparts/decorative/html/atomic-video.html#youtube-list-vars-nine
================================================
FILE: examples/sample-book/gen/qrcode/youtube-list-vars-one-url.xml
================================================
https://www.youtube.com/watch?v=X1-UNHUajfkhttps://pretextbook.org/examples/noparts/decorative/html/atomic-video.html#youtube-list-vars-one
================================================
FILE: examples/sample-book/gen/qrcode/youtube-list-vars-seven-url.xml
================================================
https://www.youtube.com/watch?v=X1-UNHUajfkhttps://pretextbook.org/examples/noparts/decorative/html/atomic-video.html#youtube-list-vars-seven
================================================
FILE: examples/sample-book/gen/qrcode/youtube-list-vars-six-url.xml
================================================
https://www.youtube.com/watch?v=X1-UNHUajfkhttps://pretextbook.org/examples/noparts/decorative/html/atomic-video.html#youtube-list-vars-six
================================================
FILE: examples/sample-book/gen/qrcode/youtube-list-vars-ten-url.xml
================================================
https://www.youtube.com/watch?v=X1-UNHUajfkhttps://pretextbook.org/examples/noparts/decorative/html/atomic-video.html#youtube-list-vars-ten
================================================
FILE: examples/sample-book/gen/qrcode/youtube-list-vars-three-url.xml
================================================
https://www.youtube.com/watch?v=X1-UNHUajfkhttps://pretextbook.org/examples/noparts/decorative/html/atomic-video.html#youtube-list-vars-three
================================================
FILE: examples/sample-book/gen/qrcode/youtube-list-vars-two-url.xml
================================================
https://www.youtube.com/watch?v=X1-UNHUajfkhttps://pretextbook.org/examples/noparts/decorative/html/atomic-video.html#youtube-list-vars-two
================================================
FILE: examples/sample-book/gen/qrcode/youtube-list-vars-url.xml
================================================
https://www.youtube.com/watch?v=X1-UNHUajfkhttps://pretextbook.org/examples/noparts/decorative/html/videos-in-runestone.html#youtube-list-vars
================================================
FILE: examples/sample-book/gen/trace/c-hello-world-code-lens.js
================================================
if (allTraceData === undefined) {
var allTraceData = {};
}
(function() { // IIFE to avoid variable collision
let codelensID = "rs-c-hello-world-code-lens"; //fallback
let partnerCodelens = document.currentScript.parentElement.querySelector(".pytutorVisualizer");
if (partnerCodelens) {
codelensID = partnerCodelens.id;
}
allTraceData[codelensID] = {"code": "#include \n\nint main(void)\n{\n puts(\"Hello, World!\");\n}\n", "trace": [{"event": "step_line", "func_name": "main", "globals": {}, "heap": {}, "line": 5, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 4, "ordered_varnames": [], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "return", "func_name": "main", "globals": {}, "heap": {}, "line": 6, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": [], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": "Hello, World!\n"}], "startingInstruction": 0};
})();
================================================
FILE: examples/sample-book/gen/trace/exploration-with-always-static-program.js
================================================
if (allTraceData === undefined) {
var allTraceData = {};
}
(function() { // IIFE to avoid variable collision
let codelensID = "rs-exploration-with-always-static-program"; //fallback
let partnerCodelens = document.currentScript.parentElement.querySelector(".pytutorVisualizer");
if (partnerCodelens) {
codelensID = partnerCodelens.id;
}
allTraceData[codelensID] = {"code": "for i in range(10):\n print(i)\n", "trace": [{"line": 1, "event": "step_line", "func_name": "", "globals": {}, "ordered_globals": [], "stack_to_render": [], "heap": {}, "stdout": ""}, {"line": 2, "event": "step_line", "func_name": "", "globals": {"i": 0}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": ""}, {"line": 1, "event": "step_line", "func_name": "", "globals": {"i": 0}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n"}, {"line": 2, "event": "step_line", "func_name": "", "globals": {"i": 1}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n"}, {"line": 1, "event": "step_line", "func_name": "", "globals": {"i": 1}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n"}, {"line": 2, "event": "step_line", "func_name": "", "globals": {"i": 2}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n"}, {"line": 1, "event": "step_line", "func_name": "", "globals": {"i": 2}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n"}, {"line": 2, "event": "step_line", "func_name": "", "globals": {"i": 3}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n"}, {"line": 1, "event": "step_line", "func_name": "", "globals": {"i": 3}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n"}, {"line": 2, "event": "step_line", "func_name": "", "globals": {"i": 4}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n"}, {"line": 1, "event": "step_line", "func_name": "", "globals": {"i": 4}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n4\n"}, {"line": 2, "event": "step_line", "func_name": "", "globals": {"i": 5}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n4\n"}, {"line": 1, "event": "step_line", "func_name": "", "globals": {"i": 5}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n4\n5\n"}, {"line": 2, "event": "step_line", "func_name": "", "globals": {"i": 6}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n4\n5\n"}, {"line": 1, "event": "step_line", "func_name": "", "globals": {"i": 6}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n4\n5\n6\n"}, {"line": 2, "event": "step_line", "func_name": "", "globals": {"i": 7}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n4\n5\n6\n"}, {"line": 1, "event": "step_line", "func_name": "", "globals": {"i": 7}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n"}, {"line": 2, "event": "step_line", "func_name": "", "globals": {"i": 8}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n"}, {"line": 1, "event": "step_line", "func_name": "", "globals": {"i": 8}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n"}, {"line": 2, "event": "step_line", "func_name": "", "globals": {"i": 9}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n"}, {"line": 1, "event": "step_line", "func_name": "", "globals": {"i": 9}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n"}, {"line": 1, "event": "return", "func_name": "", "globals": {"i": 9}, "ordered_globals": ["i"], "stack_to_render": [], "heap": {}, "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n"}], "startingInstruction": 0};
})();
================================================
FILE: examples/sample-book/gen/trace/java-hello-world-code-lens.js
================================================
if (allTraceData === undefined) {
var allTraceData = {};
}
(function() { // IIFE to avoid variable collision
let codelensID = "rs-java-hello-world-code-lens"; //fallback
let partnerCodelens = document.currentScript.parentElement.querySelector(".pytutorVisualizer");
if (partnerCodelens) {
codelensID = partnerCodelens.id;
}
allTraceData[codelensID] = {"code": "public class HelloWorld {\n public static void main(String[] args) {\n System.out.println(\"Hello, World!\");\n }\n}\n", "stdin": "", "trace": [{"stdout": "", "event": "call", "line": 3, "stack_to_render": [{"func_name": "main:3", "encoded_locals": {}, "ordered_varnames": [], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "1", "frame_id": 1}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {}}, {"stdout": "", "event": "step_line", "line": 3, "stack_to_render": [{"func_name": "main:3", "encoded_locals": {}, "ordered_varnames": [], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "2", "frame_id": 2}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {}}, {"stdout": "Hello, World!\n", "event": "step_line", "line": 4, "stack_to_render": [{"func_name": "main:4", "encoded_locals": {}, "ordered_varnames": [], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "5", "frame_id": 5}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {}}, {"stdout": "Hello, World!\n", "event": "return", "line": 4, "stack_to_render": [{"func_name": "main:4", "encoded_locals": {"__return__": ["VOID"]}, "ordered_varnames": ["__return__"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "6", "frame_id": 6}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {}}], "userlog": "Debugger VM maxMemory: 444M\n", "startingInstruction": 0};
})();
================================================
FILE: examples/sample-book/gen/trace/program-codelens-cpp-questions.js
================================================
if (allTraceData === undefined) {
var allTraceData = {};
}
(function() { // IIFE to avoid variable collision
let codelensID = "rs-program-codelens-cpp-questions"; //fallback
let partnerCodelens = document.currentScript.parentElement.querySelector(".pytutorVisualizer");
if (partnerCodelens) {
codelensID = partnerCodelens.id;
}
allTraceData[codelensID] = {"code": "int foo() {\n int x = 2;\n int y = ++x;\n return y;\n}\nint main() {\n int x = foo();\n while (x < 20) {\n x *= 2;\n }\n}\n", "trace": [{"event": "step_line", "func_name": "main", "globals": {}, "heap": {}, "line": 6, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": [], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {}, "heap": {}, "line": 7, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {"x": ["C_DATA", "0xFFF000BDC", "int", ""]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 7, "ordered_varnames": ["x"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "call", "func_name": "foo()", "globals": {}, "heap": {}, "line": 2, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {"x": ["C_DATA", "0xFFF000BDC", "int", ""]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": false, "is_parent": false, "is_zombie": false, "line": 7, "ordered_varnames": ["x"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}, {"encoded_locals": {"x": ["C_DATA", "0xFFF000BB8", "int", ""], "y": ["C_DATA", "0xFFF000BBC", "int", ""]}, "frame_id": "0xFFF000BC0", "func_name": "foo()", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 2, "ordered_varnames": ["x", "y"], "parent_frame_id_list": [], "unique_hash": "foo()_0xFFF000BC0"}], "stdout": ""}, {"event": "step_line", "func_name": "foo()", "globals": {}, "heap": {}, "line": 3, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {"x": ["C_DATA", "0xFFF000BDC", "int", ""]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": false, "is_parent": false, "is_zombie": false, "line": 7, "ordered_varnames": ["x"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}, {"encoded_locals": {"x": ["C_DATA", "0xFFF000BB8", "int", 2], "y": ["C_DATA", "0xFFF000BBC", "int", ""]}, "frame_id": "0xFFF000BC0", "func_name": "foo()", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 3, "ordered_varnames": ["x", "y"], "parent_frame_id_list": [], "unique_hash": "foo()_0xFFF000BC0"}], "stdout": "", "question": {"text": "What value will be assigned to y?", "correctText": "3", "feedback": "++ has precedence over ="}}, {"event": "step_line", "func_name": "foo()", "globals": {}, "heap": {}, "line": 4, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {"x": ["C_DATA", "0xFFF000BDC", "int", ""]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": false, "is_parent": false, "is_zombie": false, "line": 7, "ordered_varnames": ["x"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}, {"encoded_locals": {"x": ["C_DATA", "0xFFF000BB8", "int", 3], "y": ["C_DATA", "0xFFF000BBC", "int", 3]}, "frame_id": "0xFFF000BC0", "func_name": "foo()", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 4, "ordered_varnames": ["x", "y"], "parent_frame_id_list": [], "unique_hash": "foo()_0xFFF000BC0"}], "stdout": ""}, {"event": "return", "func_name": "foo()", "globals": {}, "heap": {}, "line": 5, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {"x": ["C_DATA", "0xFFF000BDC", "int", ""]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": false, "is_parent": false, "is_zombie": false, "line": 7, "ordered_varnames": ["x"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}, {"encoded_locals": {}, "frame_id": "0xFFF000BC0", "func_name": "foo()", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": [], "parent_frame_id_list": [], "unique_hash": "foo()_0xFFF000BC0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {}, "heap": {}, "line": 8, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {"x": ["C_DATA", "0xFFF000BDC", "int", 3]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 7, "ordered_varnames": ["x"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {}, "heap": {}, "line": 9, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {"x": ["C_DATA", "0xFFF000BDC", "int", 3]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 9, "ordered_varnames": ["x"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": "", "question": {"text": "What value will be assigned to x?", "correct": "current_frame.x", "feedback": "We are doubling it"}}, {"event": "step_line", "func_name": "main", "globals": {}, "heap": {}, "line": 8, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {"x": ["C_DATA", "0xFFF000BDC", "int", 6]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 8, "ordered_varnames": ["x"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {}, "heap": {}, "line": 9, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {"x": ["C_DATA", "0xFFF000BDC", "int", 6]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 8, "ordered_varnames": ["x"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": "", "question": {"text": "What value will be assigned to x?", "correct": "current_frame.x", "feedback": "We are doubling it"}}, {"event": "step_line", "func_name": "main", "globals": {}, "heap": {}, "line": 8, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {"x": ["C_DATA", "0xFFF000BDC", "int", 12]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 8, "ordered_varnames": ["x"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {}, "heap": {}, "line": 9, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {"x": ["C_DATA", "0xFFF000BDC", "int", 12]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 8, "ordered_varnames": ["x"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": "", "question": {"text": "What value will be assigned to x?", "correct": "current_frame.x", "feedback": "We are doubling it"}}, {"event": "step_line", "func_name": "main", "globals": {}, "heap": {}, "line": 8, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {"x": ["C_DATA", "0xFFF000BDC", "int", 24]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 8, "ordered_varnames": ["x"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {}, "heap": {}, "line": 11, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": [], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "return", "func_name": "main", "globals": {}, "heap": {}, "line": 11, "ordered_globals": [], "stack_to_render": [{"encoded_locals": {}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": [], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}], "startingInstruction": 0};
})();
================================================
FILE: examples/sample-book/gen/trace/python-code-lens-questions.js
================================================
if (allTraceData === undefined) {
var allTraceData = {};
}
(function() { // IIFE to avoid variable collision
let codelensID = "rs-python-code-lens-questions"; //fallback
let partnerCodelens = document.currentScript.parentElement.querySelector(".pytutorVisualizer");
if (partnerCodelens) {
codelensID = partnerCodelens.id;
}
allTraceData[codelensID] = {"code": "def foo(n):\n n = n + 1\n return n\nx = 7\ny = x // 3\nz = foo(y)\n", "trace": [{"line": 1, "event": "step_line", "func_name": "", "globals": {}, "ordered_globals": [], "stack_to_render": [], "heap": {}, "stdout": ""}, {"line": 4, "event": "step_line", "func_name": "", "globals": {"foo": ["REF", 1]}, "ordered_globals": ["foo"], "stack_to_render": [], "heap": {"1": ["FUNCTION", "foo(n)", null]}, "stdout": "", "question": {"text": "What variable is being assigned to?", "correctText": "x"}}, {"line": 5, "event": "step_line", "func_name": "", "globals": {"foo": ["REF", 1], "x": 7}, "ordered_globals": ["foo", "x"], "stack_to_render": [], "heap": {"1": ["FUNCTION", "foo(n)", null]}, "stdout": "", "question": {"text": "What value will be assigned to y?", "correct": "globals.y", "feedback": "// does integer division"}}, {"line": 6, "event": "step_line", "func_name": "", "globals": {"foo": ["REF", 1], "x": 7, "y": 2}, "ordered_globals": ["foo", "x", "y"], "stack_to_render": [], "heap": {"1": ["FUNCTION", "foo(n)", null]}, "stdout": ""}, {"line": 1, "event": "call", "func_name": "foo", "globals": {"foo": ["REF", 1], "x": 7, "y": 2}, "ordered_globals": ["foo", "x", "y"], "stack_to_render": [{"func_name": "foo", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 2}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": true, "unique_hash": "foo_f1"}], "heap": {"1": ["FUNCTION", "foo(n)", null]}, "stdout": ""}, {"line": 2, "event": "step_line", "func_name": "foo", "globals": {"foo": ["REF", 1], "x": 7, "y": 2}, "ordered_globals": ["foo", "x", "y"], "stack_to_render": [{"func_name": "foo", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 2}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": true, "unique_hash": "foo_f1"}], "heap": {"1": ["FUNCTION", "foo(n)", null]}, "stdout": ""}, {"line": 3, "event": "step_line", "func_name": "foo", "globals": {"foo": ["REF", 1], "x": 7, "y": 2}, "ordered_globals": ["foo", "x", "y"], "stack_to_render": [{"func_name": "foo", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 3}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": true, "unique_hash": "foo_f1"}], "heap": {"1": ["FUNCTION", "foo(n)", null]}, "stdout": "", "question": {"text": "What value will be returned?", "correct": "current_frame.n", "feedback": "What is n right now?"}}, {"line": 3, "event": "return", "func_name": "foo", "globals": {"foo": ["REF", 1], "x": 7, "y": 2}, "ordered_globals": ["foo", "x", "y"], "stack_to_render": [{"func_name": "foo", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 3, "__return__": 3}, "ordered_varnames": ["n", "__return__"], "is_zombie": false, "is_highlighted": true, "unique_hash": "foo_f1"}], "heap": {"1": ["FUNCTION", "foo(n)", null]}, "stdout": ""}, {"line": 6, "event": "return", "func_name": "", "globals": {"foo": ["REF", 1], "x": 7, "y": 2, "z": 3}, "ordered_globals": ["foo", "x", "y", "z"], "stack_to_render": [], "heap": {"1": ["FUNCTION", "foo(n)", null]}, "stdout": ""}], "startingInstruction": 0};
})();
================================================
FILE: examples/sample-book/gen/trace/python-hello-world-code-lens.js
================================================
if (allTraceData === undefined) {
var allTraceData = {};
}
(function() { // IIFE to avoid variable collision
let codelensID = "rs-python-hello-world-code-lens"; //fallback
let partnerCodelens = document.currentScript.parentElement.querySelector(".pytutorVisualizer");
if (partnerCodelens) {
codelensID = partnerCodelens.id;
}
allTraceData[codelensID] = {"code": "print('Hello, World!')\n", "trace": [{"line": 1, "event": "step_line", "func_name": "", "globals": {}, "ordered_globals": [], "stack_to_render": [], "heap": {}, "stdout": ""}, {"line": 1, "event": "return", "func_name": "", "globals": {}, "ordered_globals": [], "stack_to_render": [], "heap": {}, "stdout": "Hello, World!\n"}], "startingInstruction": 0};
})();
================================================
FILE: examples/sample-book/gen/trace/sieve-codelens-cpp.js
================================================
if (allTraceData === undefined) {
var allTraceData = {};
}
(function() { // IIFE to avoid variable collision
let codelensID = "rs-sieve-codelens-cpp"; //fallback
let partnerCodelens = document.currentScript.parentElement.querySelector(".pytutorVisualizer");
if (partnerCodelens) {
codelensID = partnerCodelens.id;
}
allTraceData[codelensID] = {"code": "#include \nconst int len = 20;\nint main() {\n int arr[20] = {0};\n for (int i = 2; i < len; i++) {\n for (int j = i * i; j < len; j+=i) {\n arr[j - 1] = 1;\n }\n }\n for (int i = 1; i < len; i++) {\n if (arr[i - 1] == 0)\n printf(\" %d\", i);\n }\n}\n", "trace": [{"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 3, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 3, "ordered_varnames": [], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 4, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", ""], ["C_DATA", "0xFFF000B94", "int", ""], ["C_DATA", "0xFFF000B98", "int", ""], ["C_DATA", "0xFFF000B9C", "int", ""], ["C_DATA", "0xFFF000BA0", "int", ""], ["C_DATA", "0xFFF000BA4", "int", ""], ["C_DATA", "0xFFF000BA8", "int", ""], ["C_DATA", "0xFFF000BAC", "int", ""], ["C_DATA", "0xFFF000BB0", "int", ""], ["C_DATA", "0xFFF000BB4", "int", ""], ["C_DATA", "0xFFF000BB8", "int", ""], ["C_DATA", "0xFFF000BBC", "int", ""], ["C_DATA", "0xFFF000BC0", "int", ""], ["C_DATA", "0xFFF000BC4", "int", ""], ["C_DATA", "0xFFF000BC8", "int", ""], ["C_DATA", "0xFFF000BCC", "int", ""], ["C_DATA", "0xFFF000BD0", "int", ""], ["C_DATA", "0xFFF000BD4", "int", ""], ["C_DATA", "0xFFF000BD8", "int", ""], ["C_DATA", "0xFFF000BDC", "int", ""]]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 4, "ordered_varnames": ["arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 0], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 0], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 0], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 0], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 0], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 0], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", ""]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 0], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 0], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 0], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 0], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 0], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 0], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", ""]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 7, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 0], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 0], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 0], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 0], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 0], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 0], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 4]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 7, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 0], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 0], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 0], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 0], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 0], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 4]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 7, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 0], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 0], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 0], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 0], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 0], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 6]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 0], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 0], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 0], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 0], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 6]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 7, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 0], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 0], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 0], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 0], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 8]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 7, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 0], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 0], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 0], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 8]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 7, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 0], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 0], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 0], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 10]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 0], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 0], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 10]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 7, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 0], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 0], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 12]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 7, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 0], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 12]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 7, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 0], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 14]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 14]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 7, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 0], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 16]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 7, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 16]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 7, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 0], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 18]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2], "j": ["C_DATA", "0xFFF000B88", "int", 18]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 2]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 3], "j": ["C_DATA", "0xFFF000B88", "int", 20]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 7, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 0], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 3], "j": ["C_DATA", "0xFFF000B88", "int", 9]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 7, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 3], "j": ["C_DATA", "0xFFF000B88", "int", 9]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 7, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 3], "j": ["C_DATA", "0xFFF000B88", "int", 12]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 3], "j": ["C_DATA", "0xFFF000B88", "int", 12]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 7, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 0], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 3], "j": ["C_DATA", "0xFFF000B88", "int", 15]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 7, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 3], "j": ["C_DATA", "0xFFF000B88", "int", 15]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 7, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 3], "j": ["C_DATA", "0xFFF000B88", "int", 18]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 3], "j": ["C_DATA", "0xFFF000B88", "int", 18]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 3]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 4], "j": ["C_DATA", "0xFFF000B88", "int", 21]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 7, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 4], "j": ["C_DATA", "0xFFF000B88", "int", 16]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 7, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 4], "j": ["C_DATA", "0xFFF000B88", "int", 16]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 4]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 5], "j": ["C_DATA", "0xFFF000B88", "int", 20]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 5]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 6], "j": ["C_DATA", "0xFFF000B88", "int", 25]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 6]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 7], "j": ["C_DATA", "0xFFF000B88", "int", 36]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 7]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 8], "j": ["C_DATA", "0xFFF000B88", "int", 49]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 8]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 9], "j": ["C_DATA", "0xFFF000B88", "int", 64]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 9]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 10], "j": ["C_DATA", "0xFFF000B88", "int", 81]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 10]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 11], "j": ["C_DATA", "0xFFF000B88", "int", 100]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 11]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 12], "j": ["C_DATA", "0xFFF000B88", "int", 121]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 12]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 13], "j": ["C_DATA", "0xFFF000B88", "int", 144]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 13]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 14], "j": ["C_DATA", "0xFFF000B88", "int", 169]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 14]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 15], "j": ["C_DATA", "0xFFF000B88", "int", 196]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 15]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 16], "j": ["C_DATA", "0xFFF000B88", "int", 225]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 16]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 17], "j": ["C_DATA", "0xFFF000B88", "int", 256]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 17]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 18], "j": ["C_DATA", "0xFFF000B88", "int", 289]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 18]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 6, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 19], "j": ["C_DATA", "0xFFF000B88", "int", 324]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 6, "ordered_varnames": ["j", "i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 5, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B84", "int", 19]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 5, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", ""]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 1]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 12, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 1]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 12, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": ""}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 1]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 2]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 12, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 2]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 12, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 2]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 3]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 12, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 3]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 12, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 3]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 4]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 4]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 5]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 12, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 5]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 12, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 5]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 6]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 6]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 7]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 12, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 7]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 12, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 7]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 8]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 8]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 9]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 9]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 10]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 10]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 11]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 12, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 11]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 12, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 11]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 12]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 12]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 13]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 12, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 13]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 12, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 13]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 14]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 14]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 15]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 15]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 16]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 16]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 17]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 12, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 17]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 12, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 17]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13 17"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 18]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13 17"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 18]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13 17"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 11, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 19]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 11, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13 17"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 12, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 19]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 12, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13 17"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 10, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {"arr": ["C_ARRAY", "0xFFF000B90", ["C_DATA", "0xFFF000B90", "int", 0], ["C_DATA", "0xFFF000B94", "int", 0], ["C_DATA", "0xFFF000B98", "int", 0], ["C_DATA", "0xFFF000B9C", "int", 1], ["C_DATA", "0xFFF000BA0", "int", 0], ["C_DATA", "0xFFF000BA4", "int", 1], ["C_DATA", "0xFFF000BA8", "int", 0], ["C_DATA", "0xFFF000BAC", "int", 1], ["C_DATA", "0xFFF000BB0", "int", 1], ["C_DATA", "0xFFF000BB4", "int", 1], ["C_DATA", "0xFFF000BB8", "int", 0], ["C_DATA", "0xFFF000BBC", "int", 1], ["C_DATA", "0xFFF000BC0", "int", 0], ["C_DATA", "0xFFF000BC4", "int", 1], ["C_DATA", "0xFFF000BC8", "int", 1], ["C_DATA", "0xFFF000BCC", "int", 1], ["C_DATA", "0xFFF000BD0", "int", 0], ["C_DATA", "0xFFF000BD4", "int", 1], ["C_DATA", "0xFFF000BD8", "int", 0], ["C_DATA", "0xFFF000BDC", "int", 0]], "i": ["C_DATA", "0xFFF000B8C", "int", 19]}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 10, "ordered_varnames": ["i", "arr"], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13 17 19"}, {"event": "step_line", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 14, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 14, "ordered_varnames": [], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13 17 19"}, {"event": "return", "func_name": "main", "globals": {"len": ["C_DATA", "0x400658", "int", 20]}, "heap": {}, "line": 14, "ordered_globals": ["len"], "stack_to_render": [{"encoded_locals": {}, "frame_id": "0xFFF000BE0", "func_name": "main", "is_highlighted": true, "is_parent": false, "is_zombie": false, "line": 14, "ordered_varnames": [], "parent_frame_id_list": [], "unique_hash": "main_0xFFF000BE0"}], "stdout": " 1 2 3 5 7 11 13 17 19"}], "startingInstruction": 0};
})();
================================================
FILE: examples/sample-book/gen/trace/sieve-codelens-java.js
================================================
if (allTraceData === undefined) {
var allTraceData = {};
}
(function() { // IIFE to avoid variable collision
let codelensID = "rs-sieve-codelens-java"; //fallback
let partnerCodelens = document.currentScript.parentElement.querySelector(".pytutorVisualizer");
if (partnerCodelens) {
codelensID = partnerCodelens.id;
}
allTraceData[codelensID] = {"code": "public class SievePrimeFactors {\n public static void main(String args[]) {\n int num = 20;\n boolean[] bool = new boolean[num];\n\n for (int i = 0; i< bool.length; i++) {\n bool[i] = true;\n }\n for (int i = 2; i < Math.sqrt(num); i++) {\n if(bool[i] == true) {\n for(int j = (i*i); j < num; j = j+i) {\n bool[j] = false;\n }\n }\n }\n System.out.println(\"List of prime numbers: \");\n for (int i = 2; i< bool.length; i++) {\n if(bool[i]==true) {\n System.out.println(i);\n }\n }\n }\n}\n", "stdin": "", "trace": [{"stdout": "", "event": "call", "line": 3, "stack_to_render": [{"func_name": "main:3", "encoded_locals": {}, "ordered_varnames": [], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "1", "frame_id": 1}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {}}, {"stdout": "", "event": "step_line", "line": 3, "stack_to_render": [{"func_name": "main:3", "encoded_locals": {}, "ordered_varnames": [], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "2", "frame_id": 2}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {}}, {"stdout": "", "event": "step_line", "line": 4, "stack_to_render": [{"func_name": "main:4", "encoded_locals": {"num": 20}, "ordered_varnames": ["num"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "4", "frame_id": 4}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "8", "frame_id": 8}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 0, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "11", "frame_id": 11}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 0, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "15", "frame_id": 15}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 0, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "20", "frame_id": 20}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 1, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "22", "frame_id": 22}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 1, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "27", "frame_id": 27}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 1, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "32", "frame_id": 32}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "34", "frame_id": 34}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "39", "frame_id": 39}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "44", "frame_id": 44}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "46", "frame_id": 46}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "51", "frame_id": 51}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "56", "frame_id": 56}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 4, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "58", "frame_id": 58}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 4, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "63", "frame_id": 63}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 4, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "68", "frame_id": 68}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 5, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "70", "frame_id": 70}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 5, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "75", "frame_id": 75}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 5, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "80", "frame_id": 80}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 6, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "82", "frame_id": 82}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 6, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "87", "frame_id": 87}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 6, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "92", "frame_id": 92}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 7, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "94", "frame_id": 94}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 7, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "99", "frame_id": 99}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 7, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "104", "frame_id": 104}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 8, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "106", "frame_id": 106}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 8, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "111", "frame_id": 111}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 8, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "116", "frame_id": 116}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 9, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "118", "frame_id": 118}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 9, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "123", "frame_id": 123}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 9, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "128", "frame_id": 128}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 10, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "130", "frame_id": 130}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 10, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "135", "frame_id": 135}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 10, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "140", "frame_id": 140}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 11, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "142", "frame_id": 142}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 11, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "147", "frame_id": 147}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 11, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "152", "frame_id": 152}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 12, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "154", "frame_id": 154}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 12, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "159", "frame_id": 159}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 12, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "164", "frame_id": 164}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 13, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "166", "frame_id": 166}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 13, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "171", "frame_id": 171}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 13, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "176", "frame_id": 176}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 14, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "178", "frame_id": 178}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 14, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "183", "frame_id": 183}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 14, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "188", "frame_id": 188}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 15, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "190", "frame_id": 190}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 15, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "195", "frame_id": 195}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 15, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "200", "frame_id": 200}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 16, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "202", "frame_id": 202}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 16, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "207", "frame_id": 207}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 16, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "212", "frame_id": 212}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 17, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "214", "frame_id": 214}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 17, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "219", "frame_id": 219}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 17, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "224", "frame_id": 224}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 18, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "226", "frame_id": 226}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 18, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "231", "frame_id": 231}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 18, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "236", "frame_id": 236}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 19, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "238", "frame_id": 238}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false]}}, {"stdout": "", "event": "step_line", "line": 7, "stack_to_render": [{"func_name": "main:7", "encoded_locals": {"i": 19, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "243", "frame_id": 243}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 19, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "248", "frame_id": 248}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 6, "stack_to_render": [{"func_name": "main:6", "encoded_locals": {"i": 20, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "250", "frame_id": 250}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 9, "stack_to_render": [{"func_name": "main:9", "encoded_locals": {"num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "255", "frame_id": 255}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 9, "stack_to_render": [{"func_name": "main:9", "encoded_locals": {"i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "258", "frame_id": 258}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 10, "stack_to_render": [{"func_name": "main:10", "encoded_locals": {"i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "265", "frame_id": 265}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "271", "frame_id": 271}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 4, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "276", "frame_id": 276}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 12, "stack_to_render": [{"func_name": "main:12", "encoded_locals": {"j": 4, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "279", "frame_id": 279}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 4, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "284", "frame_id": 284}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 6, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "289", "frame_id": 289}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 12, "stack_to_render": [{"func_name": "main:12", "encoded_locals": {"j": 6, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "293", "frame_id": 293}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 6, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "298", "frame_id": 298}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 8, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "303", "frame_id": 303}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 12, "stack_to_render": [{"func_name": "main:12", "encoded_locals": {"j": 8, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "307", "frame_id": 307}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 8, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "312", "frame_id": 312}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 10, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "317", "frame_id": 317}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 12, "stack_to_render": [{"func_name": "main:12", "encoded_locals": {"j": 10, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "321", "frame_id": 321}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, true, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 10, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "326", "frame_id": 326}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 12, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "331", "frame_id": 331}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 12, "stack_to_render": [{"func_name": "main:12", "encoded_locals": {"j": 12, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "335", "frame_id": 335}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 12, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "340", "frame_id": 340}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 14, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "345", "frame_id": 345}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 12, "stack_to_render": [{"func_name": "main:12", "encoded_locals": {"j": 14, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "349", "frame_id": 349}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 14, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "354", "frame_id": 354}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 16, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "359", "frame_id": 359}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 12, "stack_to_render": [{"func_name": "main:12", "encoded_locals": {"j": 16, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "363", "frame_id": 363}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 16, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "368", "frame_id": 368}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 18, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "373", "frame_id": 373}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 12, "stack_to_render": [{"func_name": "main:12", "encoded_locals": {"j": 18, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "377", "frame_id": 377}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 18, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "382", "frame_id": 382}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 20, "i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "387", "frame_id": 387}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 9, "stack_to_render": [{"func_name": "main:9", "encoded_locals": {"i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "391", "frame_id": 391}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 9, "stack_to_render": [{"func_name": "main:9", "encoded_locals": {"i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "393", "frame_id": 393}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 10, "stack_to_render": [{"func_name": "main:10", "encoded_locals": {"i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "401", "frame_id": 401}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "407", "frame_id": 407}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 9, "i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "412", "frame_id": 412}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 12, "stack_to_render": [{"func_name": "main:12", "encoded_locals": {"j": 9, "i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "415", "frame_id": 415}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 9, "i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "420", "frame_id": 420}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 12, "i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "425", "frame_id": 425}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 12, "stack_to_render": [{"func_name": "main:12", "encoded_locals": {"j": 12, "i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "429", "frame_id": 429}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 12, "i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "434", "frame_id": 434}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 15, "i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "439", "frame_id": 439}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 12, "stack_to_render": [{"func_name": "main:12", "encoded_locals": {"j": 15, "i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "443", "frame_id": 443}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, true, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 15, "i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "448", "frame_id": 448}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 18, "i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "453", "frame_id": 453}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 12, "stack_to_render": [{"func_name": "main:12", "encoded_locals": {"j": 18, "i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "457", "frame_id": 457}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 18, "i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "462", "frame_id": 462}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 11, "stack_to_render": [{"func_name": "main:11", "encoded_locals": {"j": 21, "i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i", "j"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "467", "frame_id": 467}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 9, "stack_to_render": [{"func_name": "main:9", "encoded_locals": {"i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "471", "frame_id": 471}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 9, "stack_to_render": [{"func_name": "main:9", "encoded_locals": {"i": 4, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "473", "frame_id": 473}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 10, "stack_to_render": [{"func_name": "main:10", "encoded_locals": {"i": 4, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "481", "frame_id": 481}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 9, "stack_to_render": [{"func_name": "main:9", "encoded_locals": {"i": 4, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "487", "frame_id": 487}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 9, "stack_to_render": [{"func_name": "main:9", "encoded_locals": {"i": 5, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "489", "frame_id": 489}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "", "event": "step_line", "line": 16, "stack_to_render": [{"func_name": "main:16", "encoded_locals": {"num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "497", "frame_id": 497}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "501", "frame_id": 501}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "503", "frame_id": 503}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "507", "frame_id": 507}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n", "event": "step_line", "line": 19, "stack_to_render": [{"func_name": "main:19", "encoded_locals": {"i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "513", "frame_id": 513}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 2, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "517", "frame_id": 517}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "518", "frame_id": 518}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "523", "frame_id": 523}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n", "event": "step_line", "line": 19, "stack_to_render": [{"func_name": "main:19", "encoded_locals": {"i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "529", "frame_id": 529}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 3, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "533", "frame_id": 533}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 4, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "534", "frame_id": 534}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 4, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "539", "frame_id": 539}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 4, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "545", "frame_id": 545}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 5, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "547", "frame_id": 547}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 5, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "552", "frame_id": 552}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n", "event": "step_line", "line": 19, "stack_to_render": [{"func_name": "main:19", "encoded_locals": {"i": 5, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "558", "frame_id": 558}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 5, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "562", "frame_id": 562}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 6, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "563", "frame_id": 563}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 6, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "568", "frame_id": 568}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 6, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "574", "frame_id": 574}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 7, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "576", "frame_id": 576}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 7, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "581", "frame_id": 581}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n", "event": "step_line", "line": 19, "stack_to_render": [{"func_name": "main:19", "encoded_locals": {"i": 7, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "587", "frame_id": 587}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 7, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "591", "frame_id": 591}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 8, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "592", "frame_id": 592}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 8, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "597", "frame_id": 597}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 8, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "603", "frame_id": 603}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 9, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "605", "frame_id": 605}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 9, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "610", "frame_id": 610}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 9, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "616", "frame_id": 616}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 10, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "618", "frame_id": 618}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 10, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "623", "frame_id": 623}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 10, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "629", "frame_id": 629}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 11, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "631", "frame_id": 631}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 11, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "636", "frame_id": 636}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n", "event": "step_line", "line": 19, "stack_to_render": [{"func_name": "main:19", "encoded_locals": {"i": 11, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "642", "frame_id": 642}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 11, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "646", "frame_id": 646}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 12, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "647", "frame_id": 647}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 12, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "652", "frame_id": 652}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 12, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "658", "frame_id": 658}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 13, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "660", "frame_id": 660}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 13, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "665", "frame_id": 665}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n", "event": "step_line", "line": 19, "stack_to_render": [{"func_name": "main:19", "encoded_locals": {"i": 13, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "671", "frame_id": 671}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 13, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "675", "frame_id": 675}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 14, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "676", "frame_id": 676}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 14, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "681", "frame_id": 681}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 14, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "687", "frame_id": 687}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 15, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "689", "frame_id": 689}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 15, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "694", "frame_id": 694}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 15, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "700", "frame_id": 700}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 16, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "702", "frame_id": 702}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 16, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "707", "frame_id": 707}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 16, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "713", "frame_id": 713}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 17, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "715", "frame_id": 715}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 17, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "720", "frame_id": 720}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n", "event": "step_line", "line": 19, "stack_to_render": [{"func_name": "main:19", "encoded_locals": {"i": 17, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "726", "frame_id": 726}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n17\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 17, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "730", "frame_id": 730}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n17\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 18, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "731", "frame_id": 731}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n17\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 18, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "736", "frame_id": 736}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n17\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 18, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "742", "frame_id": 742}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n17\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 19, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "744", "frame_id": 744}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n17\n", "event": "step_line", "line": 18, "stack_to_render": [{"func_name": "main:18", "encoded_locals": {"i": 19, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "749", "frame_id": 749}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n17\n", "event": "step_line", "line": 19, "stack_to_render": [{"func_name": "main:19", "encoded_locals": {"i": 19, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "755", "frame_id": 755}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n17\n19\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 19, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "759", "frame_id": 759}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n17\n19\n", "event": "step_line", "line": 17, "stack_to_render": [{"func_name": "main:17", "encoded_locals": {"i": 20, "num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool", "i"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "760", "frame_id": 760}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n17\n19\n", "event": "step_line", "line": 22, "stack_to_render": [{"func_name": "main:22", "encoded_locals": {"num": 20, "bool": ["REF", 428]}, "ordered_varnames": ["num", "bool"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "765", "frame_id": 765}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}, {"stdout": "List of prime numbers: \n2\n3\n5\n7\n11\n13\n17\n19\n", "event": "return", "line": 22, "stack_to_render": [{"func_name": "main:22", "encoded_locals": {"num": 20, "bool": ["REF", 428], "__return__": ["VOID"]}, "ordered_varnames": ["num", "bool", "__return__"], "parent_frame_id_list": [], "is_highlighted": true, "is_zombie": false, "is_parent": false, "unique_hash": "767", "frame_id": 767}], "globals": {}, "ordered_globals": [], "func_name": "main", "heap": {"428": ["LIST", true, true, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true]}}], "userlog": "Debugger VM maxMemory: 444M\n", "startingInstruction": 0};
})();
================================================
FILE: examples/sample-book/gen/trace/sieve-codelens-python.js
================================================
if (allTraceData === undefined) {
var allTraceData = {};
}
(function() { // IIFE to avoid variable collision
let codelensID = "rs-sieve-codelens-python"; //fallback
let partnerCodelens = document.currentScript.parentElement.querySelector(".pytutorVisualizer");
if (partnerCodelens) {
codelensID = partnerCodelens.id;
}
allTraceData[codelensID] = {"code": "def SieveOfEratosthenes(n):\n # array of type boolean with True values in it\n prime = [True for i in range(n + 1)]\n p = 2\n while (p * p <= n):\n # If it remain unchanged it is prime\n if (prime[p] == True):\n # updating all the multiples\n for i in range(p * 2, n + 1, p):\n prime[i] = False\n p += 1\n prime[0]= False\n prime[1]= False\n # Print\n for p in range(n + 1):\n if prime[p]:\n print (p,end=\" \")\n# main\nif __name__=='__main__':\n n = 20\n print (\"The prime numbers smaller than or equal to\", n,\"is\")\n SieveOfEratosthenes(n)\n", "trace": [{"line": 1, "event": "step_line", "func_name": "", "globals": {}, "ordered_globals": [], "stack_to_render": [], "heap": {}, "stdout": ""}, {"line": 19, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1]}, "ordered_globals": ["SieveOfEratosthenes"], "stack_to_render": [], "heap": {"1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": ""}, {"line": 20, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1]}, "ordered_globals": ["SieveOfEratosthenes"], "stack_to_render": [], "heap": {"1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": ""}, {"line": 21, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [], "heap": {"1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": ""}, {"line": 22, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [], "heap": {"1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 1, "event": "call", "func_name": "SieveOfEratosthenes", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": true, "unique_hash": "SieveOfEratosthenes_f1"}], "heap": {"1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "SieveOfEratosthenes", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": true, "unique_hash": "SieveOfEratosthenes_f1"}], "heap": {"1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "call", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2]}, "ordered_varnames": [".0"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2]}, "ordered_varnames": [".0"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 0}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 1}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 2}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 3}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 4}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 5}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 6}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 7}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 8}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 9}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 10}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 11}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 12}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 13}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 14}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 15}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 16}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 17}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 18}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 19}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "_f2"}], "heap": {"2": ["INSTANCE", "range_iterator"], "1": ["FUNCTION", "SieveOfEratosthenes(n)", null]}, "stdout": "The prime numbers smaller than or equal to 20 is\n"}, {"line": 3, "event": "step_line", "func_name": "", "globals": {"SieveOfEratosthenes": ["REF", 1], "n": 20}, "ordered_globals": ["SieveOfEratosthenes", "n"], "stack_to_render": [{"func_name": "SieveOfEratosthenes", "is_parent": false, "frame_id": 1, "parent_frame_id_list": [], "encoded_locals": {"n": 20}, "ordered_varnames": ["n"], "is_zombie": false, "is_highlighted": false, "unique_hash": "SieveOfEratosthenes_f1"}, {"func_name": "", "is_parent": false, "frame_id": 2, "parent_frame_id_list": [], "encoded_locals": {".0": ["REF", 2], "i": 20}, "ordered_varnames": [".0", "i"], "is_zombie": false, "is_highlighted": true, "unique_hash": "