--- title: Regular expressions slug: Web/JavaScript/Guide/Regular_Expressions tags: - Guide - Intermediate - JavaScript - Reference - RegExp - Regular Expressions - regex ---
Regular expressions are patterns used to match character combinations in strings. In JavaScript, regular expressions are also objects. These patterns are used with the {{jsxref("RegExp.exec", "exec()")}} and {{jsxref("RegExp.test", "test()")}} methods of {{jsxref("RegExp")}}, and with the {{jsxref("String.match", "match()")}}, {{jsxref("String.matchAll", "matchAll()")}}, {{jsxref("String.replace", "replace()")}}, {{jsxref("String.replaceAll", "replaceAll()")}}, {{jsxref("String.search", "search()")}}, and {{jsxref("String.split", "split()")}} methods of {{jsxref("String")}}. This chapter describes JavaScript regular expressions.
You construct a regular expression in one of two ways:
Using a regular expression literal, which consists of a pattern enclosed between slashes, as follows:
let re = /ab+c/;
Regular expression literals provide compilation of the regular expression when the script is loaded. If the regular expression remains constant, using this can improve performance.
Or calling the constructor function of the {{jsxref("RegExp")}} object, as follows:
let re = new RegExp('ab+c');
Using the constructor function provides runtime compilation of the regular expression. Use the constructor function when you know the regular expression pattern will be changing, or you don't know the pattern and are getting it from another source, such as user input.
A regular expression pattern is composed of simple characters, such as /abc/
, or a combination of simple and special characters, such as /ab*c/
or /Chapter (\d+)\.\d*/
. The last example includes parentheses, which are used as a memory device. The match made with this part of the pattern is remembered for later use, as described in Using groups.
Note: If you are already familiar with the forms of a regular expression, you may also read the cheatsheet for a quick lookup for a specific pattern/construct.
Simple patterns are constructed of characters for which you want to find a direct match. For example, the pattern /abc/
matches character combinations in strings only when the exact sequence "abc"
occurs (all characters together and in that order). Such a match would succeed in the strings "Hi, do you know your abc's?"
and "The latest airplane designs evolved from slabcraft."
In both cases the match is with the substring "abc"
. There is no match in the string "Grab crab"
because while it contains the substring "ab c"
, it does not contain the exact substring "abc"
.
When the search for a match requires something more than a direct match, such as finding one or more b's, or finding white space, you can include special characters in the pattern. For example, to match a single "a"
followed by zero or more "b"
s followed by "c"
, you'd use the pattern /ab*c/
: the *
after "b"
means "0 or more occurrences of the preceding item." In the string "cbbabbbbcdebc"
, this pattern will match the substring "abbbbc"
.
The following pages provide lists of the different special characters that fit into each category, along with descriptions and examples.
If you want to look at all the special characters that can be used in regular expressions in a single table, see the following:
| Characters / constructs | Corresponding article |
|---|---|
\ , . , \cX , \d , \D , \f , \n , \r , \s , \S , \t , \v , \w , \W , \0 , \xhh , \uhhhh , \uhhhhh , [\b] |
|
^ , $ , x(?=y) , x(?!y) , (?<=y)x , (?<!y)x , \b , \B |
|
(x) , (?:x) , (?<Name>x) , x|y , [xyz] , [^xyz] , \Number |
|
* , + , ? , x{n} , x{n,} , x{n,m} |
|
\p{UnicodeProperty} , \P{UnicodeProperty} |
Unicode property escapes |
Note: A larger cheatsheet is also available (only aggregating parts of those individual articles).
If you need to use any of the special characters literally (actually searching for a "*"
, for instance), you must escape it by putting a backslash in front of it. For instance, to search for "a"
followed by "*"
followed by "b"
, you'd use /a\*b/
— the backslash "escapes" the "*"
, making it literal instead of special.
Similarly, if you're writing a regular expression literal and need to match a slash ("/"), you need to escape that (otherwise, it terminates the pattern). For instance, to search for the string "/example/" followed by one or more alphabetic characters, you'd use /\/example\/[a-z]+/i
—the backslashes before each slash make them literal.
To match a literal backslash, you need to escape the backslash. For instance, to match the string "C:\" where "C" can be any letter, you'd use /[A-Z]:\\/
— the first backslash escapes the one after it, so the expression searches for a single literal backslash.
If using the RegExp
constructor with a string literal, remember that the backslash is an escape in string literals, so to use it in the regular expression, you need to escape it at the string literal level. /a\*b/
and new RegExp("a\\*b")
create the same expression, which searches for "a" followed by a literal "*" followed by "b".
If escape strings are not already part of your pattern you can add them using {{jsxref('String.replace')}}:
function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string }
The "g" after the regular expression is an option or flag that performs a global search, looking in the whole string and returning all matches. It is explained in detail below in Advanced Searching With Flags.
Why isn't this built into JavaScript? There is a proposal to add such a function to RegExp, but it was rejected by TC39.
Parentheses around any part of the regular expression pattern causes that part of the matched substring to be remembered. Once remembered, the substring can be recalled for other use. See Groups and ranges for more details.
Regular expressions are used with the RegExp
methods test()
and exec()
and with the String
methods match()
, replace()
, search()
, and split()
. These methods are explained in detail in the JavaScript reference.
| Method | Description |
|---|---|
| {{jsxref("RegExp.exec", "exec()")}} | Executes a search for a match in a string. It returns an array of information or null on a mismatch. |
| {{jsxref("RegExp.test", "test()")}} | Tests for a match in a string. It returns true or false . |
| {{jsxref("String.match", "match()")}} | Returns an array containing all of the matches, including capturing groups, or null if no match is found. |
| {{jsxref("String.matchAll", "matchAll()")}} | Returns an iterator containing all of the matches, including capturing groups. |
| {{jsxref("String.search", "search()")}} | Tests for a match in a string. It returns the index of the match, or -1 if the search fails. |
| {{jsxref("String.replace", "replace()")}} | Executes a search for a match in a string, and replaces the matched substring with a replacement substring. |
| {{jsxref("String.replaceAll", "replaceAll()")}} | Executes a search for all matches in a string, and replaces the matched substrings with a replacement substring. |
| {{jsxref("String.split", "split()")}} | Uses a regular expression or a fixed string to break a string into an array of substrings. |
When you want to know whether a pattern is found in a string, use the test()
or search()
methods; for more information (but slower execution) use the exec()
or match()
methods. If you use exec()
or match()
and if the match succeeds, these methods return an array and update properties of the associated regular expression object and also of the predefined regular expression object, RegExp
. If the match fails, the exec()
method returns null
(which coerces to false
).
In the following example, the script uses the exec()
method to find a match in a string.
var myRe = /d(b+)d/g; var myArray = myRe.exec('cdbbdbsbz');
If you do not need to access the properties of the regular expression, an alternative way of creating myArray
is with this script:
var myArray = /d(b+)d/g.exec('cdbbdbsbz'); // similar to "cdbbdbsbz".match(/d(b+)d/g); however, // "cdbbdbsbz".match(/d(b+)d/g) outputs Array [ "dbbd" ], while // /d(b+)d/g.exec('cdbbdbsbz') outputs Array [ 'dbbd', 'bb', index: 1, input: 'cdbbdbsbz' ].
(See different behaviors for further info about the different behaviors.)
If you want to construct the regular expression from a string, yet another alternative is this script:
var myRe = new RegExp('d(b+)d', 'g'); var myArray = myRe.exec('cdbbdbsbz');
With these scripts, the match succeeds and returns the array and updates the properties shown in the following table.
| Object | Property or index | Description | In this example |
|---|---|---|---|
myArray |
The matched string and all remembered substrings. | ['dbbd', 'bb', index: 1, input: 'cdbbdbsbz'] |
|
index |
The 0-based index of the match in the input string. | 1 |
|
input |
The original string. | 'cdbbdbsbz' |
|
[0] |
The last matched characters. | 'dbbd' |
|
myRe |
lastIndex |
The index at which to start the next match. (This property is set only if the regular expression uses the g option, described in Advanced Searching With Flags.) | 5 |
source |
The text of the pattern. Updated at the time that the regular expression is created, not executed. | 'd(b+)d' |
As shown in the second form of this example, you can use a regular expression created with an object initializer without assigning it to a variable. If you do, however, every occurrence is a new regular expression. For this reason, if you use this form without assigning it to a variable, you cannot subsequently access the properties of that regular expression. For example, assume you have this script:
var myRe = /d(b+)d/g; var myArray = myRe.exec('cdbbdbsbz'); console.log('The value of lastIndex is ' + myRe.lastIndex); // "The value of lastIndex is 5"
However, if you have this script:
var myArray = /d(b+)d/g.exec('cdbbdbsbz'); console.log('The value of lastIndex is ' + /d(b+)d/g.lastIndex); // "The value of lastIndex is 0"
The occurrences of /d(b+)d/g
in the two statements are different regular expression objects and hence have different values for their lastIndex
property. If you need to access the properties of a regular expression created with an object initializer, you should first assign it to a variable.
Regular expressions have six optional flags that allow for functionality like global and case insensitive searching. These flags can be used separately or together in any order, and are included as part of the regular expression.
| Flag | Description | Corresponding property |
|---|---|---|
g |
Global search. | RegExp.prototype.global |
i |
Case-insensitive search. | RegExp.prototype.ignoreCase |
m |
Multi-line search. | RegExp.prototype.multiline |
s |
Allows . to match newline characters. |
RegExp.prototype.dotAll |
u |
"unicode"; treat a pattern as a sequence of unicode code points. | RegExp.prototype.unicode |
y |
Perform a "sticky" search that matches starting at the current position in the target string. See {{jsxref("RegExp.sticky", "sticky")}}. | RegExp.prototype.sticky |
To include a flag with the regular expression, use this syntax:
var re = /pattern/flags;
or
var re = new RegExp('pattern', 'flags');
Note that the flags are an integral part of a regular expression. They cannot be added or removed later.
For example, re = /\w+\s/g
creates a regular expression that looks for one or more characters followed by a space, and it looks for this combination throughout the string.
var re = /\w+\s/g; var str = 'fee fi fo fum'; var myArray = str.match(re); console.log(myArray); // ["fee ", "fi ", "fo "]
You could replace the line:
var re = /\w+\s/g;
with:
var re = new RegExp('\\w+\\s', 'g');
and get the same result.
The behavior associated with the g
flag is different when the .exec()
method is used. The roles of "class" and "argument" get reversed: In the case of .match()
, the string class (or data type) owns the method and the regular expression is just an argument, while in the case of .exec()
, it is the regular expression that owns the method, with the string being the argument. Contrast this str.match(re)
versus re.exec(str)
. The g
flag is used with the .exec()
method to get iterative progression.
var xArray; while(xArray = re.exec(str)) console.log(xArray); // produces: // ["fee ", index: 0, input: "fee fi fo fum"] // ["fi ", index: 4, input: "fee fi fo fum"] // ["fo ", index: 7, input: "fee fi fo fum"]
The m
flag is used to specify that a multiline input string should be treated as multiple lines. If the m
flag is used, ^
and $
match at the start or end of any line within the input string instead of the start or end of the entire string.
Note: Several examples are also available in:
In the following example, the user is expected to enter a phone number. When the user presses the "Check" button, the script checks the validity of the number. If the number is valid (matches the character sequence specified by the regular expression), the script shows a message thanking the user and confirming the number. If the number is invalid, the script informs the user that the phone number is not valid.
The regular expression looks for:
\d{3}
OR |
a left parenthesis \(
, followed by three digits \d{3}
, followed by a close parenthesis \)
, in a non-capturing group (?:)
()
\d{3}
\1
\d{4}
The Change
event activated when the user presses Enter sets the value of RegExp.input
.
<p> Enter your phone number (with area code) and then click "Check". <br> The expected format is like ###-###-####. </p> <form action="#"> <input id="phone"> <button onclick="testInfo(document.getElementById('phone'));">Check</button> </form>
var re = /(?:\d{3}|\(\d{3}\))([-\/\.])\d{3}\1\d{4}/; function testInfo(phoneInput) { var OK = re.exec(phoneInput.value); if (!OK) { console.error(phoneInput.value + ' isn\'t a phone number with area code!'); } else { console.log('Thanks, your phone number is ' + OK[0]); } }
{{ EmbedLiveSample('Using_special_characters_to_verify_input', '', '', '', 'Web/JavaScript/Guide/Regular_Expressions') }}
| Specification |
|---|
| {{SpecName('ESDraft', '#sec-regexp-regular-expression-objects', 'RegExp')}} |
{{Compat("javascript.builtins.RegExp")}}


