Mediocre, But Promising...
| DOSE: T+ 0:00 |
33 mg |
oral |
TMA-2 |
(powder / crystals) |
| T+ 2:40 |
4.0 mg |
insufflated |
TMA-2 |
(powder / crystals) |
| T+ 3:30 |
5.0 mg |
insufflated |
TMA-2 |
(powder / crystals) |
While helping a friend clean his house the other day, all of a sudden a brown, extremely dirty envelope fell out of the chimney, labeled 'STUFF FROM LAB'. The envelope had previously been used for mailing something else, and had a postmark of September 22, 1967. Inside was a sheaf of mostly boring documents about military radar systems, but as I emptied the envelope on the table a tiny black square fell out. It was a piece of microfilm! It said:
TO: Boris
FROM: Natasha
SUBJECTSKY: Recent experiments with chemical warfare agent TMA-2
Boris, I have been most intrigued by this newly procured compound, TMA-2. Per our orders, I consumed 33 mg of the hydrochloride salt of 2,4,5-trimethoxyamphetamine at 9 pm Friday night.
Shulgin describes the effects as unthreatening and as a somewhat 'archetypal' psychedelic. Knowing this, I expected that it would not be suitable for our chemical warfare experiments, yet to advance science for Mother Russia, I have still done my best to document this substance.
I began to feel the effects after about 30 minutes. They increased slowly over the next 45 minutes or so, and manifested themselves mostly as a body awareness similar to the waning hours of MDA. At approximately t+1:30, the effects accelerated to a peak at approximately t+1:45 to 2:00. During this period I felt nausea develop, which was easily relieved by vomiting.
Having read Shulgin's comments about visual and audio enhancement, I had high expectations for this experiment. Unfortunately, hardly any visual effects manifested themselves, except for the very slight appearance of faces behind my eyelids and on the wall in a dark room, which began to slowly melt. Music was enjoyable but in an 'ordinary' psychedelic way.
At t+2:40 I chose to snort 4 mg more. I believe I felt some kind of kick fairly quickly, but I did not notice any real increase in effects. (Snorting was not painful). At t+3:30, I snorted 5 mg more and felt essentially nothing. Somewhat disappointed, I smoked some marijuana, which may have increased the visuals somewhat, but not much.
Comrade Ivan had also consumed a sample of two 'tabs' of d-lysergic acid diethylamide tartrate at the same time as I. He proceeded to continue work on a digital electronics project he had begun slightly earlier; he wished to see how this 'LSD' substance affected his ability to think logically and to properly execute his wiring.
He began with very neatly cut, perfectly bent wires which he inserted into his protoboard. At approximately t+1:30 he decided to abandon his project in favor of discussing our experiments together, while listening to a new English band, 'Pink Floyd'. He found it very enjoyable (he said that it seemed to go well with the LSD), while as I said earlier, I was somewhat unimpressed with the music effects of the TMA-2.
Some time later, while I continued to relax, Ivan returned to his project. I later joined him to find that there was a veritable rat's nest of intertwined, excessively long and poorly cut wires above his circuit. Clearly, the LSD substance was having a profound effect on both his thought processes and his concentration, for when I arrived he was staring directly at a blank wall.
At this point, the most prominent feature of the TMA-2 seemed to be the body sensations. Mostly a general awareness of the functioning of the muscles, and a slow, deliberate movement. I could feel individual muscles actuating to perform different motions of my limbs. When I reclined on a sofa, I felt my body blur and dissolve into the sofa.
Later on, Ivan needed some assistance dealing with some strange thoughts that came up during his LSD experiment, and despite my having eaten a psychotomimetic, I found it easy to sensibly and logically talk him out of his thought patterns. The TMA-2 did not really interfere with normal thought processes, though if I let my mind wander, it would occasionally make some interesting jumps and leaps.
The effects of the substance slowly subsided from a very short peak, which probably lasted no more than two hours, even with the snorted supplements. I fell asleep approximately 10 hours after consuming the initial dose. I felt somewhat 'fried' during the comedown as one might on MDA, I suspect because of the amphetamine characteristic of both drugs, but I was completely normal the following day, unlike with MDA.
Though I really have only scant evidence to base this opinion on, I would agree with Shulgin that TMA-2 is 'archetypal'. Unfortunately, in this case it means that TMA-2 doesn't seem to stand out at all from what one would consider to be an 'average' psychedelic experience. There was just nothing special about it. I am anxious to try a higher dose, perhaps 42 mg, to see if more interesting effects manifest themselves. Currently I am unimpressed by TMA-2, but I wish to emphasize that I need to explore it further. Some people have made comparisons to mescaline, which is also a subtle substance that needs experience to be truly appreciated.
Unfortunately I must conclude that it is not a viable weapon in the Motherland's chemical arsenal, at least not for directly incapacitating the Americans. However, the Kremlin's plan of distracting America's youth by sending these agents to 'San Francisco' and 'Berkeley' in their province of California seems to be working well. Perhaps we should send our remaining kilogram of TMA-2 their way.
Yours,
Natasha
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Symbol Index for "Subject Natural Progression"
Symbol Index for diagram
"Subject Natural Progression"
Natural Progression (Class)
NP/Source (Generalization Node)
Property Natural Progression (Class)
Subject Natural Progression (Class)


michael-h.dk
Multimedia Designer and Web Developer
Multimedia Designer and Web Developer
From MDN web docs:
Every modern web browser includes a powerful suite of developer tools. These tools do a range of things, from inspecting currently-loaded HTML, CSS and JavaScript to showing which assets the page has requested and how long they took to load.
In most browsers you can get to the developer tools by Press-and-hold/right-click an item on a webpage (Ctrl-click on the Mac), and choose Inspect Element from the context menu that appears. (An added bonus: this method straight-away highlights the code of the element you right-clicked.)
To see the result of this challenge, open the dev tolls in your browser and choose the Consol tab to check the Javascript part of the page.


