List-Like object. ESM device tree interface.
__contains__
method returns: (bool
) True/None
the name or IP matches the provided search term.>>> from msiempy.device import DevTree >>> devtree = DevTree() >>> print("All Datasources") >>> print(devtree.get_text(fields=["parent_name", "name", "ds_id"]))
The script all_dev.py can help you list all your datasources.
>>> from msiempy import DevTree >>> devtree = DevTree() >>> devtree.add({ ... "name": "Test DS", ... "parent_id": "144116287587483648", ... "ds_ip": "<IP_ADDRESS>", ... "hostname": "testds.domain.ca", ... "type_id": "65" }) {'value': 1385420} # Wait a bit for the request >>> devtree.refresh() # Refresh the DevTree
DataSource
GRP_GETVIRTUALGROUPIPSLISTDATA
to assemble DevTree
object.| Method | __init__ | Create a new list |
| Instance Variable | data | Undocumented |
| Method | __contains__ | Returns: (bool ) True/None the name or IP matches the provided search term. |
| Method | search | Search a datasource in the DevTree. |
| Method | search_ds_group | Search datasources in the DevTree. |
| Method | refresh | Rebuilds the devtree |
| Method | recs | Returns: list of Receiver dict |
| Method | build_devtree | Coordinates assembly of the devtree object |
| Method | duplicate_datasource | Check for duplicate dataname name or IP address. |
| Method | add | Adds a datasource. |
| Method | add_client | Add a datasource client |
| Method | _get_devtree | Returns: ESM device tree; raw, but ordered, string. |
| Method | _format_devtree | Parse key fields from raw device strings into datasource dicts. |
| Method | _insert_rec_info | Adds parent_ids to datasources in the tree based upon the ordered list provided by the ESM. All the datasources below a Receiver row have it's id set as their parent ID. |
| Method | _get_client_containers | Filters DevTree for datasources that have client datasources. |
| Method | _merge_clients | Undocumented |
| Method | _get_clients | Get list of raw client strings. |
| Method | _format_clients | Parse key fields from _get_clients() output. Returns: list of dicts |
| Method | _get_zonetree | Retrieve zone data. |
| Method | _insert_zone_names | Arguments: - zonetree (str): Built by self._get_zonetree |
| Method | _get_zone_map | Builds a table of zone names to zone ids. Returns: dict (str: str) zone name : zone ids |
| Method | _insert_zone_ids | Undocumented |
| Method | _get_last_times | Returns: string with datasource names and last event times. |
| Method | _format_times | Formats the output of _get_last_times |
| Method | _insert_ds_last_times | Parse event times str and insert it into the _devtree |
| Method | _filter_bogus_ds | Filters objects that inaccurately show up as datasources sometimes. |
| Method | _cast_datasources | Undocumented |
| Method | _validate_ds_params | Validate parameters for new datasource. |
| Method | _validate_ds_tz_id | Validates datasource time zone id. |
| Static Method | _normalize_bool_vals | Recursively changes strings 'T', 'F' to bool |
Inherited from NitroList:
| Method | __str__ | str(obj) -> return text string. |
| Method | keys | List items keys. Every items should have the same set of keys. |
| Method | get_text | Return a csv or table string representation of the list |
| Method | text | Defaut table string, a shorcut to get_text() with no arguments. |
| Method | json | JSON list of dicts representing the list. |
| Method | perform | Wrapper to execute a function on the list of elements |
| Static Method | _confirm_func | Ask user inut to confirm the calling of func on elements . |
Inherited from NitroObject (via NitroList):
| Class | NitroJSONEncoder | Custom JSON encoder that will use the approprtiate propertie depending of the type of NitroObject. TODO support json json dumping of QueryFilers, may be by making them inherits from NitroDict. |
| Instance Variable | nitro | msiempy.core.session.NitroSession object. Interface to the SIEM. |
Create a new list
alist
: list object to wrap.bool
) True/None
the name or IP matches the provided search term.Search datasources in the DevTree.
generator
(list
) containing any matching DataSource
objects or None
.ValueError
: if field or term are NoneDoes not include client datasources.
Parse key fields from raw device strings into datasource dicts.
Adds parent_ids to datasources in the tree based upon the ordered list provided by the ESM. All the datasources below a Receiver row have it's id set as their parent ID.
Filters DevTree for datasources that have client datasources.
Get list of raw client strings.
ds_id
(str): Parent ds_id(s) are collected on initftoken
(str): Set and used after requesting clients for ds_idRetrieve zone data.
str
device tree string sorted by zoneszonetree
(str): Built by self._get_zonetreeReturns: List of dicts (str: str) devices by zone
Formats the output of _get_last_times
last_times
(str): string output from _get_last_times()list[dict]
: [{'name', 'model', 'last_time'}]Parse event times str and insert it into the _devtree
Filters objects that inaccurately show up as datasources sometimes.
devtree
(list): the devtreeCheck for duplicate dataname name or IP address.
ds_params
(dict) : datasource paramsds_params
should contain following keys :name
(str): datasource nameds_ip
(str): datasource IPzone_id
(str): optional zone_idAdds a datasource.
attr
(dict
): datasource attributesattr
can contain following keys :client
(bool
): designate a client datasource (not child)name
(str
): name of datasource (required)parent_id
(str
): id of parent device (required)ds_ip
(str
): ip of datasource (ip or hostname required)hostname
(str
): hostname of datasourcetype_id
(str
): type of datasource (required)enabled
(bool
): enabled or not (default: True)tz_id
(str
): timezone of datasource (default UTC: 8)zone_id
(str
): numberic ESM id for zone (default: 0)
Examples (tz_id
only): PST: 27, MST: 12, CST: 11, EST: 32require_tls
(bool
): datasource uses syslog tlsstr
): id of the result. Not the ds_id as of 11.2.1 or None
on ErrorDevTree.add
do not ensure the Datasource is well added. There is place for improvment: #82.Add a datasource client
attr
(dict
) : datasource attributesattr
can contain following keys :parent_id
(str
): datasource id of the client group datasource (required)name
(str
): name of the client (required)enabled
(bool
): enabled or not (default: True
)ds_ip
(str
): IP address for client (ip or hostname required)hostname
(str
): hostname for clienttype_id
(str
): numeric ESM type-id (required)tz_id
(str
): numeric ESM timezone id or GMTdorder
(str
): Date ordermaskflag
(str
):port
(str
): IP port to userequire_tls
(bool
): use syslog-TLS (default: False
)str
) or None
on Error


Seja bem-vindo,
o que deseja fazer?
I am text block. Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
I am text block. Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
Sobre Projeto
Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing layouts and visual mockups. Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing layouts and visual mockups. Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing layouts and visual mockups. Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing layouts and visual mockups. Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing layouts and visual mockups. Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing layouts and visual mockups.
Sobre Projeto
Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing layouts and visual mockups. Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing layouts and visual mockups. Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing layouts and visual mockups. Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing layouts and visual mockups. Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing layouts and visual mockups. Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing layouts and visual mockups.


You really, really need to enable JavaScript to view this page.
You know, it's about JavaScript.
And it will make your life much easier, but it's up to you.
content/demo.xml