CSS Design
Margin, Border, and Padding
7/20/15
What is the difference between Margin, Border, and Padding?
All web developers are familiar with the computer language CSS (Cascading Style Sheets). CSS enables a developer to format and style a web page to make it more visually appealing for its user. Just about every website you interact with today uses CSS. In order to format a web page with CSS properly, you must understand the difference between margin, border, and padding.
- A margin creates open space around an element for formatting purposes. Margins are invisible but incredibly useful to clear up space and avoid a potentially cluttered web page.
- A border is what you would expect it to be - it outlines elements on a web page. If you want a picture or article to stand out, you will most likely give it some kind of border. Borders vary in size, color, and style. Here is an example of the CSS used to create a 5 pixel thick, solid black border --> border: 5px solid black;
- Padding is the space between the border and the content. Padding is valuable if your content feels cramped by your border and you want to free up some space.
Take a look at this image to help visually understand the three CSS elements:
The gray space between Div 2 and Div 3 is due to the use of margin. The two squares were originally just pixels apart from each other - adding margin seperated them. Div 2 has a 2 pixel thick, solid black border while Div 3 has a 5 pixel thick, dotted red border. It is easy to see how useful borders can be. Padding can be seen by looking at Div 2. The turquise area in the middle is the content, the green area outside of the content is the padding. Notice how the text "Div 3" is very close to its border? This is due to having zero padding.