Introducing SQLAlchemy Unchained¶
Enhanced declarative models for SQLAlchemy.
Useful Links¶
Usage¶
Installation¶
Requires Python 3.6+, SQLAlchemy and Alembic (for migrations)
$ pip install sqlalchemy-unchained
First let’s create a directory structure to work with:
mkdir your-project && cd your-project && \
mkdir your_package && mkdir db && \
touch setup.py your_package/config.py your_package/db.py your_package/models.py
From now it is assumed that you are working from the your-project
directory. All file paths at the top of code samples will be relative to this directory, and all commands should be run from this directory (unless otherwise noted).
Configure¶
Using SQLite¶
# your_package/config.py
import os
class Config:
PROJECT_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
DATABASE_URI = 'sqlite:///' + os.path.join(PROJECT_ROOT, 'db', 'dev.sqlite')
Here we’re creating an on-disk SQLite database at project-root/db/dev.sqlite
.
Using PostgreSQL or MariaDB/MySQL¶
If instead you’d like to use PostgreSQL or MariaDB/MySQL, now would be the time to configure it. For example, to use PostgreSQL with the psycopg2
engine:
# your_package/config.py
import os
class Config:
DATABASE_URI = '{engine}://{user}:{pw}@{host}:{port}/{db}'.format(
engine=os.getenv('SQLALCHEMY_DATABASE_ENGINE', 'postgresql+psycopg2'),
user=os.getenv('SQLALCHEMY_DATABASE_USER', 'your_db_user'),
pw=os.getenv('SQLALCHEMY_DATABASE_PASSWORD', 'your_db_user_password'),
host=os.getenv('SQLALCHEMY_DATABASE_HOST', '<IP_ADDRESS>'),
port=os.getenv('SQLALCHEMY_DATABASE_PORT', 5432),
db=os.getenv('SQLALCHEMY_DATABASE_NAME', 'your_db_name'))
For MariaDB/MySQL, replace the engine
parameter with mysql+mysqldb
and the port
parameter with 3306
.
Note that you’ll probably need to install the relevant driver package, eg:
# for postgresql+psycopg2
pip install psycopg2-binary
# for mysql+mysqldb
pip install mysqlclient
See the official documentation on SQLAlchemy Dialects to learn more about connecting to other database engines.
Connect¶
# your_package/db.py
from sqlalchemy_unchained import *
from .config import Config
engine, Session, Model, relationship = init_sqlalchemy_unchained(Config.DATABASE_URI)
If you need to customize the creation of any of these parameters, this is what init_sqlalchemy_unchained
is doing behind the scenes:
# your_package/db.py
from sqlalchemy.orm import relationship as _relationship
from sqlalchemy_unchained import *
from sqlalchemy_unchained import _wrap_with_default_query_class
from .config import Config
engine = create_engine(Config.DATABASE_URI)
Session = scoped_session_factory(bind=engine, query_cls=BaseQuery)
SessionManager.set_session_factory(Session)
Model = declarative_base(bind=engine)
relationship = _wrap_with_default_query_class(_relationship, BaseQuery)
Create some models¶
# your_package/models.py
from . import db
class Parent(db.Model):
name = db.Column(db.String, nullable=False)
children = db.relationship('Child', back_populates='parent')
class Child(db.Model):
name = db.Column(db.String, nullable=False)
parent_id = db.foreign_key('Parent', nullable=False)
parent = db.relationship('Parent', back_populates='children')
This is the first bit that’s really different from using stock SQLAlchemy. By default, models in SQLAlchemy Unchained automatically have their __tablename__
set to the snake_cased model class name, and include a primary key column id
as well as the automatically-timestamped columns created_at
and updated_at
.
This is customizable. For example, if you wanted to rename the columns on Parent
, and disable timestamping on Child
and rename its table name to children
:
# your_package/models.py
from . import db
class Parent(db.Model):
class Meta:
pk = 'pk'
created_at = 'created'
updated_at = 'updated'
name = db.Column(db.String, nullable=False)
children = db.relationship('Child', back_populates='parent')
class Child(db.Model):
class Meta:
table = 'children'
created_at = None
updated_at = None
name = db.Column(db.String, nullable=False)
parent_id = db.foreign_key('Parent', nullable=False)
parent = db.relationship('Parent', back_populates='children')
The are other Meta
options that SQLAlchemy Unchained supports, and we’ll have a look at those in a bit. We’ll also cover how to change the defaults for all models, as well as how to add support for your own custom Meta
options. But for now, let’s get migrations configured before we continue any further.
Configure database migrations¶
Initialize Alembic:
alembic init db/migrations
Next, we need to configure Alembic to use the same database as we’ve already configured. This happens towards the top of the db/migrations/env.py
file, which the alembic init
command generated for us. Modify the following lines:
from your_package.config import Config
from your_package.db import Model
from your_package.models import *
For these import statements to work, we need to install our package. Let’s create a minimal setup.py
:
# setup.py
from setuptools import setup, find_packages
setup(
name='your-project',
version='0.1.0',
packages=find_packages(exclude=['docs', 'tests']),
include_package_data=True,
zip_safe=False,
install_requires=[
'sqlalchemy-unchained==0.9.1',
],
)
And install the package into the virtual environment you’re using for development:
pip install -e .
That should be all that’s required to get migrations working. Let’s generate a migration for our models and run it:
alembic revision --autogenerate -m 'create models'
# verify the generated migration is going to do what you want, and then run it:
alembic upgrade head
Using SessionManager and Model Managers¶
SQLAlchemy Unchained encourages embracing the design patterns recommended by the Data Mapper Pattern that SQLAlchemy uses. This means we use managers (or services, if you prefer) to handle all of our interactions with the database. SQLAlchemy Unchained includes two classes to facilitate making this as easy as possible: SessionManager and ModelManager.
SessionManager is a concrete class that you can and should use directly whenever you need to interact with the database session. ModelManager is an abstract subclass of SessionManager that you should extend for each of the models in your application:
from your_package import db
class YourModel(db.Model):
name = db.Column(db.String, nullable=False)
class YourModelManager(db.ModelManager):
class Meta:
model = YourModel
def create(self, name, commit=False, **kwargs) -> YourModel:
return super().create(name=name, commit=commit, **kwargs)
def find_by_name(self, name) -> Union[YourModel, None]:
return self.get_by(name=name)
instance = YourModelManager().create(name='foobar', commit=True)
Both SessionManager and ModelManager are singletons, so whenever you call SessionManager()
or YourModelManager()
, you will always get the same instance.
Included Meta Options¶
table (__tablename__
)¶
class Foo(db.Model):
class Meta:
table: str = 'foo'
Set to customize the name of the table in the database for the model. By default, we use the model’s class name converted to snake case.
NOTE: The snake case logic used is slightly different from that of Flask-SQLAlchemy, so if you’re porting your models over and any of them have sequential upper-case letters, you will probably need to change the default.
pk (primary key column)¶
class Foo(db.Model):
class Meta:
pk: Union[str, None] = _ModelRegistry().default_primary_key_column = 'id'
Set to a string to customize the column name used for the primary key, or set to None
to disable the column.
NOTE: Customizing the default primary key column name used for all models is different from customizing the defaults for other meta options. (You should subclass _ModelRegistry
and set its default_primary_key_column
attribute. This is necessary for the foreign_key
helper function to work correctly.)
created_at (row insertion timestamp)¶
class Foo(db.Model):
class Meta:
created_at: Union[str, None] = 'created_at' # 'created_at' is the default
Set to a string to customize the column name used for the creation timestamp, or set to None
to disable the column.
updated_at (last updated timestamp)¶
class Foo(db.Model):
class Meta:
updated_at: Union[str, None] = 'updated_at' # 'updated_at' is the default
Set to a string to customize the column name used for the updated timestamp, or set to None
to disable the column.
repr (automatic pretty __repr__
)¶
class Foo(db.Model):
class Meta:
repr: Tuple[str, ...] = (_ModelRegistry.default_primary_key_column,) # default is ('id',)
print(Foo()) # prints: Foo(id=1)
Set to a tuple of column (attribute) names to customize the representation of models.
validation¶
class Foo(db.Model):
class Meta:
validation: bool = True # True is the default
Set to False
to disable validation of model instances.
polymorphic (mapped model class hierarchies)¶
class Foo(db.Model):
class Meta:
polymorphic: Union[bool, str, None] = True # None is the default
class Bar(Foo):
pass
This meta option is disabled by default, and can be set to one of 'joined'
, 'single'
, or True
(an alias for 'joined'
). See the SQLAlchemy documentation on class inheritance hierarchies for more info.
When polymorphic
is enabled, there are two other meta options available to further customize its behavior:
class Foo(db.Model):
class Meta:
polymorphic = True
polymorphic_on: str = 'discriminator' # column name to store polymorphic_identity in
polymorphic_identity: str = 'models.Foo' # unique identifier to use for this model
class Bar(Foo):
class Meta:
polymorphic_identity = 'models.Bar'
polymorphic_identity
is the identifier used by SQLAlchemy to distinguish which model class a row should use, and defaults to using the model’s class name. The polymorphic_identity
gets stored in the polymorphic_on
column, which defaults to 'discriminator'
.
IMPORTANT: The polymorphic
and polymorphic_on
Meta options should be specified on the base model of the hierarchy only. Conversely if you want to customize polymorphic_identity
, it should be specified on every model in the hierarchy.
Model Validation¶
SQLAlchemy Unchained adds support for validating models before persisting them to the database. This is enabled by default, although you can disable it with the validation Meta option.
There is one included validator: Required. It can be used like so:
from your_package import db
class YourModel(db.Model):
first_name = db.Column(db.String, info=dict(required=True))
middle_name = db.Column(db.String, info=dict(required='a custom message'))
last_name = db.Column(db.String, info=dict(validators=[db.Required]))
suffix = db.Column(db.String, info=dict(validators=[db.Required('a custom message')]))
There are two different ways you can write custom validation for your models.
The first is by extending BaseValidator, implementing __call__
, and raising ValidationError if the validation fails:
from your_package import db
class ValidateEmail(db.BaseValidator):
def __call__(self, value):
super().__call__(value)
if '@' not in value: # not how you should actually verify email addresses
raise db.ValidationError(self.msg or 'Invalid email address')
class YourModel(db.Model):
email = db.Column(db.String, info=dict(validators=[ValidateEmail]))
The second is by defining a validation classmethod
or staticmethod
directly on the model class:
from your_package import db
class YourModel(db.Model):
email = db.Column(db.String)
@staticmethod
def validate_email(value):
if '@' not in value: # not how you should actually verify email addresses
raise db.ValidationError('Invalid email address')
Validation methods defined on model classes must follow a specific naming convention: either validate_<column_name>
or validates_<column_name>
will work. Just like when implementing __call__
on BaseValidator, model validation methods should raise ValidationError if their validation fails.
Validation happens automatically whenever your create or update a model instance. If any of the validators fail, ValidationErrors will be raised.
Customizing Meta Options¶
The meta options available are configurable. Let’s take a look at the implementation of the created_at
meta option:
import sqlalchemy as sa
from py_meta_utils import McsArgs
from sqlalchemy import func as sa_func
from sqlalchemy_unchained import ColumnMetaOption
class CreatedAtColumnMetaOption(ColumnMetaOption):
def __init__(self, name='created_at', default='created_at', inherit=True):
super().__init__(name=name, default=default, inherit=inherit)
def get_column(self, mcs_args: McsArgs):
return sa.Column(sa.DateTime, server_default=sa_func.now())
For examples sake, let’s say you wanted every model to have a required name column, but no automatic timestamping behavior. First we need to implement a ColumnMetaOption:
# your_package/base_model.py
import sqlalchemy as sa
from py_meta_utils import McsArgs
from sqlalchemy_unchained import (BaseModel as _BaseModel, ColumnMetaOption,
ModelMetaOptionsFactory)
class NameColumnMetaOption(ColumnMetaOption):
def __init__(self):
super().__init__('name', default='name', inherit=True)
def get_column(self, mcs_args: McsArgs):
return sa.Column(sa.String, nullable=False)
class CustomModelMetaOptionsFactory(ModelMetaOptionsFactory):
_options = ModelMetaOptionsFactory._options + [NameColumnMetaOption]
class BaseModel(_BaseModel):
_meta_options_factory_class = CustomModelMetaOptionsFactory
class Meta:
created_at = None
updated_at = None
The last step is to tell SQLAlchemy Unchained to use our customized BaseModel
class:
# your_package/db.py
from sqlalchemy_unchained import *
from .base_model import BaseModel
from .config import Config
engine, Session, Model, relationship = init_sqlalchemy_unchained(Config.DATABASE_URI,
model=BaseModel)
Customizing the Default Primary Key Column Name¶
The primary key column is special in that knowledge of its setting is required for determining foreign key column names during model class creation. The first step is to subclass the _ModelRegistry
and set its default_primary_key_column
class attribute:
# your_package/model_registry.py
from sqlalchemy_unchained import _ModelRegistry as BaseModelRegistry
class CustomModelRegistry(BaseModelRegistry):
default_primary_key_column = 'pk'
And then, in order to inform SQLAlchemy Unchained about your customized model registry, you need call _ModelRegistry.set_singleton_class
:
# your_package/db.py
from sqlalchemy_unchained import *
from sqlalchemy_unchained import _ModelRegistry
from .config import Config
from .model_registry import CustomModelRegistry
_ModelRegistry.set_singleton_class(CustomModelRegistry)
engine, Session, Model, relationship = init_sqlalchemy_unchained(Config.DATABASE_URI)
Lazy Mapping (experimental)¶
Lazy mapping is feature that this package introduces on top of SQLAlchemy. It’s experimental and disabled by default. In stock SQLAlchemy, when you define a model, the second that code gets imported, the base model’s metaclass will register the model with SQLAlchemy’s mapper. 99% of the time this is what you want to happen, but if for some reason you don’t want that behavior, then you have to enable lazy mapping. There are two components to enabling lazy mapping.
The first step is to customize the model registry:
# your_package/model_registry.py
from py_meta_utils import McsInitArgs
from sqlalchemy_unchained import _ModelRegistry
class LazyModelRegistry(_ModelRegistry):
enable_lazy_mapping = True
def should_initialize(self, mcs_init_args: McsInitArgs) -> bool:
pass # implement your custom logic for determining which models to register
# with SQLAlchemy
And just like for customizing the primary key column, we need to inform _ModelRegistry
of our subclass by calling _ModelRegistry.set_singleton_class
:
# your_package/db.py
from sqlalchemy_unchained import *
from sqlalchemy_unchained import _ModelRegistry
from .config import Config
from .model_registry import LazyModelRegistry
_ModelRegistry.set_singleton_class(LazyModelRegistry)
engine, Session, Model, relationship = init_sqlalchemy_unchained(Config.DATABASE_URI)
The last step is to define your models like so:
class Foo(db.Model):
class Meta:
lazy_mapped = True


