|
A version control system maintains an organized set of all the
versions of files that are made over time. Version control
systems allow people to go back to previous versions, and to
compare any two versions to see what changes were made between
them. In this way, version control keeps a historically accurate
(and retrievable!) log of a file's evolution. More importantly,
version control systems help several people (even in
geographically disparate locations) work together on a
development project over the Internet or private network to make
changes to the same file over time.
- Repository:
- a shared database the the complete version history of all
files under version control.
- Workspace:
- a copy of the files you want to edit on your local hard disk
or Unix user account. When you edit files in your workspace,
they will become out of sync with the repository. That's
progress! Then you need to get your changes back into the
repository so that everyone else can see them.
- Checking out a file or directory:
- this copies a version (usually the latest version) of a file
from the repository to your workspace. When you check out a
directory, you check out all files and subdirectories under it.
- Checking in a file or directory:
- this copies your working directory back into the repository
as a new version.
- Committing a file or directory:
- is the same as checking it in. Often version control users
will say that the have "committed a change"; this means that
they made changes and committed these back to the repository.
- Version:
- a numbered draft of a file, e.g., 1.1, 1.2, 1.3, 1.4, 2.0,
2.1. Each time you edit a file and commit it back to the
repository, its version number increases. You can change the
first digit of the number any time you like.
- Conflict:
- When two people make changes to the same file at the same
time, their work may conflict. There are two ways to address
conflicts: locks and merging.
- Locks:
- one strategy for managing conflicts in version control is to
lock files so that only one person can check out a read-write
copy at a time. Other users can only get read-only copies. This
prevents two people from ever working on the same file at the
same time. It is safe, but not very efficient in practice. Also,
if one person locks a file and then leaves for the day or the
week, no one else can work with that file, so they are needlessly
blocked.
- Merging:
- another strategy for managing conflict is to let multiple
people work at the same time (with no locks) and then try to
merge their results into one combined version. This is closer to
the way that intelligent people tend to work together in
parallel if they had no version control tools. Merging works
well when two sets of changes can be combined, and poorly when
it is impossible to combine changes. CVS uses merging.
More information: CVS for New
Users (an article)
Back to main Help index
|