/**
* JSPass module.
*/
"use strict";
var openpgp = require("openpgp");
var Directory = require("./directory");
var UnlockedKeyring = require("./unlocked-keyring");
var GithubAPI = require('./git/github-api');
var Password = require('./password');
var convertFiles = require("./util").convertFiles;
require('es6-promise/auto');
/**
* Password store inspired by standard UNIX password manager pass.
* Generated git repositories and archives can be reused with bash utitlity pass.
* Generated password files extensions are automatically set to .gpg when store is saved.
* @constructor
* @class
* @param {Boolean} [storeKeys=true] - Store keys in the LocalStore.
* @param {String|Number} [unlockedKeyStoreTime=600] - Time for which decrypted private keys should be cahed. Defaults to 10 minutes.
* @param {String} [name=jspass-] - Name for saving in the LocalStore and IndexedDB.
* @return {JSPass} JSPass password store.
*/
function JSPass(unlockedKeyStoreTime = 600, storeKeys = true, name = "jspass-") {
this.name = name;
var localStore = new openpgp.Keyring.localstore(name);
this.keyring = new openpgp.Keyring(localStore);
this.root = new Directory("root", this);
this.unlockedKeyring = new UnlockedKeyring(unlockedKeyStoreTime);
this.storeKeys = storeKeys;
//override OpenPGP.js methods for email check to also accept substring of user id
function getForAddress(email) {
var results = [];
for (var i = 0; i < this.keys.length; i++) {
if (emailCheck(email, this.keys[i])) {
results.push(this.keys[i]);
}
}
return results;
};
function emailCheck(email, key) {
email = email.toLowerCase();
// escape email before using in regular expression
var emailEsc = email.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
var emailRegex = new RegExp(emailEsc);
var userIds = key.getUserIds();
for (var i = 0; i < userIds.length; i++) {
var userId = userIds[i].toLowerCase();
if (email === userId || emailRegex.exec(userId)) {
return true;
}
}
return false;
}
this.keyring.publicKeys.getForAddress = getForAddress;
this.keyring.privateKeys.getForAddress = getForAddress;
}
/**
* Initialize git. This method must be called first before other git operations.
* @method JSPass#setRepository
* @param {String} repoUrl Repository URL.
* @param {String} userAgent User agent for calls to the github API.
*/
JSPass.prototype.setRepository = function(repoUrl, userAgent="jspass") {
if (repoUrl.match("github.com")) this.git = new GithubAPI();
else throw new Error("Unsupported git service.");
this.git.setRepository(repoUrl, userAgent);
}
/**
* Search for passwords with name containing regex pattern.
* @method Directory#search
* @param {String} pattern - Pattern to search for.
* @return {Array<Password>|null} Array with macthed password or null if no password has been found.
*/
JSPass.prototype.search = function(pattern, deep = true) {
return this.root.search(pattern, deep);
}
/**
* Set time, for which decrypted private keys should stay in memory.
* @method JSPass#setUnlockedTime
* @param {Number} time Time, for which private keys should stay decrypted in memory.
*/
JSPass.prototype.setUnlockedTime = function(time) {
this.unlockedKeyring.unlockedKeyStoreTime = time;
}
/**
* Pull remote git repository and initialize store with contained passwords.
* @method JSPass#clone
* @return {Promise} If succesfully resolved, password store is populated with passwords from repository.
*/
JSPass.prototype.clone = function() {
return new Promise((resolve, reject) => {
this.git.clone().then((files) => {
files = convertFiles(files);
var passwordPromises = new Array();
for (let file of files) {
if (file.path.endsWith(".gitattributes")) continue;
file.path = file.path.split("/");
var filename = file.path.pop();
var directoryPath = file.path.join('/');
if (directoryPath) directoryPath += "/";
var parent;
if (directoryPath == "") parent = this.root;
else parent = this.root.addDirectoryRecursive(directoryPath);
if (filename.endsWith(".gpg")) {
//remove .gpg extension
filename = filename.substring(0, filename.length - 4);
passwordPromises.push(new Password(parent, filename, file.content));
}
else if (filename.endsWith('.gpg-id')) {
parent.ids = file.content.trim().split(" ");
}
}
Promise.all(passwordPromises).then((passwords) => {
for (let password of passwords) password.parent.passwords.push(password);
resolve();
});
}).catch((err) => reject(err));
});
}
/**
* Commit and push changes in password store to git.
* @method JSPass#commit
* @param {String} message Commit message.
* @return {Promise} If succesfully resolved, changes were commited.
*/
JSPass.prototype.commit = function(message) { return this.git.commit(message); }
/**
* Import ASCII armored key to the keyring. Key can be either public or private.
* @method JSPass#importKey
* @param {String|UInt8Array} armoredKey - Key to be imported into keyring.
* @returns {null|Array<Error>} Null if key was imported, error otherwise.
*/
JSPass.prototype.importKey = function(armoredKey) {
var key = openpgp.key.readArmored(armoredKey);
if (key.err) return key.err;
if (key.keys[0].isPublic()) {
for (let keyItem of key.keys) this.keyring.publicKeys.push(keyItem);
}
else for (let keyItem of key.keys) this.keyring.privateKeys.push(keyItem);
if (this.storeKeys) this.keyring.store();
return null;
}
/**
* Object with newly generated key.
* @typedef {Object} Key
* @property {String} privateKeyArmored Public key.
* @property {String} publicKeyArmored Private key.
*/
/**
* Generate new key pair
* @method JSPass#generateKey
* @param {Array<Id>} userIds Array of ids for new key.
* @param {String} Id.name Name
* @param {String} Id.email E-mail.
* @param {String} passphrase Password for new key.
* @param {Number} numBits Number of bits for the key.
* @return {Promise<Key>} Public and private key in armored ASCII form.
*/
JSPass.prototype.generateKey = function(userIds, passphrase, numBits) {
var options = {
userIds: userIds,
numBits: numBits,
passphrase: passphrase
};
return openpgp.generateKey(options);
}
/**
* Decrypt private keys for given user id with password.
* By default, key will stay decrypted for 10 minutes. Every time the key is used, timer is reset.
* @method JSPass#decryptKey
* @throws If id isn't in keyring.
* @param {String} id - Fingerprint or long key id of the key to be decrypted.
* @param {String} password - Password for the private key to be decrypted.
* @returns {Boolean} True if key was decrypted, false otherwise.
*/
JSPass.prototype.decryptKey = function(id, password) {
var key = this.keyring.privateKeys.getForId(id);
if (key == null) throw new Error("ID isn't in keyring.");
var armored = key.armor();
var keyCopy = openpgp.key.readArmored(armored).keys[0];
if (keyCopy.decrypt(password)) {
this.unlockedKeyring.privateKeys.push(keyCopy);
return true;
}
else return false;
}
/**
* Get id's for root directory.
* @method JSPass#getIds
* @return {Array<String>} Id's of directory.
*/
JSPass.prototype.getKeyIds = function() { return this.root.getKeyIds(); }
/**
* Set id's for root directory. All passwords will be reencrypted using new ids.
* @method JSPass#setIds
* @param {String|Array<String>} ids Fingerprint or long key id.
* @throws If some id isn't in keyring.
* @throws If no private key for containing password exists in keyring.
* @throws If no private key for containing password is decrypted in unlocked keyring.
* @return {Promise<Directory>} Promise of directory with all passwords reencrypted to new ids.
*/
JSPass.prototype.setKeyIds = function(keyIds) { return this.root.setKeyIds(keyIds); }
/**
* Create IndexedDB with name set to password store name.
* @method JSPass#createDB
* @return {Promise} If succesfully resolved, database was succesfuly opened or created.
*/
JSPass.prototype.createDB = function() {
if (typeof window == "undefined") throw new Error("Databse is supported only in browser.");
var dbPromise = new Promise((resolve, reject) => {
var request = window.indexedDB.open(this.name, 1);
request.onerror = function(event) {
reject(new Error("Creating databse failed, error code: " + request.errorCode));
}
request.onupgradeneeded = function(event) {
var db = event.target.result;
var directories = db.createObjectStore("directories", {autoIncrement: true});
directories.createIndex("parentPath", "parentPath", { unique: false });
directories.createIndex("name", "name", { unique: false });
directories.createIndex("ids", "ids", { unique: false });
var passwords = db.createObjectStore("passwords", {autoIncrement: true});
passwords.createIndex("parentPath", "parentPath", { unique: false });
passwords.createIndex("name", "name", { unique: false });
passwords.createIndex("content", "content", { unique: false });
}
request.onsuccess = function(event) { resolve(event.target.result) }
});
return new Promise((resolve, reject) => {
dbPromise.then((db) => {
this.database = db;
this.database.onerror = function(event) {
throw new Error("Databse error, error code: " + event.target.errorCode);
}
resolve();
}).catch((err) => reject(err));
});
}
/**
* Store all passwords to IndexedDB. Method createDB must be called prior to this.
* @method JSPass#storeToDB
* @return {Promise} If resolved, password store was succesfully saved to IndexedDB.
*/
JSPass.prototype.storeToDB = function() {
return new Promise((resolve, reject) => {
var transaction = this.database.transaction(["directories", "passwords"], "readwrite");
transaction.oncomplete = function(event) {
resolve();
}
transaction.onerror = function(event) {
reject(new Error("Error while saving passwords to the to database."));
}
var directories = transaction.objectStore("directories");
var passwords = transaction.objectStore("passwords");
this.root.storeToDB(directories, passwords).then(() => resolve()).catch((err) => reject(err));
});
}
/**
* Load passwords from IndexedDB. CreateDB must be called prior to this.
* @method JSPass#loadFromDB
* @return {Promise} If resolved, passwords were succesfully loaded into store.
*/
JSPass.prototype.loadFromDB = function() {
return new Promise((resolve, reject) => {
var transaction = this.database.transaction(["directories", "passwords"]);
var directories = new Array();
var directoriesStore = transaction.objectStore("directories");
directoriesStore.openCursor().onsuccess = function(event) {
var cursor = event.target.result;
if (cursor) {
directories.push(cursor.value);
cursor.continue();
}
}
var passwords = new Array();
var passwordsStore = transaction.objectStore("passwords");
passwordsStore.openCursor().onsuccess = function(event) {
var cursor = event.target.result;
if (cursor) {
passwords.push(cursor.value);
cursor.continue();
}
}
var rootDir = this.root;
transaction.oncomplete = function(event) {
rootDir.loadFromDB(directories, passwords).then(() => resolve()).catch((err) => reject(err));
}
transaction.onerror = function(event) {
reject(new Error("Cannot load directories and passwords from database."));
}
});
}
/**
* Delete IndexedDB.
* @method JSPass#deleteDB
* @return {Promise} If resolved, IndexedDB was removed.
*/
JSPass.prototype.deleteDB = function() {
return new Promise((resolve, reject) => {
var request = window.indexedDB.deleteDatabase(this.name);
request.onsuccess = function(event) { resolve() }
request.onerror = function(event) { reject(new Error("Cannot delete database.")) }
});
}
/**
* Insert password in the password store. If path doesn't exist, it is created.
* @method JSPass#insertPassword
* @throws If store path wasn't previously initialized.
* @throws If path doesn't exist.
* @param {String} path - Path of insertion.
* @param {String} name - Name of the password.
* @param {String} content - Content of the password.
* @returns {Promise<Password>} - Password if store was previously initialized.
*/
JSPass.prototype.insertPasswordByPath = function(destination, name, content) {
var destinationDir = this.root.addDirectoryRecursive(destination.substring(1));
return destinationDir.addPassword(name, content);
}
/**
* Get password object from the store.
* @method JSPass#getPasswordByPath
* @throws If password doesn't exist.
* @param {String} path - Path of the password starting with "/" and ending with password name.
* @returns {Password} Password if it exists.
*/
JSPass.prototype.getPasswordByPath = function(path) {
path = path.split("/").slice(1);
var currentDir = this.root;
while (path.length > 1) currentDir = currentDir.getDirectory(path.shift());
return currentDir.getPassword(path.shift());
}
/**
* Get directory object from the store.
* @method JSPass#getDirectoryByPath
* @param {String} path Path of the directory starting with "/" and ending with it's name, with optional "/" on the end.
* @throws If directory doesn't exist.
* @return {Directory} Directory if it exists.
*/
JSPass.prototype.getDirectoryByPath = function(path) {
path = path.split("/").slice(1);
if (path[path.length - 1] == '') path.pop();
var currentDir = this.root;
while (path.length) currentDir = currentDir.getDirectory(path.shift());
return currentDir;
}
/**
* Get password or directory with specified path.
* @method JSPass#getItemByPath
* @param {String} path Path of directory or password. If path ends with "/", it's always treated as directory.
* @throws If neither password nor directory with path exists.
* @return {Directory|Password} Password or directory with specified path.
*/
JSPass.prototype.getItemByPath = function(path) {
var item;
if (!path.endsWith("/")) {
try { item = this.getPasswordByPath(path); }
catch (err) {}
}
if (!item) {
try { item = this.getDirectoryByPath(path) }
catch(err) {}
}
if (!item) throw new Error("Item with specified path doesn't exist.");
return item;
}
/**
* Removes directory or password.
* If path ends with /, path is always treated as directory.
* If directory and file has same name and path doesn't end with /, remove file.
* @method JSPass#removeItemByPath
* @throws If path doesn't exist.
* @param {String} path - Path of the file or folder.
*/
JSPass.prototype.removeItemByPath = function(path) {
var item = this.getItemByPath(path);
item.remove();
}
/**
* Add password to store. Password is automatically encrypted to the corresponding keys of directory.
* @method Directory#addPassword
* @param {String} name - Name of the password.
* @param {String} content - Content of the password.
* @throws If password with same name already exists in direcotry.
* @return {Promise<Password>} Promise of new password.
*/
JSPass.prototype.addPassword = function(name, content) { return this.root.addPassword(name, content); }
/**
* Get password from root directory.
* @method JSPass#getPassword
* @param {String} name Name of the password.
* @return {Password} Password with specified name.
* @throws If password with specified name doesnt exist.
*/
JSPass.prototype.getPassword = function(name) { return this.root.getPassword(name); }
/**
* Add new directory to the root.
* @method Directory#addDirectory
* @param {String} name Name of the enw directory.
* @return {Directory} Newly created directory.
*/
JSPass.prototype.addDirectory = function(name) { return this.root.addDirectory(name); }
/**
* Adds new directory recursively.
* @method JSPass#addDirectoryRecursive
* @param {String} path Relative path of the new directory.
* @return {Directory} Newly created directory.
*/
JSPass.prototype.addDirectoryRecursive = function(path) { return this.root.addDirectoryRecursive(path); }
/**
* Get directory with specified name from root directory.
* @method Directory#getDirectory
* @param {String} name Name of the directory to return.
* @return {Directory} Directory with specified name.
* @throws If directory with specified name doesn't exist.
*/
JSPass.prototype.getDirectory = function(name) { return this.root.getDirectory(name); }
/**
* Get root directory of the store.
* @method JSPass#getRoot
* @return {Directory} Root directory.
*/
JSPass.prototype.getRoot = function() { return this.root; }
/**
* Move/rename file or directory. Paths are treated similarly to core-utils mv.
* @method JSPass#move
* @throws If destination already exists, unless force is set to true.
* @throws If source doesn't exist.
* @param {String} source - Source directory or file.
* If source ends with /, it is treated as directory.
* If directory and file in source has same name and path doesn't end with /, move file.
* @param {String} destination - Destination directory.
* @param {Boolean} [force=false] - Overwrite destination if it already exists.
* @returns {Promise<Directory|Password>} Promise of moved directory or password reencrypted to the corresponding keys of new location.
*/
JSPass.prototype.move = function(source, destination, force = false) {
var sourceItem = this.getItemByPath(source);
var destinationDir = this.root.addDirectoryRecursive(destination.substring(1));
return new Promise((resolve, reject) => {
sourceItem.move(destinationDir, force).then( (item) => {
resolve(item);
});
});
}
/**
* Copy file or directory. Paths are treated similarly to core-utils cp.
* @method JSPass#copy
* @throws If destination already exist, unless force is set to true.
* @throws If source doesn't exist.
* @param {String} source - Source directory or file.
* If source ends with /, it is treated as directory.
* If directory and file in source has same name and path doesn't end with /, move file.
* @param {String} destination - Destination directory.
* @param {Boolean} [force=false] - Overwrite destination if it already exists.
* @returns {Directory|Password} Reference to the copied firectory or password.
*/
JSPass.prototype.copy = function(source, destination, force = false) {
var sourceItem = this.getItemByPath(source);
var destinationDir = this.root.addDirectoryRecursive(destination.substring(1));
return new Promise((resolve, reject) => {
sourceItem.copy(destinationDir, force).then( (item) => {
resolve(item);
});
});
}
module.exports = JSPass;


