/*
* CPArray.j
* Foundation
*
* Created by Francisco Tolmasky.
* Copyright 2008, 280 North, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
@import "CPObject.j"
@import "CPRange.j"
@import "CPEnumerator.j"
@import "CPSortDescriptor.j"
@import "CPException.j"
/* @ignore */
@implementation _CPArrayEnumerator : CPEnumerator
{
CPArray _array;
int _index;
}
- (id)initWithArray:(CPArray)anArray
{
self = [super init];
if (self)
{
_array = anArray;
_index = -1;
}
return self;
}
- (id)nextObject
{
if (++_index >= [_array count])
return nil;
return [_array objectAtIndex:_index];
}
@end
/* @ignore */
@implementation _CPReverseArrayEnumerator : CPEnumerator
{
CPArray _array;
int _index;
}
- (id)initWithArray:(CPArray)anArray
{
self = [super init];
if (self)
{
_array = anArray;
_index = [_array count];
}
return self;
}
- (id)nextObject
{
if (--_index < 0)
return nil;
return [_array objectAtIndex:_index];
}
@end
/*!
@class CPArray
@brief A mutable array backed by a JavaScript Array.
@ingroup foundation
A mutable array class backed by a JavaScript Array.
There is also a CPMutableArray class,
but it is just a child class of this class with an
empty implementation. All mutable functionality is
implemented directly in CPArray.
*/
@implementation CPArray : CPObject
/*!
Returns a new uninitialized CPArray.
*/
+ (id)alloc
{
return [];
}
/*!
Returns a new initialized CPArray.
*/
+ (id)array
{
return [[self alloc] init];
}
/*!
Creates a new array containing the objects in \c anArray.
@param anArray Objects in this array will be added to the new array
@return a new CPArray of the provided objects
*/
+ (id)arrayWithArray:(CPArray)anArray
{
return [[self alloc] initWithArray:anArray];
}
/*!
Creates a new array with \c anObject in it.
@param anObject the object to be added to the array
@return a new CPArray containing a single object
*/
+ (id)arrayWithObject:(id)anObject
{
return [[self alloc] initWithObjects:anObject];
}
/*!
Creates a new CPArray containing all the objects passed as arguments to the method.
@param anObject the objects that will be added to the new array
@return a new CPArray containing the argument objects
*/
+ (id)arrayWithObjects:(id)anObject, ...
{
var i = 2,
array = [[self alloc] init],
argument;
for(; i < arguments.length && (argument = arguments[i]) != nil; ++i)
array.push(argument);
return array;
}
/*!
Creates a CPArray from a JavaScript array of objects.
@param objects the JavaScript Array
@param aCount the number of objects in the JS Array
@return a new CPArray containing the specified objects
*/
+ (id)arrayWithObjects:(id)objects count:(unsigned)aCount
{
return [[self alloc] initWithObjects:objects count:aCount];
}
/*!
Initializes the CPArray.
@return the initialized array
*/
- (id)init
{
return self;
}
// Creating an Array
/*!
Creates a new CPArray from \c anArray.
@param anArray objects in this array will be added to the new array
@return a new CPArray containing the objects of \c anArray
*/
- (id)initWithArray:(CPArray)anArray
{
self = [super init];
if (self)
[self setArray:anArray];
return self;
}
/*!
Initializes a the array with the contents of \c anArray
and optionally performs a deep copy of the objects based on \c copyItems.
@param anArray the array to copy the data from
@param copyItems if \c YES, each object will be copied by having a \c -copy message sent to it, and the
returned object will be added to the receiver. Otherwise, no copying will be performed.
@return the initialized array of objects
*/
- (id)initWithArray:(CPArray)anArray copyItems:(BOOL)copyItems
{
if (!copyItems)
return [self initWithArray:anArray];
self = [super init];
if (self)
{
var index = 0,
count = [anArray count];
for(; index < count; ++i)
{
if (anArray[i].isa)
self[i] = [anArray copy];
// Do a deep/shallow copy?
else
self[i] = anArray;
}
}
return self;
}
/*!
initializes an array with the contents of anArray
*/
- (id)initWithObjects:(Array)anArray, ...
{
// The arguments array contains self and _cmd, so the first object is at position 2.
var i = 2,
argument;
for(; i < arguments.length && (argument = arguments[i]) != nil; ++i)
push(argument);
return self;
}
/*!
Initializes the array with a JavaScript array of objects.
@param objects the array of objects to add to the receiver
@param aCount the number of objects in \c objects
@return the initialized CPArray
*/
- (id)initWithObjects:(id)objects count:(unsigned)aCount
{
self = [super init];
if (self)
{
var index = 0;
for(; index < aCount; ++index)
push(objects[index]);
}
return self;
}
// Querying an array
/*!
Returns \c YES if the array contains \c anObject. Otherwise, it returns \c NO.
@param anObject the method checks if this object is already in the array
*/
- (BOOL)containsObject:(id)anObject
{
return [self indexOfObject:anObject] != CPNotFound;
}
/*!
Returns the number of elements in the array
*/
- (int)count
{
return length;
}
/*!
Returns the index of \c anObject in this array.
If the object is \c nil or not in the array,
returns \c CPNotFound. It first attempts to find
a match using \c -isEqual:, then \c ==.
@param anObject the object to search for
*/
- (int)indexOfObject:(id)anObject
{
if (anObject === nil)
return CPNotFound;
var i = 0,
count = length;
// Only use -isEqual: if our object is a CPObject.
if (anObject.isa)
{
for(; i < count; ++i)
if([self[i] isEqual:anObject])
return i;
}
// If indexOf exists, use it since it's probably
// faster than anything we can implement.
else if (self.indexOf)
return indexOf(anObject);
// Last resort, do a straight forward linear O(N) search.
else
for(; i < count; ++i)
if(self[i] == anObject)
return i;
return CPNotFound;
}
/*!
Returns the index of \c anObject in the array
within \c aRange. It first attempts to find
a match using \c -isEqual:, then \c ==.
@param anObject the object to search for
@param aRange the range to search within
@return the index of the object, or \c CPNotFound if it was not found.
*/
- (int)indexOfObject:(id)anObject inRange:(CPRange)aRange
{
if (anObject === nil)
return CPNotFound;
var i = aRange.location,
count = MIN(CPMaxRange(aRange), length);
// Only use isEqual: if our object is a CPObject.
if (anObject.isa)
{
for(; i < count; ++i)
if([self[i] isEqual:anObject])
return i;
}
// Last resort, do a straight forward linear O(N) search.
else
for(; i < count; ++i)
if(self[i] == anObject)
return i;
return CPNotFound;
}
/*!
Returns the index of \c anObject in the array. The test for equality is done using only \c ==.
@param anObject the object to search for
@return the index of the object in the array. \c CPNotFound if the object is not in the array.
*/
- (int)indexOfObjectIdenticalTo:(id)anObject
{
if (anObject === nil)
return CPNotFound;
// If indexOf exists, use it since it's probably
// faster than anything we can implement.
if (self.indexOf)
return indexOf(anObject);
// Last resort, do a straight forward linear O(N) search.
else
{
var index = 0,
count = length;
for(; index < count; ++index)
if(self[index] === anObject)
return index;
}
return CPNotFound;
}
/*!
Returns the index of \c anObject in the array
within \c aRange. The test for equality is
done using only \c ==.
@param anObject the object to search for
@param aRange the range to search within
@return the index of the object, or \c CPNotFound if it was not found.
*/
- (int)indexOfObjectIdenticalTo:(id)anObject inRange:(CPRange)aRange
{
if (anObject === nil)
return CPNotFound;
// If indexOf exists, use it since it's probably
// faster than anything we can implement.
if (self.indexOf)
{
var index = indexOf(anObject, aRange.location);
if (CPLocationInRange(index, aRange))
return index;
}
// Last resort, do a straight forward linear O(N) search.
else
{
var index = aRange.location,
count = MIN(CPMaxRange(aRange), length);
for(; index < count; ++index)
if(self[index] == anObject)
return index;
}
return CPNotFound;
}
/*!
Returns the index of \c anObject in the array, which must be sorted in the same order as
calling sortUsingSelector: with the selector passed to this method would result in.
@param anObject the object to search for
@param aSelector the comparison selector to call on each item in the list, the same
selector should have been used to sort the array (or to maintain its sorted order).
@return the index of the object, or \c CPNotFound if it was not found.
*/
- (unsigned)indexOfObject:(id)anObject sortedBySelector:(SEL)aSelector
{
return [self indexOfObject:anObject sortedByFunction: function(lhs, rhs) { objj_msgSend(lhs, aSelector, rhs); }];
}
/*!
Returns the index of \c anObject in the array, which must be sorted in the same order as
calling sortUsingFunction: with the selector passed to this method would result in.
The function will be called like so:

aFunction(anObject, currentObjectInArrayForComparison)

@param anObject the object to search for
@param aFunction the comparison function to call on each item in the array that we search. the same
selector should have been used to sort the array (or to maintain its sorted order).
@return the index of the object, or \c CPNotFound if it was not found.
*/
- (unsigned)indexOfObject:(id)anObject sortedByFunction:(Function)aFunction
{
return [self indexOfObject:anObject sortedByFunction:aFunction context:nil];
}
/*!
Returns the index of \c anObject in the array, which must be sorted in the same order as
calling sortUsingFunction: with the selector passed to this method would result in.
The function will be called like so:

aFunction(anObject, currentObjectInArrayForComparison, context)

@param anObject the object to search for
@param aFunction the comparison function to call on each item in the array that we search. the same
function should have been used to sort the array (or to maintain its sorted order).
@param aContext a context object that will be passed to the sort function
@return the index of the object, or \c CPNotFound if it was not found.
*/
- (unsigned)indexOfObject:(id)anObject sortedByFunction:(Function)aFunction context:(id)aContext
{
if (!aFunction || anObject === undefined)
return CPNotFound;
var mid, c, first = 0, last = length - 1;
while (first <= last)
{
mid = FLOOR((first + last) / 2);
c = aFunction(anObject, self[mid], aContext);
if (c > 0)
first = mid + 1;
else if (c < 0)
last = mid - 1;
else
{
while (mid < length - 1 && aFunction(anObject, self[mid+1], aContext) == CPOrderedSame)
mid++;
return mid;
}
}
return CPNotFound;
}
/*!
Returns the index of \c anObject in the array, which must be sorted in the same order as
calling sortUsingDescriptors: with the descriptors passed to this method would result in.
@param anObject the object to search for
@param descriptors the array of descriptors to use to compare each item in the array that we search. the same
descriptors should have been used to sort the array (or to maintain its sorted order).
@return the index of the object, or \c CPNotFound if it was not found.
*/
- (unsigned)indexOfObject:(id)anObject sortedByDescriptors:(CPArray)descriptors
{
return [self indexOfObject:anObject sortedByFunction:function(lhs, rhs)
{
var i = 0,
count = [descriptors count],
result = CPOrderedSame;
while (i < count)
if((result = [descriptors[i++] compareObject:lhs withObject:rhs]) != CPOrderedSame)
return result;
return result;
}];
}
/*!
Returns the last object in the array. If the array is empty, returns \c nil/
*/
- (id)lastObject
{
var count = [self count];
if (!count) return nil;
return self[count - 1];
}
/*!
Returns the object at index \c anIndex.
@throws CPRangeException if \c anIndex is out of bounds
*/
- (id)objectAtIndex:(int)anIndex
{
if (anIndex >= length || anIndex < 0)
[CPException raise:CPRangeException reason:@"index (" + anIndex + @") beyond bounds (" + length + @")"];
return self[anIndex];
}
/*!
Returns the objects at \c indexes in a new CPArray.
@param indexes the set of indices
@throws CPRangeException if any of the indices is greater than or equal to the length of the array
*/
- (CPArray)objectsAtIndexes:(CPIndexSet)indexes
{
var index = CPNotFound,
objects = [];
while((index = [indexes indexGreaterThanIndex:index]) !== CPNotFound)
[objects addObject:[self objectAtIndex:index]];
return objects;
}
/*!
Returns an enumerator describing the array sequentially
from the first to the last element. You should not modify
the array during enumeration.
*/
- (CPEnumerator)objectEnumerator
{
return [[_CPArrayEnumerator alloc] initWithArray:self];
}
/*!
Returns an enumerator describing the array sequentially
from the last to the first element. You should not modify
the array during enumeration.
*/
- (CPEnumerator)reverseObjectEnumerator
{
return [[_CPReverseArrayEnumerator alloc] initWithArray:self];
}
// Sending messages to elements
/*!
Sends each element in the array a message.
@param aSelector the selector of the message to send
@throws CPInvalidArgumentException if \c aSelector is \c nil
*/
- (void)makeObjectsPerformSelector:(SEL)aSelector
{
if (!aSelector)
[CPException raise:CPInvalidArgumentException reason:"makeObjectsPerformSelector: 'aSelector' can't be nil"];
var index = 0,
count = length;
for(; index < count; ++index)
objj_msgSend(self[index], aSelector);
}
/*!
Sends each element in the array a message with an argument.
@param aSelector the selector of the message to send
@param anObject the first argument of the message
@throws CPInvalidArgumentException if \c aSelector is \c nil
*/
- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)anObject
{
if (!aSelector)
[CPException raise:CPInvalidArgumentException reason:"makeObjectsPerformSelector:withObject 'aSelector' can't be nil"];
var index = 0,
count = length;
for(; index < count; ++index)
objj_msgSend(self[index], aSelector, anObject);
}
- (void)makeObjectsPerformSelector:(SEL)aSelector withObjects:(CPArray)objects
{
if (!aSelector)
[CPException raise:CPInvalidArgumentException reason:"makeObjectsPerformSelector:withObjects: 'aSelector' can't be nil"];
var index = 0,
count = length,
argumentsArray = [nil, aSelector].concat(objects || []);
for(; index < count; ++index)
{
argumentsArray[0] = self[index];
objj_msgSend.apply(this, argumentsArray);
}
}
// Comparing arrays
/*!
Returns the first object found in the receiver (starting at index 0) which is present in the
\c otherArray as determined by using the \c -containsObject: method.
@return the first object found, or \c nil if no common object was found.
*/
- (id)firstObjectCommonWithArray:(CPArray)anArray
{
if (![anArray count] || ![self count])
return nil;
var i = 0,
count = [self count];
for(; i < count; ++i)
if([anArray containsObject:self[i]])
return self[i];
return nil;
}
/*!
Returns true if anArray contains exactly the same objects as the reciever.
*/
- (BOOL)isEqualToArray:(id)anArray
{
if (self === anArray)
return YES;
if(length != anArray.length)
return NO;
var index = 0,
count = [self count];
for(; index < count; ++index)
{
var lhs = self[index],
rhs = anArray[index];
// If they're not equal, and either doesn't have an isa, or they're !isEqual (not isEqual)
if (lhs !== rhs && (!lhs.isa || !rhs.isa || ![lhs isEqual:rhs]))
return NO;
}
return YES;
}
- (BOOL)isEqual:(id)anObject
{
if (self === anObject)
return YES;
if(![anObject isKindOfClass:[CPArray class]])
return NO;
return [self isEqualToArray:anObject];
}
// Deriving new arrays
/*!
Returns a copy of this array plus \c anObject inside the copy.
@param anObject the object to be added to the array copy
@throws CPInvalidArgumentException if \c anObject is \c nil
@return a new array that should be n+1 in size compared to the receiver.
*/
- (CPArray)arrayByAddingObject:(id)anObject
{
if (anObject === nil || anObject === undefined)
[CPException raise:CPInvalidArgumentException
reason:"arrayByAddingObject: object can't be nil"];
var array = [self copy];
array.push(anObject);
return array;
}
/*!
Returns a new array which is the concatenation of \c self and otherArray (in this precise order).
@param anArray the array that will be concatenated to the receiver's copy
*/
- (CPArray)arrayByAddingObjectsFromArray:(CPArray)anArray
{
return slice(0).concat(anArray);
}
/*
- (CPArray)filteredArrayUsingPredicate:(CPPredicate)aPredicate
{
var i= 0,
count = [self count],
array = [CPArray array];
for(; i<count; ++i)
if(aPredicate.evaluateWithObject(self[i]))
array.push(self[i]);
return array;
}
*/
/*!
Returns a subarray of the receiver containing the objects found in the specified range \c aRange.
@param aRange the range of objects to be copied into the subarray
@throws CPRangeException if the specified range exceeds the bounds of the array
*/
- (CPArray)subarrayWithRange:(CPRange)aRange
{
if (aRange.location < 0 || CPMaxRange(aRange) > length)
[CPException raise:CPRangeException reason:"subarrayWithRange: aRange out of bounds"];
return slice(aRange.location, CPMaxRange(aRange));
}
// Sorting arrays
/*
Not yet described.
*/
- (CPArray)sortedArrayUsingDescriptors:(CPArray)descriptors
{
var sorted = [self copy];
[sorted sortUsingDescriptors:descriptors];
return sorted;
}
/*!
Return a copy of the receiver sorted using the function passed into the first parameter.
*/
- (CPArray)sortedArrayUsingFunction:(Function)aFunction
{
return [self sortedArrayUsingFunction:aFunction context:nil];
}
/*!
Returns an array in which the objects are ordered according
to a sort with \c aFunction. This invokes
\c -sortUsingFunction:context.
@param aFunction a JavaScript 'Function' type that compares objects
@param aContext context information
@return a new sorted array
*/
- (CPArray)sortedArrayUsingFunction:(Function)aFunction context:(id)aContext
{
var sorted = [self copy];
[sorted sortUsingFunction:aFunction context:aContext];
return sorted;
}
/*!
Returns a new array in which the objects are ordered according to a sort with \c aSelector.
@param aSelector the selector that will perform object comparisons
*/
- (CPArray)sortedArrayUsingSelector:(SEL)aSelector
{
var sorted = [self copy]
[sorted sortUsingSelector:aSelector];
return sorted;
}
// Working with string elements
/*!
Returns a string formed by concatenating the objects in the
receiver, with the specified separator string inserted between each part.
If the element is a Objective-J object, then the \c -description
of that object will be used, otherwise the default JavaScript representation will be used.
@param aString the separator that will separate each object string
@return the string representation of the array
*/
- (CPString)componentsJoinedByString:(CPString)aString
{
// Objective-J objects get "description" called on them automatically when coerced to strings
// (see "objj_object.prototype.toString" at bottom of CPObject.j)
return join(aString);
}
// Creating a description of the array
/*!
Returns a human readable description of this array and it's elements.
*/
- (CPString)description
{
var index = 0,
count = [self count],
description = '(';
for(; index < count; ++index)
{
if (index === 0)
description += '\n';
var object = self[index],
objectDescription = object && object.isa ? [object description] : object + "";
description += "\t" + objectDescription.split('\n').join("\n\t");
if (index !== count - 1)
description += ", ";
description += '\n';
}
return description + ')';
}
// Collecting paths
/*!
Returns a new array subset formed by selecting the elements that have
filename extensions from \c filterTypes. Only elements
that are of type CPString are candidates for inclusion in the returned array.
@param filterTypes an array of CPString objects that contain file extensions (without the '.')
@return a new array with matching paths
*/
- (CPArray)pathsMatchingExtensions:(CPArray)filterTypes
{
var index = 0,
count = [self count],
array = [];
for(; index < count; ++index)
if (self[index].isa && [self[index] isKindOfClass:[CPString class]] && [filterTypes containsObject:[self[index] pathExtension]])
array.push(self[index]);
return array;
}
// Key value coding
/*!
Sets the key-value for each element in the array.
@param aValue the value for the coding
@param aKey the key for the coding
*/
- (void)setValue:(id)aValue forKey:(CPString)aKey
{
var i = 0,
count = [self count];
for(; i < count; ++i)
[self[i] setValue:aValue forKey:aKey];
}
/*!
Returns the value for \c aKey from each element in the array.
@param aKey the key to return the value for
@return an array of containing a value for each element in the array
*/
- (CPArray)valueForKey:(CPString)aKey
{
var i = 0,
count = [self count],
array = [];
for(; i < count; ++i)
array.push([self[i] valueForKey:aKey]);
return array;
}
// Copying arrays
/*!
Makes a copy of the receiver.
@return a new CPArray copy
*/
- (id)copy
{
return slice(0);
}
@end
@implementation CPArray(CPMutableArray)
// Creating arrays
/*!
Creates an array able to store at least \c aCapacity
items. Because CPArray is backed by JavaScript arrays,
this method ends up simply returning a regular array.
*/
+ (CPArray)arrayWithCapacity:(unsigned)aCapacity
{
return [[self alloc] initWithCapacity:aCapacity];
}
/*!
Initializes an array able to store at least \c aCapacity items. Because CPArray
is backed by JavaScript arrays, this method ends up simply returning a regular array.
*/
- (id)initWithCapacity:(unsigned)aCapacity
{
return self;
}
// Adding and replacing objects
/*!
Adds \c anObject to the end of the array.
@param anObject the object to add to the array
*/
- (void)addObject:(id)anObject
{
push(anObject);
}
/*!
Adds the objects in \c anArray to the receiver array.
@param anArray the array of objects to add to the end of the receiver
*/
- (void)addObjectsFromArray:(CPArray)anArray
{
splice.apply(self, [length, 0].concat(anArray));
}
/*!
Inserts an object into the receiver at the specified location.
@param anObject the object to insert into the array
@param anIndex the location to insert \c anObject at
*/
- (void)insertObject:(id)anObject atIndex:(int)anIndex
{
splice(anIndex, 0, anObject);
}
/*!
Inserts the objects in the provided array into the receiver at the indexes specified.
@param objects the objects to add to this array
@param anIndexSet the indices for the objects
*/
- (void)insertObjects:(CPArray)objects atIndexes:(CPIndexSet)indexes
{
var indexesCount = [indexes count],
objectsCount = [objects count];
if(indexesCount !== objectsCount)
[CPException raise:CPRangeException reason:"the counts of the passed-in array (" + objectsCount + ") and index set (" + indexesCount + ") must be identical."];
var lastIndex = [indexes lastIndex];
if(lastIndex >= [self count] + indexesCount)
[CPException raise:CPRangeException reason:"the last index (" + lastIndex + ") must be less than the sum of the original count (" + [self count] + ") and the insertion count (" + indexesCount + ")."];
var index = 0,
currentIndex = [indexes firstIndex];
for (; index < objectsCount; ++index, currentIndex = [indexes indexGreaterThanIndex:currentIndex])
[self insertObject:objects[index] atIndex:currentIndex];
}
/*!
Replaces the element at \c anIndex with \c anObject.
The current element at position \c anIndex will be removed from the array.
@param anIndex the position in the array to place \c anObject
*/
- (void)replaceObjectAtIndex:(int)anIndex withObject:(id)anObject
{
self[anIndex] = anObject;
}
/*!
Replace the elements at the indices specified by \c anIndexSet with
the objects in \c objects.
@param anIndexSet the set of indices to array positions that will be replaced
@param objects the array of objects to place in the specified indices
*/
- (void)replaceObjectsAtIndexes:(CPIndexSet)anIndexSet withObjects:(CPArray)objects
{
var i = 0,
index = [anIndexSet firstIndex];
while(index != CPNotFound)
{
[self replaceObjectAtIndex:index withObject:objects[i++]];
index = [anIndexSet indexGreaterThanIndex:index];
}
}
/*!
Replaces some of the receiver's objects with objects from \c anArray. Specifically, the elements of the
receiver in the range specified by \c aRange,
with the elements of \c anArray in the range specified by \c otherRange.
@param aRange the range of elements to be replaced in the receiver
@param anArray the array to retrieve objects for placement into the receiver
@param otherRange the range of objects in \c anArray to pull from for placement into the receiver
*/
- (void)replaceObjectsInRange:(CPRange)aRange withObjectsFromArray:(CPArray)anArray range:(CPRange)otherRange
{
if (!otherRange.location && otherRange.length == [anArray count])
[self replaceObjectsInRange:aRange withObjectsFromArray:anArray];
else
splice.apply(self, [aRange.location, aRange.length].concat([anArray subarrayWithRange:otherRange]));
}
/*!
Replaces some of the receiver's objects with the objects from
\c anArray. Specifically, the elements of the
receiver in the range specified by \c aRange.
@param aRange the range of elements to be replaced in the receiver
@param anArray the array to retrieve objects for placement into the receiver
*/
- (void)replaceObjectsInRange:(CPRange)aRange withObjectsFromArray:(CPArray)anArray
{
splice.apply(self, [aRange.location, aRange.length].concat(anArray));
}
/*!
Sets the contents of the receiver to be identical to the contents of \c anArray.
@param anArray the array of objects used to replace the receiver's objects
*/
- (void)setArray:(CPArray)anArray
{
if(self == anArray) return;
splice.apply(self, [0, length].concat(anArray));
}
// Removing Objects
/*!
Removes all objects from this array.
*/
- (void)removeAllObjects
{
splice(0, length);
}
/*!
Removes the last object from the array.
*/
- (void)removeLastObject
{
pop();
}
/*!
Removes all entries of \c anObject from the array.
@param anObject the object whose entries are to be removed
*/
- (void)removeObject:(id)anObject
{
[self removeObject:anObject inRange:CPMakeRange(0, length)];
}
/*!
Removes all entries of \c anObject from the array, in the range specified by \c aRange.
@param anObject the object to remove
@param aRange the range to search in the receiver for the object
*/
- (void)removeObject:(id)anObject inRange:(CPRange)aRange
{
var index;
while ((index = [self indexOfObject:anObject inRange:aRange]) != CPNotFound)
{
[self removeObjectAtIndex:index];
aRange = CPIntersectionRange(CPMakeRange(index, length - index), aRange);
}
}
/*!
Removes the object at \c anIndex.
@param anIndex the location of the element to be removed
*/
- (void)removeObjectAtIndex:(int)anIndex
{
splice(anIndex, 1);
}
/*!
Removes the objects at the indices specified by \c CPIndexSet.
@param anIndexSet the indices of the elements to be removed from the array
*/
- (void)removeObjectsAtIndexes:(CPIndexSet)anIndexSet
{
var index = [anIndexSet lastIndex];
while (index != CPNotFound)
{
[self removeObjectAtIndex:index];
index = [anIndexSet indexLessThanIndex:index];
}
}
/*!
Remove the first instance of \c anObject from the array.
The search for the object is done using \c ==.
@param anObject the object to remove
*/
- (void)removeObjectIdenticalTo:(id)anObject
{
[self removeObjectIdenticalTo:anObject inRange:CPMakeRange(0, [self count])];
}
/*!
Remove the first instance of \c anObject from the array,
within the range specified by \c aRange.
The search for the object is done using \c ==.
@param anObject the object to remove
@param aRange the range in the array to search for the object
*/
- (void)removeObjectIdenticalTo:(id)anObject inRange:(CPRange)aRange
{
var index,
count = [self count];
while ((index = [self indexOfObjectIdenticalTo:anObject inRange:aRange]) !== CPNotFound)
{
[self removeObjectAtIndex:index];
aRange = CPIntersectionRange(CPMakeRange(index, (--count) - index), aRange);
}
}
/*!
Remove the objects in \c anArray from the receiver array.
@param anArray the array of objects to remove from the receiver
*/
- (void)removeObjectsInArray:(CPArray)anArray
{
var index = 0,
count = [anArray count];
for (; index < count; ++index)
[self removeObject:anArray[index]];
}
/*!
Removes all the objects in the specified range from the receiver.
@param aRange the range of objects to remove
*/
- (void)removeObjectsInRange:(CPRange)aRange
{
splice(aRange.location, aRange.length);
}
// Rearranging objects
/*!
Swaps the elements at the two specified indices.
@param anIndex the first index to swap from
@param otherIndex the second index to swap from
*/
- (void)exchangeObjectAtIndex:(unsigned)anIndex withObjectAtIndex:(unsigned)otherIndex
{
var temporary = self[anIndex];
self[anIndex] = self[otherIndex];
self[otherIndex] = temporary;
}
- (CPArray)sortUsingDescriptors:(CPArray)descriptors
{
sort(function(lhs, rhs)
{
var i = 0,
count = [descriptors count],
result = CPOrderedSame;
while(i < count)
if((result = [descriptors[i++] compareObject:lhs withObject:rhs]) != CPOrderedSame)
return result;
return result;
});
}
/*!
Sorts the receiver array using a JavaScript function as a comparator, and a specified context.
@param aFunction a JavaScript function that will be called to compare objects
@param aContext an object that will be passed to \c aFunction with comparison
*/
- (void)sortUsingFunction:(Function)aFunction context:(id)aContext
{
sort(function(lhs, rhs) { return aFunction(lhs, rhs, aContext); });
}
/*!
Sorts the receiver array using an Objective-J method as a comparator.
@param aSelector the selector for the method to call for comparison
*/
- (void)sortUsingSelector:(SEL)aSelector
{
sort(function(lhs, rhs) { return objj_msgSend(lhs, aSelector, rhs); });
}
@end
@implementation CPArray (CPCoding)
- (id)initWithCoder:(CPCoder)aCoder
{
return [aCoder<EMAIL_ADDRESS>}
- (void)encodeWithCoder:(CPCoder)aCoder
{
[aCoder _encodeArrayOfObjects:self<EMAIL_ADDRESS>}
@end
/*!
@class CPMutableArray
@ingroup compatability
This class is just an empty subclass of CPArray.
CPArray already implements mutable methods and
this class only exists for source compatability.
*/
@implementation CPMutableArray : CPArray
@end
Array.prototype.isa = CPArray;
[CPArray initialize];


The following examples will use checkboxes or radio buttons as I feel like it fits best the style. They can be used for both.
Style variants
These work adding some style to the existing .fwc_toggle snippet
More styles
These are different examples, they don't use .fwc_toggle as base but the markup might be the same.


| Mark as read | Name | Subject | Date | Time | |
|---|---|---|---|---|---|
| Admin | Message#1 | ||||
|
Mr.Huang has complained people have stolen his property but he has dementia and we can’t find any evidence of this
has actually happened. Please make sure you only enter his room with two
people so there is a witness to all activity.
|
|||||
| Admin | Message#2 | ||||
|
Dear Valued staff member,
There is a compulsory meeting today in the staff room at 14:00. All staff are required to attend. |


Click a button to open a dialog using various combinations of CSS animations, transitions, and transforms.
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Here are a few interesting things to note about dialogs:
Click a button to open a dialog using various combinations of CSS animations, transitions, and transforms.


MATINEE A film review by James Berardinelli Copyright 1993 James Berardinelli
Running Length: 1:38 Rated: PG (Mature themes)
Starring: John Goodman, Kathy Moriarty, Simon Fenton, Kellie Martin, Omri Katz, Lisa Jakub Director: Joe Dante Producer: Michael Finnell Screenplay: Charlie Haas Music: Jerry Goldsmith Released by Universal Pictures
Lawrence Woolsey (John Goodman) is an old-time showman trying to put the magic back into grade-B horror movies. His latest film, MANT!, made in "Rumble-Rama" will either make him or break him, but Woolsey won't let his precarious future ruin his enjoyment of the present. He's sure of himself and his audience. The premier of MANT! forms the backdrop for a number of smaller human dramas--such as first dates and first kisses--and one larger, more historical event.
Joe Dante's latest film is one-third comedy, one-third nostalgia, and one-third sentiment. Set during the tense period of the Cuban Missile Crisis, MATINEE tells the story of a week in the lives of several teenagers and small-time horror film maker Lawrence Woolsey. For each of them, these tension-filled days mean something different.
It's likely that those who have a conscious memory of October 1962 will appreciate MATINEE far more than those who don't. Although Dante's film does a good job of conveying the flavor of the time, actual memories add an irreplaceable enhancement. Remembering how you reacted to the Crisis will enable you to empathize that much more with the characters of this picture. Much of the nostalgia will be lost on the younger viewers. Only those who lived through those troubled days can fully appreciate some of what MATINEE is trying to do.
Fortunately, the success and enjoyability of the film do not rest entirely in this arena. MATINEE also presents a witty spoof of the numerous low-budget monster movies that became a common staple for theaters during the fifties and sixties. As silly and campy as MANT looks, it bears a remarkable resemblance to many of the films that can now be seen at two o'clock in the morning on a local UHF channel.
 There's Gene (Simon Fenton), the "Navy brat" who moves from city to city without ever getting a chance to put down roots. Stan (Omri Katz), Gene's lone friend, is hopelessly smitten with Sherry (Kellie Martin), a girl who is interested in exploring her own sexuality. Finally, Lisa Jakub plays the uncertain daughter of a pair of free-thinking beatniks.
MATINEE manages to blend its diverse elements together. Sometimes the seams aren't as transparent as they should be, but the movie still manages to be more agreeable than not. The humor is mostly low-key, and works as it's intended to. There are not many belly laughs to be had, but there are quite a few chuckles.
Of undeniable importance is the rapport the audience develops with the characters. They may not be the most three-dimensional of screen personalities, but what we see of them seems real, despite the occasionally bizarre circumstances they find themselves in. This is, after all, a movie about movies, and Dante never ceases to remind us of this with an endless stream of in-jokes.
John Goodman is tailor-made for his role. As uncomfortable as he seemed as THE BABE, he's right at home here, chewing on his part with as much gusto as he munches on his cigar. He's a pleasure to watch--the bigger-than-life showman who does what he does simply because he enjoys it.
There's nothing deep or profound in MATINEE and its occasional comments about the evils of nuclear war fall a little flat in light of current events. It's not clear whether the movie is trying to make a point or simply emphasizing its historical context. Any message that MATINEE has doesn't come across clearly or with any force. This is an example of pure, unadulterated entertainment.
The film is far from perfect, but most of the flaws are minor and will do little (if anything) to impede the enjoyment of the movie. Wit, satire, nostalgia, and a few likable characters form a solid mix. If there are a few moments when the movie loses its focus, well, as Lawrence Woolsey would put it, "That's show biz."
Rating: 7.8 (B, **1/2)
- James Berardinelli<EMAIL_ADDRESS>.
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


sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
sdfbhdsfdsfsdfds
Home
About
Contact


RT @newrelic: Lots of people at the monthly @pdxruby meetup tonight! Thanks everyone for swinging by.
11/5/2013, 9:47:45 PM
Favs: 0
Retweets: 0
link--- layout: tweet ---
RT @newrelic: Lots of people at the monthly @pdxruby meetup tonight! Thanks everyone for swinging by.
11/5/2013, 9:47:45 PM
Favs: 0
Retweets: 0
link


Data Input
from an Excel Worksheet
Excel must be closed before you start Fabric8.
Make sure that Excel is not listed in the task manager.
Press Ctrl-Alt-Del' to open the task manager, then click 'erase'
to delete "Excel.exe" from the task manager.
Azimuth or strike and dip angle can be listed in one or two rows.
Empty cells and cells containing text are allowed they will be
overread.
Azimuth and
dip must be separated by a sign ("/") when they are listed in one row.


07/09
Feedback
I attended a double session on Thursday and Friday to showcase my progress with the research work. I admit, I have gone sloppy for the remainder of the two weeks for a few reasons. I'm starting to get back on my feet, though, as piles of work wait scattered around and I feel all is still within reach.
I was advised to showcase my interview questions, which I have provided on Friday. Since on Thursday I have felt quite under the weather. Those were composed primarily as a set of qualitative research.
Further On
The primary concern is that this is still an ambitious scope and covering a wide range may turn out too challenging. A question in the questionnaire seemed vague and making it more specific could be helpful. In case of the interview questions the problem is that the Design process may not be strong. Also, the questions may be too vague.
What is required is to perform further literature review as there must be more out there and refine the interview questions. That having said, I was constantly reminded by my coordinator that what I'm trying to convey remains vague. I agree to a certain extent, I explained particular elements and what if everything goes ahead as intended but I feel I wasn't too convincing.
Concluding
At this point I believe going ahead and trying to create everything concurrently may be the best strategy. I have working elements that are based on some public APIs, therefore messing around with the code could be a good start to have a working framework. Designing elements with wireframes and then mockups will be an ongoing process which I will create based on Adobe XD.


Preparation time
less than 30 mins
Cooking time
30 mins to 1 hour
Serves
Serves 1
Cook this simple supper for one in under an hour and add a bit of luxury to your mid-week menu.
Preheat the oven to 120C/100C Fan/Gas ½.
 Season with salt and pepper and bring the side of the foil up to make a parcel. Add the wine, butter and thyme, then close the foil. Put the parcel on a baking tray and cook for 10—15 minutes until the leek is soft.
Season the lemon sole with salt and pepper. Heat a frying pan over a medium heat, add the lemon sole and cook for 3 minutes on each side.
Heat a deep fat fryer to 180C (CAUTION: hot oil can be dangerous. Do not leave unattended.). Add the capers and cook for 30 seconds, or until they are open and crispy. Remove and drain on kitchen paper.
To make the sauce, melt the butter in a small saucepan until it is light brown, then add the lemon juice. Remove from the heat and leave to cool. Add the brown shrimp, lemon segments and parsley.
To serve, put the lemon sole on a deep plate and add the leeks. Pour over the butter and top with the capers.


- Member [CPBarPlotDataSource-p barLabelForBarPlot:recordIndex:]
- This method has been replaced by the CPPlotDataSource
-dataLabelForPlot:recordIndex:
method and is no longer used.
- Member [CPPieChartDataSource-p sliceLabelForPieChart:recordIndex:]
- This method has been replaced by the CPPlotDataSource
-dataLabelForPlot:recordIndex:
method and is no longer used.
- Member [CPPlotDataSource-p recordIndexRangeForPlot:plotRange:]
- This method is no longer used and will be removed from a later release.
- Member CPBarPlot::barLabelOffset
- This property has been replaced by the CPPlot::labelOffset property.
- Member CPBarPlot::barLabelTextStyle
- This property has been replaced by the CPPlot::labelTextStyle property.
- Member CPPieChart::sliceLabelOffset
- This property has been replaced by the CPPlot::labelOffset property.
Generated on Wed Nov 10 18:49:02 2010 for Core Plot (iPhone OS) by
1.6.3


Use the arrow keys for up, down, left, right, and w for away and s for towards.
To start, click in the game area (so your keystrokes are directed there) and press a key.
Hold down shift for a temporary speed boost. Play by youself or add more snakes.


ABOUT ME
As a software engineer & a deep learner specializing in deep learning, backend development, VR, and SLAM, I'm very passionate about realizing the state of arts into real life. I'm always ready to learn new things and apply something new, something out of the box to my work.
Years of experience in C++ and Python.
Years of research experience in Machine Learning.
Publications in top conferences and journals(NeurIPS Workshop, Annual Machine Learning Symposium, IEEE TPAMI).
Awards including First Prize for Undergraduate Innovation Project (lasting for 2 years) and Gong Neng Scholarship of Nankai University.
Recent Activities
I participated in two competitions including Kaggle Competition: Google Landmark Recognition 2020 and AIcrowd Competition: NeurIPS 2020: Procgen Competition.
Google Landmark Recognition 2020 (launched June 30, 2020): Build models that recognize the correct landmark (if any) in a dataset of challenging test images. Landmark recognition competition dataset contains more than 81K classes.
NeurIPS 2020 Procgen Competition (launched June 3, 2020): Measure sample efficiency and generalization in reinforcement learning using procedurally generated environments.
Skills
Proficient in python, C++, and SQL, I have a solid background in both deep learning and software engineering.
Publications
AutoML using Metadata Language Embeddings
Iddo Drori, Lu Liu, Nian Yi, Sharath Koorathota, Jie Li, Antonio Khalil Moretti, Juliana Freire, Madeleine Udell
NeurIPS Workshop on Meta-Learning, 2019. (WS)
arXiv | PosterZero-shot AutoML
Iddo Drori, Lu Liu, Qiang Ma, Brandon Kates, Madeleine Udell
Annual Machine Learning Symposium, 2020. (WS)
Real-time AutoML
Iddo Drori, Lu Liu, Qiang Ma, Jonah Deykin, Brandon Kates, Madeleine Udell
IEEE Transactions on Pattern Analysis and Machine Intelligence
In progress. (JR)
Online Assessment of Rehabilitation Training
In Review.
Experience
Education
Master of science & Computer Engineering
2018 - 2020
The Fu Foundation School of Engineering and Applied Science, Columbia Univesity in the City of New York, NY
Major Coursework: Applied Deep Learning, Deep Learning for Computer Vision, Artificial Intelligence, Computer Architecture, Analysis of Algorithms, Databases, Datacenter Networks, Formal Verification of HW&SW, Internet of Things - Systems and Physical Data Analytics
Bachelor of Engineering & Electrical and Computer Engineering
2014 - 2018
Computer Science and Control Engineering, Nankai University, Tianjin
Major Coursework: C++, Data Structures, Machine Intelligence, Principles of Computer Organization, Visual Program in Control System, Sensing Technology and Application, Automatic Detection Technology & System
Research
AutoML using Metadata Language Embeddings
2019
Columbia University, New York, NY
Objective: provide a zero-shot AutoML system using metadata embeddings and pipeline embeddings.
- Applied USE3 embeddings from modern NLP to the dataset description and algorithm documentation and learnt the non-linear interactions between these embeddings using a designed neural network to get the recommended pipeline of the most similar dataset.
- Demonstrated our AutoML system’s performance running in 1s improved on the performance of state of art AutoML frameworks AutoSklearn, AlphaD3M, et, al. in 1 min based on our designed execution engine.
Design and Implementation of an Immersive Task for Rehabilitation
2018
Nankai University, Tianjin, CN
- Established an immersive VR rehabilitation system based on Oculus Rift VR platform.
- Designed the bilateral arm training tasks and proposed the evaluation index;
- Conducted a series of experiments based on the designed tasks, including the unilateral and bilateral comparison experiments and the verification experiments of learning effect.
- Built a non-immersive VR rehabilitation system, separately conducted experiments in the two rehabilitation systems based on the designed tasks, and analyzed the experimental results quantitatively.
Target Identification and Autonomous Tracking for Vision-based Quadrotor UAVs
2016 - 2018
Nankai University, Tianjin, CN
Objective: make UAV identify and autonomously follow the given target without GPS in an unknown environment.
- Utilized TLD (Tracking-Learning-Detection) algorithm using P-N learning estimating detector’s errors to long-termly track the target in real-time based on the video stream obtained from Kinect V2.
- Developed an algorithm for SLAM using C++: extracted feature points with SIFT algorithm from the RGB-D data, computed the rotation matrix with the quaternion, and estimated the pose of the vehicle using PnP algorithm.
- Constructed the 3D point cloud map of the environment.
- Won the First Prize for Undergraduate Innovation Project.
Professional Experience
Teaching Assistant of COMS 4995 Deep Learning course
2019
Columbia University, New York, NY
- Gave tutorials on TensorFlow, Keras, TF-GAN, and TF-Agents [TensorFlow, Keras, TF-GAN, TF-Agents].
- Helped the instructor and students with tasks such as grading, office hours, etc.
- Mentored several research projects in cutting-edge topics in DL.
Detection and Classification of Breast Cancer in Whole-Slide Images [Grand Challenge]
2019
Columbia University, New York, NY
Objective: develop a tool to assist physicians to locate the breast cancer in slide images.
- Developed a multi-scale approach using Inception V3 architecture as the pretrained model that utilize patches extracted by a sliding window at multiple magnifications centered on the same region.
- Trained and evaluated the designed CNN framework on Google Cloud Platform using TensorFlow on the large and tumor class imbalanced CAMELYON16 dataset (around 3TB) and achieved a recall score of 98%.
6D Pose Prediction of Vehicles in Autonomous Driving [Kaggle Competition]
2019
Columbia University, New York, NY
Objective: predict the 6D pose (position and rotation) of each vehicle from monocular RGB image.
- Implemented an anchor-free method using PyTorch by designing a convolutional network based on UNet and FPN (Feature Pyramid Network) with ResNet as the backbone, trained on over 4200 images, and ranked top 20% in this competition.
- Applied Gaussian kernel to generate ground-truth heatmap and used CoordConv to avoid space invariance feature of CNN.
Smart Home Monitor
2019
Columbia University, New York, NY
Objective: provide real-time monitoring of home condition, and improve the home security with face recognition remotely.
- Built a home monitor website using HTML, JavaScript, CSS, displaying the dynamic light, gas, et al. monitor in real-time with ICN (Information-Centric Network).
- Constructed a serverless backend using AWS services including DynamoDB, S3, EC2, Rekognition API, Lambda function, and SNS; fulfilled real-time embedded face recognition using TensorFlow and AWS S3.
- Used Ajax to exchange the data between the server and the client based on the RESTful API with Flask and AWS DynamoDB. [HTML]
Database Centric Web Application Focusing on Baseball Data
2019
Columbia University, New York, NY
Implemented the following microservices:
- Baseball Data Microservice: Allows users to query and explore data about players and their performances; allows users to create an account, assign players to teams, etc. with a newly designed relational database and data model. (CRUD with MySQL)
- Social Interaction Microservice: Allows users to follow, like, comment, etc. on teams, players, users, based on Neo4J.Social Interaction Microservice: Allows users to follow, like, comment, etc. on teams, players, users, based on Neo4J.
- Discussion/Comment Data Microservice: Stores comments, responses, discussion threads, etc. based on AWS DynamoDB.
- Application Business/Logic Microservice: Implement business logic and rules. (REST API backend based on Flask framework)
- Caching Microservice: REST API and data access response cache to optimize performance, based on Redis.
Contact
Currently I'm open to Software Engineer and Deep Learning/Machine Learning/Artificial Intelligence Full-time position. Please feel free to contact me if there is any opportunity.


I have display:block and static positioning, the defaults!
child div
I have display:block and static positioning, the defaults!
I have display:block and static positioning, the defaults!
I have display:block and static positioning, the defaults!


The reason I try to write these notes is the chinese wall.
Ever since I first saw it on a school-book map, I have been wondering what the decision making process were like.
We would like to think that the emperor asked for ideas, and that advisors came up with analyses, budgets, cost/benefit calculations and project plans for various proposals, and that the emperor applied his wisdom to choose the better idea.
But it could also be, that The Assistant to The Deputy Viceminister of Northern Affairs, edged in sideways, at a carefully chosen time where the emperor looked relaxed and friendly, and sort of happend to mention that 50 villages had been sort of raided by the barbarians, hoping for the reply, which would not be a career opportunity for The Assistant to The Assistant to The Deputy Viceminister of Northern Affairs.
And likely as not, the emperor absentmindedly grunted "Why don't you just build a wall to keep them out or something ?" probably wondering about the competence of an administration, which could not figure out to build palisades around border villages without bothering him and causing a monument to the Peter Principle and Parkinssons Law to be built, which can be seen from orbit, and possibly from the moon, if you bring your binoculars.
If somebody had written some notes, we might have known.
Poul-Henning, 2010-05-28


import distutils.util # FIXME: For change_root. import logging import os import sys import sysconfig import typing from pip._internal.exceptions import InvalidSchemeCombination, UserInstallationInvalid from pip._internal.models.scheme import SCHEME_KEYS, Scheme from pip._internal.utils.virtualenv import running_under_virtualenv from .base import get_major_minor_version logger = logging.getLogger(__name__) # Notes on _infer_* functions. # Unfortunately ``_get_default_scheme()`` is private, so there's no way to # ask things like "what is the '_prefix' scheme on this platform". These # functions try to answer that with some heuristics while accounting for ad-hoc # platforms not covered by CPython's default sysconfig implementation. If the # ad-hoc implementation does not fully implement sysconfig, we'll fall back to # a POSIX scheme. _AVAILABLE_SCHEMES = set(sysconfig.get_scheme_names()) def _infer_prefix(): # type: () -> str """Try to find a prefix scheme for the current platform. This tries: * Implementation + OS, used by PyPy on Windows (``pypy_nt``). * Implementation without OS, used by PyPy on POSIX (``pypy``). * OS + "prefix", used by CPython on POSIX (``posix_prefix``). * Just the OS name, used by CPython on Windows (``nt``). If none of the above works, fall back to ``posix_prefix``. """ implementation_suffixed = f"{sys.implementation.name}_{os.name}" if implementation_suffixed in _AVAILABLE_SCHEMES: return implementation_suffixed if sys.implementation.name in _AVAILABLE_SCHEMES: return sys.implementation.name suffixed = f"{os.name}_prefix" if suffixed in _AVAILABLE_SCHEMES: return suffixed if os.name in _AVAILABLE_SCHEMES: # On Windows, prefx is just called "nt". return os.name return "posix_prefix" def _infer_user(): # type: () -> str """Try to find a user scheme for the current platform.""" suffixed = f"{os.name}_user" if suffixed in _AVAILABLE_SCHEMES: return suffixed if "posix_user" not in _AVAILABLE_SCHEMES: # User scheme unavailable. raise UserInstallationInvalid() return "posix_user" def _infer_home(): # type: () -> str """Try to find a home for the current platform.""" suffixed = f"{os.name}_home" if suffixed in _AVAILABLE_SCHEMES: return suffixed return "posix_home" # Update these keys if the user sets a custom home. _HOME_KEYS = [ "installed_base", "base", "installed_platbase", "platbase", "prefix", "exec_prefix", ] if sysconfig.get_config_var("userbase") is not None: _HOME_KEYS.append("userbase") def get_scheme( dist_name, # type: str user=False, # type: bool home=None, # type: typing.Optional[str] root=None, # type: typing.Optional[str] isolated=False, # type: bool prefix=None, # type: typing.Optional[str] ): # type: (...) -> Scheme """ Get the "scheme" corresponding to the input parameters. :param dist_name: the name of the package to retrieve the scheme for, used in the headers scheme path :param user: indicates to use the "user" scheme :param home: indicates to use the "home" scheme :param root: root under which other directories are re-based :param isolated: ignored, but kept for distutils compatibility (where this controls whether the user-site pydistutils.cfg is honored) :param prefix: indicates to use the "prefix" scheme and provides the base directory for the same """ if user and prefix: raise InvalidSchemeCombination("--user", "--prefix") if home and prefix: raise InvalidSchemeCombination("--home", "--prefix") if home is not None: scheme_name = _infer_home() elif user: scheme_name = _infer_user() else: scheme_name = _infer_prefix() if home is not None: variables = {k: home for k in _HOME_KEYS} elif prefix is not None: variables = {k: prefix for k in _HOME_KEYS} else: variables = {} paths = sysconfig.get_paths(scheme=scheme_name, vars=variables) # Logic here is very arbitrary, we're doing it for compatibility, don't ask. # 1. Pip historically uses a special header path in virtual environments. # 2. If the distribution name is not known, distutils uses 'UNKNOWN'. We # only do the same when not running in a virtual environment because # pip's historical header path logic (see point 1) did not do this. if running_under_virtualenv(): if user: base = variables.get("userbase", sys.prefix) else: base = variables.get("base", sys.prefix) python_xy = f"python{get_major_minor_version()}" paths["include"] = os.path.join(base, "include", "site", python_xy) elif not dist_name: dist_name = "UNKNOWN" scheme = Scheme( platlib=paths["platlib"], purelib=paths["purelib"], headers=os.path.join(paths["include"], dist_name), scripts=paths["scripts"], data=paths["data"], ) if root is not None: for key in SCHEME_KEYS: value = distutils.util.change_root(root, getattr(scheme, key)) setattr(scheme, key, value) return scheme def get_bin_prefix(): # type: () -> str # Forcing to use /usr/local/bin for standard macOS framework installs. if sys.platform[:6] == "darwin" and sys.prefix[:16] == "/System/Library/": return "/usr/local/bin" return sysconfig.get_paths()["scripts"] def get_purelib(): # type: () -> str return sysconfig.get_paths()["purelib"] def get_platlib(): # type: () -> str return sysconfig.get_paths()["platlib"] def get_prefixed_libs(prefix): # type: (str) -> typing.Tuple[str, str] paths = sysconfig.get_paths(vars={"base": prefix, "platbase": prefix}) return (paths["purelib"], paths["platlib"])


Containers will not fix your broken culture. Microservices won't prevent your two-pizza teams from needing to have conversations with one another over that pizza. No amount of industrial-strength job scheduling makes your organization immune to Conway's Law.
Does this mean that devops has failed? Not in the slightest. It means that while the unscrupulous might try to sell us devops, we can't buy it. We have to live it; change is a choice we make every day, through our actions of listening empathetically and acting compassionately.
Making thoughtful decisions about tools and architecture can help. Containers prove to be a useful boundary object, and deconstructing systems to human-scale allows us to comprehend their complexity. We succeed when we share responsibility and have agency, when we move past learned helplessness to active listening. But there is no flowchart, no checklist, no shopping list of ticky boxes that will make everything better. "Anyone who says differently is selling something", as The Princess Bride teaches us.
Part rant, part devops therapy, this talk will explain in the nerdiest of terms why CAP theorem applies to human interactions too, how oral tradition is like never writing state to disk, and what we can do to avoid sadness as a service.
Speaker works for Pivotal and co-hosts the Arrested DevOps podcast.
Trying to move from Python/Django monolith to Go Microservices.
Tribalism - who else in our vertical market is already using this?
DevOps certified: they passed kindergarten - they learned to share with the other children.
DevOps in a box: I want 800 units of DevOps delivered to my office.
If you have emphaty for other human beings and you understand what they want, then you'll have a much better chance getting them to do what you want.
If developers don't have good visibility into the way production is operating then they are just goint got be guessing.
Microservices is not about decomposition of giant balls of mud. It's about scope.
CAP theorem also applies to human interaction within a company
DevOps is a culture. It i s not something you can buy.


YOU'RE ABOUT TO HACK TIME.

YES
NO
hackerman.exe
X
processor.ppt
X
tracking.xyz
X
that's fair


About
This is a music and drink playlist generator designed to provide you with an at home bar experience. Start off by filling out the form below.


River valleys can be easily identified on a map as they generally have a river flowing in them. The contour lines for a river valley make a V-shaped pattern. The V of the contour always points up the valley towards higher ground. Blue lines on topographic maps indicate rivers. A solid blue line shows a perennial river and a dashed blue line shows a non-perennial river.
Spurs are pieces of land that stick up between different river valleys. The contour pattern showing spurs is U-shaped, pointing downslope towards lower ground.


 OBEY |
|
.phosphorus joel. . main page . about us . get music . myspace page . purevolume page . |


Account Login
User Name
Password
Stay Signed In
Sign in
Cancel
Create A New Account
Cancel Account Creation
User Name
Email
Password
Secret Question
Secret Question Answer
Street Address
City
State
Zip
Date of Birth (Example: 1991-04-13)
Gender (Example: M, F or O)
BMI
Weight
Height (In Inches)
Exercise Level:
Light: Exercise 1-3 times/week
Moderate: Exercise 4-5 times/week
Active: Daily exercise or intens excercise 3-4 times/week
Daily Calorie Limit. This should be the MAX number of calories you eat a day.
Calorie Deficit Goal. This should be the number of calories you want to stay under to lose weight


My Name is Ferdie De Oliveira, I currently live in the UK with my parents, and yes it is awesome :)
I love created new websites and just now starting to get into apps. Well this is my first one.


tags #games Beneath this cool, calm exterior August 10, 2016 Self esteem snake December 23, 2015 Little Green Men December 20, 2015 Tetris for egotistical Java fledglings November 24, 2015 #java Self esteem snake December 23, 2015 Tetris for egotistical Java fledglings November 24, 2015 #javascript Constructive sloppiness October 2, 2017 Making my pop's site responsive October 16, 2016 Beneath this cool, calm exterior August 10, 2016 Mucking about with image data in JavaScript July 24, 2016 The Christmas fam scarf | Part three: ScarfParty - your solution to the pixel pattern problem July 18, 2016 Little Green Men December 20, 2015 #knitting The Christmas fam scarf | Part three: ScarfParty - your solution to the pixel pattern problem July 18, 2016 The Christmas fam scarf | Part two: The actual knitting January 31, 2016 The Christmas fam scarf | Part one: The intro and the pattern December 24, 2015 #neo4j Adventures with Neo4j and Timetrees October 4, 2016 #the-christmas-fam-scarf The Christmas fam scarf | Part three: ScarfParty - your solution to the pixel pattern problem July 18, 2016 The Christmas fam scarf | Part two: The actual knitting January 31, 2016 The Christmas fam scarf | Part one: The intro and the pattern December 24, 2015 #the-ft Constructive sloppiness October 2, 2017 Adventures with Neo4j and Timetrees October 4, 2016 #web Constructive sloppiness October 2, 2017 Making my pop's site responsive October 16, 2016


Shift Planner
You have to be signed in to use this app!
Sign in with Google Account
Revoke access
Employee name:
Milan
Tomáš
Vojtěch
Date:
All day
Specific time(s)
8:30
9:00
9:30
10:00
10:30
11:00
11:30
12:00
12:30
13:00
14:00
14:30
15:00
15:30
16:00
16:30
17:00
17:30
18:00
Schedule Shift
Clear values:
8:30
9:00
9:30
10:00
10:30
11:00
11:30
12:00
12:30
13:00
14:00
14:30
15:00
15:30
16:00
16:30
17:00
17:30
18:00
Clear
Sum of hours:
Milan
Tomáš
Vojtěch


Warehouse Chief Reed:
Speak with
Priest of the Earth Gerald
at the town entrance. Don't tell him I sent you! Understand?
Give him this necklace and perhaps he'll tell you the secret.


BUTTERFLY A film review by David N. Butterworth Copyright 2000 David N. Butterworth
*** (out of ****)
There are two remarkable images in the Spanish film "Butterfly" ("La Lengua de las Mariposas"). The first is of a young Chinese woman running through a field--a simple, transitory moment filled with fervent beauty. The second is a slow-motion shot of a young boy chasing after a truck while hurling rocks and epithets at the downtrodden people inside.
Both images are related in that they deal with loss--José Luis Cuerda's film is filled with easy metaphors, as subtle and delicate as a butterfly's wing.
The Chinese woman is running to wave goodbye to a young saxophone player, Andrés, who briefly visited her island home and moved her with his innocence and caring. In the film's more potent closing scene, Andrés' younger brother Moncho runs with tears in his eyes as his cries of "atheist" and "murderer" turn to more genuine remembrances of his teacher, Don Gregorio, one of many republican sympathizers now being carted away.
The year is 1936 and Spain is a country divided by the growing Fascist movement.
"Butterfly" describes this time of emotional upheaval through the eyes of an eight-year-old boy (Manuel Lozano, whose resemblance to Mark Wahlberg is uncanny and whose outstanding performance as Moncho belies his years). Moncho, an asthmatic, lives with his parents and his older brother (Alexis de los Santos) and, as the film opens, is being taken to school for the first time. Having learned that the schoolmaster Don Gregorio strikes his boys, Moncho is not surprisingly fearful, but Don Gregorio turns out to be anything but an insensitive brute, taking the little Swallow (Moncho's nickname) under his wing and teaching him about nature, bugs, and the tongues of butterflies.
Don Gregorio is played by Fernando Fernán Gómez, a veteran Spanish actor whose on-screen performances span more than 170 films. He's wonderful, like a cozy old grandfather whose lap you wish you could curl up onto.
Cuerda cleverly relegates the political turmoil to the background so that the overriding feel of "Butterfly" is a heartwarming coming-of-age tale set during a difficult time rather than a movie directly focused on the Spanish Civil War. This allows the director to shape the story with humor and fondness as we witness the two brothers just being boys amid a lot of beautiful settings. But the effect of the country's changing allegiances is very much there in the faces and actions of the Galician townsfolk--the rich landowner who attempts to bribe Don Gregorio with a pair of capons so that his son can receive some personal tutoring, and the priest who airs his disapproval to Moncho's father now that Moncho's schooling has taken away his desire to become an altar boy.

-- David N. Butterworth<EMAIL_ADDRESS>Got beef? Visit "La Movie Boeuf" online at http://members.dca.net/dnb
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


In reality, decision-making is commonly performed without complete information and certainty, exceptions exist and knowledge is not static. Classical reasoning, being monotonic i.e. deductive, is too inflexible to facilitate the style of reasoning this necessitates. Non-classical forms of reasoning model the non-monotonic nature of human reasoning. Belief Revision is such a form of reasoning. It can be described in two ways: using semantics and using postulates. We give a description using postulates. Using this, we explore cognitive reasoning with respect to Belief Revision by means of a survey. Findings suggest that 3 of the 8 properties - Success, Closure and Vacuity - are employed in cognitive reasoning. It is also found that whilst normative reasoning styles are employed in human reasoning, descriptive reasoning styles are more prevalent.
There are two forms of Belief Change: Belief Revision and Belief Update. New information received that conflicts with what you believe indicates flawed prior belief to the former and a change in the world to the latter.
Belief Revision is formalised by Alchourrón, Gärdenfors and Makinson (AGM) [1] as an operation or process satisfying 8 properties.
As the operation has been likened to human reasoning, the main focus in this project was which of the properties humans employed when reasoning.
The 8 AGM properties were used as the basis for questions, posed to participants via a Google Forms survey distributed on Amazon's Mechanical Turk.
Question style was varied, as it has been found to influence answers.
Styles of questions asked included:
Section 1 comprised concrete questions and Section 2 comprised abstract questions. Each question's answer was split into a binary Yes/No response and a typed motivation for the answer. In the analysis, the binary responses were treated as quantitative data and the explanations as qualitative.
An experimental approach was taken to evaluate cognitive reasoning against the AGM Belief Revision properties.
The primary focus was on testing for the presence of the properties in the participants' answers.
The secondary focus was on testing whether the prevailing reasoning style used in response to the questions was descriptive or normative.
Properties Success, Vacuity and Closure were found to be present in the reasoning of more than 50% of the participants for the relevant abstract and concrete questions.
The reasoning style of participants was found to be predominantly descriptive, although is more evenly split between normative and descriptive reasoning for the abstract questions.
[1] Carlos E. Alchourrón, Peter Gärdenfors, and David Makinson. 1985. On the logic of theory change: Partial meet contraction and revision functions. Journal of Symbolic Logic 50 (1985), 510–530. https://doi.org/10.2307/2274239


head_ref_force_pushed
by None at 2022-02-21 16:03:01.head_ref_force_pushed
by None at 2022-02-21 16:05:56.head_ref_force_pushed
by None at 2022-02-21 19:35:50.referenced
by None at 2022-02-21 19:55:21.merged
by None at 2022-02-21 19:55:21.closed
by None at 2022-02-21 19:55:21.head_ref_deleted
by None at 2022-02-21 19:55:21.@dependabot rebase
Superseded by #745.
mentioned
by Dependabot at 2022-02-21 20:11:32.closed
by None at 2022-02-21 20:12:50.head_ref_deleted
by None at 2022-02-21 20:12:51.labeled
by None at 2022-02-21 20:12:49.labeled
by None at 2022-02-21 20:12:49.deployed
by None at 2022-02-21 22:18:49.referenced
by Jane Sandberg at 2022-02-21 22:22:02.merged
by Jane Sandberg at 2022-02-21 22:22:02.closed
by Jane Sandberg at 2022-02-21 22:22:02.head_ref_deleted
by Jane Sandberg at 2022-02-21 22:22:02.labeled
by None at 2022-02-21 19:27:42.NB an existing note might need replacing, or a new note might need to be appended to existing other notes, or a new note might need to be created within an empty notes array.
closed
by None at 2022-02-21 20:00:50.closed
by None at 2022-02-21 21:15:40.99125441517806421 and<PHONE_NUMBER>506421 will be updated. The location had an assignment error both in alma production and alma sandbox. (the alma sandbox was recently copied from alma production). Dont use these two records for QA until they get updated.
ready_for_review
by None at 2022-02-21 17:17:07.renamed
by None at 2022-02-21 17:20:13.assigned
by Christina Chortaria at 2022-02-21 17:21:21.assigned
by Christina Chortaria at 2022-02-21 17:21:47.This was fixed by a sort in orangelight
closed
by None at 2022-02-21 17:24:02.renamed
by None at 2022-02-21 17:37:50.referenced
by Christina Chortaria at 2022-02-21 18:30:41.merged
by Christina Chortaria at 2022-02-21 18:30:41.closed
by Christina Chortaria at 2022-02-21 18:30:41.head_ref_deleted
by Christina Chortaria at 2022-02-21 18:30:41.https://github.com/pulibrary/bibdata/blob/main/marc_to_solr/lib/electronic_portfolio_builder.rb
@christinach, @mzelesky, will we find these notes in the current published data we receive from Alma? I think yes, but wanted to confirm.
The tasks for this ticket are:
@christinach, @mzelesky, will we find these notes in the current published data we receive from Alma? I think yes, but wanted to confirm.
yes the publishing job includes 951$i
mentioned
by Christina Chortaria at 2022-02-21 20:38:28.subscribed
by Christina Chortaria at 2022-02-21 20:38:28.mentioned
by None at 2022-02-21 20:38:28.subscribed
by None at 2022-02-21 20:38:28.mentioned
by Christina Chortaria at 2022-02-21 20:53:06.subscribed
by Christina Chortaria at 2022-02-21 20:53:06.mentioned
by Christina Chortaria at 2022-02-21 22:04:26.subscribed
by Christina Chortaria at 2022-02-21 22:04:26.mentioned
by None at 2022-02-21 22:04:26.subscribed
by None at 2022-02-21 22:04:26.referenced
by Jane Sandberg at 2022-02-21 16:00:41.merged
by Jane Sandberg at 2022-02-21 16:00:41.closed
by Jane Sandberg at 2022-02-21 16:00:41.head_ref_deleted
by Jane Sandberg at 2022-02-21 16:00:42.I used this command to export the data:
pg_dump -U dataspace_prod_db_user -d dataspace_prod_db -f 21Feb2022_full_dataspace_dump.sql
The resulting sql dump file is now on my local laptop. @kelynch let me know when you have time to set up S3 access with me.
assigned
by Bess Sadler at 2022-02-21 15:23:35.assigned
by Kate Lynch at 2022-02-21 15:23:36.mentioned
by Kate Lynch at 2022-02-21 17:29:10.subscribed
by Kate Lynch at 2022-02-21 17:29:10.data no longer retained for this error
closed
by None at 2022-02-21 13:55:00.labeled
by Eliot Jordan at 2022-02-21 16:23:37.That's weird — I can see and edit the ScannedResource (and the images show up in the file manager): https://figgy.princeton.edu/catalog/923c73e9-0d8d-4958-bbaf-1c5e0bd5074e
But I get a 404 when I try to access the manifest, and it doesn't display in the object or in the finding aids.
referenced
by None at 2022-02-21 18:12:07.head_ref_force_pushed
by None at 2022-02-21 18:12:08.referenced
by Eliot Jordan at 2022-02-21 18:29:46.merged
by Eliot Jordan at 2022-02-21 18:29:46.closed
by Eliot Jordan at 2022-02-21 18:29:46.head_ref_deleted
by Eliot Jordan at 2022-02-21 18:29:47.referenced
by Christina Chortaria at 2022-02-21 14:28:39.merged
by Christina Chortaria at 2022-02-21 14:28:39.closed
by Christina Chortaria at 2022-02-21 14:28:39.@mzelesky we need a little more information here to implement this. I don't know if this code sample needs adjustment or is made moot by the easier path we found to manage bursar through Alma analytics last week? Could you provide a sample of the data we are going to use for this and comment on what the status of the code sample is?
mentioned
by None at 2022-02-21 15:12:57.subscribed
by None at 2022-02-21 15:12:57.Good progress! Installation seems to have worked and I'm now registering SSL certs.
When doing QA see also https://github.com/pulibrary/bibdata/pull/1734#issuecomment-1046995765
unassigned
by Christina Chortaria at 2022-02-21 17:11:49.assigned
by Jane Sandberg at 2022-02-21 17:46:10.unassigned
by None at 2022-02-21 20:15:46.Browse names are back!
assigned
by Jane Sandberg at 2022-02-21 17:47:55.closed
by Jane Sandberg at 2022-02-21 20:29:08.assigned
by Jane Sandberg at 2022-02-21 17:45:39.head_ref_force_pushed
by Jane Sandberg at 2022-02-21 19:26:34.head_ref_force_pushed
by Jane Sandberg at 2022-02-21 20:23:09.head_ref_force_pushed
by Jane Sandberg at 2022-02-21 20:33:52.head_ref_force_pushed
by Jane Sandberg at 2022-02-21 21:20:38.assigned
by Hector Correa at 2022-02-21 18:54:00.assigned
by Hector Correa at 2022-02-21 18:53:37.closed
by Kate Lynch at 2022-02-21 19:06:41.referenced
by Kate Lynch at 2022-02-21 19:06:40.merged
by Kate Lynch at 2022-02-21 19:06:40.closed
by Kate Lynch at 2022-02-21 19:06:41.head_ref_deleted
by Kate Lynch at 2022-02-21 19:06:41.assigned
by Hector Correa at 2022-02-21 18:35:24.closed
by Kate Lynch at 2022-02-21 19:07:47.referenced
by Kate Lynch at 2022-02-21 19:07:47.merged
by Kate Lynch at 2022-02-21 19:07:47.closed
by Kate Lynch at 2022-02-21 19:07:48.head_ref_deleted
by Kate Lynch at 2022-02-21 19:07:48.closed
by Kate Lynch at 2022-02-21 19:08:16.referenced
by Kate Lynch at 2022-02-21 19:08:16.merged
by Kate Lynch at 2022-02-21 19:08:16.closed
by Kate Lynch at 2022-02-21 19:08:16.head_ref_deleted
by Kate Lynch at 2022-02-21 19:08:17.ready_for_review
by Kate Lynch at 2022-02-21 21:25:05.referenced
by Christina Chortaria at 2022-02-21 14:29:02.merged
by Christina Chortaria at 2022-02-21 14:29:03.closed
by Christina Chortaria at 2022-02-21 14:29:03.head_ref_deleted
by Christina Chortaria at 2022-02-21 14:29:03.closed
by Alicia Cozine at 2022-02-21 16:51:02.referenced
by Alicia Cozine at 2022-02-21 16:51:02.merged
by Alicia Cozine at 2022-02-21 16:51:02.closed
by Alicia Cozine at 2022-02-21 16:51:02.head_ref_deleted
by Alicia Cozine at 2022-02-21 16:51:03.head_ref_deleted
by Alicia Cozine at 2022-02-21 17:59:42.head_ref_deleted
by Alicia Cozine at 2022-02-21 17:59:42.head_ref_deleted
by Alicia Cozine at 2022-02-21 17:59:44.head_ref_deleted
by Alicia Cozine at 2022-02-21 17:59:45.head_ref_force_pushed
by Francis Kayiwa at 2022-02-21 19:38:01.head_ref_force_pushed
by Francis Kayiwa at 2022-02-21 19:39:28.referenced
by Francis Kayiwa at 2022-02-21 20:50:52.merged
by Francis Kayiwa at 2022-02-21 20:50:52.closed
by Francis Kayiwa at 2022-02-21 20:50:52.head_ref_deleted
by Francis Kayiwa at 2022-02-21 20:50:52.referenced
by Trey Pendragon at 2022-02-21 19:38:32.merged
by Trey Pendragon at 2022-02-21 19:38:32.closed
by Trey Pendragon at 2022-02-21 19:38:32.head_ref_deleted
by Trey Pendragon at 2022-02-21 19:38:33.Another example:
When I search "Office of the Dean of the Faculty," I would expect a top hit to be the "Office of the Dean of the Faculty Records," but it is not. https://findingaids.princeton.edu/?utf8=%E2%9C%93&group=true&f%5Bcollection_sim%5D%5B%5D=&search_field=all_fields&q=Office+of+the+Dean+of+the+Faculty
It doesn't even show up until the third page of search results. https://findingaids.princeton.edu/?group=true&page=3&q=Office+of+the+Dean+of+the+Faculty&search_field=all_fields
closed
by Hector Correa at 2022-02-21 21:21:34.referenced
by Hector Correa at 2022-02-21 21:21:34.merged
by Hector Correa at 2022-02-21 21:21:34.closed
by Hector Correa at 2022-02-21 21:21:34.head_ref_deleted
by Hector Correa at 2022-02-21 21:21:35.closed
by None at 2022-02-21 17:12:47.assigned
by Christina Chortaria at 2022-02-21 17:13:29.@kevinreiss will get an example of a record that is not correct.
mentioned
by Kevin Reiss at 2022-02-21 17:32:46.subscribed
by Kevin Reiss at 2022-02-21 17:32:47.Resolved: Library Catalog is back up in 336dbfb
.
labeled
by Francis Kayiwa at 2022-02-21 05:57:55.labeled
by Francis Kayiwa at 2022-02-21 05:57:55.locked
by Francis Kayiwa at 2022-02-21 05:57:56.closed
by Francis Kayiwa at 2022-02-21 08:37:14.


My developer story
I'm originally a self-taught programmer, and over the years I’ve learned many new technologies and programming languages, enough so that I can get up to speed pretty quickly on any new technology or language. Still, I feel that to be the best developer I can be, and to be competitive, it’s really best to have a well-rounded education that is complete with a degree. So, currently I'm a full-time student and will finish my Associate's Degree in Programming this fall so I can get back to work. After that I will start working on my Bachelor’s Degree in Application Development here at NSC, which is thankfully a night program.
I love challenges
As with anything, developing websites and web applications takes time and patience as there are always new challenges to overcome. But that’s one of the main reasons I love being a developer, that and making cool stuff. So, I constantly struggle with new challenges in order to grow.


Instructions:
You're looking at a top-down view of a point cloud of a building. The red points show the walls of the building and the white points (outlined in blue or red) are places where people stood to take photographs (used to make these point clouds).
Your task is to align the red points representing a building's walls with the satelite image of that building. Here is an example of Piazza dei Miracoli. See how the curved part and straight parts match up with the walls. Notice that the white points don't overlap other buildings -- they show locations where a person can stand. You might see a model where these white points line up with sidewalks and roads.


{% object_display author "text" "black" %}{% if about %}, {{ about }}{% endif %}
{% elif case == "date" %}
{{ created|datediff:"SHORT_DATE_FORMAT" }}
{% endif %}
{#Seb: (about 'itemprop') I took contributor instead of author because author can be only one, and I dont know what it will do if Google sees many authors in one question+many answers for example ...#}


---
layout: post
title: Things Currently Frustrating Me About Client Work
---
- Leaving prominent space free for a completely superfluous Flash animation.
- Spending time creating a temporary page that’ll sit at your URL while I’m creating your website instead of just creating your website.
- Six week turnarounds.
- Word documents.
- Phone calls.
- A trickle of information and content.
- An inflated idea of how important your website is.


maxDepth
in Namer
configurable. 03cc3197
namerMaxDepth
)SslSessionInfo
is now public. It is
intended for providing information about a connection’s SSL/TLS session.
811fe004c.t.finagle.DtabFlags
trait which defines a Flag and function for
appending to the “base” c.t.finagle.Dtab
delegation table. 675630dfc.t.f.http.Message.trailers
to access trailing headers on a fully-buffered message
(isChunked == false) or c.t.f.http.Message.chunkReader
on a message with chunked payload
(isChunked == true). 351c43c1srv/backup\_request\_processing
, when servers are processing backup requests.rejected_invalid_header_names
and rejected_invalid_header_values
. 41bd061arequest_stream_duration_ms
and response_stream_duration_ms
. They are enabled by using
.withHttpStats
on Http.Client
and Http.Server
916f4a26com.twitter.finagle.mysql.IncludeHandshakeInServiceAcquisition
, has
been added. Turning on this toggle will move MySQL session establishment (connection phase) to be
part of service acqusition. fe4d8919c.t.f.filter.NackAdmissionFilter
for details. This can be disabled by setting the
global flag, com.twitter.finagle.client.useNackAdmissionFilter
, to false
.
aa36f56bLatencyCompensation
now applies to service acquisition. 1ec020a5com.twitter.finagle.netty4.trackReferenceLeaks
to true
to enable.
f63d7f7afinagle: Dropped a dependency on Netty 3 03c773a5:
c.t.f.http.Cookie
no longer takes Netty’s DefaultCookie
in the constructorfinagle-core: The peerCertificate
methods of c.t.f.t.TransportContext
and c.t.f.p.PushChannelHandle
have been replaced with the more robust sslSessionInfo
. Users looking for just the functional
equivalence of peerCertificate can use sslSessionInfo.peerCertificates.headOption
.
dc4bfbcf
finagle-core: The com.twitter.finagle.core.UseClientNackAdmissionFilter
toggle has been replaced
by a global flag, com.twitter.finagle.client.useNackAdmissionFilter
.
aa36f56b
finagle-thrift: Allow users to specify stringLengthLimit
and containerLengthLimit
233150a9
com.twitter.finagle.thrift.Protocols#binaryFactory
renamed to
stringLengthLimit
to reflect usagecontainerLengthLimit
added to com.twitter.finagle.thrift.Protocols#binaryFactory
globalFlags
argument to EmbeddedTwitterServer
, which will allow for scoping
a c.t.a.GlobalFlag
property change to the lifecycle of the underlying TwitterServer, as a
c.t.a.GlobalFlag
is normally scoped to the JVM/process. This change is also reflected in
EmbeddedHttpServer
and EmbeddedThriftServer
constructors. 38a3180atoOrderedMap
implicit conversion for java.util.Map
1686420crocksdb.manifest.preallocation.size
with default value 4.megabytes
to c.t.f.k.c.RocksDbFlags
and set value in c.t.f.k.c.FinatraRocksDBConfig
. 0cac9785commaSeparatedList
boolean parameter to QueryParams
, for parsing comma-separated
query parameters into collection types. 0ae425a2c.t.finatra.thrift.exceptions.FinatraThriftExceptionMapper
,
c.t.finatra.thrift.filters.ClientIdAcceptlistFilter
,
c.t.finatra.thrift.modules.ClientIdAcceptlistModule
,
c.t.finatra.thrift.filters.ClientIdWhitelistFilter
,
c.t.finatra.thrift.modules.ClientIdWhitelistModule
,
and the finatra/finatra_thrift_exceptions.thrift IDL. caed5ec8StreamingController
to use Reader
instead of AsyncStream
3d5e3282FinatraKeyValueStore
as custom store. cd38ddf6ThriftRouter
now requires c.t.f.StackTransformer
.
a96312d2EmbeddedKafka
implementation of beforeAll()
makes
call to super.beforeAll()
so hooks registered in super class get executed. 9404b28fFinatraTransformer.timerStore
config object references immutable
map which causes exception thrown if user code calls AbstractStoreBuilder.withLoggingDisabled
.
Fixed FinatraTransformer.timerStore
to convert from immutable map to mutable map before
forwarding config object to kafka library. 827c4612c.t.server.ShadowAdminServer
. e94e8300c.t.finagle.DtabFlags
to allow servers to append to the “base” c.t.finagle.Dtab
delegation table. Users can now call c.t.finagle.DtabFlags\#addDtabs()
when they want to append
the parsed Flag
value to the Dtab.base
delegation table. Users should note to only call this
method after Flag parsing has occurred (which is after init and before premain).
We also update the c.t.server.handler.DtabHandler
to always return a proper JSON response of
the currently configured c.t.finagle.Dtab.base
. a00e3942Flag.let
by providing a Flag.letParse
method
0d9dded3


A semantic sample application for the Software Languages Team and Institute for Web Science at the University of Koblenz-Landau.
Based on λ-DL. You can find this application on GitHub.


Turn your 2D designs into high quality, 3D product shots in seconds using free Photoshop actions by PSDCovers! Visit their website to download some of their awesome, free photoshop actions!
This template features the 'Lato' font, part of the Google Web Font library, as well as icons from Font Awesome.
Contact: Jamie Oh
Email<EMAIL_ADDRESS>If you wish to contact me directly, please type your:


Wondering where to find an apartment? Worry not. Find an affordable apartment near you or at your preferred location in Nairobi. Just tap on the button below to get started.
A place you can call HOME.
Housify has all the type of houses you need, Housing brought to your door steps, About pricing This section hold all houses of different prices from the lowest to the highest keeping a quality standard, Hope in and see more for yourself.
Click to viewWelcome to the House of your choice with good quality and well decorated items.

Location ReceCourse, Lenana Rd
A two bedroom house with clean environment with good security and car park space
Location Karen, Hill park Rd
A One bedroom house with clean environment with good security and car park space
Location Utawala, Airport park Rd
A Five bedroom Bungalow with clean environment with good security and car park space
Location Kileleshwa, Hill park Rd
A one bedroom house with clean environment with good security and car park space, Stand up generator.
Location ReceCourse, Lenana Rd
A two bedroom house with clean environment with good security and car park space
Location Karen, Hill park Rd
A One bedroom house with clean environment with good security and car park space
Location Utawala, Airport park Rd
A Five bedroom Bungalow with clean environment with good security and car park space
Location Kileleshwa, Hill park Rd
A one bedroom house with clean environment with good security and car park space, Stand up generator.
Location ReceCourse, Lenana Rd
The property enjoys proximity to Village market, UN, Embassy of the United States. Schools include Rosslyn academy.
Location Runda, Evergreen Rd
Comprises of a luxurious 4 bedroom all en-suite villas each with a mature garden on eigth an acre. Friendly community
Location Runda, Gardens Rd
Executive and stylish five bedroom villa to let in Karen. All bedrooms have in-build wardrobes.Adequate water.
Location Karen, Hospital Rd
A one bedroom house with clean environment with good security and car park space.
Location RaceCourse, Lenana Rd
Lovely beautiful modern house with bright light and awesome living spaces.
Location Karen, Hill park Rd
Strategically located along Kikuyu Road are these modern 2 bedroom apartments of 14 units to let.
Location Kikuyu, Kilome Rd
Strategically located along Kikuyu Road are these modern 1 bedroom apartments to let.
Location KidFarmco, Kikuyu Rd
This home is one of two maisonettes built on half an acre with mature gardens and a small kitchen garden.
Location Kiambu, Mushroom Rd
The Residences go beyond what is expected and include lush manicured gardens, lifts, a fully equipped gym.
Location Garden City, Thika Rd
Modern houses, stand alone but shared parking and security guard.
Location Utawala, South End Rd
4 bedroom all en suite in Mombasa Road Yamin in the park.Sitting on an 1/8 of an acre.
Location Cabanas, Mombasa Road
Very Spacious 4 Bedrooms plus 2 DSQ House in a Gated Community.3 cars parking.
Location ReceCourse, Lenana Rd
A five bedrooms house with self contained items.
Location Ngong, Ngong Rd
A Four bedrooms house with parking and wifi Availabe.
Location South Hill, Mombasa Rd
A Two bedrooms Bungalow self contained house with tight security.
Location Langata, Langata Rd
A Three bedrooms house with security and wifi available.
Location Kawangware, Waiyaki Rd
A Five bedrooms house with Wifi availabe and swimming pool to be used anytime of the day.
Location Kikuyi, Naivasha Rd
A Five bedrooms Bungalow with car park space and clean swimming pool for leasure.
Location Karen, Airport Rd
A Four bedrooms Bungalow with good environment ,Wifi Available and car Parking.
Location Corner , Hill park Rd
A Four bedrooms house with clean environment with good security and car parking.
Location Utawala, railway Rd
A Three bedrooms house with self contained items.Car parking and wifi Available.
Location South B, sare Rd
A Four bedrooms house with clean environment with security and playing ground for children.
Location Ngara, Ngara Rd
A Five bedroom Bungalow with clean environment with good security and car park space
Location South B, Mombasa Rd
A one bedroom house with wifi available ,swimming pool ,car parking space and security.
Location Ngara, Ngara Rd
AStandard modern room for 2-3 people.
Family friendly,
A dining room with a well stacked library
Karen, Hill park Rd
An appointed Single luxury bedroom
At a stone's throw from the airport.
In built air conditioning and free WIFI
Location Utawala, Airport park Rd
A 5 room bungalow
An in-built 24/7 alarm
Location Kileleshwa, Hill park Rd
A 4 room family house
free WIFI
2 parking spaces
An in-built air conditioning system
Location ReceCourse, Lenana Rd
A 6 room home
Spacious corridor
A parking space
A backyard Energy efficient garden
Location Karen, Hill park Rd
A modern-vintage house in sub-urban Thii Ndigwa,Kiambu
An olympic-size swimming pool
An in-built 24/7 alarm system
Location Utawala, Airport park Rd
A spacious, Fully Furnished 2+ bedroom home
Family Friendly with Stunning View of Nyali beach
Location Nyali Rd, Nyali, Mombasa
A double-standard room.
cozy & fully-Furnished guest house
Terrace for morning coffee in the sun
Location ReceCourse, Lenana Rd
A 4 bedroom vintage house
En-suite bathroom
A fully-equipped kitchen
A 24/7 alarm system
Location Karen, Hill park Rd
A spacious, fully-furnished modern home.
A great view of the Maasai Mara game reserve
A spacious open corridor for evening tea with a great view of the setting sun.
Location Maasai Mara rd, Tsavo
A 4 bedroom modern modern house
A library with a wide collection of different genres.

Location ReceCourse, Lenana Rd
A two bedroom house with clean environment with good security and car park space
Location Karen, Hill park Rd
A One bedroom house with clean environment with good security and car park space
Location Utawala, Airport park Rd
A Five bedroom Bungalow with clean environment with good security and car park space
Location Kileleshwa, Hill park Rd
A one bedroom house with clean environment with good security and car park space, Stand up generator.
Location ReceCourse, Lenana Rd
A two bedroom house with clean environment with good security and car park space
Location Karen, Hill park Rd
A One bedroom house with clean environment with good security and car park space
Location Utawala, Airport park Rd
A Five bedroom Bungalow with clean environment with good security and car park space
Location Kileleshwa, Hill park Rd
A one bedroom house with clean environment with good security and car park space, Stand up generator.
Location ReceCourse, Lenana Rd
The property enjoys proximity to Village market, UN, Embassy of the United States. Schools include Rosslyn academy.
Location Runda, Evergreen Rd
Comprises of a luxurious 4 bedroom all en-suite villas each with a mature garden on eigth an acre. Friendly community
Location Runda, Gardens Rd
Executive and stylish five bedroom villa to let in Karen. All bedrooms have in-build wardrobes.Adequate water.
Location Karen, Hospital Rd
A one bedroom house with clean environment with good security and car park space.
Location RaceCourse, Lenana Rd
Lovely beautiful modern house with bright light and awesome living spaces.
Location Karen, Hill park Rd
Strategically located along Kikuyu Road are these modern 2 bedroom apartments of 14 units to let.
Location Kikuyu, Kilome Rd
Strategically located along Kikuyu Road are these modern 1 bedroom apartments to let.
Location KidFarmco, Kikuyu Rd
This home is one of two maisonettes built on half an acre with mature gardens and a small kitchen garden.
Location Kiambu, Mushroom Rd
The Residences go beyond what is expected and include lush manicured gardens, lifts, a fully equipped gym.
Location Garden City, Thika Rd
Modern houses, stand alone but shared parking and security guard.
Location Utawala, South End Rd
4 bedroom all en suite in Mombasa Road Yamin in the park.Sitting on an 1/8 of an acre.
Location Cabanas, Mombasa Road
Very Spacious 4 Bedrooms plus 2 DSQ House in a Gated Community.3 cars parking.
Location ReceCourse, Lenana Rd
A five bedrooms house with self contained items.
Location Ngong, Ngong Rd
A Four bedrooms house with parking and wifi Availabe.
Location South Hill, Mombasa Rd
A Two bedrooms Bungalow self contained house with tight security.
Location Langata, Langata Rd
A Three bedrooms house with security and wifi available.
Location Kawangware, Waiyaki Rd
A Five bedrooms house with Wifi availabe and swimming pool to be used anytime of the day.
Location Kikuyi, Naivasha Rd
A Five bedrooms Bungalow with car park space and clean swimming pool for leasure.
Location Karen, Airport Rd
A Four bedrooms Bungalow with good environment ,Wifi Available and car Parking.
Location Corner , Hill park Rd
A Four bedrooms house with clean environment with good security and car parking.
Location Utawala, railway Rd
A Three bedrooms house with self contained items.Car parking and wifi Available.
Location South B, sare Rd
A Four bedrooms house with clean environment with security and playing ground for children.
Location Ngara, Ngara Rd
A Five bedroom Bungalow with clean environment with good security and car park space
Location South B, Mombasa Rd
A one bedroom house with wifi available ,swimming pool ,car parking space and security.
Location Ngara, Ngara Rd
AStandard modern room for 2-3 people.
Family friendly,
A dining room with a well stacked library
Karen, Hill park Rd
An appointed Single luxury bedroom
At a stone's throw from the airport.
In built air conditioning and free WIFI
Location Utawala, Airport park Rd
A 5 room bungalow
An in-built 24/7 alarm
Location Kileleshwa, Hill park Rd
A 4 room family house
free WIFI
2 parking spaces
An in-built air conditioning system
Location ReceCourse, Lenana Rd
A 6 room home
Spacious corridor
A parking space
A backyard Energy efficient garden
Location Karen, Hill park Rd
A modern-vintage house in sub-urban Thii Ndigwa,Kiambu
An olympic-size swimming pool
An in-built 24/7 alarm system
Location Utawala, Airport park Rd
A spacious, Fully Furnished 2+ bedroom home
Family Friendly with Stunning View of Nyali beach
Location Nyali Rd, Nyali, Mombasa
A double-standard room.
cozy & fully-Furnished guest house
Terrace for morning coffee in the sun
Location ReceCourse, Lenana Rd
A 4 bedroom vintage house
En-suite bathroom
A fully-equipped kitchen
A 24/7 alarm system
Location Karen, Hill park Rd
A spacious, fully-furnished modern home.
A great view of the Maasai Mara game reserve
A spacious open corridor for evening tea with a great view of the setting sun.
Location Maasai Mara rd, Tsavo
A 4 bedroom modern modern house
A library with a wide collection of different genres.
A free WIFI
A view of Karura forest canopybr
Location Kileleshwa, Hill park Rd
A single, exclusive room;
In-built air-conditioning system
A free WIFI
Location ReceCourse, Lenana Rd