text:
//
//  DTDownload.m
//  DTFoundation
//
//  Created by Oliver Drobnik on 8/6/10.
//  Copyright 2010 Drobnik.com. All rights reserved.
//

#import "DTDownload.h"

#define PROGRESS_INTERVAL 0.017

NSString *const DTDownloadDidStartNotification = @"DTDownloadDidStartNotification";
NSString *const DTDownloadDidFinishNotification = @"DTDownloadDidFinishNotification";
NSString *const DTDownloadDidCancelNotification = @"DTDownloadDidCancelNotification";
NSString *const DTDownloadProgressNotification = @"DTDownloadProgressNotification";

NSString * const DTDownloadErrorDomain = @"DTDownload";

static NSString *const DownloadEntryErrorCodeDictionaryKey = @"DownloadEntryErrorCodeDictionaryKey";
static NSString *const DownloadEntryErrorDomainDictionaryKey = @"DownloadEntryErrorDomainDictionaryKey";
static NSString *const DownloadEntryPath = @"DownloadEntryPath";
static NSString *const DownloadEntryProgressBytesSoFar = @"DownloadEntryProgressBytesSoFar";
static NSString *const DownloadEntryProgressTotalToLoad = @"DownloadEntryProgressTotalToLoad";
static NSString *const DownloadEntryResumeInformation = @"DownloadEntryResumeInformation";
static NSString *const DownloadEntryURL = @"DownloadEntryURL";
static NSString *const NSURLDownloadBytesReceived = @"NSURLDownloadBytesReceived";
static NSString *const NSURLDownloadEntityTag = @"NSURLDownloadEntityTag";

@interface DTDownload () <NSURLConnectionDelegate>

@property(nonatomic, retain) NSDate *lastPacketTimestamp;

- (void)storeDownloadInfo;

- (void)_completeWithSuccess;

- (void)_completeWithError:(NSError *)error;

@end

@implementation DTDownload
{
	NSURL *_URL;
	NSString *_downloadEntityTag;
	NSDate *_lastModifiedDate;

	NSString *_destinationPath;
	NSString *_destinationFileName;

	// downloading
	NSURLConnection *_urlConnection;
	NSMutableData *_receivedData;

	NSDate *_lastPacketTimestamp;
	float _previousSpeed;

	long long _receivedBytes;
	long long _expectedContentLength;
	long long _resumeFileOffset;

	NSString *_contentType;

	NSString *_destinationBundleFilePath;
	NSFileHandle *_destinationFileHandle;

	__unsafe_unretained id <DTDownloadDelegate> _delegate;

	BOOL _headOnly;

	// response handlers
	DTDownloadResponseHandler _responseHandler;
	DTDownloadCompletionHandler _completionHandler;

	NSDate *_lastProgressSentDate;

	BOOL _isResume;
}

#pragma mark Downloading

- (id)initWithURL:(NSURL *)URL {
	return [self initWithURL:URL withDestinationPath:nil];
}

- (id)initWithURL:(NSURL *)URL withDestinationPath:(NSString *)destinationPath;
{
	NSAssert(![URL isFileURL], @"File URL is illegal parameter for DTDownload");

	self = [super init];
	if (self)
	{
		_URL = URL;
		_resumeFileOffset = 0;
		_destinationPath = destinationPath;
		_isResume = NO;
#if TARGET_OS_IPHONE
		[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillTerminate:) name:UIApplicationWillTerminateNotification object:nil];
#else
		[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillTerminate:) name:NSApplicationWillTerminateNotification object:nil];
#endif
	}
	return self;
}

- (id)initWithURL:(NSURL *)URL withDestinationFile:(NSString *)destinationFile {
	self = [self initWithURL:URL withDestinationPath:[destinationFile stringByDeletingLastPathComponent]];
	_destinationFileName = [destinationFile lastPathComponent];
	return self;
}

- (id)initWithDictionary:(NSDictionary *)dictionary atBundlePath:(NSString *)path;
{
	self = [super init];
	if (self)
	{
		[self setInfoDictionary:dictionary];

		// update the destination path so that the path is correct also if the download bundle was moved
		_destinationBundleFilePath = [path stringByAppendingPathComponent:[_destinationBundleFilePath lastPathComponent]];

		NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:_destinationBundleFilePath error:nil];
		NSNumber *fileSize = [fileAttributes objectForKey:NSFileSize];
		if ([fileSize longLongValue] < _resumeFileOffset) {
			_resumeFileOffset = 0;
		}
		_isResume = NO;

#if TARGET_OS_IPHONE
		[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillTerminate:) name:UIApplicationWillTerminateNotification object:nil];
#else
		[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillTerminate:) name:NSApplicationWillTerminateNotification object:nil];
#endif
	}
	return self;
}

+ (DTDownload *)downloadForURL:(NSURL *)URL atPath:(NSString *)path
{
	NSFileManager *fileManager = [NSFileManager defaultManager];
	NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtPath:path];
	NSString *file;
	while (file = [enumerator nextObject])
	{
		if ([[file pathExtension] isEqualToString:@"download"])
		{
			NSString *bundlePath = [path stringByAppendingPathComponent:file];
			NSString *infoFile = [bundlePath stringByAppendingPathComponent:@"Info.plist"];
			NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:infoFile];
			NSString *infoFileURL = [dictionary objectForKey:DownloadEntryURL];
			if ([infoFileURL isEqualToString:[URL absoluteString]])
			{
				return [[DTDownload alloc] initWithDictionary:dictionary atBundlePath:bundlePath];
			}
		}
	}
	return [[DTDownload alloc] initWithURL:URL withDestinationPath:path];
}

- (void)dealloc
{
	_urlConnection = nil;
	[[NSNotificationCenter defaultCenter] removeObserver:self];

	[self closeDestinationFile];
	// stop connection if still in flight
	[self stop];
}

- (void)startHEAD
{
	NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:_URL
																			 cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
																		timeoutInterval:60.0];
	[request setHTTPMethod:@"HEAD"];

	// startNext downloading
	_urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];

	// without this special it would get paused during scrolling of scroll views
	[_urlConnection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
	[_urlConnection start];

	// getting only a HEAD
	_headOnly = YES;
}

- (void)start
{
	if (_urlConnection)
	{
		return;
	}

	NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:_URL cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60.0];

	if (_receivedBytes && _receivedBytes == _expectedContentLength)
	{
		// Already done!
		[self _completeWithSuccess];
		return;
	}

	[_additionalHTTPHeaders enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {

		[request setValue:obj forHTTPHeaderField:key];
	}];

	if (_resumeFileOffset)
	{
		[request setValue:[NSString stringWithFormat:@"bytes=%lld-", _resumeFileOffset] forHTTPHeaderField:@"Range"];
	}

	[[NSNotificationCenter defaultCenter] postNotificationName:DTDownloadDidStartNotification object:self];

	_urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];

	// without this special it would get paused during scrolling of scroll views
	[_urlConnection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];

	// start urlConnection on the main queue, because when download lots of small file, we had a crash when this is done on a background thread
	dispatch_async(dispatch_get_main_queue(), ^{

							[_urlConnection start];
						});

	if (_urlConnection)
	{
		_receivedData = [NSMutableData data];
	}

	_lastProgressSentDate = [NSDate date];
}

- (void)stop
{
	if (!_urlConnection)
	{
		return;
	}

	// update resume info on disk if necessary
	[self storeDownloadInfo];
	_resumeFileOffset = _receivedBytes;

	// only send cancel notification if it was loading

	// cancel the connection
	[_urlConnection cancel];
	_urlConnection = nil;

	// send notification
	[[NSNotificationCenter defaultCenter] postNotificationName:DTDownloadDidCancelNotification object:self];

	if ([_delegate respondsToSelector:@selector(downloadDidCancel:)])
	{
		[_delegate downloadDidCancel:self];
	}
	_receivedData = nil;
	_destinationFileHandle = nil;
}

- (void)cleanup
{
	[self stop];

	// remove cached file
	NSFileManager *fileManager = [[NSFileManager alloc] init];
	[fileManager removeItemAtPath:_destinationBundleFilePath error:nil];
	[fileManager removeItemAtPath:[[self downloadBundlePath] stringByAppendingPathComponent:@"Info.plist"] error:nil];
	[fileManager removeItemAtPath:[self downloadBundlePath] error:nil];

}

- (NSString *)description
{
	return [NSString stringWithFormat:@"<%@ URL='%@'>", NSStringFromClass([self class]), self.URL];
}

#pragma mark - Internal Utilities

- (void)_completeWithError:(NSError *)error
{
	// notify delegate of error
	if ([_delegate respondsToSelector:@selector(download:didFailWithError:)])
	{
		[_delegate download:self didFailWithError:error];
	}

	// call completion handler
	if (_completionHandler)
	{
		_completionHandler(nil, error);
	}

	_urlConnection = nil;

	// send finish notification with error in userInfo
	NSDictionary *userInfo = @{@"Error":error};
	[[NSNotificationCenter defaultCenter] postNotificationName:DTDownloadDidFinishNotification object:self userInfo:userInfo];
}

- (void)_completeWithSuccess
{

	if (_headOnly)
	{
		// only a HEAD request
		if ([_delegate respondsToSelector:@selector(downloadDidFinishHEAD:)])
		{
			[_delegate downloadDidFinishHEAD:self];
		}
	}
	else
	{
		// normal GET request
		NSError *error = nil;

		NSFileManager *fileManager = [NSFileManager defaultManager];

		NSString *fileName = [_destinationBundleFilePath lastPathComponent];
		NSString *targetPath = [[[_destinationBundleFilePath stringByDeletingLastPathComponent] stringByDeletingLastPathComponent]	stringByAppendingPathComponent:fileName];

		if (![fileManager moveItemAtPath:_destinationBundleFilePath toPath:targetPath error:&error])
		{
			NSLog(@"Cannot move item from %@ to %@, %@", _destinationBundleFilePath, targetPath, [error localizedDescription]);
			[self _completeWithError:error];
			return;
		}

		if (![fileManager removeItemAtPath:[_destinationBundleFilePath stringByDeletingLastPathComponent] error:&error])
		{
			NSLog(@"Cannot remove item from %@, %@ ", [_destinationBundleFilePath stringByDeletingLastPathComponent], [error localizedDescription]);
		}

		NSData *data = [NSData dataWithContentsOfFile:targetPath options:NSDataReadingMappedIfSafe error:&error];

		if (error)
		{
			NSLog(@"Error occured when reading file from path: %@", targetPath);
		}

		// Error: finished file size differs from header size -> so throw error
		if (_expectedContentLength>0 && [data length] != _expectedContentLength)
		{
			NSString *errorMessage = [NSString stringWithFormat:@"Error: finished file size %d differs from header size %d", (int)[data length], (int)_expectedContentLength];

			NSLog(errorMessage, nil);

			NSDictionary *userInfo = @{errorMessage : NSLocalizedDescriptionKey};

			NSError *error = [NSError errorWithDomain:DTDownloadErrorDomain code:1 userInfo:userInfo];

			[self _completeWithError:error];

			return;
		}

		// notify delegate
		if ([_delegate respondsToSelector:@selector(download:didFinishWithFile:)])
		{
			[_delegate download:self didFinishWithFile:targetPath];
		}

		// run completion handler
		if (_completionHandler)
		{
			_completionHandler(targetPath, nil);
		}
	}

	// nil the completion handlers in case they captured self
	_urlConnection = nil;

	// send notification
	[[NSNotificationCenter defaultCenter] postNotificationName:DTDownloadDidFinishNotification object:self];
}

