-
How to Start a Startup
startupclass.samaltman.com
CS183B is a class we’re teaching at Stanford. It’s designed to be a sort of one-class business course for people who want to start startups.
-
Requests for Startups
www.ycombinator.com
You shouldn't start a company just because it's on this list. 1. It’s mostly here to help stimulate you to think about ideas.
-
Peter Thiel, technology entrepreneur and investor. AMA • /r/IAmA
www.reddit.com
**My short bio:** Hi, I'm Peter Thiel, co-founder of PayPal and Palantir, first investor in Facebook, venture capitalist at Founders Fund, and...
-
Occupational Hazards of Working on Wall Street
www.bloombergview.com
Michael Lewis asks the big question about the army of Ivy League graduates, with seemingly endless career options, who wind up in finance: What ...
-
Troy Hunt: Everything you need to know about the Shellshock Bash bug
www.troyhunt.com
Observations, musings and conjecture about the world of software and technology
-
Entrepreneurs anonymous
www.economist.com
SEVEN years ago Joe Jones (not his real name) left his job with a big NASDAQ-listed company to strike out on his own.
-
After Surgery, Surprise $117,000 Medical Bill From Doctor He Didn’t Know
www.nytimes.com
In a growing practice, medical assistants, consultants and other hospital staffers, often called in without patients’ knowledge, are charging hefty ...
-
How the Ray Rice scandal unfolded
espn.go.com
Outside the Lines: A pattern of misinformation and misdirection was employed by the Baltimore Ravens and the NFL after Ray Rice hit his wife.
-
A Long, Ugly Year of Depression That's Finally Fading - Rand's Blog
moz.com
Yesterday morning I woke up early to speak at the Business of Software conference in Boston. It was my first time there, and it’s an exceptional ...
-
Marc Andreessen Sounds Warning on Start-Ups Burning Cash
dealbook.nytimes.com
The prominent venture capitalist took to Twitter on Thursday to warn against excessive spending by start-ups that have attracted capital from ...
-
oss-sec: Re: CVE-2014-6271: remote code execution through bash
seclists.org
oss-sec mailing list archives
-
Out in the Open: The Site That Teaches You to Code Well Enough to Get a ...
www.wired.com
Wanna be a programmer? That shouldn’t be too hard. You can sign-up for an iterative online tutorial at a site like Codecademy or Treehouse. You can ...
-
Billionaire must let public access Martins Beach, judge rules
www.sfgate.com
âItâs a fabulous victory for the people of California because now their coast is safe,â said Joe Cotchett, lead attorney for the Surfrider ...
-
An Article on Shonda Rhimes Rightly Causes a Furor - NYTimes.com
publiceditor.blogs.nytimes.com
The article on the television producer Shonda Rhimes hadn’t yet appeared in Sunday’s paper, but the virtual world was ablaze in protest over it on ...
-
Ways to think about watches
ben-evans.com
Standing in Cupertino last week, holding an Apple watch in my hand, I was reminded very much of the original iPad launch. Here is an idea for a new ...
-
Tech Cocktail Celebrate Conference 2014
celebrate.tech.co
Celebrate is a national tech conference and startup competition offering inspiring speakers, parties, llamas, more held in downtown Las Vegas October ...
-
Zenefits’ Leader Is Rattling an Industry, So Why Is He Stressed Out? - ...
www.nytimes.com
Parker Conrad’s start-up, Zenefits, is thought to be one of the fastest-growing companies in recent Silicon Valley history, and his investors and ...
-
scottsievert/xkcd-688
github.com
Contribute to xkcd-688 development by creating an account on GitHub.
-
How Gary Hart’s Downfall Forever Changed American Politics - NYTimes.com
www.nytimes.com
On a scalding July day five years ago, I found myself hiking in Red Rocks Park, just outside Denver, with Gary Hart. The copper cliffs were ...
-
Burn Baby Burn – AVC
avc.com
Andy sent me a WSJ piece with Bill Gurley yesterday. I don’t like to link to paid content so here’s a good Business Insider summary of the article ...
-
Tesla CEO Musk Sees Fully Autonomous Car Ready in Five or Six Years
online.wsj.com
Tesla Motors's Chief Executive Elon Musk said the technology for a fully autonomous car will be ready in five or six years, and the result will be a ...
-
Anger Over Songs Of Innocence – Marco.org
www.marco.org
September 16, 2014 • ∞ http://www.marco.org/2014/09/16/this-u2-album-really-does-suck
-
Applying to YC
blog.samaltman.com
One of the most common misconceptions startups have about applying to Y Combinator is thinking that they are too early or too late. We have funded ...