|
Simbody
3.5
|
A geometric primitive representing a sphere by its radius and center point, and a collection of sphere-related utility methods. More...
Public Member Functions | |
| Sphere_ () | |
| Construct an uninitialized Sphere object; the center point and radius will be garbage. More... | |
| Sphere_ (const Vec3P ¢er, RealP radius) | |
| Construct a sphere from its center location and radius. More... | |
| Sphere_ & | setRadius (RealP radius) |
| Change the radius of this sphere. More... | |
| Sphere_ & | setCenter (const Vec3P ¢er) |
| Change the center location of this sphere. More... | |
| Sphere_ & | scaleBy (RealP f) |
| Modify this sphere to scale its radius by a fractional amount f, that is we set radius to f*radius. More... | |
| Sphere_ & | stretchBoundary () |
| Stretch this sphere in place by a small amount to ensure that there will be no roundoff problems if this is used as a bounding sphere. More... | |
| RealP | findVolume () const |
| Return the volume of this sphere (4/3 pi r^3). More... | |
| RealP | findArea () const |
| Return the surface area of this sphere (4 pi r^2). More... | |
| bool | isPointOutside (const Vec3P &p) const |
| Return true if a given point is strictly outside this sphere. More... | |
| bool | isPointOutside (const Vec3P &p, RealP tol) const |
| Return true if a given point is more than a given tolerance outside the sphere. More... | |
| const Vec3P & | getCenter () const |
| Get the location of the sphere's center point. More... | |
| Vec3P & | updCenter () |
| Get a writable reference to the sphere's center point. More... | |
| RealP | getRadius () const |
| Get the sphere's radius. More... | |
| RealP & | updRadius () |
| Get a writable reference to the sphere's radius. More... | |
A geometric primitive representing a sphere by its radius and center point, and a collection of sphere-related utility methods.
|
inline |
Construct an uninitialized Sphere object; the center point and radius will be garbage.
|
inline |
Construct a sphere from its center location and radius.
|
inline |
Change the radius of this sphere.
|
inline |
Change the center location of this sphere.
|
inline |
Modify this sphere to scale its radius by a fractional amount f, that is we set radius to f*radius.
|
inline |
Stretch this sphere in place by a small amount to ensure that there will be no roundoff problems if this is used as a bounding sphere.
The amount to stretch depends on the default tolerance for this precision, the radius, and the position of the sphere in space. A very large sphere, or a sphere that is very far from the origin, must be stretched more than a small one at the origin. Cost is 6 flops.
|
inline |
Return the volume of this sphere (4/3 pi r^3).
|
inline |
Return the surface area of this sphere (4 pi r^2).
|
inline |
Return true if a given point is strictly outside this sphere.
Just touching the sphere does not qualify.
|
inline |
Return true if a given point is more than a given tolerance outside the sphere.
|
inline |
Get the location of the sphere's center point.
|
inline |
Get a writable reference to the sphere's center point.
|
inline |
Get the sphere's radius.
|
inline |
Get a writable reference to the sphere's radius.


loading, one sec..
spacebar to play and pause things
spacebar
f/s to change playback speed (currently x)
f/s
x
send your .gpx files to<EMAIL_ADDRESS>for your very own map
.gpx
<EMAIL_ADDRESS>visit yosemitebandit.github.com/stravanova for more
and keep riding.


Education: I attended a French immersion elementary school and thereby was forever confused about how many quarts in a gallon and how many feet in a mile. I attended a small, private middle school that indirectly taught me the value of economic, cultural, racial diversity in educational environments and how very important it is to acknowledge and accept one's truest self. I attended a public magnet prep school for high school that taught me that some of the greatest lessons can be taught through fiction. I attended a small Quaker liberal arts college and learned the intersectionality of political and social issues. I watched as my mother opened a bakery and that taught me that anything is possible at any age through dedication and a fair amount of perspiration. In my first career at a huge academic institution, I learned the unknowable value of academic research and the often-overlooked staff that helps make it possible. I attended a short intensive program exploring my emotional limitations and how to manage my internal life - through which I learned the absolute value of my self. I am in the process of attending an intensive Web Development education program where I will not only learn front and back-end programming, but exactly where my stress limits are and use my newfound skills to manage myself.
Skills: I can express myself in writing fairly well. I have a solid grasp on the fundamentals of HTML and Ruby, and a working knowledge of CSS and JavaScript. I am experienced in acounting, bookkeeping and the basics of budget projections. I am trained in various internal systems used by the local Big Ten university. I am skilled at keeping precious friends.
Real talk: I am a single, white female with a playful and grey cat who loves me. I live in the Midwest, USA and love it. I read feminist pop culture commentary for fun and I also like to go to the local bar's goth nights. I was born in the mid-80s and soon identified strongly with the 90s. I remember 9/11 as that surreal Physics class where the teacher wouldn't stop talking about who-knows-what even after the loudspeaker announcement that sent chills down my spine. I've read both "The Perks of Being a Wallflower" and "A Portrait of the Artist as a Young Man" and they were equally formative. I'm not very good at advertising myself because I always start talking/writing like this. In some poetic, all-encompasing tone exhibited by snippets of personal realities. I guess this is just how I roll.


About The Event
Gathering of all Jesus Youth campus leaders in Kerala upon the hill top of his grace where we are celebrating our call as missionaries and challenging everybody around us to become the same
Where
Bharata Mata College, Thrikkakara
When
August 22 - 25, 2019
Let us Pray Together
O Lord God, let the campuses be filled with young missionaries
blessed with the sprit of the father, the love of the Christ
and anointing of the Holyspirit.
Hail Mary,intercede for us.
"Five loaves and two fish" - Mark 6:38
About Us
Greetings in the name of Jesus.
With great joy of being immersed in the innumerable blessings that has been showered upon us, Kerala Campus Ministry is letting you know about Kerala Campus Conference 2019 (KCC19).
Being a ministry that has played a key role in the movement in forming young missionaries, we assumed that we have a need of gathering campus leaders from all over the state to celebrate and share happiness about our missionary call to do the mission of Christ and also motivate others to do the same. This conference will be a gathering of such kind of people who are doing mission by proclaiming Jesus in various campuses so that they can learn, feel and teach different things each other which are helpful in their ministering.
Bring your 5 loaves and 2 fish and let Him multiply those into abundance in our campuses.
See you there at Bharata Mata College, Thrikkakara on August 22 - 25, 2019.
Mission 2020
MISSION 2020 is a new step initiated by campus ministry kerala, with a dream of budding God's kingdom in each campuses of kerala. And its main aim is to build a youth with Christ centered life. We expect and hope that this will happen by the year 2020.Under this project many initiatives were already started in various regions with prayers.let us together built a new generation youth with a life in christ and with more social values.


"x" "1" "OLDHAM,JW, PRESTON,RF AND PAULSON,JD, MUTAGENICITY TESTING OF SELECTEDANALGESICS IN AMES SALMONELLA STRAINS, J. APPL. TOXICOL. 6(4):237-243,1986"


lectin domain domains protein Plant sequences plant proteins Arabidopsis rice gene genes LysM Van family phylogenetic different Biol. species Figure Nictaba lectins plants analysis Damme combination jacalin resistance identified receptor ricin GNA Oryza E.J.M. Mol. Physiol. evolution sequence cucumber genome homologs soybean Sci. clade clades {border-style expression families legume sativa stress F-box Wang multi-domain present px;} ssp. #ffffff;} Chen infection tree ./s--- Arabidopsis, Zhang architecture evolutionary kinase response Cell architectures combinations containing defense hevein involved role RLKs group kinases number using W.J. genomes signaling species. tandem Genome Peumans duplication expansion particular studies based cell domains. family, thaliana ./S-()- BMC Glycine Lectin Phytophthora Res. S). additional analyses class corresponding dicot disease distinct domain, multiple presence receptor-like related single-domain study (clade ./--- ./pp.. Bot. Domains However, Liu Proost Table Trends architecture. chitinase common comparative conserved functional investigated japonica known organization relationships species, subclades (available Evol. Genet. L-type Magnaporthe Nicotiana Rougé USA abiotic agglutinin binding composed grouped interaction large motifs online: plants. proteins, px; reported rice. seed share shown study, tolerance transgenic {font-family ... Biochem. Clade Eggermont F-box/Nictaba Huang JRLs Protein activity ancestor and/or carbohydrate-binding clustered death domain. encoding events evolved font-size high induced innate likelihood new performed recent recognition responses results revealed salt signal soybean, specific stresses suggesting tobacco tree. Acad. Cucumis Evolutionary Exp. Furthermore, Govers Holle Lannoo Lee Natl. Nature Proc. Rev. Sun acid analyzed ancient annotated arrayed biological cluster confers demonstrated divergence diverse double; duplications function immunity important including insect jacalin-related leaf maximum monocot originating plants, proteins. rice, salinity second shared shows similar type unique upregulated virus wheat wide (.%) ./j.-X...x ./pnas. Analysis Barre Biotechnol. Bouwmeester Curr. Dang EUL Expression FEBS G-type GH/ricin Interact. J.M. Kim Legume Lin Molecular Nat. PLAZA Pseudomonas Rice Schutter Smagghe Stacey Structure Surprisingly, Transgenic agreement arrangements bacterial border-color border-width built characterization classification clusters complex contain contains cucumber, data diversification domains, evolution. functions fungal fusion grisea groups indica indicating land lectin-like lineage-specific mainly mannose-binding model monocots motif novel overexpression phloem previous probably rearrangement receptors recognize separate separated sequences. showed solid; support symbiosis syringae tree, trees used {font-style {font-weight ./j.plantsci... ./nature A.K. AD/jacalin ATP Acids Agaricus B/ricin BLASTp Bornberg-Bauer Brassicaceae CERK Cao Comparative Domain E.J. Evolution Fouquaert Genom. Genome-wide Identification InterProScan J.P. Kristof Lectins Liang M.E. Madsen Markov Microbe New Nucleic Opin. Overexpression P.M. Phylogenetic Planta Proteins Similarly, Sofie Song Subsequently, Tanaka WGDs Yang addition associated belonging biotic bisporus bold carbohydrate certain chitin clade, clades, closely closest comprising confirmed core courier; distribution early em; enhanced event explained flowering genes. genomics glycoside hidden homolog inducible largest lectin, loss majority max membrane networks non-lectin occur perception plants: play polyploidy profiling properties pt;} putative rearrangements recombination regulation relationship result reveals ribosome-inactivating sativa) small subclade toxicity type- widespread