- (void)setInfoDictionary:(NSDictionary *)infoDictionary
{
	_URL = [NSURL URLWithString:[infoDictionary objectForKey:DownloadEntryURL]];
	_destinationBundleFilePath = [infoDictionary objectForKey:DownloadEntryPath];
	_expectedContentLength = [[infoDictionary objectForKey:DownloadEntryProgressTotalToLoad] longLongValue];
	NSDictionary *resumeInfo = [infoDictionary objectForKey:DownloadEntryResumeInformation];
	_resumeFileOffset = [[resumeInfo objectForKey:NSURLDownloadBytesReceived] longLongValue];
	_downloadEntityTag = [infoDictionary objectForKey:NSURLDownloadEntityTag];
	_expectedContentLength = [[infoDictionary objectForKey:DownloadEntryProgressTotalToLoad] longLongValue];
}

- (NSDictionary *)infoDictionary
{
	NSMutableDictionary *resumeDictionary = [NSMutableDictionary dictionary];
	[resumeDictionary setObject:[NSNumber numberWithLongLong:_receivedBytes] forKey:NSURLDownloadBytesReceived];
	if (_downloadEntityTag)
	{
		[resumeDictionary setObject:_downloadEntityTag forKey:NSURLDownloadEntityTag];
	}
	[resumeDictionary setObject:[_URL absoluteString] forKey:DownloadEntryURL];
	NSDictionary *infoDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
											  [NSNumber numberWithInt:-999], DownloadEntryErrorCodeDictionaryKey,
											  NSURLErrorDomain, DownloadEntryErrorDomainDictionaryKey,
											  _destinationBundleFilePath, DownloadEntryPath,
											  [NSNumber numberWithLongLong:_receivedBytes], DownloadEntryProgressBytesSoFar,
											  [NSNumber numberWithLongLong:_expectedContentLength], DownloadEntryProgressTotalToLoad,
											  resumeDictionary, DownloadEntryResumeInformation,
											  [_URL absoluteString], DownloadEntryURL
											  , nil];

	return infoDictionary;
}

- (void)storeDownloadInfo
{
	// no need to save resume info if we have not received any bytes yet, or download is complete
	if (_receivedBytes == 0 || (_receivedBytes >= _expectedContentLength) || _headOnly)
	{
		return;
	}

	NSString *infoPath = [[self downloadBundlePath] stringByAppendingPathComponent:@"Info.plist"];
	[[self infoDictionary] writeToFile:infoPath atomically:YES];
}

#pragma mark - NSURLConnection Delegate

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
	_receivedData = nil;
	_urlConnection = nil;

	[self closeDestinationFile];

	// update resume info on disk
	[self storeDownloadInfo];

	[self _completeWithError:error];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
	if ([response isKindOfClass:[NSHTTPURLResponse class]])
	{
		NSHTTPURLResponse *http = (NSHTTPURLResponse *) response;
		_contentType = http.MIMEType;

		if (http.statusCode >= 400)
		{
			NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSHTTPURLResponse localizedStringForStatusCode:http.statusCode] forKey:NSLocalizedDescriptionKey];

			NSError *error = [NSError errorWithDomain:DTDownloadErrorDomain code:http.statusCode userInfo:userInfo];

			[connection cancel];

			[self connection:connection didFailWithError:error];
			return;
		}

		if (_expectedContentLength <= 0)
		{
			_expectedContentLength = [response expectedContentLength];
		}

		NSString *currentEntityTag = [http.allHeaderFields objectForKey:@"Etag"];
		if (!_downloadEntityTag)
		{
			_downloadEntityTag = currentEntityTag;
		}
		else
		{
			// check if it's the same as from last time
			if (![self.downloadEntityTag isEqualToString:currentEntityTag])
			{
				// file was changed on server restart from beginning
				[_urlConnection cancel];
				_urlConnection = nil;
				// update loading flag to allow resume
				[self start];
			}
		}

		// get something to identify file
		NSString *modified = [http.allHeaderFields objectForKey:@"Last-Modified"];
		if (modified)
		{
			NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
			[dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"];
			NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
			[dateFormatter setLocale:locale];

			_lastModifiedDate = [dateFormatter dateFromString:modified];

            if (!_lastModifiedDate)
            {
                NSLog(@"Cannot parse Last-Modified %@", modified);
            }
		}

        BOOL shouldCancel = NO;

        if (http.statusCode == 304)
        {
            // treat Not Modified same as a cancel to avoid returning empty file
            shouldCancel = YES;
        }

		if (_responseHandler)
		{
			_responseHandler([http allHeaderFields], &shouldCancel);
		}

        if (shouldCancel)
        {
            [self stop];

            // exit here to avoid adding of download bundle folder
            return;
        }

		// if _destinationBundleFilePath is not nil this means that it is a resumable download
		if (!_destinationBundleFilePath)
		{
			_destinationBundleFilePath = [self createBundleFilePathForFilename:[self filenameFromHeader:http.allHeaderFields]];
		}

		_isResume = NO;

		if (http.statusCode == 206)
		{
			// partial content, so resume
			NSString *contentRange = [[http allHeaderFields] objectForKey:@"Content-Range"];

			if (contentRange)
			{
				NSString *expectedContentRangePrefix = [NSString stringWithFormat:@"bytes %lld-", _resumeFileOffset];
				if ([[contentRange lowercaseString] hasPrefix:expectedContentRangePrefix])
				{
					_isResume = YES;
				}
			}
		}
	}
	else
	{
		[_urlConnection cancel];
	}
	// could be redirections, so we set the Length to 0 every time
	[_receivedData setLength:0];
}

- (NSString *)createBundleFilePathForFilename:(NSString *)fileName
{
	if (_destinationFileName) {
		fileName = _destinationFileName;
	}
	else if (!fileName)
	{
		fileName = [[_URL path] lastPathComponent];
	}
	NSString *folderForDownloading = _destinationPath;
	if (!folderForDownloading)
	{
		folderForDownloading = NSTemporaryDirectory();
	}

	NSString * fullFileName = [self uniqueFileNameForFile:fileName atDestinationPath:folderForDownloading];

	NSString *downloadBundlePath = [folderForDownloading stringByAppendingPathComponent:[fullFileName stringByAppendingPathExtension:@"download"]];
	NSFileManager *fileManager = [NSFileManager defaultManager];

	if (![fileManager fileExistsAtPath:self.downloadBundlePath])
	{
		NSError *error;
		if (![fileManager createDirectoryAtPath:downloadBundlePath withIntermediateDirectories:YES attributes:nil error:&error])
		{
			NSLog(@"Cannot create download folder %@, %@", downloadBundlePath, [error localizedDescription]);
			[self _completeWithError:error];
			return nil;
		}

	}
	return [downloadBundlePath stringByAppendingPathComponent:fullFileName];
}

- (NSString *)uniqueFileNameForFile:(NSString *)fileName atDestinationPath:(NSString *)path {

	NSString *resultFileName = [path stringByAppendingPathComponent:fileName];
	NSFileManager *fileManager = [NSFileManager defaultManager];

	int i=1;
	while ([fileManager fileExistsAtPath:resultFileName] || [fileManager fileExistsAtPath:[resultFileName stringByAppendingPathExtension:@"download"]]) {
		NSString *extension = [fileName pathExtension];
		if ([extension length] > 0) {
			NSInteger endIndex = [fileName length]- [extension length] - 1;
			NSString *basename = [NSString stringWithFormat: @"%@-%d", [fileName substringToIndex:endIndex], i];
			resultFileName = [[path stringByAppendingPathComponent:basename] stringByAppendingPathExtension:extension];
		} else {
			resultFileName = [path stringByAppendingPathComponent:[NSString stringWithFormat: @"%@-%d", fileName, i]];
		}

		i++;
	}
	return [resultFileName lastPathComponent];
}

- (NSString *)filenameFromHeader:(NSDictionary *)headerDictionary
{
	NSString *contentDisposition = [headerDictionary objectForKey:@"Content-disposition"];

	NSRange range = [contentDisposition rangeOfString:@"filename=\""];
	if (range.location != NSNotFound)
	{
		NSUInteger startIndex = range.location + range.length;
		NSUInteger length = contentDisposition.length - startIndex - 1;
		NSRange newRange = NSMakeRange(startIndex, length);
		return [contentDisposition substringWithRange:newRange];
	}
	return nil;
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
	[self writeToDestinationFile:data];

	// calculate a transfer speed
	float downloadSpeed = 0;
	NSDate *now = [NSDate date];
	if (self.lastPacketTimestamp)
	{
		NSTimeInterval downloadDurationForPacket = [now timeIntervalSinceDate:self.lastPacketTimestamp];
		float instantSpeed = [data length] / downloadDurationForPacket;

		downloadSpeed = (_previousSpeed * 0.9) + 0.1 * instantSpeed;
	}
	self.lastPacketTimestamp = now;
	// calculation speed done

	// send notification
	if (_expectedContentLength > 0)
	{
		NSDate *now = [NSDate date];

		NSTimeInterval currentProgressInterval = [now timeIntervalSinceDate:_lastProgressSentDate];

		// throttling sending of progress notifications for specified progressInterval in seconds
		if (currentProgressInterval > PROGRESS_INTERVAL)
		{
			// notify delegate
			if ([_delegate respondsToSelector:@selector(download:downloadedBytes:ofTotalBytes:withSpeed:)])
			{
				[_delegate download:self downloadedBytes:_receivedBytes ofTotalBytes:_expectedContentLength withSpeed:downloadSpeed];
			}

			NSDictionary *userInfo = @{@"ProgressPercent" : [NSNumber numberWithFloat:(float) _receivedBytes / (float) _expectedContentLength], @"TotalBytes" : [NSNumber numberWithLongLong:_expectedContentLength], @"ReceivedBytes" : [NSNumber numberWithLongLong:_receivedBytes]};
			[[NSNotificationCenter defaultCenter] postNotificationName:DTDownloadProgressNotification object:self userInfo:userInfo];

			_lastProgressSentDate = [NSDate date];
		}
	}
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
	_receivedData = nil;
	_urlConnection = nil;

	[self closeDestinationFile];

	[self _completeWithSuccess];
}

#pragma mark - Notifications

- (void)appWillTerminate:(NSNotification *)notification
{
	[self stop];
}

/**
 * Writes to the destination file the given data to the end of the file.
 * Also the destination file is opened lazy if needed.
 */
- (void)writeToDestinationFile:(NSData *)data
{

	if (!_destinationBundleFilePath) {
		// should never happen because in didReceiveResponse the _destinationBundleFilePath is set
		NSDictionary *userInfo = @{NSLocalizedDescriptionKey: @"Cannot store the downloaded data"};
		NSError *error = [[NSError alloc] initWithDomain:DTDownloadErrorDomain code:100 userInfo:userInfo];
		[self _completeWithError:error];
		return;
	}

	if (!_destinationFileHandle)
	{
		NSFileManager *fileManager = [NSFileManager defaultManager];
		if (_isResume && [fileManager fileExistsAtPath:_destinationBundleFilePath])
		{
			_destinationFileHandle = [NSFileHandle fileHandleForWritingAtPath:_destinationBundleFilePath];
			[_destinationFileHandle seekToFileOffset:_resumeFileOffset];
			_receivedBytes = _resumeFileOffset;
		}
		else
		{
			// if file does not exist then create it
			[fileManager createFileAtPath:_destinationBundleFilePath contents:data attributes:nil];
			_receivedBytes = [data length];
			_resumeFileOffset = 0;
			_destinationFileHandle = [NSFileHandle fileHandleForWritingAtPath:_destinationBundleFilePath];
			[_destinationFileHandle seekToEndOfFile];
			// we are done here, so exit
			return;
		}
	}

	[_destinationFileHandle writeData:data];
	_receivedBytes += [data length];
}

