text:
TORONTO – A look at 11 executives, companies and business stories to watch in 2013:
Research In Motion and Thorsten Heins
The future of BlackBerry maker Research In Motion Ltd. (TSX:RIM) is riding on the launch of its new smartphones and the BlackBerry 10 operating system, set to debut on Jan. 30. RIM faces an uphill battle against the latest iPhone and Android-powered devices, including Samsung's Galaxy S3 and the HTC Droid. While the initial reports of the new BlackBerry system have been positive and the stock has more than doubled since hitting its lows of the year, the launch is widely considered a make-or-break for the company.
The fight for the Canadian shopping dollar is expected to intensify in 2013 as big U.S. discount retailer Target moves in and starts opening locations in March, luring shoppers with its cheap and chic merchandise. Canadian retailers such as Shoppers Drug Mart (TSX:SC), Hudson's Bay Co. (TSX:HBC), Canadian Tire (TSX:CTC.A) and Loblaw (TSX:L) have upped their game, but not since the arrival of Walmart have they seen such a competitor open up shop. The arrival of Target and the big red bull's eye follows the opening in Canada of stores by Ann Taylor, J.Crew, Kate Spade and Microsoft. And in 2014, high-end retailer Nordstrom is expected to start opening its first four stores in Canada.
CP Rail and Hunter Harrison
Chief executive Hunter Harrison was brought in to replace Fred Green in a bid to improve efficiency at Canadian Pacific Railway Ltd. (TSX:CP) after a bitter proxy fight. The cuts have already started with a plan to cut about 4,500 including 1,700 by the end of 2012, but those aren't the only changes going on at the railroad. The former CN chief executive is also looking to sell surplus real estate, the Delaware and Hudson line in the U.S. Northeast and is moving CP's head office in downtown Calgary to its Ogden Yard by 2014.
Investors will be watching BCE Inc. (TSX:BCE) and chief executive George Cope as they await the CRTC's decision on their revised plan to buy Astral Media Inc. (TSX:ACM.B). The federal broadcast regulator rejected an earlier proposal after a week of hearings in 2012 over concerns about the control the deal would give BCE over television broadcasting. Analysts have suggested that if the deal doesn't go ahead, BCE will have to look for other acquisitions to continue to grow its dividend, a view Cope has rejected.
Bank of Canada governor Mark Carney heads across the pond to take up the top job at the Bank of England. He has been widely lauded for his job at Canada's central bank during the financial crisis, but the former Goldman Sachs investment banker had it easier than most with a strong domestic banking sector here at home. The story isn't the same at the Bank of England and the job will be far more challenging as he takes over a central bank in a country faced with an uncertain economy.
Jana Partners LLC and management at fertilizer company Agrium Inc. (TSX:AGU) appear headed for a showdown as the U.S. investment fund looks to replace five directors of the company's 11-member board. Jana wants Agrium to spin off its retail business, which supplies products such as fertilizer to farmers, from the part of its business that makes those products, but chief executive Mike Wilson has shown no sign of backing down and remains committed to the current strategy. Both sides will vie for shareholder support ahead of a vote in 2013.
Air Canada and WestJet
Both Air Canada (TSX:AC.B) and WestJet Airlines (TSX:WJA) head into the new year with plans to launch new airlines and move beyond their traditional bases. Air Canada is aiming at grabbing a share of the holiday travel market with its new discount airline Rouge by offering flights to the Caribbean and Europe, while WestJet is launching its regional airline, called Encore. The Air Canada plan follows Tango and Zip, both earlier attempts at breaking into the discount business.
The battles over Enbridge Inc.'s (TSX:ENB) Northern Gateway and TransCanada Corp.'s (TSX:TRP) Keystone XL are expected to continue in 2013 as pipeline companies seeking approval to build new capacity out of the oilsands clash with those worried about the dangers associated with piping the thick bitumen and heavy oil found in Alberta. Kinder Morgan has also proposed to expand its TransMountain pipeline from Alberta to the Vancouver area, while Enbridge is looking at expanding some of its pipes in the Great Lakes region and reversing the flow of a pipeline that currently runs from Montreal to southern Ontario.
Housing Debt
The pace of home sales has slowed and many think a soft landing has been achieved as prices have held relatively firm, but not everyone agrees. Canadians are loaded with record levels of debt and are vulnerable to increases in interest rates or an economic shock. If U.S. lawmakers fail to reach a deal to avoid spending cuts and tax hikes and the fragile U.S. economy heads back into recession, Canada could be in trouble too.
Oilsands deals
With its decision to allow the takeover of Nexen (TSX:NXY) by China National Offshore Oil Co., Ottawa also all but slammed the door on any future takeover deals in the oilsands by state-owned enterprises. The deep pockets of so-called SOEs have been a source of cash for the industry as it develops its expensive projects, so new sources of funding will have to be found. A joint venture between Encana Corp. (TSX:ECA) and PetroChina subsidiary Phoenix Duvernay Gas may be a sign of things to come as the Chinese firm acquired a 49.9 per cent stake in the project.
SNC-Lavalin Group Inc. (TSX:SNC) named American Robert Card as its new chief executive in 2012 as it worked to try to put investigations into the company and millions in payments to undisclosed agents behind it. However, since then, former chief executive Pierre Duhaime has been charged with fraud along with another former top executive by Quebec's anti-corruption squad and investigations remain ongoing.


text:
Northern Italy Florence Venice Turin Adriatic Sea 1855 Flemming old antique mapBrian DiMambro -Historical Investments
(Northern Italy- Florence- Venice- Turin- Bologna- Mailand- Adriatic Sea)
Issued ca.1855, Glogau/ Leipsic by C. Flemming for Sohr & Berghaus
Fine and uncommon original old 19th century lithographed German map with original outline hand color.
Scarce folio sheet mid-19th century map.
A picture is worth a thousand words. The photos are a major part of the item description. Please examine them closely, as what you see is what we will send you.
[note: we grade conservatively and always seek to disclose any noteworthy flaws.].
Map remains well preserved, mostly light signs of age, light scattered age spotting as seen. Paper and map image remains overall clean & sound, map will look nice once displayed.
Old maps & prints often display small minor repairs on the back, could have uneven blank margins, might have extraneous fold-lines or other small minor age flaws which do not detract from the visual appeal or value. Condition is carefully considered in arriving at our price.
Great old vintage antique map entirely worthy of hanging for display.
A cartographic depiction captured in a manner entirely unique to this era.
Sheet measures c. 14 1/8" H x 17 1/8" W.
Printed area measures c. 12 7/8" H x 16 1/2" W
Espenhorst, Bibliographie der Handatlanten, 5.4
Tooleys Dictionary of Mapmakers , v. 2, p. 79

subset: commoncrawl


text: Enhance your food presentation with one of our modern serving pieces whether it's a family gathering or a large dinner party. Being a host doesn't have to be stressful when you have polished serving pieces such as the ones Cantoni offers. Find the tray or platter that suits you and your home. Choose a chic serving bowl to toss your homemade salad or a unique dish that serves chips and salsa. Additionally, you can pick from one of our many trays to serve drinkware or snacks. Whether you choose a basic piece that is a staple for your serving needs or a modern, unconventional tray, you can be sure your guests will be impressed by your presentation.