@(departments: List[models.Department],employee: models.employees.Employee) @main("Departments",employee){


vignettes/articles/cnsl_batch_correction.Rmd
cnsl_batch_correction.Rmd
For this section, we wrapped 12 methods into functions that perform batch effect correction on an SingleCellExperiment
(SCE) object and return the input SCE object with a corrected matrix updated in-place.
Here is a table for the method names, citations, corresponding wrapper functions and where the results are updated:
| Method | Citation | Function | Result Slots |
|---|---|---|---|
| BBKNN | Polański, Krzysztof and et al., 2019 | runBBKNN() |
reducedDim
|
| ComBat | Yuqing Zhang and et al., 2018 | runComBat() |
assay
|
| FastMNN | Aaron Lun, 2018 | runFastMNN() |
reducedDim
|
| MNN | Laleh Haghverdi, 2018 | runMNNCorrect() |
assay
|
| Harmony | Ilya Korsunsky and et al., 2019 | runHarmony() |
reducedDim
|
| LIGER | Joshua Welch, et al., 2018 | runLIGER() |
reducedDim
|
| Limma | Gordon K Smyth, et al., 2003 | runLimmaBC() |
assay
|
| Scanorama | Brian Hie et al, 2019 | runSCANORAMA() |
assay
|
| scGen | Mohammad Lotfollah et al., 2019 | runSCGEN() |
assay
|
| scMerge | Yingxin Lin et al., 2019 | runSCMerge() |
assay
|
| Seurat Integration | Tim Stuart et al., 2019 | runSeurat3Integration() |
altExp
|
| ZINBWaVE | Davide Risso et al., 2018 | runZINBWaVE() |
reducedDim
|
For a result returned in reducedDim
, it means that some sorts of dimension reduction method, such as PCA and UMAP, is performed during the correction. For a result returned in assay
, all of the original features (i.e. genes) remain the same, thus it is a full-sized assay. For a result returned in altExp
, it means that the values in the corrected assay still stand for the expression level of the original features, instead of any low-dimension embedding, but the number of these features are less than original due to potential subsetting steps in the calculation.
SCTK provides options of “BBKNN” and “Scanorama” for batch correction. These methods are Python based. In order to successfully apply these methods, users have to get a Python3 environment activated and indentifiable for R-reticulate. For users convenience, SCTK provides one-click functions to install the environment together with the libraries. These functions will by default also install the Python libraries used for Quality Control.
To run the pipeline, the most basic requirements are:
As we adopt SingleCellExperiment
(sce
) object through out the whole SCTK for a collection of all matrices and metadatas of the dataset of interests, the assay to be corrected, called "assayToCorr"
, has to be saved at assay(sce, "assayToCorr")
. Meanwhile, the batch annotation information has to be saved in a column of colData(sce)
.
Note that the batch annotation should better be saved as a
factor
in thecolData
, especially when the batches are represented by integer numbers, because some downstream analysis are likely to parse the non-character and non-logical information as continuous values instead of categorical values.
Here we present an example dataset that is combined from “pbmc3k” and “pbmc4k” (Kasper D. Hansen et al., 2017), which you can import by a function called importExampleData()
.
library(singleCellTK)
pbmc6k <- importExampleData('pbmc6k')
pbmc8k <- importExampleData('pbmc8k')
print(paste(dim(pbmc6k), c('genes', 'cells')))
print(paste(dim(pbmc8k), c('genes', 'cells')))
## [1] "32738 genes" "5419 cells"
## [1] "33694 genes" "8381 cells"
There is a function called combineSCE()
, which accepts a list of SCE objects as input and returns a combined SCE object. This function requires that the number of genes in each SCE object has to be the same, and the gene metadata (i.e. rowData
) has to match with each other if the same fields exist. Therefore, we need some pre-process for the combination. Users do not necessarily have to follow the same way, depending on how the raw datasets are provided.
## Combine the two SCE objects
sce.combine <- combineSCE(sceList = list(pbmc6k = pbmc6k, pbmc8k = pbmc8k),
by.r = names(rowData(pbmc6k)),
by.c = names(colData(pbmc6k)),
combined = TRUE)
table(sce.combine$sample)
##
## pbmc6k pbmc8k
## 5419 8381
In this manual, we only present a toy example instead of a best practice for real data. Therefore, QC and filtering are skipped.
Additionally, most of the batch correction methods provided require a log-normalized assay as input, users can check the required assay type of each method by looking at its default setting. (i.e. if by default useAssay = "logcounts"
, then it requires log-normalized assay; else if by default useAssay = "counts"
, then the raw count assay.)
## Simply filter out the genes that are expressed in less than 1% of all cells.
sce.filter <- sce.combine[rowSums(assay(sce.combine) > 0) >= 0.01 * ncol(sce.combine),]
sce.filter
## class: SingleCellExperiment
## dim: 10415 13800
## metadata(0):
## assays(1): counts
## rownames(10415): AP006222.2 RP11-206L10.9 ... URB1-AS1 AC007325.4
## rowData names(4): rownames ENSEMBL_ID Symbol_TENx Symbol
## colnames(13800): pbmc6k_AAACATACAACCAC-1 pbmc6k_AAACATACACCAGT-1 ...
## pbmc8k_TTTGTCATCTCGAGTA-1 pbmc8k_TTTGTCATCTGCTTGC-1
## colData names(13): rownames Sample ... Date_published sample
## reducedDimNames(0):
## altExpNames(0):
sce.small <- sce.filter[sample(nrow(sce.filter), 800), sample(ncol(sce.filter), 800)]
sce.small <- scaterlogNormCounts(inSCE = sce.small,
useAssay = 'counts',
assayName = 'logcounts')
sce.small
## class: SingleCellExperiment
## dim: 800 800
## metadata(1): assayType
## assays(2): counts logcounts
## rownames(800): AKAP7 CCDC137 ... ATG4A ZNF319
## rowData names(4): rownames ENSEMBL_ID Symbol_TENx Symbol
## colnames(800): pbmc8k_ACCTTTAAGCGCTCCA-1 pbmc8k_CATCAGAAGCGTAGTG-1 ...
## pbmc8k_GTCTCGTTCTTGCCGT-1 pbmc8k_CGTTCTGGTCGTTGTA-1
## colData names(14): rownames Sample ... sample sizeFactor
## reducedDimNames(0):
## altExpNames(0):
The basic way to run a batch correction method from SingleCellTK is to select a function for the corresponding method, input the SCE object, specify the assay to correct, and the batch annotation.
For example, here we will try the batch correction method provided by Limma, which fits a linear model to the data.
sce.small <- runLimmaBC(inSCE = sce.small,
useAssay = 'logcounts',
batch = 'sample',
assayName = 'LIMMA')
sce.small
## class: SingleCellExperiment
## dim: 800 800
## metadata(1): assayType
## assays(3): counts logcounts LIMMA
## rownames(800): AKAP7 CCDC137 ... ATG4A ZNF319
## rowData names(4): rownames ENSEMBL_ID Symbol_TENx Symbol
## colnames(800): pbmc8k_ACCTTTAAGCGCTCCA-1 pbmc8k_CATCAGAAGCGTAGTG-1 ...
## pbmc8k_GTCTCGTTCTTGCCGT-1 pbmc8k_CGTTCTGGTCGTTGTA-1
## colData names(14): rownames Sample ... sample sizeFactor
## reducedDimNames(0):
## altExpNames(0):
In this documentation, we provide three ways to examine the removal of batch effect, in terms of visualization.
This functionality is implemented in plotBatchVariance()
. It plots a violin plot of the variation explained by the given batch annotation, an additional condition, and the variation explained by combining these two conditions.
This plot would be useful for examining whether the existing batch effect is different than another condition (e.g. subtype) or is confounded by that. However, the additional condition labels (e.g. cell types) do not necessarily exist when batch effect removal is wanted, so only plotting the variation explained by batches is also supported.
plotBatchVariance(inSCE = sce.small,
useAssay = 'logcounts',
batch = 'sample',
title = 'Variation Before Correction')
plotBatchVariance(inSCE = sce.small,
useAssay = 'LIMMA',
batch = 'sample',
title = 'Variation After Correction')
This functionality is implemented in plotSCEBatchFeatureMean()
. The methodology is straight forward, which plots violin plots for all the batches, and within each batch, the plot illustrates the distribution of the mean expression level of each gene. Thus the batch effect can be observed from the mean and standard deviation of each batch.
There is no function special for batch correction, but this can be achieved simply by using the dimension reduction calculation functions (e.g. scaterPCA()
, getUMAP()
and getTSNE()
) and plotSCEDimReduceColData()
.
sce.small <- scaterPCA(inSCE = sce.small,
useAssay = 'logcounts',
reducedDimName = 'PCA')
plotSCEDimReduceColData(inSCE = sce.small,
colorBy = 'sample',
reducedDimName = 'PCA',
title = 'PCA Before Correction')
sce.small <- scaterPCA(inSCE = sce.small,
useAssay = 'LIMMA',
reducedDimName = 'PCA_LIMMA')
plotSCEDimReduceColData(inSCE = sce.small,
colorBy = 'sample',
reducedDimName = 'PCA_LIMMA',
title = 'PCA After Correction')
If the cell typing is already given, it is strongly recommended to specify shape = {colData colname for cell typing}
in plotSCEDimReduceColData()
to visualize the grouping simultaneously.


Source code for addressbook.model
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# addressbook
# https://github.com/tgorka/addressbook
#
# Copyright (C) 2016 Tomasz Gorka <http://tomasz.gorka.org.pl>
#
import uuid
import datetime
from addressbook import exception, trie
[docs]class AddressBook:
"""
Address Book structure contains groups and persons.
"""
def __init__(self):
"""
Initialize address book with all the needed structures
"""
# initialize groups and persons
self.groups = set()
self.persons = set()
# hash maps for searching over first and the last person name
self.first_names = {}
self.last_names = {}
# hash maps for searching over email and trie with emails
self.emails = {}
self.emailsTrie = trie.Trie()
[docs] def add_person(self, person):
"""
Add a person to the address book.
:param person: to add
:raises AlreadyPresentException: person is already added
"""
if person in self.persons:
raise exception.AlreadyPresentException(
'Person %s has been already added.' % person.name)
self.persons.add(person)
for group in person.groups:
# double check if group is not already in the address book
if group not in self.groups:
self.groups.add(group)
# add index for first and the last name for searching
self.first_names.setdefault(person.first_name.lower(), set()).add(person)
self.last_names.setdefault(person.last_name.lower(), set()).add(person)
# add index for email for searching
for email in person.emails:
self.emails.setdefault(email.lower(), set()).add(person)
self.emailsTrie.add(email.lower())
[docs] def add_group(self, group):
"""
Add a group to the address book.
:param group: to add
:raises AlreadyPresentException: group is already added
"""
if group in self.groups:
raise exception.AlreadyPresentException(
'Group %s has been already added.' % group.name)
self.groups.add(group)
for person in group.persons:
# double check if group is set for the person
if group not in person.groups:
person.groups.add(group)
if person not in self.persons:
self.add_person(person)
[docs] def find_persons_by_group(self, group):
"""
Given a group we want to easily find its members.
:param group: to filter
:return: set of persons
"""
return group.persons
[docs] def find_groups_by_person(self, person):
"""
Given a person we want to easily find the groups the person belongs to.
:param person: to filter
:return: set of groups
"""
return person.groups
[docs] def find_persons_by_name(self, first_name=None, last_name=None):
"""
Find person by name (can supply either first name, last name, or both).
:param first_name: first name of the person
:param last_name: last name of the person
:return: set of persons
"""
# get the sets of persons by first name and last name
persons_by_first_name = self.first_names.get(first_name.lower(), set()) \
if first_name is not None else self.persons
persons_by_last_name = self.last_names.get(last_name.lower(), set()) \
if last_name is not None else self.persons
# return the common part of this 2 sets
return persons_by_first_name & persons_by_last_name
[docs] def find_persons_by_email(self, email_prefix):
"""
Find person by email address (can supply either the exact string or
a prefix string, ie. both<EMAIL_ADDRESS>and "alex").
:param email_prefix: to find the person
:return: set of persons
"""
persons = set()
for email in self.emailsTrie.get(email_prefix.lower()):
persons |= self.emails.get(email, set())
return persons
[docs]class Person:
"""
Person structure:
- A person has a first name and a last name.
- A person has one or more street addresses.
- A person has one or more email addresses.
- A person has one or more phone numbers.
- A person can be a member of one or more groups.
"""
def __init__(self, first_name, last_name, id=None):
"""
Initialize Person with all needed structures.
If id is None the default one will be generated using UUID algorithm.
IMPORTANT: recognize person by id not by name because sometimes
a few people has the same name (the first and the last one)
:param first_name: of the person.
:param last_name: of the person.
:param id: identifier of the person. None by default.
"""
self.__id = id if id is not None else uuid.uuid4()
self.creation_date = datetime.datetime.now()
self.first_name = first_name
self.last_name = last_name
self.emails = set()
self.phones = set()
self.addresses = set()
self.groups = set()
@property
def name(self):
"""
Get simplified name based of first name and second name
:return: full name
"""
return "%s %s" % (self.first_name, self.last_name)
@property
def id(self):
return self.__id
@id.setter
def id(self, id):
raise Exception("Can't change the ID, once it has ben set in "
+ "the constructor.")
def __eq__(self, other):
"""
Equal method
Use id to equal 2 persons by id.
So it will work even if person has changed the name and only one object
will represent current state.
:param other: object to compare
:return: is the same
"""
if isinstance(other, self.__class__):
return self.id is other.id
return False
def __ne__(self, other):
"""
Not equal method
Use id to equal 2 persons by id.
So it will work even if person has changed the name and only one object
will represent current state.
:param other: object to compare
:return: is different
"""
if isinstance(other, self.__class__):
return self.id is not other.id
return True
def __hash__(self):
"""
Hash method
Use hash of the id property.
:return: hash code
"""
return hash(self.id)
[docs]class Address:
"""
Address structure.
"""
def __init__(self, *street_address_lines):
"""
Initialize Address with all needed structures.
:param street_address_lines: all the lines needed to be in the envelope.
"""
self.street_address_lines = street_address_lines
self.creation_date = datetime.datetime.now()
[docs]class Group:
"""
Group structure.
"""
def __init__(self, name):
"""
Initialize Group with all needed structures.
The persons connected to th group will be empty at the beginning.
:param name: of the group.
"""
self.name = name
self.creation_date = datetime.datetime.now()
self.persons = set()


I'm only 13. Just clearing that up one night me and my freind troy bought some herbal xtc I did'ent think it would work so I popped 5 my friend did 2.
30 min smoked a boul have a slight buzz similar to about 3 cups of coffee.
1.00 very talkitive finding it hard to stay still just want to talk alot me and my friend took a walk to the store and bought some gum and a soda.
1.30 very mild closed eye visals mind felling very spacy then a extreme wave of happyness hit me for about 30 sec.
2.00 wearing off still feal spacy.
3.00 left with a mild headace.
This was a pretty good buzz for 15.00 but if your looking for a real trip stick with the real deal like I do now.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


[net] = evidence(net, x, t) [net, gamma, logev] = evidence(net, x, t, num)
[net] = evidence(net, x, t)
re-estimates the
hyperparameters alpha
and beta
by applying Bayesian
re-estimation formulae for num
iterations. The hyperparameter
alpha
can be a simple scalar associated with an isotropic prior
on the weights, or can be a vector in which each component is
associated with a group of weights as defined by the index
matrix in the net
data structure. These more complex priors can
be set up for an MLP using mlpprior
. Initial values for the iterative
re-estimation are taken from the network data structure net
passed as an input argument, while the return argument net
contains the re-estimated values.
[net, gamma, logev] = evidence(net, x, t, num)
allows the re-estimation
formula to be applied for num
cycles in which the re-estimated
values for the hyperparameters from each cycle are used to re-evaluate
the Hessian matrix for the next cycle. The return value gamma
is
the number of well-determined parameters and logev
is the log
of the evidence.
mlpprior
, netgrad
, nethess
, demev1
, demard
Copyright (c) Ian T Nabney (1996-9)


The second post title
Some subtitle goes here sasddasd foo bar baz again
This is the excerpt:
Some other nice info goes in here bal bla bla Some new stuff
My second post!
Some other nice info goes in here bal bla bla Some new stuff
This is the excerpt:
Some other nice info goes in here bal bla bla Some new stuff
Some other nice info goes in here bal bla bla Some new stuff
No rights reserved


Forget dependencies. Everything you need in one binary.
Get startedZola comes as a single executable with Sass compilation, syntax highlighting, table of contents and many other features that traditionally require setting up a dev environment or adding some JavaScript libraries to your site.
The average site will be generated in less than a second, including Sass compilation and syntax highlighting.
Zola renders your whole site as static files, making it trivial to handle any kind of traffic you will throw at it at no cost without having to worry about managing a server or a database.
From the CLI to the template engine, everything is designed to be intuitive. Don't take my word for it though, look at the documentation and see for yourself.
Zola gets out of your way so you can focus on your content, be it a blog, a knowledge base, a landing page or a combination of them.
Zola comes with shortcodes and internal links to make it easier to write your content.


Introduction
Cay is the front-end application for Coral.
It’s made up of a series of React components, compiled into modules with webpack.
The webpack build process results in a bundle.js
file, which contains all Javascript and CSS for Cay. Common issues like CSS cross-browser issues, ES6 transpilation, and minification are all handled by webpack. bundle.js
lives in-memory until build time (npm run build
).
Source code folder structure
.
+-- .github
+-- assets -> nginx config
+-- css
+-- dist -> built files
+-- fonts
+-- lang
+-- public -> images and config
config.json -> environment variables and such
data_config.json -> filters and dimension defs
+-- src
| +-- app -> top-level route views connected to Redux
| +-- layout
| AppActions.js
| AppReducer.js
| MainReducer.js
... other page-level (stateful) components
| +-- auth
| +-- comments -> any UI and redux for Comments
| +-- components -> re-usable generic UI components
| +-- explorer -> data visualization explorer domain
| +-- filters -> any UI and redux for Filters
| +-- search -> any UI and redux for Searches
| +-- i18n -> internationalization wrappers
| +-- tags -> any UI and redux for Tags
| +-- users -> any UI and redux for Users
index.js -> entry point for app
settings.js -> colors for the app
store.js -> redux store
+-- test -> mirrors the src folder
The meat of the application lives in the /src
folder. Components are grouped into subdirectories based on their “domain”: for instance, everything that has to do with creating, viewing and editing searches lives in the search
folder. Similarly, everything having to do with tags lives in the tags
folder.
The reducers are combined in /src/app/MainReducer.js
.
Cay installation
Installing from source
Before you begin
Before you begin, be sure you have the following installed and running:
In addition, you must have Node.js installed:
- Node.js
- You must be running version 5.0.0 or higher of node. You can check your current version of node with the command
node --version
- We recommend using nvm to manage your node installations.
- You must be running version 5.0.0 or higher of node. You can check your current version of node with the command
Get the source
Clone the Cay repository onto your machine:
git clone https://github.com/coralproject/cay.git
cd into the Cay directory:
cd cay
And perform an npm install
:
npm install
Set up configuration file
The folder called public
has a sample configuration file, called config.sample.json
. Copy this file to a new file called config.json
, that you will edit:
cp public/config.sample.json public/config.json
Now, edit the config.json file.
{
"xeniaHost": "",
"pillarHost": "",
"elkhornHost": "",
"elkhornStaticHost": "",
"environment": "development",
"brand": "",
"googleAnalyticsId": "UA-12345678-9",
"requireLogin": false,
"basicAuthorization": "",
"features": {
"trust": true,
"ask": true
}
}
Required edits:
xeniaHost
: The URL where Xenia is running.- If you installed Xenia locally from source,
xeniaHost
should behttp://localhost:4000/1.0/exec/
.
- If you installed Xenia locally from source,
pillarHost
: The URL where Pillar is running.- If you installed Pillar locally from source,
pillarHost
should behttp://localhost:8080
. - If you installed Pillar locally as a Docker container,
pillarHost
should behttp://<IP_ADDRESS>:8080
.http://<IP_ADDRESS>
is the URL generated by Docker.
- If you installed Pillar locally from source,
elkhornHost
: The URL where Elkhorn is running.- If you installed locally from source,
elkhornHost
should behttp://localhost:4444
.
- If you installed locally from source,
features
: The fields in features allow to toggle the features for the different products on and off.trust
: When set totrue
, this will show Trust functionality (such as “Create a Search.”) When set tofalse
, it will hide Trust functionality. If this is not set, it will default totrue
.ask
: When set totrue
, this will show Ask functionality (such as “Create Form.”) When set tofalse
, it will hide Ask functionality.
Optional edits:
environment
:brand
:googleAnalyticsId
:requireLogin
:basicAuthorization
:
Run the app
You can now start Cay by running npm start:
npm start
You can now visit Cay by visiting the URL http://localhost:3000.


How It Works
Products
Support
Subscribe to our newsletter for the latest updates
How It Works
Our Products
Surface Headphones
$39.00
Order now
Logiix Base
$49.99
Order now
Headphones headset wireless
$14.75
Order now
Recon 70
$39.95
Order now
RZE-G902H
$120.27
Order now
PDP LVL50
$14.75
Order now
Support
forum
Forums
campaign
News


Markdown Style
h1 - header 1
h2 - header 2
h3 - header 3
h4 - header 4
h5 - header 5
h6 - header 6
But this is not the half; look again. I freely assert, that the cosmopolite philosopher cannot, for his life, point out one single peaceful influence, which within the last sixty years has operated more potentially upon the whole broad world, taken in one aggregate, than the high and mighty business of whaling. One way and another, it has begotten
“Practically also, Mr. Stuart.” “I’d like to see you do it in eighty days.” “It depends on you. Shall we go?” “Heaven preserve me! But I would wager four thousand pounds that such a journey, made under these conditions, is impossible.” “Quite possible, on the contrary,” returned Mr. Fogg. “Well, make it, then!” “The journey round the world in eighty days?” “Yes.” “I should like
- listing
- items
- looks like
- this
What surprised Sola most in me was that while I could catch telepathic messages easily from others, and often when they were not intended for me, no one could read a jot from my mind under any circumstances. At first this vexed me, but later I was very glad of it, as it gave me an undoubted advantage over the Martians. The third day after the incubator ceremony we set forth toward home, but scarcely had the head of the procession debouched into the open ground before the city than orders were given for an immediate and hasty return. As
- ordered
- items
- looks like
- this
Hugo is The Fast and Flexible Static Site Generator!

Company Name

Content goes here

© 2013 Company Name

This HTML


Love Death and Robots
Recently I was introduced to this nearly cult anthology produced by David Fincher (producer/director of some of my favourites – Mindhunter, House of Cards, Fight Club, Alien, The Girl with the Dragon Tattoo, The Case of Benjamin Button) called Love, Death, and Robots (LD+R, in short). The anthology is a potpourri of animated stories of varying length and varying animation styles by various artists. Thanks to Vajra for introducing this to me!
One could think on most of them ad infinitum, but I was blown away by the concept of Zima Blue and the radical cinematography/animation of The Witness. This Saturday was the day of fangirling a bit; to Fincher, yet another awesome Miller and to LD+R! Let the jam be-gin!
Idea:
To have a new whatsapp DP every day for a good number of days (I know, it is cheeky. But fangirling is irrational, :))
Inspiration:
Left side of the image which can be used as a whatsapp DP
Primal mind:
Make one everyday(inkscape), export as jpg, save it on some cloud (google photos), download it to phone, have a DP
Bored mind on RedBull:
Make a processing sketch (it’s been long since I have used processing)
Help:
Cheers to Michael Chernyak & Ofer Ariel who took the toil of making each and every icon from the anthology and providing them in 8 different formats
Here’s an open source+quick+sketchy processing/processingJS sketch for your perusal and use-al 8P. Click on reload button to generate various square images. If your browser allows pop-ups, it will also download a square image to your file system. Use it however, whenever, wherever, but at your own discretion 8).
Find the sketch here
If unable to view properly, view in full viewport here
PS: Since this is licensed under CC, feel free to use the images rendered through this sketch and the sketch itself in any manner, however you wish. Some example usages of the rendered images is t-shirts, mugs, social media profile pics, etc.