- (void)closeDestinationFile {
	[_destinationFileHandle closeFile];
	_destinationFileHandle = nil;
}

#pragma mark Properties

- (BOOL)isRunning
{
	return (_urlConnection != nil);
}

- (BOOL)canResume
{
	return _resumeFileOffset > 0;
}

- (NSString *)downloadBundlePath {
	return [_destinationBundleFilePath stringByDeletingLastPathComponent];
}

@synthesize URL = _URL;
@synthesize downloadEntityTag = _downloadEntityTag;
@synthesize lastPacketTimestamp = _lastPacketTimestamp;
@synthesize delegate = _delegate;
@synthesize lastModifiedDate = _lastModifiedDate;
@synthesize contentType = _contentType;
@synthesize expectedContentLength = _expectedContentLength;
@synthesize context = _context;
@synthesize responseHandler = _responseHandler;
@synthesize completionHandler = _completionHandler;
@synthesize additionalHTTPHeaders = _additionalHTTPHeaders;

@end


text:
The History of Little League Baseball
By Scott HuntingtonMarch 13, 2019Baseball, Major Sports
Few feelings come close to the satisfaction of hitting a home run. With the weighty crack of the bat and the cheer of excited parents and fans, it's easy to understand why baseball is "America's Pastime" for adults and children alike. It earned that title in the 1800s, around the same time that Little League was getting its start.
In the 1880s, pre-teen children in New York began to form their own baseball leagues, swept up in the popularity of the sport. These smaller, ragtag groups were far from the Little League organizations we're familiar with today, but they had the same spirit, enthusiasm and passion for the game.
Unfortunately, these leagues never flourished, weakened from an affiliation with adult "club" teams. Children chose to play "pickup" baseball in streets or sandlots instead, using substandard equipment like taped and re-taped bats and balls, unable to find anything in their size.
The American Legion developed a baseball program for teenage boys in the 1920s, which is a program which still exists today. As this was happening, schools started to form their own baseball programs, but there were still no options for pre-teen boys who wanted to participate in organized games.
This changed in 1938 when Carl Stotz decided to organize a baseball league for boys in his hometown of Williamsport, Pa. Though he had no sons of his own, he wanted to create a program for his nephews, Jimmy and Major Gehron, whom he played baseball with often.
Mid-1900s
The first season in 1939 was a success, but World War II soon entered the picture. Many fathers in the United States joined the military, and priorities shifted away from Little League Baseball. By 1946, only 12 leagues organized around Stotz's original model existed.
The following year, the original Little League board of directors organized a tournament for all known Little League programs. They called it the National Little League Tournament. Eventually, the tournament was renamed Little League Baseball World Series, as it's called today.
Little League soon grew to encompass 94 leagues, then grew to 307 leagues in 1949. A feature about Little League Baseball in the Saturday Evening Post spread the story to more than 14 million people, and communities across the country jumped at the opportunity to start their own programs.
Over the next several years, interest in Little League only continued to grow. The first leagues outside the U.S. formed at both ends of the Panama Canal, with the first permanent league organizing in British Columbia. This momentum — and the public spotlight — made Little League a recognizable name.
Countries around the world, from Japan to Uganda, have organized their own Little League programs. What started as a kind gesture on the part of Carl Stotz has transformed into an international sensation, televised on ESPN with incredible viewership.
Though Little League has come a long way since its humble beginnings in the streets and sandlots of New York, that same spirit, enthusiasm and passion still remain. Those ragtag groups of kids who played with second-rate bats and balls would feel proud to see their dream realized.
Today, people who are interested in forming a program in their community have plenty of resources to get started. As long as they approach the task with a commitment to seeing it through, they'll provide an opportunity for children in their area to enjoy the magic of baseball and everything the sport has to offer.
Running the bases after smacking a home run while fans roar with excitement is an event that will continue to thrill pre-teens for decades to come. With the support of professional baseball players, interest in Little League is experiencing even more growth, and the sport will no doubt endure to uplift and inspire new generations of young players and adult volunteer organizers alike.
Author Scott Huntington
Scott Huntington is an Automotive YouTuber and writer who loves cars, sports, and business. Follow him on Twitter @SMHuntington or email [email protected].
More posts by Scott Huntington

redpajama_set_name: RedPajamaCommonCrawl


Kwila Hardwood Decking Kwila Instsia spp is a South East Asian tropical hardwood used for extensively for decking in NZ. Attractive gold to reddy-brown coloured timber which will age to driftwood grey if left to weather.
PlaceMakers stocks radiata pine timber products from sawmills which source their logs from New Zealands sustainably managed forests. PlaceMakers also offers hardwood decking options from legally verified sources including Forest Stewardship Council FSC .
Estimates Decking Decks are high on the wish list for homeowners wanting to accentuate indoor outdoor flow in their homes. The cost of a deck varies according to size, materials and complexity.
Decking and Fencing Timber. Filters. 1 - 20 of 106. List; Sorry no price available for this product. Dressing Grade Decking 100mm x 40mm. SKU: A premium grade decking option is ideal for New Zealand conditions and adding value to your home. Sorry no price available for this product.


Since 2005, Gamorel S.A. has been one of Uruguay's leading agro-industrial companies fully devoted to the production of fine fruits, especially high-quality blueberries.
Gamorel S.A. is owned by Nuevo Manantial S.A., which has, for a long time, been focused on the development of agro-industrial projects.
A few kilometers from the city of Salto -one of the most important cities in Uruguay- the farm "El Asombro" has approximately 500 hectares with outstanding conditions for growing blueberries and other fine fruits. The final project is expected to be of approximately 200 hectares.
Easy of accessibility and excellent roads means no deterioration of fruit quality and freshness during transportation. The quality of our fruit and the excellence of logistics allow us to deliver a product of exceptional quality with the genuine taste of blueberries.


Cut lengths of 2x4 railings to span the distance from the lower posts to the existing deck railing as shown in the image. Attach the railings to the posts with 3" deck screws, making sure the slope matches that of the stairs. ... How to Install a Hot Tub Deck. Learn how to install a deck that will properly support the weight of a hot tub.
If you are copying a design from an existing deck, a close inspection of the deck with sketchbook in hand should enable you to understand how the railing is put together. The main thing you want to be sure of with installing a railing is its stability.
One on the many benefits of installing a glass railing system is that it allows you to replace as many or as little existing panes as you'd like. For example, you may only wish to install glass on one side of your deck and use the existing wooden railing to hide more unsightly portions of your yard.
By Bruce W. Maki, Editor. Start: While building an extension for an existing deck, I was asked to install a new synthetic handrail product around the perimeter of the new and improved deck.
Some deck builders choose to sister the new joists back over the existing beam and install a new beam in front of the existing deck. The sistered joists are nailed into the sides of the existing joists and extend past the beam at least 6".
Install the post 3 feet into the ground using a 60 pound bag of concrete to hold the post in position. Some vinyl railing installations need a 4-by-4 pressure treated post with a vinyl post sleeve placed over top.


The Caring Community helps to foster a warm, connected and caring family environment at TBA. By communicating congregational needs, calling and visiting members in case of illness or bereavement, providing meals, arranging transportation and providing service opportunities for the entire congregation, Caring Community provides tangiable and intangiable support to all TBA members.
All TBA members are welcome to join this committee and participate as their schedules and interests allow.
Thanks to the members of Caring Community and others in the congregation who have made or delivered soup, baked, cooked, coordinated dinners, sent cards, visited a house of mourning during shiva, made calls to congregants who were ill. These are some of the many activities that are constantly happening behind the scenes to strengthen the bonds of our community.
If you would like to be part of the growing group of TBA members who reach out to help our Temple members when needs arise, we need you. Whether you can help once a month or once a year, your contributions of time and talent are needed and greatly appreciated! Contact the Temple office for more information.
Food Donation Opportunity: If you have a function at the Temple and have quality leftovers, please consider donating them to Caring Community. They will be delivered to congregants in case of illness, hospitalization, bereavement, and other similar circumstances.
Simply use the Food Saver machine that's on the counter and label your packages for Caring Community (please note if they contain dairy, meat, or nuts to help congregants with food allergies or other dietary restrictions), and place them in the Temple freezer. If you need help with the Food Saver, please contact Adrienne Kerbel at aakerbel@comcast.net.
If you are making soup, a large meal, or are holding a Temple function that includes a meal, please consider putting some aside or donating your quality leftovers to Caring Community. Also keep us posted if you know of a member who might benefit from this mitzvah.


Las Vegas Asian Journal in Las Vegas Nevada.
Submit a press releases to the Las Vegas Asian Journal.
Las Vegas Business Press in Las Vegas Nevada.
Distribute a press releases to the Las Vegas Business Press.
Send a press releases to the Las Vegas Business Press.
Submit a press releases to the Las Vegas Business Press.
Las Vegas CityLife in Las Vegas Nevada.
Distribute a press releases to the Las Vegas CityLife.
Write a press releases to the Las Vegas CityLife.
Las Vegas Israelite in Las Vegas Nevada.
Distribute a press releases to the Las Vegas Israelite.
Las Vegas One in Las Vegas Nevada.
Send a press releases to the Las Vegas One.
Distribute your press releases to the Las Vegas One.
Write your press releases to the Las Vegas One.
Submit your press releases to the Las Vegas One.
Send your press releases to the Las Vegas One.
Las Vegas Review-Journal in Las Vegas Nevada.
Write your press releases to the Las Vegas Review-Journal.
Send your press releases to the Las Vegas Review-Journal.
Submit a press releases to the Las Vegas Review-Journal.
Distribute a press releases to the Las Vegas Review-Journal.
Send a press releases to the Las Vegas Review-Journal.


Product Info & Care Regal and elegant, this black dress from BCBGeneration is beautifully designed ..
A must-have for any training wardrobe, these Under Armour Fly By shorts give you stretch comfor..
Product Info & CareThis super-comfortable sweater from United Colors of Benetton will become your go..
Product Info & CareShine through the gloomy autumn season throwing in passionate rust colour of this..
Height 5'9" , Bust 33" , Waist 25" , Hips 38"
Bodycon Dress Short Length Dress Sleeveless Key..
Tank Dress Long Length Dress Sleeveless Scoop N..
Bodycon Dress Long Length Dress Sleeveless Off ..
Bodycon Dress Mid Length Dress Sleeveless Scoop..
Wrap Dress Short Length Dress Sleeveless V-Neck..
Bodycon Dress Short Length Dress Short Sleeves ..
Wrap Dress Short Length Dress Cap Sleeves V-Nec..
Skater Dress - Fit and Flare Dress Short Length Dress Sleeve..
Wrap Dress Long Length Dress Long Sleeves V-Nec..
Bodycon Dress Mid Length Dress Sleeveless V-Nec..


