Context Managers are one of the core language features that make Python unique. The with
statement allows developers to write a common programming pattern in a concise and readable way. The following indented block gives a visual cue and make understanding the code easier. Understanding Context Managers is key to understanding the idea of Pythonic code.
Context Managers are usually used for allocation and releasing of resources, but that is not their only use-case. They are useful for factoring out common setup and teardown code, or any pair of operations that need to be performed before or after a procedure.
In this article, I will present some interesting real-world examples of their use, and hopefully encourage budding Pythonistas to explore them.
Context Managers in summary
In simple terms, Context Managers make writing try-finally blocks easier.
# In Python, code with common setup and teardown:
setup()
try:
do_work()
finally:
teardown()
# can be translated roughly to:
cm = ContextManager()
obj = cm.__enter__()
try:
do_work(obj) # use obj as needed (see examples below)
finally:
cm.__exit__()
# this can be written more succinctly using the `with` statement:
with ContextManager() as obj:
do_work()
The expression following the with
keyword should return an object that follows the Context Manager protocol. This can be a class instantiation or a function call that returns the Context Manager object.
The object returned must follow the Context Manager protocol which specifies two special methods, __enter__
and __exit__
.
Some important points to remember are:
__enter__
should return an object that is assigned to the variable afteras
. By default it isNone
, and is optional. A common pattern is to returnself
and keep the functionality required within the same class.__exit__
is called on the original Context Manager object, not the object returned by__enter__
.- If an error is raised in
__init__
or__enter__
then the code block is never executed and__exit__
is not called. - Once the code block is entered,
__exit__
is always called, even if an exception is raised in the code block. - If
__exit__
returnsTrue
, the exception is suppressed.
class CManager(object):
def __init__(self):
print '__init__'
def __enter__(self):
print '__enter__'
return self
def __exit__(self, type, value, traceback):
print '__exit__:', type, value
return True # Suppress this exception
def __del__(self):
print '__del__', self
with CManager() as c:
print 'doing something with c:', c
raise RuntimeError()
print 'finished doing something'
print 'done something'
"""
# outputs:
__init__
__enter__
doing something with c: <__main__.CManager object at 0x103fd8ed0>
__exit__: <type 'exceptions.RuntimeError'>
done something
"""
Simple context managers can also be written using Generators and the contextmanager
decorator:
from contextlib import contextmanager
@contextmanager
def context_manager_func():
setup()
# yield must be wrapped in try/finally
# to trap any exceptions raised in the calling code
try:
yield
finally:
teardown()
Reliable destructors
Context Managers give us a reliable method to clean up resources. Unlike other OO languages like C++ and Java, the Python destructor method __del__
is not always guaranteed to be called. It is only called when the reference count to the object reaches zero. This might happen at the end of the current function, or at the end of the program, or never in case of circular references.
Up until Python 3.4, if all objects in a reference cycle have __del__
method, Python would not call it, and garbage collect the objects.  The order in which they are call is undefined though.
Let’s look at a few examples of Context Managers in the real world. Experienced Python developers would have seen many of these examples, but maybe some of them are new.
Making sure an open stream is closed at the end
The open()
function is is the canonical example of context managers. It provides an open file handle which will be closed at the end of the block.
with open(path, mode) as f:
f.read()
StringIO
objects behave in the same way:
with io.StringIO() as b:
b.write(‘foo’)
The closing
context manager calls close()
on any object if the method exists.
from contextlib import closing
with closing(urllib.urlopen('http://google.com')) as page:
page.readlines()
Making sure an exception is raised in testing
In unittest (2.7+):
def test_split(self):
with self.assertRaises(TypeError):
'hello world'.split(2)
with self.assertRaisesRegexp(TypeError, 'expected a string.*object$'):
'hello world'.split(2)
E.g. in Pytest
with pytest.raises(ValueError):
int('hello')
Setting up mocks before testing
with mock.patch('a.b'):
call()
mock.patch
is an example of a context manager that can also be used as a decorator. Python 3 comes with a utility ContextDecorator that makes it easy to write such context manager-decorators.
When used as a decorator, mock.patch
passes the newly created mock object (return value of __enter__
) into the decorated function. ContextDecorator in Python 3, on the other hand, does not give you access to the return value of __enter__
method.
Synchronising access to shared resources
with threading.RLock():
access_resource()
The with statement in this case, calls lock.acquire()
at entry and lock.release()
on exit.
Locks are types of Reentrant context managers which allow you to re-enter the same context manager many times and also reuse it.
In the threading
module, Lock, RLock, Condition, Semaphore, BoundedSemaphore can be used as context managers.
A similar idea can be used for locking files while accessing them. For e.g. the pidfile context manager uses fcntl.flock()
to obtain a file lock on a daemon pidfile.
import fcntl, csv, sys
class open_locked:
def __init__(self, *args, **kwargs):
self.fd = open(*args, **kwargs)
def __enter__(self):
fcntl.flock(self.fd, fcntl.LOCK_EX)
return self.fd.__enter__()
def __exit__(self, type, value, traceback):
fcntl.flock(self.fd, fcntl.LOCK_UN)
return self.fd.__exit__()
with open_locked('data.csv', 'w') as outf:
writer = csv.writer(outf)
writer.writerows(someiterable)
Setting up the Python execution environment
with decimal.localcontext() as ctx:
# setup high precision operations within this thread
ctx.prec = 42
math_operations()
Managing database connections and transactions
conn = sqlite3.connect(':memory:')
with conn:
# start a new db transaction
conn.execute('create table mytable (id int primary key, name char(50))')
conn.execute('insert into mytable(id) values (?)', (1, 'avni'))
# if there was an error, table would not be created in database
# as whole transaction is rolled back
...
# conn.commit() called.
Wrapping remote connections over a protocol:
class SomeProtocol:
def __init__(self, host, port):
self.host, self.port = host, port
def __enter__(self):
self._client = socket()
self._client.connect((self.host, self.port))
return self
def __exit__(self, exception, value, traceback):
self._client.close()
def send(self, payload): ...
def receive(self): ...
with SomeProtocol(host, port) as protocol:
protocol.send(['get', signal])
result = protocol.receive()
Timing the execution of a code block
import time
class Timer:
def __init__(self, name):
self.name = name
def __enter__(self):
self.start = time.time()
def __exit__(self, *args):
self.end = time.time()
self.interval = self.end - self.start
print("%s took: %0.3f seconds" % (self.name, self.interval))
return False
>>> with Timer('fetching google homepage'):
... conn = httplib.HTTPConnection('google.com')
... conn.request('GET', '/')
...
fetching google homepage took: 0.047 seconds
Automating remote server tasks using Fabric
Fabric provides many interesting context managers to help automate deployment and other local and remote tasks.
# In Python 2.7+ multilple context managers can be combined using commas
# In Python 2.6, `contextlib.nested` can be used for the same purpose
with cd('/path/to/app'), prefix('workon myvenv'):
run('./manage.py syncdb')
run('./manage.py loaddata myfixture')
Create and use a temporary file and delete at the end
import tempfile
with tempfile.NamedTemporaryFile() as tf:
print('Writing to tempfile:', tf.name)
tf.write('Some data')
tf.flush()
# By default the temporary file created is deleted when file is closed
# Pass `delete=False` to NamedTemporaryFile to disable auto-delete.
Redirecting input and output streams
In Python 3.4+, the redirect_stdout
and redirect_stderr
context manager can be used to temporarily redirect stdout
and stderr
streams.
with open('output.txt', 'w') as f:
with redirect_stdout(f):
print('Hello World!')
redirect_stdout
only redirects stdout calls from Python, but not from C library code. See this blog post by Eli Bendersky on how to redirect all streams.
Reading and writing to a file in-place
See this example by Martijn Pieters of a context manager that allow you to update the same file while reading it line-by-line.
import csv
with inplace(csvfilename, 'rb') as (infh, outfh):
reader = csv.reader(infh)
writer = csv.writer(outfh)
for row in reader:
row += ['new', 'columns']
writer.writerow(row)
Managing a pool of processes
Python’s multiprocessing
library provides a bunch of context managers to manage connections, pools and OS-level resource locks.
from multiprocessing import Pool
def f(x):
return x*x
with Pool(processes=4) as pool: # start 4 worker processes
# evaluate "f(10)" asynchronously in a single process
result = pool.apply_async(f, (10,))
print(result.get(timeout=1))
# prints "100"
print(pool.map(f, range(10)))
# prints "[0, 1, 4,..., 81]"
Summary
So in short, Context Managers can be used in a great variety of cases. Start using them now whenever you see the “setup-teardown” pattern, to write your Python code in a more Pythonic way.
In future posts, we will explore Decorators and Metaclasses through examples of use as well.


Our worl class Al is here to ensure your
products arrive safely using our
advanced autonomous technology.
By pairing robots with humans, Kiwi is
able to beat traditional courriers with
faster delivery times.
We believe in starting small, moving faster, and thinking bigger.
We believe in delivering good flavors, good experiences, good times.
We are building the autonomous delivery infrastructure of tomorrow.