OperServ |
deoxy.org/chat :
IRC Commands |
Server Status—MOTD Services : NickServ | ChanServ | MemoServ | BotServ Aliases | Privacy/Security | SearchBot | Java Clients |
OperServ commands: GLOBAL Send a message to all users STATS Show status of Services and network OPER LIST List all Services operators ADMIN LIST List all Services admins STAFF Display Services staff and online status
Syntax: /msg OperServ GLOBAL message Allows IRCops to send messages to all users on the network. The message will be sent from the nick OperServ.
Syntax: /msg OperServ STATS [AKILL | ALL | RESET] Without any option, shows the current number of users and IRCops online (excluding Services), the highest number of users online since Services was started, and the length of time Services has been running. With the AKILL option, displays the current size of the AKILL list and the current default expiry time. The ALL option is available only to Services admins, and displays information on Services' memory usage. Using this option can freeze Services for a short period of time on large networks, so don't overuse it! The RESET option currently resets the maximum user count to the number of users currently present on the network. UPTIME may be used as a synonym for STATS.
Syntax: /msg OperServ OPER ADD nick OPER DEL {nick | entry-num | list} OPER LIST [mask | list] OPER CLEAR Allows the Services admins to add or remove nicknames to or from the Services operator list. A user whose nickname is on the Services operator list and who has identified to OperServ will be able to access Services operator commands. The OPER ADD command adds the given nickname to the Services operator list. The OPER DEL command removes the given nick from the Services operator list. If a list of entry numbers is given, those entries are deleted. (See the example for LIST below.) The OPER LIST command displays the Services operator list. If a wildcard mask is given, only those entries matching the mask are displayed. If a list of entry numbers is given, only those entries are shown; for example: OPER LIST 2-5,7-9 Lists Services operator entries numbered 2 through 5 and 7 through 9. The OPER CLEAR command clears all entries of the Services operator list. Any IRC operator may use the OPER LIST form of the command. All other use limited to Services admins.
Syntax: /msg OperServ ADMIN ADD nick ADMIN DEL {nick | entry-num | list} ADMIN LIST [mask | list] ADMIN CLEAR Allows the Services root to add or remove nicknames to or from the Services admin list. A user whose nickname is on the Services admin list and who has identified to OperServ will be able to access Services admin commands. The ADMIN ADD command adds the given nickname to the Services admin list. The ADMIN DEL command removes the given nick from the Services admin list. If a list of entry numbers is given, those entries are deleted. (See the example for LIST below.) The ADMIN LIST command displays the Services admin list. If a wildcard mask is given, only those entries matching the mask are displayed. If a list of entry numbers is given, only those entries are shown; for example: ADMIN LIST 2-5,7-9 Lists Services admin entries numbered 2 through 5 and 7 through 9. The ADMIN CLEAR command clears all entries of the Services admin list. Any IRC operator may use the ADMIN LIST form of the command. All other use limited to Services root.
Syntax: /msg OperServ IGNORE {ADD|DEL|LIST|CLEAR} [time] [nick] Allows Services Admins to make Services ignore a nick for a certain time or until the next restart. The default time format is seconds. You can specify it by using units. Valid units are: s for seconds, m for minutes, h for hours and d for days. Combinations of these units are not permitted. To make Services permanently ignore the user type 0 as time.
Syntax: /msg OperServ MODE channel modes Allows Services operators to set channel modes for any channel. Parameters are the same as for the standard /MODE command. Limited to Services operators.
Syntax: /msg OperServ UMODE user modes Allows Services admins to set user modes for any user. Parameters are the same as for the standard /MODE command. Limited to Services admins.
Syntax: /msg OperServ OLINE user flags Allows Services admins to give Operflags to any user. Flags have to be prefixed with a "+" or a "-". To remove all flags simply type a "-" instead of any flags. Limited to Services admins.
Syntax: /msg OperServ CLEARMODES channel [ALL] Clears all binary modes (i,k,l,m,n,p,s,t) and bans from a channel. If ALL is given, also clears all ops and voices (+o and +v modes) from the channel. Limited to Services operators.
Syntax: /msg OperServ KICK channel user reason Allows IRCops to kick a user from any channel. Parameters are the same as for the standard /KICK command. The kick message will have the nickname of the IRCop sending the KICK command prepended; for example: *** SpamMan has been kicked off channel #my_channel by OperServ (Alcan (Flood)) Limited to Services operators.
Syntax: /msg OperServ AKILL ADD [+expiry] mask reason AKILL DEL {mask | entry-num | list} AKILL LIST [mask | list] AKILL VIEW [mask | list] AKILL CLEAR Allows Services operators to manipulate the AKILL list. If a user matching an AKILL mask attempts to connect, Services will issue a KILL for that user and, on supported server types, will instruct all servers to add a ban (K-line) for the mask which the user matched. AKILL ADD adds the given user@host/ip mask to the AKILL list for the given reason (which must be given). expiry is specified as an integer followed by one of d (days), h (hours), or m (minutes). Combinations (such as 1h30m) are not permitted. If a unit specifier is not included, the default is days (so +30 by itself means 30 days). To add an AKILL which does not expire, use +0. If the usermask to be added starts with a +, an expiry time must be given, even if it is the same as the default. The current AKILL default expiry time can be found with the STATS AKILL command. The AKILL DEL command removes the given mask from the AKILL list if it is present. If a list of entry numbers is given, those entries are deleted. (See the example for LIST below.) The AKILL LIST command displays the AKILL list. If a wildcard mask is given, only those entries matching the mask are displayed. If a list of entry numbers is given, only those entries are shown; for example: AKILL LIST 2-5,7-9 Lists AKILL entries numbered 2 through 5 and 7 through 9. AKILL VIEW is a more verbose version of AKILL LIST, and will show who added an AKILL, the date it was added, and when it expires, as well as the user@host/ip mask and reason. AKILL CLEAR clears all entries of the AKILL list. Limited to Services operators.
Syntax: /msg OperServ SGLINE ADD [+expiry] mask:reason SGLINE DEL {mask | entry-num | list} SGLINE LIST [mask | list] SGLINE VIEW [mask | list] SGLINE CLEAR Allows Services operators to manipulate the SGLINE list. If a user with a realname matching an SGLINE mask attempts to connect, Services will not allow it to pursue his IRC session. SGLINE ADD adds the given realname mask to the SGLINE list for the given reason (which must be given). expiry is specified as an integer followed by one of d (days), h (hours), or m (minutes). Combinations (such as 1h30m) are not permitted. If a unit specifier is not included, the default is days (so +30 by itself means 30 days). To add an SGLINE which does not expire, use +0. If the realname mask to be added starts with a +, an expiry time must be given, even if it is the same as the default. The current SGLINE default expiry time can be found with the STATS AKILL command. Note: because the realname mask may contain spaces, the separator between it and the reason is a colon. The SGLINE DEL command removes the given mask from the SGLINE list if it is present. If a list of entry numbers is given, those entries are deleted. (See the example for LIST below.) The SGLINE LIST command displays the SGLINE list. If a wildcard mask is given, only those entries matching the mask are displayed. If a list of entry numbers is given, only those entries are shown; for example: SGLINE LIST 2-5,7-9 Lists SGLINE entries numbered 2 through 5 and 7 through 9. SGLINE VIEW is a more verbose version of SGLINE LIST, and will show who added an SGLINE, the date it was added, and when it expires, as well as the realname mask and reason. SGLINE CLEAR clears all entries of the SGLINE list. Limited to Services operators.
Syntax: /msg OperServ SQLINE ADD [+expiry] mask:reason SQLINE DEL {mask | entry-num | list} SQLINE LIST [mask | list] SQLINE VIEW [mask | list] SQLINE CLEAR Allows Services operators to manipulate the SQLINE list. If a user with a nick matching an SQLINE mask attempts to connect, Services will not allow it to pursue his IRC session. If the first character of the mask is #, services will prevent the use of matching channels (on IRCds that support it). SQLINE ADD adds the given mask to the SQLINE list for the given reason (which must be given). expiry is specified as an integer followed by one of d (days), h (hours), or m (minutes). Combinations (such as 1h30m) are not permitted. If a unit specifier is not included, the default is days (so +30 by itself means 30 days). To add an SQLINE which does not expire, use +0. If the mask to be added starts with a +, an expiry time must be given, even if it is the same as the default. The current SQLINE default expiry time can be found with the STATS AKILL command. The SQLINE DEL command removes the given mask from the SQLINE list if it is present. If a list of entry numbers is given, those entries are deleted. (See the example for LIST below.) The SQLINE LIST command displays the SQLINE list. If a wildcard mask is given, only those entries matching the mask are displayed. If a list of entry numbers is given, only those entries are shown; for example: SQLINE LIST 2-5,7-9 Lists SQLINE entries numbered 2 through 5 and 7 through 9. SQLINE VIEW is a more verbose version of SQLINE LIST, and will show who added an SQLINE, the date it was added, and when it expires, as well as the mask and reason. SQLINE CLEAR clears all entries of the SQLINE list. Limited to Services operators.
Syntax: /msg OperServ SZLINE ADD [+expiry] mask reason SZLINE DEL {mask | entry-num | list} SZLINE LIST [mask | list] SZLINE VIEW [mask | list] SZLINE CLEAR Allows Services operators to manipulate the SZLINE list. If a user with an IP matching an SZLINE mask attempts to connect, Services will not allow it to pursue his IRC session (and this, whether the IP has a PTR RR or not). SZLINE ADD adds the given IP mask to the SZLINE list for the given reason (which must be given). expiry is specified as an integer followed by one of d (days), h (hours), or m (minutes). Combinations (such as 1h30m) are not permitted. If a unit specifier is not included, the default is days (so +30 by itself means 30 days). To add an SZLINE which does not expire, use +0. If the realname mask to be added starts with a +, an expiry time must be given, even if it is the same as the default. The current SZLINE default expiry time can be found with the STATS AKILL command. The SZLINE DEL command removes the given mask from the SZLINE list if it is present. If a list of entry numbers is given, those entries are deleted. (See the example for LIST below.) The SZLINE LIST command displays the SZLINE list. If a wildcard mask is given, only those entries matching the mask are displayed. If a list of entry numbers is given, only those entries are shown; for example: SZLINE LIST 2-5,7-9 Lists SZLINE entries numbered 2 through 5 and 7 through 9. SZLINE VIEW is a more verbose version of SZLINE LIST, and will show who added an SZLINE, the date it was added, and when it expires, as well as the IP mask and reason. SZLINE CLEAR clears all entries of the SZLINE list. Limited to Services operators.
Syntax: /msg OperServ SET option setting Sets various global Services options. Option names currently defined are: READONLY Set read-only or read-write mode LOGCHAN Report log messages to a channel DEBUG Activate or deactivate debug mode NOEXPIRE Activate or deactivate no expire mode SUPERADMIN Activate or deactivate super-admin mode Limited to Services admins.
Syntax: /msg OperServ SET READONLY {ON | OFF} Sets read-only mode on or off. In read-only mode, normal users will not be allowed to modify any Services data, including channel and nickname access lists, etc. IRCops with sufficient Services privileges will be able to modify Services' AKILL list and drop or forbid nicknames and channels, but any such changes will not be saved unless read-only mode is deactivated before Services is terminated or restarted. This option is equivalent to the command-line option -readonly.
Syntax: /msg OperServ SET LOGCHAN {ON | OFF} With this setting on, Services will send its logs to a specified channel as well as the log file. LogChannel must also be defined in the Services configuration file for this setting to be of any use. Note: This can have strong security implications if your log channel is not properly secured.
Syntax: /msg OperServ SET DEBUG {ON | OFF | num} Sets debug mode on or off. In debug mode, all data sent to and from Services as well as a number of other debugging messages are written to the log file. If num is given, debug mode is activated, with the debugging level set to num. This option is equivalent to the command-line option -debug.
Syntax: /msg OperServ SET NOEXPIRE {ON | OFF} Sets no expire mode on or off. In no expire mode, nicks, channels, akills and exceptions won't expire until the option is unset. This option is equivalent to the command-line option -noexpire.
Syntax: /msg OperServ SET SUPERADMIN {ON | OFF} Setting this will grant you extra privlages such as the ability to be "founder" on all channel's etc... This opion is not persistant, and should only be used when needed, and set back to OFF when no longer needed.
Syntax: /msg OperServ NOOP SET server NOOP REVOKE server NOOP SET remove all O:lines of the given server and kill all IRCops currently on it to prevent them from rehashing the server (because this would just cancel the effect). NOOP REVOKE makes all removed O:lines available again on the given server. Note: The server is not checked at all by the Services. Limited to Services admins.
Syntax: /msg OperServ JUPE server [reason] Tells Services to jupiter a server -- that is, to create a fake "server" connected to Services which prevents the real server of that name from connecting. The jupe may be removed using a standard SQUIT. If a reason is given, it is placed in the server information field; otherwise, the server information field will contain the text "Juped by <nick>", showing the nickname of the person who jupitered the server. Limited to Services admins.
Syntax: /msg OperServ RAW text Sends a string of text directly to the server to which Services is connected. This command has a very limited range of uses, and can wreak havoc on a network if used improperly. DO NOT USE THIS COMMAND unless you are absolutely certain you know what you are doing! Limited to Services admins.
Syntax: /msg OperServ UPDATE Causes Services to update all database files as soon as you send the command. Limited to Services admins.
Syntax: /msg OperServ RELOAD Causes Services to reload the configuration file. Note that some directives still need the restart of the Services to take effect (such as Services' nicknames, activation of the session limitation, etc.) Limited to Services admins.
Syntax: /msg OperServ QUIT Causes Services to do an immediate shutdown; databases are not saved. This command should not be used unless damage to the in-memory copies of the databases is feared and they should not be saved. For normal shutdowns, use the SHUTDOWN command. Limited to Services admins.
 Limited to Services admins.
Syntax: /msg OperServ RESTART Causes Services to save all databases and then restart (i.e. exit and immediately re-run the executable). Limited to Services admins.
Syntax: /msg OperServ KILLCLONES nick Kills all users who have the same hostname as nick. A temporary AKILL, in the form *@host, is added to prevent the offending clients from immediately reconnecting. A wallops is also sent indicating who used the command, which host was affected and how many users were killed. It's usefull for removing numerous clones from the network. Limited to Services operators.
Syntax: /msg OperServ CHANLIST [{pattern | nick} [SECRET]] Lists all channels currently in use on the IRC network, whether they are registered or not. If pattern is given, lists only channels that match it. If a nickname is given, lists only the channels the user using it is on. If SECRET is specified, lists only channels matching pattern that have the +s or +p mode. Limited to Services admins.
Syntax: /msg OperServ USERLIST [{pattern | channel} [INVISIBLE]] Lists all users currently online on the IRC network, whether their nick is registered or not. If pattern is given, lists only users that match it (it must be in the format nick!user@host). If channel is given, lists only users that are on the given channel. If INVISIBLE is specified, only users with the +i flag will be listed. Limited to Services admins.
Syntax: /msg OperServ CACHE DEL hostname CACHE LIST pattern [QUEUED | ALL] The CACHE DEL command deletes the specified hostname from the cache. This is meant for debug purpose only. The CACHE LIST command lists all found proxies that match the given pattern. If the QUEUED option is given, it will list the queued or in progress scans instead, and if the ALL option is given, it will list all cached hostnames. Limited to Services admins.
Syntax: /msg OperServ EXCEPTION ADD [+expiry] mask limit reason EXCEPTION DEL {mask | list} EXCEPTION MOVE num position EXCEPTION LIST [mask | list] EXCEPTION VIEW [mask | list] Allows Services admins to manipulate the list of hosts that have specific session limits - allowing certain machines, such as shell servers, to carry more than the default number of clients at a time. Once a host reaches it's session limit, all clients attempting to connect from that host will be killed. Before the user is killed, they are notified, via a /NOTICE from OperServ, of a source of help regarding session limiting. The content of this notice is a config setting. EXCEPTION ADD adds the given host mask to the exception list. Note that nick!user@host and user@host masks are invalid! Only real host masks, such as box.host.dom and *.host.dom, are allowed because sessions limiting does not take nick or user names into account. limit must be a number greater than or equal to zero. This determines how many sessions this host may carry at a time. A value of zero means the host has an unlimited session limit. See the AKILL help for details about the format of the optional expiry parameter. EXCEPTION DEL removes the given mask from the exception list. EXCEPTION MOVE moves exception num to position. The exceptions inbetween will be shifted up or down to fill the gap. EXCEPTION LIST and EXCEPTION VIEW show all current exceptions; if the optional mask is given, the list is limited to those exceptions matching the mask. The difference is that EXCEPTION VIEW is more verbose, displaying the name of the person who added the exception, it's session limit, reason, host mask and the expiry date and time. Note that a connecting client will "use" the first exception their host matches. Large exception lists and widely matching exception masks are likely to degrade services' performance. Limited to Services admins.
Syntax: /msg OperServ SESSION LIST threshold SESSION VIEW host Allows Services admins to view the session list. SESSION LIST lists hosts with atleast threshold sessions. The threshold must be a number greater than 1. This is to prevent accidental listing of the large number of single session hosts. SESSION VIEW displays detailed information about a specific host - including the current session count and session limit. The host value may not include wildcards. See the EXCEPTION help for more information about session limiting and how to set session limits specific to certain hosts and groups thereof. Limited to Services admins.


{%extends "base.html"%} {%block content%}
{%for business in businesses%} Businesses in {{business.neighborhood}} {%endfor%}
Owner: {{business.user.user_profile.name}}
Email: {{business.email}}


{% bs3_extends "cms_bs3_theme/base_theme.html" %} {% load cms_tags static %} {% block content %}
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
WEB DESIGNER - BLACKTIE.CO
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.


{% extends 'base.html' %} {% block content %}
Why do I need to link my account?
Don't have a social media account?


Qpid JMS AMQP 0-x 6.3.0 Release Notes
Qpid JMS AMQP 0-x is JMS 1.1 compatible client which can speak AMQP 0-8,0-9,0-9-1 and 0-10.
For more information about this release, including download links and
documentation, see the release overview.
New features and improvements
- QPID-7292 - Qpid clients should verify the server-final message when using SCRAM-* authentication
- QPID-7466 - [Java Broker, Java Client for AMQP 0-8 to 0-10] Improve documentation for end-to-end encryption
- QPID-7476 - [Java Client] Improve error message when timeout exception thrown in commit
- QPID-7524 - [Java Client] New lines should be specified with '%n' in calls to String.format
- QPID-7530 - [Java Client] AMQSession_0_8#isQueueExist contains dead code intending to send passive queue declaration when queue is bound to a default exchange and assert flag is set to true
- QPID-7532 - [Java] Replace AMQConstant class with constant integer error codes
- QPID-7533 - [Java Broker] Implement wd12 version of the AMQP Management working draft
- QPID-7538 - [Java Client] Improve handling of hanshake status codes in SSLSender
- QPID-7622 - Separate Qpid Broker for Java and 0-x JMS Client in source tree
- QPID-7718 - Tidy up 0-x JMS Client source tree following separation from Broker.
- QPID-7725 - Remove direct byte buffer implementation
- QPID-7726 - Upgrade SLF4J to 1.7.25
- QPID-7737 - [JMS AMQP 0-x Client] Upgrade SLF4j to 1.7.25
- QPID-7778 - [Java Broker, Documentation] The Message encryption pages should mention that they require the Unlimited Strength JCE
- QPID-7779 - [Qpid JMS Client 0-x] [0-8..0-91] sasl_mechs and other SASL connection options not supported
- QPID-8018 - [Java Client, AMQP 0-x] Clarify error message when connection times out
- QPID-8034 - [Qpid JMS AMQP 0-x] Update bundling to follow project conventions
Bugs fixed
- QPID-7505 - [JMS AMQP 0-x Client] [AMQP 0-10] Synchronous #receive(long) might return null even though there are messages on the queue and client has enough credit
- QPID-7507 - AMQSession_0_10.isQueueExist() fails with NPE if SessionException does not have a cause
- QPID-7535 - [Java Client] Strengthen notification between threads holding dispatcher lock
- QPID-7537 - Improve implementations of equal methods in various classes to be able to account for sub-classes
- QPID-7544 - [Java Client][AMQP 0-10] After resending a previously sent Message, the JMSMessageId is not updated
- QPID-7692 - [Java Broker, 0-8..0-91] Message sent to fanout exchange with no routing key is not delivered to application
- QPID-7774 - [JMS Client 0-x] [0-8..0-91] MessageConsumer#receiveNoWait() always returns null after a successful failover
- QPID-7888 - [Java Client] [Documentation] Correct typo in end to end encryption connection url examples
- QPID-7897 - [Java 0-8...0-9-1 Client] Message#getJMSCorrelationIDAsBytes() erroneously first converts to string before retreiving bytes
- QPID-7898 - [Java 0-8...0-9-1 Client] Calling getJMSReplyTo on a received message can lead to NullPointerException
- QPID-7899 - [Java 0-8...0-9-1 Client] Message#setJMSCorrelationIDAsBytes() erroneously converts the bytes to string
- QPID-7964 - [Java Client, AMQP 0-x] SCRAM SASL implementation incorrectly encodes "=" and "," for passwords
- QPID-8033 - [Qpid JMS AMQP 0-x] An establishment of connection times out if an exception is thrown from ConnectionStartMethoHandler due to unsupported sasl mechanisms
Tasks
- QPID-7628 - [java] update to current apache parent pom
- QPID-7716 - Remove AMQP 0-10 based JCA/RA components from Qpid JMS 0-x Client
- QPID-7738 - [Qpid JMS AMQP 0-x Client] Migrate qpid-java svn to git
- QPID-7755 - add release scripts for qpid-broker-j and qpid-jms-amqp-0-x
Apache Qpid, Messaging built on AMQP; Copyright © 2015
The Apache Software Foundation; Licensed under
the Apache
License, Version 2.0; Apache Qpid, Qpid, Qpid Proton,
Proton, Apache, the Apache feather logo, and the Apache Qpid
project logo are trademarks of The Apache Software
Foundation; All other marks mentioned may be trademarks or
registered trademarks of their respective owners


A couple weeks ago we launched a new rack-mount server, which is kindly hosted by the ISC in their Redwood City, California data center. The sole purpose of this new server is to host static content, mostly i.creativecommons.org, which is probably the busiest domain CC has due to the license icons and badges being served from there.
Upon moving i.creativecommons.org to this new machine I noticed that there were terrible problems with connection timeouts when requesting images. After thrashing around for why this was happening, I used tcpdump
to grab some network traffic on the server and discovered that SYN requests were arriving at the machine and dying right there, with no subsequent SYN-ACK. At that point it was clear that this was not a Varnish or Apache problem, but something at a much lower level. After testing various TCP tweaks in the running kernel I discovered that setting net.ipv4.tcp_max_syn_backlog=2048
, up from the default of 256, and turning on net.ipv4.tcp_syncookies
seemed to resolve the connection timeout issues.
However, the kernel message log was filled with message like the following. In fact, there was one such message written to the log every minute:
possible SYN flooding on port 80. Sending cookies.
I was confused by this because ostensibly the site was functioning just fine. My understanding was that SYN cookies were only activated when the SYN queue filled up, but as far as I could tell I had increased the depth of the queue sufficiently to avoid that problem. I even tried setting net.ipv4.tcp_max_syn_backlog
arbitrarily high to see what would happen. Same result: site operated fine, but with SYN cookie kernel messages. In my testing I also discovered that disabling net.ipv4.tcp_syncookies
would immediately bring back the connection timeout problems. Additionally, netstat
revealed that though the site appeared to be functioning correctly, there were still an abnormally large amount of 'failed connection attempts' listed in the TCP stats.
I went over and over all the TCP settings and just couldn't figure out what was happening, nor did Google shed any light on this. I then decided to do this:
$ netstat -n | grep SYN_RECV | wc -l
I ran this command many times in a row over a period of time and was surprised to see that the result was nearly always 256, give or take a few. It then occurred to me that that number looked a lot like the default value of net.ipv4.tcp_max_syn_backlog
. However, as far as I knew (and know), all of those kernel parameters are supposed to be dynamic, capable of being changed on-the-fly, with sysctl
or writing directly to the /proc file system. So I set all my TCP changes in /etc/sysctl.conf
and rebooted the machine. Sure enough, since coming back up about a day ago I haven't seen a single kernel message about SYN cookies. I even decided to just disable SYN cookies altogether based on a recommendation to do so in the default /etc/sysctl.conf
file found on Debian systems.
The machine is now humming along nicely. For reference here are the TCP parameters I changed. The values were gleaned from various sites while doing extensive research on TCP tuning. Some of the values seem improbable to me, but don't seem to be having any perceptible negative impact, and were also recommended in TCP tuning articles on more than one site. I went ahead and implemented these settings on the rest of CC's servers as well:
net.ipv4.tcp_fin_timeout = 3
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_max_syn_backlog = 8192
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.somaxconn = 1024
vm.min_free_kbytes = 65536


Thank You For Participating!!!
You have been rewarded 100 e-books for participating, Download them by clicking below
!!!E-Certificate will be mailed to registered email on 26.01.2021!!!
>
An Auto biography
Agatha Christie
1984- George Orwell
Black-Beauty
A Suitable Boy
i Am Malala
If It's Not Forever
Life of Pi
Malgudi days
Midnight's children
Mystery short stories
One Indian Girl
Pride and Prejudice
Shame
This Side of Paradise
swami_and_friends
The Vendor of Sweets
The white tiger
The Call of the Wild
The alchemist
The Field of Ice
The Green Ray
You Were My Crush
Wings of Fire
Hamlet
King-lear
Kolaiyudir kaalam
All My Puny Sorrows
Parthiban Kanavu
ponniyin-selvan
Ready Player One
Romeo and Juliet
Thirukkural
the comedy of errors
The Jungle Book
TimeMachine
3 Men in a boat
The Last Samurai
ElDorado
Gitanjali
Go set a Watchman
Gullivers-Travels
Half Girlfriend
Heart of Darkness
Heaven is for Real
Helen Of Troy
Invisible Man
Julius Caesar
Kingdom of Ash
Five Little Pigs
Who Financed Hitler
My Inventions
Plays Pleasant
Star-wars-this-war
Star-wars-traits-of-descent
Around the World in Eighty Days
Cards On The Table By Agatha Christie
Charles Dickens_ Great Expectations
Dick Sands the Boy Captain
From the Earth to the Moon
Murder on the Orient Express
one night at the call-center
Sleeping Murder By Agatha Christie
The Abc Murders By Agatha Christie
A Brief History of Time
The Diary of A Young Girl
The Fault In Our Stars
The Girl with the Dragon Tattoo
The God of Small Things
2-2 states the story of my marriage
The Man in the brown suit
The New Annotated Sherlock Holmes
Three mistakes of my life
To Kill a Mocking Bird
Tom Sawyer-Mark Twain
War and peace-Leo Tolstoy
A Visit from the Goon Squad
Alls well that ends well
A midsummer nights dream
Ancillary Justice Imperial
Harry potter sorcerers-stone
Sivagamiyin Sabatham Part-1
The Buddha in the Attic
The Enemy By Susan Bowes
The Monk Who Sold His Ferrari
The Twins Paradox By Alan Gasparutti
The story of my life helen keller
Alices Adventures in Wonderland
The Old Man and the Sea
Murder At The Vicarage
Star-wars malignant metamorphosis
T.S.Eliot's The Waste Land
The Gifts of Imperfection
The Merchant of Venice
The Ministry of Utmost Happiness
The Philosophy Of Psychology
the-adventures-of-huckleberry-finn
The Mysterious Stranger and Other Stories
Miss Marple Mysteries The Thirteen Problems
The Thousand Autumns of Jacob de Zoet


Jacob Beck - Front-End Dev
Feel free to send me an email with any questions and I promise that I'll get back to you as soon as I can. I look forward to working with you!


"We Will Rebuild It When We Get Time"
Right? ...soon?
Dismantling the Monorail
Prioritize Efficiency
A Different Conceptual Model
It's Still Simple
Services
Not a Particularly New Idea
You're likely familiar with "the internet", a distributed system
Discrete Systems Lead to Specializing
Specializing Leads To Efficiency
Abstracted Logic Leads To Flexibility
Using the Right Tool for the Job
Best Technology For
Application Logic
User Interface
Persistence
These Are Almost Never the Same Answer
Reusable APIs
Implement Android, iOS, Google Glasses,
Kindles, Game Consoles,
Raspberry Pis, Desktops, Laptops,
e-paper Wristwatches, 3-D Printers,
Chatbots, Console Scripts, public APIs...
With No Special Code
Provided You Use
Common Protocols
Like RESTful JSON
Additional Complexity Opportunity
Partial Failure
Means The Entire Application Isn't Unavailable
Multiple Systems at Once
Highlights Communication Inefficiencies
More Complex Ops
Allows Scaling Specific Services
Shared Assets
Bundle Reusable Libraries
Fast Iterations
Which Is What We Wanted Anyway
Less Overhead
More Efficiently Used Servers and Developer Time
Less Frustration
Stop Digging Through SQL Injected In View Helpers
Getting There
Few People Are Starting from Nothing
Separate Data Structures into Libraries
Define Services
Break Out Existing Services into Modules
Define an Interface, like JSON over REST, and Refactor
Optimize Features Involving Many Services
Define a View in the Middle
Break out Service Modules into Servers
Delete Your Old Monolithic Repository


Timeline
|
Your CV
|
Opportunities
|
Application
|
Follow-Up
|
About Us
Looking to build up your Experience and meet like-minded people?
Click on each image to find out more of our Partners to get started:
Code First: Girls
McKinsey WFL
Stemettes
Womankind
Leading Women
Aspire Women
Girl Effect