text:
Flight Attendant Finds Passenger's Baby Crying Out Of Hunger- Steps In With An Outstanding Offer
One woman instinctively knew that something very special would happen that day, but not in the way she expected.
By Lindsey Staub December 6, 2021
When Patrisha Organo boarded the Philippines Airlines flight, she had a strong feeling it would be one she remembered. Organo, a flight attendant, had the opportunity to qualify as a Cabin Crew Evaluator and get a promotion that morning. Though the flight did turn out to be a special one, it was not because of a promotion.
The flight was an early one, and not far into the journey, Organo heard a baby crying.
"Everything went smoothly until, after takeoff, I heard an infant's cry, a cry that will make you want to do anything to help," said Organo. "I approached the mother and asked if everything's okay."
In full flight
The noise elicited some stares from fellow exhausted passengers. The cry was coming from a six-month-old girl, the daughter of one of the travelers.
"I tried to tell her to feed her hungry child. Teary-eyed, she told me that she ran out of formula milk. Passengers started looking and staring at the tiny, fragile crying infant."
Organo knew what the child needed, but the plane did not carry any formula milk. There was only one way to feed the infant, so Organo stepped up.
I felt a pinch in my heart. I thought to myself, there's only one thing I could offer and that's my own milk. And so I offered.
Patrisha Organo
Organo had her own nine-month-old daughter, meaning she was still able to breastfeed. Sheryl Villafor, the flight's line administrator, led Organo and the baby's mother to the plane's galley so Organo could begin feeding the baby.
"I saw the relief in her mother's eyes," said Organo. "I continued to feed the baby until she fell asleep. I escorted her back to her seat and just before I left, the mother sincerely thanked me."
I was right, the flight's gonna be special, so special not only because I got qualified as an Evaluator but I got to help.
A picture snapped of Organo as she breastfed the baby went viral after Organo posted it on Facebook.
Stepping up to the plate
When seeing a child in need, Organo gave the only thing she could- her own breastmilk. By giving, she also received, in this case, the gratitude of a stranger and the gift of aiding a baby in need. We can always help someone who needs it, even if all we have to give is a piece of ourselves.
Woman Gets Shamed For Breastfeeding Son In Public, Thousands Of People Stand Up For Her
Police Officer Breastfeeds Malnourished, Abandoned Baby, Teaches Us a Powerful Lesson in Compassion
Chrissy Teigen's Breastfeeding Thread Holds A Special Lesson For Motherhood
Help others in need
"Only by giving are you able to receive more than you already have."- Jim Rohn
Lindsey Staub
Student at the University of California, Berkeley and freelance writer.


text:
deBotech, Inc.
Carbon Fiber Extreme
austin71522
2024 Corvette E-Ray On Display At Petersen Automotive Museum
*CLICK HERE TO SEE ORIGINAL POST ON GM AUTHORITY*
BY JONATHAN LOPEZ | GM AUTHORITY | JAN 19, 2023
Corvette fans in Los Angeles who are eager to see the 2024 Corvette E-Ray in the metal can now catch the new hybrid sports car at the Petersen Automotive Museum.
The display is open to both members of the media and the general public, marking the first-ever public display of the 2024 Corvette E-Ray. The new sports car can be found in the lobby of the Petersen Automotive Museum, located at 6060 Wilshire Boulevard. The museum is open between 10 a.m. and 5 p.m. every day. Fans will have to act quick though, as the 2024 Corvette E-Ray will only be on display through Friday, January 20th, 2023.
The Petersen Automotive Museum is now hosting the 2024 Corvette E-Ray.
GM unveiled the new 2024 Corvette E-Ray earlier this week, pulling the sheets on the first-ever all-wheel-drive, hybrid-electric production sports car to wear the iconic Corvette nameplate. Just behind the cabin, the new E-Ray cradles the naturally aspirated 6.2L V8 LT2 gasoline engine, the same powerplant found in the C8 Corvette Stingray. However, in the E-Ray, the ICE is paired with a front-mounted electric motor that drives the front axle with 160 horsepower and 125 pound-feet of torque.
Combined with the 495 horsepower and 470 pound-feet of torque sent to the rear axle by the LT2 gasoline engine, peak output is rated at 655 horsepower, while all-wheel-drive traction sends to Corvette E-Ray to 60 mph in just 2.5 seconds. The run through the quarter mile is completed in 10.5 seconds at 130 mph. The hybrid system also provides E-Ray customers with Stealth mode, which enables silent all-electric driving at speeds up to 45 mph.
In terms of styling, the 2024 Corvette E-Ray features a widebody treatment similar to that of the new C8 Corvette Z06, with both aluminum alloy wheels and carbon fiber wheels on deck. Under the body, the E-Ray rides on the GM Y2 platform.
Sales for the 2024 Corvette E-Ray will kick off later this year. Production will take place exclusively at the GM Bowling Green plant in Kentucky.
Cadillac Celestiq could be the uncompromising tech and luxury glory we've waited for
C8 Z06 vs C8 Stingray Drag Race!!!
C8 Corvette Drag Races 850-Horsepower NASCAR Cup Car: Video
130 Infield Ct.
dbt.info@debotech.com
© deBotech 2023. All rights reserved.


text:
Q: Signal distribution, buffers, rise times and EMC I am designing a DSP based audio mixer. There are 4 AD/DA converters (AD1939 and AD1974) and a DSP (OMAP L138), which is on a carrier module. I am distributing the frame clock (48kHz) and the bit clock (~12.3MHz). I have not buffered the TDM digital audio signals as they are point to point.
The frame clock and the bit clock are generated by the master converter and is sent to another slave converter and two inputs in the DSP. The bit clock is sent to two DSP inputs.
I am using a IDT5T30553DCGI to distribute the signals but the rise times in the specs look ridiculously short, with a maximum rise time of 1ns for Cl=15pF. The boards material will be FR4, the lines will be 50Ω and 6-10 cm long. They have been back terminated with a 33Ω series resistor, close to the driver.
The nano second edges are going to create radiation around the 350MHz and multiples. I have been looking for other IC options but their rise time specs are in the same nano second range.
The audio board has also ethernet and all the analogue audio I/O amplifying stages. The mixer board is sitting in a tray with other boards like HD analogue video.
I do not need to pass any EMC compliance tests or similar. Should I worry about EMC aspects in the audio board or adjacent?  Should I worry for those ultra short edges? Am I being too paranoid and it is just fine? Am I creating a problem by distributing signals with those ICs and I should not use anything at all?

A: How slow can the edges be before data becomes unrecognizable? That's probably a good place to start thinking. With a rise time of 1ns and 15pF, the output driving resistance is going to be about 20 ohm. However, you have put 33R in series with the drivers so that should have a marked effect on your rise times - it'll probably increase it to something like 2.6ns and if your clock is 12.3MHz (period of 81ns) a 2.6ns rise and fall time represents 6.4% of the period. You could probably increase rise/fall times to about 20% without much trouble.
This would mean a rise/fall times of about 8ns - this could probably be achieved with 150 ohms in the driver output but, would the receiving DSP chip receive sufficient logic levels?
It's not hard to change these things but will changing them make things worse or better for the adjacent audio board - impossible to say precisely - you're going to just have to try it is my recommendation.

A: The clock jitter requirements for such ADCs can be extremely demanding (300ps RMS in the case of the AD1939), so I don't think your rise and fall times are excessively short. If you follow good layout practices on a 4-layer or better board (don't split ground planes etc.) and your analog signal path does not allow RF rectification or have excessive bandwidth, I would think you should be okay.

redpajama_set_name: RedPajamaStackExchange


You are entitled to a replacement vehicle whilst your own vehicle is off the road.
The choice of repair is yours. Auto Legal Direct's Body shop is on-site therefore ensuring that your claim handler may monitor this procedure.
You are entitled to the recovery of uninsured losses including Personal Injury and Loss of Earnings.
You are entitled to recover all losses from the negligent driver ensuring that your own claims history is protected.
Auto Legal Direct will make a decision regarding your claim within 2 working hours.
If you would like to know more about what you are entitled to during the time of accident then please get in touch here.


text:
Courtesy of Nathan Watkins
Nathan Watkins's digital designs of First Hill
Local artist draws inspiration from one of Seattle's oldest neighborhoods
By Kelly Knickerbocker May 17, 2018, 11:07am PDT
Seattle's first residential neighborhood sits at the edge of downtown, a stone's throw from I-5, and steps from Capitol Hill's busy Pike/Pine Corridor. To some, First Hill is a pass-through neighborhood—a place you encounter when en route to someplace else. But it's a heavily populated hamlet that's getting denser, and new local hangs are popping up more frequently than in years prior. People who know First Hill know it's packed with hidden (in plain sight) gems. There's George's Deli, home of the heartiest sandwich you'll find for $8, The Hideout, a craft cocktail lounge with art-covered walls, and Quarter Lounge, a locals' favorite dive. Known as "Profanity Hill" and "Pill Hill," First Hill is also home to the always-free Frye Art Museum, St. James Cathedral, and a trauma center made Hollywood-famous after inspiring the hospital in Grey's Anatomy.
Local artist Nathan Watkins says that First Hill has a unique beauty that's hard to find elsewhere in Seattle.
"The architecture's ornate ornamentation gives off a sense of humility rather than ostentation," he says. "The buildings are stunningly worn, but they're not so old-fashioned that it's difficult to place yourself within their histories."
If you spend any time at all in First Hill, whether you're breathlessly walking east along Madison Street from downtown or riding through on a Metro bus, Watkins's art is all around you. In recent years, his public artworks depicting First Hill have become a common sight in the neighborhood. His digital, minimalistic, vibrant prints cover 72 concrete columns called along James Street under I-5—one of his proudest achievements. Watkins earned the opportunity by winning a large public vote, and Sunset Over First Hill was installed 100 Urban Artworks volunteers in 2017.
"Sunset Over First Hill created a transformative space. When you pass through, it forces you to be a little more joyful and to acknowledge your transition into a different part of the city," Watkins says. "It breathes life into the urban landscape which—despite having beauty of its own—people can become numb to."
Elsewhere in First Hill, 17 signal boxes are covered in Watkins's works. They highlight neighborhood landmarks, as well as more nuanced details represented in First Hill's architecture and plant life. One of Watkins's favorite signal box designs is at Minor Avenue and Madison Street and features Frye Art Museum's gallery wall. He made frequent trips to the Frye as a student at Seattle U, and gets extra enjoyment because he snuck a simplified recreation of one of his own paintings, a self-portrait, into his interpretation of the gallery wall.
Watkins's interpretation of the Frye's gallery wall includes a subtle self-portrait.
Watkins, pictured in front of First Hill's Connolly House.
Designs for five more signal boxes are in the works, which means you might catch Watkins "scene-hunting" for inspiration around the neighborhood.
"I take my camera and just wander around First Hill until something catches my eye," he says. "I go at different times of the day or season. Sometimes scenes that seemed bland at first turn out to be gorgeous with just a little shift in lighting, weather, or vegetation."
Watkins moved to Seattle in 2013 to study graphic design at the First Hill-adjacent Seattle University. Since graduating in 2017, the self-described workaholic has been a full-time freelance graphic designer and illustrator creating products for brands like Seattle City Light, his alma mater, and the First Hill Improvement Association—which he works closely with on the I-5 columns and signal box installations.
He frequently creates digitally, but Watkins is also passionate about fine arts and enjoys working with graphite, ink, oil, and acrylics. His approach to making art is preplanned, precise, and intentional. Every detail reflects rationality and control to get the viewer to look exactly where he wants them to and, hopefully, experience the full effect that he set out to create.
"I create guidelines for each piece, like restraining the amount of colors I'll use or the amount of detail to take out or put in. By restricting myself, I'm forced to make choices that often lead to interesting results," Watkins says. "It also makes me think seriously about each decision and whether it will lead me to my goal or just add visual clutter."
Watkins is particularly inspired by St. James Cathedral, which he calls First Hill's most striking building by far—inside and out—and one of the most stunning structures in all of Seattle. Freeway Park, an urban park and brutalist architectural gem that opened in the 1970s, is also high on his list of must-sees.
"I'm not religious, but it's hard not to feel overwhelmed with awe and inspiration when you walk inside St. James Cathedral," he says. "The intricacy in the interior of the building is completely breathtaking."
For more than four years—from when he arrived in Seattle through summer 2017—Watkins lived in the neighborhood that has inspired much of his work. Not uncommon in the area, Watkins moved further out of the city's core as rents soared. A West Seattle resident now, he says that every time he drives into First Hill, he opts for the James Street exit to see Sunset Over First Hill.
If he were to create works representing his new community, a neighborhood where blaring ambulance sirens are noticeably absent compared to First Hill, Watkins says the outcome would be completely different.
"I could use the abundant nature in West Seattle as a source of inspiration, but I don't think I could capture the neighborhood as identifiably and unambiguously as I have been able to with First Hill."