CellReplace(), CellLock(), CellLockGetRef(), CellDirty(), CellGetDBItem(), CellGetExtent()
The basic cell routines are simple to use. One argument taken by all of them is the address of the
CellFunctionParameters
structure. As noted, this structure must be locked or fixed in memory for the duration of a function call. You can also access cells in any of the ways you would access a DB item; for example, you can resize a cell with
DBReAlloc()
.
All of the routines use the VM file handle specified in the
CellFunctionParameters
structure.
To create, replace, or free a cell, call the routine
CellReplace()
. This routine takes five arguments:
CellFunctionParameters
structure.
If the cell file already contains a cell with the specified coordinates,
CellReplace()
will free it.
CellReplace()
will then allocate a new cell and copy the specified data into it. The routine invalidates any existing pointers to ungrouped DB items in the file.
Once you have created a cell, you can lock it with
CellLock()
. This routine takes three arguments: the address of the
CellFunctionParameters
structure, the cell's row, and the cell's column. It locks the cell and returns its address (the assembly version returns the cell's segment address and chunk handle). Remember, the cell is an ungrouped DB item, so its address may change the next time another ungrouped DB item is allocated or resized, even if the cell is locked.
Like all DB items, cells can (under certain circumstances) be moved even while locked. For this reason, a special locking routine is provided, namely
CellLockGetRef()
. This routine is just like
CellLock()
except that it takes one additional argument, namely the address of an optr.
CellLockGetRef
writes the locked item's global memory handle and chunk handle into the optr.
You can translate an optr to a cell into a pointer by calling
CellDeref()
; this is another synonym for
LMemDeref()
, and is identical to it in all respects.
If you change a cell, you must mark it dirty to insure that it will be updated on the disk.
To do this, call the routine
CellDirty()
. This routine takes two arguments, namely the address of the
CellFunctionParameters
structure and the address of the (locked) cell. The routine marks the cell's item block as dirty.
Sometimes you may need to get the DB handles for a cell. For example, you may want to use a DB utility to resize the cell; to do this, you need to know its handles.
For these situations, call the routine
CellGetDBItem()
. The routine takes three arguments: the address of the
CellFunctionParameters
structure, the cell's row, and the cell's column. It returns the cell's
DBGroupAndItem
value. You can pass this value to any of the
DB...Ungrouped()
routines, or you can break this value into its component handles by calling
DBGroupFromGroupAndItem()
or
DBItemFromGroupAndItem()
.
If you want to find out the bounds of an existing cell file, call the routine
CellGetExtent()
. This routine takes two arguments: the address of the
CellFunctionParameters
, and the address of a
RangeEnumParams
structure. For the purposes of this routine, only one of its fields matters, namely the field
REP_bounds
. This field is itself a structure of type
Rectangle
, whose structure is shown below in Rectangle
.
CellGetExtent()
writes the bounds of the utilized section of the cell file in the
REP_bounds
field. The index of the first row which contains a cell will be written in the rectangle's
R_top
field; the index of the last row will be written in
R_bottom
; the index of the first column will be written in
R_left
; and the index of the last column will be written in
R_right
. If the cell file contains no cells, all four fields will be set to
-1.
typedef struct { sword R_left; /* Index of first column written here. */ sword R_top; /* Index of first row written here. */ sword R_right; /* Index of last column written here. */ sword R_bottom; /* Index of last row written here. */ } Rectangle;


You can disabled specific days of the week, or specific dates, or a mixture of both.
| disabled_days | array | An numeric (0-6) array of days of the week that should be disabled |
|---|---|---|
| disabled_dates | array | An array of dates that should be disabled. |


|
MetroCollect
2.3.4
|
Object used to describe a field (or metric) More...
#include <SourceField.h>
Classes | |
| struct | IndexAndDescription |
Public Member Functions | |
| FieldInfo () | |
| Construct a new Field Info object. More... | |
| FieldInfo (FieldName aName, std::string aDescription, std::string aUnit) | |
| Construct a new Field Info object. More... | |
| FieldInfo (FieldName aName, std::string aDescription, std::string aUnit, size_t anIndex, std::string aDynamicDescription) | |
| Construct a new Field Info object. More... | |
| bool | isDynamic () |
| Checks if the field name contains any dynamic part. More... | |
Public Attributes | |
| FieldName | name |
| Name of the field. More... | |
| std::string | description |
| Description of the field. More... | |
| std::string | unit |
| Unit of the field's metric. More... | |
| std::vector< IndexAndDescription > | dynamicIndexes |
| Indexes and descriptions of the dynamic parts of the field name. More... | |
Object used to describe a field (or metric)
Definition at line 37 of file SourceField.h.
|
inline |
Construct a new Field Info object.
Definition at line 54 of file SourceField.h.
|
inline |
Construct a new Field Info object.
| aName | name of the field |
| aDescription | description of the field |
| aUnit | unit of the field |
Definition at line 63 of file SourceField.h.
|
inline |
Construct a new Field Info object.
| aName | name of the field |
| aDescription | description of the field |
| aUnit | unit of the field |
| anIndex | index of the dynamic part in the field name |
| aDynamicDescription | description of the dynamic field name part |
Definition at line 75 of file SourceField.h.
|
inline |
Checks if the field name contains any dynamic part.
Definition at line 85 of file SourceField.h.
| std::string MetroCollect::MetricsSource::FieldInfo::description |
Description of the field.
Definition at line 46 of file SourceField.h.
| std::vector<IndexAndDescription> MetroCollect::MetricsSource::FieldInfo::dynamicIndexes |
Indexes and descriptions of the dynamic parts of the field name.
Definition at line 48 of file SourceField.h.
| FieldName MetroCollect::MetricsSource::FieldInfo::name |
Name of the field.
Definition at line 45 of file SourceField.h.
| std::string MetroCollect::MetricsSource::FieldInfo::unit |
Unit of the field's metric.
Definition at line 47 of file SourceField.h.


EAGLE Circuit/PCB Layout Tips
These notes are mainly for myself, as reminders for how to do operations I just learned or tend to forget.
Supply
What’s up with GND and GNDA and AGND? How do I tie them together? I need to write a more complete answer about why EAGLE has different grounds and where to tie them together.
Meanwhile, the short answer is to insert the GND-GNDA component from the supply1 library, (apparently) tie GND-GNDA’s GND to GND and GNDA to AGND or whatever you’re using, and then follow these instructions on a SparkFun forum to activate layers 53 and 54 to make a jumper appear in a new later on your board connecting the two.
How do I connect power supply and ground pins on ICs? EAGLE is supposed to connect them automatically, but that seems to depend somewhat on using the right supply symbols. If you need to connect them manually, use INVOKE (the button with four AND gates and an arrow, just above the T for text button) and click on one of the gates. You get a popup window listing different gates and the power connections; pick the power and place it on your schematic.
General Editing
How do I copy a group of objects? For some reason, the Copy tool doesn’t work on a group, but the Cut tool copies the group to the clipboard to be pasted. (Grrr.)
Select the objects with the Group (dotted rectangle) tool, then pick Cut off the Edit menu and click on any highlighted object, then pick Paste off the Edit menu and you should have a floating collection that you can position and anchor (click).
Libraries
What’s up with no libraries being loaded in EAGLE version 5? How do I get libraries into my list for adding parts? EAGLE 5 starts with no parts libraries loaded, and you need to load the ones you want by selecting Library / Use… and then picking them one at a time. You can also preload all libraries like EAGLE 4 (at least my copy) did by default, by typing USE *
in the command box in the edit window.
Layers
How do I make a single-sided PCB? Go into the Design Rule Checker (DRC tool), pick the Layers tab, and change the setup from (1*16)
to 1
. To change it back to a two-sided PCB, change the setup back to (1*16)
and change the Nr 16 Copper back to .035mm
.
How do I make a single-sided PCB with a few jumpers? For home production of a single-sided board with a few component-side jumpers, make a two-sided board, only produce the bottom side, drill the vias as component pads [need to check what shows up in the drill file] and stuff jumpers where the top-side traces would go.
How do I change layers while routing a trace? With a three-button mouse, use the middle button to change layers while routing traces. With a two-button mouse, click to set a waypoint, go up and change the layer in the drop-down box (don’t worry about the weird rubber-band trace that follows your mouse around while you’re doing it), and EAGLE should automatically insert a via, from which you can continue routing.
How do I delete a via? Use the Ripup tool to delete vias. The X it leaves behind will disappear after the next routing operation (on that trace? at all?) or the next time you click Ratsnest.
Pads
How do I change pad shapes? I don’t like the default oval pads on header connectors. Go into the Tools, DRC, Shapes, Pads, and change Top and Bottom from “As In Library” to “Round.”
How do I change pad sizes globally? Go into Tools, DRC, Restring, and set the Pads or Vias minimum sizes to the desired radius or diameter.
How do I change the drill size globally? Many of the library parts seem to have ridiculously large drill holes. For a homebrew board or hand-drilling, click the ULP, pick drill-aid.ulp
, and enter the new drill diameter (in mm). EAGLE will add a white ring inside each hole in a new layer 116.
New Components
Sparkfun has the best tuturial I’ve found on making new library parts.
http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=110
This tutorial has a great description of copying components and packages from existing libraries. I always forget to click on the group after selecting the Cut tool!
http://myhome.spu.edu/bolding/EE4211/EagleTutorial4.htm
Panelizing
The second Q/A has a good description of how to panelize.
http://www.precma.com/informatica/EAGLE_faq_various.htm
It boils down to this:
- If you want silkscreen part numbers preserved (instead of auto-incremented), run panelize.ulp to copy them to a different layer.
- Close your schematic and work only in the board. (At this point I save my board under a different name to indicate that it’s a panelized version only, not for editing.)
- Enable all layers that have elements you want duplicated in the panelization.
- Select everything and use the Cut tool (I pick it off the menu) to copy everything to the clipboard, remembering to click once more to select the “grab point.”
- Select Paste, and paste away.
CAM
How do I produce a drill file?
Run the CAM processor: File / CAM Processor. Pick Excellon for the Output Device type, and enter the output filename (foo.drd
) in the File box. Not necessary on my Linux workstation running a current version of EAGLE: Enter an X offset of -.0373inch
and a Y offset of -.0353inch
. (I have no idea why, nor why they immediately translate into -0.9474mm
and -0.8.966mm
.
Initial Setup to Generate Drill Files for DanCAM
The default Excellon drill file output is formatted a little differently than what’s required by DanCAM, the software on my friend Joel’s drilling machine. To fix the output format, I started with the instructions at Spark Fun’s forum on fixing EAGLE output.
I found the eagle.def
file, which on my Mac was at /Applications/EAGLE-X11/bin/eagle.def
(Linux /opt/eagle/bin/eagle.def
). Within the file, I found the definition for Excellon, which looked like this:
[EXCELLON] Type = DrillStation Long = "Excellon drill station" Init = "%%\nM48\nM72\n" Reset = "M30\n" ResX = 10000 ResY = 10000 ;Rack = "" DrillSize = "%sC%0.4f\n" ; (Tool code, tool size) AutoDrill = "T%02d" ; (Tool number) FirstDrill = 1 BeginData = "%%\n" Units = Inch Select = "%s\n" ; (Drill code) Drill = "X%1.0fY%1.0f\n" ; (x, y) Info = "Drill File Info:\n"\ "\n"\ " Data Mode : Absolute\n"\ " Units : 1/10000 Inch\n"\ "\n"
I duplicated it to a new definition called DANCAM
, and made three changes:
- The
Long
name for the new CAM type isDanCAM drill station
. - DanCAM doesn’t want the
%
as the first line of the file, so I removed the%%
from theInit
string. - DanCAM wants X/Y coordinates to be six digits (with leading zeroes): three digits of inches and three digits of thousandths (mils). So I changed the formats in the
Drill
string from%1.0f
to%06.0f
.
After the changes, the new DANCAM entry looked like this:
[DANCAM] Type = DrillStation Long = "DanCAM drill station" Init = "M48\nM72\n" Reset = "M30\n" ResX = 10000 ResY = 10000 ;Rack = "" DrillSize = "%sC%0.4f\n" ; (Tool code, tool size) AutoDrill = "T%02d" ; (Tool number) FirstDrill = 1 BeginData = "%%\n" Units = Inch Select = "%s\n" ; (Drill code) Drill = "X%06.0fY%06.0f\n" ; (x, y) Info = "Drill File Info:\n"\ "\n"\ " Data Mode : Absolute\n"\ " Units : 1/10000 Inch\n"\ "\n"
EAGLE graciously picked up the new definition each time I made a change, which was handy, as I went through several iterations to get the X/Y format right.
I haven’t had a chance to try the new format on the drill machine yet, but I’m pretty confident it now matches the files I’ve been hand-manipulating to get them to work.


My Pebble Watch finally arrived this week so I thought I should have a go at pushing information to it. As a cycle commuter I look at the weather every day and am primarily interested in wind direction and rain forecast so I though it would be neat to have this appear on my watch every morning.
Framework Jail & Bail
I’ve been put forward for this year’s Jail & Bail event in support of Framework and I need your help (money).
Framework is the charity Esendex are primarily working with and supporting. Their goal is to stop homelessness in all of it’s forms. What appealed to us the most about working with them was their approach to helping people get the support and training they need to enable them to change their own lives.
Do You Use Calendars?
I’m an eternally frustrated user of computer and phone calendars. I find all sorts of aspects of using them clumsy and ill-suited to the way I work.
Am I the only one?
I have some ideas about how they could be improved but I only represent one perspective. If you use calendars and are within striking distance of either Nottingham or London I’d love to come and buy you a coffee.
Only Entrepreneurs Can Lead a Start-Up Community
I’m reading Brad Feld’s book Startup Communities: Building an Entrepreneurial Ecosystem in Your City at the moment. It shares his ideas and experience from being keenly involved in establishing the start-up community in Boulder, Colorado.
One of his key assertions is that entrepreneurs must lead such a community:
The most critical principle of a startup community is that entrepreneurs must lead it. Lots of different people are involved in the startup community and many nonentrepreneurs play key roles. Unless the entrepreneurs lead, the startup community will not be sustainable over time.
The Top 80s Films That Your Children Must See
We’re going through a bit of cultural education of my boys at the moment, Back To The Future I, II & III, ET, Fawlty Towers have all been on the bill.
So I put a call out on twitter last Saturday for film recommendations for 80s films that my children need to see. Here’s the list (in no particular order).
Code Club, a Call to Arms
Are you a developer? Are you a business owner who employs developers? Have you heard about CodeClub?
Code Club is a nationwide network of volunteer-led after school coding clubs for children aged 9-11. The mission is to give every child in the UK the chance to learn to code. The aim to have a Code Club in 25% of primary schools in the UK by the end of 2014.
What’s not to like about being part of that.
4 Years - a Thought Experiment
What would you like to be recognised for in 4 years time?
What are the steps required to get there?
Would your life be better if you did the first step?
And the next one?
The Olympics is bloody brilliant because it demonstrates with crystal clarity that success is down to dedication, following a process and constant learning and revising the approach.
If that’s not a lesson for life in general, I don’t know what is.
The Nottingham Creative Quarter - What Can You Do
The announcement of Nottingham’s City Deal last week (http://www.dpm.cabinetoffice.gov.uk/sites/default/files_dpm/resources/Nottingham-City-Deal-final.pdf) is big deal for entrepreneurship in the city. The council now have the funds and powers to provide the infrastructure and support to the new, innovative businesses that will drive GDP growth in the city and provide the skilled jobs going forward.
But, infrastructure is only one part of the jigsaw. I want to share a couple of thoughts on how we, the business community in Nottingham, can do our bit to support our city in this endeavour.
Delayed_job Syck Woes When Deploying to Heroku Cedar
This caused me a bit of heartache and I found little to help via the usual channels.
I’d upgraded a Rails 2 app that used Delayed_Job to Rails 3 and was deploying the Heroku Cedar stack. Jobs were being queued but would fail immediately when trying to deserialise with
uninitialized constant Syck::Syck
Remain Friends With Your Git Collaborators by Auto Removing Whitespace in Textmate
Handy article that shows you how to do just that
http://blogobaggins.com/2009/03/31/waging-war-on-whitespace.html


Ted Neward describes somesome negative experiences with object-relational mappers (quoted via James Robertson, as Ted's blog seems to be down at the moment).
With object-relational technologies, products begin by flirting with simple mappings: single class to single table, building simple Proxies that do some Lazy Loading, and so on. "Advisers" are sent in to the various project teams that use the initial O-R layer, but before long, those "advisers" are engaging in front-line coding, wrestling with ways to bring object inheritance to the relational database.I think some of the problems with ORMs are due to being too Object, and not enough Relational. It's entirely appropriate -- obvious, even -- that the database should be represented through objects. It is nice if the structure of the database is also represented through objects, hopefully at a fine level of detail. When you create SQL strings, you are hiding the structure in relatively opaque strings. When you have query results that are just lists of lists, or lists of dictionaries, you have lost a lot of information.
So, you want good objects. The problems I see is when you try to represent classes through the ORM, or relatedly when you do modeling and then apply the ORM after. Objects are fine and well, but it's still an RDBMS you are dealing with. Concepts like subclassing just don't make sense. Is-a is not a term you should be thinking about. And when you are using your objects, you shouldn't expect to forget what they really are -- connectors to the database.
I think a good ORM needs to be simple and transparent in the way it deals with the database, so you don't forget what you are dealing with. But I don't think it needs to represent every relational programming concept natively. Just as an object programmer needs to think about relations, a relational programmer needs to think about objects, and the ORM should be the intersection of those two, not the union.
"Objects are fine and well, but it's still an RDBMS you are dealing with."
Unless, of course, it isn't. Part of the appeal of an ORM in my experience is the ability to also transparently persist objects in containers which are not RDBMS's. My current example: a biz app which has two storage mechanisms; one is a relational DB--the kind of thing SQLObject would work perfectly with. But half the data is stored in a third-party container, which provides SQL for reading, but a proprietary API for writing, which models objects completely differently.
"...And when you are using your objects, you shouldn't expect to forget what they really are -- connectors to the database."
Sorry, I don't buy it. Abstraction is forgetfulness, IMO.# Robert Brewer
I'm with Ian here, the nail has been firmly hit on the head. Every time I've come across object relational mapping it's OO programmers trying to persist an object model in a database. Its all in the compromise, and using the strengths of both approaches rather than sticking only to one.
V.S. Babu had an interesting point;
http://vsbabu.org/mt/archives/2004/01/18/quick_links.html
Which I followed up;
http://www.halfcooked.com/mt/archives/000685.html
ORM tools have two different jobs depending on what comes first in the design: with objects first there is persistence, portable to different datastores because the objects remain the same and as transparent as possible because one only needs to write objects and get them back; with database first there is a struggle to perform database operations and present data as objects in the context of a certain program: the transparency and portability are turned around (any program can use the OO view of a certain database provided by the tool and all database clients are the same).
# Lorenzo Gatti
I partly agree with you. But after the class generation, then those classes are saved in the persistance layer and the mapping files are also generated.After that you can perform the operation on xml. ORM is very powerful tool because it provide database independence. If you have any objection, you can mail me at<EMAIL_ADDRESS>Adeel Hussain
# Adeel Hussain


Some quick example text to build on .
Some quick example text to build on .
Some quick example text to build on .
Some quick example text to build on .
Some quick example text to build on .
Some quick example text to build on .
Some quick example text to build on .
Some quick example text to build on .


| Name | Position | Office | Age | Start date | Salary |
|---|---|---|---|---|---|
| Tiger Nixon | System Architect | Edinburgh | 61 | 2011-04-25 | $320,800 |
| Garrett Winters | Accountant | Tokyo | 63 | 2011-07-25 | $170,750 |
| Donna Snider | Customer Support | New York | 27 | 2011-01-25 | $112,000 |
| Name | Position | Office | Age | Start date | Salary |
| Name | Position | Office | Age | Start date | Salary |
|---|---|---|---|---|---|
| Tiger Nixon | System Architect | Edinburgh | 61 | 2011-04-25 | $320,800 |
| Garrett Winters | Accountant | Tokyo | 63 | 2011-07-25 | $170,750 |
| Donna Snider | Customer Support | New York | 27 | 2011-01-25 | $112,000 |
| Name | Position | Office | Age | Start date | Salary |


Hangman v0.9.6 Hangman.Game.Event.Manager behaviour
Module implements GenStage event manager which handles event dispatching given consumer backpressure
Summary
Functions
Sends an event and returns only after the event is dispatched. Blocks until event is broadcasted
Callback implementation for c:Experimental.GenStage.handle_demand/2
Callback implementation for c:Experimental.GenStage.init/1
Starts the manager
Functions
Specs
async_notify(term) :: term
Sends an event and returns only after the event is dispatched. Blocks until event is broadcasted
Callback implementation for c:Experimental.GenStage.handle_demand/2
.


P3D Tracker
Contract:
0xb3775fb83f7d12a36e0475abdd1fca35c091efbe
Total ETH
ETH
Buy Price
ETH
Your Wallet Address
View Your Balances
Showing values for:
Balance
P3D
Dividends
ETH
Share Worth
ETH
Latest Transactions
Age
From
Action
Amount


| |
set log level.
-
Description:
-
This API is used to set log level. The log informations whose level is not less than the level set up in this interface are displayed.
-
注意:
-
none.
-
参数:
-
|
参数名称 |
描述 |
|
level |
[IN] Log level to be set up. |
-
返回值:
-
-
Dependency: none.
-
参见:
-
atiny_get_log_level.
|


Got a question? We’d love to you hear from you. Send us a message and we’ll respond as soon as possible


Full name:
com.carrotgarden.maven:scalor-maven-plugin_2.12:<IP_ADDRESS>90502181145:eclipse-config
Description:
Attributes:
| Name | Type | Since | Description |
|---|---|---|---|
| <buildMacroDependencyFolders> | File[] | - | Project folders containing build classes which are dependency for
compilation scope=macro. Normally is empty. User property is: scalor.buildMacroDependencyFolders. |
| <buildMacroDependencyScopes> | String[] | - | Maven dependency scopes which control selection of project
dependency artifacts to be included in the classpath of compilation
scope=macro. Scopes reference. Default value is: compile,provided,system. User property is: scalor.buildMacroDependencyScopes. |
| <buildMacroResourceFolders> | Resource[] | - | Resource root folders to be included in compilation scope=macro.
There are no macro resource folders by default. Component
reference: Resource .
Example entry in pom.xml:
<buildMacroResourceFolders> <resource> <directory>${project.basedir}/src/macro/resources</directory> </resource> </buildMacroResourceFolders> User property is: scalor.buildMacroResourceFolders. |
| <buildMacroSourceJavaFolders> | File[] | - | Java source root folders to be included in compilation scope=macro.
Normally uses src/macro/java. Default value is: ${project.build.sourceDirectory}/../../macro/java. User property is: scalor.buildMacroSourceJavaFolders. |
| <buildMacroSourceScalaFolders> | File[] | - | Scala source root folders to be included in compilation
scope=macro. Normally uses src/macro/scala. Default value is: ${project.build.sourceDirectory}/../../macro/scala. User property is: scalor.buildMacroSourceScalaFolders. |
| <buildMainDependencyFolders> | File[] | - | Project folders containing build classes which are dependency for
compilation scope=main. Normally includes folder scope=[macro,main]
(target/classes). Default value is: ${project.build.outputDirectory}. User property is: scalor.buildMainDependencyFolders. |
| <buildMainDependencyScopes> | String[] | - | Maven dependency scopes which control selection of project
dependency artifacts to be included in the classpath of compilation
scope=main. Scopes reference. Default value is: compile,provided,system. User property is: scalor.buildMainDependencyScopes. |
| <buildMainResourceFolders> | Resource[] | - | Resource root folders to be included in compilation scope=main.
Normally uses src/main/resources. Absolute path.
Component reference: Resource .
Example custom entry in pom.xml:
<buildMainResourceFolders> <resource> <directory>${project.basedir}/src/main/resources</directory> </resource> <resource> <directory>${project.basedir}/target/generated/main/resources</directory> </resource> </buildMainResourceFolders> Default value is: ${project.build.resources}. User property is: scalor.buildMainResourceFolders. |
| <buildMainSourceJavaFolders> | File[] | - | Java source root folders to be included in compilation scope=main.
Absolute path. Normally uses src/main/java. Example
custom entry in pom.xml:
<buildMainSourceJavaFolders> <source>${project.build.sourceDirectory}</source> <source>${project.basedir}/target/generated/main/java</source> </buildMainSourceJavaFolders> Default value is: ${project.build.sourceDirectory}. User property is: scalor.buildMainSourceJavaFolders. |
| <buildMainSourceScalaFolders> | File[] | - | Scala source root folders to be included in compilation scope=main.
Absolute path. Normally uses src/main/scala. Example
custom entry in pom.xml:
<buildMainSourceScalaFolders> <source>${project.build.sourceDirectory}/../scala</source> <source>${project.basedir}/target/generated/main/scala</source> </buildMainSourceScalaFolders> Default value is: ${project.build.sourceDirectory}/../scala. User property is: scalor.buildMainSourceScalaFolders. |
| <buildMainTargetFolder> | File | - | Build target folder with result classes of compilation
scope=[macro,main]. Normally uses target/classes. Default value is: ${project.build.outputDirectory}. User property is: scalor.buildMainTargetFolder. |
| <buildTestDependencyFolders> | File[] | - | Project folders containing build classes which are dependency for
compilation scope=test. Normally includes folder
scope=[macro,main,test] (target/classes,
target/test-classes). Default value is: ${project.build.outputDirectory},${project.build.testOutputDirectory}. User property is: scalor.buildTestDependencyFolders. |
| <buildTestDependencyScopes> | String[] | - | Maven dependency scopes which control selection of project
dependency artifacts to be included in the classpath of compilation
scope=test. Scopes reference. Default value is: compile,provided,system,test,runtime. User property is: scalor.buildTestDependencyScopes. |
| <buildTestResourceFolders> | Resource[] | - | Resource root folders to be included in compilation scope=test.
Absolute path. Normally uses src/test/resources.
Component reference: Resource .
Example custom entry in pom.xml:
<buildTestResourceFolders> <resource> <directory>${project.basedir}/src/test/resources</directory> </resource> <resource> <directory>${project.basedir}/target/generated/test/resources</directory> </resource> </buildTestResourceFolders> Default value is: ${project.build.testResources}. User property is: scalor.buildTestResourceFolders. |
| <buildTestSourceJavaFolders> | File[] | - | Java source root folders to be included in compilation scope=test.
Absolute path. Normally uses src/test/java. Example
custom entry in pom.xml:
<buildTestSourceJavaFolders> <source>${project.build.testSourceDirectory}</source> <source>${project.basedir}/target/generated/test/java</source> </buildTestSourceJavaFolders> Default value is: ${project.build.testSourceDirectory}. User property is: scalor.buildTestSourceJavaFolders. |
| <buildTestSourceScalaFolders> | File[] | - | Scala source root folders to be included in compilation scope=test.
Absolute path. Normally uses src/test/scala. Example
custom entry in pom.xml:
<buildTestSourceScalaFolders> <source>${project.build.testSourceDirectory}/../scala</source> <source>${project.basedir}/target/generated/test/scala</source> </buildTestSourceScalaFolders> Default value is: ${project.build.testSourceDirectory}/../scala. User property is: scalor.buildTestSourceScalaFolders. |
| <buildTestTargetFolder> | File | - | Build target folder with result classes of compilation scope=test.
Normally uses target/test-classes. Default value is: ${project.build.testOutputDirectory}. User property is: scalor.buildTestTargetFolder. |
| <commonMappingPattern> | String | - | Regular expression for plugin configuration map values provided in
pom.xml. Extractor for pattern:
key=value. Must define exactly two regex capture
groups. Mapping regular expression is used as follows:
case commonMappingPattern.r( key, value ) => ( key, value ) Default value is: \s*([^=\s]+)\s*=\s*([^\s]+)\s*. User property is: scalor.commonMappingPattern. |
| <commonSequenceSeparator> | String | - | Separator for plugin configuration list values provided in
pom.xml. Separator regular expression is used as
follows:
string.split( commonSequenceSeparator ).map( _.trim ).filterNot( _.isEmpty ) Default value is: [★\n]+. User property is: scalor.commonSequenceSeparator. |
| <defineAuto> | boolean | - | Enable auto-discovery of defineBridge and defineCompiler dependencies. When
false, bridge and compiler definitions must be
explicitly provided in pom.xml. When
true, plugin will use the following bridge and
compiler dependency discovery heuristic:
Default value is: true. User property is: scalor.defineAuto. |
| <defineBridge> | Dependency[] | - | Provide Scala compiler bridge dependency. Can declare here
additional dependencies for the bridge. Bridge artifact must match
expected regular expression in regexCompilerBridge. Example
entry in pom.xml:
<defineBridge> <dependency> <groupId>org.scala-sbt</groupId> <artifactId>compiler-bridge_${version.scala.epoch}</artifactId> <version>${version.scala.zinc}</version> </dependency> </defineBridge> |
| <defineCompiler> | Dependency[] | - | Provide Scala compiler dependency. Can declare here additional
dependencies for the compiler. Compiler artifact must match
expected regular expression in regexScalaCompiler. Example
entry in pom.xml:
<defineCompiler> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-compiler</artifactId> <version>${version.scala.release}</version> </dependency> </defineCompiler> |
| <definePluginList> | Dependency[] | - | Provide Scala plugins dependency. Can declare mulitiple scala
compiler plugins. Plugin artifact jar must contain expected
descriptor resource in resourcePluginDescriptor.
Example entry in pom.xml:
<definePluginList> <dependency> <groupId>org.scala-js</groupId> <artifactId>scalajs-compiler_${version.scala.release}</artifactId> <version>${version.sjs.release}</version> </dependency> </definePluginList> |
| <eclipseBuilderOrdering> | String | - | Order Eclipse .project descriptor builder entries
according to these rules. Rule format:
item = path where: item - relative sort order index, path - regular expression to match against 'projectDescription/buildSpec/buildCommand/name', Default value is: 11 = org.eclipse.wst.+ ★ 12 = org.eclipse.dltk.+ ★ 41 = org.eclipse.jdt.+ ★ 42 = org.scala-ide.sdt.+ ★ 71 = org.eclipse.pde.+ ★ 72 = org.eclipse.m2e.+ ★ . User property is: scalor.eclipseBuilderOrdering. |
| <eclipseBuilderReorder> | boolean | - | Enable to re-order Eclipse .project descriptor by
projectDescription/buildSpec/buildCommand/name Default value is: true. User property is: scalor.eclipseBuilderReorder. |
| <eclipseClasspathOrdering> | String | - | Re-order Eclipse top level .classpath descriptor
entries according to these rules. Class path entry order controls
visual presentation in Eclipse UI. Rule format:
item = path where: item - relative sort order index, path - regular expression to match against 'classpath/classpathentry/@path', Default value is: 11 = .*src/macr.*/java ★ 12 = .*src/macr.*/scala ★ 13 = .*src/macr.*/groovy ★ 14 = .*src/macr.*/res.* ★ 21 = .*src/main.*/java ★ 22 = .*src/main.*/scala ★ 23 = .*src/main.*/groovy ★ 24 = .*src/main.*/res.* ★ 31 = .*src/test.*/java ★ 32 = .*src/test.*/scala ★ 33 = .*src/test.*/groovy ★ 34 = .*src/test.*/res.* ★ 51 = .*target/gen[a-z-]*sources.* ★ 52 = .*target/gen[a-z-]*test-.* ★ 53 = .*target/gen[a-z-]*.* ★ 81 = org.scala-ide.sdt.* ★ 82 = org.eclipse.jdt.* ★ 83 = org.eclipse.m2e.* ★ 84 = GROOVY_SUPPORT ★ 85 = GROOVY_DSL_SUPPORT ★ 91 = .*target/clas.* ★ 92 = .*target/test-clas.* ★ 93 = .*target/scalor/clas.*/macr.* ★ 94 = .*target/scalor/clas.*/main.* ★ 95 = .*target/scalor/clas.*/test.* ★ . User property is: scalor.eclipseClasspathOrdering. |
| <eclipseClasspathReorder> | boolean | - | Enable to re-order Eclipse .classpath descriptor by
classpath/classpathentry/@path Default value is: true. User property is: scalor.eclipseClasspathReorder. |
| <eclipseDetectPresent> | boolean | - | Invoke Eclipse executions only when runnting inside Eclipse/M2E.
When false, force executions regardless of the Eclipse
detection state. Default value is: true. User property is: scalor.eclipseDetectPresent. |
| <eclipseHackSymbolicLinks> | boolean | - | Work around Scala IDE mishandling of symbolic link paths.
Specifically, discover project folders which are symbolic links,
and explicitly declare them in the .project
descriptor. Example result entry in the descriptor:
<linkedResources> <link> <name>src</name> <type>2</type> <location>/home/work/source/git/scalor-maven-plugin/src</location> </link> </linkedResources> Default value is: false. User property is: scalor.eclipseHackSymbolicLinks. |
| <eclipseInstallReportFile> | File | - | Report all available custom Scala installations persisted by Scala
IDE. Provides titles, dependencies, etc., for every custom Scala
installation. Enablement parameter: eclipseLogInstallReport. Default value is: ${project.build.directory}/scalor/scala-install-report.txt. User property is: scalor.eclipseInstallReportFile. |
| <eclipseLogBuildParticipant> | boolean | - | Enable to log M2E build participant executions of Eclipse companion
plugin. Use to review actual build actions delegated from Eclipse
to Maven plugin goals. Default value is: false. User property is: scalor.eclipseLogBuildParticipant. |
| <eclipseLogClasspathOrder> | boolean | - | Enable to log class path re-ordering result entries. Use to review
actual full class path dump. Default value is: false. User property is: scalor.eclipseLogClasspathOrder. |
| <eclipseLogInstallReport> | boolean | - | Report all available custom Scala installations persisted by
Eclipse Scala IDE plugin. Provides titles, dependencies, etc., for
every custom Scala installation. Generated report output file
parameter: eclipseInstallReportFile. Default value is: false. User property is: scalor.eclipseLogInstallReport. |
| <eclipseLogParamsConfig> | boolean | - | Enable to log effective configuration parameters of Eclipse
companion plugin. Use to review full dump of settings transferred
from Maven to Eclipse. Default value is: false. User property is: scalor.eclipseLogParamsConfig. |
| <eclipseLogPersistCompiler> | boolean | - | Enable to log persisting of selected project Scala compiler. Use to
review complier title with MD5. Default value is: false. User property is: scalor.eclipseLogPersistCompiler. |
| <eclipseLogPersistInstall> | boolean | - | Enable to log persisting of custom Scala installation. Use to
review complier configuration for given project. Default value is: false. User property is: scalor.eclipseLogPersistInstall. |
| <eclipseLogPersistSettings> | boolean | - | Enable to log persisting of configured project Scala IDE settings.
Use to review actual stored per-project key=value. Default value is: false. User property is: scalor.eclipseLogPersistSettings. |
| <eclipseMavenOrdering> | String | - | Re-order class path entires inside the.classpathMaven
container acording to these rules. Available rules are:
artifactId = ascending Default value is: artifactId = ascending . User property is: scalor.eclipseMavenOrdering. |
| <eclipseMavenPluginVersionCheck> | boolean | - | Enable to verify version of Eclipse M2E plugin when
running companion Eclipse plugin. Version range parameter: eclipseMavenPluginVersionRange. Default value is: true. User property is: scalor.eclipseMavenPluginVersionCheck. |
| <eclipseMavenPluginVersionError> | boolean | - | Reaction of companion Eclipse plugin on Maven M2E version out of
range error:
true -> fail with error false -> only log an error Default value is: true. User property is: scalor.eclipseMavenPluginVersionError. |
| <eclipseMavenPluginVersionRange> | String | - | Version range of Eclipse M2E plugin known to work with this release
of companion Eclipse plugin. To verify Eclipse Platform M2E plugin
version, navigate:
Eclipse -> Help -> About Eclipse -> Installation Details -> Installed Software -> M2E Default value is: [1.8.0,1.12.0). User property is: scalor.eclipseMavenPluginVersionRange. |
| <eclipseMavenReorder> | boolean | - | Enable to re-order class path entires inside
the.classpathMaven container. Class path entry order
controls visual presentation in Eclipse UI. Ordering parameter: eclipseMavenOrdering. Default value is: true. User property is: scalor.eclipseMavenReorder. |
| <eclipseNatureOrdering> | String | - | Re-order nature entires in .project descriptor
according to these rules. Nature order controls project
presentation in Eclipse UI. In order to see [S] icon
for Scala project, Scala nature must come first. Rule format:
item = path where: item - relative sort order index, path - regular expression to match against 'projectDescription/natures/nature', Default value is: 11 = org.scala-ide.sdt.+ ★ 21 = org.eclipse.jdt.+ ★ 31 = org.eclipse.pde.+ ★ 41 = org.eclipse.m2e.+ ★ 51 = org.eclipse.wst.+ ★ 61 = org.eclipse.dltk.+ ★ . User property is: scalor.eclipseNatureOrdering. |
| <eclipseNatureReorder> | boolean | - | Enable to re-order nature entires in .project
descriptor. Nature order controls project presentation in Eclipse
UI. Ordering parameter: eclipseNatureOrdering. Default value is: true. User property is: scalor.eclipseNatureReorder. |
| <eclipseProjectCommentApply> | boolean | - | Enable to apply comment in Eclipse .project
descriptor. Default value is: true. User property is: scalor.eclipseProjectCommentApply. |
| <eclipseProjectCommentString> | String | - | Content of the comment in eclipse .project descriptor. Default value is: scalor-maven-plugin @ ${project.properties(release.stamp)}. User property is: scalor.eclipseProjectCommentString. |
| <eclipseRemoveLibraryContainer> | boolean | - | Enable to remove Scala Library container from Eclipse build class
path. Normally, Scala Library container is provided by default by
Scala IDE plugin. Normally, scala-library artifact must also be
provided as pom.xml dependency. That results in
scala-library dependency listed twice on Eclipse build class path.
To avoid "duplicate library on class path" warning, use this
parameter to remove Scala IDE provided container. Custom Scala
installation configured by this plugin will use scala-library
resolved from defineCompiler,
which normally should be configured as identical to the
scala-library provided as pom.xml project dependency. Default value is: true. User property is: scalor.eclipseRemoveLibraryContainer. |
| <eclipseRenameLibraryContainer> | boolean | - | Enable to rename Scala Library container in Eclipse UI. Container
description will reflect title of the custom Scala installation.
Only effective when not removing scala-library container via
parameter: eclipseRemoveLibraryContainer. Default value is: true. User property is: scalor.eclipseRenameLibraryContainer. |
| <eclipseResetPreferences> | boolean | - | Reset Eclipse Scala IDE project preferences to their default values
before applying Maven provided configuration. Use this feature to
remove extraneous user-provided Eclipse UI configuration settings
for Scala IDE. Default value is: true. User property is: scalor.eclipseResetPreferences. |
| <eclipseScalaPluginVersionCheck> | boolean | - | Enable to verify version of Scala
IDE plugin when running companion Eclipse plugin. Version range
parameter: eclipseScalaPluginVersionRange. Default value is: true. User property is: scalor.eclipseScalaPluginVersionCheck. |
| <eclipseScalaPluginVersionError> | boolean | - | Reaction of companion Eclipse plugin on Scala IDE version out of
range error:
true -> fail with error false -> only log an error Default value is: true. User property is: scalor.eclipseScalaPluginVersionError. |
| <eclipseScalaPluginVersionRange> | String | - | Version range of Scala IDE known to work with this release of
companion Eclipse plugin. To verify Eclipse Platform Scala IDE
plugin version, navigate:
Eclipse -> Help -> About Eclipse -> Installation Details -> Installed Software -> Scala IDE Default value is: [4.7.0,4.7.2). User property is: scalor.eclipseScalaPluginVersionRange. |
| <regexCompilerBridge> | String | - | Maven identity of Scala bridge artifact. Regular expression in the
form: ${groupId}:${artifactId}. Used for auto
discovery of compiler-bridge from defineBridge. Default value is: org.scala-sbt:compiler-bridge_.+. User property is: scalor.regexCompilerBridge. |
| <regexScalaCompiler> | String | - | Maven identity of Scala compiler artifact. Regular expression in
the form: ${groupId}:${artifactId}. Used for auto
discovery of scala-compiler from defineCompiler. Default value is: org.scala-lang:scala-compiler. User property is: scalor.regexScalaCompiler. |
| <regexScalaLibrary> | String | - | Maven identity of Scala library artifact. Regular expression in the
form: ${groupId}:${artifactId}. Used for auto
discovery of scala-library from defineCompiler. Default value is: org.scala-lang:scala-library. User property is: scalor.regexScalaLibrary. |
| <resourcePluginDescriptor> | String | - | Scala compiler plugin descriptor file name, stored inside compiler
plugin jar. Used for auto discovery of Scala compiler plugins form
definePluginList. Plain file
name, not a regex. Default value is: scalac-plugin.xml. User property is: scalor.resourcePluginDescriptor. |
| <skip> | boolean | - | Force to skip all executions of this plugin. Default value is: false. User property is: scalor.skip. |
| <skipEclipse> | boolean | - | Flag to skip goal execution: eclipse-*. Default value is: false. User property is: scalor.skipEclipse. |
| <skipLogReason> | boolean | - | Enable logging of reason for skipping an execution. Default value is: true. User property is: scalor.skipLogReason. |
| <skipPackagingList> | String[] | - | List of packaging types, which are skipped by this plugin. Default value is: pom. User property is: scalor.skipPackagingList. |
| <zincOptionsJava> | String | - | Options for JavaC compiler used by Zinc invocation. Separator
parameter: commonSequenceSeparator. Default value is: -deprecation ★ -encoding ★ UTF-8 ★ -source ★ 1.8 ★ -target ★ 1.8 ★ . User property is: scalor.zincOptionsJava. |
| <zincOptionsScala> | String | - | Combined options for ScalaC compiler, Scalor Plugin Zinc compiler,
Scala IDE Plugin Zinc compiler.
Scalor Zinc compiler options reference: IncrementalCompilerImpl.scala Scala IDE Zinc compiler options reference: IDESettings$ScalaPluginSettings.scala For consistent Maven vs Eclipse builds, use non-interfering eclipse-builder options. Separator parameter: commonSequenceSeparator. Examine available/effective options via zincLogCompilerOptions. Options processing steps:
Default value is: -feature ★ -unchecked ★ -deprecation ★ -encoding ★ UTF-8 ★ -target:jvm-1.8 ★ -Xmaxerrs ★ 10 ★ -compileorder:Mixed ★ -useScopesCompiler:true ★ -withVersionClasspathValidator:true ★ . User property is: scalor.zincOptionsScala. |
| <zincScalaInstallTitle> | String | - | Scala installation title prefix used for Scala installtions
generated by this plugin. Actual generated Scala installation will
also include a summary, i.e.: Scalor [MD5], where
[MD5] is MD5 digest of combined artifact paths
included in the installation. Prefix allows to distinguish
installations in Scala IDE UI, Scalor plugin reports, Eclipse Maven
Console. Review available Scala installation details with: eclipseLogInstallReport. Default value is: Scalor. User property is: scalor.zincScalaInstallTitle. |
<buildMacroResourceFolders> <resource> <directory>${project.basedir}/src/macro/resources</directory> </resource> </buildMacroResourceFolders>
<buildMainResourceFolders> <resource> <directory>${project.basedir}/src/main/resources</directory> </resource> <resource> <directory>${project.basedir}/target/generated/main/resources</directory> </resource> </buildMainResourceFolders>
<buildMainSourceJavaFolders> <source>${project.build.sourceDirectory}</source> <source>${project.basedir}/target/generated/main/java</source> </buildMainSourceJavaFolders>
<buildMainSourceScalaFolders> <source>${project.build.sourceDirectory}/../scala</source> <source>${project.basedir}/target/generated/main/scala</source> </buildMainSourceScalaFolders>
<buildTestResourceFolders> <resource> <directory>${project.basedir}/src/test/resources</directory> </resource> <resource> <directory>${project.basedir}/target/generated/test/resources</directory> </resource> </buildTestResourceFolders>
<buildTestSourceJavaFolders> <source>${project.build.testSourceDirectory}</source> <source>${project.basedir}/target/generated/test/java</source> </buildTestSourceJavaFolders>
<buildTestSourceScalaFolders> <source>${project.build.testSourceDirectory}/../scala</source> <source>${project.basedir}/target/generated/test/scala</source> </buildTestSourceScalaFolders>
case commonMappingPattern.r( key, value ) => ( key, value )
string.split( commonSequenceSeparator ).map( _.trim ).filterNot( _.isEmpty )
<defineBridge> <dependency> <groupId>org.scala-sbt</groupId> <artifactId>compiler-bridge_${version.scala.epoch}</artifactId> <version>${version.scala.zinc}</version> </dependency> </defineBridge>
<defineCompiler> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-compiler</artifactId> <version>${version.scala.release}</version> </dependency> </defineCompiler>
<definePluginList> <dependency> <groupId>org.scala-js</groupId> <artifactId>scalajs-compiler_${version.scala.release}</artifactId> <version>${version.sjs.release}</version> </dependency> </definePluginList>
item = path where: item - relative sort order index, path - regular expression to match against 'projectDescription/buildSpec/buildCommand/name',
projectDescription/buildSpec/buildCommand/name
item = path where: item - relative sort order index, path - regular expression to match against 'classpath/classpathentry/@path',
classpath/classpathentry/@path
<linkedResources> <link> <name>src</name> <type>2</type> <location>/home/work/source/git/scalor-maven-plugin/src</location> </link> </linkedResources>
artifactId = ascending
true -> fail with error false -> only log an error
Eclipse -> Help -> About Eclipse -> Installation Details -> Installed Software -> M2E
item = path where: item - relative sort order index, path - regular expression to match against 'projectDescription/natures/nature',
true -> fail with error false -> only log an error
Eclipse -> Help -> About Eclipse -> Installation Details -> Installed Software -> Scala IDE


Product Details
Dependencies
Home
Dashboard
Product Details
Description
Service
Properties
Environment
Organization
Last Health Check
Environment
Hostname
Project Repository
Project Page
Internal Dependencies
External Dependencies


Example sentence. Example sentence. Example sentence. Example sentence. Example sentence. Example sentence. Example sentence. Example sentence.


WITNESS LIST Judicial Affairs Committee March 15, 1999-3:00P HB 82 Registering, but not testifying: Against: Alonzo, Gladys (Texas Trial Lawyers Association) HB 82ommittee Substitute (CSHB 82) For: Lee, Donald (Texas Conference of Urban Counties) HB 806 For: Pruitt, Judge Jim (Self and County Criminal Courts of Dallas County) Registering, but not testifying: For: Allison, Jim (County Judges and Commissioners Association of Texas) Pardue, Craig (Dallas County) HB 806Amendment (Thompson/Amendment#1) Forbes, Scott (Mayor and City Council of Houston) HB 1123 For: Hodges, Judge David (Judicial Section, State Bar of Texas) Klager, Judge James (Self) On: Allison, Jim (County Judges and Commissioners Association of Texas) HB 1477 For: Henderson, Jill (Self and Taylor County Law Library) Prather, Leslie A. (Self) Sanchez, Lynn (Self and El Paso County Law Librarians) Wayland, Sharon (Self and Tarrant County Law Library) Registering, but not testifying: For: Allison, Jim (County Judges and Commissioners Association of Texas) Mendez, Mark (Tarrant County Commissioners Court) HB 1603 Committee Substitute (Hartnett/CSHB 1603) For: Bresnen, Steve (USA Training) HB 1605 For: Herman, Judge Guy (Self and Statutory Probate Judges of Texas) Registering, but not testifying: For: Jones, Jerry Frank (Texas Academy of Probate Attorneys) HB 1839 For: Mendez, Mark (Tarrant County Commissioners Court)


On this page, we will describe how you can choose what to work on for your group project. You will have the choice to either join one of the projects proposed by us or to choose a project idea of your own. Below we describe each track and corresponding todos.
Track #1: Join one of our projects
My research team and I brainstormed a range of ideas that make for a great class project. For this track, the team size will vary from 2-4 students depending on the project. My research team will present the ideas in class, you will then have the chance to chat with each researcher on my team, and then rank up to 3 projects by your preferred choice. We will then match each student to one of their ranked projects and let you know which one you were matched with. The benefit of this track is that the projects are scoped to be feasible in class, you will be mentored by an experienced member of my research team, and you will work on cutting edge research that could potentially lead to a publication later.
Oct 6 (wed, 4pm): Rank top 3 ideas by your preference in this form and provide input why you are a great match for the project
Oct 6 (wed, 8pm): We let you know which project you were matched with.
Track #2: Propose your Own Idea
In this track, you propose your own ideas as a team. Below are the requirements.
Student Team Size: The team size should be 3-4 students per project.
Project Requirements:
The project needs to have hardware (e.g., fabricated parts, electronics) and software components. Projects that are missing one of these components are not valid for 6.810. You can however choose where you want to put your main focus, i.e. some projects may be heavy on the fabrication and electronics while others may be more heavy on the software part.
The project needs to use fabrication technology your learned in class, i.e. it should not just be the standard breadboard prototype with off-the-shelve electronic components you bought from Sparkfun but have a nicely integrated form factor with printed or sprayed electronics, a 3D printed or laser cut casing where appropriate etc. Make your prototype look as professional as you can. We recommend you review the lecture slides to look for different technologies you could experiment with.
The project idea needs to be big enough to warrant, e.g., a 4 person team working on it for 6 weeks. Note that each week you will be putting in ca. 6 hours per person, so this should be 4 student x 6 hours per week x 5 weeeks = 120 person hours worth of work.
Budget:
Each student will have $50 to spend on hardware ($200 per team of four students).
Timeline:
Oct 13 (wed, 1pm): Upload 5 ideas to your team's student google drive.
Oct 13 (wed, 2-4pm): The teaching team will review your ideas with you in class and will provide feedback on which are most suitable for a class project.


Who we are
TechPassion features 10 years of research in Machine Learning and 20 years of experienced engineers in Database Optimization and Data Management.
We master state-of-the-art technologies ranging from data science to Big Data and Cloud.
We help companies...
• Understand and overcome their machine learning issues. We address questions from "what to do with my data" to "how can I get value from my business and decisions" or "how can I upgrade my methods to highly performing ML technologies"
• improve their products and services, treat IoT sensors, and add value with predictive maintenance
• change business models from product-based to a pay-as-you-use service.


| ← Monday→ | |||||||
|---|---|---|---|---|---|---|---|
| hour | 0:00 | 4:00 | 8:00 | 12:00 | 16:00 | 20:00 | 00:00 |
| temp | 2C | 1C | 5C | 3C | 4C | 6C | 2C |
| humidity | 50% | 55% | 63% | 52% | 58% | 65% | 80% |
| conditions | clear | cloudy | fog | hazy | cloudy | snow | night |
| wind speed | 3m/s | 2m/s | 4m/s | 5m/s | 1m/s | 0m/s | 2m/s |
| wind direction | west | west | north west | south west | south | south-east | north-east |


Landing Page
Special Projects
This story is part of a series of specially designed stories that represents some of the best journalism The Post has to offer. Check out the rest of the special projects here.
12/6/2018
Correction: Due to errors in The Post’s analysis of this dataset, a previous version of this report greatly underestimated the salary of many university employees. Information that could not be confirmed has been removed and information about the limitations of the dataset has been added for clarity. This article has been updated with the most accurate information.
The Ohio University Salary Report provides insight into faculty and staff diversity, focusing on gender, age and ethnicity.
Of the 1,197 faculty members, only 75 did not disclose their ethnicity in the data provided by OU. Of OU’s full and part time employees, 2,695 are women and 2,400 are men.
“Faculty salaries are impacted by a variety of factors, including classification (Group I, Group II, or another group), status (full-time versus part time) and duration of employment in a current position,” Loralyn Taylor, interim Associate Provost for Institutional Research said in an email.
According to the faculty handbook, a group I faculty members are on the tenure track. Group I is also broken down into three groups: group I, Group I, or other groups, Taylor said in an email. The averages do not take into account the duration faculty members have been employed.
On average, group I female faculty, make $85,443, while men earn about $94,243. There are 335 women in group I and 531 men.
Comparing salaries with the provided data comes with several limitations. The salary averages don’t account for the fact that many minority employees were hired more recently and therefore earn less. Men are overrepresented in fields such as STEM that tend to be higher paying. Many sample sizes are also too small to calculate a clear correlation.
Group II faculty members are those who are not on the tenure track. On average, group II female faculty make $57,134, while men earn $64,064. There are 198 female faculty members and 133 male faculty members.
There are two group 1 male faculty members that identify as being two or more races. They make the most money out of all group I faculty members, making an average salary of $127,889. The highest earning group I women are Hispanic or Latino, which earn an average of $95,925. There are 12 women in that group.
For the 198 group II women, the average salary is $57,134. For the 133 men, the average salary is $64,064.
The highest earning group II women are Hispanic or Latino women, earning an average of $62,311. There are 3 women in that category. The highest earning group II men are African American, earning an average of $71,933. There are 4 people in that category.
The group I people that makes the least amount of money are men whose ethnicity is listed as international. They earn $76,265 on average. There are 13 group I international men.
The group II category that makes the least amount of money are international women, who earn $44,072. There are two group II international women.
The estimated population of Ohio in 2017 was about 82 percent white. The next highest percentage of full time group 1 and 2 faculty members at OU identify as Asian, making up 7 percent of the population. In 2017, about two percent of Ohioans identified as Asian.
From 2012 to 2016, the number of “underrepresented” faculty members increased 133 percent, according to a previous Post report.
Diversity has been an area of focus for the university this year. In January, Michelle Ferrier, former associate dean of the Scripps College of Communication, said that she felt that her position was removed because of her sex and race, according to a previous Post report. according to a previous Post report.
Abby Gordon | ART DIRECTOR
OU President Duane Nellis and Vice President for Diversity and Inclusion Gigi Secuban recently started the Presidential Commission on the Status of Women, which began meeting in November, Jim Sabin, a university spokesman, said in an email.
The goal of the commission is to develop new strategies to identify key issues and solutions concerning women. The commission will also be cataloging work that has already been completed at the university.
“The commission will ensure that gender diversity and women’s issues remain at the forefront of Ohio University’s mission and awareness,” Sabin said in an email.
In September 2018, OU was given the 2018 INSIGHT Into Diversity Higher Education Excellence in Diversity Award. The award is given to universities that have shown commitment to broadening diversity and inclusion on campus, Sabin said in an email.
Colleges are judged on their student recruitment, retention and programs and hiring practices for faculty. The university is also looking into increasing staffing in the Women’s Center, LGBT Center, the Office for Multicultural Student Access and Retention (OSMAR) and the Multicultural Center.
Landing Page
This story is part of a series of specially designed stories that represents some of the best journalism The Post has to offer. Check out the rest of the special projects here.


famafrench.utils.priormonthToDay¶
-
famafrench.utils.
priormonthToDay
(freq, j_mth, k_mth)[source]¶ Consistent w/ Fama and French (2008, 2016), map the prior (j-k) monthly return strategy into a daily strategy (see Ken French’s online documentation).
- Parameters
- Returns
j_per, k_per –
j_per = j_mth
andk_per = k_mth
iffreq = M
. Otherwise, monthly figures mapped to daily periods using the description found on Ken French’s online documentation:- Return type
Note
Monthly
M
(dailyD
) strategies involve portfolios formed every month t-1 (or day t-1) for month t (or day t).Note
The Fama and French (2008, 2016) momentum strategy definition differs from that of Jegadeesh and Titman (1993). Jegadeesh and Titman (1993) consider J/K strategies, which include portfolios formed on stock performance over the previous J months (excluding the last week or month prior to portfolio formation, to remove the large short-horizon reversals associated with bid-ask bounce) and hold portfolios for K months, where J, K \(\in\) {3,6,9,12}. Future updates to this module will extend this package to include these additional momentum strategies.
References
Fama, Eugene F., and Kenneth R. French. (2008). Dissecting Anomalies, Journal of Finance, 48(4), pp.1653-1678
Fama, Eugene F., and Kenneth R. French. (2016). Dissecting Anomalies with a Five-Factor Model, Journal of Finance, 48(4), pp.1653-1678


Anonymous Online Counseling
First Steps
Start Bootstrap
Home
(current)
Client
Counselors
Resources
Find a Counselor
Enter your information into the following fields and click 'Submit' to receive a list of available counselors to speak to.
Age:
Gender:
Female
Male
Transgender Female/ Male
Other
I prefer not to answer
Sexuality:
Counselor Gender Preference:
Female
Male
No Preference
Area(s) of Need:
(ex. 'Rape, Sexual Assault, Domestic Abuse')


%======================================================================== % Copyright (C) 2019 by Dimitris Kugiumtzis and Alkiviadis Tsimpiris %<EMAIL_ADDRESS>%======================================================================== % MATS-Toolkit Version: 1.1 % The FreeBSD Copyright: % Copyright 1992-2012 The FreeBSD Project. All rights reserved. % Redistribution and use in source and binary forms, with or without modification, % are permitted provided that the following conditions are met: % Redistributions of source code must retain the above copyright notice, % this list of conditions and the following disclaimer. % Redistributions in binary form must reproduce the above copyright notice, % this list of conditions and the following disclaimer in the documentation % and/or other materials provided with the distribution. % "THIS SOFTWARE IS PROVIDED BY THE FREEBSD PROJECT ``AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, % INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR % PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, % % INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT % OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON % ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING % IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." % % The views and conclusions contained in the software and documentation are those of the authors and should not % be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. %========================================================================= % Reference : D. Kugiumtzis and A. Tsimpiris, "Measures of Analysis of Time % Series (MATS): A Matlab Toolkit for Computation of Multiple Measures on % Time Series Data Bases", Journal of Statistical Software, Vol. 33, % Issue 5, 2010 % % Link : http://eeganalysis.web.auth.gr/ %=========================================================================


Toggle navigation
dashboard
forms
Form elements
WYSIWYG
File handling
Validation and wizard
components
Blocks and panels
Buttons
Modals and popups
Tabs, accordion, selectable, sortable
Progressbars
List groups
Messages
Tables
Default tables
Sortable tables
Layouts
Default layout(blank)
Custom navigation
Content scroll
Fixed content
White layout
Charts
Maps
Typography
Gallery
Calendar
Icons
Portlet
widgets
pages
Login
Registration
User profile
Social profile
Edit profile
Mail
Search
Invoice
Contacts
Tasks
Timeline
Email templates
Sample 1
Sample 2
Sample 3
Sample 4
Error pages
403 Forbidden
404 Not Found
500 Internal Server Error
503 Service Unavailable
504 Gateway Timeout
Home
Pages
Edit profile
John Doe
Picture
Save
Browse
Change password
Edit profile
First Name:
Last Name:
E-mail:
Phone:
Gender:
Male
Famale
Birthday:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
01
02
03
04
05
06
07
08
09
10
11
12
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1998
1999
2000
Company
Company Name:
Phone:
Fax:
E-mail:
Job:
Programmer
Web designer
Project manager
Content manager
Tester
Languages:
Settings
Active:
Updating:
Notifications:
Quick upload:
Locations:
Items on page:


A Ballard of Ducks
The railway rattled and roared and swung With jolting carriage and bumping trucks. The sun, like a billiard red ball, hung In the western sky: and the tireless tongue Of the wild-eyed man in the corner told This terrible tale of the days of old, And the party that ought to have kept the ducks.
‘Well, it ain’t all joy bein’on the land With an overdraft that’d knock you flat; And the rabbits have pretty well took command; But the hardest thing for a man to stand Is the feller who says, “Well, I told you so! You should he’ done this way, don’t you know!” I could lay a bait for a man like that.
‘The grasshoppers struck us in ninety-one And what they leave - well, it ain’t de luxe.  And the place was white!
‘There isn’t a turkey or goose or swan, Or a duck that quacks, or a hen that clucks, Can make a difference on a run When a grasshopper plague has once begun; “If you’d finance us,” I says, “I’d buy Ten thousand emus and have a try; The job,” I says, “is too big for ducks!
“‘You must fetch a duck when you come to stay; A great big duck - a Muscovy toff Ready and fit,” I says, “for the fray; And if the grasshoppers come our way You turn your duck into the lucerne patch, And I’d be ready to make a match That the grasshoppers eats his feathers off!”
‘He came to visit us by and by, And it just so happened one day in spring A kind of a cloud came over the sky - A wall of grasshoppers nine miles high, And nine miles thick, and nine hundred wide, Flyin’in regiments, side by side, And eatin’up every living thing.
‘All day long, like a shower of rain, You’d hear ‘em smackin’ against the wall, Tap, tap, tap, on the window pane, And they’d rise and jump at the house again Till their crippled carcases piled outside. But what did it matter if thousands died - A million wouldn’t be missed at all.
‘We were drinkin’ grasshoppers - so to speak Till we skimmed their carcases off the spring; And they fell so thick in the station creek They choked the waterholes all the week.

“We strolled across to the railroad track - Under a cover, beneath some trucks, I sees a feather and hears a quack; I stoops and I pulls the tarpaulin back - Every duck in the place was there, No good to them was the open air. “Mister,” I says, “There’s your blanky ducks!”’
by Banjo Patterson (1917)


The goal is to place N non-attacking queens on an N×N chessboard. For a desired board size, try solving the problem yourself by toggling queen positions and/or let the system solve the rest.


Man sentenced in slip and fall insurance scam
NEW BRUNSWICK, N.J. (AP) - A New Jersey man is not going to prison for orchestrating a slip and fall insurance scam.
Under terms of a plea agreement, a judge on Monday instead sentenced 58-year-old Alexander Goldinsky to probation, community service and ordered him to pay $563.48 in restitution to an insurance company.
Goldinsky had pleaded guilty to insurance fraud.
Middlesex County prosecutors say Goldinsky was an independent contractor working at a company in Woodbridge in 2018 when he threw ice on the floor in the cafeteria and laid down until he was discovered. He sought medical treatment claiming he had a head injury.
His prosecution was part of the state attorney general’s statewide insurance fraud crackdown.
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


THE AMERICAN PRESIDENT A film review by Christopher Null Copyright 1995 Christopher Null
Rob Reiner seems to have found his calling. This time out, Rob has directed THE AMERICAN PRESIDENT, a warm comedy about the difficulties of romance in today's complex society, something of a follow-up to WHEN HARRY MET SALLY..., a warm comedy about the difficulties of romance in today's complex society.
While it ultimately packs nowhere near the punch that WHEN HARRY MET SALLY... did, THE AMERICAN PRESIDENT puts a nice spin on the romantic fable and is a pleasant moviegoing experience. Michael Douglas plays President Andrew Shepherd, a widower and single father who finds himself caught up in a dalliance with environmental lobbyist Sydney Ellen Wade (Annette Bening). What we get to see is a rare treat: watching "the most powerful man in the world" act totally awkward in his pursual of Sydney, and seeing ultra-classy Bening become flustered at the President's advances. Proving himself just an average guy, Andrew flubs his lines on the phone as if he was asking a girl to Homecoming.
The result is an excruciatingly realistic romance, but set in the most absurd of plotlines. You see, Sydney is lobbying for a bill to go to the House, and the President has made a deal with her: if she can get 24 votes he'll send it to the floor. Unfortunately, it soon becomes clear that those votes will come at the expense of votes for the President's golden child, a wishy-washy crime bill. So Andrew has to choose what's more important: the country, or Sydney. Hell, I'd choose Sydney, too.
Okay, it isn't that simple, but it might as well have been. The political drama here is totally corny and makes no statement about anything (except crime is bad and the environment is good), but the sweetness of the love affair ultimately outweighs the plot's defects. We're also given a sober wake-up call about how a gossip-hungry America looks at the personal lives of its leaders.
The supporting cast of Michael J. Fox, Martin Sheen, and Samantha Mathis as the President's advisors is dead-on. Gorgeous sets (with the notable exception of a Camp David that looks straight out of a sitcom) make us feel like we're in the action. All-in-all, a nice date movie, perfect for the holidays.
RATING: ***1/2
\-------------------------------\ |* Unquestionably awful | |** Sub-par on many levels | |*** Average, hits and misses | |**** Good, memorable film | |***** Perfection | \-------------------------------\
-Christopher Null /<EMAIL_ADDRESS>-Movie Emporium (reviews) / http://www.notes.tpoint.net/emporium/ -Contributing Editor, FEEDBACK / http://www.eden.com/~feedback/ -E-mail requests to join the movie review mailing list
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Pirate's Treasure Chest:
A sturdy-looking, waterproof Cargo Box. Could it contain the treasure of the pirates?
Quest


Use the Friends list to add a Toon to your list or stop being friends with a Toon.
You can also make a secret for a friend or type in a friendís secret here, allowing
you to chat openly with them. Open chat is when you can type messages to friends
with the keyboard instead of having to use the messages in the SpeedChat menu.
|
Friends you can only SpeedChat with are shown in red, friends you can SpeedChat and
chat openly with are shown in blue.
|
|
The Friends detail panel has lots of information. On the main panel you can see
your friend's Laff meter. It shows their Laff limit and how many Laff points they
have at that moment.
|
|
Clicking on the blue arrow button at the bottom of the detail panel shows even more.
Here you can see what neighborhood and district your friend is in and what gags your
friend can use.
|
|
Every Toon knows the green chat button is SpeedChat, and you can use it to talk to
any Toon in Toontown. So what is the blue chat button for anyway?
The blue chat button in the upper left of the screen lets you chat openly with your
secret friends. To make a secret friend, click on the Friends button. When your
Friends panel opens, click on the blue Secrets button in the top right corner.
In the Secrets panel you can create a secret for one of your real world friends,
or type in a secret a real world friend has given you. When one of you has typed
in the otherís secret, you can chat openly in Toontown.
|