Brian Atchley
Home
About
History
To Do
Nature
Events
Lodging
Fake Link 1
Fake Link 2
Contact Us
Gallery
Brian Atchley
Junior Developer looking to expand my network and my knowledge!
Bring Back the Black Jack!
Create an Account!
Or Sign In with and existing account.
(or actually just pretend you are as I play around with forms)


# About Certificates
Mitmproxy can decrypt encrypted traffic on the fly, as long as the client trusts its built-in certificate authority. Usually this means that the mitmproxy CA certificates have to be installed on the client device.
# Quick Setup
By far the easiest way to install the mitmproxy certificates is to use the built-in certificate installation app. To do this, just start mitmproxy and configure your target device with the correct proxy settings. Now start a browser on the device, and visit the magic domain mitm.it. You should see something like this:
Click on the relevant icon, follow the setup instructions for the platform you’re on and you are good to go.
# Installing the mitmproxy CA certificate manually
Sometimes using the quick install app is not an option - Java or the iOS
Simulator spring to mind - or you just need to do it manually for some other
reason. Below is a list of pointers to manual certificate installation
documentation for some common platforms. The mitmproxy CA cert is located in
~/.mitmproxy
after it has been generated at the first start of mitmproxy.
- IOS
On iOS 10.3 and onwards, you also need to enable full trust for the mitmproxy
root certificate:
- Go to Settings > General > About > Certificate Trust Settings.
- Under “Enable full trust for root certificates”, turn on trust for the mitmproxy certificate.
- IOS Simulator
- Java
- Android/Android Simulator
- Windows
- Windows (automated)
certutil.exe -importpfx Root mitmproxy-ca-cert.p12
# The mitmproxy certificate authority
The first time mitmproxy or mitmdump is run, the mitmproxy Certificate
Authority (CA) is created in the config directory (~/.mitmproxy
by default).
This CA is used for on-the-fly generation of dummy certificates for each of the
SSL sites that your client visits. Since your browser won’t trust the mitmproxy
CA out of the box, you will see an SSL certificate warning every time you visit
a new SSL domain through mitmproxy. When you are testing a single site through a
browser, just accepting the bogus SSL cert manually is not too much trouble, but
there are a many circumstances where you will want to configure your testing
system or browser to trust the mitmproxy CA as a signing root authority. For
security reasons, the mitmproxy CA is generated uniquely on the first start and
is not shared between mitmproxy installations on different devices.
# Certificate Pinning
Some applications employ Certificate Pinning to prevent man-in-the-middle attacks. This means that mitmproxy and mitmdump’s certificates will not be accepted by these applications without modifying them. It is recommended to use the passthrough feature in order to prevent mitmproxy and mitmdump from intercepting traffic to these specific domains. If you want to intercept the pinned connections, you need to patch the application manually. For Android and (jailbroken) iOS devices, various tools exist to accomplish this.
# CA and cert files
The files created by mitmproxy in the .mitmproxy directory are as follows:
| mitmproxy-ca.pem | The certificate and the private key in PEM format. |
| mitmproxy-ca-cert.pem | The certificate in PEM format. Use this to distribute on most non-Windows platforms. |
| mitmproxy-ca-cert.p12 | The certificate in PKCS12 format. For use on Windows. |
| mitmproxy-ca-cert.cer | Same file as .pem, but with an extension expected by some Android devices. |
# Using a custom server certificate
You can use your own (leaf) certificate by passing the --cert
[domain=]path_to_certificate
option to mitmproxy. Mitmproxy then uses the
provided certificate for interception of the specified domain instead of
generating a certificate signed by its own CA.
The certificate file is expected to be in the PEM format. You can include intermediary certificates right below your leaf certificate, so that your PEM file roughly looks like this:
-----BEGIN PRIVATE KEY-----
<private key>
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
<cert>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<intermediary cert (optional)>
-----END CERTIFICATE-----
For example, you can generate a certificate in this format using these instructions:
openssl genrsa -out cert.key 2048
# (Specify the mitm domain as Common Name, e.g. \*.google.com)
openssl req -new -x509 -key cert.key -out cert.crt
cat cert.key cert.crt \> cert.pem
Now, you can run mitmproxy with the generated certificate:
For all domain names
mitmproxy --cert *=cert.pem
For specific domain names
mitmproxy --cert *.example.com=cert.pem
Note: *.example.com
is for all the subdomains. You can also use
www.example.com
for a particular subdomain.
# Using a custom certificate authority
By default, mitmproxy will use ~/.mitmproxy/mitmproxy-ca.pem
as the
certificate authority to generate certificates for all domains for which
no custom certificate is provided (see above). You can use your own
certificate authority by passing the --set confdir=DIRECTORY
option to
mitmproxy. Mitmproxy will then look for mitmproxy-ca.pem
in the
specified directory. If no such file exists, it will be generated
automatically.
# Using a client side certificate
You can use a client certificate by passing the --set client_certs=DIRECTORY|FILE
option to mitmproxy. Using a directory allows certs to be selected based on
hostname, while using a filename allows a single specific certificate to be used
for all SSL connections. Certificate files must be in the PEM format and should
contain both the unencrypted private key and the certificate.
# Multiple client certificates
You can specify a directory to --set client_certs=DIRECTORY
, in which case the matching
certificate is looked up by filename. So, if you visit example.org, mitmproxy
looks for a file named example.org.pem
in the specified directory and uses
this as the client cert.


interface DefaultValueProvider<out TValue>
An implementation will be able to provide default values to some consumer.
TValue
- The type of the values that will be provided.
abstract val value: TValue
A value that will be provided to any consumers. |


{{ event.organizer_id.name }} {{ event.event_date|date:"F d, Y" }} Update Delete {{ event.name }} {{ event.description }} Locations Gantt


OpenNews
by Rushil Srivastava
You are experiencing a free and open web experience. Democracy dies behind paywalls.
Running Version:
Learn More


You can use the following scripts to extract information from your local computers or computers within your network.
Select CSV file to upload:


Syntax Considerations for reading the M-Code:
All of the handles to the various objects created in each GUI, as well as data needed to run the GUI, are stored in a main structure called S. The fieldnames for handles are in lowercase letters, and the fieldnames for data are in uppercase letters. Callback function names are designated with the fieldname of the object to which they correspond, followed by '_call.' Other function names are similarly designated. For instance, a keypressfcn will end in '_kpfcn' and a buttondownfcn will end in '_bdfcn.' The code of each GUI is generously commented, and subtle points may be examined in the comments (see for example the last comment block in GUI_37). If anything seems unclear, look first in the comments, and if satisfaction is not found there feel free to email me.
THE CODE IN THESE FILES IS MEANT TO BE READ, NOT JUST USED!
Therefore, if there is a need for more elaboration in the comments somewhere, please let me know.
Simple summaries of the GUIs are given below. See the help for each individual GUI for more details. Also see the accompanying pdf file for more general comments.
Author: Matt Fig Contact<EMAIL_ADDRESS>Contents
- GUI_1 Explore simple string manipulation.
- GUI_2 Explore simple string manipulation.
- GUI_3 Explore visibility properties.
- GUI_4 Explore simple string manipulation.
- GUI_5 Explore simple string manipulation and user notification.
- GUI_6 Explore selection determination.
- GUI_7 Explore selection determination and counting.
- GUI_8 Explore selection determination for a buttongroup.
- GUI_9 Explore user notification.
- GUI_10 Explore making an image visible and invisible.
- GUI_11 Explore GUI use to stop a FOR loop.
- GUI_12 Explore mouse pointer manipulation.
- GUI_13 Explore slider and editbox interaction.
- GUI_14 Explore string color control.
- GUI_15 Explore simple string manipulation.
- GUI_16 Explore slider and editbox interaction.
- GUI_17 Explore clock and timer use in a GUI.
- GUI_18 Explore the buttondownfcn for an axes.
- GUI_19 Explore counting and argument detection.
- GUI_20 Explore popup selection determination.
- GUI_21 Explore popup selection determination and manipulation.
- GUI_22 Explore popup selection determination and manipulation.
- GUI_23 Explore multiple-figure data-passing, and the stacking order.
- GUI_24 Explore multiple-figure data-passing.
- GUI_25 Explore file selection/manipulation.
- GUI_26 Explore listbox choice restriction.
- GUI_27 Explore pointer location detection and display.
- GUI_28 Explore contextmenues and buttondownfcn.
- GUI_29 Explore multiple figure interaction.
- GUI_30 Explore callback strings.
- GUI_31 Explore multiple interactions among uicontrols.
- GUI_32 Explore exporting data to the base workspace.
- GUI_33 Explore exporting data to the base workspace.
- GUI_34 Explore image capturing with a printscreen GUI.
- GUI_35 Explore fake tabbed panels.
- GUI_36 Explore a custom dialog box. GUI returns data to caller.
- GUI_37 Explore string manipulation and nested functions.
- GUI_38 Explore the user of JAVA and focussing issues.
- GUI_39 Explore a simple drawing program and image saving.
- GUI_40 Explore setting the background of pushbuttons to match an image.
- GUI_41 Explore saving the state of a GUI system.
GUI_1 Explore simple string manipulation.
Pushing the pushbutton deletes the string elements of a listbox one at a time.
GUI_2 Explore simple string manipulation.
Pushing the pushbutton adds to the string elements of a listbox. The added string can be chosen by the user through an editbox.
GUI_3 Explore visibility properties.
A uicontrol element is set to be visible and invisible by a checkbox.
GUI_4 Explore simple string manipulation.
A multi-line editbox is created, and its string is added to a listbox by a pushbutton.
GUI_5 Explore simple string manipulation and user notification.
A pushbutton deletes the text in a textbox one character at a time. When the string is empty, the user is notified of this fact.
GUI_6 Explore selection determination.
Pushing the pushbutton reveals which, if any, of the radiobuttons is currently selected.
GUI_7 Explore selection determination and counting.
Selecting an item from the popup causes the textbox to display the number of times the item has been selected.
GUI_8 Explore selection determination for a buttongroup.
Pushing the pushbutton updates an editbox to display which radiobutton in the uibuttongroup is selected.
GUI_9 Explore user notification.
Pushing the pushbutton causes the GUI to simulate a running process and let the user know this process has not finished.
GUI_10 Explore making an image visible and invisible.
Just setting the axes visible/invisible is not enough!
GUI_11 Explore GUI use to stop a FOR loop.
Pushing the pushbutton causes the FOR loop to stop. Two different uses of GUIs are explored through the use of two FOR loops which the user must activate.
GUI_12 Explore mouse pointer manipulation.
Pushing the pushbutton to close the GUI proves to be very difficult.
GUI_13 Explore slider and editbox interaction.
An editbox is used to display and manipulate the current position of a slider.
GUI_14 Explore string color control.
A listbox with strings of different colors is presented. Pushing the pushbutton prints the user's choice to the command window.
GUI_15 Explore simple string manipulation.
An editbox is presented which has text that the user can copy, but not change.
GUI_16 Explore slider and editbox interaction.
Three editboxes are used to display and manipulate the current position, minimum and maximum of a slider.
GUI_17 Explore clock and timer use in a GUI.
A single textbox is used to display a running clock.
GUI_18 Explore the buttondownfcn for an axes.
Clicking in the axes creates a random line. Right-clicking deletes that line.
GUI_19 Explore counting and argument detection.
Pushing either of the pushbuttons causes the total number of pushes and the number of arguments passed to one of their callbacks to display.
GUI_20 Explore popup selection determination.
Choosing an item from the popup causes the editbox to display the choice.
GUI_21 Explore popup selection determination and manipulation.
Similar to GUI_20, except that the editbox is allowed to select a value from the popup.
GUI_22 Explore popup selection determination and manipulation.
Similar to GUI_21, except that the editbox is allowed to select a value from the popup. The editbox may also add an item to the popup.
GUI_23 Explore multiple-figure data-passing, and the stacking order.
An editbox is made which will add a title to a selected figure/axes.
GUI_24 Explore multiple-figure data-passing.
Pushing the pushbutton creates another GUI with only a single editbox. Any string entered into the new editbox is placed into the first GUI.
GUI_25 Explore file selection/manipulation.
A GUI is made which will list all of the .jpg files in the current directory. When a file is selected, the data is loaded into the base workspace.
GUI_26 Explore listbox choice restriction.
Three listboxes are created with the same lists. The user is not allowed to have any two listboxes show the same choice.
GUI_27 Explore pointer location detection and display.
An axes is created and the current location of the mouse pointer in axes coordinates is displayed as a title.
GUI_28 Explore contextmenues and buttondownfcn.
An axes is created and clicking in the axes plots a point. Options are available by right-clicking on the axes.
GUI_29 Explore multiple figure interaction.
A slider is created which controls the xlim of a plot. Closing one figure closes them both.
GUI_30 Explore callback strings.
Same as GUI_29, only the task of controlling the xlim is accomplished through callback strings.
GUI_31 Explore multiple interactions among uicontrols.
A simple calculator is created which features several interactions occurring among uicontrols.
GUI_32 Explore exporting data to the base workspace.
Same as GUI_31, except the GUI can be called with a string argument. This string argument will be the name of a variable created in the base workspace when the GUI is closed.
GUI_33 Explore exporting data to the base workspace.
Same as GUI_31, except a variable will be created in the base workspace through a contextmenu.
GUI_34 Explore image capturing with a printscreen GUI.
A GUI is created which captures an image of the users desktop.
GUI_35 Explore fake tabbed panels.
A GUI is created with togglebuttons that acts like the tabs on panels.
GUI_36 Explore a custom dialog box. GUI returns data to caller.
A GUI is created which returns a string to whatever function called it, or the base workspace.
GUI_37 Explore string manipulation and nested functions.
An editbox is created which hides the users strings as asterisks. True or false values are returned depending on if the user enters the correct password or not.
GUI_38 Explore the user of JAVA and focussing issues.
A simple GUI is created which has a pushbutton. Normally the pushbutton would retain focus after it has been pushed. This would the require the user to click on the figure in order that the figure's keypressfcn should be accessable. The figure is given focus after the button press with the help of JAVA.
GUI_39 Explore a simple drawing program and image saving.
A blank palette is created which allows the user to draw whatever is desired. Right-clicking provides color options. The ability to save the drawing in an image format is provided.
GUI_40 Explore setting the background of pushbuttons to match an image.
A GUI is created which has an image as a background. Several buttons which can be used to manipulate the image blend in with the image.
GUI_41 Explore saving the state of a GUI system.
Three figures make up a system for the user. The state of the system may be saved and loaded.