text:
NOVA chat 12
NOVA chat 12 is designed for use by individuals who are not able to use their natural voice to communicate as a result of stroke, cerebral palsy and neuro-genetic disorders that impact speech. It offers the Chat software on an Android platform. NOVA chat 12 is portable and offers a 12.2 inch display. Some of the features include switch scanning, Social Chat, and IVONA speech synthesize. A variety of vocabulary configurations provides options for each individual that uses our "Chat" systems. NOVA chat includes thousands of SymbolStix™ symbols, and PCS™ symbols can be added. The capacitive touchscreen is accessible by finger touch or an included stylus.
Pre-Loaded Vocabulary:
Vocabulary Options such as WordPower from Inman Innovations highlight the listing of powerful communication options that are provided. WordPower offers a series of new AAC vocabularies designed specifically for the NOVA chat 10.
WordPower 20 Simply incorporates carrier phrases with core words for quick and easy language generation and therefore, could be called a "hybrid," because it can be used primarily as a phrase-based system, or as a word-based system. It was designed for users with motor disabilities and access issues, those with vision impairment that need large cells and print, cognitively and severely language disabled individuals who benefit from phrases to assist with quick language generation, and those who have scanning access needs.
WordPower 24 & 42 are word-based vocabularies that allow for easy intuitive communication. The programs have been designed specifically for this portable and readily available platform. It is a generative language system that will be familiar to those using WordPower on other systems, and easy to learn for new users.
WordPower 24 with Phrases is also a word-based vocabulary program, but phrases and sentences starters have been incorporated in order to make language generation easier for those who may have difficulty with a word-based program. Core language and category-based words are included in this program.
WordPower 30 is a modified version of WordPower 24, but it includes an extra column on every page. The extra column includes designated buttons for clear, delete word, smart period, and plural –s. It is a word-based vocabulary that was designed to be an easy and intuitive generative language system. This vocabulary is configured to work with a keyguard and with scanning.
WordPower 42 Basic is a simplified version of WordPower 42. This word-based system remains rich in core vocabulary, and it may be appropriate for beginning users or those who need a more basic vocabulary design. It is designed to make communication fast and easy.
WordPower 48 is a modified version of WordPower 42, but it includes an extra column on every page. The extra column includes designated buttons for clear, smart period, delete word, and plural –s. It is a word-based vocabulary that was designed to be an easy and intuitive generative language system. This vocabulary is configured to work with a keyguard and with scanning.
WordPower 60 consists of a large number of high frequency words available on the main page, resulting in fast communication with reduced keystrokes. Word completion and logical next words are used, and the "grammar" function provides morphological endings to verbs, nouns and adjectives. Spelling with word prediction along with the category-based pages contained in all other versions of the vocabulary are also available. This vocabulary is configured to work with a keyguard.
WordPower 80 is a vocabulary consisting of high-frequency core words, spelling and word prediction, all on the main page. It also includes the category-based pages contained in all other versions of the vocabulary. With this setup, the user can use core words in the same sentences without moving to a separate page to spell. This vocabulary is configured to work with a keyguard and with scanning.
WordPower 108 is the newest WordPower vocabulary option. It consists of a large number of high frequency words on the main page, resulting in fast communication and quick access to core words. Word completion and logical next words are used, and the "grammar" function provides morphological endings to verbs, nouns and adjectives.
A Basic 4-Location file has also been added for those needing minimal targets.
MultiChat 15 is offered in a Student, Adolescent, and Adult version for NOVA chat 5. There are multiple forms of communication available in this program: sentences, phrases, individual words, recordings for story-telling, and visual scenes. Also included are interactive play and reading pages, social pages and a News-2-You starter page for the weekly newspaper's vocabulary. There are symbols on every button with the exception of several core words.
POWER: Rechargeable Lithium-Polymer battery
OPTIONS: Ivona voices are standard and include a child's voice, a teen's voice, as well as numerous American, British English, & Australian adult options. Acapela voices are also available as an option offering several "genuine" voices for children. Additionally, there is a new English/Spanish Amercia NOVA Chat option using either Acapela or Ivona voices, which offers bilingual speech capabilities.
A stand and handle are built into the design and also configurable for each orientation. Strap attachments are available for hands-free transporting.
COLOR: Blue, green, purple and gray.
SIZE: 12 inch x 8.38 inches x 1.25 inches.
WEIGHT: 2.85 pounds.
WARRANTY: Saltillo Corporation offers extended warranties on many of its products. The extended warranty has the same coverage as the original warranty. Up to four years of extended warranty may be purchased for a device. Please Note: extended warranty must be purchased before the original
Please contact manufacturer for pricing.
Seller(s):
Saltillo Corporation
Communication Boards and Books
Communication Board
Symbolic Communicator Program
Symbolic Language Picture Creation Program
Symbolic Language Pictures
Symbolic Language System
Direct Selection Communicator
Expanded Keyboard for Communicator
Sequential Message Communicator
Single Message Communicator
Scanning Communicator
Scanning Communicator Program
Scanning Symbol Communicator
Scanning Symbol Communicator Program
Saltillo Corporation Organization Type:
Email address: aac@saltillo.com
http://www.saltillo.com


Got my package today! It's nice, I thought it was cool. Like the DC map. Thanks Georgetown!
aw. we should get on that soon? i'm keeping myself off of facebook for a while, but will join once i return!
also - yay for hoyas making it that far in the big east!
10 days till the ASW... I'm getting pretty excited about Georgetown. I keep flipping through that leather binder we received.
Also, I finally read up on the LRAP and it looks awesome.
Interminable_Waiting wrote: 10 days till the ASW... I'm getting pretty excited about Georgetown. I keep flipping through that leather binder we received.
i know i feel like i've memorized it, i look at it so much.
Interminable_Waiting wrote: I finally read up on the LRAP and it looks awesome.
They have a video on their website of the person in charge of LRAP reviewing the new program that is very informative. In short, as long as you work for government or non-profit and make 75k a year or less then GULC takes care of your loan payments until they are forgiven by the federal government. You just have to make sure you take care of the details (ie only take out federal loans, file taxes separate from your spouse if your combined is over the 75k limit, etc). Also if you go over 75k you don't lose all the benefits, they just expect you to help out a little in larger increments depending on your exact salary. I think my favorite part of the video is when she just flat out says, "Look, if you do this right you can go to law school for free."
Hello everyone! I have been reading everyone's comments and finally decided to post. I received my accceptance last month. Georgetown was my #2 so unless I'm accepted at my #1...nevermind I should be attending GULC in the fall. I will be at the open house on the 25th & 26th of this month. I am nearly certain I will be going to Georgetown; I am currently in D.C. for an internship and went to see the Law Center last month. D.C. is an awesome city; there is so much to do, so much to see! I'm excited about the Georgetown padfolios! A few of you were wondering what they are for...when you complete an internship or anything for that matter, you can use it as opposed to a notepad or folder. I did an internship last year and all the law students brought them to work; it is more professional. I suggest everyone get their financial aid done ASAP. Hopefully your fasfa has long been completed; turn in the yellow form. For those of us who may qualify for need-based, go to the accepted students and complete the NeedAccess. Also if you are 100% sure you want to attend Georgetown DO NOT pay your tuition deposit, fill out the tuition waiver, but you will have to withdraw your other apps- which shouldn't matter if you are sure.
*Who here will be attending the open house this month?
*Also, I started searching for the facebook group when I got my acceptance. Lol to no avail. I will reactivate my profile to create one and will post the link here so everyone can join.
Cedes wrote: Hello everyone! I have been reading everyone's comments and finally decided to post. I received my accceptance last month. Georgetown was my #2 so unless I'm accepted at my #1...nevermind I should be attending GULC in the fall. I will be at the open house on the 25th & 26th of this month. I am nearly certain I will be going to Georgetown; I am currently in D.C. for an internship and went to see the Law Center last month. D.C. is an awesome city; there is so much to do, so much to see! I'm excited about the Georgetown padfolios! A few of you were wondering what they are for...when you complete an internship or anything for that matter, you can use it as opposed to a notepad or folder. I did an internship last year and all the law students brought them to work; it is more professional. I suggest everyone get their financial aid done ASAP. Hopefully your fasfa has long been completed; turn in the yellow form. For those of us who may qualify for need-based, go to the accepted students and complete the NeedAccess. Also if you are 100% sure you want to attend Georgetown DO NOT pay your tuition deposit, fill out the tuition waiver, but you will have to withdraw your other apps- which shouldn't matter if you are sure.
I'll definitely be at the open house! I'm mulling over a money offer from Fordham, but I'm pretty sure I'll be at Georgetown. It's definitely going to hurt withdrawing that Columbia WL, but I doubt the WL gives me any chance anyway, so I'll probably end up doing the tuition waiver.
I know! Still we have until May 3rd to turn it in, so I don't think you should worry about holding out. But get everything else in just in case. I have a Duke application, which is why I haven't done it yet.
I should see you at the open house! Feel free to join the group and facebook me, I'm like the only member.
Ok, I requested to join. Accept me!
I just submitted my housing application, and it became very surreal to me that I will be in DC in 5 months.
Also, do you think its necessary to make the group private, and new members require approval? Might limit people from signing up.
gators88 wrote: Also, do you think its necessary to make the group private, and new members require approval? Might limit people from signing up.
gators88 wrote: I just submitted my housing application, and it became very surreal to me that I will be in DC in 5 months.
Ah, I have to do that! I think Gewirz is a good fit for me, I'm very excited to be living somewhere besides NY (love nyc, grew up here, but could use a change of scenery). I did a semester at UMiami and it didn't work for me. I love DC, though, so I can't wait.
Yea, it is. Thats why I'm excited to live in Gewirz. I won't know anyone in the city my age, so it will be good to have some folks in the same boat to explore things with. I am definitely beyond stoked about it though.
The Law Center is between Judiciary and Union on the Red Line.
Thanks! I've been to DC a few times, and to be honest, ANYTHING is easy after learning the NY subway system! I was running around DC like a pro, it's such a good, simple system.
As far as shopping, is there anything good around the law school? Shopping is my relaxation and I hope there are some good, cheap stores! Dare I say a Forever21?
Wow, not to e-stalk but we have some eerie similarities here. I know we both spoke a couple weeks ago about the Georgetown vs. Fordham thing, since we were both sort of considering both. I'm from NY originally too, but South Florida now... I did a exactly one semester at UM too, and it wasn't for me either. I actually transferred there from my undergrad and transferred back the next semester because I hated Miami (the city, not so much the school). Now I'm looking forward to moving to a REAL city, either DC or NY. Right now it's certainly looking like DC.
haha wow. yeah, i started out there, and hated the city. LOVED the school, thought it was awesome, plus i've been a cane fan since i was little. but miami is crap (no offense to anyone from there ). honestly, my hair could just not stand the humidity.
i'm thinking DC as well. i didn't like fordham when i visited, and i think that you really have to love the place you're going to be for three years. i'm definitely going to miss NY, but i've loved DC every time i've visited, and i think it'll be a good experience. have you decided between the two schools yet for sure?
I hear ya about Miami. I love the 'Canes, but Miami-Dade county itself is terrible. I've visited DC a few times and really liked the city. I could definitely see myself there. But overall I'm one of those people that tend to think NYC is the best place on earth, and I'd like to ultimately end up there. I haven't totally made up my mind, but I'm leaning heavily towards Georgetown now even though it's not New York. I just really, really love the school.
Ha, I hear that. It's only 3 hours away by train from DC!
gator: If you have questions on where to go and the best way to figure out how to get there, feel free to ask.
Lol the cherry blossom festival is coming up, you'll have to do it at least once, otherwise people won't leave you alone.
My city is not crap!