Summoner
public struct Summoner
Summoner
struct, containing all of the relevant summoner data
-
The
Summoner
identifierDeclaration
Swift
public let id: Int;
-
The
Summoner
nameDeclaration
Swift
public let name: String;
-
The profile icon identifier in use for the
Summoner
Declaration
Swift
public let profileIconId: Int;
-
Date (epoch) of last modifications to the
Summoner
Declaration
Swift
public let revisionDate: Int;
-
The level (1-30) of the `Summoner
Declaration
Swift
public let summonerLevel: Int;


BRIC general
MRI Lab
Brain Stimulation Lab
Cognition & Behaviour Lab
EEG Lab
Motor Control Lab
Pain & Neuroplasticity Lab
Computational Modelling Lab
MRI lab heads: Nadège Bault & Matt Roser
Table of Contents
MRI Lab general
Starting a new study
Lab resources
Submitting a project
Safety and ethics
Safety training
Information & consent forms
Available sequences
functional MRI
diffusion weighted MRI
Spectroscopy
Developing and testing a task


(#userForm.values)
{{ userForm.value | json }}
The properties valid, invalid, pristine, dirty, touched, untouched
work at the form and individual form-control level.
(#userForm.valid | #userForm.invalid)
{{ userForm.valid }} | {{ userForm.invalid}}
(#userForm.pristine | #userForm.dirty)
{{ userForm.pristine }} | {{ userForm.dirty }}
(#userForm.touched | #userForm.untouched)
{{ userForm.touched }} | {{userForm.untouched }}
(this.originalUserSettings)
{{ originalUserSettings | json }}
(this.UserSettings)
{{ userSettings | json }}


|
DESERT
3.0
|
#include <uwUFetch_cmn_hdr.h>
Public Member Functions | |
| int & | num_DATA_pcks () |
| int & | backoff_time_RTS () |
Static Public Member Functions | |
| static int & | offset () |
| static hdr_RTS_UFETCH * | access (const Packet *p) |
Public Attributes | |
| int | num_DATA_pcks_ |
| int | backoff_time_RTS_ |
Static Public Attributes | |
| static int | offset_ = 0 |
Content header of RTS packet.
Definition at line 157 of file uwUFetch_cmn_hdr.h.
|
inlinestatic |
Definition at line 198 of file uwUFetch_cmn_hdr.h.
|
inline |
Reference to the backoff_Time_RTS_ variable.
Definition at line 192 of file uwUFetch_cmn_hdr.h.
|
inline |
Reference to the num_Data_pcks_ variable.
Definition at line 181 of file uwUFetch_cmn_hdr.h.
|
inlinestatic |
Reference to the offset variable.
Definition at line 170 of file uwUFetch_cmn_hdr.h.
| int hdr_RTS_UFETCH::backoff_time_RTS_ |
Backoff time chosen by the HN for collision free.
Definition at line 161 of file uwUFetch_cmn_hdr.h.
| int hdr_RTS_UFETCH::num_DATA_pcks_ |
Number of packets that the HN want to transmit to the AUV.
Definition at line 158 of file uwUFetch_cmn_hdr.h.
|
static |
Required by the PacketHeaderManager.
Definition at line 164 of file uwUFetch_cmn_hdr.h.


UI General
Alert, label, badge, tooltip, popover and more
Panel title
Panel title
Panel title
Panel title
Panel title
Panel title
Warning!
Your monthly traffic is reaching limit.
Success!
The page has been added.
Info!
You have 198 unread messages.
Error!
The daily cronjob has failed.
Make sure to add class show-tooltip
to show tooltip.
Tight pants next level keffiyeh you probably haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel have a terry richardson vinyl chambray. twitter handle freegan cred raw denim single-origin coffee viral.
Make sure to add class show-popover
to show popover.
Tight pants next level keffiyeh trigger me on click haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel trigger me on hover terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa.


| Interface | Description |
|---|---|
| AppointmentListener | |
| AppointmentStatusFactory | |
| CalendarModel | |
| CalendarOptions |
This class contains the.
|
| ClassifiableFilter | |
| EditComponent | |
| EditController | |
| InfoFactory | |
| MenuExtensionPoint | |
| MenuFactory | |
| ObjectMenuFactory | |
| OptionPanel | |
| ReservationController |
Use the ReservationController to modify or create a
Reservation . |
| ReservationEdit | |
| ReservationWizard | |
| SwingCalendarView | |
| TreeFactory | |
| ViewFactory |
| Class | Description |
|---|---|
| CalendarOptionsImpl |
WARNING!!
|
| DefaultPluginOption | |
| MenuContext | |
| RaplaAction | |
| RaplaGUIComponent |
Base class for most components in the gui package.
|
org.rapla.facade
package.
The gui-client is normally started through the RaplaClientService
.
You can also plug-in your own components into the gui.Copyright © 2000-2012 Rapla Team. All Rights Reseserved.


| Class | Description |
|---|---|
| ASCIIPropertyListParser |
Parser for ASCII property lists.
|
| ASCIIPropertyListWriter |
Writes property lists in the ASCII format.
|
| Base64 |
Encodes and decodes to and from Base64 notation.
|
| Base64.B64InputStream |
A
Base64.B64InputStream will read data from another
java.io.InputStream , given in the constructor,
and encode/decode to/from Base64 notation on the fly. |
| Base64.B64OutputStream |
A
Base64.B64OutputStream will write data to another
java.io.OutputStream , given in the constructor,
and encode/decode to/from Base64 notation on the fly. |
| BinaryPropertyListParser |
Parses property lists that are in Apple's binary format.
|
| BinaryPropertyListWriter |
Writes property lists in the binary format.
|
| NSArray |
The NSArray class is a wrapper for an array of NSObject instances.
|
| NSData |
The NSData class is a wrapper for a byte buffer.
|
| NSDate |
The NSDate class wraps a date.
|
| NSDictionary |
The NSDictionary class is a collection of NSObject instances that are identified by strings.
|
| NSNumber |
The NSNumber class wraps a numeric value.
|
| NSObject |
Abstract interface for an object contained in a property list.
|
| NSSet |
The NSSet class is an unordered collection of NSObject instances.
|
| NSString |
The NSString class is a wrapper for a string.
|
| PropertyListConverter |
Converts files between different property list formats.
|
| PropertyListParser |
Parses property lists.
|
| UID |
The UID class holds a unique identifier.
|
| XMLPropertyListParser |
Parses XML property lists.
|
| XMLPropertyListWriter |
Writes property lists in the XML format.
|
| Exception | Description |
|---|---|
| PropertyListFormatException |
A PropertyListFormatException is thrown by the various property list format parsers
when an error in the format of the given property list is encountered.
|
Copyright © 2022. All rights reserved.


A small JavaScript function for taking large tables and breaking them into pages. This function can also paginate pretty much anything that you can provide an element selector function for.
Basic example of the paginator function. A table and a place to put the page link are passed to it, as well as a class to style the current page's button.
paginator({ table: document.getElementById("table_box_native").getElementsByTagName("table")[0], box: document.getElementById("index_native"), active_class: "color_page" });
This changes things up a bit by using a different box mode, and not providing a box to put the page buttons in. setting the box mode to "list" builds the page buttons to use Bootstrap's pagination. The paginator function returns the box element with the page buttons and let's the programmer place it. Catching and placing the box element isn't needed if a box element is provided in the configuration object
var box = paginator({ table: document.getElementById("table_box_bootstrap").getElementsByTagName("table")[0], box_mode: "list", }); box.className = "box"; document.getElementById("table_box_bootstrap").appendChild(box);
Instead of paginating a table, this example provides it's own function for getting the "rows" to be paginated. Normally the paginator function accepts a table object and figures things out for itself. Because you can provide your own selector function, the paginator function is thus capable of paginating anything you can select.
paginator({ get_rows: function () { return document.getElementById("list").getElementsByTagName("li"); }, box: document.getElementById("list_index"), active_class: "color_page" });
Example of how to toggle the paginator feature.
var config = { table: document.getElementById("table_box_toggle").getElementsByTagName("table")[0], box: document.getElementById("index_toggle"), active_class: "color_page" }; paginator(config); document.getElementById("button_toggle").addEventListener("click", function () { config.disable = !config.disable; paginator(config); }, false);


--- categories: [] date: 2013-08-21T12:45:39Z status: publish tags: [] title: My privacy conscious nan layout: post url: /2013/08/21/my-privacy-conscious-nan/ ---


MESSAGE-EXPLAIN-TUTORIAL
LABEL-ADD-BASICS-COMPANY-DETAILS
LABEL-NOTE-ADD-TERMS-AND-CONDITIONS
LABEL-NOTE-ADD-PAYPAL
LABEL-NOTE-ADD-DELIVERY-OPTION
LABEL-NOTE-HINT-ADDED-DELIVERY-OPTION
LABEL-NOTE-MAINTAIN-FIRST-PRODUCT


For anyone who knows me, I've never been one to wear jewelry other than a watch. I always feel you need the right outfit in order for the accessories to compliment the look. It wasn't until I tried out some cuffs from Saisea that my perspective on this matter changed.
Saisea is a brand out of Olympia, WA that crafts unisex bracelets and rings for every day wear. The minimal design of their pieces make them easy to pair with just about any outfit and the quality is top notch. One aspect of the products that stood out to me is the fit of the cuffs. I have very small wrists which makes it hard to wear any type of bracelet or watch. I am usually having to custom size them in order to get the perfect fit. The cool thing about Saisea's cuff bracelets is that they are adjustable to your wrist. Just encircle one hand firmly over the edge on one end of the bracelet and gently bend until you get your preferred fit.
The brand knows quality is something that should be taken seriously. This is why all products on the website are made entirely of sterling silver. An exception to this are the gold products which are also plated with 18k gold. Whether you are heading out to the city or taking an adventure to the Olympic National Forest, you'll know their products will be durable and last for the longhaul.
I believe brands have the opportunity to make differences whether it be in their own community or someone else's. This is why Saisea has dedicated to donate 5% of their sales to PeaceTrees Vietnam and Hue Help. Both organizations help those in Vietnam whether it be removing unexploded remnants of the war or helping disadvantaged children. If you'd like to know more about these organizations, check out Saisea's section of their website on giving back.
I only partner with brands that I believe enhance your wardrobe while also delivering quality which is why I can't recommend these products enough. They've become part of my every day wear and can add an elegant aesthetic to your personal style. If you're still trying to decide what to get the significant other for the holidays or just want to treat yourself, I highly consider you check out Saisea's collection.


Now Playing
A Promised Land
Barak Obama
2:30
3:45
Books
Podcast
Live
Radio
From The Library
See All
Books That Might Fit To Your Taste
See All
Recently Played
See All


Getting Started¶
This document is intended to guide users on how to use T-Wath
1. Environmental construction¶
Install the CP2104 driver¶
Download firmware¶
The firmware can be obtained by going to resource download/firmware.
2. Download settings¶
The ESP Flash Tool
setting operation is as follows:
COM
: Burn device port selection, if there is only one device, you can choose directly.BAUD
: Download the baud rate, suggest 921600SPI SPEED
: 40MHzSPI MODE
: DIOFLASH SIZE
: 128Mbit
File |
Address |
|---|---|
boot_app0.bin |
0xe000 |
bootloader_dio_80m.bin |
0x1000 |
T-Watch.ino.partitions.bin |
0x8000 |
T-Watch.ino.bin |
0x10000 |
3. Download firmware¶
Important
Please wait until the lower left corner of the interface displays Finish, then close the software.


Mirò
FR
Toggle navigation
Home
About
Contact
Portfolio
Software
Music
Portofolio
Mirò musical services


Things I Wish I knew from my linkedin profile
1. Everytime I see a new view on my linkedin profile I've always wondered what triggered the view
-
The specific update that a person had seen which gave me my view
-
What would also be fascinating is the number of people who saw the update but did not engage with it.
2. Analytics for my alumni network
-
Types of Industries my alumni network belongs to
-
Overall view of the industry connections my alumni network has
3. Analytics for my profile
-
The amount of time a visitor spent on my profile
-
What percentage of my profile did a visitor scroll through
-
Added bonus would be a break-down of the time spent on different portions of the profile


result.document = watJSON.toWatJSON(document);
result.body = watJSON.toWatJSON(document.body);
1234
button
Failed to load iframe.
Failed to load object SVG.
Failed to load iframe SVG.
Sorry, your browser does not support inline SVG.


Localization
Appearance
Behaviour
Sound notifications
Export
Import
Clear data
Version
Bug reports and feedback
If you found some bug or have some nice suggestion or you want to follow up on development, head over to following link :
Martin Kadlec (BS-Harou) | Blog.


About Matrix 4x1
About Our Partners
Background
Watch
Links
Making Of
Screenshots
In Association with
and
The Matrix 4x1 film is copyright 2000
Cybernetic Productions
.
Web Site Content copyright 2000
Walking Wounded Ltd.


Arithmetic operators are used to perform arithmetic on numbers:
| Operator | Description |
|---|---|
| + | Addition |
| - | Subtraction |
| * | Multiplication |
| / | Division |
| % | Modulus |
| ++ | Increment |
| -- | Decrement |
| Operator | Example | Same As |
|---|---|---|
| = | x = y | x = y |
| += | x += y | x = x + y |
| -= | x -= y | x = x - y |
| *= | x *= y | x = x * y |
| /= | x /= y | x = x / y |
| %= | x %= y | x = x % y |
The + operator can also be used to add (concatenate) strings.
When used on strings, the + operator is called the concatenation operator.
Adding two numbers, will return the sum, but adding a number and a string will return a string.
| Operator | Description |
|---|---|
| == | equal to |
| === | equal value and equal type |
| != | not equal |
| !== | not equal value or not equal type |
| > | greater than |
| < | less than |
| >= | greater than or equal to |
| <= | less than or equal to |
| ? | ternary operator |
| Operator | Description |
|---|---|
| && | logical and |
| || | logical or |
| ! | logical not |
| Operator | Description |
|---|---|
| typeof | Returns the type of a variable |
| instanceof | Returns true if an object is an instance of an object type |
Bit operators work on 32 bits numbers.
Any numeric operand in the operation is converted into a 32 bit number. The result is converted back to a JavaScript number.
| Operator | Description | Example | Same as | Result | Decimal |
|---|---|---|---|---|---|
| & | AND | 5 & 1 | 0101 & 0001 | 0001 | 1 |
| | | OR | 5 | 1 | 0101 | 0001 | 0101 | 5 |
| ~ | NOT | ~ 5 | ~0101 | 1010 | 10 |
| ^ | XOR | 5 ^ 1 | 0101 ^ 0001 | 0100 | 4 |
| << | Zero fill left shift | 5 << 1 | 0101 << 1 | 1010 | 10 |
| >> | Signed right shift | 5 >> 1 | 0101 >> 1 | 0010 | 2 |
| >>> | Zero fill right shift | 5 >>> 1 | 0101 >>> 1 | 0010 | 2 |


Bridging the Digital Divide
Informatics In Context’s (IIC) offers payers a transformative standards-based solution which fully automates their prior authorization (PA) process in real-time based on the ACA mandated EDI 278 standard for medical procedures, tests, labs, and drugs covered under medical benefits.
IIC’s 278 Authorization Engine fully automates the payer’s PA process, as the vast majority of responses will not require human intervention. IIC is able to achieve a high level of touchless adjudication by automating all of the payer’s policies and guidelines, including all business and clinical rules required for real-time responses. Requests for documentation, attachments, and/or questions are handled electronically using the EDI 275 daughter transaction.
As described in the value proposition diagram, the ACS X12 V5010 standard enabled payers to process claims and eligibility transactions electronically in real-time. Today’s payer PA process is either manual or semi-automated if processed by 3rd parties, but in either case it’s a proprietary process, and not real-time. By realizing the full potential of the EDI 278 standard, a completely automated, real-time authorization process is now possible, one that can fundamentally transform utilization management itself.
Using IIC’s cloud-based technology, payers can immediately approve submissions that meet their established payment policies and care criteria, with no need for further review, or pend those that require manual review. Automating the PA process using the EDI industry 278 standard enables payers to realize an order of magnitude in time and cost savings per transaction, provides instantaneous actionable responses to providers, and allows payers to expand PA review to the higher volume, lower cost procedures without provider objection.
IIC’s 278 Authorization Engine enables payers to respond in real-time to the vast majority of authorization requests without human intervention, by automating all of the payer’s clinical guidelines (appropriate use criteria) used to approve or pend requests whether it be Medicare, Medicaid, MCG, InterQual, or custom guidelines. Guideline rules are editable by the payer as guidelines change or require updating.
IIC’s 278 authorization engine allows scalable utilization management and real-time adjudication based on a fully automated process. It accepts all 270/278/275 requests from any portal or system that can send 278 standard transactions.
After the PA request is processed, patient data is auto populated back into the payer’s system. There are integration points where the payer has to option to pend specific types of authorizations or requests from a specific provider for manual adjudication. Each transaction has ready access to the full history for the payer to view.
IIC’s 278 authorization engine can be integrated into any system with a well-defined API. It enables the electronic exchange of questions, requests, and documents between payer and provider using EDI 275 transaction. The goal is to eliminate all paper, fax, and phone call volumes by implementing a fully electronic authorization process.
Automating the PA process in real-time enables payers to respond instantly to provider requests for prior authorization, based on the payer’s payment policies, business rules, and clinical care guidelines. A fully automated PA adjudication process is the only effective way to ensure that plan assets are protected from over-utilization, duplicative and-or unnecessary care, and fraud, waste and abuse. By automating the PA process based on the payer’s own policies and clinical guidelines, IIC’s solution delivers cost-savings and value for the plan, high quality care for the patients, and clinically appropriate service delivery by the plan’s participating providers.
Read MoreIIC’s provider portal or integrated web service is a single point of entry to all payers in the providers network to check eligibility (270), submit referrals and prior authorization requests in real-time (278) using single sign on, without needing to login into individual payer sites each time. IIC’s solution reduces PA submission time and cost per transaction by an order of magnitude, reduces administrative burden, eliminates unnecessary delays, and significantly lowers costs. It offers uniformity and standardization of workflow to all payers based on using the EDI 278 standard. Automating the PA process promotes high utilization while reducing or eliminating the manual process of paper, phone, and fax. IIC’s provider solution can be integrated as a RESTful web service into any system (e.g. EMR or practice management system) or used stand-alone.
Read More


Everyone is affected by debt, from people taking out payday loans at 400% interest to cover basic living costs, to recent graduates paying hundreds of dollars in interest on their students loans every month, to working families bankrupted by medical bills, to elders living in “underwater” homes, to the teachers and firefighters forced to take pay cuts because their cities are broke, to people in the global South suffering due to their countries being pushed into austerity and poverty by structural adjustment programs. Everyone seems to owe something, and most of us are in so deep it’ll be years before we have any chance of getting out—if we have any chance at all. But few of us are asking, “Who do we all owe this money to, anyway?” and “Where did they get the money they lent?”
To Whom are We Indebted?
Even among people drowning in debt, typical conversations around the subject are framed in terms of personal responsibility: the debtors have no one to blame but themselves for getting into this situation, and moreover, to not pay one’s debts is an act of blasphemy, shame, and dishonor. To default is to expose one’s callous disregard for all that is decent. Today, morality is bound to debt—the two are inextricably linked. When we dispose of all the jargon attached to credit and debt, we can see that at its core, a loan is essentially a bet on whether or not that person—the debtor—will make good on their word. It is a risk, and that risk is higher or lower depending on that person’s status in society (defined only in the most narrow economic terms). A debt represents the willingness and ability of one to keep their promise. But a person’s actual ability to repay is often out of their hands. Frequently it depends on powers beyond their control. Debt further distorts our basic perceptions of ourselves and others; not only is a person’s word on the line, but also their value as a human being. In a way, we invest the value we place on ourselves into that credit arrangement and into our relationship with debt.  The subprime mortgage crisis is a particularly egregious example of moralistic victim-blaming. Subprime mortgages were concentrated in areas with higher racial segregation and targeted people of color, yet some people blamed the victims of this financial disaster, often with racialized language, proclaiming that, “those people shouldn’t have borrowed so much.” Arguments such as these, however, ignore the whole history of the exclusion of people of color from mainstream financial opportunities that could have led to homeownership. In addition, when many people of color finally got access to credit through legislative reforms, the lending was often predatory in nature. The effects of the subprime mortgage crisis and the subsequent credit crisis resulted in the further degradation of debtors’ social status. Edmund Andrews, the former economics correspondent at the New York Times, tied the issue together quite well when he reflected on his own credit troubles: “to see yourself plunged down to being a debtor, the likes of which are being made fun of all over the place—it’s just an awful experience” (Sington 2011). This statement makes clear what many already feel (and fear): the debtor is seen as subordinate or somehow of less value than a non-debtor. This is unfortunately held as a near-universal belief and many people are socially and economically excluded because of it. Debt warps the way we look at each other and encourages us to evaluate one another through a financial lens. Debt serves as a way to classify people, to put them into hierarchies, and to separate and isolate them in the process. Most of us have been brought up in a society where we are conditioned to hold these beliefs dearly, and on the surface it all sounds reasonable.  Focusing on debt at the individual level is a common approach. However, it is insufficient for understanding debt as a system and understanding why one would be right in resisting it. We have to go deeper by examining the terrain on a structural level and explore the circumstances that have put people (and municipalities and entire countries) into debt.
Debt and Income Inequality
Over three-quarters of us have some type of personal debt. At least 14% of people living in the United States are already being pursued by debt collectors, which is more than double from a decade ago. Are so many people really so reckless, so irresponsible? Granted, total household debt has been on the decline since 2008, but it is nevertheless still sitting at a whopping $11.31 trillion. Moreover, the median debt amount has risen substantially over the past decade and a half. Contrary to popular misconceptions, debt cannot simply be explained as the consequence of financially irresponsible individuals acquiring luxurious items beyond their means. Instead it is quite typically the outcome of people and families just trying to survive under capitalism. Forty percent of indebted U.S. households use credit cards to cover basic living costs such as rent, food, and utilities, and nearly half of indebted households have accrued debt due to medical costs. Indeed, we are told to consume to stimulate the economy and are subsequently demonized for accruing debt. In the wake of any financial blip or disaster, politicians often implore people to spend money for the sake of economic growth (remember that then-mayor Giuliani’s advice to New Yorkers after 9/11 was to go shopping). After the financial crash, however, we were told that we spent too much. According to a Consumer Reports survey in 2009, over half of the respondents paid off credit card bills each month. The remaining people accrued debt not by living large, but mostly by spending money on health costs, transportation, and other basic needs. Many credit card-indebted households making under $10,000 per year spend over 40% of that meager income to pay off debt. Demos and the Center for Responsible Lending have also debunked this myth of irresponsibility, stating, “the underlying reason behind some households having higher levels of credit card debt than other households was the occurrence of unforeseen events, such as job loss, medical expenses, or car breakdowns.” There are myriad factors that explain these circumstances, but a good place to start is by looking at economic trends over the past four and a half decades. The actual value of the federal minimum wage reached its peak in 1968. Since then, the real median hourly wage has basically stagnated, while labor productivity has increased considerably. Notably, the average U.S. debt-income ratio doubled over this same period, with average household debt beginning to exceed income in the early 2000s.
Of course, wage stagnation affects different populations with varying degrees of severity. Compared to 1966, the wage increase for an overwhelming majority of people in the United States averages only fifty-nine more dollars a year when adjusted for inflation. The increase since 1966 for the top 10% of income earners in our society, on the other hand, is over two thousand times this amount, and over ten thousand times this amount for the top 1%! Looking just at the years since the 2008 financial crisis, the top 1% of incomes rose considerably as the bottom 99% decreased. One-quarter of jobs in the United States pay below the poverty line for a household of four. To make matters worse, job security has diminished over the past few decades with many more jobs becoming casual, flexible, and temporary. The shift from the manufacturing economy to the service economy has contributed to a steep rise in precarious work—insecure jobs with low wages and no benefits (Fudge and Owens 2006, 3-28). As any wage laborer knows, the power exercised over them in the workplace is sometimes absolute. But in today’s unstable economy, where it’s common to hear of people working more than one part-time job without benefits, often just finding and keeping a job is a huge struggle. Today, even the ability to find a job can be determined by one’s debt. Employers can view your credit reports to determine whether or not you are “responsible,” and therefore “employable.” In other words, prospective employers look to see whether or not your personal circumstances will affect your work or if you have a history of being “financially imprudent.” Credit scores are often the determining factor, and more will be discussed about this in Chapter One. The extent to which people are affected by precarity and wage stagnation is greatly informed by their gender, race, sexuality, and ability. Women across the globe continue to comprise the majority of precarious workers. On average, in the United States, women are paid less than men, and women of color are paid even less. Median annual earnings for White men are $45,542, while the median for White women is 71% of this amount, 61% for Black women and only 51% for Latina women. For transgender people, rampant discrimination often prevents hiring in the first place, and those who are hired receive significantly less pay. They are much more likely than cisgender people (those who do not identify as transgender or genderqueer) to make under $10,000 per year. According to the report “All Children Matter,” Children of gay or lesbian parents are more likely than children with married straight parents to live in poverty, and a disproportionate number of homeless youth are lesbian, gay, bisexual, transgender, or queer (LGBTQ). Within the LGBTQ community, race and gender contribute to further widening income gaps. Meanwhile, people with disabilities in the United States are twice as likely to live in or near poverty than able-bodied people. On average, they earn considerably less than what people without disabilities earn. Compared to fifteen peer countries, the United States ranks second-to-last—only marginally better than Australia—when it comes to this particular income gap. Wage stagnation means people in the United States are finding it harder and harder to afford basic necessities, so they turn to credit cards and end up paying even more through high interest rates. As Kelly Gates observes, “The consumer credit industry exploded at precisely the time when social welfare programs were being dismantled and wages were stagnating for large numbers of people, with consumer credit filling the widening gap between the wages people earned and the personal expenses they accumulated in the new economy” (Gates 2010, 427). As the evidence demonstrates, the situation is often even harder—due to income gaps and a host of other factors which are in turn a result of structural oppression—for people who are not White, male, able-bodied, cisgender, or straight.
Looking beyond income inequality
Income alone, however, does not illustrate the gravity of the situation. It is more accurate to discuss wealth, or net worth—the amount someone owns minus the amount that they owe. After all, the United States ranks 138th out of 141 countries in terms of wealth equality. Here the disproportionate impact on Black and Latino/a people becomes even starker. The median household net worth is now twenty-two times greater for Whites than it is for Blacks. One would hope that by now at least some progress is being made, that the wealth gap is slowly closing, but in reality the opposite is true. Wealth disparity is far greater now than it was about two decades ago, when the wealth differed “only” by a factor of seven between Whites and Blacks. Compared to three decades ago, the wealth gap has quadrupled! Even when one looks at households with similar incomes, White households consistently have a higher median net worth than Black and Latino/a households. It is also true that, compared to Whites, Black and Latino/a families are more likely to lose a home to foreclosure, a disproportion that becomes greater as income increases. According to a recent study by the Institute on Assets and Social Policy, “half the collective wealth of African-American families was stripped away during the Great Recession due to the dominant role of home equity in their wealth portfolios and the prevalence of predatory high-risk loans in communities of color. The Latino community lost an astounding 67% of its total wealth during the housing collapse.” The particularly severe impact of economic inequality on Black and Latino/a people can be attributed to a long history of structural racism that continues to exist in the form of, among other things, redlining (the denial of loans or insurance to people of color) and reverse redlining (aggressively targeting communities of color with predatory services). Discussing income exclusively is also insufficient when talking about debt as it relates to age. Recently, a new type of loan targeting the elderly known as pension advances has emerged. People sign over their pension checks to companies in exchange for cash, but with interest rates that can exceed 100%. People with a fixed income, such as those on Social Security, can barely keep up with skyrocketing costs of living, but they’re still viewed as a golden goose by creditors. The problem goes deeper than stagnant wages. While stagnation has contributed greatly to people’s inability to get by and caused them to accrue debt, simply raising wages would not prove to be an adequate solution. Namely, this would ignore those without wages in the first place, including the millions of unemployed people in the United States. And it’s worth pausing here to consider what work gets identified as worthy of a wage, and the many kinds of vital labor that have long been unpaid—labor that is done to create and maintain our lives and to produce and sustain a workforce for profit-seeking enterprises. This work, when performed for one’s own family and which includes child bearing and rearing, cooking, cleaning, and elder care, is often referred to as “housework.” Some feminists call it “reproductive labor” (Federici and Cox 2012, 36). (As women in wealthier countries enter the paid workforce in larger numbers, others, primarily immigrant women, are paid a measly sum to perform this domestic work—either in addition to or at the expense of performing housework for their own families.) It’s the invisible work that makes “traditional work”—that is, waged labor—possible. Caring for others has traditionally been deemed “women’s work”—something which women are supposedly naturally inclined to do for their own fulfillment. This, it could be argued, has a lot to do with why this labor remains largely unwaged and undervalued. The fact that some men perform reproductive labor doesn’t change the fact that it’s still dismissed as “women’s work” and valued accordingly. If the contribution of this work to the economy sounds negligible, imagine what would happen if those performing reproductive labor went on strike. Any conversations about the relationship between wages and debt need to take into account the very nature of waged labor itself. There are other forms of unwaged labor as well, including modern day slavery. The issue of unfree prison labor also requires our attention. Global capitalism “thrives on the unwaged labor of millions of women and men in the fields, kitchens, and prisons of the United States and throughout the world” (Federici and Cox 2012, 31). To demand an increase in the minimum wage would benefit a large segment of the U.S. population, but the situation would be unchanged for most wageless workers.
Debt and Capitalism
Livable wages for all workers—including those who do not conform to conventional notions of “workers”—would be a necessary first step toward freeing ourselves from the debt system. But this approach, too, appears insufficient. We have to ask ourselves: is our economic system adequately meeting people’s needs and desires, or do we need to consider other ways of structuring a society? It is under capitalism, after all, that corporations are obligated by law to maximize profits. Unsurprisingly, then, corporate profits as a percentage of national income are the highest since 1950, while workers’ incomes are at the lowest percentage since 1966. Wall Street isn’t stealing workers’ wages and trammeling our ability to lead dignified lives all on their own, though; legislators and politicians are complicit. Only recently did it surface that taxpayers subsidize big banks around $83 billion per year, a perk for which the financial industry has vigorously lobbied. Since 2008 and also before, people have said that Wall Street ignored “systemic risk,” or the interconnectedness of the financial system. This muddles the central problem: the problem is systemic because the problem is the system. We know that those who plan and profit from capitalism need us, but do we need them? An analysis of debt is becoming increasingly relevant in the fight for justice. Economic exploitation and oppression exist not only in the workplace. Through debt we feel this exploitation in nearly all facets of our lives, from the houses we live in to the schools we attend to the hospitals we rely upon. Yet the exploitation is often subtler, and therefore debt requires more careful attention. As will be demonstrated throughout this book, all aspects of the debt system maintain and exacerbate already existing social inequalities, in the United States and internationally. Credit scores (see Chapter One) are not only used in determining access to credit, but these quite arbitrary numbers are impacting decisions regarding utilities, apartment rentals, car costs, insurance rates, and even employment, among other things. Meanwhile in places where credit is hard to come by—particularly in communities of color—a deregulated lending market has set up shop with exorbitantly expensive products and services like payday loans and check-cashing outlets (see Chapters Seven and Eight), ensuring that the poor continue to get even poorer. And in the global South, the World Bank and International Monetary Fund impose structural adjustment programs under the guise of helping governments pay their debts (see Chapter Thirteen). It is against this backdrop that Jamaica spends more than twice on debt repayment than what it does on education and health combined. Among many African countries, the result of structural adjustment is the privatization of land, the displacement of subsistence farmers, the depletion of social services, a decline in life expectancy, an increase in refugee populations, and the death of millions of people, to name just a few horrific consequences of living under a global system that dictates paying one’s debts is more important than life itself (Federici 2012, 84).
Debt as a social relationship, a weapon, and a form of control
People may feel like most kinds of debt—sometimes including their own personal debts—are far removed from their lives or that they are too abstract to understand. More often than not, technical terms surrounding debt serve to confuse and scare people rather than educate and empower them. In the past, debt and the language employed in its discussion have been used not only as a way to divide those “in the know” from the rest, but also as tools of control and discipline in order to limit and direct people’s life choices. Debt is a profoundly effective form of social control, and, as many have argued, it has become the primary form of extracting and accumulating wealth for the rich. Debt affects nearly every part of our lives. Not only does it determine the material possessions in our lives, but it also shapes our psyches. Debt is not something that exists outside of us, but rather something that is central in forming our identities, characters, and our relationships. As demonstrated earlier, debt is used as an oppressive financial tool that entangles class, race, gender, sexuality, age, and ability. It exploits members of marginalized groups, plunging them further into hardship. It is a strategy that impoverishes people and serves as a stark reminder of the power differences in our society. Though the effects of debt are felt across the social spectrum, debt does not “equalize” or make oppression uniform. But as a form of control, it does force us to have similar, sometimes shared, experiences, all of which define our self-perceptions and our relationships with our neighbors. Perhaps the most notable aspect of debt is the asymmetry in power. Creditors and Wall Street banks use financial markets, the power of the legal system, and the power that comes with having political and economic clout to accumulate staggering amounts of money. Preserving these privileged positions demands that they issue credit and create vast populations of debtors, from whom they gain commission, interest, and ultimately profit. This profit, like all profit, comes at a cost. Not only is our labor the source of much, if not all, of their revenue, but they also rob us of our future by demanding we work more to pay for ever-increasing interest rates that balloon if we miss payment. Beholden to these financial institutions, debtors are pushed to become complacent laborers. Of course, no one should begrudge people for trying to make ends meet or provide for their families, but what this relationship also deprives us of is an imagination of a world outside the creditor-debtor relationship. The ideas and experiences that fuel our imagination diminish, and it becomes harder to fight for a better, more just world. As a weapon, debt determines where we live, where and how we work, as well as our mental health. From a young age, we are conditioned to feel that being in debt is shameful and worthy of punishment. To offer a particularly poignant example, recently students at a middle school in Massachusetts were deprived of eating cafeteria food for having as a little as five cents of debt on their prepaid cards. The lesson is clear: debtors, no matter their age or circumstances, don’t deserve to have their basic needs met. In addition to being socially ostracized, debtors suffer from psychological problems that often go unnoticed.  We also see an increasing number of people in the United States contemplating or committing suicide because of debt. Deteriorating mental health and personal relationships are common among debtors, as well as insomnia, anxiety, and a slew of physical and psychological illnesses. These harmful effects can be amplified in an unstable economic climate such as today’s. As if ushering us from one point in our lives to another, debt acts as both a deterrent and catalyst. As a tool of capitalism that is used intentionally to extract wealth from people, debt forces us to take more than one job and to quit school or the things that give us an identity outside of work. Low-income students are more likely to rely on loans to afford college. Faced with skyrocketing tuition, these same students sometimes have to work many jobs to cover the costs. This forces students to compromise their studies in order to work, which affects their achievements and ultimately perpetuates class divisions. Debt is also used to shape certain attitudes, behaviors, ideas, and actions. For instance, the criminal justice system is seeing a dramatic rise in the number of indigent, or poor, individuals who are incarcerated because of their debt. Once in prison, harsh measures dictate prisoners’ entire lives, while simultaneously their forced manual labor floods our economy with cheap goods and commodities. Although debtors’ prisons were outlawed in the United States long ago, people are still imprisoned because they can’t afford to pay fines for what are sometimes minor infractions. Once in the criminal justice system, people are burdened with more fees that they cannot pay, driving them further into debt. Prisons are continually filled with impoverished people, giving life to a cycle of poverty and imprisonment that is hard to escape (see Chapter Nine).
About Strike Debt
This operations manual is written by an anonymous collective from Strike Debt. For over a year now, Strike Debt has been part of an international debt resistance movement—developing tactics, resources, and frameworks for expanding the fight against the debt system while developing alternative systems based on mutual aid. Strike Debt emerged in New York City as an offshoot of Occupy Wall Street in the wake of May Day 2012, receiving a great deal of inspiration from the student strikes in Québec happening at the time. We soon expanded to organize around all forms of debt. Chapters began popping up all over the country, including in Philadelphia, Denver, Boston, the Bay Area, Chicago, and Raleigh. The group operates under many principles that were adopted by Occupy participants from other nonhierarchical movements across the world. These principles include political autonomy, direct democracy, direct action, a culture of solidarity, and a commitment to combating all forms of oppression.  In addition to the creation of this manual, Strike Debt has organized a number of initiatives and actions, such as the Rolling Jubilee. The Rolling Jubilee purchases debt on the secondary market for approximately 1–5% of the original principal and subsequently abolishes it. Other Strike Debt projects involve debt education, hosting debtors’ assemblies, offering free health care, and protesting hospital closings.
About this manual
The Debt Resisters’ Operations Manual (DROM) seeks to provide widely applicable yet detailed information about debt as well as strategies for resistance. It highlights our commonalities—namely, that people are not alone in their struggles against debt—as well as our different relationships to debt. We strive to analyze debt from many different angles, always maintaining a nuanced, critical analysis that is conscious of race, gender, class, sexuality, age, ability, and their intersections. We strive to write in simple language and will work to translate the manual into languages other than English. A 120-page pamphlet version of the manual was collectively researched and written in August 2012 as a contribution to strengthening and expanding the debt resistance movement. Following its release in September 2012, over twelve thousand copies were printed and distributed for free within two months, from New York to Portland to Chicago to New Orleans. Digital versions were read by tens of thousands more people. In order to reach out to a wider audience and encourage more acts of debt resistance (and to avoid accruing more debt ourselves through printing and distribution costs!), we decided to expand the breadth of issues we covered in the pamphlet and publish this book with Common Notions and PM Press. Although this edition is sold online and in bookstores, we are committed to making the contents of the DROM available for free to anyone who might need them. In both the earlier pamphlet and this book, a decision was made to not attach any individual names to this manual. This decision is rooted in our principle of collectivity. A large collective of people from all over the country were directly involved in the researching, writing and editing of this book, but moreover, this manual is an attempt to reflect, and explore further, the endless conversations that have happened within Strike Debt over the past year. Whether it’s collectively developing an analysis of debt as a form of social control or contemplating particular strategies to resisting various forms of debt at meetings, countless people have made essential contributions to the content of this manual in both direct and indirect ways. People in and out of Strike Debt were invited to participate in creating this book as much as they desired in various capacities—as a researcher, writer, editor, coordinator, or various other roles. We also relied on input from the larger Strike Debt group in determining what concepts and tactics should be included in this manual. To ensure the group remained democratic, contributors of the manual reached consensus on decisions that affected the overall tone or structure of the book, such as the table of contents, the book description, and a style guide to inform each chapter. Meanwhile, researchers and writers of a particular chapter coordinated amongst themselves, while taking into consideration concerns raised by other members. As stated in the original preface, the DROM is a collective, living document; it remains open to revision and we invite constructive, critical dialogue. From the original preface:
We don’t claim to have all or even most of the answers regarding debt. To produce this manual, we have reached out to our networks to the best of our ability. Some sections barely scratch the surface and in fact deserve their own book-length treatment. Researching debt has uncovered many connections we didn’t expect, and we know there are types of debt we haven’t addressed. It is our hope that readers will have their own strategies to contribute to future versions of this manual. . . . Any ideas, plans, tips, corrections, resources, schemes—legal or otherwise—should be sent to<EMAIL_ADDRESS>Since September 2012, we have received a tremendous amount of feedback from fellow debt resisters as well as lawyers, accountants, and other experts, and we have done our best to incorporate those suggestions into this edition. We have expanded upon each of the original chapters and have written four new ones (Chapters Six, Eleven, Thirteen, and Fourteen). We have endeavored to place greater emphasis on strategies for collective action and alternatives to relying on the debt system for meeting basic needs.
A General Outline, Chapter by Chapter
Talking about debt is difficult not only because it elicits raw, emotional responses, but also because it’s a complex and intricate subject. On top of this, each chapter of this book tries to provide you with pragmatic ways to fight back. This can be anything from going through strategic bankruptcy to legal action to living off the financial grid entirely. So, in order to avoid confusing the reader any more than they already have been confused by credit card companies or student loan servicers, we have tried to make this manual as accessible as possible. We guide the reader from the “micro” forms of debt to the “macro,” or in other words, the types of debt people directly experience everyday to the more abstract forms of debt that people think about less, but nonetheless affect their everyday life. This manual begins, then, with one of the manifestations of debt, of which many people are aware: credit reporting agencies and credit scores (Chapter One). In the first chapter we explain the role of credit reporting agencies (CRAs) and credit scores in people’s lives. In Chapter Two we move on to credit card debt and automobile debt—two of the most common forms of consumer debt. In this chapter we briefly explain the history and role of credit cards, as well as provide a wider explanation as to why so many people are reliant on credit to survive. Cars are the primary means by which most people travel, yet most households cannot purchase and maintain them without incurring debt. We then go on to medical debt (Chapter Three) and student debt (Chapter Four)—two forms of debt that have become increasingly common in the United States. Chapter Three lays out the current state of health care in the United States and offers strategies for challenging medical bills. Chapter Four explains the ins and outs of student debt, who profits from it, how you can survive with student debt, and the fight for free higher education. In Chapter Five we take on housing debt—the history and development of the housing bubble to its crash in 2008, as well as the shady tactics employed by mortgagees to profit from low-income individuals’ misfortunes. We discuss our taxation system in Chapter Six, including an analysis of who benefits and who loses out, as well as the financial distress taxes bring to some of the more vulnerable people in society. We also, of course, discuss the IRS and how it can affect you if you don’t pay your taxes. The next two chapters (Seven and Eight) delve into the fringe finance industry: prepaid cards, check-cashing outlets, and various forms of predatory lending geared toward the “unbanked” and “underbanked”—those who live without mainstream bank accounts and those who utilize both traditional and “alternative” financial services. In Chapter Nine, with debt collection, we get into the more ‘abstract’ ideas surrounding debt. This chapter will not only teach you about the debt collection industry, its dirty practices, and its legal limits, but also how to fight back against harassment and intimidation from collectors. If you are thinking about declaring bankruptcy, Chapter Ten might prove useful. We discuss the different chapters of bankruptcy as well as the historical development of debt forgiveness through bankruptcy. We also highlight the circumstances under which bankruptcy is a wise or unwise strategy. Chapter Eleven goes through some of the many ways you can live without necessarily being on the “financial grid.” Recognizing that some people do or want to live without using any of the financial services mentioned in the rest of the manual, we have provided some strategies to living in the margins of this exploitative system. Municipal and State Debt (Chapter Twelve) and National Debt (Chapter Thirteen) are affected by each other and each affects individuals. In these chapters you will see how the effects of sovereign debt crises and municipal budget cuts interrelate and penetrate our individual lives. Chapter Fourteen, Climate Debt, discusses and analyzes how climate change, industrial growth, and capitalism relate to one another, causing a strict divide in the balance of wealth and power. This all paints a pretty bleak picture, but it is not one without hope. The final chapter, Prospects for Change (Chapter Fifteen), envisions a more mass-based approach to the individual and collective problems this manual addresses and invites you, the reader, to critically engage with the questions we ask in order build a grassroots debtors’ movement. Prospects for Change features just some examples of successful debt resistance throughout the world, and there are more to come. We try, and will keep trying, to imagine a world free of exploitation, white supremacy, patriarchy, and all other forms of oppression that set so many of us against each other. We encourage you to pass this book on to your friends, neighbors, members of your community, and coworkers. We see this book and the knowledge it collects as a tool that can be used to resist the debt system that oppresses us. To come back to the original question of “To whom are we indebted?” we should say that not all debt is bad. We are indebted to our friends and communities who raise us, support us, and give us strength and a sense of belonging and identity. Some debts keep up relations—important relations that help us survive and make us human. There are many factors that make certain debts immoral, however, like exploitation, force, violence, or profiteering. To the financial establishment of the world, we have only one thing to say: we owe you nothing. To our friends, our families, our communities, to humanity and to the natural world that makes our lives possible: we owe you everything. Every dollar we take from a fraudulent subprime mortgage speculator, every dollar we withhold from the collection agency is a tiny piece of our own lives and freedom that we can give back to our communities, to those we love and respect. These are acts of debt resistance, which come in many other forms as well: fighting for free education and health care, defending foreclosed homes against eviction, demanding higher wages, and practicing mutual aid. The late (and not-so-great) British Prime Minister Margaret Thatcher offered the world a stubborn acronym in defense of global capitalism and the free market: TINA, there is no alternative. There are ceaseless attempts to force us to believe this, to distrust others and keep our heads down, to discredit our collective visions of another society, and to keep our dreams at bay. Witness the ongoing militarization of society, the increase in police and state repression, and the controlling of dissent in this country and others around the world. Meanwhile, defenses of free market capitalism continue to be made with straight faces by pundits and sycophants as our economic system seems to be on the brink of collapse. Through the lens of debt, this book humbly offers a challenge to the logic of TINA, to this assault on the radical imagination. Another world is not only possible, but necessary.
References
- Associated Press. “Debt Stress Causing Health Problems, Poll Finds,” NBC News, June 9, 2008.
- Bloomberg View Editorial Board. “Why Should Taxpayers Give Big Banks $83 Billion a Year?” Bloomberg, February 20, 2013.
- Bocian, Debbie Gruenstein, Wei Li, and Keith S. Ernst. “Foreclosures by Race and Ethnicity: The Demographics of a Crisis.” Center for Responsible Lending, June 18, 2010.
- Burns, Crosby. “The Gay and Transgender Wage Gap.” Center for American Progress, April 16, 2012.
- Buchheit, Paul. “America Split in Two: Five Ugly Extremes of Inequality.” Common Dreams, March 25, 2013.
- Bureau of Labor Statistics. “The Employment Situation—January 2013.” U.S. Department of Labor, January 2013.
- Conference Board of Canada. “How Canada Performs: Disabled Income.” January 2013.
- Consumer Reports. “Users with Growing Balances.” November 2009.
- Dearden, Nick. “Jamaica’s Decades of Debt are Damaging Its Future.” The Guardian, April 16, 2013.
- DeFilippis, Joseph N., Susan Raffo, and Kay Whitlock. “Tidal Wave: LGBT Poverty and Economic Hardship in a Time of Economic Crisis.” Queers for Economic Justice, 2009.
- DeParle, Jason. “For Poor, Leap to College Often Ends in a Hard Fall.” New York Times, December 22, 2012.
- Draut, Tamara, Ansel Brown, Lisa James, Kathleen Keest, Jabrina Robinson, and Ellen Schloemer. “The Plastic Safety Net: The Reality Behind Debt in America.” Demos and The Center for Responsible Lending, October 2005.
- Federal Reserve Bank of New York. “Quarterly Report on Household Debt and Credit.” November 2012.
- Federici, Silvia. “War, Globalization, and Reproduction.” In Revolution at Point Zero: Housework, Reproduction, and Feminist Struggle, 76–84. Oakland: PM Press/Common Notions, 2012.
- Federici, Silvia, and Nicole Cox. “Counterplanning From the Kitchen.” In Revolution at Point Zero: Housework, Reproduction, and Feminist Struggle, 28–40. Oakland: PM Press/Common Notions, 2012.
- The Flaw. DVD. Directed by David Sington. 2011; London, UK: Studio Lambert, 2012.
- Frank, Robert. “Wealth Gap Rises between Whites, Non-Whites.” CNBC.com, June 22, 2012.
- Fraser, Steve. “The Politics of Debt in America.” Jacobin, February 4, 2013.
- Fudge, Judy, and Rosemary Owens. “Precarious Work, Women and the New Economy: The Challenge to Legal Norms.” In Precarious Work, Women and the New Economy: The Challenge to Legal Norms, edited by Judy Fudge and Rosemary Owens, 3–28. Portland, OR: Hart, 2006.
- Gates, Kelly. “The Securitization of Financial Identity and the Expansion of the Consumer Credit Industry.” Journal of Communication Inquiry 34, no. 4 (2010): 417–31.
- Gwynne, Kristen. “Middle School Forces Hungry Students to Throw Out Their Lunches When They Couldn’t Pay.” AlterNet, April 5, 2013.
- Hatton, Erin. “The Rise of the Permanent Temp Economy.” New York Times, January 26, 2013.
- Insight Center for Community Economic Development. “The Racial Gap in Debt, Credit and Financial Services.” June 2009.
- International Metalworkers’ Federation. “Global Action Against Precarious Work.” Metal World 1 (2007): 18–21.
- Jaffe, Sarah. “A Day Without Care.” Jacobin, April 2013.
- Johannsen, C. Cryn. “The Ones We’ve Lost: The Student Loan Debt Suicides.” Huffington Post, July 2, 2012.
- Johnston, David Cay. “Income Inequality: 1 Inch to 5 Miles.” Tax Analysts, February 25, 2013.
- Mason, J. W., and Arjun Jayadev. “Fisher Dynamics in Household Debt: The Case of the United States, 1929–2011.” University of Massachusetts Boston, Economics Department Working Papers, no. 13 (2012).
- Mishel, Lawrence, and Kar-Fai Gee. “Why Aren’t Workers Benefiting from Labour Productivity Growth in the United States?” International Productivity Monitor 23 (2012): 31–43.
- Movement Advancement Project, Family Equality Council, and Center for American Progress. “All Children Matter: How Legal and Social Inequalities Hurt LGBT Families.” October 2011.
- Mullaney, Tim. “More Americans Debt-Free, but the Rest Owe More.” USA Today, March 21, 2013.
- Organisation for Economic Co-operation and Development. “Sickness, Disability, and Work: Keeping on Track in the Economic Downturn.” May 2009.
- Orzechowski, Shawna, and Peter Sepielli. “Net Worth and Asset Ownership of Households: 1998 and 2000.” U.S. Census Bureau, 2003.
- Saez, Emmanuel. “Striking it Richer: The Evolution of Top Incomes in the United States.” January 2013.
- Schmitt, John. “The Minimum Wage Is Too Damn Low.” Center for Economic and Policy Research, March 2012.
- Schwartz, Nelson D. “Recovery in U.S. Is Lifting Profits, but Not Adding Jobs.” New York Times, March 3, 2013.
- Shapiro, Thomas, Tatjana Meschede, and Sam Osoro. “The Roots of the Widening Racial Wealth Gap: Explaining the Black-White Economic Divide.” Institute on Assets and Social Policy, February 2013.
- Shapiro, Thomas, Tatjana Meschede, and Laura Sullivan. “The Racial Wealth Gap Increases Fourfold.” Institute on Assets and Social Policy, May 2010.
- Silver-Greenburg, Jessica. “Loans Borrowed against Pensions Squeeze Retirees.” New York Times, April 27, 2013.
- Traub, Amy, and Catherine Ruetschlin. “The Plastic Safety Net: Findings from the 2012 National Survey on Credit Card Debt of Low- and Middle-Income Households.” Demos, 2012.
- Wicks-Lim, Jeannette. “The Great Recession in Black Wealth.” Dollars & Sense, February 2012.
- Women Are Getting Even. “Who Is Affected by the Wage Gap?” 2004.
- Wu, Chi Chi, and Birny Birnbaum. “Credit Scoring and Insurance: Costing Consumers Billions and Perpetuating the Economic Racial Divide.” National Consumer Law Center and Center for Economic Justice, June 2007.


Leslie TannerData Scientist - Mechanical Engineer - World Traveler
Portfolio
Decision Support Tool for UVA Data Science Institute Capstone Project
The UVA Data Science Institute Autonomous System team used text mining techniques such as named-entity recognition (NER) on example US Military Operation Orders (OPORDs) in order to assess potential future applications. See further details in 2016 IEEE Systems and Information Engineering Design Symposium (SIEDS) Paper.
An interactive example of a proposed Decision Support tool as discussed in the paper is linked here or here.
Keywords:
Named-Entity Recognition, Text Mining, Natural Language Processing, Autonomous Systems, Unmanned Aerial Vehicles
Visualizing Information from UVA Bay Game Example
This is a visualization of the behavior taken by students participating in the UVA Bay Game simulation during the Spring 2016 semester class. Students pretending to be animal farmers could choose farming and waste removal methods based upon incentives offered and assets accummulated. The methods chosen by students would impact the Nitrogen and Phosphorus Runoff into the simulated Bay.
This visualization was created by aggregating the data from all participating students in order to discover trends. It can be seen that over time most students switched from Conventional to Sustainable farming methods and from Basic to Nutrient waste removal methods as they acquired the money needed to do so. This resulted in a decrease in the total pollutant (Nitrogen and Phosphorus) runoff into the simulated Bay area.
Course:
SARC 5400
Date:
April 2016
Tools used:
RAW, Adobe Illustrator, R, Excel
Aerial Grocery Delivery Planning Tool
This tool was created to demonstrate grocery delivery via different modes of aerial transport: quadcopters, Raven unmanned aerial systems, carrier pidgeons, or paper airplanes. A user would browse through different recipes displayed on the left, add the ingredients to their cart, enter a delivery address, and then click on the button below the address field in order to see the results.
Results are presented in two ways. The map on the right side displays the delivery location marker and the maximum range that an aerial vehicle, for example a carrier pidgeon, could travel from the closest store if such weight was attached to it. This immediately helps a user determine which mode of transport could reach the final destination. Along the bottom is displayed the theoretical number of aerial vehicles that would actually be needed in order to transport the total weight from the closest store site to the delivery location.


{oscillator-tune-cluster.png width=373}
This just contains the single {Oscillator_tune tune} {_parameter}, but with a longer {_slider}. The tuning is shown as the MIDI note number when middle C is played; the default value is C5, which is middle C, five octaves above MIDI note 0.


Configuration
Jekyll allows you to concoct your sites in any way you can dream up, and it’s
thanks to the powerful and flexible configuration options that this is possible.
These options can either be specified in a _config.yml
file placed in your
site’s root directory, or can be specified as flags for the jekyll
executable
in the terminal.
Configuration Settings
Global Configuration
The table below lists the available settings for Jekyll, and the various options
(specified in the configuration file) and flags
(specified on the command-line) that control them.
| Setting | Options and Flags |
|---|---|
|
Site Source Change the directory where Jekyll will read files |
|
|
Site Destination Change the directory where Jekyll will write files |
|
|
Safe |
|
|
Exclude Exclude directories and/or files from the conversion. These exclusions are relative to the site's source directory and cannot be outside the source directory. |
|
|
Include
Force inclusion of directories and/or files in the conversion.
|
|
|
Keep files
When clobbering the site destination, keep the selected files.
Useful for files that are not generated by jekyll; e.g. files or
assets that are generated by your build tool.
The paths are relative to the |
|
|
Time Zone
Set the time zone for site generation. This sets the |
|
|
Encoding
Set the encoding of files by name (only available for Ruby
1.9 or later).
The default value is |
|
|
Defaults Set defaults for YAML Front Matter variables. |
see below |
Destination folders are cleaned on site builds
The contents of <destination>
are automatically
cleaned, by default, when the site is built. Files or folders that are not
created by your site will be removed. Some files could be retained
by specifying them within the <keep_files>
configuration directive.
Do not use an important location for <destination>
; instead, use it as
a staging area and copy files from there to your web server.
Build Command Options
| Setting | Options and Flags |
|---|---|
|
Regeneration Enable auto-regeneration of the site when files are modified. |
|
|
Configuration Specify config files instead of using |
|
|
Drafts Process and render draft posts. |
|
|
Environment Use a specific environment value in the build. |
|
|
Future Publish posts or collection documents with a future date. |
|
|
Unpublished Render posts that were marked as unpublished. |
|
|
LSI Produce an index for related posts. Requires the classifier-reborn plugin. |
|
|
Limit Posts Limit the number of posts to parse and publish. |
|
|
Force polling Force watch to use polling. |
|
|
Verbose output Print verbose output. |
|
|
Silence Output Silence the normal output from Jekyll during a build |
|
|
Incremental build Enable the experimental incremental build feature. Incremental build only re-builds posts and pages that have changed, resulting in significant performance improvements for large sites, but may also break site generation in certain cases. |
|
|
Liquid profiler Generate a Liquid rendering profile to help you identify performance bottlenecks. |
|
|
Strict Front Matter Cause a build to fail if there is a YAML syntax error in a page's front matter. |
|
Serve Command Options
In addition to the options below, the serve
sub-command can accept any of the options
for the build
sub-command, which are then applied to the site build which occurs right
before your site is served.
| Setting | Options and Flags |
|---|---|
|
Local Server Port Listen on the given port. |
|
|
Local Server Hostname Listen at the given hostname. |
|
|
Base URL Serve the website from the given base URL |
|
|
Detach Detach the server from the terminal |
|
|
Skips the initial site build. Skips the initial site build which occurs before the server is started. |
|
|
X.509 (SSL) Private Key SSL Private Key. |
|
|
X.509 (SSL) Certificate SSL Public certificate. |
|
Do not use tabs in configuration files
This will either lead to parsing errors, or Jekyll will revert to the default settings. Use spaces instead.
Custom WEBrick Headers
You can provide custom headers for your site by adding them to _config.yml
# File: _config.yml
webrick:
headers:
My-Header: My-Value
My-Other-Header: My-Other-Value
Defaults
We provide by default Content-Type
and Cache-Control
response headers: one
dynamic in order to specify the nature of the data being served, the other
static in order to disable caching so that you don’t have to fight with Chrome’s
aggressive caching when you are in development mode.
Specifying a Jekyll environment at build time
In the build (or serve) arguments, you can specify a Jekyll environment and value. The build will then apply this value in any conditional statements in your content.
For example, suppose you set this conditional statement in your code:
{% if jekyll.environment == "production" %}
{% include disqus.html %}
{% endif %}
When you build your Jekyll site, the content inside the if
statement won’t be run unless you also specify a production
environment in the build command, like this:
JEKYLL_ENV=production jekyll build
Specifying an environment value allows you to make certain content available only within specific environments.
The default value for JEKYLL_ENV
is development
. Therefore if you omit JEKYLL_ENV
from the build arguments, the default value will be JEKYLL_ENV=development
. Any content inside {% if jekyll.environment == "development" %}
tags will automatically appear in the build.
Your environment values can be anything you want (not just development
or production
). Some elements you might want to hide in development environments include Disqus comment forms or Google Analytics. Conversely, you might want to expose an “Edit me in GitHub” button in a development environment but not include it in production environments.
By specifying the option in the build command, you avoid having to change values in your configuration files when moving from one environment to another.
Front Matter defaults
Using YAML Front Matter is one way that you can specify configuration in the pages and posts for your site. Setting things like a default layout, or customizing the title, or specifying a more precise date/time for the post can all be added to your page or post front matter.
Often times, you will find that you are repeating a lot of configuration options. Setting the same layout in each file, adding the same category - or categories - to a post, etc. You can even add custom variables like author names, which might be the same for the majority of posts on your blog.
Instead of repeating this configuration each time you create a new post or page, Jekyll provides a way to set these defaults in the site configuration. To do this, you can specify site-wide defaults using the defaults
key in the _config.yml
file in your project’s root directory.
The defaults
key holds an array of scope/values pairs that define what defaults should be set for a particular file path, and optionally, a file type in that path.
Let’s say that you want to add a default layout to all pages and posts in your site. You would add this to your _config.yml
file:
defaults:
-
scope:
path: "" # an empty string here means all files in the project
values:
layout: "default"
Please stop and rerun `jekyll serve` command.
The _config.yml
master configuration file contains global configurations
and variable definitions that are read once at execution time. Changes made to _config.yml
during automatic regeneration are not loaded until the next execution.
Note Data Files are included and reloaded during automatic regeneration.
Here, we are scoping the values
to any file that exists in the path scope
. Since the path is set as an empty string, it will apply to all files in your project. You probably don’t want to set a layout on every file in your project - like css files, for example - so you can also specify a type
value under the scope
key.
defaults:
-
scope:
path: "" # an empty string here means all files in the project
type: "posts" # previously `post` in Jekyll 2.2.
values:
layout: "default"
Now, this will only set the layout for files where the type is posts
.
The different types that are available to you are pages
, posts
, drafts
or any collection in your site. While type
is optional, you must specify a value for path
when creating a scope/values
pair.
As mentioned earlier, you can set multiple scope/values pairs for defaults
.
defaults:
-
scope:
path: ""
type: "pages"
values:
layout: "my-site"
-
scope:
path: "projects"
type: "pages" # previously `page` in Jekyll 2.2.
values:
layout: "project" # overrides previous default layout
author: "Mr. Hyde"
With these defaults, all pages would use the my-site
layout. Any html files that exist in the projects/
folder will use the project
layout, if it exists. Those files will also have the page.author
liquid variable set to Mr. Hyde
.
collections:
my_collection:
output: true
defaults:
-
scope:
path: ""
type: "my_collection" # a collection in your site, in plural form
values:
layout: "default"
In this example, the layout
is set to default
inside the
collection with the name my_collection
.
Glob patterns in Front Matter defaults
It is also possible to use glob patterns (currently limited to patterns that contain *
) when matching defaults. For example, it is possible to set specific layout for each special-page.html
in any subfolder of section
folder.3.7.0
collections:
my_collection:
output: true
defaults:
-
scope:
path: "section/*/special-page.html"
values:
layout: "specific-layout"
Globbing and Performance
Please note that globbing a path is known to have a negative effect on performance and is currently not optimized, especially on Windows. Globbing a path will increase your build times in proportion to the size of the associated collection directory.
Precedence
Jekyll will apply all of the configuration settings you specify in the defaults
section of your _config.yml
file. However, you can choose to override settings from other scope/values pair by specifying a more specific path for the scope.
You can see that in the second to last example above. First, we set the default page layout to my-site
. Then, using a more specific path, we set the default layout for pages in the projects/
path to project
. This can be done with any value that you would set in the page or post front matter.
Finally, if you set defaults in the site configuration by adding a defaults
section to your _config.yml
file, you can override those settings in a post or page file. All you need to do is specify the settings in the post or page front matter. For example:
# In _config.yml
...
defaults:
-
scope:
path: "projects"
type: "pages"
values:
layout: "project"
author: "Mr. Hyde"
category: "project"
...
# In projects/foo_project.md
---
author: "John Smith"
layout: "foobar"
---
The post text goes here...
The projects/foo_project.md
would have the layout
set to foobar
instead
of project
and the author
set to John Smith
instead of Mr. Hyde
when
the site is built.
Default Configuration
Jekyll runs with the following configuration options by default. Alternative settings for these options can be explicitly specified in the configuration file or on the command-line.
There are two unsupported kramdown options
Please note that both remove_block_html_tags
and
remove_span_html_tags
are currently unsupported in Jekyll due
to the fact that they are not included within the kramdown HTML converter.
# Where things are
source: .
destination: ./_site
collections_dir: .
plugins_dir: _plugins
layouts_dir: _layouts
data_dir: _data
includes_dir: _includes
collections:
posts:
output: true
# Handling Reading
safe: false
include: [".htaccess"]
exclude: ["Gemfile", "Gemfile.lock", "node_modules", "vendor/bundle/", "vendor/cache/", "vendor/gems/", "vendor/ruby/"]
keep_files: [".git", ".svn"]
encoding: "utf-8"
markdown_ext: "markdown,mkdown,mkdn,mkd,md"
strict_front_matter: false
# Filtering Content
show_drafts: null
limit_posts: 0
future: false
unpublished: false
# Plugins
whitelist: []
plugins: []
# Conversion
markdown: kramdown
highlighter: rouge
lsi: false
excerpt_separator: "\n\n"
incremental: false
# Serving
detach: false
port: 4000
host: <IP_ADDRESS>
baseurl: "" # does not include hostname
show_dir_listing: false
# Outputting
permalink: date
paginate_path: /page:num
timezone: null
quiet: false
verbose: false
defaults: []
liquid:
error_mode: warn
strict_filters: false
strict_variables: false
# Markdown Processors
rdiscount:
extensions: []
redcarpet:
extensions: []
kramdown:
auto_ids: true
entity_output: as_char
toc_levels: 1..6
smart_quotes: lsquo,rsquo,ldquo,rdquo
input: GFM
hard_wrap: false
footnote_nr: 1
show_warnings: false
Liquid Options
Liquid’s response to errors can be configured by setting error_mode
. The
options are
-
lax
— Ignore all errors. -
warn
— Output a warning on the console for each error. -
strict
— Output an error message and stop the build.
You can also configure Liquid’s renderer to catch non-assigned variables and
non-existing filters by setting strict_variables
and / or strict_filters
to true
respectively. 3.8.0
Do note that while error_mode
configures Liquid’s parser, the strict_variables
and strict_filters
options configure Liquid’s renderer and are consequently,
mutually exclusive.
Markdown Options
The various Markdown renderers supported by Jekyll sometimes have extra options available.
Redcarpet
Redcarpet can be configured by providing an extensions
sub-setting, whose
value should be an array of strings. Each string should be the name of one of
the Redcarpet::Markdown
class’s extensions; if present in the array, it will
set the corresponding extension to true
.
Jekyll handles two special Redcarpet extensions:
-
no_fenced_code_blocks
— By default, Jekyll sets thefenced_code_blocks
extension (for delimiting code blocks with triple tildes or triple backticks) totrue
, probably because GitHub’s eager adoption of them is starting to make them inescapable. Redcarpet’s normalfenced_code_blocks
extension is inert when used with Jekyll; instead, you can use this inverted version of the extension for disabling fenced code.
Note that you can also specify a language for highlighting after the first delimiter:
```ruby
# ...ruby code
```
With both fenced code blocks and highlighter enabled, this will statically
highlight the code; without any syntax highlighter, it will add a
class="LANGUAGE"
attribute to the <code>
element, which can be used as a
hint by various JavaScript code highlighting libraries.
-
smart
— This pseudo-extension turns on SmartyPants, which converts straight quotes to curly quotes and runs of hyphens to em (---
) and en (--
) dashes.
All other extensions retain their usual names from Redcarpet, and no renderer
options aside from smart
can be specified in Jekyll. A list of available
extensions can be found in the Redcarpet README file.
Make sure you’re looking at the README for the right version of
Redcarpet: Jekyll currently uses v3.2.x. The most commonly used
extensions are:
tables
no_intra_emphasis
autolink
Custom Markdown Processors
If you’re interested in creating a custom markdown processor, you’re in luck! Create a new class in the Jekyll::Converters::Markdown
namespace:
class Jekyll::Converters::Markdown::MyCustomProcessor
def initialize(config)
require 'funky_markdown'
@config = config
rescue LoadError
STDERR.puts 'You are missing a library required for Markdown. Please run:'
STDERR.puts ' $ [sudo] gem install funky_markdown'
raise FatalException.new("Missing dependency: funky_markdown")
end
def convert(content)
::FunkyMarkdown.new(content).convert
end
end
Once you’ve created your class and have it properly set up either as a plugin
in the _plugins
folder or as a gem, specify it in your _config.yml
:
markdown: MyCustomProcessor
Incremental Regeneration
Incremental regeneration is still an experimental feature
While incremental regeneration will work for the most common cases, it will not work correctly in every scenario. Please be extremely cautious when using the feature, and report any problems not listed below by opening an issue on GitHub.
Incremental regeneration helps shorten build times by only generating documents
and pages that were updated since the previous build. It does this by keeping
track of both file modification times and inter-document dependencies in the
.jekyll-metadata
file.
Under the current implementation, incremental regeneration will only generate a
document or page if either it, or one of its dependencies, is modified. Currently,
the only types of dependencies tracked are includes (using the
{% include %}
tag) and layouts. This means that plain
references to other documents (for example, the common case of iterating over
site.posts
in a post listings page) will not be detected as a dependency.
To remedy some of these shortfalls, putting regenerate: true
in the front-matter
of a document will force Jekyll to regenerate it regardless of whether it has been
modified. Note that this will generate the specified document only; references
to other documents’ contents will not work since they won’t be re-rendered.
Incremental regeneration can be enabled via the --incremental
flag (-I
for
short) from the command-line or by setting incremental: true
in your
configuration file.