You need to define a custom data class before you can subscribe to it.
Follow these steps to subscribe to custom dataset:
QuantBook
.var qb = new QuantBook();
qb = QuantBook()
AddData
method with a ticker and then save a reference to the data Symbol
.var symbol = qb.AddData<Nifty>("NIFTY").Symbol;
symbol = qb.AddData(Nifty, "NIFTY").Symbol
Custom data has its own resolution, so you don't need to specify it.


--- title: Energy Life Sciences date: 2017-01-08 00:00:00 Z layout: project type: project subtitle: Web Development background: "/img/projects/elsi/elsi-thumb.png" ---
The Energy Life Sciences Institute® provides comprehensive educational and medical solutions to help you live with vitality and achieve your fullest potential. The Being Energy methodology is at the core of our services and products, providing a framework for healing and living at your joyful best.


| Name | {{selectedEvent.name}} |
| Date | {{selectedEvent.date}} |
| Location | {{selectedEvent.locationName}} |
| Address | {{selectedEvent.locationAddress.streetName}} {{selectedEvent.locationAddress.streetNumber}} {{selectedEvent.locationAddress.postcode}} {{selectedEvent.locationAddress.city}} |


A toolbox of common robust statistical tests, including robust descriptives, robust t-tests, and robust ANOVA. It is also available as a module for 'jamovi' (see <https://www.jamovi.org> for more information). Walrus is based on the WRS2 package by Patrick Mair, which is in turn based on the scripts and work of Rand Wilcox. These analyses are described in depth in the book 'Introduction to Robust Estimation & Hypothesis Testing'.
| Version: | 1.0.3 |
| Imports: | WRS2, ggplot2, jmvcore (≥ 0.9.1), R6 |
| Suggests: | MASS |
| Published: | 2018-06-17 |
| Author: | Jonathon Love, Patrick Mair |
| Maintainer: | Jonathon Love <jon at thon.cc> |
| BugReports: | https://github.com/jamovi/walrus/issues |
| License: | GPL-3 |
| URL: | https://github.com/jamovi/walrus |
| NeedsCompilation: | no |
| In views: | Robust |
| CRAN checks: | walrus results |
| Reference manual: | walrus.pdf |
| Package source: | walrus_1.0.3.tar.gz |
| Windows binaries: | r-devel: walrus_1.0.3.zip, r-release: walrus_1.0.3.zip, r-oldrel: walrus_1.0.3.zip |
| OS X binaries: | r-release: walrus_1.0.3.tgz, r-oldrel: walrus_1.0.3.tgz |
| Old sources: | walrus archive |
Please use the canonical form https://CRAN.R-project.org/package=walrus to link to this page.


Restore from replica
This option will re-ingest an image from the replica bucket (if configured). It should fail early if the image already exists in the main image bucket.
Useful if the image has been hard-deleted.
@form(Call("POST", imageLoaderEndpoint)) { }


You need team removal permission to remove members from your organization. Before removing members, stop all nodes they are using. Removing members is not reversible and the members will lose access to the organization's projects. On the Team tier, projects that the members created in the organization will remain with the members. On the Trading Firm and Institution tiers, projects that the members created in the organization will be transferred to the organization manager.
Follow these steps to remove members from your organization:
If you successfully remove members, the members are not displayed on the Team Management page.


initialStatement
functionDisplayed
Write down below the code segment that must replace the comment above. For you to get credit, your code will have to be syntactically correct functional JavaScript (e.g., use if/then/else instead of ... ? ... : ...), use the fp helper functions WHENEVER possible (e.g., use fp.add instead of the JavaScript operator +), pass all of the unit tests for this problem, and use continuations as intended. Recall that a continuation is a function that takes in the result of completed computations and then performs the remaining computations.
Make sure to double-check your answer for typos (e.g., recall that JavaScript is case sensitive), missing or extra parentheses, etc.
While there may be several answers that pass all of the unit tests, the only accepted answers are those that use the continuation k as intended.
The correct answer is:
answer


|
YASK
Yet Another Stencil Kit: a software framework for creating HPC stencil code. Copyright 2014-2023 Intel Corporation.
|
Factory to create output objects. More...
#include <yask_common_api.hpp>
Public Member Functions | |
| virtual yask_file_output_ptr | new_file_output (const std::string &file_name) const |
| Create a file output object. | |
| virtual yask_string_output_ptr | new_string_output () const |
| Create a string output object. | |
| virtual yask_stdout_output_ptr | new_stdout_output () const |
| Create a stdout output object. | |
| virtual yask_null_output_ptr | new_null_output () const |
| Create a null output object. | |
Factory to create output objects.
|
virtual |
Create a file output object.
This object is used to write output to a file.
| [in] | file_name | Name of file to open. Any existing file will be truncated. |
|
virtual |
Create a string output object.
This object is used to write output to a string.
|
virtual |
Create a stdout output object.
This object is used to write output to the standard output stream.
|
virtual |
Create a null output object.
This object is used to discard output.


Opacity
Rotation
Height
Width
Mirror
Keep ratio
Opacity
Rotation
Height
Width
Mirror
Keep ratio
Two German students originally wrote the Historic Tale Construction Kit, with Flash. Sadly, their work isn't available anymore, only remembered. This new application is a tribute, but also an attempt to revive the old medieval meme, with code and availability that won't get lost.
This project is available for you to use and we hope you will enjoy playing with it as much as we enjoyed building it. We put the open source code on GitHub , so you can grab it, tinker with it or even help us by contributing.
Cheers,


| 1 | package fr.sii.ogham.sms.sender.impl.cloudhopper.session; | |
| 2 | ||
| 3 | import org.slf4j.Logger; | |
| 4 | import org.slf4j.LoggerFactory; | |
| 5 | ||
| 6 | import com.cloudhopper.smpp.SmppSession; | |
| 7 | import com.cloudhopper.smpp.pdu.EnquireLink; | |
| 8 | import com.cloudhopper.smpp.type.RecoverablePduException; | |
| 9 | import com.cloudhopper.smpp.type.SmppChannelException; | |
| 10 | import com.cloudhopper.smpp.type.SmppTimeoutException; | |
| 11 | import com.cloudhopper.smpp.type.UnrecoverablePduException; | |
| 12 | ||
| 13 | import fr.sii.ogham.sms.sender.impl.cloudhopper.exception.KeepAliveException; | |
| 14 | ||
| 15 | /** | |
| 16 | * Task that regularly sends {@link EnquireLink} requests to keep the current | |
| 17 | * session alive. | |
| 18 | * | |
| 19 | *
 | |
| 20 | * Sending the {@link EnquireLink} may fail in several situations such as: | |
| 21 | *
 | |
| 22 | *
No response is received before the configured timeout is expired
 | |
| 23 | *
The {@link EnquireLink} is received but the server indicates that there | |
| 24 | * is an issue with the sent PDU
 | |
| 25 | *
The session is closed by the server
 | |
| 26 | *
The server is not reachable
 | |
| 27 | *
... | |
| 28 | *
 | |
| 29 | *
 | |
| 30 | * | |
| 31 | * In any case, the error is not treated here but delegated to an | |
| 32 | * {@link ErrorHandler}. The {@link ErrorHandler} may either skip, log or | |
| 33 | * properly handle the error. | |
| 34 | * | |
| 35 | * @author Aurélien Baudet | |
| 36 | * @see ErrorHandler | |
| 37 | * @see KeepSessionAliveStrategy | |
| 38 | */ | |
| 39 | public class EnquireLinkTask implements Runnable { | |
| 40 | private static final Logger LOG = LoggerFactory.getLogger(EnquireLinkTask.class); | |
| 41 | ||
| 42 | private final SmppSession session; | |
| 43 | private final ErrorHandler errorHandler; | |
| 44 | private final long enquireLinkRequestTimeout; | |
| 45 | private int consecutiveFailures; | |
| 46 | ||
| 47 | public EnquireLinkTask(SmppSession session, ErrorHandler errorHandler, long enquireLinkRequestTimeout) { | |
| 48 | super(); | |
| 49 | this.session = session; | |
| 50 | this.errorHandler = errorHandler; | |
| 51 | this.enquireLinkRequestTimeout = enquireLinkRequestTimeout; | |
| 52 | } | |
| 53 | ||
| 54 | @Override | |
| 55 | public void run() { | |
| 56 |
3
1. run : negated conditional → NO_COVERAGE 2. run : negated conditional → NO_COVERAGE 3. run : negated conditional → NO_COVERAGE |
if (session == null || !session.isBound() || session.isClosed()) { |
| 57 | return; | |
| 58 | } | |
| 59 | try { | |
| 60 | LOG.debug("Sending EnquireLink to keep session alive..."); | |
| 61 | session.enquireLink(new EnquireLink(), enquireLinkRequestTimeout); | |
| 62 | LOG.debug("EnquireLink to keep session alive sent"); | |
| 63 | consecutiveFailures = 0; | |
| 64 | } catch (RecoverablePduException | UnrecoverablePduException | SmppTimeoutException | SmppChannelException e) { | |
| 65 | LOG.debug("Failed to send EnquireLink", e); | |
| 66 |
1
1. run : Replaced integer addition with subtraction → NO_COVERAGE |
consecutiveFailures++; |
| 67 |
1
1. run : removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/session/ErrorHandler::handleFailure → NO_COVERAGE |
errorHandler.handleFailure(new KeepAliveException("Failed to keep session alive", e, consecutiveFailures)); |
| 68 | } catch (InterruptedException e) { | |
| 69 | LOG.debug("Failed to send EnquireLink (interrupted)", e); | |
| 70 |
1
1. run : removed call to java/lang/Thread::interrupt → NO_COVERAGE |
Thread.currentThread().interrupt(); |
| 71 |
1
1. run : Replaced integer addition with subtraction → NO_COVERAGE |
consecutiveFailures++; |
| 72 |
1
1. run : removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/session/ErrorHandler::handleFailure → NO_COVERAGE |
errorHandler.handleFailure(new KeepAliveException("Failed to keep session alive", e, consecutiveFailures)); |
| 73 | } | |
| 74 | } | |
| 75 | ||
| 76 | } | |
Mutations | ||
| 56 |
1.1 2.2 3.3 |
|
| 66 |
1.1 |
|
| 67 |
1.1 |
|
| 70 |
1.1 |
|
| 71 |
1.1 |
|
| 72 |
1.1 |


class: center, middle, inverse, title-slide # Lecture 12 ## Factor Models ### Tyler Ransom ### ECON 6343, University of Oklahoma --- # Plan for the Day 1. Discuss proxy variables & measurement error 2. Methods for dimensionality reduction 3. Economic content of factor models 4. Examples of factor models --- # Attribution I gratefully acknowledge Esteban Aucejo for sharing his slides on factor models, some of which I incorporated in what follows. I also based some content on Shalizi (2019) which is an excellent textbook on data analysis. --- # Proxy variables - Suppose we have a simple linear regression model `\begin{align*} y &= X\beta + \varepsilon \end{align*}` - If `\((y,X)\)` come from observational data, the model is likely confounded - That is, our OLS estimate of `\(\hat{\beta}\)` would be biased (because `\(X\)` is correlated with `\(\varepsilon\)`) - One potential way to remove the bias is to include a .hi[proxy variable] - This is a variable that we can observe and that is related to something in `\(\varepsilon\)` - Example: unobserved ability biases returns to schooling. IQ might be a viable proxy --- # A brief review of measurement error - What if our proxy is measured with error? This can cause econometric problems - In linear regression, under "classical measurement error" (CEV) assumption: - OLS estimates are attenuated to zero (i.e. "attenuation bias") - OLS t-stats are biased downwards - There are other "non-classical" forms of measurement error as well - See Pischke (2007) for a good treatment of ME - Naturally, measurement error is a beast in non-linear models - See Chen, Hong, and Nekipelov (2011) for a complete treatment --- # Proxy variables & measurement error - Unless they happen to resolve the endogeneity problem, proxy variables won't work - (Need `\(\mathbb{E}\left(\varepsilon \vert X, proxy\right) = \mathbb{E}\left(\varepsilon \vert proxy\right)\)`) - And usually proxies don't satisfy this requirement - You can use instrumental variables to solve the ME problem - But only in linear models - And, of course, instrument validity is almost always in question - So it seems you have to choose between omitted variable bias and attenuation bias --- # What if we have many correlated proxies? - For the unobserved ability question, we might have many different proxies - e.g. individuals might take multiple standardized tests - How do we know which test scores to attempt to use as proxies? - What if each test itself suffers from measurement error? - What if the test scores are highly correlated with each other? - Today we'll talk about how to handle this situation - The application focuses on measuring ability - But this approach is generally applicable when we have many noisy measurements --- # Dimensionality reduction - .hi[Dimensionality reduction] is a common task in data analysis - If 3 variables all give the same information, why not just have 1? - There are two related methods for reducing dimensionality 1. .hi[Principle Components Analysis (PCA)] 2. .hi[Factor Analysis] --- # PCA - PCA is one way to reduce dimensionality. Let `\(M\)` be an `\(N\times J\)` matrix of data - Decompose `\(M\)` as follows: `\begin{align*} M &= \boldsymbol{\theta}\Lambda\\ [N\times J] &= [N\times J] [J\times J] \end{align*}` - `\(\Lambda\)` are stacked eigenvectors - `\(\boldsymbol{\theta}\)` is an .hi[orthogonalized transformation] of `\(M\)` (columns of `\(\boldsymbol{\theta}\)` are uncorrelated) - `\(\Lambda\)` indicates the rotation angle to get from `\(\boldsymbol{\theta}\)` back to `\(M\)` - If `\(M\)` were orthogonal to begin with, `\(\Lambda = I\)` and `\(M=\boldsymbol{\theta}\)` --- # PCA 2 - Nothing on the previous slide helps us with dimensionality reduction per se - We reduce dimensionality by choosing the eigenvectors with the largest magnitudes - These represent the dimensions `\(\boldsymbol{\theta}\)` with the greatest variance - We say that we "select the first `\(K\)` .hi[principal components] of `\(M\)`" - Mathematically, we "reduce" (i.e. "approximate") `\(M\)` by choosing a subset of `\(\boldsymbol{\theta}\)` and `\(\Lambda\)` `\begin{align*} \widetilde{M} &= \boldsymbol{\theta}_k\Lambda_k\\ [N\times J] &= [N\times K] [K\times J]\\ &\\ M &= \boldsymbol{\theta}_k\Lambda_k + \boldsymbol{\varepsilon} \end{align*}` where `\(\boldsymbol{\varepsilon}\equiv M - \widetilde{M}\)` is a `\(N\times J\)` matrix --- # Visual depiction of PCA .center[![pca](GaussianScatterPCA.jpg)] - The arrows are the eigenvectors; longer arrows correspond to more variance (image source: [Wikipedia](https://upload.wikimedia.org/wikipedia/commons/f/f5/GaussianScatterPCA.svg)) --- # Factor Analysis - Factor Analysis comes in two forms: Exploratory (EFA) and Confirmatory (CFA) - EFA: see what factors might be in the data - CFA: write down a model and use the data to test it - In economics, we pretty much only do CFA - FA is used extensively in psychometrics - It is a natural tool for analyzing cognitive or behavioral tests - Each test measures some set of skills, but does so noisily - Tests tend to measure the same set of skills, so they are correlated --- # How factor analysis works - Suppose our `\(J\)` columns of `\(M\)` correspond to measurements (e.g. test scores) - FA tries to find some underlying unobservables that commonly affect `\(M\)` - We assume that we cannot observe `\(\boldsymbol{\theta}\)` - If we assume that `\(M\)` is standardized (mean-zero, unit-variance), then `\begin{align*} M &= \underbrace{\boldsymbol{\theta}_k\Lambda_k + \boldsymbol{\varepsilon}}_{\boldsymbol{u}} \end{align*}` - `\(u\)` is a composite error term (since both `\(\boldsymbol{\theta}\)` and `\(\varepsilon\)` are unobservable) - In FA, we call `\(\boldsymbol{\theta}\)` .hi[factors], and we call `\(\Lambda\)` .hi[factor loadings] and `\(\boldsymbol{\varepsilon}\)` .hi[uniquenesses] --- # PCA vs. FA - Clearly, PCA and FA are related, but there are important differences - The `\(\boldsymbol{\theta}_k\)` we get from PCA and FA are going to be different - But the `\(\Lambda_k\)` are identical (and hence the `\(\boldsymbol{\varepsilon}\)` are different) - `\(\boldsymbol{\theta}_k^{PCA}\)` has larger variance than `\(\boldsymbol{\theta}_k^{FA}\)` - This is because PCA treats `\(M\)` as not measured with error, but FA does the opposite - For many more excellent details, see Shalizi (2019) [here](http://www.stat.cmu.edu/~cshalizi/uADA/12/lectures/ch19.pdf) --- # Extensions of FA - We can extend FA to allow for `\(X\)`'s that affect our measurements `\begin{align*} M &= X\boldsymbol{\beta} + \underbrace{\boldsymbol{\theta}_k\Lambda_k + \boldsymbol{\varepsilon}}_{\boldsymbol{u}} \\ [N\times J] &= [N\times L] [L\times J] + [N\times K] [K\times J] + [N\times J] \end{align*}` - If `\(X\)` is `\(N\times L\)` then `\(\boldsymbol{\beta}\)` is a `\(L\times J\)` matrix - However, we do need to make more assumptions for econometric identification! --- # Identifying assumptions for a 2-factor model - We need to make the following assumptions: `\begin{align*} \mathbb{E}\left(\boldsymbol{\varepsilon}\right) &= \mathbf{0}_{J\times 1}\\ \mathbb{V}\left(\boldsymbol{\varepsilon}\right) &\equiv \mathbb{E}\left(\boldsymbol{\varepsilon}'\boldsymbol{\varepsilon}\right)=\Omega_{J\times J}\\ \Omega_{[j,j]} &= \sigma^2_j, \Omega_{[j,k]} = 0\\ \mathbb{E}\left(\boldsymbol{\theta}\right) &= \mathbf{0}_{2\times 1}\\ \mathbb{V}\left(\boldsymbol{\theta}\right) &= \Sigma_\boldsymbol{\theta} \end{align*}` - Let `\(u \equiv M - X\boldsymbol{\beta}\)`, then `\begin{align*} \mathbb{E}\left(u\right) &= \mathbf{0}_{J\times 1}\\ \mathbb{V}\left(u\right) &= \Lambda\Sigma_\boldsymbol{\theta}\Lambda' + \Omega\\ \Sigma_\boldsymbol{\theta} &= \left[\begin{array}{cc} \sigma^2_{\theta_1} & \sigma_{\theta_1 \theta_2}\\ \sigma_{\theta_1 \theta_2} & \sigma^2_{\theta_2}\\ \end{array}\right] \end{align*}` --- # Identification of a 2-factor model - Our only data source to estimate `\(\Lambda\)` and `\(\Sigma_\boldsymbol{\theta}\)` is `\(\mathbb{V}\left(M-X\boldsymbol{\beta}\right)\equiv \mathbb{V}\left(u\right)\)` - Let's look at the variance-covariance matrix of `\(u\)`: - This has `\(J\)` diagonal elements and `\(\frac{J(J-1)}{2}\)` unique off-diagonal elements - With these `\(J+\frac{J(J-1)}{2}\)` moments in the data, we want to estimate: - The `\(J\)` diagonal elements of `\(\Omega\)` (i.e. the `\(\sigma^2_j\)`'s) - `\(2J\)` elements of `\(\Lambda\)` - four elements of `\(\Sigma_\boldsymbol{\theta}\)` - We have `\(3J+4\)` parameters, but only `\(J+\frac{J(J-1)}{2}\)` data moments - In general, the model is not identified. We will need to impose further assumptions. --- # Additional identifying assumptions - The following are common assumptions, but you could impose others 1. `\(\theta_1 \perp \theta_2\)` (so `\(\Sigma_\boldsymbol{\theta}\)` is diagonal) 2. The scale of each factor is arbitrary. 2 ways to normalize the scale: - `\(\Sigma_\boldsymbol{\theta} = I_{2\times 2}\)` - or - Set one element of each row of `\(\Lambda=1\)` - With these two assumptions, we achieve identification if `\begin{align*} 2J + J \leq J+\frac{J(J-1)}{2} \end{align*}` - So `\(J\geq 5\)` is necessary (but not sufficient) for identification --- # Other identification considerations - For .hi[model interpretability], also need to put more structure on `\(\Lambda\)` - For example, suppose we have 6 measurements: - 3 from a cognitive test and 3 from a personality test - In this case, the first row of `\(\Lambda\)` should be 0 for the personality measures - Likewise, the second row of `\(\Lambda\)` should be 0 for the cognitive measures - If all 6 measurements come from a cog. test, can't identify a non-cog. factor - Could possibly identify `\(\sigma_{\theta_1\theta_2}\)` if one measurement measures both factors --- # Estimation of factor models - Typically, we impose distributional assumptions on `\(\boldsymbol{\theta}\)` and `\(\boldsymbol{\varepsilon}\)` - e.g. assume `\(\boldsymbol{\theta}\)` and `\(\boldsymbol{\varepsilon}\)` are each MVN with 0 covariance and `\(\boldsymbol{\theta} \perp \boldsymbol{\varepsilon}\)` - Then we estimate `\((\Lambda, \Sigma_\boldsymbol{\theta}, \Omega)\)` by maximum likelihood - The likelihood function will need to be integrated, since `\(\boldsymbol{\theta}\)` is unobserved - Can use quadrature, simulated method of moments, MCMC, or the EM algorithm - As you know, these vary in their ease of use --- # Using factor models to `\(\downarrow\)` bias of regression estimates - The whole reason we use a factor model is to reduce bias - Let's go back to the log wage example from the start of today - `\(\beta\)`'s are biased if we omit cognitive ability (omitted variable bias) - `\(\beta\)`'s are also biased if we include IQ score (attenuation bias from meas. err.) - We know cognitive ability affects wages, and we have (noisy) measurements of it - We can estimate the log wage parameters by maximum likelihood - We combine together the log wage and factor model likelihoods - I'll walk you through how to do this in the Problem Set (due next time) --- # Factor models and dynamic selection - Factor models can also be used to account for dynamic selection - Intuition: `\(\uparrow\)` cog. abil `\(\Rightarrow \uparrow\)` schooling `\(\Rightarrow \uparrow\)` wages - Schooling is endogenous, so we can add a schooling choice model to our likelihood - When the ability factor enters choice of schooling, this induces a correlation between schooling choices and wages - But conditional on the factor, we have separability of the likelihood components - `\(\mathcal{L} = \int_A \underbrace{\mathcal{L}_1(A)}_{\text{measurements}}\underbrace{\mathcal{L}_2(A)}_{\text{choices}}\underbrace{\mathcal{L}_3(A)}_{\text{wages}} dF(A)\)` - We covered a variant of this case back when we discussed Mixed Logit --- # Seminal papers applying factor analysis - Heckman, Stixrud, and Urzua (2006) - first paper to apply this method to an econometric model - show that this method works - 2 latent factors impact a variety of outcomes - Cunha, Heckman, and Schennach (2010) - develop a dynamic factor model of early childhood skill production - latent ability in one period affects investment in subsequent periods --- # Recent papers - Aucejo and James (2019) - Why do women attain more education than men, especially among Blacks? - Use 59 measures of early student information - 3 factors: family background, math/verbal skills, externalizing behavior - Family background differences drive most of the observed gaps - Ashworth, Hotz, Maurel, and Ransom (2020) - Estimate wage returns to schooling and different types of work experience - 2 factors: cognitive and "not" cognitive - Accounting for selection matters a lot for calculation of returns to schooling --- # References .smallest[ Ashworth, J, V. J. Hotz, A. Maurel, et al. (2020). "Changes across Cohorts in Wage Returns to Schooling and Early Work Experiences". In: _Journal of Labor Economics_. DOI: [10.1086/711851](https://doi.org/10.1086%2F711851). Aucejo, E. M. and J. James (2019). "Catching Up to Girls: Understanding the Gender Imbalance in Educational Attainment Within Race". In: _Journal of Applied Econometrics_ 34.4, pp. 502-525. DOI: [10.1002/jae.2699](https://doi.org/10.1002%2Fjae.2699). Chen, X, H. Hong, and D. Nekipelov (2011). "Nonlinear Models of Measurement Errors". In: _Journal of Economic Literature_ 49.4, pp. 901-937. DOI: [10.1257/jel.49.4.901](https://doi.org/10.1257%2Fjel.49.4.901). Cunha, F, J. J. Heckman, and S. M. Schennach (2010). "Estimating the Technology of Cognitive and Noncognitive Skill Formation". In: _Econometrica_ 78.3, pp. 883-931. DOI: [10.3982/ECTA6551](https://doi.org/10.3982%2FECTA6551). Heckman, J. J, J. Stixrud, and S. Urzua (2006). "The Effects of Cognitive and Noncognitive Abilities on Labor Market Outcomes and Social Behavior". In: _Journal of Labor Economics_ 24.3, pp. 411-482. DOI: [10.1086/504455](https://doi.org/10.1086%2F504455). Pischke, S. (2007). _Lecture Notes on Measurement Error_. Lecture Notes. London School of Economics. URL: [http://econ.lse.ac.uk/staff/spischke/ec524/Merr_new.pdf](http://econ.lse.ac.uk/staff/spischke/ec524/Merr_new.pdf). Shalizi, C. R. (2019). _Advanced Data Analysis from an Elementary Point of View_. Cambridge University Press. URL: [http://www.stat.cmu.edu/~cshalizi/ADAfaEPoV/ADAfaEPoV.pdf](http://www.stat.cmu.edu/~cshalizi/ADAfaEPoV/ADAfaEPoV.pdf). ]


Planet Sick-Boy: http://www.sick-boy.com "We Put the SIN in Cinema"
© Copyright 2001 Planet Sick-Boy. All Rights Reserved.
The press notes for Jurassic Park 3 proudly trumpet the fact that there are as many new dinosaurs in the new sequel as there were in the first two films combined. While that may sound impressive, it simply means that the filmmakers are concerned only with giving viewers more of the same instead of trying something new. I guess you could say they're sticking to the old "If it ain't broke, don't fix it" adage, considering the first film was, at the time, the highest-grossing picture ever and its first sequel still holds the record for the biggest opening weekend in history.
But bigger budgets and projected box-office grosses don't stop JP3 from being a by-the-numbers action flick with a decent cast and impressive special effects. A drop-off in quality from the first to the second was noticeable, as it is from the second to the third, but it probably has much more to do with the fact that it's the only film not based on a Michael Crichton novel, rather than Steven Spielberg's move from the director's chair to an executive-producing credit.
Sam Neill (The Dish) reprises his role as Dr. Alan Grant, a dinosaur expert who believes raptors are much smarter than anyone had previously thought, and even believes the creatures are capable of speech (apparently, this guy has never heard an interview with Dell Curry). With funding for his research project running short, Grant reluctantly accepts a strange offer from a rich, thrill-seeking couple (William H. Macy, State and Main, and Téa Leoni, The Family Man) that wants to fly over Isla Sorna and have Mr. Dinosaur point things out to them.
Guess what? Things go horribly wrong. Members of the group are shed like so many layers of clothing (following the Brother Rule, of course) and, before long, JP3 starts with the running and the screaming and the, "Oh, God, it hurts." Anybody else tired of seeing characters picked off in reverse order of their popularity? In no way do I recognize Deep Blue Sea as an example of a good action film, but it was pretty damn surprising when Sammy Jackson got swallowed up by that shark. Don't look for any surprises here.
Grant, his assistant Billy (Alessandro Nivola, Time Code), and the Kirbys are repeatedly split up into various groups, creeping around the island like the Scooby gang before meeting one last time for what appears to be a Cape Fear spoof. Sure, they've got two new dinosaurs after them - the flying Pteranodon and swimming Spinosaurus - but we know everyone crucial to a possible Jurassic Park 4 will make it off the island with most of their limbs intact.
JP3 is so heavy on action that it didn't really need dialogue. Thankfully, Grant never utters typical sequel lines, such as anything that came out of Brendan Fraser's mouth in The Mummy Returns or Danny Glover's in any of the Lethal Weapon sequels. Give that credit to Alexander Payne and Jim Taylor (Election), who polished the script by debut scribe Peter Buchman.
JP3 was directed by October Sky's Joe Johnston, who is no stranger to high-tech films which feature giant creatures (he also helmed the animal-laden Jumanji). While the film is technically seamless and a great way to blow 90 minutes, its complete lack of story greatly diminishes the effects of JP3's amazing visuals. Maybe we're spoiled by the technology of the 21st century, but humans running away from dinosaurs isn't nearly as entertaining as it was in the '90s.
1:31 - PG-13 for intense sci-fi terror and violence
========== X-RAMR-ID: 28876 X-Language: en X-RT-ReviewID: 236552 X-RT-TitleID: 1108705 X-RT-SourceID: 595 X-RT-AuthorID: 1146
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


class CreatePersonActivity : AppCompatActivity
This activity provides the UI for adding a new person from the database, with a guided format. |
|
class EditPersonActivity : AppCompatActivity
This activity provides the UI for adding or editing a new person from the database. |
|
object PersonActivityCommons
Provides functionality common between "Person" creating/editing activities. |
|
class PersonAdapter : Adapter<ViewHolder>
A RecyclerView adapter for displaying people in a standard list layout. |
|
class PersonChildrenCreator : PersonCreatorSection |
|
interface PersonCreatorSection
Defines functions that all "person creator" classes must implement. |
|
class PersonDetailsCreator : PersonCreatorSection |
|
class PersonListActivity : NavigationDrawerActivity
Activity for displaying a list of people. |
|
class PersonMarriageCreator : PersonCreatorSection |
|
class ViewPersonActivity : AppCompatActivity
Activity for displaying the details of a person. |
typealias OnCreateNew = (dialogInterface: DialogInterface, which: Int) -> Unit |


|
C++ Actor Framework 0.19
|
Manages a collection of metric families. More...
#include <metric_registry.hpp>
Classes | |
| struct | span_type |
Forces the compiler to use the type span<const T> instead of trying to match parameters to a span . More... | |
Public Types | |
| template<class T > | |
| using | span_t = typename span_type< T >::type |
| Convenience alias to safe some typing. | |
Public Member Functions | |
| metric_registry (const actor_system_config &cfg) | |
| template<class ValueType = int64_t> | |
| metric_family_impl< gauge< ValueType > > * | gauge_family (std::string_view prefix, std::string_view name, span_t< std::string_view > labels, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a gauge metric family. | |
| template<class ValueType = int64_t> | |
| metric_family_impl< gauge< ValueType > > * | gauge_family (std::string_view prefix, std::string_view name, std::initializer_list< std::string_view > labels, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a gauge metric family. | |
| template<class ValueType = int64_t> | |
| metric_family_impl< gauge< ValueType > > * | gauge_family (std::string_view prefix, std::string_view name, span_t< label_view > labels, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a gauge metric family. | |
| template<class ValueType = int64_t> | |
| gauge< ValueType > * | gauge_instance (std::string_view prefix, std::string_view name, span_t< label_view > labels, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a gauge. | |
| template<class ValueType = int64_t> | |
| gauge< ValueType > * | gauge_instance (std::string_view prefix, std::string_view name, std::initializer_list< label_view > labels, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a gauge. | |
| template<class ValueType = int64_t> | |
| gauge< ValueType > * | gauge_singleton (std::string_view prefix, std::string_view name, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a gauge metric singleton, i.e., the single instance of a family without label dimensions. | |
| template<class ValueType = int64_t> | |
| metric_family_impl< counter< ValueType > > * | counter_family (std::string_view prefix, std::string_view name, span_t< std::string_view > labels, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a counter metric family. | |
| template<class ValueType = int64_t> | |
| metric_family_impl< counter< ValueType > > * | counter_family (std::string_view prefix, std::string_view name, std::initializer_list< std::string_view > labels, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a counter metric family. | |
| template<class ValueType = int64_t> | |
| counter< ValueType > * | counter_instance (std::string_view prefix, std::string_view name, span_t< label_view > labels, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a counter. | |
| template<class ValueType = int64_t> | |
| counter< ValueType > * | counter_instance (std::string_view prefix, std::string_view name, std::initializer_list< label_view > labels, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a counter. | |
| template<class ValueType = int64_t> | |
| counter< ValueType > * | counter_singleton (std::string_view prefix, std::string_view name, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a counter metric singleton, i.e., the single instance of a family without label dimensions. | |
| template<class ValueType = int64_t> | |
| metric_family_impl< histogram< ValueType > > * | histogram_family (std::string_view prefix, std::string_view name, span_t< std::string_view > label_names, span_t< ValueType > default_upper_bounds, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a histogram metric family. | |
| template<class ValueType = int64_t> | |
| metric_family_impl< histogram< ValueType > > * | histogram_family (std::string_view prefix, std::string_view name, std::initializer_list< std::string_view > label_names, span_t< ValueType > upper_bounds, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a gauge metric family. | |
| template<class ValueType = int64_t> | |
| histogram< ValueType > * | histogram_instance (std::string_view prefix, std::string_view name, span_t< label_view > labels, span_t< ValueType > upper_bounds, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a histogram. | |
| template<class ValueType = int64_t> | |
| histogram< ValueType > * | histogram_instance (std::string_view prefix, std::string_view name, std::initializer_list< label_view > labels, span_t< ValueType > upper_bounds, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| @copdoc histogram_instance | |
| template<class ValueType = int64_t> | |
| histogram< ValueType > * | histogram_singleton (std::string_view prefix, std::string_view name, span_t< ValueType > upper_bounds, std::string_view helptext, std::string_view unit="1", bool is_sum=false) |
| Returns a histogram metric singleton, i.e., the single instance of a family without label dimensions. | |
| void | config (const settings *ptr) |
| template<class Collector > | |
| void | collect (Collector &collector) const |
| void | merge (metric_registry &other) |
Takes ownership of all metric families in other . | |
Static Public Member Functions | |
| static metric_registry * | from (actor_system &sys) |
| Returns a pointer to the metric registry from the actor system. | |
Manages a collection of metric families.
| metric_family_impl< counter< ValueType > > * caf::telemetry::metric_registry::counter_family | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| span_t< std::string_view > | labels, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a counter metric family.
Creates the family lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| labels | Names for all label dimensions of the metric. |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
| metric_family_impl< counter< ValueType > > * caf::telemetry::metric_registry::counter_family | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| std::initializer_list< std::string_view > | labels, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a counter metric family.
Creates the family lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| labels | Names for all label dimensions of the metric. |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
| counter< ValueType > * caf::telemetry::metric_registry::counter_instance | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| span_t< label_view > | labels, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a counter.
Creates all objects lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| labels | Values for all label dimensions of the metric. |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
| counter< ValueType > * caf::telemetry::metric_registry::counter_instance | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| std::initializer_list< label_view > | labels, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a counter.
Creates all objects lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| labels | Values for all label dimensions of the metric. |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
| counter< ValueType > * caf::telemetry::metric_registry::counter_singleton | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a counter metric singleton, i.e., the single instance of a family without label dimensions.
Creates all objects lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
| metric_family_impl< gauge< ValueType > > * caf::telemetry::metric_registry::gauge_family | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| span_t< label_view > | labels, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a gauge metric family.
Creates the family lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| labels | Names for all label dimensions of the metric. |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
| metric_family_impl< gauge< ValueType > > * caf::telemetry::metric_registry::gauge_family | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| span_t< std::string_view > | labels, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a gauge metric family.
Creates the family lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| labels | Names for all label dimensions of the metric. |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
| metric_family_impl< gauge< ValueType > > * caf::telemetry::metric_registry::gauge_family | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| std::initializer_list< std::string_view > | labels, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a gauge metric family.
Creates the family lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| labels | Names for all label dimensions of the metric. |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
| gauge< ValueType > * caf::telemetry::metric_registry::gauge_instance | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| span_t< label_view > | labels, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a gauge.
Creates all objects lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| labels | Values for all label dimensions of the metric. |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
| gauge< ValueType > * caf::telemetry::metric_registry::gauge_instance | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| std::initializer_list< label_view > | labels, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a gauge.
Creates all objects lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| labels | Values for all label dimensions of the metric. |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
| gauge< ValueType > * caf::telemetry::metric_registry::gauge_singleton | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a gauge metric singleton, i.e., the single instance of a family without label dimensions.
Creates all objects lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
| metric_family_impl< histogram< ValueType > > * caf::telemetry::metric_registry::histogram_family | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| span_t< std::string_view > | label_names, | ||
| span_t< ValueType > | default_upper_bounds, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a histogram metric family.
Creates the family lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| label_names | Names for all label dimensions of the metric. |
| default_upper_bounds | Upper bounds for the metric buckets. |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
upper_bounds
. | metric_family_impl< histogram< ValueType > > * caf::telemetry::metric_registry::histogram_family | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| std::initializer_list< std::string_view > | label_names, | ||
| span_t< ValueType > | upper_bounds, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a gauge metric family.
Creates the family lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| labels | Names for all label dimensions of the metric. |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
| histogram< ValueType > * caf::telemetry::metric_registry::histogram_instance | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| span_t< label_view > | labels, | ||
| span_t< ValueType > | upper_bounds, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a histogram.
Creates the family lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| labels | Names for all label dimensions of the metric. |
| upper_bounds | Upper bounds for the metric buckets. |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such asbytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
upper_bounds
. | histogram< ValueType > * caf::telemetry::metric_registry::histogram_singleton | ( | std::string_view | prefix, |
| std::string_view | name, | ||
| span_t< ValueType > | upper_bounds, | ||
| std::string_view | helptext, | ||
| std::string_view | unit = "1" , |
||
| bool | is_sum = false |
||
| ) |
Returns a histogram metric singleton, i.e., the single instance of a family without label dimensions.
Creates all objects lazily if necessary, but fails if the full name already belongs to a different family.
| prefix | The prefix (namespace) this family belongs to. Usually the application or protocol name, e.g., http . The prefix caf as well as prefixes starting with an underscore are reserved. |
| name | The human-readable name of the metric, e.g., requests . |
| helptext | Short explanation of the metric. |
| unit | Unit of measurement. Please use base units such as bytes or seconds (prefer lowercase). The pseudo-unit 1 identifies dimensionless counts. |
| is_sum | Setting this to true indicates that this metric adds something up to a total, where only the total value is of interest. For example, the total number of HTTP requests. |
upper_bounds
. | void caf::telemetry::metric_registry::merge | ( | metric_registry & | other | ) |
Takes ownership of all metric families in other
.
other
must not contain any duplicated metric family


This syllabus is subject to change based on specific class needs, especially the schedule. Significant deviations will be discussed in class.
In this course, students will extend the Design Recipe ideas to explore the paradigm of Object-Oriented programming (OOP) using the Java programming language. As with all programming paradigms, OOP constitutes not just a set of tools for writing programs but a way of thinking and reasoning about the structure of programs and computations in general. The Object-Oriented paradigm draws on all the computing and programming concepts students studied in the introductory sequence.
In this course students will explore the Object-Oriented paradigm for programming. Just as the shift from Functional programming in Racket to Imperative programming in C++ required a change in perspective, so to will the shift to OOP in Java. Students will explore the conceptual foundations of OOP as well as modern OOP in Java.
There is no course textbook. The standard Oracle-provided Java reference and tutorial material will be heavily utilized, including:
We will also pull material from “How to Design Classes” by Felleisen et. al., available at http://www.ccs.neu.edu/home/matthias/HtDC/htdc.pdf. In addition, I will assign readings from a multitude of other internet sources. Links to these sources will be posted on this webpage as needed.
All programs written in this course are required to compile and run on a Linux computer with Java 8 and the Eclipse IDE. You will probably be okay with the recently-released Java 9, but the department server has Java JRE/JDK 8 installed (along with Eclipse). This software can be accessed via a VNC desktop session. While development is not required in this environment, failure to properly port a program to the required environment could result in a program not compiling correctly when it is being graded. All software for this course is available free of charge from Oracle and the Eclipse Foundation.
General expectations: In short, I expect you to be respectful of others and take responsibility for your own learning. You are here to learn, so work hard and be professional.
Just attending class is not sufficient to truly learn the material. Read the text, use the resources available at Monmouth College, and go beyond the material.
If you miss class, you are responsible for everything covered on that day. College is, in some sense, your job. Take pride in creating quality work. Staple your assignments, label problems, and present your answers neatly and orderly.
Your job is to convince me that you have learned the material – show your work! Even if you do not know a particular answer, guide me through your thought process.
Late assignments: In general, late assignments will not be accepted. Exceptions may be made only for situations beyond your control. If you feel your reason is justified, schedule a meeting with the instructor to plead your case.
Academic dishonesty: Monmouth College’s official policy on academic dishonesty can be found here. You are responsible for reading and complying with that policy.
In this course, any violation of the academic honesty policy will have varying consequences depending on the severity of the infraction as judged by the instructor. Minimally, a violation will result in an “F” or 0 points on the assignment in question. Additionally, the student’s course grade may be lowered by one letter grade. In severe cases, the student will be assigned a course grade of “F” and dismissed from the class. All cases of academic dishonesty must be reported to the Associate Dean who may decide to recommend further action to the Admissions and Academic Status Committee, including suspension or dismissal. It is assumed that students will educate themselves regarding what is considered to be academic dishonesty, so excuses or claims of ignorance will not mitigate the consequences of any violations
Collaboration: We encourage you to make use of the resources available to you – it is fine to seek help from a friend, tutor, instructor, internet, etc. However, copying of answers and any act worthy of the label of “cheating” is never permissible! It is understandable that when you work with a partner or a group that the resultant product is often extremely similar. This is acceptable but be prepared to be asked to defend your collaborations to the instructor. You should always be able to reproduce an answer on your own, and if you cannot you likely do not really know the material.
One way to collaborate effectively is to avoid taking careful notes during a collaboration session. Discuss the material and sketch out possible solutions on a whiteboard. When you have finished, take a break and then write up your solutions without any help from notes or pictures from the study session. This not only helps avoid violations of academic dishonesty, it also improves your retention of the material!
When assignments are meant to be done in groups, you will be directed to turn in one set of solutions per group. Otherwise, each student must turn in an assignment representing their own work.
Electronic devices: Do not use your phone or other devices in class except where necessary. Any computer or tablet usage should be related to the course. If a device is not being used for Zoom or Socrative it should be put away and turned on silent. Other usage is rude and distracting to others.
The course workload is as follows:
| Category | Number Of Assignments |
|---|---|
| Labs | 8–10 |
| Homework | 8–10 |
| Projects | 2 |
| Exams | 5–7 |
Homework assignments will always either precede a lab to prepare for it or follow a lab to complete it. There will be no dedicated midterm exam, but 7 exams spaced throughout the semester. Each exam will focus primarily, but not necessarily exclusively, on the material covered since the previous exam. The final exam will include a small number of cumulative questions, and I reserve the right to include at most one cumulative question on each of the other exams.
The weekly workload for this course will vary by student but on average should be about 13 hours per week. The follow tables provides a rough estimate of the distribution of this time over different course components for a 16 week semester.
| Category | Total Time | Time/Week (Hours) |
|---|---|---|
| Lectures+Labs | 4 | |
| Homework | 48 | 3 |
| Exam Study | 16 | 1 |
| Projects | 48 | 3 |
| Reading+Unstructured Study | 2 | |
| 13 |
Lab and homework assignments are graded on a simple 3 point scale. Grades are marked with, in decreasing order, a check-plus, check, or check-minus. Your final grade for these two assignment categories is then based off the respective averages and determined by the following chart. Notice this chart lists the minimum average needed to achieve a particular letter grade.
| Assignment Avg. (Min) | Letter Grade |
|---|---|
| 2.8 | A |
| 2.75 | A- |
| 2.5 | B+ |
| 2.25 | B |
| 2 | B- |
| 1.75 | C+ |
| 1.5 | C |
| 1 | C- |
| 0.75 | D |
| 0.5 | F |
Your final grade is based on a weighted average of particular assignment categories. You can estimate your current grade based on your scores and these weights. You may always visit the instructor outside of class to discuss your current standing.
| Category | Weight |
|---|---|
| Exams | 45% |
| Projects | 25% |
| Homework | 12.5% |
| Labs | 12.5% |
| Participation | 5% |
This courses uses a standard grading scale. Assignments and final grades will not be curved except in rare cases when its deemed necessary by the instructor. Percentage grades translate to letter grades as follows:
| Score | Grade |
|---|---|
| 94–100 | A |
| 90–93 | A- |
| 88–89 | B+ |
| 82–87 | B |
| 80–81 | B- |
| 78–79 | C+ |
| 72–77 | C |
| 70–71 | C- |
| 68–69 | D+ |
| 62–67 | D |
| 60–61 | D- |
| 0–59 | F |
You are always welcome to challenge a grade that you feel is unfair or calculated incorrectly. Mistakes made in your favor will never be corrected to lower your grade. Mistakes made not in your favor will be corrected. Basically, after the initial grading your score can only go up as the result of a challenge*.
The following tentative calendar should give you a feel for how work is distributed throughout the semester. Assignments and events are listed in the week they are due or when they occur. This calendar is subject to change based on the circumstances of the course.
| Date | Topic | Assignment |
|---|---|---|
| Mon 01/15 | Programming Environment | Read this |
| Wed 01/17 | Procedural Java | Lab 1 |
| Fri 01/19 | Basic Object-Oriented Programming | Read Java OO Tutorial |
| Mon 01/22 | Implementing Hierarchies, UML | |
| Wed 01/24 | Comparing Objects | Lab 2, Read this and this |
| Fri 01/26 | Containment Relationships, Class Extension | Read this |
| Mon 01/29 | Access Modifiers, Overriding | |
| Wed 01/31 | Containment vs. Extension | Lab 3 |
| Fri 02/02 | Lists, ADTs, and PDAs | Exam 1 out out |
| Mon 02/05 | Binary Trees | |
| Wed 02/07 | Static Factories | Lab 4, Read this |
| Fri 02/09 | Huffman Codes | |
| Mon 02/12 | Binary Search Trees | |
| Wed 02/14 | BST Delete | Lab 5 |
| Fri 02/16 | Priority Queues | Exam 1 due |
| Mon 02/19 | Binary Heaps | |
| Wed 02/21 | Implicit Trees; Generics | Lab 6, Read Java Generics Tutorial |
| Fri 02/23 | Conc Lists | Watch this (slides) |
| Mon 02/26 | Conc List Discussion and Review | |
| Wed 02/28 | (Exam 2) | Project 1 and lab out |
| Fri 03/02 | ||
| (03/05–03/09) | (Spring Break) | (Spring Break) |
| Mon 03/12 | JavaFX Basics, Property Binding | Read this |
| Wed 03/14 | Event-Driven Programming | Project 1 Free Lab |
| Fri 03/16 | Lambda Functions | |
| Mon 03/19 | (Project 1 questions) | |
| Wed 03/21 | Tic Tac Toe Design | Project 1 due, Lab 7 |
| Fri 03/23 | Tic Tac Toe with MVC | |
| Mon 03/26 | (Exam 3) | Exam 3 |
| Wed 03/28 | Lab 8 | |
| (03/30–04/02) | (Easter Break) | (Easter Break) |
| Wed 04/04 | Testing Controllers with Mock Objects | Lab 9 |
| Fri 04/06 | Test Harnesses; OO Design Principles | |
| Mon 04/09 | Software Patterns | |
| Wed 04/11 | Builder | Lab 10 |
| Fri 04/13 | Factory Method, Abstract Factory | |
| Mon 04/16 | Prototype, Singleton | |
| Wed 04/18 | Game of Life | Project 2 |
| Fri 04/20 | Structural Patterns, Adapter | Exam 4 |
| Mon 04/23 | Exam Review, Bridge | |
| Wed 04/25 | Composite, Decorator | |
| Fri 04/27 | Facade, Proxy, Comparison of Structural Patterns | Exam 5 due (part of project 2) |
| Mon 04/30 | Behavioral Patterns: Observer, Strategy, Visitor, Iterator | |
| Wed 05/02 | Criticism of OO, Review | Project 2 due, Practice Final, Solutions |
| Mon 05/07 8:00 AM | Final Exam |
The Teaching and Learning Center offers FREE resources to assist Monmouth College students with their academic success. Programs include Supplemental Instruction for difficult classes, Drop-In and appointment tutoring, and individual Academic Coaching. The TLC is here to help students excel academically. TLC services are not just for struggling students, but can assist all students to get better grades, practice stronger study skills, and manage time. The TLC is located on the 2nd floor of Poling Hall.
Disability Support Services: If you have a disability or had academic accommodations in high school or another college, you may be eligible for academic accommodations at Monmouth College under the Americans with Disabilities Act (ADA). Monmouth College is committed to equal educational access. Students with disabilities can apply for accommodations at the Teaching and Learning Center.