Some protesters had posters calling for a boycott of Israel.
A roundup of culture news.
The media and television personality Dana Grotsky, who – with Guy Pines – cohosts Good Evening With Guy Pines.
Senator Tina Smith [D-MN] met with Prime Minister Benjamin Netanyahu in Jerusalem on Monday.
Previously, the committee rejected Netanyahu's request to receive the donations and ordered him to return $300,000 to donors which he had received without the committee's approval.
Netanyahu: If Gantz can't protect his phone, how will he protect the country?
The prime minister called the hack "ironic," pointing out that Gantz was chairman of a cybersecurity company that went bankrupt.
Comments Off on Netanyahu: If Gantz can't protect his phone, how will he protect the country?
What better way to encourage love of science among children than having them see and hear astronauts read them bedtime stories – from space?


text:
The Doolittle Raid, April 18, 1942
Submitted by Jason McDonald on Thu, 2014-05-29 00:06
In March 1942, the Allies were on the retreat everywhere. Most of the targets the Japanese high command had wanted were in their hands, or soon would be. The Americans began to realize that a bold stroke was needed to raise the morale of the public and of the fighting forces.
Most of occupied Europe had been under Nazi domination for at least two years. While there was no immediate threat of the Allies losing the war, the Allied command, especially the British, wanted to win a battle in order to raise morale at home and abroad.
In contrast, the morale of the Japanese couldn't be higher. Both the public and many servicemen thought the war was progressing well. It was inconceivable that anything could stop the Imperial forces. The arrogance of the west was shown in the superiority of the Japanese war technology, tactics, and in the individual fighting man. The Allies did not have the heart to fight.
Many Japanese Officers and civilians who had traveled to the United States, like Yamamoto, knew that it was a matter of time before the Allies struck back. And when the American industrial capacity reached full stride, then they would be able to field numerically superior forces. But no one in Japan doubted that the Japanese spirit would win the day; that the home islands would come under attack was not ever considered.
What they did not expect or even could predict was that plans were already underway to attack Japan itself within the month. In contrast to the interservice rivalry that plagued the Japanese throughout the war, the Americans could work together; if not in harmony, then in consensus. This consensus had married the long-range US Army B-25 Mitchell bomber to the US Navy carrier USS Hornet. An air racing hero, Lt. Col. James Doolittle, commanded the mission. The Hornet was a new ship, commissioned in October 1941. Its 800-foot flight deck was crammed with 16 of the twin-engined bombers, the last one's tail sticking out over the fantail. The USS Enterprise escorted to provide air cover.
The plan was simple, yet against the limits of all theory: fly a land-based bomber off of a carrier deck, bomb Japan, and fly to China to support operations there. The bombers could not obliterate a target, but that wasn't the point. The Japanese pride would be deflated, the fight would be brought to the Home Islands.
On April 18, 1942, Doolittle and his flyers were hours away from takeoff when general quarters sounded. The fleet had run into the picket ships some 600 miles away from the Japanese coast. A fishing boat was quickly sunk, but fearing surprise was lost, the bombers were launched.
Doolittle took off first. The bombers had to use the power of their engines to pull enough air over the wings to take off. He cleared the bow by several feet, and led his aircraft aloft. The fleet turned and ran for Hawaii.
The B-25 was a tactical bomber, with little defensive armament except for its speed. They had little to fear, since the primary target, Tokyo, was undergoing air raid drill and it was assumed the incoming planes were part of the test. They dropped their bombs on factories, military targets, and one bomb fell inside the Imperial Palace.
Flying on to China, all of the bombers crashed at the extreme range of their fuel, never joining the Chinese Air forces. Doolittle thought his mission was a failure because he wasn't able to deliver any of the bombers. Chiang Kai-Shek, who was kept in the dark fearing leaks in his security, never alerted his forces to support the bombers landing.
When Doolittle got back to the United States, he was unprepared for the greeting he received. He was the first genuine hero, and he was acclaimed wherever he went. He became a commander in the European Theater of Operations. Eight of Doolittle's flyers were executed after the Japanese captured them.
For the Japanese, the idea that the enemy could bomb Tokyo, bomb the Imperial Palace, sent shock waves through the War Cabinet and the Imperial High Command. Fighter groups were recalled from abroad for home defense.
If the High Command had any idea of how Doolittle's raid were the first of thousands of sorties to come to Japan, they would have begun building defenses much earlier. But it was not until late 1943, when the Allies began to acquire bases close enough to Japan to attack by air, that regular air raid drills were practiced.
USS Hornet
James Doolittle
Bombing of Japan
Sino-Japanese War
USS Panay (PR-5) During Builder's Trials Off Woosung, China
IJN Kaga
IJN Idzumo Enters Shanghai
Lifeboats Evacuate USS Panay (PR-5)
Japanese Air Defense Gas Mask, Type 16th Year, Model A
Japanese Army Model 99 Gas Mask
Lieutenant Colonel James H. Doolittle Wires a Japanese Medal to a 500-Pound Bomb
Japanese "Bokugo" Air Raid Shelter Diagram
Douglas SBD-3 Dauntlesses Attack Japanese Cruisers
Ensign George H. Gay After the Battle of Midway