text:
When developing any medium to large-scale web application, you often get to the point where an action by a user can cause a number of different models to change on the client and the server.
You can try to keep updating both sides of a relation manually for every action, and individually call
save or
on each of the changed models to sync with the server, but that quickly turns into a tedious process and
results in multiple requests.
Using Backbone-relational, we can configure relationships between our models, and sync the model and all of its related models with a single
call to
getAsync or
after setting up a model's
Backbone-relational is hosted on GitHub, and is available under the MIT license.
Thanks to Progressive Planning for allowing me the time to work on Backbone-relational!
|Latest Release (0.10.0)
|~70kb. Full source, uncompressed, lots of comments.
|Edge Version
Backbone-relational depends on Backbone.js (>= 1.2.1), which itself requires Underscore.js (> 1.7.0) and jQuery (> 1.7.0) or Zepto.
Backbone-relational.js provides one-to-one, one-to-many and many-to-one relations
between models for Backbone. To use relations, extend Backbone.RelationalModel
(instead of a regular Backbone.Model) and define a
relations property, containing an array of option objects.
Each relation must define (at least) the
relatedModel. Available relation types are
Backbone.HasOne and
Backbone-relational's main features include:
createModelsoption, which is
trueby default).
You can also bind new events to a Backbone.RelationalModel for an:
Backbone-relational depends on Backbone.js (and thus on Underscore.js). Include Backbone-relational right after Backbone and Underscore:
<script type="text/javascript" src="./js/underscore.js"></script>
<script type="text/javascript" src="./js/backbone.js"></script>
<script type="text/javascript" src="./js/backbone-relational.js"></script>
Note for CoffeeScript users: due to the way the
extends keyword is implemented in
CoffeeScript, you may have to make an extra call to
setup for
your models. See the
setup documentation for details.
When using Backbone-relational, each model defining (or receiving)
relations must extend
Backbone.RelationalModel in order to function. Backbone.RelationalModel
introduces a couple of new methods, events and properties. It's important to know which are properties,
which are methods of an instance, and which operate on the type itself.
These three categories are detailed below.
Properties can be defined when extending Backbone.RelationalModel, or a subclass thereof.
Instance methods operate on an instance of a type.
Static methods operate on the type itself, as opposed to operating on model instances.
A Backbone.RelationalModel may contain an array of relation definitions. Each relation supports a number of
options, of which
key and
type are mandatory.
You'll also need to specifiy
relatedModel if you want to reference another model.
A relation could look like the following:
Zoo = Backbone.RelationalModel.extend({
relations: [{
type: Backbone.HasMany,
key: 'animals',
relatedModel: 'Animal',
collectionType: 'AnimalCollection',
reverseRelation: {
key: 'livesIn',
includeInJSON: 'id'
// 'relatedModel' is automatically set to 'Zoo'; the 'relationType' to 'HasOne'.
Animal = Backbone.RelationalModel.extend({
urlRoot: '/animal/'
AnimalCollection = Backbone.Collection.extend({
model: Animal
// We've now created a fully managed relation. When you add or remove model from `zoo.animals`,
// or update `animal.livesIn`, the other side of the relation will automatically be updated.
var artis = new Zoo( { name: 'Artis' } );
var lion = new Animal( { species: 'Lion', livesIn: artis } );
// `animals` in `artis` now contains `lion`
alert( artis.get( 'animals' ).pluck( 'species' ) );
var amersfoort = new Zoo( { name: 'Dierenpark Amersfoort', animals: [ lion ] } );
// `lion` now livesIn `amersfoort`, and `animals` in `artis` no longer contains `lion`
alert( lion.get( 'livesIn' ).get( 'name' ) + ', ' + artis.get( 'animals' ).length );
Required. A string that references an attribute name on
Required. A string that references a
Backbone.Relation type by name ("HasOne" or "HasMany"),
or a direct reference to a relation type.
You can model a one-to-one or a many-to-one relationship by declaring
type as the string "HasOne", or by
directly referencing
Backbone.HasOne. A HasOne relation contains a single
Backbone.RelationalModel. The default
reverseRelation.type for a "HasOne" relation is
"HasMany". This can be set to "HasOne" instead, to create a one-to-one relation.
You can model a one-to-many relationship by declaring
type as the string "HasMany", or by directly
Backbone.HasMany. A HasMany relation contains a Backbone.Collection,
containing zero or more Backbone.RelationalModels. The default
for a HasMany relation is HasOne; this is the only option here, since many-to-many is not supported directly.
It is possible to model a many-to-many relationship using two
relations, with a link model in between:
Person = Backbone.RelationalModel.extend({
relations: [{
type: 'HasMany',
key: 'jobs',
relatedModel: 'Job',
reverseRelation: {
key: 'person'
// A link object between 'Person' and 'Company'
Job = Backbone.RelationalModel.extend({
defaults: {
'startDate': null,
'endDate': null
Company = Backbone.RelationalModel.extend({
relations: [{
type: 'HasMany',
key: 'employees',
relatedModel: 'Job',
reverseRelation: {
key: 'company'
A boolean, a string referencing one of the model's attributes, or an array of strings referencing model
attributes. Default:
Determines how the contents of a relation will be serialized following a call to the
toJSON method. If you specify a:
Backbone.Model.prototype.idAttributeto include ids.
true will cascade, meaning the relations of nested model will get serialized as well,
until either a different value is found for
includeInJSON or we encounter a model that has already
been serialized.
A boolean or an object. Default:
If this property is set to
true, when a model is instantiated the related model is
automatically fetched using
getAsync. The
value of the property can also be an object. In that case the object is passed to
getAsync as the options parameter.
Note that
autoFetch operates independently from other `fetch` operations,
including those that may have fetched the current model.
var Shop = Backbone.RelationalModel.extend({
relations: [
type: Backbone.HasMany,
key: 'customers',
relatedModel: 'Customer',
autoFetch: true
type: Backbone.HasOne,
key: 'address',
relatedModel: 'Address',
autoFetch: {
success: function( model, response ) {
error: function( model, response ) {
A string that can be resolved to an object type on the global scope, or a reference to a Backbone.Collection type.
Determine the type of collections used for a HasMany relation. If you define a
url(models<Backbone.Model[]>) function on the specified collection, this enables
getAsync to fetch all missing models in one request,
instead of firing a separate request for each.
A string or a boolean. Default:
Used to create a back reference from the Backbone.Collection used for a HasMany relation to the model on
the other side of this relation. By default, the relation's key attribute will be used to create a reference to
the RelationalModel instance from the generated collection. If you set
collectionKey to a string,
it will use that string as the reference to the RelationalModel, rather than the
relation's key attribute. If you don't want this behavior at all, set
collectionKey to
(or any falsy value) and this reference will not be created.
An options hash, or a function that accepts an instance of a Backbone.RelationalModel and returns an options hash.
Used to provide options for the initialization of the collection in the 'Many'-end of a HasMany relation. Can be an options hash or a function that should take the instance in the 'One'-end of the 'HasMany' relation and return an options hash.
A boolean. Default:
Specifies whether models will be created from nested objects or not.
A string that references an attribute to deserialize data for
relatedModel from.
Used to override key when determining what data to use when (de)serializing a relation, since the data backing
your relations may use different naming conventions. For example, a Rails backend may provide the keys suffixed
_id or
_ids. The behavior for
keySource corresponds to the following rules:
When a relation is instantiated, the contents of the
keySource are used as its initial data. The
application uses the regular key attribute to interface with the relation and the models in it; the
keySource is not available as an attribute for the model. So you may be provided with data containing
animal_ids, while you want to access this relation as
Note that setting
keySource will set
to the same value, if it isn't specified itself.
This means that when saving zoo, the animals attribute will be serialized back into the
animal_ids key.
WARNING: when using a keySource, you should not use that attribute name for other purposes.
A string that references an attribute to serialize
relatedModel into.
Used to override key (and
keySource) when determining what attribute to be
written into when serializing a relation, since the server backing your relations may use different naming
conventions. For example, a Rails backend may expect the keys to be suffixed with _attributes for nested
When calling
toJSON on a model (either via
Backbone.Sync, or directly), the data in the key attribute is transformed and assigned to the
So you may want a relation to be serialized into the animals_attributes key, while you want to access this
relation as
zoo.get( 'animals' );.
WARNING: when using a
keyDestination, you should not use that attribute name for other purposes.
var FarmAnimal = Animal.extend();
// This `Farm` is confused, like legacy stuff can be. It wants its data back on a completely
// different key than it supplies it on. We want to use a different one in our app as well.
var Farm = Backbone.RelationalModel.extend({
relations: [{
type: Backbone.HasMany,
key: 'animals',
keySource: 'livestock',
keyDestination: 'pets',
relatedModel: FarmAnimal,
reverseRelation: {
key: 'farm',
includeInJSON: 'name'
// Create a `Farm`; parse `species`, add to `animals`, output goes to `pets`.
var farm = new Farm( { name: 'Old MacDonald', livestock: [ { species: 'Sheep' } ] } );
farm.get( 'animals' ).add( { species: 'Cow' } );
alert( JSON.stringify( farm.toJSON(), null, 4 ) );
A boolean. Default:
If you have a relation where the models should be parsed when data is being set, specify `parse: true`.
An object specifying the relation pointing back to this model from
If the relation should be bidirectional, specify the details for the reverse relation here. It's only mandatory
to supply a
relatedModel is automatically
set. The default
type for a
reverseRelation is HasMany for a
HasOne relation (which can be overridden to HasOne in order to create a one-to-one relation), and HasOne for a
HasMany relation. In this case, you cannot create a
reverseRelation with
type HasMany as well; please see Many-to-many relations on how to model these type of relations.
Note that if you define a relation (plus a reverseRelation) on a model, but don't actually create an instance
of that model, it is possible
initializeRelations will never get called, and the reverseRelation
will not be initialized. This can happen when
extend has been overridden, or redefined as in CoffeeScript.
See setup.
relationalModel.subModelTypes(attributes<object>, [options<object>])
An object. Default:
A mapping that defines what submodels exist for the model (the superModel) on which
subModelTypes is defined. The keys are used to match the
subModelTypeAttribute when deserializing, and the values
determine what type of submodel should be created for a key. When building model instances from data, we need to
determine what kind of object we're dealing with in order to create instances of the right subModel type. This
is done by finding the model for which the key is equal to the value of the
subModelTypeAttribute attribute on the passed in data.
Each subModel is considered to be a proper submodel of its superclass (the model type you're extending), with a shared id pool. This means that when looking for an object of the supermodel's type, objects of a submodel's type can be returned as well, as long as the id matches. In effect, any relations pointing to the supermodel will look for instances of its submodels as well.
Mammal = Animal.extend({
subModelTypes: {
'primate': 'Primate',
'carnivore': 'Carnivore'
Primate = Mammal.extend();
Carnivore = Mammal.extend();
MammalCollection = AnimalCollection.extend({
model: Mammal
// Create a collection that contains a 'Primate' and a 'Carnivore'.
var mammals = new MammalCollection([
{ id: 3, species: 'chimp', type: 'primate' },
{ id: 5, species: 'panther', type: 'carnivore' }
var chimp = mammals.get( 3 );
alert( 'chimp is an animal? ' + ( chimp instanceof Animal ) + '\n' +
'chimp is a carnivore? ' + ( chimp instanceof Carnivore ) + '\n' +
'chimp is a primate? ' + ( chimp instanceof Primate ) );
Suppose that we have an Mammal model and a Primate model extending Mammal. If we have a Primate object with id 3, this object will be returned when we have a relation pointing to a Mammal with id 3, as Primate is regarded a specific kind of Mammal; it's just a Mammal with possibly some primate-specific properties or methods.
Note that this means that there cannot be any overlap in ids between instances of Mammal and Primate, as the Primate with id 3 will be the Mammal with id 3.
A string. Default:
subModelTypeAttribute references an attribute on the data
used to instantiate
relatedModel. The attribute that will be checked to
determine the type of model that should be built when a raw object of attributes is set as the related value,
and if the
relatedModel has one or more submodels.
relationalModel.getAsync(attr<string>, [options<object>]
jQuery.Deferred A jQuery promise
Get an attribute's value asynchronously. If available, the local value will be returned.
attr is a relation and one or more of its models are not available, they will be fetched.
This can be used specifically for lazy-loading scenarios.
Only models are referenced in the attributes but have not been found/created yet are fetched.
options.refresh to true will fetch all model(s) from the server.
In that case, any model that already exists will be updated with the retrieved data.
options object specifies options to be passed to Backbone.Sync.
By default, a separate request will be fired for each model that is to be fetched from the server (if `key` references a collection).
However, if your server/API supports it, you can fetch the set of models in one request by specifying a
collectionType for the relation you call getAsync on. The
should have an overridden
method that allows it to construct a url for an array of models. See this example
or Backbone-tastypie for an example.
relationModel.getIdsToFetch(attr<string|Backbone.Relation>, [refresh<boolean>])
Array A list of the ids that will be fetched when calling
Backbone.Relation A single initialized relation on the model.
Backbone.Relation[] The set of initialized relations on the model.
set(key<string>, value, [options<object>]) or set(attributes<object>, [options<object>])
Backbone.RelationalModel The model instance.
set method is overridden so that setting a value on an "relational" attribute will update that relation.
This is especially important to keep in mind for
HasMany relations (which are backed by a
For these, calling
set can be thought of as being equivalent to calling
update on the collection itself,
including how the options are handled.
options for a
HasMany relation:
true. If true, models specified in the arguments but not yet present in the relation will be added to the relation.
true. If true, existing models will be updated with the given attributes.
true. If true, models present in the relation but not specified in the arguments will be removed.
Object The JSON representation of the model.
See Backbone.Model.toJSON.
The regular
toJSON function has been overridden and modified to serialize (nested) relations
according to their
keyDestination options.
Backbone.RelationalModel.constuctor The type.
Initialize the relations and submodels for the model type. Normally, this happens automatically, but it doesn't if
you're using CoffeeScript and using the syntax
class MyModel extends Backbone.RelationalModel instead of
the JavaScript equivalent of
MyModel = Backbone.RelationalModel.extend().
This has advantages in CoffeeScript, but it also means that
Backbone.Model.extend will not get called.
Instead, CoffeeScript generates piece of code that would normally achieve the same. However,
extend is also
the method that Backbone-relational overrides to set up relations as you're defining your
Backbone.RelationalModel subclass.
In this case, you should call
setup manually after defining your subclass CoffeeScript-style. For example:
Note: this is a static method. It operates on the model type itself, not on an instance of it.
class Animal extends Backbone.RelationalModel
urlRoot: "/animal"
class Mammal extends Animal
"primate": "Primate"
"carnivore": "Carnivore"
relations: [
# More relations
class Primate extends Mammal
class Carnivore extends Mammal
chimp = Mammal.build( { id: 3, species: "chimp", type: "primate" } )
relationalModel.build(attributes<object>, [options<object>])
Backbone.RelationalModel A model instance.
Create an instance of a model, taking into account what submodels have been defined.
Note: this is a static method. It operates on the model type itself, not on an instance.
relationalModel.findOrCreate(attributes<string|number|object>, [options<object>])
Backbone.RelationalModel A model instance.
Search for a model instance in the Backbone.Relational.store, and return the model if found.
A new model will be created if no model is found,
attributes is an object, and
options.create is
true. If true, a new model will be created if an instance matching
attributesisn't found in the store.
true. If true, a found model will be updated with
attributesis an
false. If true,
attributeswill be parsed first. Please note this will cause
Model.parseto be called as a function (
thiswill not point to a model), instead of as a method.
Note: this is a static method. It operates on the model type itself, not on an instance of it.
relationalModel.find(attributes<string|number|object>, [options<object>])
Backbone.RelationalModel A model instance.
A shortcut for
findOrCreate that uses
create: false.
Accepts the same options as
findOrCreate (except for
Note: this is a static method. It operates on the model type itself, not on an instance of it.
Backbone.RelationalModel A model instance.
A hook to override the matching when updating (or creating) a model.
The default implementation is to look up the model by id in the store:
return Backbone.Relational.store.find( this, attributes );
Custom behavior is useful in cases where (a collection of) nested data gets saved to the server. Consider saving the following model:
var zoo = new Zoo( { id: 1, name: 'Artis', animals: [
{ species: 'Giraffe' },
{ species: 'Camel' }
] } );
alert( JSON.stringify( zoo.toJSON(), null, 4 ) );
Normally, whatever you use as server-side logic will respond by creating two animals, and assigning them
an id. The response will be used by Backbone-relational to update existing models.
However, updating a model starts by looking up the local model with the same id; and in this case,
Backbone-relational does not know which local models corresponds to which created animal with an id.
A simple fix in this case would be to add a fallback option for the matching by using the animal's
species. Do note you'd want to use a more robust method usually, such as using a new model's
Zoo.findModel = function( attributes ) {
// Try to find an instance of 'this' model type in the store
var model = Backbone.Relational.store.find( this, attributes );
if ( !model && _.isObject( attributes ) ) {
var coll = Backbone.Relational.store.getCollection( this );
model = coll.find( function( m ) {
return m.species === attributes.species;
return model;
Note: this is a static method. It operates on the model type itself, not on an instance of it.
Backbone-relational makes a couple of additional events available to you, on top of the events already found in Backbone.
function(addedModel<Backbone.Model>, related<Backbone.Collection>)
function(removedModel<Backbone.Model>, related<Backbone.Collection>)
function(model<Backbone.Model>, related<Backbone.Model|Backbone.Collection>)
Each relation definition on a model is used to create in instance of a
Backbone.Relation; either
Backbone.HasOne or a
Defines a HasOne relation. When defining a reverseRelation, the default type will be HasMany. However, this can also be set to HasOne to define a one-to-one relation.
Defines a HasMany relation. When defining a reverseRelation, the type will be HasOne.
Backbone.Store is a global model cache. Per application, one instance is created (much like
which is accessible as
Add a namespace on which models and collections are defined. This is especially useful when working in an
environment without a shared global scope (like
window is in a browser), where you'll need to tell
store where your models are defined, so it can resolve them to create and maintain relations.
Remove a scope. This allows you to remove a scope you added previously, or to remove the default 'global'
scope (
window in the browser) scope to prevent Backbone-relational from resolving objects on it.
Reset the
store to its original state. This will disable relations for all models created up to this point,
remove added model scopes, and removed all internal store collections.
Unregister a single model or a collection. Unregistering a model will remove a model from any relations it's involved in. Internally, unregister is called when a model has been destroyed. It can also be called explicitly to on models you don't want Backbone-relational to consider for relations anymore, for example to free up models used as (temporary) search results.
A tutorial by antoviaque, and the accompanying git repository.
A basic working example to get you started:
var paul = new Person({
id: 'person-1',
name: 'Paul',
user: { id: 'user-1', login: 'dude', email: 'firstname.lastname@example.com' }
// A User object is automatically created from the JSON; so 'login' returns 'dude'.
var ourHouse = new House({
id: 'house-1',
location: 'in the middle of the street',
occupants: ['person-1', 'person-2', 'person-5']
// 'ourHouse.occupants' is turned into a Backbone.Collection of Persons.
// The first person in 'ourHouse.occupants' will point to 'paul'.
ourHouse.get('occupants').at(0); // === paul
// If a collection is created from a HasMany relation, it contains a reference
// back to the originator of the relation
ourHouse.get('occupants').livesIn; // === ourHouse
// The `occupants` relation on 'House' has been defined as a HasMany, with a reverse relation
// to `livesIn` on 'Person'. So, 'paul.livesIn' will automatically point back to 'ourHouse'.
paul.get('livesIn'); // === ourHouse
// You can control which relations get serialized to JSON, using the 'includeInJSON'
// property on a Relation. Also, each object will only get serialized once to prevent loops.
alert( JSON.stringify( paul.get('user').toJSON(), null, '\t' ) );
// Load occupants 'person-2' and 'person-5', which don't exist yet, from the server
ourHouse.getAsync( 'occupants' );
// Use the `add` and `remove` events to listen for additions/removals on a HasMany relation.
// Here, we listen for changes to `ourHouse.occupants`.
.on( 'add:occupants', function( model, coll ) {
console.log( 'add %o', model );
// Do something. Create a View?
.on( 'remove:occupants', function( model, coll ) {
console.log( 'remove %o', model );
// Do somehting. Destroy a View?
// Use the 'update' event to listen for changes on a HasOne relation (like 'Person.livesIn').
paul.on( 'change:livesIn', function( model, attr ) {
console.log( 'change `livesIn` to %o', attr );
// Modifying either side of a bi-directional relation updates the other side automatically.
// Take `paul` out or `ourHouse`; this triggers `remove:occupants` on `ourHouse`,
// and `change:livesIn` on `paul`
ourHouse.get( 'occupants' ).remove( paul );
alert( 'paul.livesIn=' + paul.get( 'livesIn' ) );
// Move into `theirHouse`; triggers 'add:occupants' on ourHouse, and 'change:livesIn' on paul
theirHouse = new House( { id: 'house-2' } );
paul.set( { 'livesIn': theirHouse } );
alert( 'theirHouse.occupants=' + theirHouse.get( 'occupants' ).pluck( 'name' ) );
This is achieved using the following relations and models:
House = Backbone.RelationalModel.extend({
// The 'relations' property, on the House's prototype. Initialized separately for each
// instance of House. Each relation must define (as a minimum) the 'type', 'key' and
// 'relatedModel'. Options include 'includeInJSON', 'createModels' and 'reverseRelation'.
relations: [
type: Backbone.HasMany, // Use the type, or the string 'HasOne' or 'HasMany'.
key: 'occupants',
relatedModel: 'Person',
includeInJSON: Backbone.Model.prototype.idAttribute,
collectionType: 'PersonCollection',
reverseRelation: {
key: 'livesIn'
Person = Backbone.RelationalModel.extend({
relations: [
{ // Create a (recursive) one-to-one relationship
type: Backbone.HasOne,
key: 'user',
relatedModel: 'User',
reverseRelation: {
type: Backbone.HasOne,
key: 'person'
initialize: function() {
// do whatever you want :)
PersonCollection = Backbone.Collection.extend({
url: function( models ) {
// Logic to create a url for the whole collection, or a set of models.
// See the tests, or Backbone-tastypie, for an example.
return '/person/' + ( models ? 'set/' + _.pluck( models, 'id' ).join(';') + '/' : '' );
User = Backbone.RelationalModel.extend();
84fae6cFix ordering problems in relations
0731ff3Backbone 1.2.1 compatible (add
getAsync(the successor of
fetchRelated) now return a single promise, instead of an array of request objects.
#467: Improve lazy loading implemenatation. Add
Backbone.RelationalModel, which always return a single promise that resolves with the attribute's content, and remove
#411: Don't add models without an id to the store.
#419: Proper return values for single models on collection methods for Backbone 1.1.0
4113c69`Backbone.Relational.store.unregister` now also accepts a collection or a model type
#427: Fix firing explicit change events
#215Add direct support for AMD, CommonJS, require, etc.
8371089: Change return types for
Collectionmethods to match Backbone 1.1.0
#376: Include ids of unregistered models (not fetched or otherwise) in
8371089: Add
#322: Remove
keySourceafter a
setas well.
#345: Add
find, a shortcut to
create: false
#345: Add lodash compatibility (doesn't have an explicit
#349: Event ordering: maintain the originally intended order when process gets called more than once.
#362: Add support for deep
#380: Fix
popon an empty collection.
relationscan now be a property or a function.
collectionTypecan now be defined as a function as well.
#191: if
includeInJSONis equal to the model's
idAttribute, "missing" models will be included in the JSON to avoid data loss.
#201: add
#273: improve merging of relations between super/subModels.
#295: check (and error on) duplicate ids when explicitly setting the
#320: use
merge: trueby default on
HasMany.onChangeto eliminate unnecessary events.
removeoptions on
Collection.addwhen working with RelationalModels. This also works when using
setto change the key on nested relations.
updateoption on
findOrCreatehas been renamed to
merge, since its behavior corresponds with
Collection.add(and not with
update:<key>event has been removed, in favor of handling everything using "standard"
findOrCreatenow takes a
parseoption, analogous to the Backbone.Model constructor. It defaults to
parseoption to relations.
autoFetchproperty for relations.
updateoption to
#180: no longer allow multiple instances of RelationalModels with the same type, and the same
keySourceoption added to relations.
keyDestinationoption added to relations.
collectionOptionsoption added to relations.
collectionKeyoptions added to relations.
set(with separate key, value arguments).
update<key>event added
Backbone.Collection._removeso relations update properly.
change<key>events, so they won't fire before relations are updated.
The original version of Backbone-relational! This already contained much of the basics:
HasOne and
relations (including
Backbone.RelationalModel and
Each Backbone.RelationalModel registers itself with Backbone.Relational.Store
upon creation, and is removed from the
store when destroyed. When creating or updating an
attribute that is a key in a relation, removed related objects are notified of their
removal, and new related objects are looked up in the Store.
Backbone-relational only allows the existence of one model instance for each model type
This check is there to enforce there will only be one version of a model with a certain id at any given time
(which is also the reason for the existence of Backbone.Relational.Store). This is necessary to enforce
consistency and integrity of relations.
If multiple versions were allowed, inadvertently manipulating or performing a save or destroy on another version of that model (which is still around on the client, and can for example still be bound to one or more views in your application, either on purpose or inadvertently) would save its state to the server, killing its relations, and the server response would set the same (incorrect) data on the 'current' version of the model on the client. By then, you'd be in trouble.
Therefore, Backbone-relational simply does not allow this situation to occur. This is much safer than
putting the burden on the developer to always make sure every older version of a model is completely
decoupled from every other part of your application.
It might be annoying to get an error every now and then, and sometimes inconvenient to have to use the
factory method
findOrCreate, but it's much better than subtle bugs that can lead to major data loss
later on in the life cycle of your application.
Most of Backbone's default events are queued by Backbone-relational. This can complicate debugging since it 'breaks' the call stack, but is a necessary part of the abstraction offered by it.
The event queuing kicks in every time (nested) relations need to be updated as the result of calling a
Backbone method that modifies a model's attributes: on creation, and on
unset, and
The basic problem is that when manipulating relations, you only want the events to fire once ALL relations
have been updated; also those on models one, two, or more relations away. For example, when you have an
event listener on
add, you want to be able to use the model you receive as the first argument
and its relations fully instead of getting raw JS objects:
var p = new Person( { id: 'p1', name: 'Larry Page' } );
p.on( 'add:jobs', function( job ) {
// Here, you want the correct person and company to be set on job, instead of plain js.
alert( job.get( 'person' ).get( 'name' ) + ' @ ' + job.get( 'company' ).get( 'name' ) );
p.get( 'jobs' ).add( { company: { name: 'Google' }, person: p.id } );
To achieve this, Backbone's events are prevented from firing immediately when
is called, but are delayed until the all (nested) relations have reached a stable state again. Events are
then fired at the first available opportunity; as soon as the last model updating its relations unblocks


text:
Five Red Flags That Signal a Used Car-Buying Scam
The big advantage to buying a used car from a private party, rather than a dealer, is you'll most likely save money on your purchase. The disadvantage is you could lose $1,000 or more in a car-buying scam.
While most used-car sales conducted by individuals are perfectly legitimate, there are used car-buying scams out there, and they are on the rise -- even for so-called local sales. This is because so much of the business has an online component. In fact, consumer complaints for car sales scams increased 25% last year, according to Internet Crime Complaint Center, a U.S. government agency.
Here are five tips to avoid a used car-buying scam if you are shopping for a used car locally and considering a private party sale.
Be wary of prices that seem too good to be true. Research a car on one of the many vehicle pricing sites, such as Edmunds.com, Kelley Blue Book or NADAGuides.com, to determine the private party price for that car. If you are seeing an ad for substantially less than typical private party values, there's a high probability it's a car-buying scam, no matter what sob story you are told.
Be wary of sales where the seller and the car are not in the same place. A common story told is of a military person stationed somewhere else or someone who recently relocated and needs to sell his or her car. While this can be legitimate, most people make these decisions about selling their car before they relocate. After all, think of the hassle involved. Buying a car is an expensive purchase. You want to be in a situation where you can inspect the used car in person and meet the car owner before any money changes hands, or you want to be using a reputable third party, such as eBay Motors, that has a buyer protection plan in place.
Be wary of any sellers who offer you protection plans. One way scammers are bilking unsuspecting buyers is by offering them a protection plan through a well-known third party. Many of the companies cited don't even offer buyer protection plans. Companies that do offer them only do so for cars sold through their websites. Some scammers are so savvy they've set up online chat functions to reassure the buyers the protection plan is secure, but this is simply an elaborate ruse. If a seller offers you a protection plan and the used car is not being sold through the company mentioned, then it is a used car-buying scam.
Be wary of any seller who switches gears in the middle of negotiations. Whether it's a change of story, sudden shifts in the terms of the sale or the request to move the transaction from one website to another, beware. All of these situations are common with scammers and rare with legitimate purchases. No matter how convincing the seller and how believable the change is, it's probably a scam -- so proceed with caution.
Be wary of any seller who asks for money upfront or wants to use a wire transfer service. Buying a used car locally is just like buying any other product. The money changes hands when the buyer can leave with the product. The only instance where a buyer should make any payments in advance of purchase is when the transaction started and ended via a well-known third party service that uses an escrow system for transactions. Sellers who request money in advance or those who want to use a wire transfer service are likely running a car-buying scam.
Car buyers who believe they've witnessed a scam, whether they've fallen victim or not, should report it to their local authorities and the Internet Crime Complaint Center if the scam has any Internet-based aspect.
Bankrate's content, including the guidance of its advice-and-expert columns and this website, is intended only to assist you with financial decisions. The content is broad in scope and does not consider your personal financial situation. Bankrate recommends that you seek the advice of advisers who are fully aware of your individual circumstances before making any final decisions or implementing any financial strategy. Please remember that your use of this website is governed by Bankrate's Terms of Use.


text:
Kabul / Vienna. 29 July 2011. Afghanistan remains by far the largest source of the global illicit trade in opium and heroin, which generated some US$ 68 billion in 2009 - a sum exceeding the GDP of many countries - according to the study Global Afghan Opium Trade: A Threat Assessment which was issued yesterday by the United Nations Office on Drugs and Crime (UNODC). Covering international flows of Afghan opiates in 2009, this is also the first in-depth study by UNODC of trafficking in acetic anhydride to Afghanistan (an indispensable 'precursor' chemical used for converting opium into heroin).
Spanning a decade, the report states that some 16.5 million people annually abuse opiates worldwide. Heroin takes the bulk of the market with 12 - 13 million people consuming 375 tons of heroin per year, and of that, a sizeable 150 tons are consumed in Europe.
Opiate consumption in Afghanistan and neighbouring countries has risen sharply in the past decade - 35,000 out of the current 123,000 hectares under poppy cultivation in Afghanistan are needed to produce opiates for this region alone. But the problem extends far beyond. Afghan heroin has also been spreading to consumer markets in East Asia traditionally supplied by Myanmar.
Another notable trend is the increase of heroin flows to Africa, which could re-emerge as a trafficking route to Europe, or lead to more drug consumption on that continent.
Afghanistan and precursor inflows
Acetic anhydride is a legal chemical commonly used in household and industrial products. However, since there is no recognized need for the substance in Afghanistan, the chemical is diverted from legal domestic markets in Europe and Asia and smuggled into the country. Some 38 tons of acetic anhydride were seized at heroin production sites in 2009, mostly in southern Afghanistan.
Seaports in the Islamic Republics of Iran and Pakistan have been seizing greater amounts of both exported heroin and imported acetic anhydride. With 300 to 500 laboratories producing an estimated 380 tons of heroin in 2009, Afghanistan continues to convert most of the world's opium into finished products - morphine and heroin.
The profits of crime
In 2009, UNODC estimates that 150 tons of Afghan heroin reached Europe, 120 tons Asia and 45 tons Africa. Law enforcement bodies seized 76 tons of heroin worldwide that year, with an interdiction rate of up to 16 per cent.
Transnational organized crime groups profited most from the US$ 68 billion trade in 2009, with Afghan farmers earning a relatively small share (US$ 440 million) of this total. Criminal and insurgent groups who benefit from the trade pose serious challenges to governance, security, stability and development in Afghanistan, its neighbouring countries and beyond. Drug traffickers exploit the deteriorating security situation in the southern provinces of Helmand, Kandahar and Nimroz, while corruption lubricates the industry nationwide.
Preeta Bannerjee, Public Information Officer: UNODC
T: (+43-1) 26060-5764 | M: (43-699) 1459-5764 | E: preeta.bannerjee(at)unodc.org


text:
Understanding your options may help you save more for retirement and lower taxes.
As a small-business owner, you're probably used to handling a lot of responsibility—everything from drawing up detailed business plans to creating a budget. So it should come as no surprise that funding your retirement will likely fall on your shoulders.
But what type of retirement plan is the right fit for your business? There are several types to choose from and the options can be confusing. For example, some small-business retirement plans are better for sole proprietors, while others may be more appropriate for businesses with up to 100 employees.
"Many small-business owners say they want to set up a 401(k) plan because that is the plan they are most familiar with," says Ken Hevert, senior vice president, retirement products, at Fidelity. "However, after reviewing their situation, small business owners often conclude that perhaps another plan type, such as a SEP IRA or a Self-Employed 401(k), may be more appropriate."
Basically, there are four types of retirement plans that small-business owners might consider:
- Simplified Employee Pension Plan (SEP IRA)
- Savings Incentive Match Plan for Employees (SIMPLE IRA)
- Self-Employed 401(k) plan
- 401(k) plan (better for larger companies given setup costs, administration, fiduciary responsibilities, etc.)
We will focus only on the first three, which are generally more suitable for very small businesses—typically, 10 employees or less. Each of these plans has different characteristics—such as the ability to cover employees, contribution limits, and administrative responsibility, to name a few. To choose the right plan for your business, you need to understand the nuances of these plans and match them to your priorities (e.g., higher contributions or simpler administration).
Understanding the differences in the plan types is an important exercise. If you have been operating a plan that doesn't match your business needs, you could be missing out on important tax benefits, or possibly making mistakes regarding employee contributions.
Why have a small-business retirement plan?
Here are three very compelling reasons:
- Your plan not only helps secure your future—it may be the primary way your employees can help secure theirs.
- Offering a plan helps make your business competitive when it comes to attracting and keeping good employees.
- There are potential tax benefits to offering a plan, because plan contributions for the business owner are deductible as a business expense.
Consider your options
Each of the three small-business retirement plans may offer certain tax advantages, including:
- Tax-deferred growth potential, which allows contributions to grow without being reduced by current taxes
- The potential to deduct employer contributions as a business expense
- A tax credit of up to $500 for certain expenses incurred while starting and maintaining the plan each of the first three years, if this is your first time offering a plan
But this is where the similarities end, particularly about whether the plans cover employees and, if so, who is responsible for making contributions.
- A SEP IRA is for self-employed people and small-business owners with any number of employees. Contributions are made by the employer only and are tax deductible as a business expense.
- A SIMPLE IRA is for businesses with 100 or fewer employees and is funded by tax-deductible employer contributions and pretax employee contributions [similar to a 401(k) plan].
- A Self-Employed 401(k) plan is a tax-deferred retirement plan for self-employed individuals that offers the most generous contribution limits of the three plans, but is suitable only for businesses with no "common law" employees, meaning any person working for the business who does not have an ownership interest.
Choosing the right plan takes careful consideration
"If you know what you are trying to accomplish with a retirement plan, it may be relatively straightforward to determine which plan is most appropriate for the business," Hevert says. "For example, is ease of administration an important consideration? Is it critical that employees be able to contribute to the plan? Knowing what you want and need ahead of time is a key component, because each plan has its advantages and disadvantages."
The chart below compares the three plans in detail.
Fidelity's small-business retirement plans at a glance
|Simple IRA
|Self-Employed 401(k)
|Who it's for
|Key advantages
|Who contributes
|Contribution limits
|Access to assets
Matching a retirement plan to your business
As you consider the specific features of each plan, it's important to remember that there are always trade-offs. Think very carefully about your priorities.
Here are some factors that may be helpful as you consider the right retirement plan for your business:
Covering employees
If you have no employees other than you and your spouse (or business partner) and want the highest possible contribution limits, consider a Self-Employed 401(k). If, however, additional employees are a possibility in the future, you may need to choose between a SEP IRA and a SIMPLE IRA, both of which can cover employees. Then it's a matter of deciding whether you want to fund your employees' accounts by yourself (SEP) or you want your employees to contribute (SIMPLE).
Contributions: how much and who pays?
Next, think about how much flexibility you want in terms of contribution limits and who is responsible for making such contributions.
A Self-Employed 401(k) plan offers the largest possible contributions because it recognizes that self-employed people wear two hats—as an employee and as an employer. In fact, as an employee, you can make elective deferrals of up to $18,000 for 2017. As an employer, you can make a profit-sharing contribution of up to 25% of compensation, up to a maximum of $54,000 for 2017. (Total contributions as employer and employee can not exceed $54,000 for 2017.) The plan also allows catch-up contributions of up to $6,000 for those who are age 50 or older in 2017. You are also eligible for added tax breaks. If your business is not incorporated, you can generally deduct contributions for yourself from your personal income. If your business is incorporated, the corporation can generally deduct the contributions as a business expense.
If you have a business with variable income and you want more flexibility, you might consider a SEP IRA. Just remember that, if you have employees in years you contribute, you have to contribute the same percentage for them as you contribute for yourself. As an employer, you can contribute up to 25% of compensation, up to a maximum of $54,000 in 2017. And you don't have to contribute every year.
On the other hand, if you want your employees to help fund their retirement account, you may want to consider a SIMPLE IRA, available to businesses with up to 100 employees. With a SIMPLE IRA, employees can make salary deferral contributions of up to 100% of compensation, not to exceed $12,500 in 2017. You, as the employer, must also contribute to their accounts—you can either match the employees' contributions dollar for dollar up to 3% of compensation (contributions can be reduced to as little as 1% in any two out of five years), or contribute 2% of each eligible employee's compensation. The SIMPLE IRA also allows employees age 50 or older to make catch-up contributions of up to $3,000 in 2017.
Time and money
The good news is that all three of these plans are relatively low cost and easy to administer. Neither the SEP IRA nor the SIMPLE IRA requires annual plan filings with the IRS, just certain employee notifications. The Self-Employed 401(k) plan involves a little more effort, requiring an annual Form 5500 filing once plan assets exceed $250,000. To make the most of this retirement savings opportunity—both for yourself and your employees—make sure it's the right plan for your small business before you set one up.


text:
Public Program Calendar
Events Calendar
Intro to Snowshoeing
Saturday, February 22, 2020, 10:00am - 12:00pm
Hits : 399
Learn the basics of snowshoeing and enjoy a winter walk through the woods. No experience necessary – we provide the equipment and teach you everything you need to know. Register early to reserve a pair of snowshoes & guarantee a spot.
$10 Adult/ $5 Child


text:
Aqualung with special guest Kim Taylor will perform through the Hope College Concert Series on Thursday, March 1, at 8 p.m. at the Knickerbocker Theatre in downtown Holland.
Tickets are $15 for the general public and $5 for those with a Hope College ID, and are available at the ticket office in the main lobby of the DeVos Fieldhouse.
British musician Matt Hales established Aqualung in 2002 to give a name to the music that he was writing, performing, singing and producing. His four albums include "Aqualung," "Still Life," "Strange and Beautiful," and the forthcoming "Memory Man," being released on March 13.
The ticket office is open weekdays from 10 a.m. to 5 p.m. and can be called at (616) 395-7890.
The DeVos Fieldhouse is located at 222 Fairbanks Ave., between Ninth and 11th streets. The Knickerbocker Theatre is located at 86 E. Eighth St.
The doors will open at 7:30 p.m. the night of the concert.


text:
Get an overview of all the shows The Fleet has to offer.
View All Showtimes
Permanent Exhibitions
The Fleet has multiple exhibitions on permanent display.
By Ally Browne, Marketing Intern
For a limited time, the Tinkering Studio has expanded into the main gallery, giving tinkerers both young and old a chance to let their inner inventor out with fun new projects. Along with the extra space, the studio also has extended hours, always open whenever the Fleet is open, with both unfacilitated and facilitated activities.
The Fleet's Tinkering Studio, a place where tinkerers of all ages can create, explore and experiment, has expanded to include the Tinkerers' Club!


text:
Okay, you got the wrapping paper off the new tablet hotness, fired it up and now cannot put it down. But what should you be doing in the New Year to properly feed, protect, and care for your newly found addiction? Well here are some of the basics – things that are easy to do
Okay, you got the wrapping paper off the new tablet hotness, fired it up and now cannot put it down. But what should you be doing in the New Year to properly feed, protect, and care for your newly found addiction? Well here are some of the basics – things that are easy to do now and may prevent a lot of pain later.
#1: Install the latest updates: As my colleague Aryeh Goretsky pointed out on a recent podcast, due to the supply chain behind the scenes, your "new" tablet was manufactured months ago and has taken a long rambling journey to reach the place where it was purchased. This means you'll probably need to install patches and updates, even if it's brand new to you. Be sure to patch using the native update utility for the device, but also pay attention to software like Java and Flash, which provide their own update path, outside of the regular operating system updates. Java has been the target of recent exploits because it tend to placed on the back burner update-wise, and exploits have bitten many users.
#2: Protect it from loss: Tablets are mobile by definition so keep in mind it's very easy for thieves to swipe them at a moment's notice if they're left sitting in the top of a bag or on a table at a coffee shop while you pick up your latte. Tablets are likely to be a popular target for turning into quick cash through resale on the Internet or other channels. At the same time they can hold lots of personal data that you'd rather not share with others. So you might want to look into various tracking options using 3G and/or GPS features found on many tablets, enabling a remote locking and/or "phone home" setup that lets you freeze a thief out of the device and possibly help locate it so you can it back.
#3: Automate your backups: The last thing you want after spending a half year collecting e-books, addresses, documents and music, is to have to start over. Many tablet offerings have a cloud-based backup that can be scheduled so you don't have to think of it, it just happens. This is a convenient way to go – if you trust the cloud as a place to store your personal data. For those who want something more private, there are apps for automating backups over your home network to a hard drive you can see, touch, and securely store. You may even be able to back up your data to a Micro SDHC card in the tablet (be sure to remove and store it in a safe location when done with your backup, though). Backups are like eating veggies, we all know we should do more, but it may not be the most exciting thing to think about. Just find something that works for you. It doesn't have to be perfect, but if it safely protects your data without you thinking about it much, you'll be very, very thankful later if something bad happens.
#4: Think before you install: With the bewildering number of apps available for modern tablets, the tendency to flood your tablet with apps can be seductive. Don't give in. We all remember the first computer we owned, where we installed everything, clicked on everything, and then had to re-format and start over a few months later as things slowed to a crawl. Less is more on your tablets. Also, keep in mind your tablet has much of the full operating system power and sophistication of the average computer a few years ago. That means scammers are eyeing the tablets for all sorts of nasty schemes. The more apps you have, the more potential for holes that allow intruders access. Just be careful. Also, install from the official app source for your tablet and resist the urge to install from third-party websites that tend to be patrolled less rigorously for rogue applications.
#5: Social Networking: If you use your tablet for social networking or email it won't be long before the device contains a lot of valuable credentials. To prevent someone abusing those credentials, some networks, such as Facebook, provide a system for notifying you if someone tries to access your account from an unrecognized device. It makes sense to enable this type of feature and in Facebook you do so via your Account Settings, choosing Security, then clicking on Login Approvals. Check where it says: "Require me to enter a security code each time an unrecognized computer or device tries to access my account." Also enable Login Notifications. Now you will get the chance to register each of your computers or mobile devices with Facebook the first time you connect from them. You register them using a code that Facebook sends via SMS to your cell phone. You can deregister devices whenever you like and check on which devices are logged into Facebook at any time.
#6: Security software: As noted above in #4, there is small-but-growing amount malicious software for tablets. Some tablet vendors, screen software for malicious behavior before allowing it into their stores, while others allow you to directly install software. Even for the former, it is always possible that a malicious app will slip through the screening process. Many antimalware vendors, including ESET, now offer versions of their security software which run on tablet operating systems like Google Android.
Follow these steps and you'll have far less to worry about in the future as you invest time and effort putting content on your tablet device. Adopting sensible practices right away will give you peace-of-mind using your tablet now, and help you stay safe online for a long time to come.


text:
The free agent/trade talk throughout the offseason has been focused on what the quarterback market will look like once the lockout is lifted. We've ignored looking at many other positions.
Today, I want to look at guards, because just wait until you see some of the dollar figures that could drive this market.
First, there weren't enough quality guards available in the draft to affect the potential free-agent market. The top selection, Baylor's Danny Watkins, went 23rd overall to the Eagles. After Watkins, though, the next guard didn't come off the board until pick No. 75, when the Seahawks selected John Moffitt from Wisconsin. A total of 12 guards were drafted this year, but the reality is teams in search of a starter are looking ahead to free agency.
Veteran Robert Gallery turned down a deal to stay with the Oakland Raiders before the lockout to take his chances in free agency. It was probably a good business decision, but things will change quickly if players with four and five years of experience are declared free agents pending the outcome of the new CBA. The quality of four- and five-year players is excellent: Justin Blalock and Harvey Dahl of the Falcons would enter the market, as well as Davin Joseph (Tampa Bay), Deuce Lutui (Arizona), Daryn Colledge (Green Bay) and Marshal Yanda (Baltimore).
Teams looking for a guard will love this list, but they might not like the type of money it will take to land those players.
The evolution of the salary structure at the guard position is interesting. When the franchise tag was established in 1993, the offensive line wasn't sub-divided among positions like the defensive line. On defense there was a difference between tackles and ends, but on offense the franchise tag had an umbrella over left tackles, right tackles, guards, and centers. Consequently, guard salaries were inflated because of the contracts given to left tackles.
The top five offensive linemen salaries all belong to left tackles: Jason Peters (Philadelphia), Jake Long (Miami), D'Brickashaw Ferguson (N.Y. Jets), Marcus McNeill (San Diego) and Jordan Gross (Carolina). However, when the Patriots franchised guard Logan Mankins, he received the average of those five tackles. A franchise tag might not exist in a reformed free-agent system, but the damage has been done for the teams who want to go after any of the guards mentioned above.
It's clear why teams didn't tag these potential free-agent guards when they had the chance to a few months ago. They know that agents will want to work off the top five guard contracts already in the books, which, as you can see, are quite lucrative.
Not all of the potential free agents will get deals like those, but a few will. The next tier will then work off these deals to secure something very good and not far off these numbers. Get ready to see a few guards sign seven-year deals with $10-15 million in signing bonuses and a four-year average salary close to $8 million.
How ready will teams be to participate in the guard market when free agency starts? If a team or two are ready to go, those who hesitate will be out of the market within the first few days.
Like I've said before, teams will have to make tough free-agent decisions in a short period of time.


text: Back Stress Can Pack on Pounds Some people respond to impending deadlines, financial problems, relationship meltdowns, and other difficulties by eating less. But if you respond to added stress by eating more, you could end up with added pounds. Fortunately, you can take steps to avoid stress-related weight gain. To begin, consider which of the following behaviors you're prone to, and then take steps to counteract your usual behavior. Behavior: You don't have time to prepare healthy meals. If having a lot to do means less time to shop for fresh fruits and vegetables and other healthy ingredients, you may be more likely to grab fast food or order high-calorie, high-fat takeout meals. Instead: Make simple meals with few ingredients to cut cooking time and shopping lists. Invest in a cookbook with easy-to-prepare recipes or look online for recipes that can be prepared in 20 minutes or less. Behavior: You crave foods high in refined carbs (bread, cookies, cakes), sugar, fat, or salt. Many people hunger for sweets, salty snacks, and other processed foods when they're stressed. Instead: Reach for healthy high-fiber snacks with a bit of the tastes you crave. For example: oatmeal with raisins and a bit of brown sugar for sweet cravings; whole-wheat toast with peanut butter for fat cravings; and light microwave popcorn for salty cravings. Behavior: You don't have time to exercise. As the demands on your schedule increase, time to exercise may be hard to find. Yet research has shown regular exercise plays a significant role in weight maintenance. Many people can't lose weight or maintain a healthy weight without it. Instead: Accept the fact that physical activity is essential for weight loss. Also, since it leads to the release of endorphins—compounds that have natural stress-fighting properties—remind yourself that you can't afford to miss working out when you're stressed. Then, look for ways to increase your physical activity—by taking the stairs or parking at the far end of the parking lot, for example. Behavior: You're not doing anything to manage your stress. You may not be able to control the stressors in your life, but you can control how you respond to them. Instead: Be proactive by learning and practicing relaxation techniques, such as deep breathing, yoga, or visualization. Address your stress by working on solving your problems, calling a friend for advice, talking with your boss about your workload or challenges, or seeking help from a mental health professional who specializes in stress solutions.


text:
- 1/2 cup Il Boschetto Extra Virgin Olive Oil Infused with Pesto Herbs, plus 2 tablespoons
- 2 medium onions, chopped
- 2 pounds pork shoulder, cut into 1-inch cubes
- 3/4 cup tomato paste
- 1 1/2 cups basic tomato sauce, recipe follows
- 3 cups hot chicken stock, plus more for thinning the sauce
- Salt
- 12 cups water
- 6 cups Arborio rice
- 2 eggs, lightly beaten
- 1 1/2 cups freshly grated caciocavallo, plus extra for garnish
- 1 teaspoon freshly grated nutmeg
- Freshly ground black pepper
- 1 pound penne pasta
- 1 stick unsalted butter
- 1 cup Pecorno Romano
- 1/3 cup fresh chopped parsley leaves
- Pinch hot red pepper flakes
- 2 cups fresh bread crumbs, plus extra for topping
Basic tomato sauce:
- 1/4 cup Il Boschetto Extra Virgin Olive Oil Infused with Pesto Herbs
- 1 Spanish onion, chopped in 1/4-inch dice
- 4 garlic cloves, peeled and thinly sliced
- 3 tablespoons chopped fresh thyme leaves, or 1 tablespoon dried
- 1/2 medium carrot, finely shredded
- 2 (28-ounce) cans peeled whole tomatoes, crushed by hand and juices reserved
- Salt
- In a 12 to 14-inch saucepan, combine 1/2 cup of olive oil, and onions. Cook until soft. Season the pork with salt and pepper and add to onions. Cook until deep brown. Add tomato paste, tomato sauce, and chicken stock. Bring the mixture to a boil over high heat, stirring well to combine. Season, to taste, with salt. Turn the heat to low and let simmer until the meat becomes very tender, about 1 hour to 1 hour 30 minutes, stirring every 15 minutes. If the sauce becomes too thick, add some extra chicken stock or water. Throughout the cooking process, the meat should always be just covered in sauce.
- In the meantime, bring 12 cups of water to a boil in a saucepan, and add 1/2 teaspoon of salt. Add the rice and cook, stirring occasionally, over medium-high heat, covered, until the rice is al dente, about 25 minutes. Drain the rice and place it in a large, shallow bowl. Allow the rice to cool for at least 30 minutes.
When the meat sauce is done and the rice is cool, stir the beaten eggs into the rice. Mix well to combine. Stir 3/4 of the meat ragu, 1/2 cup freshly grated cheese, and the nutmeg into the rice. Season the mixture, to taste, with salt and pepper. Mix again to combine and then set the mixture aside.
- Bring 6 quarts of water to a boil and add 2 tablespoons salt. Add the penne, and cook the pasta according to the package directions, until al dente. While the pasta cooks, melt 6 tablespoons of butter in a small saucepan. Remove from the heat. Drain the pasta, reserving 1 cup of the cooking liquid.
- Place the drained pasta in a bowl. Add 1 cup of the meat ragu, 1 cup pecorino, the melted butter, the hot pepper flakes, and 1/2 cup of the bread crumbs. Season the mixture, to taste, with salt and pepper and stir well to combine.
Preheat the oven to 375 degrees F.
- Generously butter the sides and bottom of a round 12 to 14-inch baking dish with 4-inch sides. Add 3/4 cup bread crumbs to the dish, turning and rotating the dish so that the bread crumbs coat all of the sides.
- Spoon 1/3 of the rice into the dish, spreading the to form an even layer across the bottom of the dish. Top the rice with 1/2 of the pasta. Use a wooden spoon to gently smooth the pasta so that it to forms an even layer across the top. Spoon 1/2 of the ragu over the pasta. Top with another layer of rice (1/2 of what remains), followed by the remaining pasta, then the remaining ragu. Cover the ragu with the remaining rice, and use a wooden spoon to smooth the rice across the top so that it forms an even layer. Sprinkle the top of the rice with remaining 1/4 cup of bread crumbs and sprinkle the remaining 2 tablespoons of oil and caciocavallo atop the bread crumbs. Bake until golden brown, about 30 minutes. Remove the timbale from the oven and allow to cool 10 minutes.
- To unmold the timbale, run the blade of a thin knife around the inside edge of the pan separate any sticking ingredients. Place a round serving plate, one that is 6 inches larger than the baking pan over the timbale. Being careful to keep the platter in contact with the baking dish, and not allowing the dish to slip on the platter, invert the baking dish over the platter. Gently remove the baking dish, leaving the timbale on the platter. If the timbale does not slide out easily, don't tug or try to force it out. Instead, wipe the bottom and the sides of the baking dish with a hot kitchen towel. If necessary, carefully shake the platter and dish in unison, being careful not to separate one from the other. The timbale should now release easily when the dish is lifted. Allow the timbale to rest 10 minutes before serving. The dish can be simply served as is, with a big serving spoon or cut into wedges, topped with remaining ragu, more cheese and chili flakes.
Basic tomato sauce:
In a 3-quart saucepan, heat the olive oil over medium heat. Add the onion and garlic and cook until soft and light golden brown, about 8 to 10 minutes. Add the thyme and carrot and cook 5 minutes more, until the carrot is quite soft. Add the tomatoes and juice and bring to a boil, stirring often. Lower the heat and simmer for 30 minutes until as thick as hot cereal. Season with salt and serve. This sauce holds 1 week in the refrigerator or up to 6 months in the freezer.
This recipe inspired by Mario Batali.


text:
This past Saturday, a friend and I hit the Wired NextFest down at Chicago's Navy Pier. The event promised visitors that they could "experience the future," and as a tech writer I couldn't pass that opportunity up. I kind of wish I had, though, because after spending a few hours at the NextFest I'm sad to report that the future ain't what it used to be. Maybe I was expecting to relive my first visit to Epcot Center as a child, or maybe I'm just jaded in my old age. Whatever the cause, my trip to the future was more educational than inspirational. Here are ten things I learned about the future at the Wired NextFest, in no particular order.
1. The people of the future are a scantily clad people. They delight in showing off their naked, tattooed flesh. Or, maybe that's just the people of Chicago's Navy Pier in the summer.
2. In the future, the airport security checkpoint will look and function exactly the same way as does now, except that the scanning technology that powers it will be different. For instance, at the GE-manufactured checkpoint that I saw, the machine supposedly sniffs you for bomb residue.
Interestingly enough, there was a long line of people waiting to go through that checkpoint and be checked for bomb residue, which is something that just baffled me. I mean, don't people dread going through the checkpoint at airport security? Why voluntarily stand in line in order to pass through an airport security scanner if you don't have to? It's not like the machine did anything other than flash a little green light saying you were free of bomb residue. Truly, the long line of people who just couldn't wait to go through that security checkpoint was probably the most bizarre thing that I saw at the entire NextFest. I wonder if it was a kind of programmed reaction like, "oh look, a security checkpoint. I'd better get in that line and go through it. Everybody else is." If that's the way we've all been conditioned, then I fear for the future of the Republic.
3. The elderly Japanese people of the future will be so desperately lonely for companionship that they'll purchase slightly creepy android replicas of the drug-addled but brilliant sci-fi author Phillip K. Dick. Why the Japanese, and why Phillip K. Dick? It's a long story, and I'm not sure I fully understood it all when the android's makers explained it to me. I think I probably read the wrong books growing up as a kid, or maybe I now watch the wrong TV shows.
I tried to convince the PKD android guys that if they were going to be in the business of making robotic replicas of famous, drugged-out writers, they should also consider offering a Hunter S. Thompson model. That way, at least the Japanese would have a choice of companions. I know if I were Japanese, I'd collect both models and watch them fight over a half gram of mescaline.
On a more serious note, I think the PKD robot would've been a lot cooler and significantly less creepy if they'd have glued his hair on, instead of leaving the wires in the top of his head exposed. But hey, PKD was an odd guy, and maybe he would've wanted it that way.
4. Speaking of the elderly, the senior citizens of the future won't roll around in wheelchairsnot even cool robotic wheelchairs like those invented by Dean Kamen. Instead, they'll have robotic exoskeletons that will make them much stronger and faster than the non-elderly. So in addition to being the largest voting block in future elections, they'll also have superhuman strength and speed. If I were a politician, I'd make sure that the elderly of the future get great healthcare coverage, and I wouldn't even think about doing anything to reduce their social security benefits. You do not want to incur the wrath of our robotically enhanced, geriatric overlords (or their Phillip K. Dick android companions).
5. In the future, most robots will look pretty much like the robots of the future have looked since at least the 1970's. About the only difference is that any antennae attached to a 1970's future robot were spiral shaped and had a tiny ball on the tip. The current thinking is that future robots will have straight antennae with no ball, and maybe a plastic coating instead of just bare wire.
6. Apple's market share doesn't change much in the future. Out of all the computers I saw at the NextFest, only one was a Mac. Sorry Steve, but the people of the future are still using Windows. At least you can gloat that they're all still running Windows 2000. From what I saw, Windows XP never really catches on in the future, and Longhorn is nowhere to be seen at all. I did see a flying car though, and maybe it was running the embedded version of Longhorn.
7. On the weekends, the people of the future will take to the water in dolphin-shaped craft that don't look nearly as much fun to drive as a Seadoo of today. Hey, the future isn't always better than the present. Sometimes we have to settle for less. The good news is that the robotic dolphin is too small to accommodate a human who's equipped with an exoskeleton, which means that if you're being pursued by a senior citizen then you can use the dolphin to escape.
8. Dolphin watercraft aren't the only form of future transportation that's a bit cramped. The electrically powered cars of the future will be quite small. In fact, when I first laid eyes on the tiny DaimlerChrysler two-seaters that GE was exhibiting, I asked the exhibitor if the cars were perhaps meant to be attached to the sides of a larger SUV, in case you run out of gas.
9. Future entertainment will follow the trends that were established with the rise of disco. First, they replaced the live band with a DJ. Next, they'll replace the DJ with a large, floor-mounted robotic arm. Also, the robo-DJs will have numbers instead of names; I asked the exhibitor lady about this. Honestly, it's not even as cool as it sounds. It's also not one of those "you had to be there" things, because I was there and, meh. Vinyl aficionados can rejoice, though, because vinyl records are still around.
10. In a future 9/11-style scenario, where the top of a high-rise building is on fire, a Moller Aircar will rescue the building's inhabitants one at a time. At least, that's how it will be if Moller's combination CGI and live action promotional video is to be believed. I guess future high-rises will house only a handful of highly productive office workers, because you can't save that many people in a two-seater aircar. Or, it may be the case that in the video I saw, only the CEO was saved. The rest of the employees were either burned alive or, more likely, were safe at their desks in Bangladesh.


text:
If you process a variety of deep breathing tactics a lot and so are now getting excited about being an teacher, it is now time you have to select the meditating house examine classes. In the end, you possibly will not have the time remaining for you to get a normal instruction using a expert instructor for months and even several weeks. You possess agreements in your family and function. You are searching out for wherein could help you keep a balance between every little thing. Therefore, you will be pleased to realize that your home review courses for deep breathing are also available on the internet. If you have your personal computer with Internet connection, it is possible to take on these classes without compromising with your entire obligations.
Just What Is The Fee?
An average coaching program to get a deep breathing professional within a brick-and-mortar instruction heart in the metropolis like New York costs a fortune. You definitely do not want to endure this hardship. The good thing for you personally is the fact that meditation home examine lessons that are offered online cost nothing. Nonetheless, there are still some programs that ask you for a particular volume like a payment, although the amount is not some thing you are unable to spend, it really is quite nominal.
Is An On-line Course Your Best Option?
After it is about undertaking a residence research study course for deep breathing, the web based courses are not your best option. You can even decide to go for many different remote understanding classes and correspondence courses. You may be pleased to understand that even well-known colleges have finally began supplying meditation home research classes through their on the internet and distant training process.
Vital Attributes Of An Excellent Deep breathing Home Study Course
There are several selections accessible to you in relation to picking the best program for you personally. You may have to be aware of each of the factors so as to make an educated determination. For example, it is crucial for you to understand that a meditation home study course for yoga and fitness instructors must make up of at least two hundred examine hrs. In just about every this kind of training school, the number of so many review hrs may be the minimal requirement. You need to have got a shut look into the training course information. Make certain that the training course you possess picked for you personally consists of Pranayama, meditating, asanas, kriyas, doshas, bandhas, mudras, charkas, the delicate physique, physiology, anatomy, contraindications, changes, and even more. Now, you will see for yourself that this huge training course content of a good meditation property review training course can not be taught in less than 200 hrs. Be sure that you be happy with practically nothing reduced than those two simple standards. What exactly is much more, video education should also be a part of the study course this too in DVD format.
Total, we are able to observe that by picking to consider a relaxation home examine training course, you do not only conserve a lot of money, however you also save time and effort to suit your needs you will probably have to invest in commuting out of your home towards the coaching heart. For those who have been an individual of yoga exercise before, the education program for the deep breathing teacher will certainly be a smooth process for you personally.
Inspired by: ezinearticles


text:
Will Whitfoot
|Will Whitfoot
|"Will Whitfoot" by Storn Cook
|Biographical Information
|Other names
|Mayor of Michel Delving
|Michel Delving
|Physical Description
|Images of Will Whitfoot
Will Whitfoot was the Mayor of Michel Delving during the War of the Ring.
Whitfoot was elected Mayor at the Free Fair late in the Third Age, at least as late as S.R. 1413.[note 1]
He was renowned as being the fattest hobbit in the Westfarthing, and was affectionately referred to as "Flourdumpling" after he emerged from the collapse of the Town Hole covered in chalk. Peregrin Took later caused a great deal of laughter at the Prancing Pony when he related that incident to the Bree-folk.[1]
He was one of the first victims of the new rule of Lotho Sackville-Baggins and Sharkey. He went to protest against Lotho's felling of trees, but was apprehended by Ruffians on his way to Bag End. He was locked up in the Lockholes, and Lotho usurped his title.[2] He was freed after the Battle of Bywater, but was at first unfit for duty as Mayor, so Frodo Baggins served as Deputy Mayor.[3] He was officially restored as Mayor on the next Free Fair, on Midyear's Day of S.R. 1420.[4]
Will Whitfoot resigned in S.R. 1427, and was succeeded by Samwise Gamgee.[4]
The name "Whitfoot" is derived from "White foot".[5]
Portrayal in adaptations[edit]
|Will Whitfood in adaptations
2007: The Lord of the Rings Online:
- Mayor Will Whitfoot can be found in the centre of Michel Delving. He provides several early quests to Hobbit characters and is also involved in several seasonal festivals.
- ↑ The date is not given by Tolkien, but is suggested as possible by Robert Foster. Since the Free Fair is septennial, Will must have been Mayor since the last Fair before T.A. 3020 (3020-7=3013). However, as we are not told that was his first term, it's possible that he might already been serving since T.A. 3006 or even earlier. See Robert Foster, The Complete Guide to Middle-earth, p. 428, entry "Will Whitfoot".
- ↑ J.R.R. Tolkien, The Lord of the Rings, The Fellowship of the Ring, "At the Sign of the Prancing Pony"
- ↑ J.R.R. Tolkien, The Lord of the Rings, The Return of the King, "The Scouring of the Shire"
- ↑ J.R.R. Tolkien, The Lord of the Rings, The Return of the King, "The Grey Havens"
- ↑ 4.0 4.1 J.R.R. Tolkien, The Lord of the Rings, Appendix B, "Later Events Concerning the Members of the Fellowship of the Ring"
- ↑ J.R.R. Tolkien, "Nomenclature of The Lord of the Rings" in Wayne G. Hammond and Christina Scull (eds), The Lord of the Rings: A Reader's Companion
|Will Whitfoot
|Preceded by:
|Mayor of Michel Delving
by S.R. 1413 - S.R. 1427
|Followed by:
Samwise Gamgee


text:
This article is more than 1 year old
Osborne to SAVE ECONOMY with help from Media 2.0 websluts
Open data mashups, that's exactly what UK needs
Analysis Since the Tories came to power courtesy of a Coalition deal with the Lib Dems in May 2010, two words continue to be bounced around the walls of Whitehall: open and transparency.
Later today, Chancellor of the Exchequer George Osborne will detail his painful plans to grow Britain's deflated economy. His autumn statement to the House of Commons follows on from an OECD report on Monday that said it expected UK output to continue to fall in the final three months of this year and the first quarter of 2012, prompting fears of a double-dip recession.
Number 11's occupant will doubtless want to be drowning out concerns expressed by the economy's worrywarts. And what better way to do that, the argument from within the Cabinet Office goes at least, than to open up some more datasets to British citizens.
Apparently Blighty is about to become the open data centre of the world and citizens in their frayed trousers and greying shirts should be upstanding and proud.
The chancellor will reveal the latest chapter in this, er, success story that plants the Silicon Roundabout in the middle of the government's Media2.0Websluts-will-save-us-all-parade by promising to make travel easier, healthcare better and to bring about jobs growth. How will all this happen, you might wonder? Why, by opening up more public sector data, of course.
Here's a quick rundown of what The Register understands taxpayers should expect to hear from Osborne at lunchtime today.
Code, boy, as if your life depended on
it the Met Office
Investment in medical research and in digital technology is incoming and, as Prime Minister David Cameron made clear earlier this month, the government is placing large bets on Silicon Roundabout, which means Downing Street eventually wants to see East London produce a Skype or even an Apple.
What this appears to boil down to is a startup developing apps that make use of those lovely datasets that Osborne is about to set "free".
Who knows, the Silicon Roundabout could yet give birth to a company that Microsoft might eventually want to buy. Or, more ambitiously, the very same "tech hub" could debut a fondleslab powerhouse of which none other than Steve Jobs RIP would be envious.
Data from the Met Office and the Land Registry, it's hoped, will lead the way.
In essence, some of our data is being offloaded to the private sector to help boost the frankly dire economy. Osborne's mantra actually appears to be: "There's an app for that".
It might be argued that the chancellor is being deadly strategic with his plans. Medical research could be improved via this method, courtesy of what the Cabinet Office is describing as a "world-first data service".
There are also plans to improve business logistics and commuting by introducing realtime monitoring of trains and buses on almost every road in the UK.
All well and good, perhaps. But an internet veteran is required to do a lot of the hand-holding with the 600 or so hairdressers, bars and actual startups that now occupy the Silicon Roundabout.
It would seem those same outfits won't be getting their hands on the very grown up healthcare datasets to be released by the government, which we are assured contain "detailed" yet "anonymised information on patients".
For now, Osborne and co wants Tech City - as Whitehall prefers to call it - to concentrate on the weather, house prices and transport to help kickstart the economy. Some of that data will be released under free licence terms, while others will need to be unlocked by developers who first agree to the "conditions" laid out in the Open Government Licence under commercial re-use.
Stay tuned. We'll have more for you later today. ®


text:
Even the most wacked-out nutjob has to learn how to be a lunatic, and always has. In the Middle Ages, he would have known to grow a beard, head to a cave, and play the hermit. During the Industrial Revolution, he would have known to say that all those new gears and levers were messing with his mind.
And now, in the early-21st century, he learns that being crazy involves dyeing your hair Joker-red and committing mass murder. In the debate around last weekend's shootings in Aurora, which took place at the premiere of the new Batman film, it's easy to feel torn between the notion that violent movies breed actual violence, and the idea that James Holmes, the 24-year-old man police have accused of the crime, is just a madman whose actions speak only for themselves. But there's a more credible position that includes both views: that Holmes went mad, and that the art and culture around him shaped the kind of lunatic he turned out to be. (Forget legal or medical definitions of insanity: anyone who does horrible damage to dozens of strangers, for no credible reason, is, in common parlance, nuts.) Movies don't make us go insanely violent, but if you're going to lose control anyway, they provide a model for how to go about it—a model for just how bad and mad today's crazy person is supposed to be.
"In the United States, people hallucinate about the CIA, and in other places, about the gods…There's a strong cultural shaping to aberrant behavior," says Laurence Kirmayer, the editor of a journal called Transcultural Psychiatry, which is also the name of his scientific discipline. Reached at his office at McGill University, where his field got its start, Kirmayer tells me about the "amok" madmen, specific to 19th-century Malaysia, who, possessed by a spirit, reacted to a blow to their ego by going on a homicidal rampage, in an illness that mostly disappeared along with the traditional culture that bred it.
And he tells me about how 19th-century Europe, with its new mobility, saw a surge in lunatic travelers who would walk hundreds of miles then lose all memory of having taken the trip—a condition that's now rare. People go crazy all around the globe, often according to certain general patterns: They suffer from rigid ideas they can't be talked out of. They hear voices or feel controlled from outside. They believe they're being conspired against. But what those ideas are, what the voices say, and who's doing the controlling is "going to be fed by the specific culture around you," says Kirmayer.
A sick person's inchoate feelings of resentment and persecution and alienation get some kind of coherence when they fit into a ready-made storyline—like the violent story of heroes and antiheroes told in the Batman movies. It would hardly be surprising for an underdog whose mind was already in some kind of chaotic state to have a fascination with the Joker, "a cultural antihero who brings chaos," Kirmayer says. (Holmes apparently told police that's who he was.) And if you have a sense that you might be going mad, there could hardly be a more compelling model for how to do it than the Joker, whom Heath Ledger so convincingly portrayed as the ultimate homicidal maniac. To have the effect I'm arguing for, Ledger's Joker doesn't have to be an accurate depiction of real mental illness. (In fact, the mentally ill are rarely more violent than anyone else.) The Joker just has to come off as credibly, impressively, archetypally mad—as the latest role model for all other vicious madmen.
There's new evidence for how movies and madness can interact. Ian Gold, a philosopher at McGill, and his brother, Joel, a psychiatrist at New York University, have just published a scientific paper that presents what's being called the "Truman Show delusion." It describes how some psychiatric patients have started to claim that every moment in their lives is being secretly taped, then broadcast to the outside world—just, some of them say, as happened to Truman Burbank, the character played by Jim Carey in the 1999 film. The Golds aren't claiming that the movie caused the mental illness in the patients they're discussing, any more than I'm claiming that the Batman franchise made Holmes become violent. But once someone's mind starts to go, the culture around him or her "shapes the manifestations," as Ian Gold told me—it gets patients to think of their troubles in terms of Truman's, or to act out by raising cain in an extravagant, Joker-like way.
Gold says we know that our social environment can help trigger mental illness in the first place. The simple fact of being raised in a city, for instance, increases your chances of going psychotic. The details of a sufferer's symptoms also will be shaped by the world that he's in: "Something about the local culture makes some delusions more likely than others," says Gold, citing what's known as the "pathoplasticity" of mental disorders.
The philosopher Ian Hacking, who did research on the 19th-century's amnesiac travelers, talks in terms of "an ecological niche for certain kinds of mental illness." You see a spate of mad trips at just that moment in European history when the culture at large is obsessed with vagabonds on its roads and with Jews fleeing pogroms—but also with the new, desirable travels of cross-country cycling clubs. Today, we may be seeing a surge in crazy mass murders (the columnist David Brooks has made a case for the increase) because we've made violent mass murder a major cultural theme—thanks partly to movies like Batman, which seem to be getting more and more violent, and madder and madder, with each iteration.
Kirmayer talks about a "habituation curve" we've climbed onto, and how it is forcing movies to become ever more chaotic and violent, to feed us the same adrenaline rush. My wife, an artist who never watches action movies, reacted with utter shock and misery at the absurdly violent scenes in the latest Batman film, while I could just about tolerate them.
But as I left the theater, which was being guarded by two cops, in case someone else decided to follow the Aurora script for how to go mad, I did have a creeping feeling that its violence had done me some kind of vague psychic harm. The little corners of irrationality that all of us have, the uncontrolled moments when we daydream and space out, seemed full of imagery that wasn't good for me and might be worse for someone else—the way you might feel a little queasy after eating a bad oyster that could do real damage to someone with a weak immune system.
I'm not suggesting we should censor Hollywood. But the industry's producers and directors, and we consumers of their goods, could decide to do without the kinds of art that may have helped Holmes go madder than he needed to, and that maybe keep the rest of us a tiny bit off-kilter. This is something we collectively have utter control over: we can have a different culture just by making it so, and change ourselves and our kids in the process. Holmes could have felt the urge to punch out a few strangers on a street corner, instead of casting himself as a supervillain.