text:
|This API is superseded by the newer direct proxies API.
See also: the discussion thread on the
es-discuss mailing list.
A tech talk on harmony proxies is available here.
To enable ES programmers to represent virtualized objects (proxies). In particular, to enable writing generic abstractions that can intercept property access on ES objects.
Driving forces:
Stratification avoids confusion between base and meta-level methods. Consider Spidermonkey's "__noSuchMethod__" trap, or Smalltalk's "doesNotUnderstand:" trap: what if an application (accidentally) redefines this method for application-specific purposes and application code performs explicit "object.doesNotUnderstand(...)" requests? This issue is aggravated when additional traps are introduced to not only trap missing methods, but essentially all "meta-level" operations ('get', 'set', 'has', etc.). It becomes unrealistic to have all these names be 'reserved' names with 'special' meaning to the interpreter.
The proxy design makes it impossible to intercept the methods of regular, existing objects. Instead, only the methods of special 'proxy' objects can be trapped. This avoids questions like:
Catch-alls can be defined only on distinct proxy objects, controlled by a handler object. In keeping with the current distinction in the spec between objects and functions, we found that the cleanest approach to catch-alls was to introduce two kinds of proxies: object proxies and function proxies.
Constructing an object proxy:
var proxy = Proxy.create(handler, proto);
Constructing a function proxy:
var proxy = Proxy.createFunction(handler, callTrap, constructTrap);
proto is an optional object representing the proxy's prototype.
callTrap is a
function(...args) { return any; } that reifies "proxy(...args)". Note: The
this-binding of the
callTrap function is the
this-binding of the call-site.
constructTrap is an optional
function(...args) { return any-object; } that reifies "new proxy(...args)". The
this-binding of the
constructTrap is
undefined. If no
constructTrap is provided,
new proxy(...args) is reified as calling the proxy's
callTrap with
this bound to a new object delegating to
proxy.prototype (as per the [[Construct]] algorithm of ES5 Section 13.2.2).
handler is an object that at minimum implements the following API (name denotes a property name, → is followed by return type, [t] means array-of-t, etc.):
{ getOwnPropertyDescriptor: function(name) -> PropertyDescriptor | undefined // Object.getOwnPropertyDescriptor(proxy, name) getPropertyDescriptor: function(name) -> PropertyDescriptor | undefined // Object.getPropertyDescriptor(proxy, name) (not in ES5) getOwnPropertyNames: function() -> [ string ] // Object.getOwnPropertyNames(proxy) getPropertyNames: function() -> [ string ] // Object.getPropertyNames(proxy) (not in ES5) defineProperty: function(name, propertyDescriptor) -> any // Object.defineProperty(proxy,name,pd) delete: function(name) -> boolean // delete proxy.name fix: function() -> { string: PropertyDescriptor } // Object.{freeze|seal|preventExtensions}(proxy) | undefined }
The above methods are the handler's fundamental traps. Additionally, the API defines a set of optional, derived traps:
{ has: function(name) -> boolean // name in proxy hasOwn: function(name) -> boolean // ({}).hasOwnProperty.call(proxy, name) get: function(receiver, name) -> any // receiver.name set: function(receiver, name, val) -> boolean // receiver.name = val enumerate: function() -> [string] // for (name in proxy) (return array of enumerable own and inherited properties) keys: function() -> [string] // Object.keys(proxy) (return array of enumerable own properties only) }
These traps are named "derived" because they are defined in terms of the fundamental traps. For example, the
has trap can be defined by invoking the
getPropertyDescriptor trap and testing whether or not it returns
undefined. The fundamental traps are required, the derived traps are optional. If a derived trap is missing, the proxy performs its default behavior. The rationale for providing optional derived traps for particular operations is that the derived trap may be able to emulate the operation with less allocations. See the "no-op" handler in the following section for a concrete example.
fix trap is introduced to enable a proxy to interact with
Object.seal and
Object.freeze. A non-extensible, sealed or frozen object should somehow restrict the handler's freedom in terms of what it can return from subsequent calls to 'set', 'get' etc. For example, if previous invocations of handler.get(p, "foo") returned a non-undefined value (for some 'handler' of a proxy p), then future invocations of handler.get(p, "foo") should return the same value when p is frozen.
This proposal enforces these restrictions as follows: every time an external object tries to freeze, seal or make a proxy non-extensible, the "fix" trap is invoked on the proxy's handler. At that point, the handler has two options:
This example shows how to implement a proxy that forwards all operations applied to it to an existing object. Many use cases for proxies will probably start from this general pattern, which is why the functionality provided in the below example code is also proposed for standardization as a default forwarding handler.
function handlerMaker(obj) { return { getOwnPropertyDescriptor: function(name) { var desc = Object.getOwnPropertyDescriptor(obj, name); // a trapping proxy's properties must always be configurable if (desc !== undefined) { desc.configurable = true; } return desc; }, getPropertyDescriptor: function(name) { var desc = Object.getPropertyDescriptor(obj, name); // not in ES5 // a trapping proxy's properties must always be configurable if (desc !== undefined) { desc.configurable = true; } return desc; }, getOwnPropertyNames: function() { return Object.getOwnPropertyNames(obj); }, getPropertyNames: function() { return Object.getPropertyNames(obj); // not in ES5 }, defineProperty: function(name, desc) { Object.defineProperty(obj, name, desc); }, delete: function(name) { return delete obj[name]; }, fix: function() { if (Object.isFrozen(obj)) { var result = {}; Object.getOwnPropertyNames(obj).forEach(function(name) { result[name] = Object.getOwnPropertyDescriptor(obj, name); }); return result; } // As long as obj is not frozen, the proxy won't allow itself to be fixed return undefined; // will cause a TypeError to be thrown }, has: function(name) { return name in obj; }, hasOwn: function(name) { return ({}).hasOwnProperty.call(obj, name); }, get: function(receiver, name) { return obj[name]; }, set: function(receiver, name, val) { obj[name] = val; return true; }, // bad behavior when set fails in non-strict mode enumerate: function() { var result = []; for (var name in obj) { result.push(name); }; return result; }, keys: function() { return Object.keys(obj); } }; } var proxy = Proxy.create(handlerMaker(obj));
Notes: It's OK to call handlerMaker on a proxy itself:
get access is forwarded (not delegated), but if
obj[p] is a method, its this-binding will be set to the current receiver (= delegation!) Alternatively, both property access and method invocation can be forwarded (instead of delegated) by defining
get as follows:
get: function(receiver, name) { var prop = obj[name]; return (typeof prop) === "function" ? prop.bind(obj) : prop; }
* independent from catch-alls, there is no reliable way in JS to determine whether a 'set' of the form 'obj[name] = val' succeeded. If an exception is thrown, that exception could either have been thrown because of a failed set, or it could have been thrown by the set accessor of p. If the caller is non-strict, in order to emulate a failed 'set', the 'set' trap should return false rather than throw an exception. So 'set' cannot reliably be emulated for non-strict callers. Regarding the transparent emulation of strict-only code, this is not an issue because all callers will be strict and will expect failed 'set's to always throw an exception.
The proxy handler explicitly sets the
configurable attribute of any property descriptor it returns from
get{Own}Property to
true. If a proxy handler would return a property descriptor whose
configurable attribute is
false, the proxy implementation throws an exception. The rationale is that the implementation cannot verify that the property is indeed non-configurable: a proxy could deceive a program by returning a non-configurable property descriptor but nothing would constrain it to still configure the property afterward. Hence, proxies must always reveal their properties as being configurable. Instead of having the proxy implementation throw an exception when it sees a non-configurable property descriptor, it could also silently modify the descriptor to be configurable before returning it, but that would be likely to mask errors.
For spec purposes:
For ES code:
typeof anObjectProxy === "object"
typeof aFunctionProxy === "function"
anObjectProxy instanceof C iff
anObjectProxy.[[Prototype]] equals or inherits from
aFunctionProxy instanceof Function
=== operator is not trapped (for security reasons:
a === b should not trigger arbitrary code) Instead: proxies have object identity, so
p1 === p2 iff
p1 and
p2 refer to the same proxy. Fixing a proxy does not alter its object identity (the object "generated" by the handler during fixing does not have its own object identity, it retains the object identity of the proxy, upholding the illusion that the proxy "becomes" the object).
Upon fixing an object proxy, the prototype of the generated object is the
proto object passed during proxy construction or
null if none was provided. The prototype of a function proxy is always Function.prototype, and this remains the case when fixing the function proxy.
Rationale for making
fix return an object description, rather than a live object: if the proxy can "become" an existing object, it is not clear whether the proxy should delegate to the existing object or become a "snapshot" of the object. Also, the live object already has a prototype, creating confusion as to which object should become the prototype of the proxy (its
proto or the live object's prototype). If the proxy's prototype changes, it could confuse programs by respond differently to "typeof" and "instanceof" tests. Having the proxy become a fresh object generated from an object description avoids these issues.
Object.isExtensible(proxy) : if proxy is trapping, return true, otherwise (if fixed) return false
handler.fix() returns
undefined, the corresponding call to
Object.seal, or
Object.preventExtensions will throw a
TypeError (Based on the following recommendation from the sepc, section 8.6.2: "When an algorithm uses an internal property of an object and the object does not implement the indicated internal property, a
TypeError exception is thrown.")
In an earlier version of the proposal, a method was defined on
Proxy to distinguish trapping proxies from regular objects or fixed proxies:
Proxy.isTrapping(anObject) → returns true if and only if
anObject is a proxy and is in trapping mode.
A proxy cannot influence the outcome of this method. Once a proxy is fixed, it is in all ways simply a normal object, with no built-in way to detect that it had ever been a trapping proxy.
The current consensus is not to provide this method as it directly breaks "transparent" virtualization of objects (i.e. it makes it easy to write brittle code that might break when substituting some objects with proxies or vice versa). Note that, with the help of the implementor of a certain type of proxies, one could easily build
Proxy.isTrapping on top of Weak Maps:
Proxy.create could insert new trapping proxies in a weak map. If these proxies remove themselves on
fix(), then
Proxy.isTrapping is equivalent to testing whether the proxy is present in the weak map.
Note: a better name for
Proxy.isTrapping would be
Proxy.isProxy. Once a proxy is no longer trapping, it's no longer a proxy altogether. Also,
Proxy.isTrapping(obj) returning
false could signify either that
obj never was a proxy, or that it's now a fixed proxy. Since the difference no longer matters,
Proxy.isProxy more accurately reflects the outcome of the operation.
The Proxy functions
create and
createFunction act as the equivalent of a "mirror factory" in a Mirror API. By replacing Proxy with another object that conforms to its API (by implementing
createFunction and
isTrapping methods), one could create different kinds of proxies using the same API.
This proposal assumes ES-harmony's default "introspection" API (i.e. the
Object.* methods) does not reveal proxies. That is: even methods such as
Object.defineProperty and
Object.getPropertyDescriptor are trapped by the proxy's handler (see below for a complete list).
Proxy.isTrapping method allows programmers to implement their own introspection APIs that potentially reveal proxies. For example, one could define an object that is substitutable for the primordial
Object, redefining all introspective methods such as
Object.getPrototypeOf, etc. For example, proxies could be revealed at the "meta-level" as empty objects rather than invoking their traps:
var MyObject = { getOwnPropertyDescriptor: function(obj, name) { return Object.getOwnPropertyDescriptor( Proxy.isTrapping(obj) ? {} : obj, name); } ... }
By default, this proposal provides no means for code with a reference to a proxy to get a reference to that proxy's handler. This safeguards the integrity of the proxy and its handler, and enforces stratification. For certain types of proxies, it may occur that certain meta-level programs sometimes do require access to a proxy's handler (e.g. because the handler contains meta-data about the proxy that should remain invisible to base-level code). In such cases, the meta-level program can use weak maps in the following pattern:
function makeCustomProxyFactory() { var customProxies = WeakMap(); return { create: function(handler, proto) { var proxy = Proxy.create(handler, proto); customProxies.put(proxy, handler); return proxy; }, handlerOf: function(proxy) { return customProxies.get(proxy); } }; }
For a custom proxy
p, it now becomes possible to reference its handler by invoking
factory.handlerOf(p), given that one has a reference to the custom proxy factory
factory. Note that even using this pattern, stratification is upheld: the handler of
p is retrieved without having to "ask"
p itself.
- The
get trap takes as an argument the receiver of the property access. When the access was performed directly on the proxy, the receiver refers to the proxy and is generally not very interesting (a proxy in this context is useful only as an identity). However, the access may have happened through delegation via the prototype chain, in which case it may be useful for the handler to be able to refer to the original receiver of the property access. Note that the proxy mechanism makes it easy to emulate delegation rather than forwarding of messages, by passing this original receiver argument as the first (thisArg) argument to subsequent
apply invocations.
- The
get trap differs from the more traditional
doesNotUnderstand: traps in that it traps all property accesses, not just missing property accesses, since proxies are always empty. The
doesNotUnderstand: behavior can, however, be emulated by means of a simple pattern: introduce a child object that delegates to a proxy. Client objects may then find existing properties in the child object, all non-existent properties in the child will be trapped by the proxy parent.
- Dynamic generation of methods (as used in various ORM tools like Ruby's ActiveRecord and Groovy's GORM) can be emulated using a similar pattern: introduce a child object that delegates to a proxy, and make sure the proxy's handler can reference this child object. Now, property accesses trapped by the handler indicate methods not understood by the child object. The handler can simply decide to add a new property to the child, such that subsequent invocations will find the generated child property, rather than triggering the handler again.
A simple noSuchMethod-like API can be built on top of this proposal, in a library, without losing the benefits of stratification. One possibility is to define a method named "Object.createHandled", similar to ES5's "Object.create" method, but which allows an additional noSuchMethod trap to be specified:
Object.createHandled = function(proto, objDesc, noSuchMethod) { var handler = { get: function(rcvr, p) { return function() { var args = [].slice.call(arguments, 0); return noSuchMethod.call(this, p, args); }; } }; var p = Proxy.create(handler, proto); return Object.create(p, objDesc); };
Given a convenience function
Object.getOwnProperties(obj), one could write:
Object.createHandled(Parent, Object.getOwnProperties({ ... }), function (id, args) { ... });
This comes close to the
noSuchMethod-style of trapping missing methods, without giving up on stratification (the
noSuchMethod trap itself is still clearly separated from the object itself). The fact that an object literal is passed as an argument to
Object.getOwnProperties is part of the idiom. It ensures that the rest of the application only refers to the 'trapped' object, and there is no need for the programmer to explicitly distinguish the 'trapped' object from the 'non-trapped' object.
The differences between
noSuchMethod-style trapping of missing methods and using the
get trap of proxies are discussed at length in this e-mail thread.
- the value of
this in the body of the
callTrap is significant when a function proxy is being used to emulate a method of another object. For instance:
var fp = Proxy.createFunction({}, callTrap); var o = { name: fp }; o.name(x); // reified as callTrap.apply(o,[x])
- The handler is a regular object. It may delegate to other objects and its delegation chain is completely independent from that of the proxy it handles. A single handler may handle multiple proxies. The handler can be a proxy itself.
- Calling
aProxy.get(...) ,
aProxy.fix(...) explicitly on a proxy will not trigger the proxy's corresponding traps. Instead, the call will be reified like any other, e.g.
aProxy.fix() invokes the handler's
get(aProxy,'fix')() trap. Traps can only be invoked explicitly on a proxy's handler, not on the proxy itself. This enforces stratification (the meta-level traps should not interfere with base-level method names). Thus, proxies continue to work correctly if an application (by accident or by design) uses the names
has, etc.
Interaction between proxies and the
instanceof operator. In ES, the prototype chain is used for both inheritance and "typing". Two cases to consider:
obj instanceof aFunctionProxy
aFunctionProxy can influence the result of this operator if its handler's
get trap returns a meaningful value for the
prototype property. Internally, the
instanceof operator invokes the built-in method [[HasInstance]] on the function, which queries the function's
prototype property.
Note: a function proxy may break the invariant that regular JS objects cannot change their type (the call to
get may return different values for 'prototype' over time), but this is already the case for regular functions anyway.
anObjectProxy instanceof aConstructorFunction
proto object passed to the
Proxy.create method is used to determine the
prototype of the proxy. Hence:
var proxy = Proxy.create(handler, String.prototype); proxy instanceof String // true
This is similar to how
java.lang.reflect.Proxy interacts with Java's
instanceof operator: upon proxy construction, a list of interface types is given such that the proxy will be an
instanceof those interface types.
Rationale for not trapping access to a proxy's prototype:
We could have also reified the [[Prototype]] property on objects as a 'prototype' trap. The downside is that
aProxy instanceof ConstructorFunction can then potentially execute arbitrary code, and that reifying the prototype property for the purposes of
instanceof, but not for the purposes of inheritance could be very confusing for the implementor of the handler.
Rationale for not trapping
instanceof test as an explicit
isInstanceOf(function) trap on the proxy handler:
Security issue: the handler is given a reference to the
function object (the right-hand side of the
instanceof operator). This gives the handler the ability to generate new instances of that function.
Note: allowing proxies to "impersonate" members of existing "types" should not introduce any additional security issues, as the classification mechanism for ES is already unsafe (existing objects can already "impersonate" membership of a "type" (constructor function) by virtue of simply delegating to the function's prototype object).
When a proxy implementation queries a handler for the name of a trap, and the result of the lookup is
The default implementation of the derived traps can be implemented in Javascript itself. This is shown below for expository purposes, but is not a normative part of the Proxy specification (in the following code,
this refers to the handler object, and any references to methods defined on
Function.prototype or
Array.prototype are assumed to refer to the built-in implementations). The function
normalizeAndCompletePropertyDescriptor is defined here.
has: function(name) { return !!this.getPropertyDescriptor(name); }, hasOwn: function(name) { return !!this.getOwnPropertyDescriptor(name); }, get: function(receiver, name) { var desc = this.getPropertyDescriptor(name); desc = normalizeAndCompletePropertyDescriptor(desc); if (desc === undefined) { return undefined; } if ('value' in desc) { return desc.value; } else { // accessor var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); // assumes Function.prototype.call } }, set: function(receiver, name, val) { var desc = this.getOwnPropertyDescriptor(name); desc = normalizeAndCompletePropertyDescriptor(desc); var setter; if (desc) { if ('writable' in desc) { if (desc.writable) { this.defineProperty(name, {value: val}); return true; } else { return false; } } else { // accessor setter = desc.set; if (setter) { setter.call(receiver, val); // assumes Function.prototype.call return true; } else { return false; } } } desc = this.getPropertyDescriptor(name); desc = normalizeAndCompletePropertyDescriptor(desc); if (desc) { if ('writable' in desc) { if (desc.writable) { // fall through } else { return false; } } else { // accessor var setter = desc.set; if (setter) { setter.call(receiver, val); // assumes Function.prototype.call return true; } else { return false; } } } if (!Object.isExtensible(receiver)) return false; this.defineProperty(name, { value: val, writable: true, enumerable: true, configurable: true}); return true; }, enumerate: function() { var trapResult = this.getPropertyNames(); var l = +trapResult.length; var result = []; for (var i = 0; i < l; i++) { var name = String(trapResult[i]); var desc = this.getPropertyDescriptor(name); desc = normalizeAndCompletePropertyDescriptor(desc); if (desc !== undefined && desc.enumerable) { result.push(name); } } return result; }, keys: function() { var trapResult = this.getOwnPropertyNames(); var l = +trapResult.length; var result = []; for (var i = 0; i < l; i++) { var name = String(trapResult[i]); var desc = this.getOwnPropertyDescriptor(name); desc = normalizeAndCompletePropertyDescriptor(desc); if (desc !== undefined && desc.enumerable) { result.push(name); } } return result; }
Note how in all cases, the derived traps cause allocations that can be avoided by having the handler directly implement these traps, rather than to inherit these default implementations.
The advantages of having the proxy implementation provide these defaults is that:
If handler_access_to_proxy is accepted, the above code should be adjusted to trigger the fundamental traps via the proxy, rather than by performing a direct self-send on the handler (e.g. call
Object.getPropertyDescriptor(proxy, name) rather than
this.getPropertyDescriptor(name)). Triggering the fundamental traps through the proxy more accurately reflects the specification.
See the semantics page
In the methods below, we assume
aProxy to be a trapping function or object proxy.
For each of the following methods, proxies can appear to be regular objects.
Object.getOwnPropertyDescriptor(aProxy, name) → trap on aProxy's handler
Object.getOwnPropertyNames(aProxy) → trap on aProxy's handler
Object.defineProperty(aProxy, name, attrs) → trap on aProxy's handler
Object.defineProperties(aProxy, properties) → trap on aProxy's handler
Object.prototype.toString.call(aProxy) → returns "Object" or "Function"
aProxy.toString() is base-level and will be trapped by the
get trap
Object.getPrototypeOf(aProxy) → returns
null or
Object.create(aProxy, properties) → makes a new object that inherits from aProxy
Object.seal(aProxy) → calls
fix on aProxy's handler
Object.freeze(aProxy) → calls
fix on aProxy's handler
Object.preventExtensions(aProxy) → invokes
fix trap on aProxy's handler
Object.isSealed(aProxy) → returns false
Object.isFrozen(aProxy) → returns false
Object.isExtensible(aProxy) → returns true
Object.keys(aProxy) → invokes
keys trap on aProxy's handler
Object.prototype.toLocaleString.call(aProxy) → invokes
aProxy.toString() which traps
Object.prototype.valueOf.call(aProxy) → returns
Object.prototype.isPrototypeOf.call(aProxy, aChild) → returns whether
aChild inherits from
Object.prototype.isPrototypeOf.call(aParent, aProxy) → returns whether
aProxy inherits from
Object.prototype.hasOwnProperty.call(aProxy, name) → invokes
hasOwn trap on aProxy's handler
Function.prototype.apply.call(aFunctionProxy, thisValue, args) → calls
aFunctionProxy's apply trap with arguments
thisValue and
Function.prototype.call.call(aFunctionProxy, thisValue, ...args) → calls
aFunctionProxy's apply trap with arguments
thisValue and
Function.prototype.bind.call(aFunctionProxy, thisValue, ...args) → returns a currying of
Function.prototype.toString.call(aFunctionProxy) → returns the result of
Function.prototype.toString.call(callTrap) where
callTrap is the function proxy's callTrap.
It is safe to create proxies whose handlers are themselves proxies. The following example illustrates that no-op proxies, created using the
handlerMaker function defined above, compose cleanly.
var p2 = Proxy.create(Proxy.create(handlerMaker(handlerMaker(obj)))); // Or, giving each subexpression a name: var h1 = handlerMaker(obj); var h2 = handlerMaker(h1); var p1 = Proxy.create(h2); var p2 = Proxy.create(p1);
Here is how
p2.name is translated into
We use such double-proxying to simplify our membrane implementations below.
As with the simple membrane of figure 9.3, p 71 of Robust Composition, the following is the simplest expository membrane that satisfies the formal property of unavoidable transitive interposition, but is not yet practical. The next example below repairs its flaws.
const makeSimpleMembrane(target) { let enabled = true; const wrap(wrapped) { if (Object.isPrimitive(wrapped)) { // assumed built-in // primitives provide only irrevocable knowledge, so don't // bother wrapping it. return wrapped; } const wrapCall(fun, that, args) { if (!enabled) { throw new Error("disabled"); } try { return wrap(fun.apply(that, args.map(wrap))); } catch (e) { throw wrap(e); } } const baseHandler = handlerMaker(wrapped); const revokeHandler = Proxy.create(Object.freeze({ get: const(rcvr, name) { return function(...args) { return wrapCall(baseHandler[name], baseHandler, args); } } })); if (typeof wrapped === "function") { const callTrap(...args) { return wrapCall(wrapped, wrap(this), args); } const cTrap(...args) { if (!enabled) { throw new Error("disabled"); } try { return wrap(new wrapped(...args.map(wrap))); } catch (e) { throw wrap(e); } } return Proxy.createFunction(revokeHandler, callTrap, cTrap); } else { return Proxy.create(revokeHandler, wrap(Object.getPrototypeOf(wrapped))); } } const gate = Object.freeze({ enable: const() { enabled = true; }, disable: const() { enabled = false; } }); return Object.freeze({ wrapper: wrap(target), gate: gate }); }
... depends on the proposal for spread arguments.
handlerMaker function is defined above and defines the handler for a no-op forwarding proxy.
For now, the assumed built-in
Object.isPrimitive could be implemented as:
Object.isPrimitive = function (obj) { return obj !== Object(obj) }
The following elaboration of the above example preserves the boundary between two sides we name "wet" and "dry". When a wet object travels towards the dry side, the membrane stretches to wrap it, keeping it wet (exposing it only to other wet objects), while exposing a mostly transpa
rent but dry wrapper around it to the dry side. When the same wet object is moves towards the dry side again, the same dry wrapper is produced, preserving corresponding object identity on each side of the membrane.
When this dry wrapper travels back towards the wet side, the original wrapped wet object appears rather than a double wrapping, so calling a dry wrapping of a wet function with a dry wrapping of a wet argument will cause the wet unwrapped function to be called with the wet unwrapped argument. Neither side sees its own objects unnecessarily wrapped.
And vice versa of course. This is much like the covariance/contravariance logic of higher order contracts and the left/right relationships in linguistic symbiosis / inter-language reflection. Although the logic of asDry and asWet below are exact mirror images, we duplicate the code rather than making it yet more abstract and hard to follow.
const makeMembrane(wetTarget) { let wet2dry = WeakMap(); let dry2wet = WeakMap(); const asDry(wet) { if (Object.isPrimitive(wet)) { // primitives provide only irrevocable knowledge, so don't // bother wrapping it. return wet; } const dryResult = wet2dry.get(wet); if (dryResult) { return dryResult; } const wetHandler = handlerMaker(wet); const dryRevokeHandler = Proxy.create(Object.freeze({ get: const(rcvr, name) { return function(...dryArgs) { const optWetHandler = dry2wet.get(dryRevokeHandler); try { return asDry(optWetHandler[name](...dryArgs.map(asWet))); } catch (eWet) { throw asDry(eWet); } }; } })); dry2wet.set(dryRevokeHandler, wetHandler); if (typeof wet === "function") { const callTrap(...dryArgs) { return asDry(wet.apply(asWet(this), dryArgs.map(asWet))); } const cTrap(...dryArgs) { return asDry(new wet(...dryArgs.map(asWet))); } dryResult = Proxy.createFunction(dryRevokeHandler, callTrap, cTrap); } else { dryResult = Proxy.create(dryRevokeHandler, asDry(Object.getPrototypeOf(wet))); } wet2dry.set(wet, dryResult); dry2wet.set(dryResult, wet); return dryResult; } const asWet(dry) { if (Object.isPrimitive(dry)) { // primitives provide only irrevocable knowledge, so don't // bother wrapping it. return dry; } const wetResult = dry2wet.get(dry); if (wetResult) { return wetResult; } const dryHandler = handlerMaker(dry); const wetRevokeHandler = Proxy.create(Object.freeze({ get: const(rcvr, name) { return function(...wetArgs) { const optDryHandler = wet2dry.get(wetRevokeHandler); try { return asWet(optDryHandler[name](...wetArgs.map(asDry))); } catch(eDry) { throw asWet(eDry); } }; } })); wet2dry.set(wetRevokeHandler, dryHandler); if (typeof dry === "function") { const callTrap(wetArgs) { return asWet(dry.apply(asDry(this), wetArgs.map(asDry))); } const cTrap(...wetArgs) { return asWet(new dry(...wetArgs.map(asDry))); } wetResult = Proxy.createFunction(wetRevokeHandler, callTrap, cTrap); } else { wetResult = Proxy.create(wetRevokeHandler, asWet(Object.getPrototypeOf(dry))); } dry2wet.set(dry, wetResult); wet2dry.set(wetResult, dry); return wetResult; } const gate = Object.freeze({ revoke: const() { dry2wet = wet2dry = Object.freeze({ get: const(key) { throw new Error("revoked"); }, set: const(key, val) {} }; } }); return Object.freeze({ wrapper: asDry(wetTarget), gate: gate }); }
WeakMap refers to the weak maps proposal. By using weak maps, graph structures that cross the membrane remain as collectable as they would be if the membrane were not there. An unreferenced cycle of wet and dry object and their wrappers is still not strongly referenced, even if the membrane is strongly referenced, and so may be collected.
To illustrate another point, an additional change is that, rather than enabling and disabling with the gate, this gate does a single one-way revoke, permanently disabling the membrane. A revoked membrane drops its weak maps, so that the non-collectability of an object on one side of the membrane no longer prevents collection of its twin on the other side. If a subgraph is fully surrounded by a membrane, then once that membrane is revoked, that subgraph is necessarily collectible. Not only is all its connectivity revoked, its ability to continue to occupy memory is revoked as well.
This example shows how to implement a proxy that represents an eventual reference, enforcing asynchronous property access on an object.
function localFarReferenceMaker(obj) { var pds = Object.getPropertyDescriptors(obj); var nonConfigurableProperties = Object.freeze( Object.keys(pds).filter(function(name) { return !pds[name].configurable; }); var frozenProperties = Object.freeze(nonConfigurableProperties.filter(function(name) { return !pds[name].writable; }); var nonSettableProperties = Object.freeze( frozenProperties.filter(function(name) { return !pds[name].set; }); var nonConfigurableOwnProperties = Object.freeze(nonConfigurableProperties.filter(function(name) { return ({}).hasOwnProperty.call(obj, name); }); var handler = { defineProperty: function(name, desc) { setTimeout(function(){ Object.defineProperty(obj, name, desc); }, 0); }, getOwnPropertyDescriptor: function() { if (nonConfigurableOwnProperties.indexOf(name) >= 0) { return pds[name]; } else { return undefined; } }, getOwnPropertyNames: function() { return nonConfigurableOwnProperties; }, has: function(name) { return nonConfigurableProperties.indexOf(name) >= 0; }, hasOwn: function(name) { return nonConfigurableOwnProperties.indexOf(name) >= 0; }, get: function(receiver, name) { return promiseFor(function(){return obj[name];}); }, set: function(receiver, name, val) { if (nonSettableProperties.indexOf(name) >= 0) { return false; }; setTimeout(function(){obj[name] = val;}, 0); return true; }, delete: function(name) { if (nonConfigurableProperties.indexOf(name) >= 0) { return false; }; setTimeout(function(){delete obj[name];}, 0); return true; }, enumerate: function() { return nonConfigurableProperties.filter( function (name) { return pds[name].enumerable }); }, keys: function() { return nonConfigurableOwnProperties.filter( function (name) { return pds[name].enumerable }); }, fix: function() { return undefined; }, }; return Proxy.create(handler, Object.getPrototypeOf(obj)); }
localFarReferenceMaker should work even if
obj is a host object.
A higher-order message is a message that takes another message as its argument, as explained in this paper.
Higher-order messaging builds upon catch-alls to reify the message as an object. We reify the message as a function of its receiver, by sending the message to a special catch-all named
var msg = _.foo(1,2) msg.selector; // "foo" msg.args; // [1,2] msg(x); // x.foo(1,2)
The following example is based on the higher-order messaging paper, section 2.2:
var salaried = employees.filter(_.hasSalary(1000)); // equivalent to: var salaried = employees.filter(function(e) { return e.hasSalary(1000); });
Here is the code for the
_ object:
// turns messages into functions var _ = Proxy.create({ get: function(_, name) { return function(...args) { var f = function(rcvr) { return rcvr[name](...args); }; f.selector = name; f.args = args; Object.freeze(f.args); Object.freeze(f.prototype); return Object.freeze(f); } } });
Catch-alls climb the meta ladder: a handler's traps potentially enable arbitrary code to be executed in places where the spec does not currently expect this. The intent of this section is to document and collect all places where arbitrary code can now be executed in the spec due to catch-alls.
x is an accessor property (in which case [[Get]] and [[Put]] could execute arbitrary code). With catch-alls, this statement could execute arbitrary code without 'x' having to be an accessor property, as simply checking the existence of
x in
proxy triggers the proxy's
has trap.
Object. However, calls to these static methods could already execute arbitrary user code if these methods were previously "monkey-patched".
x.y expands to
type(x).__getattribute__(x, "y"). Getting the
__getattribute__ property of
type(x) expands similarly; this eventually bottoms out in a built-in type. The same mechanism is used for operator overloading. The main difference from the present proposal is that in Python, the
__getattribute__ hook is on
type(x) and not a separate handler object; i.e. the Python equivalents of "prototype" and "handler" are not separable.
In ES5,
Object.getOwnPropertyDescriptor and
Object.defineProperty convert between objects representing property descriptors (aka "property descriptor objects") and internal property descriptors. A question that arises with the introduction of Proxies is whether the
get{Own}PropertyDescriptor and
defineProperty traps can return, resp. receive an arbitrary property descriptor object or whether it can only return/receive a "normalized" version.
A "normalized" property descriptor object is an ECMAScript
Object with the following constraints:
{writable:true, configurable: true, enumerable: true} (these are meta-attributes: attributes of properties representing attributes)
enumerable and
configurable have a boolean value
get and
set refer to either
undefined or a callable value
value and
writable are mutually exclusive with the properties
get and
In the current proxies_semantics, the return value of
get{Own}PropertyDescriptor and the descriptor argument to
defineProperty are replaced by a normalized property descriptor object. In the case of
get{Own}PropertyDescriptor, the normalized descriptor is completed, in the case of
defineProperty it is not. In both cases, any enumerable own or inherited properties on the original object are copied to the normalized property descriptor, so that non-standard attributes are not lost in the conversion process. This allows the Proxy API to be used to experiment with non-standard property attributes. When a proxy is fixed, non-standard attributes are lost.
Potential alternatives:
Object.toPropertyDescriptor that enables manual normalization. It would then be up to any client object to protect itself against inconsistent property descriptors returned by
Object.get{Own}PropertyDescriptor(val,name) when
val is a proxy.
— Tom Van Cutsem 2011/07/12 12:10
Proxies as presented here cannot emulate non-configurable properties. If the
getOwnPropertyDescriptor trap returns a property descriptor whose
configurable attribute is
false, that attribute should either be set to
true or a
TypeError should be raised. This is probably too restrictive: we want proxies to be able to emulate non-configurable properties, but without breaking the invariants associated with non-configurable properties (e.g. a non-writable, non-configurable property's value should be stable). According to MarkM, even host objects are not allowed to violate these invariants.
See the fixed_properties strawman. — Tom Van Cutsem 2011/07/12 12:17
How to deal with inconsistent data returned by handler traps? Should a proxy implementation normalize inconsistent data, should it throw, or should it do nothing at all (allowing built-ins such as
Object.keys to return data that a non-proxy implementation could never return)? This issue was discussed at the July TC39 meeting, but not resolved. Validating all trap results could be costly, and could be deferred to a Javascript wrapper around the built-ins. On the other hand, implementations might be able to perform the validation much faster than a Javascript wrapper, and in some cases may already need to perform such validation anyway to maintain internal consistency (this happens in particular when fundamental traps are invoked as part of the default behavior of a missing derived trap. In this case, the implementation may need to interact further with the return value of the trap). We probably need to look at these problems on a case-by-case basis, as it is not clear how much validation is necessary/can be afforded:
getOwnPropertyNames or
keys contains duplicate property names: silently filter them out, leave them, or throw?
getOwnPropertyNames: should all values in the returned array be coerced to
String before being returned to the user? Should the array be copied (since a handler may still hold on to it)?
— Tom Van Cutsem 2010/08/04 06:24
TC39 Meeting 1/28/10 (Mozilla):
callTrap and
constructTrap of function proxies into regular traps of the handler.
typeof and
[[Class]]. Perhaps these could be virtualized but kept constant by passing appropriate values for
typeof and
[[Class]] to the
Proxy constructor. The alternative API does virtualize
typeof in this manner.
Proxy object is likely to become available through a module.
enumerate trap should be aligned with that mechanism.
Feedback based on spidermonkey prototype:
Proxy.isTrapping breaks transparent virtualization of objects. If there is no good use case for
Proxy.isTrapping, we should remove it, enabling completely transparent object virtualization. One potential use for
Proxy.isTrapping is that it allows alternative meta-level APIs to reflect on proxies differently (c.f. the "Interaction with Object.* introspective API" section above).
p is a proxy,
p[15] should call the handler's
get trap with the property name bound to the string
"15", not to the number
for-in loop in the order in which they appear in the array returned by the
enumerate trap.
enumerate is a snapshot of the proxy's properties at the start of an enumeration. If a proxy becomes fixed while enumerating its properties, the enumeration should continue based on the original snapshot. However, properties that no longer exist in the fixed object should be skipped.
enumerate() on
for-in loops in progress?
TC39 Meeting 3/24/10 (Apple):
invoke trap.
Proxy.isTrapping. It directly breaks transparent object virtualization. It's easier to add it later if it turns out that there is a valid use case.
Proxy.createHandler(target), but the API is not yet settled). Rather than trying to come up with additional useful handlers, we should develop more experience in writing proxy handlers and see what abstractions emerge. Additional proxy handlers could be defined as a separate strawman.
className parameter to
Proxy.create in spidermonkey should not be standardized. Objects should not be able to virtualize the
[[Class]] built-in property. However,
Object.prototype.toString.call(proxy) will reveal proxies if the object they are proxying has a non-
Object or non-
constructTrap argument to
Proxy.createFunction can be optional. If absent,
new aFunctionProxy() calls the
[[Construct]] built-in method of the
fix and
enumerate. W.r.t
enumerate, a proxy could return a proxy for an array. Additionally,
enumerate should be modified as soon as there is a solid proposal for generators/iterators. Proxies for large objects could resist being fixed. This solution is satisfactory as long as no part of the spec depends on an object being non-extensible/sealed/frozen.
— Tom Van Cutsem 2010/03/26 15:45
TC39 Meeting 5/24/10 (Google):
proxy[obj] would pass
obj uncoerced to the
get trap: this change would be inconvenient for existing implementations, who would no longer be able to eagerly coerce property names to strings. Proposal withdrawn.
fix() on a proxy handler while the same proxy is already being fixed (an earlier call to
fix() is already on the stack)? Proposed solution is to throw a type error when calling
fix() recursively. No objections were raised.
enumerate() trap by an
iterate() trap, allowing proxy properties to be enumerated "on demand". There was agreement about the general idea, but confusion about the details of the iterator API.
— Tom Van Cutsem 2010/05/26 01:34
TC39 Meeting 7/29/10 (Microsoft):
enumerateOwn trap to
keys. No objections were raised.
keys, then
Object.keys(proxy) will instead call the fundamental
getOwnPropertyNames trap, and filter out the non-enumerable properties from the returned array. Proxy handler implementors could get the derived traps for free (and with a more efficient default implementation). Also, this semantics makes it easier for later versions of the spec. to add new derived traps: existing handlers that don't implement the new derived traps will not crash, but rather fall back on a reasonable default behavior. Note: this semantics doesn't break the "double lifting" technique. No objections against this alternative semantics were raised.
Object? In other words, is
typeof (new functionproxy()) guaranteed to be
"object"? Previously, the answer was yes, but MarkM expressed some concern about primitives being implicitly wrapped, and Brendan noted it might get in the way of possibly future user-defined value types. There was consensus that Proxy.[[Construct]] should not perform a
ToObject conversion. We changed the semantics such that
new functionproxy() returns whatever the
construct trap returns (primitives are not wrapped).
Object.* methods. Disagreement about how to deal with this. One camp, voiced mostly by MarkM, advocates "as much validation as we can stand". Another camp, voiced mostly by Allen, advocates doing a minimum amount of validation, deferring more elaborate validation to a layered implementation (in Javascript itself). MarkM: not sure whether validation can be done in JS efficiently, since it involves a.o. checking duplicate property names (for the return value of
enumerate and
getOwnPropertyNames). Allen: proxies should not be prohibitively expensive to use due to costly validation checks. MarkM notes that the "more validation" path could be an easier way forward, as it needs testing against implementation costs, which can be done. The "less validation" path needs testing against web compatibility with an ES5-based web, which doesn't exist yet.
— Tom Van Cutsem 2010/08/05 01:53
TC39 Meeting 9/30/10 (Mozilla):
Object.defineProperty(proxy,name,pd) on a trapping proxy triggers that proxy's
defineProperty(name,desc) trap. What should the
desc argument be bound to? Should it be bound to
pd directly, or should it be bound to
ToPropertyDescriptor(pd)? A problem with coercing using
ToPropertyDescriptor(pd) is that this drops non-standard attributes, making these inaccessible to the proxy. Agreement to tweak the semantics of
Object.defineProperty for proxies such that the
defineProperty trap gets a property descriptor that was coerced using
ToPropertyDescriptor but still has the non-standard attributes (they are copied from the argument object to the coerced property descriptor). See the updated semantics of Object.defineProperty.
— Tom Van Cutsem 2010/10/01 16:04
TC39 Meeting 1/20/11 (Yahoo):
— Tom Van Cutsem 2011/01/26 08:17
The paper Virtual Values for Language Extension sketches an extension of these proxies to also cover primitive values, working in a simpler language than Javascript. — Cormac Flanagan 2010/07/29 21:50
I wrote up a small tutorial on proxies. Still under construction, but may be helpful. — Tom Van Cutsem 2010/08/23 00:13


text:
Learn More, Earn More!
Workers' Education Program
800 Purchase Street
New Bedford, MA 02740
(508) 999-4047
Mission Statement
To provide each and every adult with opportunities to develop literacy skills needed to qualify for further education, job training, and better employment, and to reach his/her full potential as a family member, productive worker, and citizen.
MA Dept. of Elementary and Secondary Education ACLS

subset: commoncrawl


text: It's a beautiful day on the field of the Compton Croquet Club, when Baron and friends are rudely interrupted by greedy land developer Phil Badaxster, who threatens to turn the entire city into a giant parking lot. Baron and Badaxster enter into the ultimate croquet challenge -- with Baron fighting to save the community. Badaxster whacks Baron's ball out of the park ... but the game's not over yet. Baron follows his ball all over South L.A., tasting some fried turkey soul tacos in Compton and Indonesian delicacies in Bellflower, before finding his inner Samoan warrior in Long Beach.Read More


text:
Assassin's Creed 3 - Wii U
by Ubisoft | Item #: 58808 | Model #: 350405 |
We're sorry, this item is not available in your selected Club. Check another Club
About this itemRating: M for Mature
The American Colonies, 1775. It's a time of civil unrest and political upheaval in the Americas. As a Native American assassin fights to protect his land and his people, he will ignite the flames of a young nation's revolution. As a Native American assassin, eliminate your enemies with guns, bows, tomahawks, and more! From bustling city streets to the chaotic battlefields, play a critical role in the most legendary events of the American Revolution including the Battle of Bunker Hill and Great Fire of New York.
- Stunning new technology revolutionizes gaming with powerful graphics, lifelike animations, immersive combat and advanced physics.
- With the Wii U Controller, gain quick access to two major pillars of Assassin's Creed. Always know where your enemies are with a larger and more expansive overhead map right at your fingertips.
- Once the fighting begins, easily change your weapons on the fly with touch controls to vary your combos without ever stopping the action on-screen.
Assembled Country
United States
Component Country


text:
I have gotten the "weed" snickers from the peanut gallery from time to time. Not recently however. I guess everyong has gotten pretty used seeing me with tea.
However, the worst comment used to come from the same "friend" who would ask if I was drinking pee anytime she saw me drinking Chinese green tea. It was not funny the first time, and it did not get funny with each successive reference. She thought it was quite humorous and would be sure to laugh ... alone albeit.
I guess I am just not into pee humor.


text:
Loch Ossian Youth Hostel weather map
- Recent locations
Your chosen location:
City of London
An error has occurred.
Weather type
Forecast summary
Regional forecast for Highlands & Eilean Siar
Patchy rain in the west, dry in the east. Mild.
Mostly cloudy with a little light rain or drizzle across the west at times Dry across the northeast with some brightness at times. Windy in the far northwest with strong southwesterly winds. Maximum Temperature 10 °C.
Staying largely cloudy this evening and overnight with some patchy light rain and drizzle across the west. Dry in the northeast with some clear periods and becoming rather cold. Minimum Temperature 6 °C.
Mainly cloudy with the chance of some rain or drizzle at times across the west, dry with some occasional brightness in the northeast. Still breezy in the northwest. Maximum Temperature 9 °C.
Outlook for Friday to Sunday:
Becoming largely dry with variable amounts of cloud and some bright or clear periods. Becoming a little colder with some the chance of overnight frost inland.
Updated at: 0301 on Wed 18 Jan 2017
UK forecast for the next 5 days
Rather cloudy and mostly dry. Brighter in the south-east.
Another rather cloudy and mild day for most with a little light rain or drizzle, mainly in the north-west, although more persistent over Shetland. Chilly in southern, south-eastern and central England, but with some sunshine in the south and south-east.
Rather cloudy and mild for most with a little drizzle and hill fog in places. Clearer and colder in the south and south-east with a frost, turning cloudier later.
Cloudy for most with patchy drizzle in the north-west. Perhaps a little cloudier in the south-east, best of the brightness in the south, south-west and north-east. Chilly in the south.
Outlook for Friday to Sunday:
Remaining generally settled through the weekend, rather cloudy at first but more in the way of sunny spells by Sunday. Turning colder for most with overnight frosts becoming more widespread.
Updated at: 0036 on Wed 18 Jan 2017
Outlook for the UK over the next 6-30 days
UK Outlook for Sunday 22 Jan 2017 to Tuesday 31 Jan 2017:
High pressure is likely to continue to dominate across the UK on Sunday, bringing rather cloudy skies across much of the north. However, southern counties will see generally colder and brighter conditions, though with a risk of frost and fog forming overnight too. Looking ahead into the next working week, more unsettled conditions may spread into the north and west which will bring some spells of rain at times here. The unsettled and at times windy conditions are likely to spread south and east through the week, which will bring milder conditions to most and outbreaks of rain at times across the country. The bulk of the rain is likely to be in the west.
Updated at: 1214 on Tue 17 Jan 2017
UK Outlook for Wednesday 1 Feb 2017 to Wednesday 15 Feb 2017:
Looking ahead to the start of February the most likely scenario is that Atlantic low pressure systems will bring spells of wet and windy weather to all at times, though this will be interspersed with drier and brighter interludes. Temperatures will generally be around average for this time of year, though it will turn milder again at times. There is a possibility that an area of high pressure will become dominant again, towards the middle of February, bringing more settled conditions with the return of overnight frost and patches of fog. However, confidence regarding this detail is low.
Updated at: 1212 on Tue 17 Jan 2017
Location Details
Loch Ossian Youth Hostel
Location: 56.7662, -4.6714
Altitude: 391.0 m above mean sea level


text:
0 Members and 1 Guest are viewing this topic.
Bill - Do they give more instruction on building the curing chamber in the second book? Is that one you are using your own design? Looks fantastic. I tried the guanciale from the first book and it was a disaster (I think it was from the first book?).John
John,No building instructions in the book. I'm using an old, tall wine fridge set to the desired temp. Unlike the smaller wine cooler I converted for fermenting and proofing bread, this one has no need for a heat source since the ambient temp in the garage is higher than the target temp. A little humidifier attached to a humidity control is the main addition. There is very small fan inside to circulate the air. There is no need for any form of dehumidification since the climate here is very dry. I leave the door about 1/8" open to keep the air fresh. The problem is that the garage now smells like a delicatessen, which is driving the dogs crazy.
Is that angel hair pasta and, if so, did you make it yourself?
Looks great, almost like a Carbonara pasta, which I love!! I'll be making some pasta with this new batch of Capicola for sure. Do you have a recipe you would share with what you have there??
Thank you sir. Kind of like a baked Carbonara, sounds great!jon
Yolk-rich pasta sheets from a French Laundry recipe.
Is that the Angnolotti recipe from French Laundry? I love that one.
Lardo still has about 4 months to go. I see it every time I open up the refrigerator and wonder whether, inside the black wrapping, the fat is developing into something amazing or whether it has been slowly putrefying.


text:
Just got my Shinchas today. 1st one to brew is Den's Kunpu. It's quite mellow and I get a bit of a minty after taste. I brewed it north american style with an infuser basket in a porcelain 18oz pot. It's how I brew most my teas and to get a fair comparison I thought consistency best.
170 deg at 3 mins gave a nice cup. 2nd infusion was 4 mins at the same temp, another beautiful mellow cup. By the 3rd infusion it started to weaken, but still had it's mild grassy flavour.
This is my 1st Shincha from Den's and I'm quite pleased with Chip's selection. I didn't give any choices because I wanted them to be a surprise. Thanks for the tea Chip!


text:
TreasureHunt Treasure 1. A beautiful cup/wan from Bill of SplitFirePottery ... Surprise, it is NOT turquoise. I believe this piece was fired on its side, resting on 3 shells?
Winner TBD and announced later!!!
yinwenqian wrote:looks very nice
T-session wrote:Also I am working on new items... no particular reason... ummm... just wanted to. I am firing again in the near future. I'll keep you posted.
rhondabee wrote:I think I see my kyusu in that beautiful turquoise glaze? I think that must be the little turtle on the lid


text:
>> Hotels near Pachakanam
Call Support for Booking!
+91 9211177444(operating window 10AM to 9PM IST)
Hotels near Pachakanam, Thekkady
If you are planning a vacation in Thekkady, then you must go visit Pachakanam. It is an intrinsic part of the socio-cultural landscape and hence, offers an insightful peek into life, as it exists in Thekkady . Read more
Super Saver deals on Hotels near Pachakanam, Thekkady
- Vedanta Wake Up - Kumily Town Center, Thekkady (15.6 km from Pachakanam) Book now and save 15% on each night
- The Mountain Courtyard, Thekkady (15.6 km from Pachakanam) Save 20% on Mon, Tue, Wed, Thu, Fri, Sat and Sun
- Niraamaya Retreats Cardamom Club, Thekkady (15.9 km from Pachakanam) Save 40% on Mon, Tue, Wed, Thu, Fri, Sat and Sun
- Hotel Sandra Palace, Thekkady (16.0 km from Pachakanam) Save 7% on each night
- Kofiland, Thekkady (16.4 km from Pachakanam) Save 10% on Sun, Mon, Tue, Wed, Thu, Fri and Sat
We have handpicked the Best 9 hotels near Pachakanam, Thekkady, See all 354 hotels
Nearest Luxury Hotels
Luxury Hotels near Pachakanam, Thekkady
The Mountain Courtyard
Kumily, Thekkady
Kumily, Thekkady
|15.6 km from Pachakanam
Rs. 8,064
Rs. 6,664
Per Room Per Night
Save 20% on Mon, Tue, Wed, Thu, Fri, Sat and Sun
Kumily, Thekkady
Kumily, Thekkady
|16.4 km from Pachakanam
Rs. 13,749
Rs. 12,374
Per Room Per Night
Save 10% on Sun, Mon, Tue, Wed, Thu, Fri and Sat
The Sicilia Hotel
Rs. 2,138
Per Room Per Night
Nearest Value for Money Hotels
Value for Money Hotels near Pachakanam, Thekkady
Aranya Nivas KTDC Inside Periyar Tiger Reserve
Kumily Thekkady Road, Thekkady
Kumily Thekkady Road, Thekkady
|4.4 (Based on 13 Reviews)Excellent
|13.3 km from Pachakanam
Rs. 5,467
Per Room Per Night
Springdale Heritage
Kumily Thekkady Road, Thekkady
Kumily Thekkady Road, Thekkady
|4.5 (Based on 2 Reviews)Excellent
|13.7 km from Pachakanam
Rs. 6,395
Per Room Per Night
Hotel Tigers Roare
Kumily, Thekkady
Kumily, Thekkady
|15.1 km from Pachakanam
Rs. 4,155
Per Room Per Night
Nearest Budget Hotels
Budget Hotels near Pachakanam, Thekkady
Tabernacle Resort
Mullayar, Thekkady
Mullayar, Thekkady
|14.3 km from Pachakanam
Rs. 3,938
Per Room Per Night
Green Palace
Thekkady Road, Thekkady
Thekkady Road, Thekkady
|15.0 km from Pachakanam
Rs. 3,300
Per Room Per Night
Jungle Palace
Kumily, Thekkady
Kumily, Thekkady
|15.2 km from Pachakanam
Rs. 1,560
Per Room Per Night
Pachakanam, ThekkadyA visit to Pachakanam can also be combined with other tourist attractions across the city. With its delectable cuisines, and opportunities to explore the surrounding areas, Thekkady is perfectly poised to offer an experience that is both, authentic as well as unique! There are many ideal locations to visit in and around this wonderful city, with prominent local landmarks and favourable restaurants being just a few examples. Make a trip to Thekkady and its exciting places of interest to enjoy a memorable vacation. A visit to Pachakanam will give you a greater insight into the various cultures and traditions of Thekkady .
Nearby Places of Interest :
- Hotels near Anchuruli View Point
- Hotels near Art Gallery Thekkady
- Hotels near Aruvi Kuzhy
- Hotels near Bullock Cart Ride
- Hotels near Bus Station Chellarkovil
- Hotels near Calvary Mount
- Hotels near Cellar Kovel View Point
- Hotels near Chellarkovil Waterfalls
- Hotels near Churuli Falls
- Hotels near Crusoe Island
- Hotels near Eco Trails Kerala
- Hotels near Boating, Elephant Ride, Cultural Program
- Hotels near Elephant Ride
- Hotels near Golden Dragon
- Hotels near Green Walk
- Hotels near Idukki Arch Dam
- Hotels near Idukki Hydro Electric Project
- Hotels near Jeep Safari
- Hotels near Kalari How Kadhakali
- Hotels near Kambum Bus Station
- Hotels near Kattappana
- Hotels near Kattappana Spice Trading Market
- Hotels near Kumily Grampi
- Hotels near Kuravan Mount
- Hotels near Manakkavala
- Hotels near Mangala Devi Temple
- Hotels near Mangaladevi Hills
- Hotels near Mayapott Grape Vineyard
- Hotels near Murikaddy
- Hotels near Natural Walk
- Hotels near Ottakalmedu
- Hotels near Pandikuzhi
- Hotels near Paradesi Synagogue
- Hotels near Paruthumpara
- Hotels near Pavarasu
- Hotels near Peerumedu Tea Gardens
- Hotels near Periyar Boating
- Hotels near Periyar Dam
- Hotels near Periyar Lake
- Hotels near Periyar Ottakathalamedu
- Hotels near Perumedu
- Hotels near Plantation Tours
- Hotels near Pullumedu
- Hotels near Ramakkal Medu
- Hotels near Sandalwood Forest
- Hotels near Spice Gaarden
- Hotels near Spice Park (indian Govt) Auction Centre
- Hotels near Spice Plantations
- Hotels near Tamil Nadu Check Post
- Hotels near Tea Plantation
- Hotels near The Arubi Creek
- Hotels near The Avenue Regent
- Hotels near The Periyar Wildlife Sanctuary
- Hotels near Periyar Tiger Interpretation Centre, Thekkady
- Hotels near Thekkady Boating
- Hotels near Thekkady Lake
- Hotels near Thekkady Periyar Tiger Reserve
- Hotels near Thodupuzha
- Hotels near Tribal Museum, Kumily
- Hotels near Vandanmedu
- Hotels near Wild Reserve
Areas in Thekkady:
- Amalambika Road Hotels
- Ambadi Junction Hotels
- Anakkara Hotels
- Anavachal Hotels
- Byepass Road Hotels
- Chellarkovil Hotels
- Kumily Hotels
- Kumily Road Hotels
- Kumily Thekkady Road Hotels
- Lake Road Hotels
- Mangaladevi Road Hotels
- Mullayar Hotels
- Munnar Road Hotels
- Murukady Hotels
- Nadukani Hotels
- Periyar Hotels
- Ramakkal Mettu Hotels
- Rosapookandam Hotels
- Sbt Road Hotels
- Thamarakkandam Hotels
- Thekkady P O Hotels
- Thekkady Road Hotels
- Vandanmettu Hotels
- Vandiperiyar Hotels
- Accommodation in Thekkady
- Club Hotels in Thekkady
- Heritage Hotel in Thekkady
- Resorts in Thekkady
- Spa hotels in Thekkady
More Hotel Types in Thekkady:
- 3 Star Hotels in Thekkady
- 4 Star Hotels in Thekkady
- 5 Star Hotels in Thekkady
Star Hotels in Thekkady:
- Hotels with Arcade/game Room
- Hotels with Atm/banking
- Hotels with Audio-visual Equipment
- Hotels with Ayurveda Clinic
- Hotels with Babysitting Or Child Care
- Hotels with Banquet Facilities
- Hotels with Bar
- Hotels with Barbecue Grills
- Hotels with Beauty Parlour
- Hotels with Boating
- Hotels with Book Shop
- Hotels with Breakfast Services
- Hotels with Business Center
- Hotels with Catering
- Hotels with Central Air Conditioning
- Hotels with Coffee Shop Or Cafe
- Hotels with Concierge
- Hotels with Conventions
- Hotels with Currency Exchange
- Hotels with Cyber Cafe
- Hotels with Fax Machine
- Hotels with Fire Place
- Hotels with Fitness Centre
- Hotels with Gardens
- Hotels with Jacuzzi
- Hotels with Laundry Facilities
- Hotels with Library
- Hotels with Lounge
- Hotels with Medical Services
- Hotels with Picnic Area
- Hotels with Restaurant
- Hotels with Smoke-free Property
- Hotels with Steam Room
- Hotels with Suitable For Children
- Hotels with Swimming Pool
- Hotels with Tea Coffee Maker
- Hotels with Travel Counter


text:
You limited your search to:
Decade: 1930-1939
Collection: World War Poster Collection
America will be as strong as her women.
Date: 1938
Creator: Baldridge, Cyrus Leroy, 1889-1977.
Description: Charcoal sketch of a woman holding up a young girl.
Contributing Partner: UNT Libraries Government Documents Department
Follow me! : men 18-19, these can be yours-- apply now at any U.S. Army recruiting and induction station.
Date: [1939..1945]
Creator: unknown
Description: Black & white photograph on a yellow background. A soldier climbs a hill, his arm raised as if to wave a group onward. At right is an inset titled, "These can be yours". It shows the insignia and monthly base pay for each Army grade (rank).
Contributing Partner: UNT Libraries Government Documents Department
Her Majesty Queen Elizabeth.
Date: [c.1937]
Creator: Wilding, Dorothy, 1893-1976.
Description: Portrait of Elizabeth Bowes-Lyon, Queen Elizabeth [later known as Queen Elizabeth the Queen Mother], Consort of King George VI of England. She wears six strands of pearls, a tiara, and an embroidered dress with three decorations attached to it. One decoration is the Family Order of King George VI, which features a portrait of the King. The decoration on her left breast is the Garter Star, which features St. George's cross.
Contributing Partner: UNT Libraries Government Documents Department
Wings over America : Air Corps, U.S. Army.
Date: 1939
Creator: Woodburn, Tom B.
Description: Color image of four U.S. Army airplanes in flight and a large bald eagle in flight among the planes. The eagle has the same star symbol of the Army Air Force on the underside of its wings as is on the airplane wings.
Contributing Partner: UNT Libraries Government Documents Department


text:
Skip to comments.Eric Holders contempt of Congress citation takes shape - Its go time.
Posted on 05/04/2012 12:02:07 PM PDT by neverdem
Rep. Darrell Issa (R-CA), chairman of the House Oversight Committee, is preparing contempt of Congress charges against Attorney General Eric Holder for his failure to cooperate fully with the investigation into Operation Fast and Furious, the Obama Administrations deadly gun-running program. Warnings were issued, deadlines have passed, and its just about go time.
To this end, Issa has prepared an extensive staff briefing(PDF) on the case, along with a draft of Holders contempt citation. A press release from the House Oversight Committee says the briefing paper explains what happened in Operation Fast and Furious, the hardships faced by the family of fallen Border Patrol Agent Brian Terry in getting truthful answers about his death, how agents who blew the whistle on the reckless operation have faced retaliation, and the carnage in Mexico that Fast and Furious has helped fuel.
Among the lowlights of this paper are the ATFs discovery that two of the top ostensible targets for the operation that pumped thousands of American guns into the hands of Mexican cartel killers were actually FBI informants; Holders failure to provide documents in 12 of the 22 categories set forth in House subpoenas; the stone walls thrown before Agent Terrys family as they investigate his death; an ATF whistleblower whose career was ruined on the pretext of punishing him for downloading $8 worth of applications to his smartphone; the appearance of Fast and Furious guns at crime scenes across Mexico, including the murder of a state Attorney Generals brother; and the dismaying decision of Patrick Cunningham, criminal division chief of the U.S. Attorneys Office in Arizona, to take the Fifth instead of testifying before Issas committee.
At 44 pages in length, Issas briefing paper is one of the most comprehensive summaries of the Fast and Furious scandal you can read online. Issa appeared on Fox News this morning to discuss the case against Eric Holder, noting his reluctance to say to the Administration that weve come to the end. He was very blunt about saying Holders Justice Department has lied to his committee.
In the middle of his appearance, the Justice Department released a statement read to Issa while he was sitting in the studio that said theyve offered just about all the compliance theyre going to. The Congressman did not seem terribly surprised to hear it. Further stonewalling, he said, would be like Richard Nixon offering to release the Watergate tapes in fifty years, and the drop dead date for DOJ compliance with those House subpoenas is immediately.
Holder needs to be in prison.
How long has this fabled order been in process? I have NO faith in Congress and even less that they'll actually sanction Holder. Even in the cosmically small chance they do man up (and do the right thing) 1) the media will brand it as political and/or refuse to report it or 2) Holder et al will simply ignore it. Until Congress mans up and sends some one down to the DOJ w/ cuffs its all just huffing and puffing, more political theater.
We can be sure that Boenher will prevent any citation from taking effect.
It appears this was all Kabuki. We grew so frustrated at FR with Issa's inaction. It appears the schedule is set for a major scandal to blow up in Baby-Doc's face this summer.
We should revel in the coming pleasure of the old media's attempt to turn this away from the Kenyan usurper.
Enjoy my FRiends, ENJOY!
According to his office this morning, he is not preventing anything and is very supportive of Issa.
For what that is worth.
I would like to believe that Issa has timed this citation for exactly the point that you have made.
If Holder ignores a contempt of Congress citation, there is a Constitutional crisis...
...six months before the election.
Timing is everything.
Someone said there was an election coming up...
That is what I have been holding out for.
See post #7 from Jacquerie also.
Boehner's support doesn't mean much, but a lack of opposition on his part would. If we can believe him. It would be great!
"The Strike Force designation also meant that the U.S. Attorneys Office rather than ATF would run Fast and Furious. At the time, the U.S. Attorneys Office in Arizona was led by Dennis Burke, a new political appointee who had previously served as Chief of Staff to then Arizona Governor and now Homeland Security Secretary Janet Napolitano. Earlier in his career, Burke had worked with former White House Chief of Staff Rahm Emanuel on gun control legislation as a U.S. Senate staff member."
Holder is dead political meat.
And the media will play the race card in 3...2...1...
Holder will have it framed and hang it on his office wall with all his other awards and citations.
I don't think they'll wait at all.
Btw, did you catch the launch of the Atlas V a little while ago?
I was thinking the same thing ... matter of fact, seems t'me a read not long ago that Holder's already refused to co-operate no matter WHAT Issa generates.
That is so sweet to end the week.
From what you've posted here, it appears he's not alone.
The support from Boehner is tepid at best. He and Cantor have indicated that they are afraid that the contempt citation will pull the Republicans "off" their message!
Two observations for Boehner and Cantor:
1) How can you be pulled "off message" when no one in the country has a flippin' clue what your message is? You guys have let the Democrats and the media define the argument for years, which is why your support continues to erode.
2) The Attorney General of the United States, acting in collusion with the Department of Homeland Security, and possibly with the Executive Branch, concocted a plan to force law abiding gun dealers to sell weapons to straw buyers who then took them across the border and handed them to members of drug cartels where they have been used to kill hundreds of people, including at least two members of US Law Enforcement. This is THE biggest story of the entire campaign and will awaken and enrage millions of moderate and conservative voters...If you don't understand that, you have no business being in leadership positions!
I hope it is rope-a-dope
Dennis Burke, one of Arizonas most prominent and well-connected Democratic political figures, abruptly resigned as the states top federal prosecutor Tuesday, stirring doubts about earlier expectations that he might mount a bid for governor, attorney general or U.S. senator.
Burke served in Washington as a senior adviser to Homeland Security Secretary Janet Napolitano and in Arizona as her chief of staff when she was governor. His departure as U.S. Attorney comes as congressional investigators and an internal Justice Department inquiry are examining how an Arizona-based federal gun-trafficking investigation may have allowed as many as 2,000 guns to flow to criminals.
That won't get any traction, IMHO, this is a prelude to the impeachment of Holder rt al. just before the August recess. A trial to remove them in the Senate right after the August recess will screw up thier plans for holding the Senate, and it screws up Obama's plan for minority turn out. We're probably looking at reparations for 200 - 300 dead Mexicans!
"Arizona Rep. Paul Gosar, who sits on the committee investigating Fast and Furious, has told me that he believes the responsibility for this lies at the top, in the office of Eric Holder or someplace nearby."
"This move to dump Burke — who oversaw the operation — looks like an effort to make this mess go away."
I'd like to see the Mexican government file an extradition request for Holder to stand trial in Mexico on several hundred counts of Manslaughter.
Former Arizona U.S. Attorney Dennis Burke, who resigned in August, admitted late Tuesday that he leaked a document aimed at smearing Bureau of Alcohol, Tobacco, Firearms and Explosives agent John Dodson, an Operation Fast and Furious whistle-blower.
The memo that leaked this summer ended up being an attempt by Justice Department officials to cast aspersions on Dodson one of the leading ATF Fast and Furious whistle-blowers. Burke admitted he leaked the memo in a Tuesday afternoon letter to Justice Department Inspector General Cynthia Schnedar.
The memo was leaked to press and had the names of criminal suspects deleted but kept Dodsons name on it. Attorney General Eric Holder came under fire during Tuesday mornings Senate Judiciary Committee hearing when he wouldnt answer any questions from Iowa Republican Sen. Chuck Grassley about the leaked memo, who was held accountable for it and how they were held accountable.
Its unclear if Burke was the only DOJ official who leaked documents to smear whistle-blowers, but Dodson thinks Burke did not act alone.
The message is, I think, "It doesn't matter what you want, or what we say, we'll do what we will."
The Republican party, as a whole, is pretty terrible; what stated party planks do they actually forward?
Smaller government? When was the last time there was a government agency disbanded? (Merging and renaming don't count.)
Abortion? Even when we had the Executive and the Legislative, they did not do anything even a symbolic gesture.
Fiscal Responsibility? See the 'smaller government' question.
Anti-corruption? Look at how vigorously (not at all vigorous) they've investigated/prosecuted Fast and Furious.
With Romney as their pick -- just NY-23 on a national scale -- it's obvious that they don't want to listen or do what they say they will. Obama and such are at least honest when they scorn Americans for being "bitter clingers" to Bibles and guns; the Republican party though, "says all the right things" but doesn't do anything about them.
If they blow off Congress, the only alternative I can think of is impeachment.
Hi - nope. Probably will be on the evening news.
Burke of Fast and Furious had anti-gun history
Jan. 28, 2012 10:21 PM
The career path of former U.S. Attorney Dennis Burke can be charted through an ascending string of jobs from Arizona's Supreme Court to the U.S. Senate, White House, Department of Homeland Security and Justice Department.
It is a resume that spans more than two decades in three branches of government.
Then, suddenly, it nose-dives on Aug. 30, 2011, when Burke resigned as U.S. attorney amid a scandal over a gun-smuggling case known as Operation Fast and Furious.
Since that day, the gregarious public servant has gone silent, and nearly invisible, except that his name appears prominently in Justice Department documents, congressional hearings and news reports.
Burke's political downfall may have been shocking, but an Arizona Republic analysis of his career suggests that the cause — firearm politics — has been a pet theme through most of his 23 years in government.
With Romney as their pick -- just NY-23 on a national scale -- it's obvious that they don't want to listen or do what they say they will. Obama and such are at least honest when they scorn Americans for being "bitter clingers" to Bibles and guns; the Republican party though, "says all the right things" but doesn't do anything about them.
Other than reconciliation bills, nothing gets done without 60 votes in the Senate. That's why the rats flipped Arlen Specter and contested the vote count for Al Franken repeatedly until he won.
btw, you are listed as the source (and FR)for a photo. May blog, bottom right side.
We really need to prosecute Obama and force Mooch to repay all the money she has spent on vacations. I know it will likely result in riots from the rioting class, but so be it. squish the head of this swollen pimple.
1) How can you be pulled off message when no one in the country has a flippin clue what your message is?
The message is, I think, "It doesn't matter what you want, or what we say, we'll do what we will."
EXACTLY! Or even worse..."We're the GOP leadership and we'll do what the media tells us to do cause we don't want to get kicked off the invite list to cool parties at Sally Quinn's house!"
Again, I won't hold my breath for much coming of this. I'll be surprised if it goes full cycle.
Neat blog!
Ditto. I have no faith in this Congress doing the right thing.
But will it blow up enough to blow them out of office? If not, it will just incite sympathy from the true racist Democrats and lib-dependent voters, with the Moonbat Media's enormous help.
At least since Janet Reno said she could not comment on, ongoing investigations, worked every time Even when she burned down the Branch Davidian's compound, and sent Elian back. Good lord people have we all been sleeping, this will accomplish nothing.
No TEA Party candidates need apply, that is the message Cantor and his crew have been sending. Boehner has now corrupted all but 4 or 5 of those that were sent there to drain that RINO swamp.
You mean like the fence GW promised then had Kay Bailey yank the funding? That kind of rope-a-dope?
Force the rats to defend the indefensible.
"According to his office this morning, he is not preventing anything and is very supportive of Issa.
For what that is worth."
My Representative (on the committee) assured me that Boehner is on board and was mostly concerned about timing.
And after the Republican Presidential Primary elections are pretty much over so it does not distract from or damage the prospects of Republican candidates.
In order to have a clear cut case of cover up and obstruction of justice, it really helps to have documented a long term pattern of concealment, cover up, witness intimidation and obstruction of justice. Issa has had the damaging evidence against the players of Fast and Furious for a while now, they have been letting Holder and others dig their graves on the cover up and obstruction of justice charges.
All timed to play out perfectly in synch with the pace of the elections. Possibly with a Special Prosecutor appointment and/or indictments in the Fall. Holder really screwed up the time line on this case - it's better to come clean early and get bad news out sooner than later.
This is straight out of Democrat text book Scandal Management 101 and Holder learned his lessons well during the Clinton scandals so the fact that he took this course action suggests that the facts of the case are so damming that the only hope was to try to stonewall and kick the can past Jan 20 ,2013 and hope for an Obama re election and for the Democrats to re take the House and hold the Senate to kill or control any investigation.
Thanks. It's good to have names.
I wonder who is going to be the John Dean of F&F, the highest-ranking flipper?
Eric Holder is a Traitor and needs to go to a Federal Prison.
Go! Darrel Issa!!!
Disclaimer: Opinions posted on Free Republic are those of the individual posters and do not necessarily represent the opinion of Free Republic or its management. All materials posted herein are protected by copyright law and the exemption for fair use of copyrighted works.


text:
Area Police Reports
CHAUTAUQUA – Jordan J. Leeper, 22, of Jamestown was charged at 2:03 a.m. on Thursday with failure to keep right, failure to maintain lane, moving from lane unsafely, driving while intoxicated and driving with a blood alcohol content of .08 percent or greater. Deputies on patrol on Route 394 observed a vehicle make several lane violations. Leeper was later found to be intoxicated and was processed and released. He is scheduled to be back in Chautauqua Court at a later date.
Xiomara Cabrera, 26, of Prendergast Avenue was charged at 2:55 a.m. on Wednesday with speeding, failure to keep right, failure to reduce speed under special hazards, driving while intoxicated and driving with a blood alcohol content of .08 percent or greater. Officers conducted a traffic stop on West Sixth Street for a vehicle that was traveling at a high rate of speed. Cabrera was later found to be driving while intoxicated. Cabrera was transported to Jamestown City Court and was awaiting arraignment.
James A. McCallum, 42, was charged at 2:20 a.m. on Thursday with driving while intoxicated, aggravated driving while intoxicated per se, failure to keep right and improper left turn. Officers observed a vehicle make an improper right turn onto Main Street. McCallum was later identified as the driver and was found to be intoxicated. He was transported to Jamestown City Jail where his blood alcohol content was found to be more than .18 percent. He was held pending arraignment.
Victor A. Gifford, 39, was charged at 11:56 p.m. on Wednesday with criminal obstruction of breathing or blood circulation. Officers responded to Spring Street for a domestic dispute. Police found that Gifford allegedly grabbed a female victim by the throat, causing her breathing to become obstructed. Gifford was taken into custody and was held pending arraignment.


text:
(originally posted on The Will and the Wallet
For thirty-five years, the Egyptian people believed the myth and lived in fear, fear of the security forces and fear of the chaos and instability that might exist without a strong ruler. They have just overcome that fear and created hope. That collective psychic shift was the key to making the change they needed to bring about.
Dying Mantras: The End of "Whole of Government" and "Post Conflict Reconstruction and Stabilization"
The US has spent upwards of $50 billion over the past decade, outside of pure military spending, to try to reconstruct and stabilize Iraq and Afghanistan. Our failures are, by now, legend, by now, but we keep trying, and keep spending.
And we have invented new dogmas, or mantras, about what we are doing, particularly "whole of government" and "post conflict stabilization and reconstruction." DOD is building massive capacity and doctrine to stabilize, help govern, and rebuild countries, or "build partner capacity," as the recent Quadrennial Defense Review puts it. www.defense.gov/qdr/ State and USAID are busily trying to build on existing capacities to develop an even more ambitious role, as reenforced in the new Quadrennial Diplomacy and Development Review. www.state.gov/documents/organization/153108.pdf. And the administration still argues that it is doing better at coordinating these efforts across the government.
Quite a discussion today on the Diane Rehm show involving the future of the defense budget. Kori Schake of the Hoover Institution thinks the budget will not be cut because of emerging threats (China) and because the administration is not projecting a cut. James Kitfield of National Journal thinks it will be cut, but shouldn't be, because it is a dangerous world, with emerging threats and stabilization needs. I think it will be cut because the departure from Iraq and Afghanistan, which will undermine political support for high defense budgets, and deficit reduction, which will require everything to be on the table, will combine to lead both parties to agree on cuts. Listen to the exchange on WAMU.


text:
It's looking pretty awesome and it will look even more awesome if you get those feet you're looking for! You could also use Demo-Man feet (even if they aren't furry).
May I suggest locating a spare Beastman Whip or 2 from the 1st WP to attach to the backpack? (They look like a classicized Throttle and stratos can hold it with his open hands. Unless you have a spare 200x set of throttles to use.)
The feathers on his chest harness are red IIRC.
Normal Stratos has blue Shinguards, SkyStrike Stratos has the reddish guards.


text:
Our Most Popular Wilton B.A.S.H. Peen Hammers "ALL"
Wilton B.A.S.H. Peen Hammers "ALL"
- Available in either Ball Peen or Cross Peen designs
- The handles are literally unbreakable
- Available in different lengths and weights to fit your needs
- Ball Peen Hammers are great for driving chisels and punches as well as shaping metal
- Cross Peen Hammers are good for sinking nails and setting fasteners
- Flat head design allows it to stand upright when not in use
It's very possible that you'll never need another hammer again once you pick up one of Wilton's BASH Ball or Cross Peen Hammers. The handles on these bad boys are literally unbreakable, capable of delivering over 25,000 overstrikes before croaking. These hammers are available in different lengths and widths to fit your application. The flat head design allows the hammers to stand upright when they are not in use, making it easy to pick them up again. Nobody makes hammers more powerful or longer-lasting than Wilton.
For Pre-Sales questions on Wilton Tools, feel free to contact Customer Service (888-804-7129) or for technical issues (800-274-6846). For all warranty issues, please call 800-274-6848.....and don't forget to tell them Lucy sent you!
Battle of the Unbreakables!
See the B.A.S.H. in action!
Overall Rating for Wilton B.A.S.H. Peen Hammers "ALL"
|(no reviews)
|Be the first to rate and review this item


text:
Best Craft Beer Cans for the Cooler in the Dog Days of Summer
Buy them because there's fresh, untainted, enjoyable beer inside.
The can has been part of the American beer drinking experience since 1935, when Gottfried Kruger Brewing in Newark, N.J., rolled out the first packs of metal-clad suds. For much of the 20th century, they were big brewers' calling cards and are still commonly associated with the suitcases and 30 packs of Bud, Miller and Coors produced by Anheuser-Busch InBev (BUD) and MolsonCoors(TAP) .
The upside is that cans seal out more light and ultraviolet radiation than brown bottles and are lighter and easy to recycle than glass. The downside is that drinkers still associate cans with yellowish light lager and a harsh metallic taste. Even though canned beer variety has increased dramatically since Oskar Blues started canning Dale's Pale Ale in 2002, it's still tough to convince older drinkers that cans lined with water-based polymer won't taste like freshly licked tin foil.
Craft beer drinkers have been increasingly willing to give cans a try in recent years, however. The number of craft brewers canning brews increased from 130 last summer to more than 200 canning nearly 600 different beers this year, according to the folks at CraftCans.com.
That's a whole lot of beer to fit in your summer cooler and a broad spectrum between the lemony, Miller-produced Leinenkugel's Summer Shandy and flat-top Chuchkey beer packed with its own opener and backed by Entourage actor Adrian Grenier. To narrow it down a bit, we've checked in with CraftCans and selected 10 of the best canned craft brews to put on ice during the warm months:
Sierra Nevada Torpedo
Perhaps the best example of what canned beer has come to in the past couple of years is an aluminum-encased serving of hoppy, high-octane India Pale Ale. Folks accustomed to mild, easy drinking cans of light lager should approach 16-ounce tallboys of Torpedo with caution. They're as bitter and citrusy as a mouthful of fresh hops, while the 7.2% alcohol content is nearly double what you might find in that red, white and blue can in your neighbor's cooler.
Alchemist Heady Topper
Once you've enjoyed a can of Torpedo, you've primed the palate for something with significantly more kick. Though it calls Waterbury, Vt., home, Alchemist has no problem producing a 16-ounce can of West Coast Style 8% ABV double IPA. Just how bitter is this beer? Beer bitterness is measured in International Bitterness Units that usually top out at 100. Alchemist claims 120 IBUs for Heady Topper. Good luck unpuckering.