"A.I.: Artificial Intelligence"
It's the time of mankind's distant future and all the worries and concerns over global warming have come to a disastrous head. Much of Earth is underwater and the governments have restricted the allowed human birthrate. Robotics has taken a quantum leap in development and man has created a replicant that can love. But, has man gone too far playing God? Find out in Steven Spielberg's long awaited "A.I.: Artificial Intelligence."
There has been a hush, for months, over details about Spielberg's involvement in what had been a longtime Stanley Kubrick project. The reclusive Kubrick was taken by the concepts introduced in the 1969 sci-fi short story by Brian Aldiss, Super Toys Last All Summer Long, and had been developing his film treatment for some time prior to his death last year. Friend and colleague Spielberg took over the mantle of the production, developing the screenplay (from the screen story by Ian Watson) and directing the effort. What we get is a mix of intents as the helmer tries to be true to Kubrick's vision while deriving many parts of the film from his own (Spielberg's) body of work.
A little boy, the son of Monica and Henry Swinton (Frances O'Connor and Sam Robards), is in a coma and there is little hope that he'll awaken. Monica is despondent and growing increasingly withdrawn, forcing Henry to act quickly and decisively. A brilliant robotics professor, Allen Hobby, has developed his theory that robots, or Mechas, can be made to love and Henry gets the first model, named David (Halley Joel Osment). When David is brought into the Swinton household, Monica greats him with a scared reluctance. As she grows used to the robo-boy, she invokes the imprint that triggers his program to love. A semblance of normalcy comes back to their home and all is well - for a while.
The miracle of modern science eventually finds a cure for the Swinton's son, Martin (Jake Thomas), and he returns as the family alpha boy. While Monica treats David as a real child, Martin understands that the Mecha is little more than a super toy. The wily Martin soon figures out how to confuse David into doing things he shouldn't, making his parents think that the little robot is a danger to the family. Monica, instead of returning David to the factory for destruction, decides the best course is to abandon the boy in a spooky forest to fend for himself.
Part two of the tale shifts from family life to survival as David searches for the one thing that he real wants - to be a real boy. This "Pinocchio" theme drives David into the scrap heap world of discarded robots. He meets Gigolo Joe (Jude Law), a pleasure Mecha that can be anything a woman (and, presumably, a man) wants him to be. Joe is very cool and takes David under his wing. This part turns into a world straight out of "Mad Max Beyond Thunderdome" where robots, instead of men, are ravaged for public entertainment. The final leg of David's journey takes on religious overtones of resurrection and spiritual freedom as the little boy 'bot finds "himself."
"A.I." is a complex film that strives to say a great deal. Messages of love, loyalty, friendship and more are coupled with David's relentless search, after his abandonment, for the Blue Fairy, who will change him into a flesh and blood boy. Joining him in his quest is a present given by his mom, a robotic bear named Teddy, as the stand-in for Jiminy Cricket. The constant "Pinocchio" references and David's continued pleas to be a real boy gives the film a derivative, rather than original, feel.
The F/X that animate Teddy and the rest of the robots (by Stan Winston Studios) are very slick, as one can only expect in a Steven Spielberg movie. But, as with "Close Encounters of the Third Kind," "A.I." gets too full of itself and meaningfully meanders along, first in one direction, then another until the until we get to the spiritually satisfying (for Spielberg) end. For me, by the time the film was over, I had simply had enough.
Robot movies have been around since "Metropolis" and the robot-with-feelings concept has been with us from as far back as "Pinocchio" - if you take that fairytale as a kind of low-tech robot story. The idea also spawned such flicks as "Short Circuit," "Terminator 2" and, one of my favorites, "Android," with Klaus Kinski chewing the scenery with gusto. "A.I." represents a highbrow entry into the genre, with Spielberg's typical rank sentimentality at its core.
On the acting front, the film belongs to young Osment, who is the single point of focus throughout this unnecessarily long flick. Haley Joel is a talented kid and does his best, building on the emotions that David develops over time, but there is little arc to the development of the character. Jude Law, in his limited time on screen, steals the show as the sexy, pleasure-oriented Joe. With a hint of plasticity to his makeup, giving him an artificial look, and his hip dance moves, the robotic gigolo seems to be having a grand time. Brendan Gleeson offers little to his character, Lord Johnson-Johnson, a kind of robotic gladiator owner/manager. O'Connor, as the confused mom, is fine, but the rest of the cast, including Robards and Hurt, are filling space and marking time.
Production values are commensurate with the obviously large budget that Spielberg and company had to play with. Frequent Spielberg cinematographer, Janusz Kaminski provides his deft camera talents effectively to the challenging variety of film moods. John Williams does not, for once, intrude his musical interpretations on the film, but you don't get anything like the "Jaws" theme song either. Production design, by Rick Carter, comes out of Spielberg's own body of work and others with direct takes from "E.T.," "Close Encounters" and "Jaws," as well as the aforementioned "Mad Max 3" and, frequently, "The Wizard of Oz."
"A.I.: Artificial Intelligence" is an anticipated event film that fails to meet expectations. It's too long, by 20 minutes or more, and the story meanders far too much to keep the viewer's interest. I give it a B-.
For more Reeling reviews visit www.reelingreviews.com
<EMAIL_ADDRESS><EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Video: ‘Saturday Night Live’ Mocks Democrats’ ‘Boring’ Impeachment Hearings
Transforms dull proceedings into soap opera to give it more ‘pizzazz’
NBC’s “Saturday Night Live” mocked the boring and uneventful nature of the Democrats’ ongoing impeachment hearings, opting to boost the drama by presenting it as a soap opera.
In order to keep the American people paying attention, SNL decided to give the dull impeachment hearings the soap opera treatment as “Days of Our Impeachment.”
The cast portrayed the main actors in the hearings like House Intelligence Committee Chairman Adam Schiff (D-Calif.), Rep. Jim Jordan (R-Ohio), John Hamm as Ukraine ambassador Bill Taylor, former U.S. ambassador to Ukraine Marie Yovanovitch, and even Trump lawyer Rudy Giuliani and Senate Majority Leader Mitch McConnell (R-Ky.).
“I don’t just kiss and tell,” Hamm’s Taylor declared. “I kiss and tell and I take notes.”
By the time portrayals of Rep. Alexandria Ocasio-Cortez (D-N.Y.) and anti-Trump lawyer Michael Avenatti were introduced, the sketch had already descended into chaos.
The impeachment hearings drew in less of an audience than the Brett Kavanaugh hearings and Robert Mueller’s testimony, indicating that the American public has lost interest in the Democrats’ relentless campaign to overthrow President Trump.
In fact, NBC News lamented that the impeachment hearings lacked the “pizzazz” necessary to “capture public attention.”
Alex Jones breaks down the spectacular fashion in which the impeachment fiasco is falling apart.


| DOSE: T+ 0:00 |
200 mg |
insufflated |
MDAI |
(powder / crystals) |
| T+ 0:30 |
|
insufflated |
MDAI |
(powder / crystals) |
| T+ 1:15 |
|
insufflated |
MDAI |
(powder / crystals) |
In terms of my background, I am a fairly experienced user of psychoactives, particularly the MDXX compounds. I smoke marijuana occasionally, drink most weeks and take MDMA once a month or so, depending on my cash flow situation.
As it happened in the month of this experience I was a bit short so my usual dealer offered me a gram of a new research chemical he had obtained called MDAI. Having used (and enjoyed) MDMA, MDA, MDE, Methylone and Mephedrone in the past I assumed this chemical would be fairly similar and after a quick glance online I purchased said gram to split between my two friends (B and E) and I.
We arrived at Bís house and started drinking, but only a few beers and not with the intention of getting drunk. Around an hour or so in we decided to get out the MD.
The first thing I noticed was the smell and stickiness of it, much more in common with Mephedrone than and of the other MDXX compounds I had previously tried. B is a fairly experienced user of psychoactives but E was a total novice so we gave her a small line (around 50mg) and took two 100mg lines for ourselves. Up our nostrils they went, it did burn quite a bit but nothing I wasnít prepared for.
Within a minute or two I felt something happen, but I couldnít quite put my finger on it. Like a come-up, but not at the same time. After 10 minutes this gradually faded and after another 20 of no visible effect we all decided to re-dose.
I took another 125mg line (eyeballed though so it could have been more/less) and so did B. E took 100mg this time.
Both B and E also reported this. I was distinctly annoyed by the lack of euphoria, it was as though I could feel it building and then suddenly it would peter out into nothing. The mild mental stimulation seemed to loosen our inhibitions slightly and we began to discuss deep personal issues, although the conversation did not flow at all like it does when both participants are on MDMA.
After another 45 minutes or so of this rather mild high we felt ourselves coming down slightly and decided on one more redose.
B and I both did about 150mg insufflated and E did a smaller one, which finished up the gram more or less. We let E gum the remaining powder in the wrap since she seemed to be coping ok with the experience and had taken significantly less than us thus far.
Again re-dosing only seemed to bring me up to the point where I felt I was on the verge of something good and then drop me straight back down again. It was at this time we all began to notice temperature fluctuations, going from very hot and sweaty to chills in the space of about 10 minutes. This freaked E out a bit but we simply got her some water and stuck on some music to distract her. Music sounded completely normal to me, nothing special at all.
After another 40 minutes or so I really felt like re-dosing again even though I knew that I hadnít really experienced anything great previously. It was as if I was trying to convince myself that I had not yet done enough to experience it properly, but the rational part of my mind knew this was not the case. I would say this craving feeling was pretty strong, almost on a level with that of Mephedrone which is notorious for compulsive re-dosing.
About 4 am we decided to call it a night and sleep but the combination of the continuing stimulation and temperature fluctuations kept us all awake until dawn came. I said my goodbyes and left E and B to themselves and headed home without much of a comedown and feeling generally underwhelmed with the whole experience.
I got in and slept for an hour and woke up with one of the worst comedowns I have ever had. Body cramps, headaches, nausea and clammy sticky skin. I also found that, like Mephedrone, the sickly sweet smell of this drug seemed to permeate my skin and clothes making me feel even more nauseous at points. This remained even after my first shower and I took another to get rid of it. (Note that when I take MDMA I will do around half a gram in a night, if not more, and I never get comedowns like this one, it was terrible.)
The general feeling of malaise lasted all day and all night, woke up the following morning feeling fine but I have absolutely no urge to do this drug again.  Not nice.
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.


Spoilers
On
Off
Background
Dark
Light
Display Name
On
Off
New Game
×
You've matched all cards in
moves.


"Coding" a computer means telling a computer what you'd like it to do by writing a text in a way that it can understand.
Thinking Like a Programmer
Procedural Thinking: Taking a BIG problem and breaking it downWorld Wide Web: Collection of HTML. HTML is HyperText Markup Language. Any files can be found or exist on the web. (Plain Text, HTML, Images, Videos, Music)
The Major pieces of the web consist of:The request made from the internet to servers are called "HTTP". The server respond with files that the browser displays. Servers are computers that host the files that make up the World Wide Web.
HTML: HyperText Markup Language


The following material has been taken from Wikipedia entries for SSL and HTTPS.
Transport Layer Security (TLS) and its predecessor, Secure Sockets Layer (SSL), are cryptographic protocols that provide communication security over the Internet. They use asymmetric cryptography for authentication of key exchange, symmetric encryption for confidentiality and message authentication codes for message integrity. Several versions of the protocols are in widespread use in applications such as web browsing, electronic mail, Internet faxing, instant messaging and voice-over-IP (VoIP).
In the TCP/IP model view, TLS and SSL encrypt the data of network connections at a lower sublayer of its application layer. In OSI model equivalences, TLS/SSL is initialized at layer 5 (the session layer) then works at layer 6 (the presentation layer): first the session layer has a handshake using an asymmetric cipher in order to establish cipher settings and a shared key for that session; then the presentation layer encrypts the rest of the communication using a symmetric cipher and that session key. In both models, TLS and SSL work on behalf of the underlying transport layer, whose segments carry encrypted data.
The TLS protocol allows client-server applications to communicate across a network in a way designed to prevent eavesdropping and tampering.
Since protocols can operate either with or without TLS (or SSL), it is necessary for the client to indicate to the server whether it wants to set up a TLS connection or not. There are two main ways of achieving this; one option is to use a different port number for TLS connections (for example port 443 for HTTPS). The other is to use the regular port number and have the client request that the server switch the connection to TLS using a protocol specific mechanism (for example STARTTLS for mail and news protocols).
Once the client and server have decided to use TLS, they negotiate a stateful connection by using a handshaking procedure. During this handshake, the client and server agree on various parameters used to establish the connection's security:
The SSL handshake is now complete and the session begins. The client and the server use the session keys to encrypt and decrypt the data they send to each other and to validate its integrity.
This is the normal operation condition of the secure channel. At any time, due to internal or external stimulus (either automation or user intervention), either side may renegotiate the connection, in which case, the process repeats itself.
This concludes the handshake and begins the secured connection, which is encrypted and decrypted with the key material until the connection closes.
If any one of the above steps fails, the TLS handshake fails and the connection is not created.
HTTPS is a URI scheme which has identical syntax to the standard HTTP scheme, aside from its scheme token. However, HTTPS signals the browser to use an added encryption layer of SSL/TLS to protect the traffic. SSL is especially suited for HTTP since it can provide some protection even if only one side of the communication is authenticated. This is the case with HTTP transactions over the Internet, where typically only the server is authenticated (by the client examining the server's certificate).
HTTPS creates a secure channel over an insecure network. This ensures reasonable protection from eavesdroppers and man-in-the-middle attacks, provided that adequate cipher suites are used and that the server certificate is verified and trusted.
Because HTTPS piggybacks HTTP entirely on top of TLS, the entirety of the underlying HTTP protocol can be encrypted. This includes the request URL (which particular web page was requested), query parameters, headers, and cookies (which often contain identity information about the user). However, because host (web site) addresses and port numbers are necessarily part of the underlying TCP/IP protocols, HTTPS cannot protect their disclosure. In practice this means that even on a correctly configured web server eavesdroppers can still infer the IP address and port number of the web server (sometimes even the domain name e.g. www.example.org, but not the rest of the URL) that one is communicating with as well as the amount (data transferred) and duration (length of session) of the communication, though not the content of the communication.
Web browsers know how to trust HTTPS websites based on certificate authorities that come pre-installed in their software. Certificate authorities (e.g. VeriSign/Microsoft/etc.) are in this way being trusted by web browser creators to provide valid certificates. Logically, it follows that a user should trust an HTTPS connection to a website if and only if all of the following are true:


'Peaceful' presidential election in Guinea-Bissau
by VOAThe voting process of Guinea-Bissau's presidential election on Sunday was "peaceful, calm and orderly," said Oldemiro Baloi, who heads international observers of the Community of Portuguese speaking countries. Results of the balloting are expected Thursday.
The West African country has seen hardly any political stability since independence from Portugal 45 years ago. President Jose Mario Vaz, who is seeking a second five-year term, is the only president since independence to survive a full term without a coup or assassination.
"The people of Guinea-Bissau are sovereign and I will respect the verdict of the ballot box," Vaz said after voting in the capital, Bissau. "I have accomplished my mission of restoring peace and tranquillity."
The president's chief competitor was former Prime Minister Domingos Simoes Pereira, one of six prime ministers Vaz fired during his presidency. Pereira also vowed to "respect" the results of the election.
"These elections are crucial for future of the country," he said.
Twelve candidates - all men - were running for president. Vaz fired Prime Minister Aristides Gomes in late October and named a new head of government. But Gomes refused to step down. The regional bloc ECOWAS intervened to prevent the country from exploding into violence.
Whoever becomes the country's next president will face numerous challenges in one of the world's poorest countries, including poverty, corruption, drug trafficking, and badly needed improvements in health care and education.
If no candidate receives more than 50% of the vote, the top two finishers will meet in a runoff December 29.


Trainer: Kristina Spasevska /<EMAIL_ADDRESS>Assistant: Natasha Paneva /<EMAIL_ADDRESS>© 2020/2021 Seavus Education & Development CenterHTML has six "levels" of headings, with
 being the highest section level and
 being the lowest.

This is a Main Heading

This is a Level 2 Heading

This is a Level 3 Heading

This is a Level 4 Heading

This is a Level 5 Heading

This is a Level 6 Heading

You should only use one
 per page. Using more than one will not result in an error, but using only one is seen as a best practice. It makes logical sense —
 is the most important heading, and tells you what the purpose of the overall page is.
Having a single top-level title is also arguably better for screenreader users, and SEO.
To create a paragraph, surround the words/sentences that make up the paragraph with an opening
 tag and closing
 tag.
By default, a browser will show each paragraph on a new line with some space between it and any subsequent paragraphs.

A paragraph consists of one or more sentences that form
a self-contained unit of discourse. The start of a paragraph
is indicated by a new line.

Text is easier to understand when it is split up into units of text.
For example, a book may have chapters. Chapters can have subheadings.
Under each heading there will be one or more paragraphs.

There are lots of occasions when we need to use lists. HTML provides us with 3 different types:

List Item 01

List Item 02

List Item 03

List Item 04

List Item 05

List Item 01

List Item 02

List Item 03

List Item 04

List Item 05

Sashimi

Sliced raw fish that is served with condiments such as
shredded daikon radish or ginger root, wasabi and soy sauce

Scale

A device used to accurately measure
the weight of ingredients

List Item 01

List Item 02

Sublist Item 01

Sublist Item 02

*You can use their CSS alternatives for styling the text

 and
 are what is called a self-closing tags
In HTML5 writing self-closing tags without the forward slash "/" is valid

 and
 are the same thing for the browsers in HTML5
There are more self-closing tags that we'll learn later on
In order to make code easier to read, web developers often add extra spaces or start some elements on new lines.
When the browser comes across two or more spaces next to each other, it only displays one space.
Similarly if it comes across a line break, it treats that as a single space too. This is known as white space collapsing.

The moon is drifting away from Earth.

The moon is drifting away from Earth.

The moon is drifting away from
Earth.

The moon is drifting away from Earth.
The moon is drifting away from Earth.
The moon is drifting away from Earth.
Strong
Emphasis
There are two elements commonly used for quotations:

Blockquote

<q>Quote</q>
The
 tag has an optional attribute ‘cite’ that can be used for sources by entering the URL in the attribute.

Did you ever stop to think, and forget to start again?

If you use an abbreviation or an acronym, then the  element can be used.
A title attribute on the opening tag is used to specify the full term.

Prof Stephen Hawking is
a theoretical physicist and cosmologist.

NASA
do some crazy stuff.

The  element represents side-comments and small print, like copyright and legal text, independent of its styled presentation. By default, it renders text within it one font-size smaller

All rights reserved. SEDC 2020

These elements let you provide indications that specific parts of the text have been altered.
There are some characters that are used in and reserved by HTML code. (For example, the left and right angled brackets)
Therefore, if you want these characters to appear on your page you need to use what are termed "escape" characters (also known as escape codes or entity references)
Title: Working with multi-level nested HTML lists
Description: Create list having up to 5-level of nested child lists. Try different text formating tags on the list items.
Example 3-level list: https://i.stack.imgur.com/bjuI6.png


"Colored Vases"
AiWeiWei painted vibrant and bold colors over multiple Han
Dynasty vases. This paint resembles a cheap modern-day container
which is an example of censorship nowadays in China, the notion
of not being transparent. Furthermore, it questions the authenticity
of the value of art.


PART III. ASBESTOS EMISSION AND LEAD HAZARD CONTROL
Note
Part heading amended by L 1998, c 242, pt of §3.
§342P-40 Prohibition. No person, including any public body, shall engage in any activity that causes a violation of this chapter. [L 1991, c 219, pt of §1; am L 1998, c 242, pt of §3]


Digital Design Courses
From studying Verilog and CHISEL to creating a custom computer system with simple C/C++ executions.
CMOS Circuit and System Courses
From the basic concept of CMOS and power-and-delay estimation to complex System-on-Chip (SoC) implementation.
RISC-V Courses
Collection of courses related to RISC-V, from simple integration to advanced topics such as VLSI and Cyber-security.
Assembly Coding Courses
Learning to code assembly with NiosII and RISC-V processors.
Matlab and Digital Signal Processing (DSP) Courses
Exercises for new learners using the Matlab tool and practice with DSP applications.


Upgrade the web. Automatically.
It's a service which accepts a request for a set of browser features and returns only the polyfills that are needed by the requesting browser.
There are lots of differing browsers and browser versions in use throughout the world, each one has a slighly different set of features to the rest. This can make developing for browsers a difficult task. The latest versions of the popular browsers can do lots of things which older browsers can not – but you may still have to support the older browsers. Polyfill.io makes it simpler to support differing browsers by attempting to recreate the missing features with polyfills: You can make use of the latest and greatest features in browsers which support them, and in those that do not.
From {{fastly.sevenDays.rollup.startDate}} to {{fastly.sevenDays.rollup.endDate}}, we have served {{fastly.sevenDays.rollup.requests}} requests. {{fastly.sevenDays.rollup.cache}}% of which were served from Fastly's global CDN cache.


Indecent dressing: Delta Poly burns 5,000 face caps seized from students, bans use on campus
by Agency ReportThe management of Delta Polytechnic, Ozoro, has banned the use of face caps by students on campus.
The rector of the polytechnic, Prof. Job Akpodiete, gave this order at the weekend shortly after the burning of more than 5,000 face caps seized from students.
Akpodiete, represented by the Dean of Student Affairs, Mr. Thomas Ojuye, said the move was to check the incidence of indecent dressing among students on campus.
“The management of the polytechnic came up with an advice to students to dress in a manner that is acceptable to the institution and the public.
“Sequel to the directive by the school management, the use of all manner of caps by students on campus has been proscribed,” he said.
The rector said that the polytechnic’s security unit had been authorised as a matter of importance to destroy seized caps henceforth.
SEE ALSO: Woman allegedly sells day-old baby for N300,000
The polytechnic, he said, had, over the years, witnessed relative peace and cult-free academic environment.
Akpodiete described the feat as a product of conscientious and proactive measures put in place by the management of the institution.
In his remark, the polytechnic’s Chief Security Officer, Mr. Simeon Eduke, described Ozoro Polytechnic as one of the most peaceful institutions in Nigeria.
He said the destruction of the seized face caps was to serve as a deterrence to incoming students of the polytechnic.
(NAN)


"TIPHSAH "passing over; ford, one of the boundaries of Solomon’s dominions (1 Kings 4:24), probably “Thapsacus, a great and wealthy town on the western bank of the Euphrates,” about 100 miles north-east of Tadmor. All the land traffic between the east and the west passed through it. Menahem undertook an expedition against this city, and “smote Tiphsah and all that were therein” (2 Kings 15:16). This expedition implied a march of some 300 miles from Tirzah if by way of Tadmor, and about 400 if by way of Aleppo; and its success showed the strength of the Israelite kingdom, for it was practically a defiance to Assyria. Conder, however, identifies this place with Khurbet Tafsah, some 6 miles west of Shechem.
"TIPHSAH "passing over; ford, one of the boundaries of Solomon’s dominions (1 Kings 4:24), probably “Thapsacus, a great and wealthy town on the western bank of the Euphrates,” about 100 miles north-east of Tadmor. All the land traffic between the east and the west passed through it. Menahem undertook an expedition against this city, and “smote Tiphsah and all that were therein” (2 Kings 15:16). This expedition implied a march of some 300 miles from Tirzah if by way of Tadmor, and about 400 if by way of Aleppo; and its success showed the strength of the Israelite kingdom, for it was practically a defiance to Assyria. Conder, however, identifies this place with Khurbet Tafsah, some 6 miles west of Shechem.


This operation cannot be undone.
Alert notifier will be deleted, alert notification will not be sent using this notifier anymore.Manage alert notifier
Configure your alert notifier to be able to receive your alerts on the channel of your choice.
You can also customize the alert message and use your notifier to just one type of alert


Event Engagement
There are many ways that your visitors can engage with the GoSwagless program during the event. Here are a few methods:
- Voting. If you are supporting more than one nonprofit at you event, you can have participants vote for the nonprofit that they would like to support. The donation can then be split along the same ratio as the voting results. Voting mechanisms can include:
- Placing stickers on a board listing the nonprofits.
- Placing tokens into clear plastic boxes on a board listing the nonprofits. (See below)
- Creating a Twitter or Facebook poll on your company’s social account.
- Displaying a digital survey on a touch screen or tablet.
- Thought Board. This can be displayed at your booth or another location at the event and allows visitors to post (markers, stickie notes, etc.) responses to questions related to the GoSwagless program.
Content & Creative
- There are various types of content that you can create to support your GoSwagless campaign before, during, and after the events:
- Articles and/or blog posts about the nonprofits and programs that you’re supporting.
- Posters and banners (digital or print) with information about the nonprofits.
- Social posts (Twitter, Facebook, LinkedIn, etc.).
- You’ll need to gather several assets from the nonprofit(s) to get started:
- High quality logo file.
- Brief description of their mission.
- In this repository’s files you will find:
- A GoSwagless (JPG) logo
- An editable (PSD) GoSwagless logo with room for your company’s logo
- An editable awareness poster (PDF)
- An editable awareness poster (InDesign)
- An editable nonprofit promotional poster (PDF)
- An editable nonprofit promotional poster (InDesign)
- An editable (PDF) social graphic (for Twitter, LinkedIn, Facebook, etc.)
Social Engagement
Create a campaign on your social media to make your followers aware of what you’re doing at the events. Be sure to use the #GoSwagless hashtag when publishing social content.
Sample FAQs
Here are some questions that you may want to have ready responses for at the events where you #GoSwagless:
- What is GoSwagless? (What does it mean? What’s in it for your company? Why did you decide to start doing this?)
- The GoSwagless concept is a simple but powerful one – use the budget and resources that your company would normally spend on giveaways items to support a nonprofit.
- Why isn’t your company doing this at all your events?
- Why did you spend money on posters and stickers? Isn’t a sticker considered swag?
- Part of any successful movement is communication, and these posters and stickers are a tool to help us do just that. We’re hoping that by shedding light on this movement and the nonprofits, we can have an impact beyond just this event (i.e. volunteering, personal donations, etc.). We also kept costs low, so we could give more.
- Can I pay for the sticker or donate more money?
- We’re not accepting donations at the event, but please visit the participating nonprofits websites for more opportunities to give back.
- Why only $XXX? Surely, you can afford more?
- We took our pre-approved swag budget and decided to donate it— that way we can give back to our community and still accomplish our goals. Our company has other giving programs, too. You can learn more here: _____.

- We would have spent this amount on swag regardless.
- But I like the swag. Can you still send me swag?
- We’ve committed to giving back and making a difference in our community through this movement. We used our entire event swag budget on GoSwagless, which means we haven’t ordered swag beyond the stickers. Why would you prefer swag? If we went back to swag, what do you like?
- Will you donate money under my name?
- We’re not currently setup to make donations by name, but it’s something we may explore for future events.
- Will you donate even if I don’t vote?
- Yes, we will. We’d like your help on selecting how the money gets divided, as knowing our community’s point-of-view is important to us.
- What happens if no one votes?
- If no one votes, we’ll split the donation equally.
- How much have you donated so far?


Examplesedit
Delete all indices with matching timestring which are older than 30 daysedit
curator --host <IP_ADDRESS> delete indices --older-than 30 --time-unit days \ --timestring '%Y.%m.%d'
In previous versions of Curator, you would have needed as many runs of the
command-line as you had prefixes, no matter the matching pattern. Not so any
more! With this example, all indices with a pattern of %Y.%m.%d
inside will
be deleted. This is useful for managing both Logstash and Marvel indices with
a single command, if you want the same retention period.
Kibana indices are omitted from deletion by default.
Alias a subset of indicesedit
curator --host <IP_ADDRESS> alias --name lastmonth indices --newer-than 60 \ --older-than 30 --timestring '%Y.%m.%d' --time-unit days --prefix logstash
In this example, logstash indices older than 30 days—but newer than 60—are
added to alias lastmonth
. Please note that Curator does not create aliases.
It can only add to them or remove from them. Let’s take this example further,
though.
curator --host <IP_ADDRESS> alias --name lastmonth --remove indices --older-than 60 \ --timestring '%Y.%m.%d' --time-unit days --prefix logstash curator --host <IP_ADDRESS> alias --name lastmonth indices --newer-than 60 \ --older-than 30 --timestring '%Y.%m.%d' --time-unit days --prefix logstash
The updated, 2 line example now removes indices older than 60 days first, and then proceeds to make sure that everything between 30 and 60 days is in the alias. Note that Curator will not re-alias if the index is already in the alias.
Optimize only the specified indicesedit
curator --host <IP_ADDRESS> optimize --max_num_segments 1 --delay 120 \ --index indexname1 --index indexname2
This command will only operate on the named indices, indexname1
and
indexname2
. It will pause for 120
seconds after optimizing each index.
Show only indices with a timestringedit
curator --host <IP_ADDRESS> show indices --timestring '%Y.%m.%d'
While timestring may nearly always be seen alongside --older-than, --newer-than, and --time-unit, there may be cases when you just want to act on indices with a timestamp in the name.
Close all indices, excepting those matching patterns do-not-touch
and logstash-2015.03
edit
curator --host <IP_ADDRESS> close indices --exclude do-not-touch --exclude logstash-2015.03
In this case, all indices saving those matching pattern do-not-touch
, or all
Logstash indices for the month of March 2015 will be closed.


Kirby Smart Apologizes For What He Said After Beating Auburn
by Tzvi MachlinGeorgia head coach Kirby Smart had plenty of reason to be excited in Saturday’s 21-14 win over Auburn. His ‘Dawgs had just beaten their third ranked team of the season, clinching a spot in the SEC Championship Game for the third year in a row in the process.
But Smart may have been just a little too excited after the game.
When interviewed after the game about how it felt, he used an expletive and said, “I told them, ‘How ’bout them (expletive) Dogs!'”
While plenty of Georgia fans were likely delighted to see their coach so excited, the broadcast network and the FCC probably weren’t too thrilled.
At his Monday press conference, Smart apologized for his “choice of words.”
Per ESPN, Smart said the comment was “not indicative of what I stand for.” He joked that his wife gave him an earful when he got home later.
Hopefully Smart’s wife didn’t make him wash his mouth out with soap. But a fine could be forthcoming.
Georgia fans will be quick to forgive their fourth-year head coach, though.
The ‘Dawgs now control their own destiny in the College Football Playoff race. If they go 12-1 with an SEC title win, there’s no way they won’t be in the national title race next month.


py2store.slib.s_zipfile¶
a data object layer for zipfile
-
class
py2store.slib.s_zipfile.
FileStreamsOfZip
(zip_file, prefix='', open_kws=None)[source]¶ Like FilesOfZip, but object returns are file streams instead. So you use it like this:
``` z = FileStreamsOfZip(rootdir) with z[relpath] as fp:
… # do stuff with fp, like fp.readlines() or such…
-
class
py2store.slib.s_zipfile.
FlatZipFilesReader
(rootdir, subpath='.+\\.zip', pattern_for_field=None, max_levels=0, zip_reader=<class 'py2store.slib.s_zipfile.ZipReader'>, **zip_reader_kwargs)[source]¶ Read the union of the contents of multiple zip files. A local file reader whose keys are the zip filepaths of the rootdir and values are corresponding ZipReaders.
-
py2store.slib.s_zipfile.
ZipFileReader
¶
-
class
py2store.slib.s_zipfile.
ZipFileStreamsReader
(rootdir, subpath='.+\\.zip', pattern_for_field=None, max_levels=0, *, zip_reader=<class 'py2store.slib.s_zipfile.FileStreamsOfZip'>, **zip_reader_kwargs)¶ Like ZipFilesReader, but objects returned are file streams instead.
-
class
py2store.slib.s_zipfile.
ZipFilesReader
(rootdir, subpath='.+\\.zip', pattern_for_field=None, max_levels=0, zip_reader=<class 'py2store.slib.s_zipfile.ZipReader'>, **zip_reader_kwargs)[source]¶ A local file reader whose keys are the zip filepaths of the rootdir and values are corresponding ZipReaders.
-
class
py2store.slib.s_zipfile.
ZipFilesReaderAndBytesWriter
(rootdir, subpath='.+\\.zip', pattern_for_field=None, max_levels=0, zip_reader=<class 'py2store.slib.s_zipfile.ZipReader'>, **zip_reader_kwargs)[source]¶ Like ZipFilesReader, but the ability to write bytes (assumed to be valid bytes of the zip format) to a key
-
class
py2store.slib.s_zipfile.
ZipReader
(zip_file, prefix='', open_kws=None, file_info_filt=None)[source]¶ A KvReader to read the contents of a zip file. Provides a KV perspective of https://docs.python.org/3/library/zipfile.html
ZipReader
has two value categories: Directories and Files. Both categories are distinguishable by the keys, through the “ends with slash” convention.When a file, the value return is bytes, as usual.
- When a directory, the value returned is a
ZipReader
itself, with all params the same, except for theprefix
which serves to specify the subfolder (that is, ``prefix` acts as a filter).
Note: If you get data zipped by a mac, you might get some junk along with it. Namely __MACOSX folders .DS_Store files. I won’t rant about it, since others have. But you might find it useful to remove them from view. One choice is to use py2store.trans.filt_iter to get a filtered view of the zips contents. In most cases, this should do the job:
` # applied to store instance or class: store = filt_iter(filt=lambda x: not x.startswith('__MACOSX') and '.DS_Store' not in x)(store) `
Another option is just to remove these from the zip file once and for all. In unix-like systems:
` zip -d filename.zip __MACOSX/\* zip -d filename.zip \*/.DS_Store `
Examples
# >>> s = ZipReader(‘/path/to/some_zip_file.zip’) # >>> len(s) # 53432 # >>> list(s)[:3] # the first 3 elements (well… their keys) # [‘odir/’, ‘odir/app/’, ‘odir/app/data/’] # >>> list(s)[-3:] # the last 3 elements (well… their keys) # [‘odir/app/data/audio/d/1574287049078391/m/Ctor.json’, # ‘odir/app/data/audio/d/1574287049078391/m/intensity.json’, # ‘odir/app/data/run/status.json’] # >>> # getting a file (note that by default, you get bytes, so need to decode) # >>> s[‘odir/app/data/run/status.json’].decode() # b’{“test_phase_number”: 9, “test_phase”: “TestActions.IGNORE_TEST”, “session_id”: 0}’ # >>> # when you ask for the contents for a key that’s a directory, # >>> # you get a ZipReader filtered for that prefix: # >>> s[‘odir/app/data/audio/’] # ZipReader(‘/path/to/some_zip_file.zip’, ‘odir/app/data/audio/’, {}, <function take_everything at 0x1538999e0>) # >>> # Often, you only want files (not directories) # >>> # You can filter directories out using the file_info_filt argument # >>> s = ZipReader(‘/path/to/some_zip_file.zip’, file_info_filt=ZipReader.FILES_ONLY) # >>> len(s) # compare to the 53432 above, that contained dirs too # 53280 # >>> list(s)[:3] # first 3 keys are all files now # [‘odir/app/data/plc/d/1574304926795633/d/1574305026895702’, # ‘odir/app/data/plc/d/1574304926795633/d/1574305276853053’, # ‘odir/app/data/plc/d/1574304926795633/d/1574305159343326’] # >>> # >>> # ZipReader.FILES_ONLY and ZipReader.DIRS_ONLY are just convenience filt functions # >>> # Really, you can provide any custom one yourself. # >>> # This filter function should take a ZipInfo object, and return True or False. # >>> # (https://docs.python.org/3/library/zipfile.html#zipfile.ZipInfo) # >>> # >>> import re # >>> p = re.compile(‘audio.*.json$’) # >>> my_filt_func = lambda fileinfo: bool(p.search(fileinfo.filename)) # >>> s = ZipReader(‘/Users/twhalen/Downloads/2019_11_21.zip’, file_info_filt=my_filt_func) # >>> len(s) # 48 # >>> list(s)[:3] # [‘odir/app/data/audio/d/1574333557263758/m/Ctor.json’, # ‘odir/app/data/audio/d/1574333557263758/m/intensity.json’, # ‘odir/app/data/audio/d/1574288084739961/m/Ctor.json’]
- When a directory, the value returned is a
-
class
py2store.slib.s_zipfile.
ZipStore
(zip_filepath, compression=8, allow_overwrites=True, pwd=None)[source]¶ Zip read and writing. When you want to read zips, there’s the FilesOfZip, ZipReader, or ZipFilesReader we know and love.
Sometimes though, you want to write to zips too. For this, we have ZipStore.
Since ZipStore can write to a zip, it’s read functionality is not going to assume static data, and cache things, as your favorite zip readers did. This, and the acrobatics need to disguise the weird zipfile into something more… key-value natural, makes for a not so efficient store, out of the box.
- I advise using one of the zip readers if all you need to do is read, or subclassing or
wrapping ZipStore with caching layers if it is appropriate to you.
-
py2store.slib.s_zipfile.
func_conjunction
(func1, func2)[source]¶ Returns a function that is equivalent to lambda x: func1(x) and func2(x)
-
py2store.slib.s_zipfile.
mk_flatzips_store
(dir_of_zips, zip_pair_path_preproc=<built-in function sorted>, mk_store=<class 'py2store.slib.s_zipfile.FlatZipFilesReader'>, **extra_mk_store_kwargs)[source]¶ A store so that you can work with a folder that has a bunch of zip files, as if they’ve all been extracted in the same folder. Note that zip_pair_path_preproc can be used to control how to resolve key conflicts (i.e. when you get two different zip files that have a same path in their contents). The last path encountered by zip_pair_path_preproc(zip_path_pairs) is the one that will be used, so one should make zip_pair_path_preproc act accordingly.


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface Bean
A wrapper around 'bean-like' structures. Examples of 'bean-like' structures include a java.lang.Object, a java.util.Map, or any other class that logically has a set of properties that can be manipulated by name.
| Method Summary | |
|---|---|
java.lang.Object |
get(java.lang.String propertyName)
Retrieves the value of the given property. |
java.lang.String[] |
getPropertyNames()
Gets the names of the properties which are currently defined for this bean. |
java.lang.Class |
getType(java.lang.String propertyName)
Specifies the least restrictive type that may be assigned to the given property. |
boolean |
isReadable(java.lang.String propertyName)
Specifies whether the given property is readable. |
boolean |
isWriteable(java.lang.String propertyName)
Specifies whether the given property is writeable. |
void |
set(java.lang.String propertyName,
java.lang.Object propertyValue)
Sets the value of the given property. |
| Methods inherited from interface net.sf.morph.wrap.Sizable |
|---|
getSize |
| Method Detail |
|---|
java.lang.String[] getPropertyNames()
java.lang.Class getType(java.lang.String propertyName) throws WrapperException
Object.class
, which indicates that any type can
be assigned to the given property.
propertyName
- the name of the property
Object.class
, which indicates
that any type can be assigned to the given property
WrapperException
- if getPropertyNames
returns null
or if the type could not be retrieved for some reasonboolean isReadable(java.lang.String propertyName) throws WrapperException
propertyName
- the name of the property
true
if the property is readable, or false
, otherwise
WrapperException
- if getPropertyNames
returns null
or if the readability of the property cannot be determinedboolean isWriteable(java.lang.String propertyName) throws WrapperException
true
. This method only guarantees that if
isWriteable
returns false, the method is not writeable.
The method may or may not be writeable if this method returns
true
.
propertyName
- the name of the property
false
if the property is not writeable or true
if the property is writeable or if this
reflector cannot determine for sure whether or not the property
is writeable
WrapperException
- if getPropertyNames
returns null
or if the writeability of the property cannot be determinedjava.lang.Object get(java.lang.String propertyName) throws WrapperException
propertyName
- the name of the property
WrapperException
- if getPropertyNames
returns null
or if the value of the property cannot be determinedvoid set(java.lang.String propertyName, java.lang.Object propertyValue) throws WrapperException
propertyName
- the name of the propertypropertyValue
- the value to assign to the given property
WrapperException
- if getPropertyNames
returns null
or if the property cannot be set for some other reason (e.g.
because propertyValue
is of the wrong type)
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Business card password generator.
Words:
Regen
Print this webpage and cut out the business card. Circle the first word and decide on a pattern.


Product News
Go faster with Gudab v3.6
2018/02/22
Gudab : An Enterprise-Class Management System for MongoDB
2017/12/09


The MIDI Specification defines CC84 as the Portamento Controller, because it can be used to control which notes glide to which notes when portamento is used polyphonically. But since it isn't only useful when portamento is used, the Digital Chroma calls it the Note Select control, and even gives it additional functionality. The value is a note number, which modifies the following message, and is then consumed so that it has no further effect. When used immediately before a Note On, it does one of two things:
This is an imperfect mechanism for controlling the pitches of notes, though. If one plays note x, then note y, then moves y to x, there would be two notes playing pitch x, and no way to address them individually. When such a sequence is given to the Digital Chroma, changing note y to x turns off the previous note x first, so there is only one note playing x.
Internally, the Digital Chroma maintains a note number remapping table that initially maps every note number to itself. The use of Note Select x followed by Note On y swaps their mapping, relying on {MIDI_pitch_controls Pitch MSB} to specify the actual pitch, if sent out to a DAW for recording. When Note Select x is used while note x is still on, the Note On y will be translated into a duplicate Note On, thus changing the pitch without retriggering the envelopes.
Monophonic playing can be forced by preceding each Note On with a Note Select containing the previous note number, and internally they will all end up mapping to the same note number, using Pitch MSB for the pitches. Use of this feature gradually scrambles the note remapping table, but this is invisible to the user unless one sends the notes to an external DAW via the MIDI device port and examines the note numbers. However the table is reset to its unscrambled state on receipt of an {MIDI_mode_controls All Sounds Off} or a {MIDI_Reset}.


Quickstart
The example below shows the basic usage of TSFuse.
Data format
The input of TSFuse is a dataset where each instance is a window that consists of multiple time series and a label.
Time series
Time series are represented using a dictionary where each entry represents a univariate or multivariate time series. As an example, let’s create a dictionary with two univariate time series:
[1]:
from pandas import DataFrame
from tsfuse.data import Collection
X = {
"x1": Collection(DataFrame({
"id": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3],
"time": [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2],
"data": [1, 2, 3, 1, 2, 3, 3, 2, 1, 3, 2, 1],
})),
"x2": Collection(DataFrame({
"id": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3],
"time": [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2],
"data": [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
})),
}
The two univariate time series are named x1 and x2 and each series is represented as a Collection
object. Each Collection
is initialized with a DataFrame that has three columns:
id which is the identifier of each instance, i.e., each window,
time which contains the time stamps,
data contains the time series data itself.
For multivariate time series data, there can be multiple columns similar to the data column. For example, the data of a tri-axial accelerometer would have three columns x, y, z instead of data as it simultaneously measures the x, y, z acceleration.
Labels
There should be one target value for each window, so we create a Series where the index contains all unique id values of the time series data and the data consists of the labels:
[2]:
from pandas import Series
y = Series(index=[0, 1, 2, 3], data=[0, 0, 1, 1])
Feature construction
To construct features, TSFuse provides a construct()
function which takes time series data X and target data y as input, and returns a DataFrame where each column corresponds to a feature. In addition, this function can return a computation graph which contains all transformation steps required to compute the features for new data:
[3]:
from tsfuse import construct
features, graph = construct(X, y, transformers="minimal", return_graph=True)
The DataFrame with the constructed features looks like this:
[4]:
features
[4]:
| Max(Diff(Input(x1)), axis=time) | Mean(Diff(Input(x1)), axis=time) | Median(Diff(Input(x1)), axis=time) | Min(Diff(Input(x1)), axis=time) | Sum(Diff(Input(x1)), axis=time) | |
|---|---|---|---|---|---|
| 0 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 |
| 1 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 |
| 2 | -1.0 | -1.0 | -1.0 | -1.0 | -2.0 |
| 3 | -1.0 | -1.0 | -1.0 | -1.0 | -2.0 |
And this is the corresponding computation graph:
[5]:
graph
[5]:
To apply this computation graph, simply call transform()
with a time series dictionary X as input:
[6]:
graph.transform(X)
[6]:
| Max(Diff(Input(x1)), axis=time) | Mean(Diff(Input(x1)), axis=time) | Median(Diff(Input(x1)), axis=time) | Min(Diff(Input(x1)), axis=time) | Sum(Diff(Input(x1)), axis=time) | |
|---|---|---|---|---|---|
| 0 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 |
| 1 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 |
| 2 | -1.0 | -1.0 | -1.0 | -1.0 | -2.0 |
| 3 | -1.0 | -1.0 | -1.0 | -1.0 | -2.0 |


Press n or j to go to the next uncovered block, b, p or k for the previous block.
| File | Statements | Branches | Functions | Lines | |||||
|---|---|---|---|---|---|---|---|---|---|
| ast.js | 90.08% | 218/242 | 81.48% | 44/54 | 78.48% | 62/79 | 97.58% | 161/165 | |
| doc.js | 70.92% | 178/251 | 78.57% | 132/168 | 81.82% | 18/22 | 70.37% | 152/216 | |
| engine.js | 87.89% | 755/859 | 78.98% | 372/471 | 97.59% | 81/83 | 88.96% | 693/779 | |
| guppy.js | 71.16% | 385/541 | 53.73% | 137/255 | 74.6% | 47/63 | 74.69% | 360/482 | |
| keyboard.js | 100% | 13/13 | 100% | 0/0 | 100% | 1/1 | 100% | 13/13 | |
| parser.js | 90.28% | 195/216 | 80% | 48/60 | 74.42% | 32/43 | 93.26% | 180/193 | |
| settings.js | 98.86% | 87/88 | 83.33% | 5/6 | 88.89% | 8/9 | 98.85% | 86/87 | |
| symbols.js | 93.96% | 140/149 | 84.85% | 56/66 | 87.5% | 7/8 | 96.9% | 125/129 | |
| utils.js | 100% | 43/43 | 100% | 29/29 | 100% | 8/8 | 100% | 38/38 | |
| version.js | 75% | 6/8 | 100% | 0/0 | 0% | 0/2 | 75% | 6/8 |


| DOSE: |
repeated |
insufflated |
Ketamine |
(daily) |
I'm from and live in England. I'm a party girl and love dance music, clubs and drugs.
 When I did it was fun.
When I was about 22 I made a friend that could get it more easily and we would enjoy it maybe weekly or every two weeks. Again this was fun and never really had any bad experiences. It was when I must have been 26 my friend stopped taking it and I set out to find my own source, and I did. From then on I could get K whenever I wanted. Fabulous! I was very happy! Me and and the now ex would get K every weekend, sometimes mid week too (for a treat!) We were very, very happy. Life had never felt so good! Aparently K is an antidepressant. Sex was good, life was a giggle. The worst effect we felt was being tired some days, but the tired I would feel the next day was a really happy, sleepy tired. Tired never felt so good!
My non drug taking friends started to notice I was on drugs much of the time, I started acting out of control when drinking, people wondered how I had lost so much weight. I didnt care. That was their problem, not mine. I started taking K daily, a nice big line for breakfast then drive the car to work! Get home then more K. Started taking GHB too and falling asleep at the wheel. Still very happy, friends are NOT happy but screw them, they don't understand.
[Erowid Note: Driving while intoxicated or tripping is dangerous and irresponsible because it endangers other people. Don't do it!]
Anyway, I thought K is not addictive, turns out if you spend a year constantly snorting it every hour you are not at work, it is. I would end up with the worst, most painful abdominal cramps that result in being taken to hospital in an ambulance, screaming in pain having overdosed, it is. My body being covered in a rash that burns and itches like crazy after the unbearable stomach cramps, it is. And after each OD I would still crawl back to the dining room table where I left my lovely pile of ket and still couldn't resist shoving it up my nose, then, that my friend is an addiction.
I could bleat on all night about this but I wont and just think if people are using K daily and not yet seeing the down side then maybe they might take it easy after reading.
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.


Interface IsSortableInterface
provides a way to define whish fields of an entity are sortable
Namespace: DSchoenbauer\Orm\Entity
Author: David Schoenbauer<EMAIL_ADDRESS>Located at Orm/Entity/IsSortableInterface.php
Author: David Schoenbauer<EMAIL_ADDRESS>Located at Orm/Entity/IsSortableInterface.php
public
array
|
|
public
string
|
|
public
string
|
string |
SORT_ASCENDING
|
#
"ASC"
|
string |
SORT_DESCENDING
|
#
"DESC"
|