| GEOS SDK TechDocs
|
| memsize ...
| objmessagebrk ...
noStructEnum
var noStructEnum [(0|1)]
Examples:
-
"var noStructEnum 1"
-
Don't put "struct" or "enum" before the data type for variables that are structures or enumerated types.
Structure fields that are structures or enumerated types normally have "struct" or "enum" as part of their type description. This usually just clutters up the display, however, so this variable shuts off this prepending.
The default value of this variable is one.
See Also: print.
null
null <val>
Examples:
-
"null $sym"
- Sees if the symbol token stored in $sym is the empty string or "nil."
Checks to see if a string is either empty or "nil," special values returned by many commands when something isn't found or doesn't apply. Returns non-zero if <val> is either of these special values.
The notion of "nil" as a value comes from lisp.
See Also: index,
range.
objbrk
objbrk [<obj address>] [<message>]
Examples:
-
"objbrk ds:si
MSG_VIS_DRAW
" -
break when a
MSG_VIS_DRAW
reaches the object
-
"objbrk -p"
- Break when any message is sent to the process object.
Break when a particular message reaches a particular object.
-
If you do not give a <message> argument after the <obj> argument, the machine will stop when any message is delivered to the object.
-
<obj> is the address of the object to watch.
-
The <objbrk> argument to "objbrk del" is the token/number returned when you set the breakpoint.
See Also: objwatch,
objmessagebrk,
mwatch.
obj-class
objclass <obj-addr>
Examples:
-
"var cs [obj-class ^lbx:si]"
-
Store the symbol token for the class of the object ^lbx:si in the variable $cs.
Figures out the class of an object, coping with unrelocated object blocks and the like.
-
The value return is a symbol token, as one would pass to the "symbol" command. Using "symbol name" or "symbol fullname" you can obtain the actual class name.
-
We decide whether to relocate the class pointer ourselves based on the LMF_RELOCATED bit in the
LMBH_flags
field of the object block's header. There are times, e.g. during the call to
MSG_META_RELOCATE
for an object, when this bit doesn't accurately reflect the state of the class pointer and we will return an error when we should not.
See Also: symbol.
objcount
objcount [-q] [-X] [-Y] [-b #] [-o #] [-p #]
Examples:
-
"objcount"
- count all objects
-
"objcount -p welcome"
-
count all objects owned by welcome
-
"objcount -o *desktop::DiskDrives"
-
count this one object
-
"objcount -b 0x3270"
-
count all objects in this block.
Count up instances of various objects on the heap.
-
The first argument specifies the options:
-
q
- quiet operation - no progress output (not applicable with X, Y)
-
o #
- check only object #
-
b #
- check ONLY block #
-
p #
- check only blocks for patient #
-
c #
- check only objects of class #
-
C #
- check only objects of top-level class #
-
X
- show general verbose info
-
Y
- show search verbose info
-
Output fields:
-
direct
- number of direct instances of this class
-
indirect
-
number if indirect instance of this class (i.e object's superclass is this class)
-
size
- total size of instance data for this class (excludes instance data inherited from superclass)
-
Status output:
-
.
- processing heap block
-
,
- processing matching object's top-level class
-
;
- processing matching object's non-top-level class
See Also: hwalk,
objwalk,
lhwalk.
obj-foreach-class
obj-foreach-class <function> <object> [<args>]
Examples:
-
"obj-foreach-class foo-callback ^lbx:si"
-
calls foo-callback with each class in turn to which the object ^lbx:si belongs.
Processes all the classes to which an object belongs, calling a callback procedure for each class symbol in turn.
-
<function> is called with the symbol for the current class as its first argument, <object> as its second, and the arguments that follow <object> as its third and subsequent arguments.
-
<function> should return an empty string to continue up the class tree.
-
obj-foreach-class returns whatever <function> returned, if it halted processing before the root of the class tree was reached. It returns the empty string if <function> never returned a non-empty result.
See Also: obj-class.
| GEOS SDK TechDocs
|
| memsize ...
| objmessagebrk ...


Upload an Image
I will try to make a story out of your image
Choose a file…
Tags
Submit
Stop speaking!
0%


CS-109B Introduction to Data Science
Lab 5: Convolutional Neural Networks¶
Harvard University
Spring 2019
Lab instructor: Eleni Kaxiras
Instructors: Pavlos Protopapas and Mark Glickman
Authors: Eleni Kaxiras, Pavlos Protopapas, Patrick Ohiomoba, and Davis Sontag
# RUN THIS CELL TO PROPERLY HIGHLIGHT THE EXERCISES
import requests
from IPython.core.display import HTML
styles = requests.get("https://raw.githubusercontent.com/Harvard-IACS/2019-CS109B/master/content/styles/cs109.css").text
HTML(styles)
Learning Goals¶
In this lab we will look at Convolutional Neural Networks (CNNs), and their building blocks.
By the end of this lab, you should:
- know how to put together the building blocks used in CNNs - such as convolutional layers and pooling layers - in
keras
with an example. - have a good undertanding on how images, a common type of data for a CNN, are represented in the computer and how to think of them as arrays of numbers.
- be familiar with preprocessing images with
keras
andsckit-learn
. - use
keras-viz
to produce Saliency maps. - learn best practices for configuring the hyperparameters of a CNN.
- run your first CNN and see the error rate.
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (5,5)
import numpy as np
from scipy.optimize import minimize
import tensorflow as tf
import keras
from keras import layers
from keras import models
from keras import utils
from keras.layers import Dense
from keras.models import Sequential
from keras.layers import Flatten
from keras.layers import Dropout
from keras.layers import Activation
from keras.regularizers import l2
from keras.optimizers import SGD
from keras.optimizers import RMSprop
from keras import datasets
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import LearningRateScheduler
from keras.callbacks import History
from keras import losses
from keras.datasets import mnist
from keras.utils import to_categorical
from sklearn.utils import shuffle
print(tf.VERSION)
print(tf.keras.__version__)
%matplotlib inline
Prologue: keras-viz
Visualization Toolkit¶
keras-vis
is a high-level toolkit for visualizing and debugging your trained keras neural net models. Currently supported visualizations include:
- Activation maximization
- Saliency maps
- Class activation maps
All visualizations by default support N-dimensional image inputs. i.e., it generalizes to N-dim image inputs to your model. Compatible with both theano and tensorflow backends with 'channels_first', 'channels_last' data format.
Read the documentation at https://raghakot.github.io/keras-vis.https://github.com/raghakot/keras-vis
To install use pip install git+https://github.com/raghakot/keras-vis.git --upgrade
SEAS JupyterHub¶
Instructions for Using SEAS JupyterHub
SEAS and FAS are providing you with a platform in AWS to use for the class (accessible from the 'Jupyter' menu link in Canvas). These are AWS p2 instances with a GPU, 10GB of disk space, and 61 GB of RAM, for faster training for your networks. Most of the libraries such as keras, tensorflow, pandas, etc. are pre-installed. If a library is missing you may install it via the Terminal.
NOTE : The AWS platform is funded by SEAS and FAS for the purposes of the class. It is not running against your individual credit. You are not allowed to use it for purposes not related to this course.
Help us keep this service: Make sure you stop your instance as soon as you do not need it.
Part 1: Parts of a Convolutional Neural Net¶
There are three types of layers in a Convolutional Neural Network:
- Convolutional Layers
- Pooling Layers.
- Dropout Layers.
- Fully Connected Layers.
a. Convolutional Layers.¶
Convolutional layers are comprised of filters and feature maps. The filters are essentially the neurons of the layer. They have the weights and produce the input for the next layer. The feature map is the output of one filter applied to the previous layer.
The fundamental difference between a densely connected layer and a convolution layer is that dense layers learn global patterns in their input feature space (for example, for an MNIST digit, patterns involving all pixels), whereas convolution layers learn local patterns: in the case of images, patterns found in small 2D windows of the inputs called receptive fields.
This key characteristic gives convnets two interesting properties:
The patterns they learn are translation invariant. After learning a certain pattern in the lower-right corner of a picture, a convnet can recognize it anywhere: for example, in the upper-left corner. A densely connected network would have to learn the pattern anew if it appeared at a new location. This makes convnets data efficient when processing images (because the visual world is fundamentally translation invariant): they need fewer training samples to learn representations that have generalization power.
They can learn spatial hierarchies of patterns. A first convolution layer will learn small local patterns such as edges, a second convolution layer will learn larger patterns made of the features of the first layers, and so on. This allows convnets to efficiently learn increasingly complex and abstract visual concepts (because the visual world is fundamentally spatially hierarchical).
Convolutions operate over 3D tensors, called feature maps, with two spatial axes (height and width) as well as a depth axis (also called the channels axis). For an RGB image, the dimension of the depth axis is 3, because the image has three color channels: red, green, and blue. For a black-and-white picture, like the MNIST digits, the depth is 1 (levels of gray). The convolution operation extracts patches from its input feature map and applies the same transformation to all of these patches, producing an output feature map. This output feature map is still a 3D tensor: it has a width and a height. Its depth can be arbitrary, because the output depth is a parameter of the layer, and the different channels in that depth axis no longer stand for specific colors as in RGB input; rather, they stand for filters. Filters encode specific aspects of the input data: at a high level, a single filter could encode the concept “presence of a face in the input,” for instance.
In the MNIST example that we will see, the first convolution layer takes a feature map of size (28, 28, 1) and outputs a feature map of size (26, 26, 32): it computes 32 filters over its input. Each of these 32 output channels contains a 26×26 grid of values, which is a response map of the filter over the input, indicating the response of that filter pattern at different locations in the input.
Convolutions are defined by two key parameters:
- Size of the patches extracted from the inputs. These are typically 3×3 or 5×5
- The number of filters computed by the convolution.
Padding: One of "valid", "causal" or "same" (case-insensitive). "valid" means "no padding". "same" results in padding the input such that the output has the same length as the original input. "causal" results in causal (dilated) convolutions,
In keras
see convolutional layers
keras.layers.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', activation=None, use_bias=True, kernel_initializer='glorot_uniform', data_format='channels_last', bias_initializer='zeros')
How are the values in feature maps calculated?¶
Exercise 1:¶
- Compute the operations by hand (assuming zero padding and same arrays for all channels) to produce the first element of the 4x4 feature map. How did we get the 4x4 output size?
- Write this Conv layer in keras
-- your answer here
b. Pooling Layers.¶
Pooling layers are also comprised of filters and feature maps. Let's say the pooling layer has a 2x2 receptive field and a stride of 2. This stride results in feature maps that are one half the size of the input feature maps. We can use a max() operation for each receptive field.
In keras
see pooling layers
keras.layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)
c. Dropout Layers.¶
Dropout consists in randomly setting a fraction rate of input units to 0 at each update during training time, which helps prevent overfitting.
In keras
see Dropout layers
keras.layers.Dropout(rate, seed=None)
rate: float between 0 and 1. Fraction of the input units to drop.
seed: A Python integer to use as random seed.
References
Dropout: A Simple Way to Prevent Neural Networks from Overfitting
d. Fully Connected Layers.¶
A fully connected layer flattens the square feature map into a vector. Then we can use a sigmoid or softmax activation function to output probabilities of classes.
In keras
see FC layers
keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros')
IT'S ALL ABOUT THE HYPERPARAMETERS!¶
- stride
- size of filter
- number of filters
- poolsize
img = plt.imread('data/picasso.png')
img.shape
img[1,:,1]
print(type(img[50][0][0]))
# let's see the image
imgplot = plt.imshow(img)
Visualizing the channels¶
R_img = img[:,:,0]
G_img = img[:,:,1]
B_img = img[:,:,2]
plt.subplot(221)
plt.imshow(R_img, cmap=plt.cm.Reds)
plt.subplot(222)
plt.imshow(G_img, cmap=plt.cm.Greens)
plt.subplot(223)
plt.imshow(B_img, cmap=plt.cm.Blues)
plt.subplot(224)
plt.imshow(img)
plt.show()
More on preprocessing data below!
If you want to learn more: Image Processing with Python and Scipy
Part 3: Putting the Parts together to make a small ConvNet Model¶
Let's put all the parts together to make a convnet for classifying our good old MNIST digits.
# Load data and preprocess
(train_images, train_labels), (test_images, test_labels) = mnist.load_data() # load MNIST data
train_images.shape
train_images.max(), train_images.min()
train_images = train_images.reshape((60000, 28, 28, 1)) # Reshape to get third dimension
train_images = train_images.astype('float32') / 255 # Normalize between 0 and 1
test_images = test_images.reshape((10000, 28, 28, 1)) # Reshape to get third dimension
test_images = test_images.astype('float32') / 255 # Normalize between 0 and 1
# Convert labels to categorical data
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
mnist_cnn_model = models.Sequential() # Create sequential model
# Add network layers
mnist_cnn_model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
mnist_cnn_model.add(layers.MaxPooling2D((2, 2)))
mnist_cnn_model.add(layers.Conv2D(64, (3, 3), activation='relu'))
mnist_cnn_model.add(layers.MaxPooling2D((2, 2)))
mnist_cnn_model.add(layers.Conv2D(64, (3, 3), activation='relu'))
The next step is to feed the last output tensor (of shape (3, 3, 64)) into a densely connected classifier network like those you’re already familiar with: a stack of Dense layers. These classifiers process vectors, which are 1D, whereas the current output is a 3D tensor. First we have to flatten the 3D outputs to 1D, and then add a few Dense layers on top.
mnist_cnn_model.add(layers.Flatten())
mnist_cnn_model.add(layers.Dense(64, activation='relu'))
mnist_cnn_model.add(layers.Dense(10, activation='softmax'))
mnist_cnn_model.summary()
# Compile model
mnist_cnn_model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# Fit the model
mnist_cnn_model.fit(train_images, train_labels, epochs=5, batch_size=64)
# Evaluate the model on the test data:
test_loss, test_acc = mnist_cnn_model.evaluate(test_images, test_labels)
test_acc
A densely connected network (MLP) running MNIST usually has a test accuracy of 97.8%, whereas our basic convnet has a test accuracy of 99.03%: we decreased the error rate by 68% (relative) with only 5 epochs. Not bad! But why does this simple convnet work so well, compared to a densely connected model? The answer is above on how convolutional layers work!
The MNIST and other pre-loaded dataset are formatted in a way that is almost ready for feeding into the model. What about plain images? They should be formatted into appropriately preprocessed floating-point tensors before being fed into the network.
The Dogs vs. Cats dataset that you’ll use isn’t packaged with Keras. It was made available by Kaggle as part of a computer-vision competition in late 2013, back when convnets weren’t mainstream. The data has been downloaded for you from https://www.kaggle.com/c/dogs-vs-cats/data The pictures are medium-resolution color JPEGs.
# TODO: set your base dir to your correct local location
base_dir = 'data/cats_and_dogs_small'
import os, shutil
# Set up directory information
train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'validation')
test_dir = os.path.join(base_dir, 'test')
train_cats_dir = os.path.join(train_dir, 'cats')
train_dogs_dir = os.path.join(train_dir, 'dogs')
validation_cats_dir = os.path.join(validation_dir, 'cats')
validation_dogs_dir = os.path.join(validation_dir, 'dogs')
test_cats_dir = os.path.join(test_dir, 'cats')
test_dogs_dir = os.path.join(test_dir, 'dogs')
print('total training cat images:', len(os.listdir(train_cats_dir)))
print('total training dog images:', len(os.listdir(train_dogs_dir)))
print('total validation cat images:', len(os.listdir(validation_cats_dir)))
print('total validation dog images:', len(os.listdir(validation_dogs_dir)))
print('total test cat images:', len(os.listdir(test_cats_dir)))
print('total test dog images:', len(os.listdir(test_dogs_dir)))
So you do indeed have 2,000 training images, 1,000 validation images, and 1,000 test images. Each split contains the same number of samples from each class: this is a balanced binary-classification problem, which means classification accuracy will be an appropriate measure of success.
Building the network¶
from keras import layers
from keras import models
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',
input_shape=(150, 150, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.summary()
For the compilation step, you’ll go with the RMSprop optimizer. Because you ended the network with a single sigmoid unit, you’ll use binary crossentropy as the loss.
from keras import optimizers
model.compile(loss='binary_crossentropy',
optimizer=optimizers.RMSprop(lr=1e-4),
metrics=['acc'])
The steps for getting it into the network are roughly as follows:
- Read the picture files.
- Decode the JPEG content to RGB grids of pixels.
- Convert these into floating-point tensors.
- Rescale the pixel values (between 0 and 255) to the [0, 1] interval (as you know, neural networks prefer to deal with small input values).
It may seem a bit daunting, but fortunately Keras has utilities to take care of these steps automatically with the class ImageDataGenerator
, which lets you quickly set up Python generators that can automatically turn image files on disk into batches of preprocessed tensors. This is what you’ll use here.
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(150, 150),
batch_size=20,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
validation_dir,
target_size=(150, 150),
batch_size=20,
class_mode='binary')
Let’s look at the output of one of these generators: it yields batches of 150×150 RGB images (shape (20, 150, 150, 3)) and binary labels (shape (20,)). There are 20 samples in each batch (the batch size). Note that the generator yields these batches indefinitely: it loops endlessly over the images in the target folder. For this reason, you need to break the iteration loop at some point:
for data_batch, labels_batch in train_generator:
print('data batch shape:', data_batch.shape)
print('labels batch shape:', labels_batch.shape)
break
Let’s fit the model to the data using the generator. You do so using the .fit_generator
method, the equivalent of .fit
for data generators like this one. It expects as its first argument a Python generator that will yield batches of inputs and targets indefinitely, like this one does.
Because the data is being generated endlessly, the Keras model needs to know how many samples to draw from the generator before declaring an epoch over. This is the role of the steps_per_epoch
argument: after having drawn steps_per_epoch batches from the generator—that is, after having run for steps_per_epoch gradient descent steps - the fitting process will go to the next epoch. In this case, batches are 20 samples, so it will take 100 batches until you see your target of 2,000 samples.
When using fit_generator, you can pass a validation_data argument, much as with the fit method. It’s important to note that this argument is allowed to be a data generator, but it could also be a tuple of Numpy arrays. If you pass a generator as validation_data, then this generator is expected to yield batches of validation data endlessly; thus you should also specify the validation_steps argument, which tells the process how many batches to draw from the validation generator for evaluation
history = model.fit_generator(
train_generator,
steps_per_epoch=100,
epochs=5, # TODO: should be 30
validation_data=validation_generator,
validation_steps=50)
# It’s good practice to always save your models after training.
model.save('cats_and_dogs_small_1.h5')
Let’s plot the accuracy of the model over the training and validation data during training:
fig, ax = plt.subplots(1, 1, figsize=(10,6))
ax.plot((history.history['acc']), 'r', label='train')
ax.plot((history.history['val_acc']), 'b' ,label='val')
ax.set_xlabel(r'Epoch', fontsize=20)
ax.set_ylabel(r'Accuracy', fontsize=20)
ax.legend()
ax.tick_params(labelsize=20)
Let's try data augmentation
datagen = ImageDataGenerator(
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
These are just a few of the options available (for more, see the Keras documentation). Let’s quickly go over this code:
- rotation_range is a value in degrees (0–180), a range within which to randomly rotate pictures.
- width_shift and height_shift are ranges (as a fraction of total width or height) within which to randomly translate pictures vertically or horizontally.
- shear_range is for randomly applying shearing transformations.
- zoom_range is for randomly zooming inside pictures.
- horizontal_flip is for randomly flipping half the images horizontally—relevant when there are no assumptions of - horizontal asymmetry (for example, real-world pictures).
- fill_mode is the strategy used for filling in newly created pixels, which can appear after a rotation or a width/height shift.
Let’s look at the augmented images
from keras.preprocessing import image
fnames = [os.path.join(train_dogs_dir, fname) for
fname in os.listdir(train_dogs_dir)]
img_path = fnames[3] # Chooses one image to augment
img = image.load_img(img_path, target_size=(150, 150))
# Reads the image and resizes it
x = image.img_to_array(img) # Converts it to a Numpy array with shape (150, 150, 3)
x = x.reshape((1,) + x.shape) # Reshapes it to (1, 150, 150, 3)
i=0
for batch in datagen.flow(x, batch_size=1):
plt.figure(i)
imgplot = plt.imshow(image.array_to_img(batch[0]))
i += 1
if i % 4 == 0:
break
plt.show()
If you train a new network using this data-augmentation configuration, the network will never see the same input twice. But the inputs it sees are still heavily intercorrelated, because they come from a small number of original images—you can’t produce new information, you can only remix existing information. As such, this may not be enough to completely get rid of overfitting. To further fight overfitting, you’ll also add a Dropout layer to your model right before the densely connected classifier.
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',
input_shape=(150, 150, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dropout(0.5))
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer=optimizers.RMSprop(lr=1e-4),
metrics=['acc'])
# Let’s train the network using data augmentation and dropout.
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,)
test_datagen = ImageDataGenerator(rescale=1./255)
# Note that the validation data shouldn’t be augmented!
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
validation_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary')
history = model.fit_generator(
train_generator,
steps_per_epoch=100,
epochs=5, # TODO: should be 100
validation_data=validation_generator,
validation_steps=50)
model.save('cats_and_dogs_small_2.h5')
And let’s plot the results again. Thanks to data augmentation and dropout, you’re no longer overfitting: the training curves are closely tracking the validation curves. You now reach an accuracy of 82%, a 15% relative improvement over the non-regularized model. (Note: these numbers are for 100 epochs..)
fig, ax = plt.subplots(1, 1, figsize=(10,6))
ax.plot((history.history['acc']), 'r', label='train')
ax.plot((history.history['val_acc']), 'b' ,label='val')
ax.set_xlabel(r'Epoch', fontsize=20)
ax.set_ylabel(r'Accuracy', fontsize=20)
ax.legend()
ax.tick_params(labelsize=20)
By using regularization techniques even further, and by tuning the network’s parameters (such as the number of filters per convolution layer, or the number of layers in the network), you may be able to get an even better accuracy, likely up to 86% or 87%. But it would prove difficult to go any higher just by training your own convnet from scratch, because you have so little data to work with. As a next step to improve your accuracy on this problem, you’ll have to use a pretrained model.
Part 4: keras viz toolkit¶
class_idx = 0
indices = np.where(test_labels[:, class_idx] == 1.)[0]
# pick some random input from here.
idx = indices[0]
# Lets sanity check the picked image.
from matplotlib import pyplot as plt
%matplotlib inline
plt.rcParams['figure.figsize'] = (18, 6)
plt.imshow(test_images[idx][..., 0])
input_shape=(28, 28, 1)
num_classes = 10
batch_size = 128
epochs = 5
model = Sequential()
model.add(layers.Conv2D(32, kernel_size=(3, 3),
activation='relu',
input_shape=input_shape))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D(pool_size=(2, 2)))
model.add(layers.Dropout(0.25))
model.add(layers.Flatten())
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(num_classes, activation='softmax', name='preds'))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adam(),
metrics=['accuracy'])
model.fit(train_images, train_labels,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(test_images, test_labels))
score = model.evaluate(test_images, test_labels, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
from vis.visualization import visualize_saliency
from vis.utils import utils
from keras import activations
# Utility to search for layer index by name.
# Alternatively we can specify this as -1 since it corresponds to the last layer.
layer_idx = utils.find_layer_idx(model, 'preds')
plt.rcParams["figure.figsize"] = (5,5)
from vis.visualization import visualize_cam
import warnings
warnings.filterwarnings('ignore')
# This corresponds to the Dense linear layer.
for class_idx in np.arange(10):
indices = np.where(test_labels[:, class_idx] == 1.)[0]
idx = indices[0]
f, ax = plt.subplots(1, 4)
ax[0].imshow(test_images[idx][..., 0])
for i, modifier in enumerate([None, 'guided', 'relu']):
grads = visualize_cam(model, layer_idx, filter_indices=class_idx,
seed_input=test_images[idx], backprop_modifier=modifier)
if modifier is None:
modifier = 'vanilla'
ax[i+1].set_title(modifier)
ax[i+1].imshow(grads, cmap='jet')
References and Acknowledgements¶
The cats and dogs part of this lab is based on the book Deep Learning with Python, Chapter 5 written by the Francois Chollet, the author of Keras. It is a very practical introduction to Deep Learning. It is appropriate for those with some Python knowledge who want to start with machine learning.
The saliency maps are from https://github.com/raghakot/keras-vis/blob/master/examples/mnist/attention.ipynb


Decode Online
Adjust and Retry
Close
Clip
Open
Close
QRScaner from
laobubu.net
Auto Close
Use mouse wheel to resize, then draw a rectangle to clip
Enhance Contrast
invert color


| Name | Total Lines | Lines of Code | Total Coverage | Code Coverage |
|---|---|---|---|---|
| app/models/reports/organization.rb | 60 | 53 | 28.33%
|
18.87%
|
Code reported as executed by Ruby looks like this...and this: this line is also marked as covered.Lines considered as run by rcov, but not reported by Ruby, look like this,and this: these lines were inferred by rcov (using simple heuristics).Finally, here's a line marked as not executed.
1 module Reporting |
2 module OrganizationReports |
3 def query_as_number(sql) |
4 repository.adapter.query(sql)[0] |
5 end |
6 |
7 def branch_count(end_date) |
8 query_as_number(%Q{ |
9 SELECT COUNT(b.id) as count |
10 FROM branches b |
11 WHERE b.created_at < '#{end_date}'}) |
12 end |
13 |
14 def centers_count(end_date) |
15 query_as_number(%Q{ |
16 SELECT COUNT(c.id) as count |
17 FROM centers c |
18 WHERE c.created_at < '#{end_date}'}) |
19 end |
20 |
21 def cms_count(end_date) |
22 query_as_number(%Q{ |
23 SELECT COUNT(DISTINCT(c.manager_staff_id)) as count |
24 FROM centers c |
25 WHERE c.created_at < '#{end_date}'}) |
26 end |
27 |
28 def clients_count(end_date) |
29 query_as_number(%Q{ |
30 SELECT COUNT(*) as count |
31 FROM clients c |
32 WHERE c.date_joined < '#{end_date}'}) |
33 end |
34 |
35 def borrowers(end_date) |
36 query_as_number(%Q{ |
37 SELECT COUNT(DISTINCT client_id) |
38 FROM loan_history lh |
39 WHERE lh.status <= 3 AND lh.created_at<'#{end_date}'}) |
40 end |
41 |
42 def disbursed(end_date, what) |
43 end_date = Date.parse(end_date) unless end_date.is_a? Date |
44 return unless what.downcase == "sum" or what.downcase == "count" |
45 query_as_number(%Q{ |
46 SELECT #{what}(l.amount) |
47 FROM loans l |
48 WHERE l.disbursal_date < '#{end_date}' |
49 }) |
50 end |
51 |
52 def net_portfolio(end_date) |
53 repository.adapter.query(%Q{ |
54 SELECT min(actual_outstanding_total) tot |
55 FROM loan_history where status=3 and date BETWEEN '#{start_date}' AND '#{end_date}' |
56 GROUP BY loan_id |
57 ORDER BY loan_id, date DESC}).reduce{|sum, x| sum+x} |
58 end |
59 end |
60 end |
Generated on Thu Nov 12 16:05:07 +0530 2009 with rcov 0.9.6


{% load static %}
Beer Reviews
BROWSE BY:
brewer
type
SORT BY:
grade (asc)
grade (desc)
id (asc)
id (desc)
name (asc)
name (desc)
{% for beer in all_beers %}
{% with 'images/'|add:beer.image_tile as tile %}
{% endwith %}
{% endfor %}


My passion in design is to understand people's behaviors and emotions, and project that insight into a meaningful and effective design. Becoming a UX designer allows me to be a great version of myself.
I was born and raised in Bangkok, Thailand, but really started learning about life and being independent in Tokyo, Japan. Now I am in San Francisco to follow my own American dream. I love to travel and to explore and experience different cultures. Together with their experiences, I believe that culture is a big influence on a person's behavior, way of thinking, and personality. With my experience and my culture I see myself as very intuitive, versatile, great at multi-tasking, and highly motivated. I am observant and a fast learner, which allows me to adapt into any situation, yet being myself
My experience from working as a Visua Designer while learning UX Design Bootcamp with UC Berkley has helped me to master these skills:


A Fork-n-Go project is a project on GitHub that in a few clicks, starting with a fork, gives another user a live website that they control with an easy to swap-for-your-own Google Spreadsheet database.
Two awesome things that make this possible: Forking, the tool on GitHub that allows you to copy a public repository onto your account, and GitHub Pages, GitHub's free web hosting service for ever repository, account and organization.
I've built a whole other website on the idea with lots of examples: jlord.github.io/forkngo
To have a website for a repository hosted by GitHub Pages all you need is a branch named gh-pages
. GitHub will then look in that branch for web files and serve them up at the address.
So Sheetsee.js projects, hosted on gh-pages
branches on GitHub, can easily be forked and connected to another spreadsheet giving another user a live website of their own—with data they control—really easily.
A Fork-n-Go example from my blog post on the topic:
I made this website to collect hack spots all over the world from friends and friends of friends (the spreadsheet is wide open, so you can add some, too!). It’s using sheetsee to power the table, map and other elements of the page. Its source is in this repo, with just a gh-pages branch. To create an instance of this site for yourself all you need to do:
Now you have the same site connected to a spreadsheet that you manage — it’s live and can be found at yourGitHubName.github.io/theReposName.


WITNESS LIST Transportation & Homeland Security Committee April 18, 2006 - 1:00P Charge 1 ON: Allison, Jim General Counsel (County Judges + Commissioners Assn. of TX), Austin, TX Behrens, P.E., Michael W. Executive Director (Texas Department of Transportation), Austin, TX Rogers, Mark Major (Texas Department of Public Safety), Austin, TX Thompson, John Legislative Chair and Polk County Judge (County Judges + Commissioners Assoc.), Livingston, TX Charge 4 ON: Babin, Fred Manager of Transportation (Port of Corpus Christi), Corpus Christi, TX Covington, Sid Chairman, Board of Directors (Austin-San Antonio Intermunicipal Commuter Rail District), Austin, TX Defebaugh, Wayne President (Blacklands Railroad), Sulphur Springs, TX Edmonds, Jim Chairman (Port of Houston Authority), Houston, TX Roby, John Dir. Logistics (Port of Beaumont), Beaumont, TX Saenz, P.E., Amadeo Assistant Executive Director for Engineering Operations (Texas Department of Transportation), Austin, TX Charge 5 ON: Simmons, P.E., Steve Deputy Executive Director (Texas Department of Transportation), Austin, TX Charge 6 ON: Behrens, P.E., Michael W. Executive Director (Texas Department of Transportation), Austin, TX Lopez, P.E., Carlos Director, Traffic Operations Division (Texas Department of Transportation), Austin, TX Opening Remarks ON: Chase, Coby Director, Government & Business Enterprises (Texas Department of Transportation), Austin, TX Saenz, Amadeo Assist. Exec. Dir. Eng. Oper. (Texas Department of Transportation), Austin, TX Williamson, Ric Chairman (Texas Transportation Commission), Austin, TX Charge 1 Registering, but not testifying: On: Davis, Carol Director of Motor Carrier Division (Texas Department of Transportation), Austin, TX Palmer, David Captain (Texas Dept. of Public Safety), Austin, TX Plunk, Kenneth Captain (Texas Dept. of Public Safety), Austin, TX Charge 4 On: Kearns, Dennis Attorney (BNSF Railway), Austin, TX Olsen, Ron Special Rep. (Union Pacific Railroad), Austin, TX Charge 5 On: Lopez, P.E., Carlos Director, Traffic Operations Division (Texas Department of Transportation), Austin, TX


South African tech companies that pay the highest salaries
by Staff WriterSouth African state-owned enterprises are struggling financially, and it is not difficult to see why – they pay very high salaries even though many of them are not profitable.
The latest data available from the annual reports of JSE-listed companies and state-owned enterprises reveals that ICASA and the SABC pay higher salaries than most listed companies.
ICASA had 364 employees at the end of its 2018/2019 financial year, up from 361 in the 2017/2018 financial year.
The regulator’s personnel costs increased from R283 million in 2018/2019 to R303 million in 2018/2019.
This means the average salary of ICASA employees increased from R783,966 to R832,413 over the past year. This is up from R676,004 in 2016/2017.
Despite being technically bankrupt, the SABC is also paying very high salaries. The broadcaster pays its 3,167 employees an average salary of R762,000 per year.
The SABC’s top 11 managers earned an average salary of R3.466 million per year, while senior managers received an average of R1.989 million each.
Sentech – with 531 employees – paid its staff an average salary of R702,326, while the average salary at Broadband Infraco was R694,438.
Private sector
Vodacom paid its 7,746 employees a total of R6.1 billion in salaries, which translates into an average salary of R787,503. This is up from R741,329 one year ago.
Over the last year, Telkom cut its number of full-time employees from 17,472 to 15,296 – a reduction of 12.5%.
Telkom paid these employees R10 billion in remuneration and benefits, which translates to an average salary package of R656,969.
MTN, which employs 18,835 people across Africa and the Middle East, paid its staff members an average salary of R504,380 per year.
Average salaries in South Africa
The table below shows the average salaries of prominent state-owned and listed ICT companies in South Africa.
These salaries are based on the latest data available from the annual reports of JSE-listed companies and state-owned enterprises.
While state-owned enterprises list the average personnel cost and average salary per employee, JSE-listed companies like Vodacom and Telkom do not provide this information.
In these cases, we used the company’s total staff bill and divided it by the number of employees to calculate the average salary per employee.
| Average Salaries | ||
|---|---|---|
| Company | Employees | Average Salary |
| ICASA | 364 | R832,413 |
| Vodacom | 7,746 | R787,503 |
| MultiChoice | 7,053 | R779,810 |
| SABC | 3,167 | R762,000 |
| Sentech | 531 | R702,326 |
| Broadband Infraco | 137 | R694,438 |
| Telkom | 15,296 | R656,969 |
| MTN | 18,835 | R504,380 |


Kelly's Story
Kelly started with Cultivate in its first semester in 2013 as a freshman at Oakland. Coming from a missionary family, Kelly knew a lot about her faith, the bible, and the importance of reaching out. However, even with an incredible family, she still had her obstacles to overcome.
A fear of missing out on God’s promptings for her life was one such obstacle. As a successful student-athlete in high school, Kelly had a plan and direction for her life, but she was afraid of one day waking up and thinking she had missed or left God’s plan some place in the distant past. As a new freshman living away from home for the first time, this fear was fierce; still, she wanted help to put God first in her life.
In a divine connection, Kelly became connected with the Cultivate team. She was befriended, prayed over, and joined a women’s group. She participated in twice weekly faith discussions, and began to pray significantly on her own. In her second year, she began a relationship with a female mentor who she still spends time with 4 years later as she does her graduate study at Oakland. She looked around campus organizations to see where she could be of assistance. Kelly began to grow, and as a result, started to become a kingdom worker, desiring to serve others to show them the love of Christ.
As a student-athlete at Oakland, Kelly formed relationships with members of her track team, and became a part of Fellowship of Christian Athletes. During her junior year, she launched her first small group, inviting in several athletes who lived in her residence community on campus. One of the young women she invited was struggling deeply in her faith, but Kelly continually encouraged her, even when it meant late nights or difficult circumstances. Two years later, that same young woman has rekindled her relationship with Jesus.
Kelly has encouraged dozens of students in her time at Oakland. From roommates, to friends, to athletes, Kelly is always looking for ways to grow God’s Kingdom in the hearts of others. Every summer from 2015-2017, Kelly has served as a leader on a local SpringHill Day Camps team in metro Detroit with other Oakland students, working primarily with special needs campers. Beginning in fall of 2016, she became president of Fellowship of Christian Athletes, working to establish and build up a faith community amongst Oakland athletes. In April 2017, she led an initiative to bring a worship concert to Oakland’s campus in an effort to unite various Christian organizations, and even now as a graduate student is investing in undergraduate students to help start new sport-specific small groups. She is a kingdom worker now, and we trust she will continue to be in the future wherever God takes her.


I want my emoncms server to record and display temperatures collected from multiple DS18B20 sensors (timestamping available with a RTC, if necessary). The DS18B20s will be attached to an Arduino Mega1280, which can communicate with a server via an ethernet shield.
I want dials to display the temperatures from each sensor as they are collected and graphs of sensor histories. So far I have a working emoncms server running in a debian virtual machine.
How should the arduino & ethernet shield broadcast the information? Are there any examples of simple sketches that do this? If so, where?
How do I set the emoncms system to find the temperature from the arduino over the network?
After setting up the arduino, I assume I need to set up a temperature input, but what kind of feeds, processes and arguments do I need?
Overall, does this kind of setup make sense? If not, what adjustments should be made?
Re: getting emoncms to listen to arduino
You should just need to make the Arduino send the data via HTTP requests, see http://openenergymonitor.org/emon/emoncms/using-emoncms#Sending_data_to_...
Re: getting emoncms to listen to arduino
I'm new to this.
I have previously made temperatures gathered from DS18B20s available over my local network (I could see them through a browser), and I see (on that example from your link) there is an http address but don't understand how emoncms identifies data as what it should collect.
What is this API key? How do I identify values broadcast from the arduino as those I want to collect and display?
Re: getting emoncms to listen to arduino
When you log in to emoncms you have an API link at the top. It's will provide you with the URL and key you need.
The work you have done previously has set the arduino up as an http server, you need to find an example to make it a client instead.
Data is identified to emoncms by the parameters at the end of the URL. In the given example, power and temperature are the input names - you could use temp1, temp2 etc.
Re: getting emoncms to listen to arduino
I thought about that and did some poking around, so what I'm thinking is that I have to set up my arduinoðernet-shield as a client with the IP address of the specific server I want it to send info to, then after collecting data have a line like:
client.println("GET /emoncms3/api/post.json?apikey=[crazyLongAPIstring]&json={temperature:variableName} HTTP/1.0");
Does that look right? If so, I also saw that some are having issues putting a variable after the input name, what might be the cause of that?
Re: getting emoncms to listen to arduino
Looks about right to me.
i don't have an arduino + ethershield (only use Nanodes) so can't confirm the issues you've reported with variables in the string, but unless you're trying to use quotes (") to enclose data.i can't see there being an issue - it's just a string of characters.
Best bet is to just give it a go really.


{% extends 'base.html'%} {% block main %}
You can't use this feature since there is no movie in the database.


Table of Contents |
Using the Licensing Web SiteThe ITT Visual Information Solutions licensing web site allows you to retrieve your license quickly and easily. All of the information you will need to use the licensing web site will appear in your browser; when you have finished the license activation process the license will (in most cases) appear in the license wizard automatically. This help topic discusses some situations that may disrupt the normal process of using the licensing web site. My browser didn't launchThe license wizard attempts to launch your web browser automatically, forwarding appropriate information about your computer. If your browser does not launch automatically, and display the licensing login screen, do the following:
If you are on a UNIX system, you can also follow the steps described in UNIX: Web Browser Does Not Launch. I don't have a loginIf you do not have an ITT Visual Information Solutions login, click the Create new user account radio button on the licensing web site login screen. I've forgotten my passwordIf you have an ITT Visual Information Solutions login but have forgotten the password, click the Forgot Password link on the licensing web site login screen. My license was not automatically retrievedIf you have worked through the license activation process on the licensing web site but your license is not automatically inserted into the license wizard's license entry screen, do the following:
ITT Visual Information Solutions (February 17, 2009) |


Online Whiteboard
Name
Sign Out
add
Class Name
Male
Female
cancel
Create
kladsjlssdafsafadsfasdfdfasfsafsaksadjfl
present_to_all
Start
groups
Manage students
fact_check
Attendance report
content_copy
Copy class code
done
Copied
Roll number
Student G-mail
cancel
Add
Roll number
Student G-mail
cancel
Remove
Reset attendance responses
(select this if you are starting a new session.)
cancel
start
Eraser
Size
1
2
3
4
5
6
Color
Red
Green
Blue
Black
Ok


Behold the greatest mountains of the world!
This survey will help us know your opinion.
Name
Email
Age (18 to 99)
Which is the highest mountain?
Select an option...
Sia Kangri
K2
Mount Everest
Lupghar Sar
Would you climb any of the mentioned mountains?
Yes
Maybe
No
What mountains would you like to see included? (Check all that apply)
Lhotse
Makalu
Cho Oyu
Manaslu
Himalchuli
K6
Any comments or suggestions?


Account settings
General
Change password
SDK
Notifications
Name
UUID
E-mail
Current password
New password
Repeat new password
API Key
Reset
Copy to clipboard
Activity
Email me when someone log to my account from new location
Application
New API Version notifications
Save changes
Cancel


Event Types: General Facts
The MIDI-events are organisized in HP MIDIFILE with a tag, which describes the event types. The types are
"unsigned int" (UINT) constants and in many functions these are used with the parameter "type".
The table of event-types in Types is divided in three columns:
The name of the UINT type, the category, and the meaning.
The categories
Standard
Standard MIDI-events, status from 0x8? to 0xe?, without controller-events but with NRPN and RPN
Controller
Standard Controller-events, status 0xb?, but without NRPN and RPN
SysEx
Systeme Exclusive events, status 0xf0
Standard Meta
Standard Meta-events, from 0xff-0x00 to 0xff-0x59
YAMAHA Meta
Meta-events, beginning 0xff-0x7f-0x43
Event
User defined event
Meta
Unknown Meta-event
The event-types HP_NOTE, HP_RPN and HP_NRPN make sense only as sequence of more than one elementary
MIDI-event, we denote these as "Compount MIDI-events". For example HP_NOTE consists of the couple "Note On" and "Note Off"; RPN / NRPN of more ones.
The user of HP MIDIFILE is not allowed to work with these special elementary events, but he is able
to read events of these types. In the column "meaning" the comment "Hidden" is added here.
In the MIDI specification Controller events have only one event-type but different functions, which are
specified with a number of the Controller event. HP_MIDIFILE here spends for each Controller-number
an own event-type. This method allows to identify the events more easy.
Testing an application the function HP_TypeName, which returns the
string of the type, may be helpful.


{% include head.html %}
{% include site-nav.html %}
404
Page not found
Uh oh! ... The sun has set on this page.
{{ content }}
{% include closing-tags.html %}


About the project
The ideia is create a sofware for anyone setup a entire platform of videos in any server that he want. Is the same idea of wordpress but for videos.
Important: the ideia is not beat the mainstream platforms but gives to the creators a more freedom way to share your content with your public, this is why I also will plannig some a integration with these platforms in the future, to the creator have the best of both options.
General scope:
Platform
-
Have a sofware to setup the platform in a normal server.
-
This platform will have some options of monitization like member vips, sponser ads, integration with adsense, some comercias in the video, etc.
-
System of notifications to send to the users.
-
System of upload of videos.
-
system of Lives
-
Custom Themes
-
The will have the power of anything in the platform.
-
Integrations with others instances of the platform.
Api rest or graphQL
-
The platform will also create an api with a map of all videos, users, tags, playlists of the this instalation, with authentication and security pratics of cource.
-
The api will also give the posibitily to create the front-end with any tecnology of wanted that will be the themes of the platform.
-
Integrate other platforms: you-tube, twitch, discord
-
Well this will be nice if works XD, the ideia is have a very good integration with others platforms, that the user can do all that they need in just one place.
-
Get all content of other platforms and integreate with they channel in his own server, and all content will be merged in just one place and with a very well organization.
-
upload videos and start lives using the same tools of the platform but with diferent source.
Main Globa site
-
Well this is somehing for to away in the future
-
Will like a reddit that merge all other instances in one place, if was allowed and wanted of course.
-
The global site is to make easy to the the users of the word to find the other channels in the internet, recomendations, etc…
-
So when the creator wanna be in the global site he will have a channel in the global site that consume the api of his instance.
-
The global site will have a very well communication with the instances to deal with diferents versions, vip members and things like that.
What was the Inpiration?
-
Well is not secret that You-tube have a lot of problems, this is something that a lot of creators have to deal daily
-
Is also have a limitation of content, because all content have to be “Family friend”, so you can’t create content that go away of this, even if is something that your public wanted
-
Is hard to You-tube to deal with all posible situations because any political of some country can create a new lay that affects the entire platform.
-
Becuase deal with server side videos are so hard, create a platform that can hadle all this data a very good chalenge, that some projects have failed because of that.
Chalenges and Possible solutions
-
The heavy data that videos.
- The solution is that any channel have their own server and database to deal with that so will work something like reddit, when the channels have they own site and server and exists a main global site that consumes this server.
-
Can have the problem that some channels can’t hadle they huge content and users access so is something to think about.
- So will also have the options to integrate with other platforms of videos like you-tube and twitch, discord, etc…
-
Must have easy way to install in the server, the ideal will be in the same way as wordpress.
- This is why i choose PHP for back-end of application, the objective is have a compatibily with simple servers and shared servers.
-
Users Hardly want change platform
- This is way one of the objectives is have a good integrations with others platforms like you-tube, twith, discord, so the user do not have to have a migration of platform and just configure your platform to use the videos of other platform and the system will take care of the rest.


WITNESS LIST
Nominations
March 11, 2013 11:00 AM
Board of Pardons and Paroles
ON:
Chavez, Romulo Mr. (Self), Spring, TX
LaFavers, James Mr. (Self), Amarillo, TX
Skyrme, Michelle Ms. (Self), Palestine, TX
Tauss, Cynthia Ms. (Self), League City, TX
Department of Information Resources
ON:
Bacarisse, Charles Mr. (Self), Houston, TX
Troilo, III, Arthur Mr. (Self), Lakeway, TX
Villa, Cynthia Ms. (Self), El Paso, TX
Division of Workers' Compensation, Texas Department of Insurance
ON:
Bordelon, Rod (Self), Austin, TX
State Preservation Board
ON:
Graham, Cris Mrs. (Self), Fredericksburg, TX


{% load static %}
{%csrf_token%}
FORGOT PASSWORD
what is your user name:
what is your first school name:
username:{{user.username}}
password:{{user.password}}


San Joaquin Valley Town Hall
Welcome to San Joaquin Valley Town Hall.We have some fascinating speakers for you this season!


species climate &; change OpenUrl freshwater European fish susceptible based IUCN variables Biology, CrossRef Global Climate data range traits Ecology Red Science relevant risk ,…&; BRT Biology Change Olden, View indicated non-susceptible thermal variable Accessed List Web change. lower used Radinger environmental material species, threat vs. vulnerability Figure Species distribution impacts model susceptibility Conservation Institute ORCID Supplementary Table characteristics considered higher life presented relative Comte Czech Freshwater body commercial explanatory extinction global history identify life-history ranking related research selected spatial threatened Change, Download Europe January Kalinkat Search Smith, change: changes climatic fishes. funding groups highest importance information new obtained regarding regression set total using values (e.g. Academy Elith, Fish Fisheries, Gregor Ivan Jarić Johannes June Lennox Nature Republic Robert Sciences, Wolter, analysis approach assessments b). conditions identified list local maps package physiological profiling river site water Abstract Comte, Cvijanović Data EEA Elith Gorčin Harrod, Hijmans, IUCN, Mediterranean Open Payne Profile Radinger, Research, Susceptibility acknowledges anthropogenic aquatic assess available barplots boosted characterized classification classified comprised conservation contribute data-hide-link-title=""> data-icon-position="" database differences dispersal effects exclusively figure fish, fishes group highly impact mainly management number observed panel) predict present priority promising proportion ranked record resilience resilient. smaller species. status study tab threats trees value variables, variables. version world’s


|
Nana - a C++ framework project The Programmer's Guide |
|
nana::gui::API::move_tabstop Description Sets the focus to the window which tabstop is near by the specified window. Prototype nana::gui::window move_tabstop(nana::gui::window wnd, bool next); Parameters wnd: A handle to the window which the focus is moved from it. next: Move the focus to the next tabstop window or the previous tabstop window. Return Value A window handle to the new focus window indicates success. 0 indicates failure. If there is noly one tabstop window, 0 indicates no change to the focus. Remarks None. See also tabstop, eat_tabstop Move to The Nana Programmer's Guide Application Programming Interface Overviews |


| 1 | package fr.sii.ogham.core.builder.env; | |
| 2 | ||
| 3 | import java.util.Properties; | |
| 4 | ||
| 5 | import fr.sii.ogham.core.builder.AbstractParent; | |
| 6 | ||
| 7 | /** | |
| 8 | * Implementation that just delegates all operations to another builder. | |
| 9 | * | |
| 10 | * <p> | |
| 11 | * This is useful when a {@link PropertiesBuilder} is used for a particular | |
| 12 | * parent and it must be inherited. As the parent types are not the same, you | |
| 13 | * can't directly use the same reference. So this implementation wraps the | |
| 14 | * original reference but as it is a new instance, it can have a different | |
| 15 | * parent builder. | |
| 16 | * </p> | |
| 17 | * | |
| 18 | * @author Aurélien Baudet | |
| 19 | * | |
| 20 | * @param <P> | |
| 21 | * the type of the parent builder (when calling {@link #and()} | |
| 22 | * method) | |
| 23 | */ | |
| 24 |
1
1. build : All methods instructions replaced by: return null; → NO_COVERAGE |
public class PropertiesBuilderDelegate<P> extends AbstractParent<P> implements PropertiesBuilder<P> { |
| 25 | private PropertiesBuilder<?> delegate; | |
| 26 | | |
| 27 | /** | |
| 28 | * Wraps the delegate builder. The delegated builder parent is not used. | |
| 29 | * This instance uses the provided parent instead for chaining. | |
| 30 | * | |
| 31 | * @param parent | |
| 32 | * the new parent used for chaining | |
| 33 | * @param delegate | |
| 34 | * the instance that will really be updated | |
| 35 | */ | |
| 36 | public PropertiesBuilderDelegate(P parent, PropertiesBuilder<?> delegate) { | |
| 37 | super(parent); | |
| 38 | this.delegate = delegate; | |
| 39 | } | |
| 40 | ||
| 41 | @Override | |
| 42 | public PropertiesBuilder<P> set(String key, String value) { | |
| 43 |
1
1. set : All methods instructions replaced by: return null; → NO_COVERAGE |
delegate.set(key, value); |
| 44 | return this; | |
| 45 | } | |
| 46 | ||
| 47 | @Override | |
| 48 | public Properties build() { | |
| 49 |
1
1. build : All methods instructions replaced by: return null; → NO_COVERAGE |
return delegate.build(); |
| 50 | } | |
| 51 | ||
| 52 | } | |
Mutations | ||
| 24 |
1.1 |
|
| 43 |
1.1 |
|
| 49 |
1.1 |


Comma-separated Ant-style patterns for including or excluding source code files.
Ant patterns use *
and ?
as wildcard (**
corresponds to multiple directories).
Examples:
- To exclude all java test files with name ending with "Test", use
**/*Test.java
as exclude pattern.
- To exclude all auto-generated source files in directories named "generated", use
**/generated/**
as exclude pattern.
Rules are:
- If excludes provided, any input file matching one of the patterns will be ignored.
- If includes provided and no exclude pattern rejected the file, to be accepted input file must match at least one include pattern.
- If excludes provided but no explicit includes, any input file not rejected by one exclude pattern will be accepted.
- If includes provided with no explicit excludes, input file will be accepted only when matches at least one include pattern.
- If both explicit includes and excludes, excludes are checked before includes; a file will be accepted if does not match any exclude pattern but matches at least one include pattern.


{% extends "layout.html" %} {% block title %} README {% endblock %} {% block section %}
This page elaborates on the various technologies and resources used in creating the website. We have linked our github with all of the code written as well as a Google doc of our research that went into developing the algorithm. This is a python Flask application hosted on Heroku.In order to create the search engine, we made pdfs of all of the class resources and uploaded the titles to a SQL database. Our search engine has full-text search capability, so we utilized PDFMiner to transform all of the pdfs into textfiles that could be uploaded to the database. We then utilized whoosh_alchemy, which is a python library, to search the database and allow for natural language queries. Many thanks as well to Bootstrap libraries for the beautiful design.


From the newsletter ... |
|
ChristianityHistorically, Christianity has had a peculiar view on life. It makes no sense at all in practical terms (of course many would say that's still the case!). All the religions of the ancient world were about success. They were identified with warrior peoples and empires and military success. Jesus's message upended all the received wisdom of the ages. It was the poor God loved. The rich He would send away, empty, and the destitute would inherit His kingdom. Weakness was strength, success failure. Ultimate prizes would go to the meek and lowly. We know this didn't go down well with the religious authorities of the day and Jesus was put to the most horrific death. It seemed as comprehensive a failure as you could find in all the annals of history. Yet, the movement of the powerless spread, despite all the ruthless persecutions, and the civilised world became Christian. And today there are 1800 million followers of Jesus Christ. Amazing! What was it about this one man that so changed the world? It certainly wasn't to do with coercion because only love can summon a true response of love. This was the message that the early followers of Christ carried with them - that God's love for them was so unconditional, so boundless, that in Jesus it called Him to pay the ultimate price. I remember listening to a pretty awful sermon by a man I admired greatly - he was Presbyterian, so it was not only dull, but long! Until, that is, he began to read some verses from John's Gospel, chapter fifteen, "As the Father has loved me, so I have loved you". And then he read them again and again. That's why the Christian Church grew so rapidly - because love, by its very nature, is selfless and selflessness is what really appeals to human nature. The Church in the twenty first century must face up to some very harsh questions - none more so than this - does it demonstrate the selfless love of Christ in the world? If it did then we'd be caring for the sick, looking after the old folk in our neighbourhood, many of whom have forgotten what a warm embrace is. We'd be feeding the ophans, visiting the prisoners, spending quaility time with our children - in a word, we'd be living as Jesus did. This is penetrating love that makes a difference. The Kingdom of God is about bringing light into dark places and that's what we want to be about in St Mary's, our values are about demonstrating God's love in practical ways, showing mercy because we have been shown mercy, being obedient to what God has to say in the Bible and serving YOU, selflessly in the our Parish. Of course this should all work itself out in how we worship on Sundays. I heard a story about a wee boy being shown around the Church by his local Vicar and, in particular, be shown the memorials on the walls. The Vicar says, "these are the names of people who died in the services". The wee fella responds, "Did they die in the morning or evening service?" Abraham Lincoln once said, "If all the people who fell asleep in Church on Sunday Morning were laid end to end......they would be a great deal more comfortable!" Our Sunday services ought to be an expression of God's love for us and our love for Him and all that we do must be honouring to Him. It's my desire to develop the best of the old and the new in what we're about on Sundays in St Mary's and I would warmly invite you to come and meet with us. Or, if that's too big a step for you, then telephone me and [if you live in the neighbourhood] I'll be only too pleased to pop round and say hello. Cogges Parish | Other articles | Previous issue | Feedback © 2002; Published in Cogges Parish monthly newsletter, June 2002 |


The wonderful Holedown is coming to Nintendo Switch
Follow Polygon online:
by Michael McWhertorIndie mobile game Holedown, the highly addictive and very cute planetary digging game, is coming to Nintendo Switch, developer Grapefrukt Games announced today. The Switch version will come with an exclusive new feature: two-player local cooperative play.
 Holedown is relatively simple — simply drag and aim your machine-gun fire of cheerful ball friends at strategic angles and watch the bouncy destruction unfold — but strangely compelling as you aim for higher scores and deeper depths. There’s a bit of a progression system, but the fun lies in maximizing your score once you reach the planet that allows for endless play. It’s quite good (and was nominated for a Game Developers Choice Award this year).
Related
The two-player version will let each player control their own little worm buddy, doubling up on the block-smashing with color-coded balls.
Holedown will be released Nov. 13 through the Nintendo Switch eShop. The console version will cost $9.99. The Android and iOS versions cost $3.99.


Preparation time
30 mins to 1 hour
Cooking time
over 2 hours
Serves
Serves 6-8
This is the perfect weekend roast - five hours of slow roasting produces tender, succulent pork, served with apple sauce, carrots and creamy mash.
For the pork, preheat the oven to 150C/300F/Gas 2.
With a sharp knife, score the skin of the pork and rub with the olive oil, salt and black pepper.
Place the onion, carrot and leek into a deep-sided tray and pour in the water.
Place the pork on top, cover with foil and place in the oven for two hours.
Remove the foil and return to the oven for another three hours until tender and the crackling is crisp.
Remove from the oven and leave to rest for 30 minutes.
For the apple sauce, place the apples, butter and water into a saucepan, cover and place over a medium heat.
Cook until the apple has broken down – about 4-5 minutes.
Beat with a spoon to a purée, and then season with sugar and salt to taste.
For the Vichy carrots, place the carrots, butter, water and sugar into a pan and bring to a simmer.
Cover with a lid or cartouche (a circle of greaseproof paper arranged so that it covers the top of the carrots) and cook gently for 4-5 minutes, or until the carrots are tender. Season with salt and black pepper.
For the mash, place the potatoes into a pan of salted water, bring to the boil and simmer for 15 minutes, or until tender.
Drain and return the potatoes to the pan over the heat to drive off any excess moisture.
Mash well, add the butter and cream and beat to a smooth purée. Season with salt and black pepper.
To serve, spoon the mash into the centre of each plate, remove the pork from its cooking juices, slice it and pile it alongside the mash with a piece of crisp crackling. Finish with a pile of carrots, a spoonful of apple sauce and drizzle of any remaining pan juices.


• Alarm sounds.
• Repeating alarms - repeat every x minutes/hours/days for continuous reminders.
• 18 additional icons and 10 additional colors to choose from.
• Notification quick shortcut - quickly create reminders from the notification tray without ever leaving your current app.
• 15 additional theme colors plus a dark theme option.
• Option to choose your accent color.
• Option to choose your default icons color on app launch.


Constructor
new ValueSelectButton()
Class for 'value-select-button' custom element.
Extends
Members
___attributes
- Default Value:
- ['value','value-list']
- Source:
- See:
(protected) ___mainContainer :HTMLDivElement
Reference to main container.
Reference to div element which exists in every
custom element derived from BaseComponent
and from now on
is called main container. Its id and class attributes are initially
equal to "main-container". Main container is added to shadow DOM root of
current custom element by constructor of BaseComponent
.
Type:
- HTMLDivElement
- Inherited From:
- Default Value:
- null
- Source:
___selector
- Default Value:
- 'value-select-button'
- Source:
- See:
(protected) ___shadow :ShadowRoot
Reference to shadow DOM root of current custom element.
Type:
- ShadowRoot
- Inherited From:
- Default Value:
- null
- Source:
___stylesheets
- Default Value:
- ['/css/common.css','/components/value-select-button/value-select-button.css']
- Source:
- See:
___templatePath
- Default Value:
- '/components/value-select-button/value-select-button.html'
- Source:
- See:
Methods
adoptedCallback() → {void}
Part of custom elements browser API. Callback for document change observation.
One of browser custom element lifecycle callbacks. A method is called by browser every time element is moved from one document to another. Used by custom element to respectively react to element moved.
- Inherited From:
- Source:
Returns:
- Type
- void
attributeChangedCallback(attrName, oldVal, newVal) → {void}
Part of custom elements browser API. Callback for attribute changes observation.
One of browser custom element lifecycle callbacks. A method is called by browser every time an attribute change occurs. Used by custom element to respectively react to attribute changes.
Parameters:
| Name | Type | Description |
|---|---|---|
attrName |
string | |
oldVal |
string | null | |
newVal |
string | null |
- Overrides:
- Source:
Returns:
- Type
- void
connectedCallback() → {void}
Part of custom elements browser API. Callback for element's connection to DOM.
One of browser custom element lifecycle callbacks. A method is called by browser every time current custom element is connected to DOM. Used by custom element to respectively react to DOM connection. Method may be called once current custom element is no longer connected, use Node.isConnected to make sure.
- Inherited From:
- Source:
Returns:
- Type
- void
disconnectedCallback() → {void}
Part of custom elements browser API. Callback for element's disconnection from DOM.
One of browser custom element lifecycle callbacks. A method is called by browser every time current custom element is disconnected from document's DOM. Used by custom element to respectively react to disconnection from DOM.
- Inherited From:
- Source:
Returns:
- Type
- void
initBaseTemplate() → {void}
Initializes base template which is common for
every custom element derived from BaseComponent
.
Initializes base template by creating
<link rel="stylesheet" href="STYLESHEET_PATH">
tags for each
path specified in BaseComponent.___stylesheets
array,
where STYLESHEET_PATH is string equal to consecutive
stylesheet path from BaseComponent.___stylesheets
array.
After which creates DIV element sets its id and class attribute to
"main-container" and assignes its reference to BaseComponent#___mainContainer
.
- Inherited From:
- Source:
Returns:
- Type
- void
initEventHandlers() → {void}
Initializes click event handler for button with class 'value-select-button' which is in shadow DOM. If button is clicked handler changes the state of value-select-button and triggers a valueChanged event on value-select-button custom element emmiting current value of the button.
- Overrides:
- Source:
Returns:
- Type
- void
initLoadedTemplate() → {void}
Initializes template of current custom element by assigning
the value of BaseComponent.___template
to innerHTML property of
BaseComponent#___mainContainer
- Inherited From:
- Source:
Returns:
- Type
- void


SSR species motifs patens plant EST markers Physcomitrella EST-SSR loci sequences results database file (.) species. Arabidopsis codon higher {border-style frequent genome px;} sequence #ffffff;} SSRs analysis molecular plants sativa used model occurrence occurrences distribution microsatellites related using Chlamydomonas Oryza microsatellite repeats Biology Molecular databases predominant regions silico studies Figure lower motif reinhardtii usage (.%) (Figure Gene Research algae average elements frequencies rice size species, studied thaliana Additional DNA Genetics However, PCR amino dimer groups primers showed transferability virtual BMC EST-SSRs Pinus Plant SSRLocator available genetic genomes genomic majority repeat selection study tested (%) Click Genome LINK Mesostigma Ontology acid comparative compared compound evolution frequency genes high moss patterns plants, potential px; respectively. survey transcripts {font-family (.%), (.%). ./--- ESTs MISA biological cellular containing font-size gene highest positive present reported reports search similar software taeda (Additional .%, Adiantum CCG/CGG Distribuition Evolution Gnetum Rensing Unigene based bp) capillus-veneris coding common different double; flowering function green groups, obtained plants. polymorpha rates repetitive ruralis simple thaliana, total trimer Predominant Selaginella Syntrichia Table Trends Varshney amplicons analyses assignments border-color border-width chosen databases. derived described expressed genomics known length low marker motifs, new patens, percentage protein resulted rice, sequences, shown sites solid; spp. study, taxa transfer trimers {font-style {font-weight ./s--- Acids Arabidopsis, GCA/TGC, Genomics Graner King Kumar L.) Marchantia Microsatellites Nucleic SSRs, Simple abundance assignment associated bias bold confirm conserved content contents count courier; design em; example, fern found, functions gnemon grass groups. hits included indicate lowest microsatelites non-redundant observed package preference pressure processes pt;} reinhardtii, result script selective small suggesting table tandem tool transcript variation verify viride wheat


You are viewing VERSION 2.03 of IATI Standard Reference View another version
This version is DEPRECATED, v2.03 is the latest version


Case
: case
This document is a placeholder for the language-specific documentation
for Case
.
Treebank Statistics (UD_Norwegian-Bokmaal)
This feature is universal.
It occurs with 3 different values: Acc
, Gen
, Nom
.
Some words have combined values of the feature; 1 combinations have been observed: Gen|Nom
.
13637 tokens (5%) have a non-empty value of Case
.
1122 types (4%) occur at least once with a non-empty value of Case
.
978 lemmas (5%) occur at least once with a non-empty value of Case
.
The feature is used with 6 part-of-speech tags: no-pos/PRON (11110; 4% instances), no-pos/NOUN (1314; 0% instances), no-pos/PROPN (1130; 0% instances), no-pos/DET (44; 0% instances), no-pos/ADJ (36; 0% instances), no-pos/NUM (3; 0% instances).
PRON
11110 no-pos/PRON tokens (52% of all PRON
tokens) have a non-empty value of Case
.
The most frequent other feature values with which PRON
and Case
co-occurred: PronType=Prs (11107; 100%), Animacy=Hum (8509; 77%), Gender=EMPTY (8362; 75%), Number=Sing (6455; 58%).
PRON
tokens may have the following values of Case
:
Acc
(2578; 23% of non-emptyCase
): seg, meg, oss, dem, ham, deg, henne, dere, han, demtGen
(1; 0% of non-emptyCase
): ensGen,Nom
(2; 0% of non-emptyCase
): ensNom
(8529; 77% of non-emptyCase
): jeg, han, vi, de, hun, du, man, dere, Eg, mannEMPTY
(10402): det, som, dette, den, hva, noe, alt, alle, noen, ingen
| Paradigm jeg | Nom | Acc |
|---|---|---|
| jeg, Eg | meg, mæ |
NOUN
1314 no-pos/NOUN tokens (3% of all NOUN
tokens) have a non-empty value of Case
.
The most frequent other feature values with which NOUN
and Case
co-occurred: Number=Sing (1027; 78%), Definite=Def (953; 73%), Gender=Masc (797; 61%).
NOUN
tokens may have the following values of Case
:
Gen
(1314; 100% of non-emptyCase
): verdens, dagens, landets, årets, kirkens, statens, utvalgets, års, samfunnets, barnetsEMPTY
(50461): år, dag, prosent, gang, folk, tid, verden, land, del, barn
Case
seems to be lexical feature of NOUN
. 100% lemmas (500) occur only with one value of Case
.
PROPN
1130 no-pos/PROPN tokens (7% of all PROPN
tokens) have a non-empty value of Case
.
The most frequent other feature values with which PROPN
and Case
co-occurred: Gender=EMPTY (1035; 92%).
PROPN
tokens may have the following values of Case
:
Gen
(1130; 100% of non-emptyCase
): Norges, Regjeringens, Cathrines, Obamas, Høyres, FNs, USAs, Hannahs, Arbeiderpartiets, EuropasEMPTY
(15327): Norge, Obama, Regjeringen, Oslo, USA, Den, Jan, Stortinget, Svalbard, Espen
Case
seems to be lexical feature of PROPN
. 100% lemmas (436) occur only with one value of Case
.
DET
44 no-pos/DET tokens (0% of all DET
tokens) have a non-empty value of Case
.
The most frequent other feature values with which DET
and Case
co-occurred: Poss=EMPTY (44; 100%), PronType=Dem (37; 84%), Number=Sing (27; 61%).
DET
tokens may have the following values of Case
:
Gen
(44; 100% of non-emptyCase
): andres, dens, dets, alles, ens, annens, hvisEMPTY
(14969): en, et, den, de, det, andre, sin, alle, denne, noen
ADJ
36 no-pos/ADJ tokens (0% of all ADJ
tokens) have a non-empty value of Case
.
The most frequent other feature values with which ADJ
and Case
co-occurred: Gender=EMPTY (35; 97%), Degree=Pos (30; 83%), Number=Sing (20; 56%).
ADJ
tokens may have the following values of Case
:
Gen
(36; 100% of non-emptyCase
): domfeltes, offentliges, ansattes, enkeltes, fattiges, manges, mistenktes, rødgrønnes, sistnevntes, tiltaltesEMPTY
(24323): mer, mange, norske, flere, mye, første, nye, store, hele, litt
Case
seems to be lexical feature of ADJ
. 100% lemmas (24) occur only with one value of Case
.
NUM
3 no-pos/NUM tokens (0% of all NUM
tokens) have a non-empty value of Case
.
The most frequent other feature values with which NUM
and Case
co-occurred: Number=Plur (3; 100%), NumType=Card (3; 100%).
NUM
tokens may have the following values of Case
:
Gen
(3; 100% of non-emptyCase
): 2, 2011s, 2sEMPTY
(3545): to, tre, fire, eneste, ett, 2, fem, 20, ti, seks
Relations with Agreement in Case
The 10 most frequent relations where parent and child node agree in Case
:
PRON –[conj]–> PRON (14; 78%),
NOUN –[conj]–> NOUN (11; 55%),
PRON –[appos]–> PRON (6; 100%),
NOUN –[conj]–> DET (1; 100%).
Treebank Statistics (UD_Norwegian-Nynorsk)
This feature is universal.
It occurs with 3 different values: Acc
, Gen
, Nom
.
9509 tokens (3%) have a non-empty value of Case
.
404 types (1%) occur at least once with a non-empty value of Case
.
366 lemmas (2%) occur at least once with a non-empty value of Case
.
The feature is used with 5 part-of-speech tags: no-pos/PRON (8637; 3% instances), no-pos/NOUN (545; 0% instances), no-pos/PROPN (305; 0% instances), no-pos/ADJ (17; 0% instances), no-pos/DET (5; 0% instances).
PRON
8637 no-pos/PRON tokens (44% of all PRON
tokens) have a non-empty value of Case
.
The most frequent other feature values with which PRON
and Case
co-occurred: PronType=Prs (8637; 100%), Gender=EMPTY (6501; 75%), Animacy=Hum (5411; 63%), Number=Sing (5108; 59%).
PRON
tokens may have the following values of Case
:
Acc
(2108; 24% of non-emptyCase
): seg, dei, oss, meg, han, henne, deg, ho, dykk, kånNom
(6529; 76% of non-emptyCase
): han, eg, vi, dei, ho, me, du, de, ha, eiEMPTY
(10987): det, som, ein, dette, kva, noko, alt, den, alle, nokon
| Paradigm eg | Nom | Acc |
|---|---|---|
| Number=Sing | eg | meg |
| eg |
NOUN
545 no-pos/NOUN tokens (1% of all NOUN
tokens) have a non-empty value of Case
.
The most frequent other feature values with which NOUN
and Case
co-occurred: Number=Sing (423; 78%), Definite=Def (286; 52%).
NOUN
tokens may have the following values of Case
:
Gen
(545; 100% of non-emptyCase
): dømes, dagens, språkets, årets, verdas, SVs, års, kyrkjas, landets, EUsEMPTY
(54357): år, dag, folk, tid, prosent, språk, del, kroner, landet, regjeringa
Case
seems to be lexical feature of NOUN
. 100% lemmas (178) occur only with one value of Case
.
PROPN
305 no-pos/PROPN tokens (2% of all PROPN
tokens) have a non-empty value of Case
.
PROPN
tokens may have the following values of Case
:
Gen
(305; 100% of non-emptyCase
): Guds, Noregs, Breiviks, Høgres, Europas, Paulus’, Venstres, Jesu, Tysklands, HitlersEMPTY
(12848): Noreg, Førde, Språkrådet, Sogn, Kviteseid, Oslo, Høgre, Fjordane, Helse, Tyskland
Case
seems to be lexical feature of PROPN
. 100% lemmas (169) occur only with one value of Case
.
ADJ
17 no-pos/ADJ tokens (0% of all ADJ
tokens) have a non-empty value of Case
.
The most frequent other feature values with which ADJ
and Case
co-occurred: Gender=EMPTY (17; 100%), VerbForm=EMPTY (17; 100%), Degree=Pos (17; 100%), Number=Sing (14; 82%), Definite=Ind (11; 65%).
ADJ
tokens may have the following values of Case
:
Gen
(17; 100% of non-emptyCase
): liks, enkeltes, intellektuelles, kristnes, mogleges, rettes, tilsettesEMPTY
(26641): meir, mange, fleire, mykje, nye, store, heile, godt, norske, heilt
DET
5 no-pos/DET tokens (0% of all DET
tokens) have a non-empty value of Case
.
The most frequent other feature values with which DET
and Case
co-occurred: PronType=Dem (5; 100%), Gender=EMPTY (3; 60%), Number=Plur (3; 60%).
DET
tokens may have the following values of Case
:
Gen
(5; 100% of non-emptyCase
): andres, dens, detsEMPTY
(15142): ein, den, eit, dei, ei, det, andre, alle, denne, sin
Relations with Agreement in Case
The 10 most frequent relations where parent and child node agree in Case
:
PRON –[appos]–> PRON (10; 91%),
PRON –[conj]–> PRON (7; 88%),
NOUN –[conj]–> NOUN (4; 57%),
PROPN –[conj]–> PROPN (2; 67%).
Case in other languages: [am] [ar] [bg] [bxr] [ca] [ckb] [cop] [cs] [cu] [da] [de] [el] [en] [es] [et] [eu] [fa] [fi] [fo] [fr] [ga] [gl] [got] [grc] [he] [hi] [hr] [hu] [id] [it] [ja] [kk] [kmr] [ko] [la] [lv] [mr] [nl] [no] [pl] [pt] [ro] [ru] [sa] [sk] [sla] [sl] [so] [sr] [sv] [swl] [ta] [tr] [u] [ug] [uk] [ur] [urj] [vi] [yue] [zh]


Config. with files
There is a lot of things you can configure in Otoroshi. By default, Otoroshi provides a configuration that should be enough for testing purpose. But you’ll likely need to update this configuration when you’ll need to move into production.
In this page, any configuration property can be set at runtime using a -D
flag when launching Otoroshi like
java -Dapp.domain=oto.tools -Dhttp.port=8080 -jar otoroshi.jar
or
./bin/otoroshi -Dhttp.port=8080 -Dapp.domain=oto.tools
Common configuration
| name | type | default value | description |
|---|---|---|---|
app.domain |
string | “oto.tools” | the domain on which Otoroshi UI/API is be exposed |
app.rootScheme |
string | “http” | the scheme on which Otoroshi is exposed, either “http” or “https” |
app.snowflake.seed |
number | 0 | this number will is used to generate unique ids across the cluster. Each Otorshi instance must have a unique seed. |
app.events.maxSize |
number | 1000 | max number of analytic and alert events stored locally |
app.backoffice.exposed |
boolean | true | does the current Otoroshi instance exposed a backoffice ui |
app.backoffice.subdomain |
string | “otoroshi” | the subdomain on wich Otoroshi backoffice will be served |
app.backoffice.session.exp |
number | 86400000 | the number of seconds before the Otoroshi backoffice session expires |
app.privateapps.subdomain |
string | “privateapps” | the subdomain on which private apps UI are served |
app.privateapps.session.exp |
number | 86400000 | the number of seconds before the private apps session expires |
app.claim.sharedKey |
string | “secret” | the shared secret used for signing the JWT token passed between Otoroshi and backend services |
app.webhooks.size |
number | 100 | number of events sent at most when calling one of the analytics webhooks |
app.throttlingWindow |
number | 10 | time window (in seconds) used to compute throttling quotas for ApiKeys |
Admin API configuration
When Otoroshi starts for the first time, its datastore is empty. As Otoroshi uses Otoroshi to expose its admin REST API, you’ll have to provide the details for the admin API exposition. This part is super important because if you go to production with the default values, your Otoroshi server won’t be secured anymore.
YOU HAVE TO CUSTOMIZE THE FOLLOWING VALUES BEFORE GOING TO PRODUCTION !!
Some of the following terms will seem obscure to you, but you will learn their meaning in the following chapters :)
| name | type | default value | description |
|---|---|---|---|
app.adminapi.exposed |
boolean | true | does the current Otoroshi instance expose an admin API |
app.adminapi.targetSubdomain |
string | “otoroshi-admin-internal-api” | the subdomain on wich admin API call will be redirected from app.adminapi.exposedSubdomain |
app.adminapi.exposedSubdomain |
string | “otoroshi-api” | the subdomain on wich the Otoroshi admin API will be exposed |
app.adminapi.defaultValues.backOfficeGroupId |
string | “admin-api-group” | the name of the service groups that will contain the service descriptors for the Otoroshi admin API |
app.adminapi.defaultValues.backOfficeApiKeyClientId |
string | “admin-api-apikey-id” | the client id of the Otoroshi admin API apikey |
app.adminapi.defaultValues.backOfficeApiKeyClientSecret |
string | “admin-api-apikey-secret” | the client secret of the Otoroshi admin API apikey |
app.adminapi.defaultValues.backOfficeServiceId |
string | “admin-api-service” | the id of the service descriptors for the Otoroshi admin API |
app.adminapi.proxy.https |
boolean | false | whether or not the current Otoroshi instance serves its content over https. This setting is useful for the backoffice UI to access Otoroshi admin API |
app.adminapi.proxy.local |
boolean | true | whether or not the admin API is accessible through <IP_ADDRESS> . This setting is useful for the backoffice UI to access Otoroshi admin API |
DB configuration
As Otoroshi supports multiple datastores, you’ll have to provide some details about how to connect/configure it.
| name | type | default value | description |
|---|---|---|---|
app.storage |
string | “inmemory” | what kind of storage engine you want to use. Possible values are inmemory , leveldb , redis , cassandra , mongo |
app.importFrom |
string | a file path or a URL to an Otoroshi export file. If the datastore is empty on startup, this file will be used to import data to the empty DB | |
app.importFromHeaders |
array | [] | a list of : separated header to use if the app.importFrom setting is a URL |
app.initialData |
object | object representing Otoroshi internal data as exported from danger zone so you don’t need a config file and a data import file | |
app.redis.host |
string | “localhost” | the host of the redis server |
app.redis.port |
number | 6379 | the port of the redis server |
app.redis.slaves |
array | [] | the redis slaves lists |
app.leveldb.path |
string | “./leveldb” | the path where levelDB files will be written |
app.cassandra.hosts |
string | “<IP_ADDRESS>” | the host of the cassandra server |
app.cassandra.host |
string | “<IP_ADDRESS>” | the list of cassandra hosts |
app.cassandra.port |
number | 9042 | the port of the cassandra servers |
app.mongo.uri |
string | “mongodb://localhost:27017/default” | the mongo URI following Mongo semantic https://docs.mongodb.com/manual/reference/connection-string/ |
Headers configuration
Otoroshi uses a fair amount of http headers in order to work properly. The name of those headers are customizable to fit your needs.
| name | type | default value | description |
|---|---|---|---|
otoroshi.headers.trace.label |
string | “Otoroshi-Viz-From-Label” | header to pass request tracing informations |
otoroshi.headers.trace.from |
string | “Otoroshi-Viz-From” | header to pass request tracing informations (ip address) |
otoroshi.headers.trace.parent |
string | “Otoroshi-Parent-Request” | header to pass request tracing informations (parent request id) |
otoroshi.headers.request.adminprofile |
string | “Otoroshi-Admin-Profile” | header to pass admin name when the admin API is called from the Otoroshi backoffice |
otoroshi.headers.request.clientid |
string | “Otoroshi-Client-Id” | header to pass apikey client id |
otoroshi.headers.request.clientsecret |
string | “Otoroshi-Client-Secret” | header to pass apikey client secret |
otoroshi.headers.request.id |
string | “Otoroshi-Request-Id” | header containing the id of the current request |
otoroshi.headers.response.proxyhost |
string | “Otoroshi-Proxied-Host” | header containing the proxied host |
otoroshi.headers.response.error |
string | “Otoroshi-Error” | header containing whether or not the request generated an error |
otoroshi.headers.response.errormsg |
string | “Otoroshi-Error-Msg” | header containing error message if some |
otoroshi.headers.response.proxylatency |
string | “Otoroshi-Proxy-Latency” | header containing the current latency induced by Otoroshi |
otoroshi.headers.response.upstreamlatency |
string | “Otoroshi-Upstream-Latency” | header containing the current latency from Otoroshi to service backend |
otoroshi.headers.response.dailyquota |
string | “Otoroshi-Daily-Calls-Remaining” | header containing the number of remaining daily call (apikey) |
otoroshi.headers.response.monthlyquota |
string | “Otoroshi-Monthly-Calls-Remaining” | header containing the number of remaining monthly call (apikey) |
otoroshi.headers.comm.state |
string | “Otoroshi-State” | header containing a random value for secured mode |
otoroshi.headers.comm.stateresp |
string | “Otoroshi-State-Resp” | header containing a random value for secured mode |
otoroshi.headers.comm.claim |
string | “Otoroshi-Claim” | header containing a JWT token for secured mode |
otoroshi.headers.healthcheck.test |
string | “Otoroshi-Health-Check-Logic-Test” | header containing a logic test for healthcheck |
otoroshi.headers.healthcheck.testresult |
string | “Otoroshi-Health-Check-Logic-Test-Result” | header containing the result of a logic test for healthcheck |
otoroshi.headers.jwt.issuer |
string | “Otoroshi” | the name of the issuer for the JWT token |
otoroshi.headers.canary.tracker |
string | “Otoroshi-Canary-Id” | header containing the ID of the canary session if enabled |
Play specific configuration
As Otoroshi is a Play app, you should take a look at Play configuration documentation to tune its internal configuration
| name | type | default value | description |
|---|---|---|---|
http.port |
number | 8080 | the http port used by Otoroshi. You can use ‘disabled’ as value if you don’t want to use http |
https.port |
number | disabled | the https port used by Otoroshi. You can use ‘disabled’ as value if you don’t want to use https |
http2.enabled |
boolean | false | whether or not http2 is enabled on the Otoroshi server. You need to configure https (listed bellow) to be able to use it |
play.http.secret.key |
string | “secret” | the secret used to sign Otoroshi session cookie |
play.http.session.secure |
boolean | false | whether or not the Otoroshi backoffice session will be served over https only |
play.http.session.httpOnly |
boolean | true | whether or not the Otoroshi backoffice session will be accessible from Javascript |
play.http.session.maxAge |
number | 259200000 | the number of seconds before Otoroshi backoffice session expired |
play.http.session.domain |
string | “.oto.tools” | the domain on which the Otoroshi backoffice session is authorized |
play.http.session.cookieName |
string | “otoroshi-session” | the name of the Otoroshi backoffice session |
play.ws.play.ws.useragent |
string | “Otoroshi” | the user agent sent by Otoroshi if not present on the original http request |
play.server.https.keyStore.path |
string | the path to the keystore containing the private key and certificate, if not provided generates a keystore for you | |
play.server.https.keyStore.type |
string | JKS | the key store type, defaults to JKS |
play.server.https.keyStore.password |
string | ’’ | the password, defaults to a blank password |
play.server.https.keyStore.algorithm |
string | the key store algorithm, defaults to the platforms default algorithm |
More config. options
See https://github.com/MAIF/otoroshi/blob/master/otoroshi/conf/base.conf and https://github.com/MAIF/otoroshi/blob/master/otoroshi/conf/application.conf
if you want to configure https on your Otoroshi server, just read PlayFramework documentation about it
Example of configuration file
include "application.conf"
http.port = 8080
app {
storage = "leveldb"
importFrom = "./my-state.json"
env = "prod"
domain = "oto.tools"
rootScheme = "http"
snowflake {
seed = 0
}
events {
maxSize = 1000
}
backoffice {
subdomain = "otoroshi"
session {
exp = 86400000
}
}
privateapps {
subdomain = "privateapps"
session {
exp = 86400000
}
}
adminapi {
targetSubdomain = "otoroshi-admin-internal-api"
exposedSubdomain = "otoroshi-api"
defaultValues {
backOfficeGroupId = "admin-api-group"
backOfficeApiKeyClientId = "admin-api-apikey-id"
backOfficeApiKeyClientSecret = "admin-api-apikey-secret"
backOfficeServiceId = "admin-api-service"
}
}
claim {
sharedKey = "mysecret"
}
leveldb {
path = "./leveldb"
}
}
play.http {
session {
secure = false
httpOnly = true
maxAge =<PHONE_NUMBER>
domain = ".oto.tools"
cookieName = "oto-sess"
}
}