text:
< Back to Attorney Listing Print Page
William A. Dreier
Of Counsel | New Jersey
wadreier@norris-law.com
Judge William A. Dreier practices in the areas of mediation and arbitration.
In his 25 years in the New Jersey State Judiciary, Judge Dreier was a presiding judge of the Appellate Division from 1994 through 1998. He served in the Appellate Division since 1983 and previously in the Chancery Division and the Law Division of the Superior Court since 1973. He has authored approximately 380 published legal opinions.
Judge Dreier is an authority on commercial litigation and ADR; he authored the state text on arbitration law, New Jersey Arbitration Handbook (2013-2017) published by the New Jersey Law Journal, as well as the nine editions of the state's principal text on Chancery Practice from 1983 to 2014, and earlier texts on Secured Financing.
Also recognized as one of the nation's leading experts in the area of products liability, Judge Dreier's book, New Jersey Products Liability and Toxic Tort Law (Gann Law Books), has been published annually since 1995 as a successor to seven editions with supplements published by NJICLE since 1977. Judge Dreier also is the author of several books and over 50 law review and journal articles and has lectured in New Jersey and nationally on products liability, commercial law, and ADR in law school symposia, NJICLE programs, and as the coordinator of and lecturer in several ALI-ABA national products liability programs.
As an arbitrator and mediator, Judge Dreier has been chosen as a fellow of the College of Commercial Arbitrators and is a member of New Jersey Panel of Distinguished Neutrals, International Institute for Conflict Prevention and Resolution (CPR), the National Academy of Distinguished Neutrals, and the AAA National Panels of Mediators and Commercial, Complex Cases, Class Actions, and Wireless Telecommunications Arbitrators, and as an International Chamber of Commerce (ICC) and International Centre for Dispute Resolution® (ICDR) Arbitrator. He is a Certified Mediator for the U.S. District Court, District of New Jersey, a member of the International Mediation Institute, and accredited CEDR (UK). He has been approved as an arbitrator in several class action arbitrations and numerous other complex national arbitrations.
Judge Dreier has also served as a court-appointed mediator in various complex litigations. He is a member (Emeritus) of the Columbia Law School Board of Visitors, the editorial board of the New Jersey Law Journal, and the American Law Institute, and is a former Chair of the NJICLE Board of Trustees.
Judge Dreier was the recipient of a New Jersey Law Journal 2015 Lifetime Achievement Award and the 2008 Medal of Honor, the highest honor awarded to an attorney by the New Jersey State Bar Foundation. He also received the 2010 ADR Practitioner of the Year award by the New Jersey State Bar, the 1983 Alfred C. Clapp NJICLE Award for Excellence in Continuing Legal Education, and was the initial recipient of the William A. Dreier Award for Excellence in Product Liability Law (named for him) by the New Jersey State Bar Association Product Liability Section (2009). He has been regularly included in the Alternative Dispute Resolution section of The Best Lawyers in America and New Jersey Super Lawyers. He was named the Best Lawyers Arbitration "Lawyer of the Year" in in the Woodbridge New Jersey, Metro Area in 2018 and 2016 and is also listed in Who's Who in America.
Twenty-Two Norris McLaughlin Attorneys Recognized by Best Lawyers®
Ten Norris McLaughlin Attorneys Recognized by New Jersey Super Lawyers
Three Norris McLaughlin Attorneys Named 2020 Best Lawyers® "Lawyers of the Year" in Woodbridge Area
Nineteen Norris McLaughlin Attorneys Named to 2020 Best Lawyers® List
Eleven Norris McLaughlin Attorneys Recognized by New Jersey Super Lawyers 2019
Twenty-Three Norris McLaughlin Attorneys Named to 2019 Best Lawyers® List
Seventeen Norris McLaughlin Attorneys Recognized by New Jersey Super Lawyers 2018
Three Norris McLaughlin Attorneys Named Best Lawyers 2018 "Lawyers of the Year"
Twenty-Three Norris McLaughlin Attorneys Selected for Inclusion in Best Lawyers
Sixteen Norris McLaughlin Attorneys Recognized by New Jersey Super Lawyers 2017
Twenty-Five Norris McLaughlin, P.A. Attorneys Selected for Inclusion in Best Lawyers
Five Norris McLaughlin, P.A. Attorneys Named Best Lawyers 2016 "Lawyers of the Year"
Twenty-Five Norris McLaughlin Attorneys Selected for Inclusion in Best Lawyers
New Jersey Law Journal Awards William A. Dreier Lifetime Achievement Award
Sixteen Norris McLaughlin Attorneys Recognized by New Jersey Super Lawyers
Nineteen Norris McLaughlin Attorneys Recognized by New Jersey Super Lawyers 2014
Twenty-Four Norris McLaughlin Attorneys Selected for Inclusion in Best Lawyers
Judge Dreier Arbitration Calendar
Seventeen Norris McLaughlin Attorneys Recognized by New Jersey Super Lawyers
Twenty-Nine Norris McLaughlin, P.A. Attorneys Named Among Best Lawyers
William A. Dreier Elected As Fellow of the College of Commercial Arbitrators
Thirty Norris McLaughlin, P.A.Attorneys Recognized by New Jersey Super Lawyers
William A. Dreier Is Honored as ADR Practitioner of the Year
Twenty Norris McLaughlin Attorneys Named Among Best Lawyers
William A. Dreier Is First Recipient of Annual Award To Be Named After Him
William A. Dreier Lectures On Advance Civil Mediation Skills
Seventeen Norris McLaughlin, P.A. Members Named Among Best Lawyers In America
New Jersey State Bar Foundation Recognizes Honorable William A. Dreier
William A. Dreier Will Speak At Advanced Mediation Clinic
William A. Dreier Will Speak At Product Liability Dinner Program
William A. Dreier to Speak About Hot Topics in Chancery Trial Practice
Seventeen Norris McLaughlin Members Named Among Best Lawyers In America
A FIRM EXPONENT OF ADR
VENTING, PROBABILITY ANALYSIS AND EXAMINING THE BLACK BOX: MORE TIPS FOR BREAKING DOWN IMPASSE AND SETTLING THE CASE
AVOIDING THE IMPASSE, CLOSING THE DEAL
ALTERNATIVE DISPUTE RESOLUTION: ACHIEVING THE PROMISE OF ARBITRATION
ACHIEVING THE PROMISE OF ARBITRATION
ROUNDTABLE: ARBITRATION – IS IT STILL A VIABLE ALTERNATIVE TO LITIGATION?
A MISSED OPPORTUNITY
THE ESSENTIALS IN A SUCCESSFUL APPELLATE PRACTICE
ADR TRENDS FOR 2008
STRATEGIES FOR SUCCESSFUL INTERACTION WITH ADR NEUTRALS
RECENT COURT RULINGS AFFECT PUNITIVE DAMAGES
CHARACTERISTICS TO CONSIDER WHEN SELECTING 'THE RIGHT' ADR NEUTRALS
PUNITIVE DAMAGES RULES CHANGE
A SAFE HARBOR? FDA APPROVAL OF DRUG WARNINGS
RESOLVING DISPUTES WITH A FOCUS ON YOUR CLIENT'S BUSINESS NEEDS
DOES FDA APPROVAL PROVIDE SAFE HARBOR?
FDA REAFFIRMS ITS FIRM STAND ON PREEMPTION
EXPERTS IDENTIFY ADR TRENDS AND BEST PRACTICES
A SIMPLE END TO COMPLEX INSTRUMENTALITIES
EVIDENCE OF POST-ACCIDENT REPAIRS: ADMISSIBLE OR NOT?
THE GROWING POPULARITY OF ADR
WHEN DOES A PLAINTIFF NEED AN EXPERT?
FINDING THE MOST EFFICIENT FORUM FOR RESOLVING DISPUTES
MEDIATE, ARBITRATE – DON'T LITIGATE
RESOLVE YOUR DISPUTES OUT OF COURT
RECOVERY FOR "FEAR OF CANCER"
IS INCLUDING ARBITRATION CLAUSE IN PRODUCT WARRANTIES A LEGAL PRACTICE?
UNTYING THE LAIDLOW KNOT
A NEW LOOK AT THE WORKER
DESIGN DEFECTS IN NEW JERSEY FOLLOWING THE 1997 RESTATEMENT (THIRD) OF TORTS: PRODUCTS LIABILITY
STATE-OF-THE-ART: WHOSE ART; WHAT WAS KNOWN; AND WHEN?
PRODUCTS LIABILITY AND RICO CLAIMS
WARRANTY: THE STEPCHILD OF PRODUCT LIABILITY
A QUESTION OF LIABILITY: WHO'S TO BLAME WHEN PRODUCTS DEVELOPED BY LICENSEES CAUSE UNFORESEEN…?
DRAWING THE LINE ON FORESEEABLE MISUSES
POST-SALE DUTIES TO WARN
New Jersey Arbitration Handbook, New Jersey Law Journal Books, 2013
New Jersey Products Liability and Toxic Torts Law, Gann Law Books, 1995-present
Products Liability and Toxic Torts Law in New Jersey — A Practitioner's Guide, NJICLE, 1976-1994
Chancery Practice in New Jersey, NJICLE, 8 editions to 2012
Secured Transactions Under the Revised Uniform Commercial Code, NJICLE
Secured Financing Under the Uniform Commercial Code
Law Review Articles
"Liability for Drug Advertising, Warnings and Fraud," Rutgers L. Rev. (2006)
"Beyond Workers' Compensation: Workplace Comparative Fault and Third-Party Claims," 20 Ga. St. U.L. Rev. 459 (2004)
"Direct-to-Consumer Advertising Liability: An Empty Promise?," 30 Seton Hall L. Rev. 806 (2000)
"Manufacturers Liability for Drugs and Medical Devices Under the Restatement (Third) of Torts: Products Liability," 30 Seton Hall L. Rev. 258 (1999)
"The Restatement (Third) of Torts: Products Liability and New Jersey Law – Not Quite Perfect Together," 50 Rutgers L. Rev. 2059 (1998)
"Design Defects Under the Proposed Section 2(b) of the Restatement (Third) of Torts: Products Liability – A Judge's View," 30 U. Mich. J. of Law Reform 221 (1997)
"Reform of the Personal Injury Damages Delivery System," 48 Rutgers L. Rev. 799 (1996)
"Injuries to Production Workers: Reform of the Workers' Compensation Product Liability Interface," 48 Rutgers L. Rev. 813 (1996)
"Analysis, 1987 Product Liability Act," 41 Rutgers L. Rev. 1279 (1989)
"Identification of the Defendant Manufacturer in Generic Product Cases: Issues and Questions," 17 Seton Hall L. Rev. 513 (1987)
Other Published Articles
"Exponent of ADR," Metropolitan Corporate Counsel, August 2013
"Alternative Dispute Resolutions: Achieving the Promise of Arbitration," Metropolitan Corporate Counsel, June 2011
"Resolving Impasses in Personal Injury Mediations," Chapter in Definitive Creative Impasse-Breaking Techniques in Mediation, New York State Bar Association, 2011
"Achieving the Promise of Arbitration," New Jersey Law Journal, April 11, 2011
"Venting, Probability Analysis and Examining the Black Box: More Tips for Breaking Down Impasse and Settling the Case," Alternatives, Vol. 29, No. 2, February 2011
"Avoiding the Impasse, Closing the Deal," Alternatives, Vol. 29, No. 1, January 2011
"Roundtable: Arbitration – Is It Still A Viable Alternative to Litigation?" Metropolitan Corporate Counsel, January 2011
"A Missed Opportunity ," New Jersey Law Journal, January 5, 2009
"The Essentials In A Successful Appellate Practice," The Metropolitan Corporate Counsel, September 2008
"ADR Trends for 2008 ," The Metropolitan Corporate Counsel, January 2008
"Strategies for Successful Interaction With ADR Neutrals ," The Metropolitan Corporate Counsel, August 2007
"Recent Court Rulings Affect Punitive Damages ," New Jersey Lawyer, May 14, 2007
"Characteristics To Consider When Selecting 'The Right' ADR Neutrals ," The Metropolitan Corporate Counsel, April 2007
"Punitive Damages Rules Change ," Litigation Alert, March 2007
"A Safe Harbor? FDA Approval of Drug Warnings ," For The Defense, March 2007
"Resolving Disputes With A Focus On Your Client's Business Needs ," The Metropolitan Corporate Counsel, January 2007
"Does FDA Approval Provide Safe Harbor? ," New Jersey Law Journal, December 11, 2006
"FDA Reaffirms Its Firm Stand on Preemption ," New Jersey Defense, Vol. 22, Issue 3, June 2006
"Save Time and Money with Mediation ," U.S.1, February 22, 2006
"Experts Identify ADR Trends and Best Practices ," The Metropolitan Corporate Counsel, January 2006
"A Simple End to Complex Instrumentalities ," New Jersey Law Journal, December 5, 2005
"Evidence of Post-Accident Repairs: Admissible or Not? ," Products Liability Law Alert, September 2005
"The Growing Popularity of ADR ," The Metropolitan Corporate Counsel, August 2005
"When Does A Plaintiff Need an Expert? ," New Jersey Law Journal, December 6, 2004
"Finding the Most Efficient Forum for Resolving Disputes in Today's Corporate World ," Metropolitan Corporate Counsel, December 2004
"Mediate, Arbitrate – Don't Litigate ," Metropolitan Corporate Counsel, August 2004
"Assessment of Employees' and Employers' Conduct in Product Liability Cases – A New Beginning?," New Jersey Law Journal, 2003
"Advice to the Novice (and Seasoned) Appellate Lawyer," New Jersey Lawyer Magazine, 2003
"Resolve Your Disputes Out of Court ," Metropolitan Corporate Counsel, August 2003
"A Question of Liability – Who's To Blame When Products Developed by Licensees Cause Unforeseen Injuries? ," New Jersey Law Journal, April 3, 2003
"Recovery For 'Fear of Cancer' ," Products Liability Law Alert, April 2003
"Is Including Arbitration Clause in Product Warranties a Legal Practice? ," Products Liability Law Alert, February 2003
"Untying the Laidlow Knot ," New Jersey Law Journal, December 9, 2002
"A New Look at the Worker's Compensation Defense in Products Liability Cases ," Products Liability Law Alert, March 2002
"Lowering The Bar ," New Jersey Law Journal, December 3, 2001
"Liability for Design Defects in New Jersey Following the 1997 Restatement (Third) of Torts: Products Liability ," New Jersey Law Journal, December 4, 2000
"State-of-the-Art: Whose Art; What Was Known; and When? ," Products Liability Law Alert, November 2000
"Products Liability and Rico Claims ," Products Liability Law Alert, August 2000
"Warranty: The Stepchild of Product Liability ," Products Liability Law Alert, July 2000
"Punitive Damages ," Products Liability Law Alert, January 2000
"Drawing the Line on Foreseeable Misuses ," Products Liability Law Alert, October 1999
"Post-Sale Duties to Warn ," Products Liability Law Alert, June 21, 1999
Numerous other published articles from 1963 -1999
"Jurisdictional Matters in Arbitration," NJSBA Dispute Resolution Section, September 10, 2013
"Managing Products Liability Risk for Manufacturers and Distributors," Norris McLaughlin, P.A., Bridgewater, New Jersey, November 11, 2009
Annual Civil Mediation Training Course, New Jersey Institute for Continuing Legal Education, New Jersey Law Center, New Brunswick, New Jersey, 2008 – Present
Annual Seminar of Municipal Excess Liability Fund, Monroe Township, New Jersey, November 24, 2008
"Advanced Mediation Techniques," Mercer County Bar Association, Marriott Princeton Conference Center at Forrestal, Princeton, New Jersey, November 7, 2008
"Advanced Mediation Clinic," New Jersey Institute for Continuing Legal Education, in cooperation with the NJSBA Dispute Resolution Section and the Justice Garibaldi ADR Inn of Court, New Brunswick, New Jersey, June 16, 2008
"Chancery Practice" New Jersey Institute for Continuing Legal Education, 1982 – 2012
"A Case Study on Product Liability Litigation," The Bar Foundation of Union County, Mountainside, New Jersey, April 10, 2008
Products Liability: From Intake Through Trial, New Jersey Institute for Continuing Legal Education, March 3, 2007
"How to WIN in Mediation," Mercer County Bar Association, November 29, 2006
Planning Chair or Co-Chair and Faculty Member, Annual ALI-ABA Advanced Products Liability Conference, 1984 – 2000
Products Liability, Annual Lecture, New Jersey Institute for Continuing Legal Education, 1983-2009
Evidence Law and Control of the Courtroom for New Judges, Annual Lecture, New Jersey Judicial College, 1978 – 2008
Products Liability, Annual Lecture, New Jersey Judicial College, 1977 – 2008
4th Annual Gaining Physician Access Conference, The Center for Business Intelligence, March 16-17, 2006
Product Liability: A Road Map to Mediation or Trial, New Jersey Institute for Continuing Legal Education, March 11, 2006
Commercial Mediation Workshop, New Jersey Institute for Continuing Legal Education, February 28, 2006
Toxic Torts and Products Liability, New Jersey Law Journal, 2002
Products Liability A-Z, New Jersey Law Journal, 2000
Numerous other lectures from 1965 -1999
Judge William A. Dreier has earned the Martindale-Hubbell AV Preeminent® status. A description of the selection methodology can be found here. No aspect of this advertisement has been approved by the Supreme Court of New Jersey.
William A. Dreier was selected to the 2020 Super Lawyers list. The Super Lawyers List is issued by Thompson Reuters. A description of the selection methodology can be found here. No aspect of this advertisement has been approved by the Supreme Court of New Jersey.
William A. Dreier was selected to the 2021 Best Lawyers® list. A description of the selection methodology can be found here. No aspect of this advertisement has been approved by the Supreme Court of New Jersey.
William A. Dreier was selected to the 2018 Best Lawyers® Lawyer of The Year list. A description of the selection methodology can be found here. No aspect of this advertisement has been approved by the Supreme Court of New Jersey.
William A. Dreier was selected to the 2021 Best Lawyers® Lawyer of the Year list in Woodbridge Area. A description of the selection methodology can be found here. No aspect of this advertisement has been approved by the Supreme Court of New Jersey.
2015 Lifetime Achievement Award, 2008 Medal of Honor, 2010 ADR Practitioner of the Year, 1983 Alfred C. Clapp NJICLE Award for Excellence in Continuing Legal Education, 2009 William A. Dreier Award for Excellence in Product Liability
Contact This Attorney
Products Liability Defense
J.D., 1961
B.S., 1958
U.S. Court of Appeals
New Jersey State Bar Association
College of Commercial Arbitrators, Fellow
National Academy of Distinguished Neutrals
American Law Institute, Life Member
American Bar Foundation, Life Member
New Jersey Law Journal, Editorial Board
Columbia Law School, Board of Visitors (Emeritus)


Blending fruits and vegetables to make delicious smoothies has become the latest trend in town. While juicing offers a range of benefits, it lacks dietary fiber your body needs for healthy bowel movement and support. Additionally, fruit smoothies are convenient to gulp down when you are too busy to grab a bite to eat.
Of course, all this would not be possible without a handy blender. Blenders are among the most versatile kitchen appliances that can make meal prepping much easier. However, with several different models to choose from, investing in the best blender may seem like a tedious task.
From professional blenders to compact personal ones, Ninja offers a wide range of blenders to choose from. Most of their appliances are priced quite reasonably and offer the same performance as other pricy brands in the market.
1000-Watt Power Base: The BL610 model features a 1000-watt power base that offers excellent performance coupled with a sleek and stylish design.
Versatility: The BL610 comes with a detailed instruction manual that features a variety of different recipes. The blender can be used to perform a variety of tasks, including grinding, crushing ice, chopping almonds, and grinding Parmesan. The blender can blast ice into snow and turn your favorite ingredients in to tasty dips, sauces and smoothies in seconds.
BPA Free Jar: Health enthusiasts would be pleased to know that the BL610 jar is BPA free. Now, you can indulge in delicious recipes without worrying about health risks.
Total Crushing Technology: With the help of the Total Crushing Technology, individuals can crush tough ingredients, such as frozen fruits and ice, in a matter of seconds.
Cord Storage: Individuals need not worry about extending cords that look untidy in the kitchen. The BL610 features cord storage.
Easy Lock Lid: The blender features an easy lock lid with built in pour spout. This prevents spillage and accidents.
3 Speeds + Pulse: The blender features 3 speed modes ranging from high, medium to low and can pulse ingredients too. This allows individuals to prepare delicious recipes using ideal setting.
Safety Feature: SharkNinja cares about the safety of its consumers. The model keeps the blade from spinning unless the lid has been latched on securely. This reduces the risk of accidents.
Sleek Design: The BL610 is a sleek countertop blender that is bound to look great on any kitchen counter. The compact design will easily fit inside any cabinet or cupboard without occupying too much space.
1-Year Warranty: The blender comes with a risk-free one-year warranty.
Most customers on Amazon were pleased with their purchase and left positive reviews for the Ninja Professional Blender (BL610). The blender received an average of 4.5 stars out of 5 on Amazon at the time of this review.
Overall, the blender is solid and is not noisy. Consumers found the blender quite easy to clean and were happy that all the components can be conveniently washed in the dishwasher. A customer wrote how they bought the appliance as a Mother's Day gift which was well received.
The customer now uses the product to prepare delicious smoothies every day.
Another customer compared the BL610 model to much expensive competitors. According to the customer, the BL610 offers greats value for its lower price and looks impressive. It resembles a food processor and has powerful blades that produce commendable results. The Ninja can also be used for pulverizing ingredients to make delicious dressings.
Consumers liked how easy it is to remove the blender's blade. This makes it easier to detach all the components, resulting in convenient cleaning. The blender is a must-have for parents who want to sneak in more fruits and vegetables into their child's diet.
You can browse through several healthy recipes on the internet or experiment with your favorite ingredients at home. In fact, why not let your little one lend you a hand in preparing meals? After all, the blender is safe to use.
On the downside, a few customers had some complaints regarding durability. According to a customer, the blender broke after only three uses. The customer did not use their warranty since they would have to pay $19.95 for shipping to have the broken item replaced.
They claimed the charge was not worth the hassle and chose to not have their purchase replaced.
Another customer complained how the blender failed to produce smooth consistency, which means you may find lumps in your smoothie or milkshake. Overall, the blender is a good buy but it does have a few minor flaws.
The Ninja Professional Blender (BL610) is available on Amazon for under $80 with free shipping on Amazon Prime. To save money, be on the lookout for special deals and discounts. Amazon offers several Warehouse deals that consumers can benefit from.
Sure, you can opt for one of the more expensive models but the BL610 is sufficient enough for your everyday smoothie making routine. Overall, the multi-purpose blender is a good buy that won't break the bank.
Based on customer reviews, the Ninja Professional Blender (BL610) is a great blender. However, it cannot be compared with higher end units. If performance and durability is your main concern, perhaps you should invest in a different, more expensive model.
However, if you do not want to break the bank and are in need of a stylish blender, the Ninja Professional Blender (BL610) is a good way to go.


Growth declined to 2.1% in 2016 due to policy slippages and electoral uncertainty, but is expected to rebound to 3.5% in 2017 and 4.8% in 2018 following a peaceful political transition. The outlook depends on the ability of the new administration to carry out a smooth and fast transition in order to make needed reforms and set the basis for structural transformation.
Following the 2011 drought-induced contraction of the Gambia's gross domestic product (GDP), the country's economy recovered moderately in 2012 and in 2013. GDP growth in 2014 is estimated to have contracted to about -0.7%, compared to earlier estimated GDP growth of 7%.


There may be loans on the market that can save you thousands and help you own your home sooner.
Significant savings may be available by consolidating all your finances. The days of having a home loan, a personal loan or overdraft, a car loan, a savings account, a cheque account and owing money on credit cards are over.
Financially, it is far more efficient to consolidate all your loans. As home loan rates are significantly lower than those for personal loans, overdrafts and credit cards, but significantly higher than savings and cheque account rates, it makes sense to consolidate everything into your home loan account.
By effectively structuring your finances, you can significantly reduce your mortgage. Arranging part of your salary to be credited directly to the loan, making additional repayments, setting up an interest offset facility or a line of credit, are all options that can have very beneficial results.
By sticking to a workable budget in conjunction with some of the above options, you can repay your loans much more quickly and save vast amounts of interest.
To find out how much interest you can save and how many years you can take off your loan, contact us today.
One way to make the refinancing process quick and simple is to ensure you have all the necessary documentation before you apply for a new loan.
Below we have outlined the minimum documentation required if you are refinancing your loan.
Three of your most recent payslips plus your last two group certificates of tax returns.
Other loan repayment statements for previous three months.
Current credit card statements for previous three months.
Last 12 months loan statements.


text:
Charlemont is a stop on the Luas light-rail tram system in Dublin, Ireland.  It opened in 2004 as a stop on the Green Line from St Stephen's Green station to Sandyford. It provides access to the Portobello area and the Cathal Brugha Barracks.

The platforms of Charlemont are located on a steel and concrete beam bridge which crosses the Grand Canal.  The waiting shelters are located directly above the canal itself.  The advantage of this layout is that the stop can be accessed from either side of the canal: on the south side, a staircase and lift lead from the Grand Parade to the northbound platform.  On the north side, staircases lead from each of the platforms to Charlemont Place, but this end does not have step free access.  Since the Luas does not have ticket barriers, the bridge can also be used by pedestrians to cross the canal.  The bridge has been dedicated to Professor Simon H. Perry, a civil engineer who lead the campaign for a light railway in Dublin.  The arrangement of a station on a bridge over water has since been implemented on a much larger scale at London Blackfriars station.

To the south of Charlemont, trams continue south on a viaduct built for the Harcourt Street railway line which ran along this alignment from 1854 to 1958.  To the north, trams cross Charlemont Place and descend a ramp, continuing through the city centre on the streets.  Trams generally run every 5–10 minutes.  Northbound trams terminate at Parnell or continue to Broombridge.  Southbound trams terminate at Sandyford or continue to Brides Glen.  Charlemont is also served by Dublin Bus routes 44, 44B and 61.

References

Luas Green Line stops in Dublin (city)

redpajama_set_name: RedPajamaWikipedia


Cambodia is a beautiful country, with rich culture, kind people, and an incredible heritage. This country, thousands of years ago, was once a thriving empire. Now, due to political corruption, war, and one of the largest, and least known genocides, the large majority of people live in extreme poverty. The people have suffered a great deal in the last 30+ years, and are now working hard to rebuild their beautiful country.


Contest Rules are accessible on the Contest Entry website at https://fatwin.com/150708web.
Larry H. Miller Hyundai Peoria has monthly specials on NEW Vehicles, Service & Parts! Check out below for New Hyundai models on special, come get an oil change or shop Hyundai Accessories in our Parts store. Browse the Specials below!
No purchase necessary. Entries open through 4/20/2019. Contest Rules available on Entry page at https://fatwin.com/152042web.
New Vehicle Offers for August Are Available Now!
We'll have them posted soon --- Please contact us for immediate information.
New Offers Are Available NOW and will be posted soon. Please contact us for immediate information.