text:
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using ICSharpCode.SharpZipLib.Core;
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Tar;
using QuantConnect.Data.Market;
using QuantConnect.Logging;
using ZipEntry = ICSharpCode.SharpZipLib.Zip.ZipEntry;
using ZipFile = Ionic.Zip.ZipFile;
using ZipInputStream = ICSharpCode.SharpZipLib.Zip.ZipInputStream;
using ZipOutputStream = ICSharpCode.SharpZipLib.Zip.ZipOutputStream;

namespace QuantConnect
{
    /// <summary>
    /// Compression class manages the opening and extraction of compressed files (zip, tar, tar.gz).
    /// </summary>
    /// <remarks>QuantConnect's data library is stored in zip format locally on the hard drive.</remarks>
    public static class Compression
    {
        /// <summary>
        /// Create a zip file of the supplied file names and string data source
        /// </summary>
        /// <param name="zipPath">Output location to save the file.</param>
        /// <param name="filenamesAndData">File names and data in a dictionary format.</param>
        /// <returns>True on successfully creating the zip file.</returns>
        public static bool ZipData(string zipPath, Dictionary<string, string> filenamesAndData)
        {
            var success = true;
            var buffer = new byte[4096];

            try
            {
                //Create our output
                using (var stream = new ZipOutputStream(File.Create(zipPath)))
                {
                    foreach (var filename in filenamesAndData.Keys)
                    {
                        //Create the space in the zip file:
                        var entry = new ZipEntry(filename);
                        //Get a Byte[] of the file data:
                        var file = Encoding.Default.GetBytes(filenamesAndData[filename]);
                        stream.PutNextEntry(entry);

                        using (var ms = new MemoryStream(file))
                        {
                            int sourceBytes;
                            do
                            {
                                sourceBytes = ms.Read(buffer, 0, buffer.Length);
                                stream.Write(buffer, 0, sourceBytes);
                            }
                            while (sourceBytes > 0);
                        }
                    } // End For Each File.

                    //Close stream:
                    stream.Finish();
                    stream.Close();
                } // End Using
            }
            catch (Exception err)
            {
                Log.Error(err);
                success = false;
            }
            return success;
        }

        /// <summary>
        /// Create a zip file of the supplied file names and data using a byte array
        /// </summary>
        /// <param name="zipPath">Output location to save the file.</param>
        /// <param name="filenamesAndData">File names and data in a dictionary format.</param>
        /// <returns>True on successfully saving the file</returns>
        public static bool ZipData(string zipPath, IEnumerable<KeyValuePair<string, byte[]>> filenamesAndData)
        {
            var success = true;
            var buffer = new byte[4096];

            try
            {
                //Create our output
                using (var stream = new ZipOutputStream(File.Create(zipPath)))
                {
                    foreach (var file in filenamesAndData)
                    {
                        //Create the space in the zip file:
                        var entry = new ZipEntry(file.Key);
                        //Get a Byte[] of the file data:
                        stream.PutNextEntry(entry);

                        using (var ms = new MemoryStream(file.Value))
                        {
                            int sourceBytes;
                            do
                            {
                                sourceBytes = ms.Read(buffer, 0, buffer.Length);
                                stream.Write(buffer, 0, sourceBytes);
                            }
                            while (sourceBytes > 0);
                        }
                    } // End For Each File.

                    //Close stream:
                    stream.Finish();
                    stream.Close();
                } // End Using
            }
            catch (Exception err)
            {
                Log.Error(err);
                success = false;
            }
            return success;
        }

        /// <summary>
        /// Zips the specified lines of text into the zipPath
        /// </summary>
        /// <param name="zipPath">The destination zip file path</param>
        /// <param name="zipEntry">The entry name in the zip</param>
        /// <param name="lines">The lines to be written to the zip</param>
        /// <returns>True if successful, otherwise false</returns>
        public static bool ZipData(string zipPath, string zipEntry, IEnumerable<string> lines)
        {
            try
            {
                using (var stream = new ZipOutputStream(File.Create(zipPath)))
                using (var writer = new StreamWriter(stream))
                {
                    var entry = new ZipEntry(zipEntry);
                    stream.PutNextEntry(entry);
                    foreach (var line in lines)
                    {
                        writer.WriteLine(line);
                    }
                }
                return true;
            }
            catch (Exception err)
            {
                Log.Error(err);
                return false;
            }
        }

        /// <summary>
        /// Uncompress zip data byte array into a dictionary string array of filename-contents.
        /// </summary>
        /// <param name="zipData">Byte data array of zip compressed information</param>
        /// <returns>Uncompressed dictionary string-sting of files in the zip</returns>
        public static Dictionary<string, string> UnzipData(byte[] zipData)
        {
            // Initialize:
            var data = new Dictionary<string, string>();

            try
            {
                using (var ms = new MemoryStream(zipData))
                {
                    //Read out the zipped data into a string, save in array:
                    using (var zipStream = new ZipInputStream(ms))
                    {
                        while (true)
                        {
                            //Get the next file
                            var entry = zipStream.GetNextEntry();

                            if (entry != null)
                            {
                                //Read the file into buffer:
                                var buffer = new byte[entry.Size];
                                zipStream.Read(buffer, 0, (int)entry.Size);

                                //Save into array:
                                data.Add(entry.Name, buffer.GetString());
                            }
                            else
                            {
                                break;
                            }
                        }
                    } // End Zip Stream.
                } // End Using Memory Stream

            }
            catch (Exception err)
            {
                Log.Error(err);
            }
            return data;
        }

        /// <summary>
        /// Performs an in memory zip of the specified bytes
        /// </summary>
        /// <param name="bytes">The file contents in bytes to be zipped</param>
        /// <param name="zipEntryName">The zip entry name</param>
        /// <returns>The zipped file as a byte array</returns>
        public static byte[] ZipBytes(byte[] bytes, string zipEntryName)
        {
            using (var memoryStream = new MemoryStream())
            using (var stream = new ZipOutputStream(memoryStream))
            {
                var entry = new ZipEntry(zipEntryName);
                stream.PutNextEntry(entry);
                var buffer = new byte[16*1024];
                StreamUtils.Copy(new MemoryStream(bytes), stream, buffer);
                return memoryStream.GetBuffer();
            }
        }

        /// <summary>
        /// Compress a given file and delete the original file. Automatically rename the file to name.zip.
        /// </summary>
        /// <param name="textPath">Path of the original file</param>
        /// <param name="zipEntryName">The name of the entry inside the zip file</param>
        /// <param name="deleteOriginal">Boolean flag to delete the original file after completion</param>
        /// <returns>String path for the new zip file</returns>
        public static string Zip(string textPath, string zipEntryName, bool deleteOriginal = true)
        {
            var zipPath = "";

            try
            {
                var buffer = new byte[4096];
                zipPath = textPath.Replace(".csv", ".zip");
                zipPath = zipPath.Replace(".txt", ".zip");
                //Open the zip:
                using (var stream = new ZipOutputStream(File.Create(zipPath)))
                {
                    //Zip the text file.
                    var entry = new ZipEntry(zipEntryName);
                    stream.PutNextEntry(entry);

                    using (var fs = File.OpenRead(textPath))
                    {
                        int sourceBytes;
                        do
                        {
                            sourceBytes = fs.Read(buffer, 0, buffer.Length);
                            stream.Write(buffer, 0, sourceBytes);
                        }
                        while (sourceBytes > 0);
                    }
                    //Close stream:
                    stream.Finish();
                    stream.Close();
                }
                //Delete the old text file:
                if (deleteOriginal) File.Delete(textPath);
            }
            catch (Exception err)
            {
                Log.Error(err);
            }
            return zipPath;
        }

        /// <summary>
        /// Compress a given file and delete the original file. Automatically rename the file to name.zip.
        /// </summary>
        /// <param name="textPath">Path of the original file</param>
        /// <param name="deleteOriginal">Boolean flag to delete the original file after completion</param>
        /// <returns>String path for the new zip file</returns>
        public static string Zip(string textPath, bool deleteOriginal = true)
        {
            return Zip(textPath, Path.GetFileName(textPath), deleteOriginal);
        }

        public static void Zip(string data, string zipPath, string zipEntry)
        {
            using (var stream = new ZipOutputStream(File.Create(zipPath)))
            {
                var entry = new ZipEntry(zipEntry);
                stream.PutNextEntry(entry);
                var buffer = new byte[4096];
                using (var dataReader = new MemoryStream(Encoding.Default.GetBytes(data)))
                {
                    int sourceBytes;
                    do
                    {
                        sourceBytes = dataReader.Read(buffer, 0, buffer.Length);
                        stream.Write(buffer, 0, sourceBytes);
                    }
                    while (sourceBytes > 0);
                }
            }
        }

        /// <summary>
        /// Zips the specified directory, preserving folder structure
        /// </summary>
        /// <param name="directory">The directory to be zipped</param>
        /// <param name="destination">The output zip file destination</param>
        /// <param name="includeRootInZip">True to include the root 'directory' in the zip, false otherwise</param>
        /// <returns>True on a successful zip, false otherwise</returns>
        public static bool ZipDirectory(string directory, string destination, bool includeRootInZip = true)
        {
            try
            {
                if (File.Exists(destination)) File.Delete(destination);
                System.IO.Compression.ZipFile.CreateFromDirectory(directory, destination, CompressionLevel.Fastest, includeRootInZip);
                return true;
            }
            catch (Exception err)
            {
                Log.Error(err);
                return false;
            }
        }

        /// <summary>
        /// Unzips the specified zip file to the specified directory
        /// </summary>
        /// <param name="zip">The zip to be unzipped</param>
        /// <param name="directory">The directory to place the unzipped files</param>
        /// <param name="overwrite">Flag specifying whether or not to overwrite existing files</param>
        public static bool Unzip(string zip, string directory, bool overwrite = false)
        {
            if (!File.Exists(zip)) return false;

            try
            {
                if (!overwrite)
                {
                    System.IO.Compression.ZipFile.ExtractToDirectory(zip, directory);
                }
                else
                {
                    using (var archive = new ZipArchive(File.OpenRead(zip)))
                    {
                        foreach (var file in archive.Entries)
                        {
                            // skip directories
                            if (file.Name == "") continue;
                            var filepath = Path.Combine(directory, file.FullName);
                            if (OS.IsLinux) filepath = filepath.Replace(@"\", "/");
                            var outputFile = new FileInfo(filepath);
                            if (!outputFile.Directory.Exists)
                            {
                                outputFile.Directory.Create();
                            }
                            file.ExtractToFile(outputFile.FullName, true);
                        }
                    }
                }

                return true;
            }
            catch (Exception err)
            {
                Log.Error(err);
                return false;
            }
        }

        /// <summary>
        /// Zips all files specified to a new zip at the destination path
        /// </summary>
        public static void ZipFiles(string destination, IEnumerable<string> files)
        {
            try
            {
                using (var zipStream = new ZipOutputStream(File.Create(destination)))
                {
                    var buffer = new byte[4096];
                    foreach (var file in files)
                    {
                        if (!File.Exists(file))
                        {
                            Log.Trace("ZipFiles(): File does not exist: " + file);
                            continue;
                        }

                        var entry = new ZipEntry(Path.GetFileName(file));
                        zipStream.PutNextEntry(entry);
                        using (var fstream = File.OpenRead(file))
                        {
                            StreamUtils.Copy(fstream, zipStream, buffer);
                        }
                    }
                }
            }
            catch (Exception err)
            {
                Log.Error(err);
            }
        }

        /// <summary>
        /// Streams a local zip file using a streamreader.
        /// Important: the caller must call Dispose() on the returned ZipFile instance.
        /// </summary>
        /// <param name="filename">Location of the original zip file</param>
        /// <param name="zip">The ZipFile instance to be returned to the caller</param>
        /// <returns>Stream reader of the first file contents in the zip file</returns>
        public static StreamReader Unzip(string filename, out ZipFile zip)
        {
            return Unzip(filename, null, out zip);
        }

        /// <summary>
        /// Streams a local zip file using a streamreader.
        /// Important: the caller must call Dispose() on the returned ZipFile instance.
        /// </summary>
        /// <param name="filename">Location of the original zip file</param>
        /// <param name="zipEntryName">The zip entry name to open a reader for. Specify null to access the first entry</param>
        /// <param name="zip">The ZipFile instance to be returned to the caller</param>
        /// <returns>Stream reader of the first file contents in the zip file</returns>
        public static StreamReader Unzip(string filename, string zipEntryName, out ZipFile zip)
        {
            StreamReader reader = null;
            zip = null;

            try
            {
                if (File.Exists(filename))
                {
                    try
                    {
                        zip = new ZipFile(filename);
                        var entry = zip.FirstOrDefault(x => zipEntryName == null || string.Compare(x.FileName, zipEntryName, StringComparison.OrdinalIgnoreCase) == 0);
                        if (entry == null)
                        {
                            throw new ArgumentException("Unable to locate zip entry with name: " + zipEntryName);
                        }

                        reader = new StreamReader(entry.OpenReader());
                    }
                    catch (Exception err)
                    {
                        Log.Error(err, "Inner try/catch");
                        if (zip != null) zip.Dispose();
                        if (reader != null) reader.Close();
                    }
                }
                else
                {
                    Log.Error("Data.UnZip(2): File doesn't exist: " + filename);
                }
            }
            catch (Exception err)
            {
                Log.Error(err, "File: " + filename);
            }
            return reader;
        }

        /// <summary>
        /// Streams the unzipped file as key value pairs of file name to file contents.
        /// NOTE: When the returned enumerable finishes enumerating, the zip stream will be
        /// closed rendering all key value pair Value properties unaccessible. Ideally this
        /// would be enumerated depth first.
        /// </summary>
        /// <remarks>
        /// This method has the potential for a memory leak if each kvp.Value enumerable is not disposed
        /// </remarks>
        /// <param name="filename">The zip file to stream</param>
        /// <returns>The stream zip contents</returns>
        public static IEnumerable<KeyValuePair<string, IEnumerable<string>>> Unzip(string filename)
        {
            if (!File.Exists(filename))
            {
                Log.Error("Compression.Unzip(): File does not exist: " + filename);
                return Enumerable.Empty<KeyValuePair<string, IEnumerable<string>>>();
            }

            try
            {
                return ReadLinesImpl(filename);
            }
            catch (Exception err)
            {
                Log.Error(err);
            }
            return Enumerable.Empty<KeyValuePair<string, IEnumerable<string>>>();
        }

        /// <summary>
        /// Lazily unzips the specified stream
        /// </summary>
        /// <param name="stream">The zipped stream to be read</param>
        /// <returns>An enumerable whose elements are zip entry key value pairs with
        /// a key of the zip entry name and the value of the zip entry's file lines</returns>
        public static IEnumerable<KeyValuePair<string, IEnumerable<string>>> Unzip(Stream stream)
        {
            using (var zip = ZipFile.Read(stream))
            {
                foreach (var entry in zip)
                {
                    yield return new KeyValuePair<string, IEnumerable<string>>(entry.FileName, ReadZipEntry(entry));
                }
            }
        }

        /// <summary>
        /// Streams each line from the first zip entry in the specified zip file
        /// </summary>
        /// <param name="filename">The zip file path to stream</param>
        /// <returns>An enumerable containing each line from the first unzipped entry</returns>
        public static IEnumerable<string> ReadLines(string filename)
        {
            if (!File.Exists(filename))
            {
                Log.Error("Compression.ReadFirstZipEntry(): File does not exist: " + filename);
                return Enumerable.Empty<string>();
            }

            try
            {
                return ReadLinesImpl(filename, firstEntryOnly: true).Single().Value;
            }
            catch (Exception err)
            {
                Log.Error(err);
            }
            return Enumerable.Empty<string>();
        }

        private static IEnumerable<KeyValuePair<string, IEnumerable<string>>> ReadLinesImpl(string filename, bool firstEntryOnly = false)
        {
            using (var zip = ZipFile.Read(filename))
            {
                if (firstEntryOnly)
                {
                    var entry = zip[0];
                    yield return new KeyValuePair<string, IEnumerable<string>>(entry.FileName, ReadZipEntry(entry));
                    yield break;
                }
                foreach (var entry in zip)
                {
                    yield return new KeyValuePair<string, IEnumerable<string>>(entry.FileName, ReadZipEntry(entry));
                }
            }
        }

        private static IEnumerable<string> ReadZipEntry(Ionic.Zip.ZipEntry entry)
        {
            using (var entryReader = new StreamReader(entry.OpenReader()))
            {
                while (!entryReader.EndOfStream)
                {
                    yield return entryReader.ReadLine();
                }
            }
        }

        /// <summary>
        /// Unzip a local file and return its contents via streamreader:
        /// </summary>
        public static StreamReader UnzipStream(Stream zipstream)
        {
            StreamReader reader = null;
            try
            {
                //Initialise:
                MemoryStream file;

                //If file exists, open a zip stream for it.
                using (var zipStream = new ZipInputStream(zipstream))
                {
                    //Read the file entry into buffer:
                    var entry = zipStream.GetNextEntry();
                    var buffer = new byte[entry.Size];
                    zipStream.Read(buffer, 0, (int)entry.Size);

                    //Load the buffer into a memory stream.
                    file = new MemoryStream(buffer);
                }

                //Open the memory stream with a stream reader.
                reader = new StreamReader(file);
            }
            catch (Exception err)
            {
                Log.Error(err);
            }

            return reader;
        } // End UnZip

        /// <summary>
        /// Unzip a local file and return its contents via streamreader to a local the same location as the ZIP.
        /// </summary>
        /// <param name="zipFile">Location of the zip on the HD</param>
        /// <returns>List of unzipped file names</returns>
        public static List<string> UnzipToFolder(string zipFile)
        {
            //1. Initialize:
            var files = new List<string>();
            var slash = zipFile.LastIndexOf(Path.DirectorySeparatorChar);
            var outFolder = "";
            if (slash > 0)
            {
                outFolder = zipFile.Substring(0, slash);
            }
            ICSharpCode.SharpZipLib.Zip.ZipFile zf = null;

            try
            {
                var fs = File.OpenRead(zipFile);
                zf = new ICSharpCode.SharpZipLib.Zip.ZipFile(fs);

                foreach (ZipEntry zipEntry in zf)
                {
                    //Ignore Directories
                    if (!zipEntry.IsFile) continue;

                    //Remove the folder from the entry
                    var entryFileName = Path.GetFileName(zipEntry.Name);
                    if (entryFileName == null) continue;

                    var buffer = new byte[4096];     // 4K is optimum
                    var zipStream = zf.GetInputStream(zipEntry);

                    // Manipulate the output filename here as desired.
                    var fullZipToPath = Path.Combine(outFolder, entryFileName);

                    //Save the file name for later:
                    files.Add(fullZipToPath);
                    //Log.Trace("Data.UnzipToFolder(): Input File: " + zipFile + ", Output Directory: " + fullZipToPath);

                    //Copy the data in buffer chunks
                    using (var streamWriter = File.Create(fullZipToPath))
                    {
                        StreamUtils.Copy(zipStream, streamWriter, buffer);
                    }
                }
            }
            finally
            {
                if (zf != null)
                {
                    zf.IsStreamOwner = true; // Makes close also shut the underlying stream
                    zf.Close(); // Ensure we release resources
                }
            }
            return files;
        } // End UnZip

        /// <summary>
        /// Extracts all file from a zip archive and copies them to a destination folder.
        /// </summary>
        /// <param name="source">The source zip file.</param>
        /// <param name="destination">The destination folder to extract the file to.</param>
        public static void UnTarFiles(string source, string destination)
        {
            var inStream = File.OpenRead(source);
            var tarArchive = TarArchive.CreateInputTarArchive(inStream);
            tarArchive.ExtractContents(destination);
            tarArchive.Close();
            inStream.Close();
        }

        /// <summary>
        /// Extract tar.gz files to disk
        /// </summary>
        /// <param name="source">Tar.gz source file</param>
        /// <param name="destination">Location folder to unzip to</param>
        public static void UnTarGzFiles(string source, string destination)
        {
            var inStream = File.OpenRead(source);
            var gzipStream = new GZipInputStream(inStream);
            var tarArchive = TarArchive.CreateInputTarArchive(gzipStream);
            tarArchive.ExtractContents(destination);
            tarArchive.Close();
            gzipStream.Close();
            inStream.Close();
        }

        /// <summary>
        /// Enumerate through the files of a TAR and get a list of KVP names-byte arrays
        /// </summary>
        /// <param name="stream">The input tar stream</param>
        /// <param name="isTarGz">True if the input stream is a .tar.gz or .tgz</param>
        /// <returns>An enumerable containing each tar entry and it's contents</returns>
        public static IEnumerable<KeyValuePair<string, byte[]>> UnTar(Stream stream, bool isTarGz)
        {
            using (var tar = new TarInputStream(isTarGz ? (Stream)new GZipInputStream(stream) : stream))
            {
                TarEntry entry;
                while ((entry = tar.GetNextEntry()) != null)
                {
                    if (entry.IsDirectory) continue;

                    using (var output = new MemoryStream())
                    {
                        tar.CopyEntryContents(output);
                        yield return new KeyValuePair<string, byte[]>(entry.Name, output.ToArray());
                    }
                }
            }
        }

        /// <summary>
        /// Enumerate through the files of a TAR and get a list of KVP names-byte arrays.
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static IEnumerable<KeyValuePair<string, byte[]>> UnTar(string source)
        {
            //This is a tar.gz file.
            var gzip = (source.Substring(Math.Max(0, source.Length - 6)) == "tar.gz");

            using (var file = File.OpenRead(source))
            {
                var tarIn = new TarInputStream(file);

                if (gzip)
                {
                    var gzipStream = new GZipInputStream(file);
                    tarIn = new TarInputStream(gzipStream);
                }

                TarEntry tarEntry;
                while ((tarEntry = tarIn.GetNextEntry()) != null)
                {
                    if (tarEntry.IsDirectory) continue;

                    using (var stream = new MemoryStream())
                    {
                        tarIn.CopyEntryContents(stream);
                        yield return new KeyValuePair<string, byte[]>(tarEntry.Name, stream.ToArray());
                    }
                }
                tarIn.Close();
            }
        }
    }
}

redpajama_set_name: RedPajamaGithub


Drawn from years of experience, training, and travel, this resource presents an original method of healing centered on the heart, which represents the innate wisdom of the universe and divine instructions from the source. Utilizing the power of guided visualization, this inspiring and pragmatic examination illustrates seven key steps for how to shed suffering and struggle by awakening and connecting to the heart's magical and immediately transformational power. Anyone who has suffered a loss—whether it concerns identity, a relationship, a passion, purpose, or interest—can practice this powerful and vital exploration to release trapped emotional traumas and move from simply surviving to living fully awake and alive.


text:
function degrees(r) {
    return r*(180/Math.PI);
}

function radians(r) {
    return r*(Math.PI/180);
}

function lineIntersection(ballx, bally, ballxv, ballyv,
			  lstartx, lstarty, lxv, lyv) : Array<number>
{
    var j = (lstarty/ballyv - bally/ballyv + ballx/ballxv -lstartx/ballxv)/(lxv/ballxv -lyv/ballyv);
    var i = (lstartx+j*lxv-ballx)/ballxv;
    return [i,j];
}

function lineLen(x,y)
{
    return Math.sqrt(x*x+y*y);
}

class TaggedPoint {
    x1: number;
    y1: number;
    ident: string;
    polygon: TaggedPoly;
    constructor(coords, polygon, pointid) {
	this.x1 = coords[0];
	this.y1 = coords[1];
	this.ident = polygon.ident+"-"+pointid;
	this.polygon = polygon
    }
}

class TaggedLine {
    x1: number;
    x2: number;
    y1: number;
    y2: number;
    polygon: TaggedPoly;
    ident: string;

    constructor(x1, y1, x2, y2, polygon, lineid) {
	this.x1 = x1;
	this.x2 = x2;
	this.y1 = y1;
	this.y2 = y2;
	this.polygon = polygon;
	this.ident = polygon.ident+"-l"+lineid;
    }
}

class TaggedPoly {
    poly: Array<Array<number>>;
    region: any;
    ident: string;
    alive: boolean;

    constructor(ident, pointarray, region) {
	this.poly = pointarray;
	this.region = region;
	this.ident = ident;
	this.alive = true;
    }
}

function getTaggedPolyLines(taggedPolygon) : Array<TaggedLine>
{
    var lines: Array<TaggedLine> = new Array();
    var poly = taggedPolygon.poly;
    for(var p=0;p<poly.length-1;p++) {
        lines.push(new TaggedLine(poly[p][0],poly[p][1],poly[p+1][0],poly[p+1][1],taggedPolygon,p));
    }
    lines.push(new TaggedLine(poly[0][0],poly[0][1],poly[poly.length-1][0],poly[poly.length-1][1],taggedPolygon,p));
    return lines;
}

class Collision {
    ix : number;
    iy : number;
    dist: number;
    outAngle: number;
    obj: TaggedPoly;
    processed : boolean;
    constructor(ix,iy,dist,outAngle,obj : TaggedPoly)
    {
	this.ix = ix;
	this.iy = iy;
	this.dist = dist;
	this.outAngle = outAngle;
	this.obj = obj;
	this.processed = false;
    }
}

function intersectPoly(poly, collisions, ball, considerRadius, lastCollisionObjectID)
{
    var lines = getTaggedPolyLines(poly);
    var hitline = null;
    var lowi = 1.1;

    for(var ln=0;ln<lines.length;ln++) {
	var l = lines[ln]
        if(l.ident == lastCollisionObjectID) continue;
        var lxv = l.x2-l.x1;
	var lyv = l.y2-l.y1;
	var lnormx = -lyv;
        var lnormy = lxv;
        var normScale = lineLen(lnormx,lnormy);
        var lnormx = lnormx / normScale;
        var lnormy = lnormy / normScale;
        var dotproduct = lnormx*ball.dx+lnormy*ball.dy;
	var lstartx;
	var lstarty;
        if(dotproduct>0) {
            lnormx = -lnormx;
            lnormy = -lnormy;
	}
        if(considerRadius) {
            // Make a parallel line
            lstartx = l.x1+lnormx*ball.radius;
            lstarty = l.y1+lnormy*ball.radius;
	}
        else {
            lstartx = l.x1;
            lstarty = l.y1;
	}

        var res = lineIntersection(ball.x,ball.y,ball.dx,ball.dy,
				   lstartx,lstarty,lxv,lyv);
        var i = res[0];
	var j = res[1];
        if(i>=0 && i<=1 && j>=0 && j<=1) {
            if(i<lowi) {
                lowi = i;
                hitline = l;
	    }
	}
    }
    if(hitline != null) {
	// Ok, now we can figure out the angle wrt the surface normal...
        lxv = hitline.x2 - hitline.x1;
        lyv = hitline.y2 - hitline.y1;

        lnormx = -lyv;
        lnormy = lxv;
        normScale = Math.sqrt(lnormx*lnormx+lnormy*lnormy);
        lnormx = lnormx / normScale;
        lnormy = lnormy / normScale;
        dotproduct = lnormx*ball.dx+lnormy*ball.dy;
	// This time, we make the normal in the same direction as the ball vector
        if(dotproduct<0) {
	    lnormx = -lnormx;
	    lnormy = -lnormy;
	}
        var lenNormal = 1.0;
        var ballToIntersectX = lowi*ball.dx;
        var ballToIntersectY = lowi*ball.dy;
        var distToIntersect = Math.sqrt(ballToIntersectX*ballToIntersectX
                                    +ballToIntersectY*ballToIntersectY);
        ballToIntersectX /= distToIntersect;
        ballToIntersectY /= distToIntersect;
        var angle = Math.acos(ballToIntersectX*lnormx+ballToIntersectY*lnormy);
        console.log("Collision is at "+degrees(angle)+" degrees to surface normal");
        var normAngle = Math.atan2(lnormy,lnormx)+Math.PI;
        var incident = Math.atan2(ball.dy,ball.dx)+Math.PI;
        var angle =  incident - normAngle;
        var outangle = normAngle - angle;

        //if(poly.region.collide == False) {
        //    outangle = incident - Math.PI;
	//}
        collisions.push(new Collision(ball.x + lowi*ball.dx, ball.y+lowi*ball.dy, lowi, outangle,poly));
	console.log("Intersection with polygon "+poly.ident+" line "+hitline.ident);
    }
}

function checkClosestApproach(point: TaggedPoint, startx: number, starty: number, dx: number, dy: number)
{
    var normx = -dy;
    var normy = dx;
    var res = lineIntersection(startx,starty,dx,dy,
                             point.x1,point.y1,normx,normy);
    var i = res[0];
    var j = res[1];
    var dist = Math.abs(j*lineLen(normx,normy));
    return [dist,i];
}

function intersectVertices(points : Array<TaggedPoint>, collisions: Array<Collision>, ballx,bally,ballxv,ballyv, ballRadius,lastCollisionObjectID) : void
{
    for(var pointindex=0;pointindex<points.length;pointindex++) {
	var p : TaggedPoint = points[pointindex];
        if(p.ident == lastCollisionObjectID) continue;
        var res = checkClosestApproach(p,ballx,bally,ballxv,ballyv);

	var d = res[0];
	var i = res[1];
        if(d<ballRadius) {
            var diff = ballRadius - d;
            var dist = Math.sqrt(ballRadius*ballRadius-d*d);
            var iPoint : number = (lineLen(ballxv,ballyv)*i-dist)/lineLen(ballxv,ballyv); // Distance to intersect
            if(iPoint >=0 && iPoint <=1) {
                var ix : number = ballx+ballxv*iPoint;
                var iy : number = bally+ballyv*iPoint;
                var radiusAng = Math.atan2(iy-p.y1,ix-p.x1);
                var incident = Math.atan2(ballyv,ballxv)+Math.PI;
                var angle =  incident - radiusAng;
                console.log("Collides with ident "+p.ident+" Incident angle = "+degrees(incident));
                console.log("Surface normal angle = "+degrees(radiusAng));
                var outangle = radiusAng - angle;
                collisions.push(new Collision(ix,iy, iPoint, outangle, p.polygon))
	    }
	}
    }
}


text:
Microtune
Microtune's New Automotive TV Tuner Deployed in Delphi's Factory-Installed Car TV Entertainment Systems
Monday, March 23rd, 2009
INGOLSTADT, Germany & PLANO, Texas — Microtune®, Inc. (NASDAQ: TUNE) announced today that Delphi, one of the world's largest OEM automotive electronics systems suppliers, is deploying Microtune's new MT2067 tuner in the TV receiver system of its factory-installed front and rear seat entertainment systems targeted for Europe and Japan.
"We are pleased to be working with Delphi as it advances the in-vehicle market for premier digital TV entertainment," said James A. Fontaine, Microtune President and CEO. "We have enjoyed a long-term relationship with the company as an RF component supplier. Delphi adopted our new automotive TV tuner based not only on our past successful collaboration, but also because of our recognized position as the industry leader in TV tuner-chip electronics."
Last December Microtune introduced the MicroTuner™ MT2067, a first-of-its-kind analog/digital tuner chip developed specifically for in-car digital TV. Based on the Company's patented radio frequency (RF) silicon technology, the MT2067 is a world-standard, automotive-grade tuner engineered to provide superior, stable broadcast reception in fast-moving vehicles. At 7 x 7 millimeters, the miniature MT2067 tuner offers state-of-the-art chip technology for advanced automotive electronics systems, while also supporting global TV receiver platforms (NTSC, PAL, SECAM, DVB-T, DVB-H, ISDB-T, DTMB, ATSC and ATSC-M/H).
Silicon TV Tuners Value Expected to Reach US$ 750 Million in 2015
Zoran Demos DTV, Set-Top Box and Silicon Tuner Platforms at Computex 2011
CSR plc announces merger with Zoran Corporation
Zoran Corporation Reports Fourth Quarter and Full Year 2010 Results
Zoran Demonstrates New Connected, Full HD and 3D Solutions for DTVs, Set-Top Boxes, Digital Cameras and Printers at CES 2011
Worldwide Mobile TV Tuner Market Value to Exceed $400 Million by 2014

redpajama_set_name: RedPajamaCommonCrawl


Founded in 2004, Hot Mama was built around the theme of motherhood. Megan Tamte, founder + CEO, created an upscale boutique that is a fashion resource for moms by offering on-trend, contemporary apparel + accessories that fits a mom's lifestyle. Our team of buyers search the globe for clothing, jewelry + accessories that make women feel as beautiful as they look.
Just be a mom. We'll take care of the rest.


text:
Culture Enriches Everything: Fair Use and The Office Time Machine
By Parker Higgins
If you're looking for proof that new cultural works speak to and are embedded within a vast array of pre-existing works and ideas, you can't do much better than "The Office Time Machine," a new art project by video remix artist Joe Sabia. Over the course of the last 18 months, Sabia has isolated every pop culture and real world reference from the US television show "The Office," and arranged them by the date of the events, people, and media they reference. It's much more fun to look at than to read about, so feel free to check it out before reading on.
It's an impressive piece of technical work, and it will certainly be interesting for fans of the Office to see the incredible range of allusions embedded in the show—Sabia clipped out and identified over 1,300 from 9 seasons of the program. But it also makes an important point about copyright and culture, and is itself a perfect demonstration of how certain assumptions baked into our current law are out of line with reality.
This isn't Sabia's first time pushing the boundaries of those assumptions. He's got an impressive portfolio of video work, much of which relies heavily on the fair use doctrine, like this supercut of every cigarette smoked in the series Mad Men. But "The Office Time Machine" makes the point even more explicitly: the show is better for its ability to refer to and incorporate a common culture. As Sabia puts it on the project page:
Culture enriches everything. The Office is relatable (and hilarious) because it borrows so much from culture, and people get the references. Culture is society's collected knowledge, art, and customs. It's what surrounds us and unites us, and it allows us to collectively laugh at a joke in The Office about Ben Franklin or M. Night Shyamalan. Culture, simply put, is the seasoning in a meal.
That's a great point, and it's a valuable message for art to deliver.
But here's another message: to make this work, Sabia had to run a legal gauntlet—one that would discourage many artists. For one, to get the source videos in high quality, Sabia rented and ripped every episode of "The Office" on DVD. DVDs come with digital restrictions management software installed. Even if the intended use is a fair one, as in this case, the Digital Millennium Copyright Act (DMCA) prohibits circumventing that DRM.
There's a bit of a safety valve, fortunately: the Librarian of Congress is authorized to grant exemptions for appropriate purposes. EFF has been fighting to expand that safety valve for years, and one of the exemptions EFF successfully fought for in the last round was for ripping DVDs and online streams for non-commercial remixes, giving artists like Sabia some breathing room to engage in his work. We quoted Sabia in our testimony for the exemption, and cited his work with ACLU documenting the media narratives surrounding the War on Drugs.
The exemption puts Sabia in the clear, but highlights an issue with the rulemaking process: if the exemptions must be reviewed from scratch every three years, it can be dangerous to take on a long project like "The Office Time Machine," which took 18 months to create.
Then, once the artist has gotten the materials together, they can face lots of fear, uncertainty, and doubt about whether their use can be considered fair. There are plenty of examples where fair use is abundantly clear, and courts can find fair use even when the new work is commercial, or copies the entire original, or enables people to make their own copies.
Taking portions of a work and rearranging them for a totally transformative purpose is a classic fair use, but courts have sometimes imposed additional limits. In one such example, a court in the Harry Potter Lexicon case sided mostly with author J. K. Rowling against a publisher selling a fan encyclopedia incorporating text from the book.
Finally, while "The Office Time Machine" will hopefully stay up and available for a long time to come, there's the risk that an algorithmic copyright cop like YouTube's ContentID will remove or flag the videos that make it up. Even if the law is on Sabia's side, an automated match could force him to go through the site's appeal process just to keep the video up. Video artist Jonathan McIntosh faced that situation last year when a fair use remix of Buffy the Vampire Slayer and the Twilight movie series was flagged by Lionsgate Pictures.
EFF is working on making it easier and safer for people like Sabia to make and share works like "The Office Time Machine." As lawmakers and the public continue to review copyright law, we should aspire to a policy that would foster works like this—not inhibit them.


text:
The Legislative Council (LegCo) was the legislature of the Solomon Islands between 1960 and 1970.

History
The Legislative Council was created following the proclamation of the British Solomon Islands (Constitution) Order-in-Council, 1960 on 18 October 1960. It created a Council with 21 members, eleven of which were government officials and ten were nominees, of which six had to be Solomon Islanders.

Its first meeting was held in 1961 in Honiara Teachers' College Assembly Hall. In 1964 a new constitution was produced, introducing eight elected members to an enlarged 25-member Council alongside two nominees. However, only one of the eight members were directly-elected, with elections taking place in the Honiara constituency resulting in Eric Lawson becoming the first elected member. The other seven members were elected by electoral colleges formed by local councils, with three elected in Malaita District, two in Central District, and one from each of the Eastern and Western districts.

An Order-in-Council made by the Privy Council on 23 December 1966 increased the number of members to 29 and the number of elected members to 14 (although the Eastern Outer Islands constituency continued to use an electoral college), alongside fifteen government officials (the High Commissioner had the right to appoint two members, but did not). Elections were held the following year.

The Council was abolished when a new constitution was promulgated on 10 April, combining it with the Executive Council to form the Governing Council.

Constituencies

References

1960 establishments in the Solomon Islands
1970 disestablishments in the Solomon Islands
Defunct unicameral legislatures

redpajama_set_name: RedPajamaWikipedia


Intense laser-matter interactions can generate picosecond-bursts of the largest terrestrial magnetic fields, nearly a billion times that of the earth. Besides serving as an indispensable diagnostic in unraveling laser-matter interaction, these magnetic fields have far-reaching implications including laser-mediated nuclear fusion and the simulation of astrophysical scenarios in the laboratory.
The interaction of an ultra-short high intensity laser pulse with solids results in a hot dense plasma, which is an excellent source of bright short-lived hard x-rays and energetic particles. A quasi-static charge-separation sheath electric field is generated by the collective displacement of a large number of laser generated hot electrons. The ions get accelerated, according to their charge-to-mass ratio, in such fields until charge neutrality is restored. Thus, the laser driven ion acceleration mechanism is a secondary process determined by the hot electron dynamics. Typically, in the laser-plasma based ion accelerator, the sheath electric field is of the order of TV/m.
Accelerating neutral atoms, contrary to laser-based as well as conventional particle accelerators, is a formidable feat, given the inert, �neutral� response of these atoms to accelerating fields. Our recent studies provide a crucial breakthrough in the generation of accelerated neutral atoms, with energies as large as an MeV, as a result of the interaction of intense lasers with nanoclusters.
Illumination with an intense laser can metamorphose a plethora of material forms, ranging from nanostructures to liquid micro-droplets and even bacterial cells, into the brightest sources of hard x-rays, with numerous applications in imaging and microscopy as well as novel techniques in lithography.
The highly non-linear regime of intense laser-plasma interactions offers a most promising platform to investigate non-equilibrium scenarios, turbulence mechanisms and plasma instabilities, the evolution of which can be monitored on a femtosecond timescale.


"Just get in the car, Alice. I'll explain on the way."
So how is it that the Philippines – a developing country with its share of geographical and economical problems – manages to be leaping to the front of the pack when it comes to bitcoin?
Some western entrepreneurs now regularly visit the country to check out the cryptocurrency scene's progress, including Nick Sullivan from Silicon Valley-based ChangeTip.
Richard Branson's commercial space company, Virgin Galactic, will accept Bitcoin in exchange for a ride into space. Yeehaw!!!


text:
No indications of potential gang violence at 75th Sturgis
JAMES NORDAssociated Press
FILE - In this Aug. 1, 2014 file photo, the city streets of Sturgis are lined with motorcycles days before the official kickoff of the annual Sturgis Motorcycle Rally in Sturgis, S.D. Preparations are under way for the landmark 75th anniversary rally beginning Monday, Aug. 3, 2015, where organizers are planning for up to one million people. (AP Photo/Toby Brusseau, File)
FILE - In this Aug. 4, 2014 file photo, bikers ride past the city's welcome sign in Sturgis, S.D., during opening day of the annual Sturgis Motorcycle Rally. Preparations are under way for the landmark 75th anniversary rally beginning Monday, Aug. 3, 2015, where organizers are planning for up to one million people. (AP Photo/Toby Brusseau, File)
STURGIS, S.D. -- Never-before-seen crowds are expected to ride into the craggy, evergreen-dotted Black Hills of western South Dakota this week, all headed to the 75th Sturgis Motorcycle Rally.
The rally is famous for bawdy behavior, with police busting hundreds each year for drunken driving and drugs, but authorities and bikers alike say there's no indication there will be violence like that seen this spring among outlaw clubs in Waco, Texas, where a shootout left nine people dead and twice as many injured.
Several law enforcement agencies with a presence at Sturgis said they haven't received intelligence from officials nationwide that outlaw motorcycle gangs are planning violence as an extension of the Waco shootings. And a former Hells Angels chapter leader said it's likely the gangs will work to stay low key because of the attention on the Texas incident.
"There's a lot of information out about Waco, (but) not a lot of information that any of it's going to spill over into Sturgis," said Dan Satterlee, an assistant director at the South Dakota Division of Criminal Investigation. "But, like all our operations ... not just related to outlaw motorcycle gangs, we are heavily invested with personnel and resources in this Sturgis rally."
The rally officially kicks off Monday, capping years of planning among state and local agencies for the landmark event, which reportedly began as a race that attracted a handful of people in the late 1930s.
Attendance guesses for this year's rally exceed 1 million people -- a huge jump from the estimated 442,000 people who flooded the town of roughly 6,900 last year. But Sturgis police Chief Jim Bush said he hasn't changed his security and policing plan much since 1995.
Gangs will likely try to avoid violence at Sturgis this year because of the public attention Waco received, said Pat Matter, who was president of the Minneapolis chapter of the Hells Angels until he went to prison in 2003.
Nine people were killed and 18 injured in the May 17 shootout involving bikers and police at a restaurant that authorities say arose from an apparent confrontation between the Cossacks and Bandidos.
"With everything that's going on in Waco and just all the stuff with the clubs, for their own preservation, they're going to want to try to keep this mellowed out and not have a problem ...
"(Sturgis) wasn't the typical place we was going to solve our problems at," Matter said.
Law enforcement would likely know about planned violence at Sturgis because biker gangs frequently have members "on the hook" to police who provide information, according to Steve Cook, executive director of the Midwest Outlaw Motorcycle Gang Investigators Association.
Biker gang violence can be localized and spurred by turf wars, but it's also unpredictable, state DCI Director Bryan Gortmaker and other law enforcement officials said. In 2006, two men affiliated with the Hells Angels shot and wounded five people connected to the Outlaws Motorcycle Club in Custer State Park, about 70 miles from the rally. In 1990, a Sons of Silence gang member shot an Outlaws member in a bar brawl in Sturgis and two Sons of Silence members were stabbed.
On a recent morning, Randy White and JR Miller sat in lawn chairs under a tarp at the Sturgis Swap Meet, where there's an open view of the street. They said bikers typically get pulled over for small infractions -- "Tail lights, loud pipes," Miller explained.
"Most people are just up here to have fun and get away from their jobs for a week," White said. "If you're looking for trouble, I guess you can find trouble, but I think it's going to be minimal."
Just weeks after Waco, roughly 300,000 people attended New Hampshire's Laconia Motorcycle Week. Authorities also had no specific indication from intelligence reports that there would be spillover violence, and the rally was quiet, Laconia police Chief Chris Adams said.
Bill Moelter, a Sturgis lifer, said he loves the rally because it's a chance to meet new people and have old friends visit. Perched on a Yamaha Virago in his driveway, the 43-year-old said he anticipates there will be routine violence, but he said police will be able to stamp it out quickly.
"We haven't locked our doors in 10 years," Moelter said.


One of my favorite times of day to take photos is at night. I love capturing long-exposure photography of the Milkyway galaxy, northern lights, moonlight and stars over landscapes while occasionally incorporating a person into the images. The following is a collection of some of my favorite night photography images shot over Iceland, Oregon, Italy, California, Canada and Arizona.


Post subject: Games like BattleDawn.
Don't get me wrong, BattleDawn is a great game.
I just want to see games with similar interface- where ranking high is the no. 1 goal and the server resets and PM function is enabled.
The genre doesn't matter to me.
Post subject: Re: Games like BattleDawn.
Why should I? If you would have found a better game, you wouldn't still be here, right?
Iv been playign Battle Dawn since 2007 for a reason.
No doubt, Battledawn is a very unique game.
baz where were you all these days?


The doTERRA Aroma Touch Technique is a relaxing session where doTERRA brand essential oils are placed along energy meridians and visceral contact points of the back and feet to help stimulate and balance sympathetic and para-sympathetic nervous systems of the body. Aroma Touch Therapy improves well being by reducing physical and emotional stressors and by supporting healthy autonomic function.
The AromaTouch technique improves well-being by reducing physical and emotional stressors and by supporting healthy autonomic function. The technique is simple and intuitive and uses doTERRAs Certified Pure Therapeutic Grade essential oils for an unparalleled relaxing experience.
The AromaTouch Technique includes four primary steps using 8 essential oils designed to minimize systemic stressors to autonomic balance. Each step includes the application of two essential oils or essential oil blends specifically formulated to support healthy emotional and physiological functions for wellbeing.


International candidates for admission must complete and file all the required application documents listed below.
Admission will be granted as space allows if the materials indicate satisfactory preparation for academic work at the university.
Provide original or certified true copies of all high school (secondary school) and any university (post-secondary) grade reports as well as any national standardized test results. If the transcripts are not issued in English, transcripts in the original language and English translations by an official, certified translator must both be sent. Complete academic transcripts uploaded by the student's high school via the common application will be considered as certified true copies.
Submit a 650-word essay on a topic of your choice.
Letters may be from school guidance counselors, teachers, or administrators who know you and are able to speak about your qualifications and readiness for study at Saint Mary's.


Elayne and Martyn Arnold purchased a home in Arizona in 2005. Three years later the economy crashed and they were in deep financial problems.
In 2011, feeling exhausted and discouraged, Elayne thought, Why not give the bank the house and buy an RV?
Martyn was a computer consultant who worked remotely, and she did transcription work from home, so they could easily pack everything up and hit the road and keep their jobs.
That was the beginning of their new stress free life.
The change didn't happen overnight. The couple had to sell all their possessions and go through the foreclosure process with the bank. Once everything was sold and signed, they bought an old model RV trailer and moved in!
Suddenly, all the stress that had been bringing us down started to lift. It was a huge relief to know we weren't shackled to the house anymore and didn't owe the bank anything.
The feeling of freedom was even better than they imagined. The Arnolds are now in northern Arizona, and plan to go back to Spring Valley, Arizona in the summer to visit their old friends. They spend their days hiking and meeting new people, and also get to sit outside while they work on their laptops.
They will be exploring the Tucson area soon, and come next summer plan to go on a road trip to Oregon to visit their daughter. After that they will follow the falling leaves and head to New Jersey to see Martyn's parents.
Our current lifestyle fulfills us more than our former one ever could. I read a quote by Jim Collins which stated that our "undisciplined pursuit of more" is and will be the undoing of our age. I guess we have disciplined ourselves to be content with less and couldn't be happier.
What do you think of a life on the road? Would you have the courage to let go of your possessions and live an unshackled life?


One can say of this master that he created a genre: the "parisianism"…he is, in effect, the painter of Paris par excellence ; no different aspects of the city, often momentary and fleeting, and none of his successive transformations, is of any secret to him. The vigor of his colors, as well as in the brilliance of his mornings and of his afternoon sun, such as the mists of his twilights, is of a correct observation, that still enhances the conscientious study of the environment.
The artistic period of the latter half of the nineteenth-century in France was one of modernity and contemporaneity – its most salient representation found in the paintings and graphic arts of the period around the Belle Époque (1890-1900), and continuing in well into the twentieth-century. Toward the end of the century, France's dramatic industrial, technological, and economic changes brought about significant transformations to the social environment, and writers and artists from Charles Baudelaire and Emile Zola, to painters such as Luigi Loir and Jean Béraud, recognized the importance in representing the modern-day scene. But the differences between these two artists, and the characteristic of Loir, was the distinguishing attention he gave to the environment. It was Béraud who "paints the Parisians of Paris," but Loir who "paints the Paris of the Parisians." (C.-E. Curinier, Dictionnaire Nationale des Contemporains, Vol. II, Paris: Office l'Édition, 1899, pg. 300) Loir was the "landscape artist of Paris," (Album Mariani), an artist of his times, admitting an interest in depicting the everyday street scene of contemporary Paris while simultaneously promoting the acceptance of advertising as an art form. His work typified the interests of this period in the closing decade of the nineteenth-century when artists found inspiration in the commercialized and glamorous urban environment, while nevertheless seeking out its dichotomies as well.
Luigi Aloys-Francois-Joseph Loir was born on January 22nd, 1845 in Gorritz, Austria. Luigi's parents were of French origins, but his family lived in Austria as employees of the French royal family, the Bourbons – his father was a valet while his mother was a governess. In his catalogue raisonnée on Luigi Loir, Noé Willer explains how "since the French Revolution, Gorritz (which was known as 'the Austrian Nice') was a refuge for royalists and particularly the Bourbon branch of the family." (Luigi Loir, 1845-1916 : Peintre de la Belle Époque a la Publicité, Vol. 1, Carmel : Classic Art Gallery, 2004, pg. 9) The earliest years of Luigi's life, then, were spent in the Gorritz castle, but shortly after his birth, the Loir family relocated, along with the Bourbon family, to the Duchy of Parma, around 1847. In 1860, Luigi's family, including his sister, returned to France after the Bourbon family was forced out of Parma. Luigi remained in Parma and began studying painting at the Academy of Arts. Three years later, his father fell sick and he moved to Paris to be with his ailing father and the rest of his family. It was his first experience in the city that would inspire his scenes for the rest of his career.
…understands the sites; he likes the twilights in them; he studies all of their aspects. His canvases give off the reflection of a faithful mirage, of a conscientious study of urban nature. There is a dilettantism of a stroller and the contemplation of a poet in him. One feels that all of his impressions are real and that he only paints them while under a spell.
His interest in the urban cityscape is perhaps more complex than a simple depiction of Paris and its inhabitants. Loir's sincere reflections on the changing effects of both the different times of day and the weather, show the aesthetic reflection put into his paintings. Mariani wrote that "Where his brush excels is in the rendering of the effects of the snow, the settings of the sun, and the banks and waves of the Seine." (Album Mariani) Loir's often impressionistically-executed works exhibit qualities of a dedicated study of the changing light effects on the environment, from the early afternoon to dusk, allowing him to focus his audience's attention on a source of light punctuating the otherwise cool colors of the canvas. His use of the most recognizable icons of the city nevertheless created a sense of nostalgia for these urban monuments.
Loir was an active Salon artist, debuting in 1865 with A Villers (At Villers). From this point on, he began regularly exposing scenes not only based on the Parisian cityscape, but other locales as well, including Puteaux, Bercy, Auteuil, and others. Indeed, at the time of his first Salon entry, Loir was not living immediately in Paris, but instead on the outskirts in Neuilly-sur-Seine. He received many awards for his entries (3rd class medal – 1879; 2nd class medal – 1886; Gold medal – 1889 Exposition Universelle in Paris) and his works were purchased by prestigious individuals and museums alike. In 1875, Jules Ferry purchased La Porte des Ternes (ENGLISH); in 1882, the St. Louis Museum of Art purchased Le Pont d'Austerlitz (The Austerlitz Bridge); in 1883, a Russian museum purchased Le Point-du-Jour a Auteuil (The Pont-du-Jour at Auteuil); in 1893 the State purchased Avant l'Embarquement (Before Embarking) for the Musée de Bar-le-Duc; among countless others purchased either by the French states or other museums spanning the continents. During his lifetime, his work was featured in many other museums such as in New York, the Musée d'Auxerre, the Musée de Nantes, and the Musée du Luxembourg in Paris.
Apart from his paintings, Loir was more publicly known for his hundreds of graphic designs for commercial advertisements, book and music illustrations, menus, and to complement this already impressive array of designs, he also designed theatrical decorations. Loir's use of the newly invented chromolithography technique allowed for large-scale, colored images to be widely disseminated. Loir was sufficiently recognized as a talented graphic artist, to the point where he was commissioned to design the official exhibition cover of the 1900 Exposition Universelle in Paris. This was also during the period in which the print established itself as a true art form in and of itself, despite its overtones of commercialism. Loir, alongside such other influential and well-known poster artists as the early Jules Chéret and the Art Nouveau poster artist Alphonse Mucha, revolutionized the art of the poster.
His awards were equally numerous, becoming part of the Office d'Académie in 1889 and a Chevalier de la Legion d'Honneur in 1898. He was also a member of the Société de Peintres-Lithographes, of the Société des Aquarellistes, and a member of the Jury of the Société des Artists Français and of the Société des Arts Décoratifs since 1899.
Loir remained active in painting and the graphic arts until the very end of his life. His last Salon entries were in 1914 when he exhibited Crepuscule (Twilight), Coin de Paris, Neige (Corner of Paris, Snow), Pres du Pont de l'Alma, Crépuscule (Near the Alma Bridge, Twilight), a watercolor, and A Boulogne-sur-Mer (At Boulogne-sur-Mer), a gouache. He died on February 9th, 1916 in Paris.
Luigi Loir embraced Baudelaire's call that artists represent the contemporary environment. His style suggested an interest in the Impressionist movement while his theme was similar to many Naturalist artists. Loir's influence can be seen in two very popular artists of the mid-twentieth-century: Antoine Blanchard and Édouard Cortes whose Parisian street scenes appear in striking relation to the art of Luigi Loir. Perhaps these two artists looked back upon Loir's art to find their own inspiration.
Paintings by Luigi Loir can now be found at the Musée des Beaux-Arts of Bordeaux (Aux Lilas), Rouen (La Crue de la Seine de Paris), (Mesnilmontant), and the Musée Crozatier in Le-Puy-en-Valey (La Seine en Décembre 1879).
The biographical details in this biography have been taken from Noé Willer's previously cited catalogue raisonnée on Luigi Loir, Luigi Loir, 1845-1916: Peintre de la Belle Époque a la Publicité, published in 2004 for the Classic Art Gallery in Carmel, California, in addition to C.-E. Curinier's Dictionnaire National des Contemporains, Vol. 2, Paris: Office General d'Éditions, 1899, pg. 300.


The first burn should always be a minimum of 2-3 hours in order to achieve a full melt pool, thus allowing many more future hours of a clean, even burn promoting less waste. Future burns should never be for more than 4 hours at a time. Please, never leave a burning candle unattended or within reach of children or pets.
By using a lead/metal free wick we have created a very clean burning candle.
Keep wick centered and trim to 1/4 inch prior to each burn.
Soy wax candles have an amazing fragrance holding capacity. Thus, allowing for a sensational scent throw whether the candle is lit or not.
Because of the pureness of our candles it is essential to keep them out of direct sunlight.Our candles contain no UV inhibitors, no chemical hardeners or glosses.
Slight variations in texture are normal in natural wax candles and assists in making each candle a one-of-a-kind. Soy wax is made from soybeans grown by farmers in the United States ~ We support our farming industry.
Soy wax is non-toxic and environmentally sensitive. It is water soluble for easy clean up. However, we do not advise putting soy wax down drains or septic systems.


3D Animation commissioned by the British inventor and world famous horologist, John C. Taylor to illustrate the story and workings of the world'd first pendulum clock, designed by Salomon Coster.
Together with my long time collaborator, Tony Lee, we painstakingly recreated a working 3D model, then set it against the historical backdrop of the time. Painstaking work. Tony did a fantastic job.
Taylor's studio build exact replicas of the clock, which you can buy here. [warning: not cheap].
Produced in Cinema 4d and After Effects.


text:
Science Page News
Home/Uncategorized/UN Warns We Have 10 Years to Save Earth's Biodiversity as Mass Extinction Caused by Human Takes Hold
UN Warns We Have 10 Years to Save Earth's Biodiversity as Mass Extinction Caused by Human Takes Hold
Web Desk 2 hours ago
A current global response is insufficient; Thus, 'Transformative changes' are needed to restore and protect nature. Opposition from vested interests can be overcome for public good since 1,000,000 species are threatened with extinction.
According to a United Nations agency, almost a third of the Earth will need to be protected by 2030 and pollution cut by half to save our remaining wildlife, as we enter the planet's sixth era of mass extinction.
Nature is declining globally at rates unprecedented in human history – and the rate of species extinctions is accelerating, with grave impacts on people around the world now likely. The health of ecosystems on which we and all other species depend is deteriorating more rapidly than ever. We are eroding the very foundations of our economies, livelihoods, food security, health, and quality of life worldwide.
It is not too late to make a difference, but only if we start now at every level from local to global. Through a transformative change, nature can still be conserved, restored, and used sustainably which is also the key to meeting most other global goals.
The UN Convention on Biological Diversity released a draft plan on Monday, which sets global goals to combat the ongoing biodiversity crisis in the coming decades.
Biodiversity and nature's contributions to people are our common heritage and humanity's most important life-supporting 'safety net.' But our safety net is stretched almost to breaking point. The diversity within species, between species and of ecosystems, as well as many fundamental contributions we derive from nature, are declining fast, although we still have the means to ensure a sustainable future for people and the planet.
The average abundance of native species in most major land-based habitats has fallen by at least 20%, mostly since 1900. More than 40% of amphibian species, almost 33% of reef-forming corals and more than a third of all marine mammals are threatened.
The convention had set similar targets in 2010, at a summit in Japan. But the world failed to meet most of those 2020 goals — and is now facing unprecedented extinction rates, threatened ecosystems, and severe consequences for human survival.
The picture is less clear for insect species, but available evidence supports a tentative estimate of 10% being threatened. At least 680 vertebrate species had been driven to extinction since the 16th century, and more than 9% of all domesticated breeds of mammals used for food and agriculture had become extinct by 2016, with at least 1,000 more breeds still threatened.
The given draft plans define 20 targets for the next decade, ranging from carbon emission reduction to food sustainability. The plan will be finalized and adopted in October at a biodiversity summit in Kunming, China.
Facebook Twitter StumbleUpon Reddit Share via Email Print
Broome in Western Australia faces flooding Due to Tropical Cyclone
NASA Video Shows Supernova Morphs And It's Shock Waves Reverse
Shocking – Photo Shows Caribbean Sea 'Choked To Death By Human Waste'
Bernie Sanders: Let's spend money on climate instead of weapons
NASA Chief: Nuclear Propulsion Could Be "Game-Changer"
Australia Fires: Largest "Megablaze" Finally Brought Under Control After Raging for 3 Months
Jeff Bezos Gets Slammed For His $690K Donation To Australia Fire Relief
Japanese Billionaire Yusaku Maezawa seeks 'Special Woman' For Moon Voyage
Astronomers say we might see a Binary Star Explosion in our lifetime
© Copyright 2020, All Rights Reserved. Proudly Hosted on A2 Hosting
M G on Why Everything in the Universe is Spinning
Forbes on Why Everything in the Universe is Spinning
Linda on Why Everything in the Universe is Spinning
shaak on Why Everything in the Universe is Spinning
Kishore Parashar on A Massive 1,100-Foot-Wide Asteroid Is On Course To Pass By Earth In A Decade


Individuals can contact us themselves or ask someone else to get in touch on their behalf.
A member of our team will support you in your own home or a place of your choice to find out what difficulties you are facing and together we will find a way forward.
We aim to support individuals to make informed choices and decisions about treatment and care.
We can find out what they need to know, attend medical appointments and find out what practical help is available locally.
We are here for anyone who is aged 50 or over who has been affected by cancer, either as a patient or family member, friend or carer.
We can help with those things individuals are worried about allowing them to focus on their health and well-being, particularly if they are feeling unwell and undergoing or recovering from cancer treatment.
"That word, cancer, has so much stigma attached to it...if you have someone there to hold your hand through it, who knows is, it allays so much of the fear and stress."
Sandwell Advocacy works throughout Sandwell helping anyone who finds it difficult to say and get what they want and need, by offering advocacy and supporting its development.


After a few hours reading the installation manual of SAP Mobile Platform 2.3, i need also the SAP Mobile Workspace and Mobile Business Object.
My question is, what do i need to install and make this environment ready to develop apps? Does someone have experience with this?
To install SMP 2.3, you need a runtime (SMP server) and Mobile SDK. in SMP Mobile SDK, you can see all agentry components.
If you are planning to develop SYLCO Agentry based app, then you can install those agentry components otherwise no need.
First install, SMP 2.3 Runtime on a machine (Could be your local machine as well) Have you got licenses from market place for the same? Otherwise you can start with 30 days trial version also.
Once you install, You can see SAP Mobile Platform Services running on your machine and SAP Control Center shortcut icon on your desktop along with other 2 shortcuts.
Then you can install SAP Mobile SDK on developer machine, here you will get Mobile Workspace where you can create your Mobile Business Objects (MBOs) designing and also can develop Hyrbid (HWC) based apps.
My question is what kind of apps you want to develop using SMP 2.3. Hybrid or Native based apps?
What kind of backend you want to use for your app development?
Thank you very much for the explanation and for sharing al the necessary information.
Does someone have experience with this issue? or what this mean? and after finishing the installation of the SDK, is eclipse tooling installed to?
Are you trying to install any SP of SMP mobile SDK directly? Which exact version of SMP 2.3 you have?


Breathe in the essence of the ancient countryside while pedaling on a leisurely bicycle ride through sleepy hillside villages and along endless fields of lavender. Enjoy delicious local cuisine and rich Chateauneuf-du-Pape wines.On this, our signature trip, we spend unforgettable days riding across the Rh�ne river valley, through multiple renowned wine regions, past shimmering groves of olive trees and over the lavender hills of the Luberon. Discover with us the natural riches of Provence where every few miles the landscape changes into ever more breathtaking views and where locally grown wines and freshly grown foods grace every table. Through it all we explore and we enjoy, savoring how time has slowed down as we are immersed in the wonders of Provence.


text:
Gassed!
October 4, 2017 Circulating Now Collections, Rare Books & Journals, The Great War One comment
By Susan Speaker ~
Cover of Defensive Measures Against Gas Attacks, 1917
World War I is notable for the size of the armies involved, the huge number of casualties, and the vast amount of national resources consumed. Unlike previous conflicts, it was carried out largely in trenches, and introduced motorized ground transport and aircraft to military operations; it also employed scientific medicine that controlled infectious diseases so that, for the first time, more soldiers died in combat than from camp illnesses. But one of the more remarkable aspects of the Great War was the large-scale application of science to military operations, both offensive and defensive, particularly to produce poison gases. Germany, then the world leader in scientific research and in chemical production, pioneered the development of chemical warfare.
On April 22, 1915, and again two days later, at Ypres, German forces introduced Allied troops to a terrible new weapon: chlorine gas, released from pressurized canisters into a wind that carried it into the Allied trenches and beyond. Caught entirely by surprise, and with no protection from the asphyxiating gas, some 5,000 died, and over 10,000 were injured. The Allies quickly determined that the gas was chlorine and began developing gas masks to protect against it. For the duration of the war the combatants would engage in a chemical arms race. Both sides recruited hundreds of chemists, engineers, and physiologists to serve in special military gas warfare services. These experts worked intensively to discover new toxic gases and delivery systems, and to develop defensive equipment, procedures, and medical treatments.
"The extensive use of poisonous gases was one of the most important developments of the World War; no innovation since the introduction of gunpowder has revolutionized warfare to such an extent."
—The Medical Department of the U. S. Army in the World War, Vol. XIV, Medical Aspects of Gas Warfare,1926, p. 25.
By September 1915, the British were able to launch their first chlorine gas attack against German forces. A more potent gas, phosgene, made its debut in December 1915, and for the next 18 months, chlorine and phosgene, together with several different tear gases, were used extensively. "Cloud" attacks, in which the gas was released from canisters, were superseded by artillery shells loaded with gas, starting in 1916. With the shells, armies could target attacks with little regard for the weather, and use a wider range of toxic chemicals.
Titlepage
Introduction Page of Defensive Measures Against Gas Attacks
Pages 8 and 9 of Defensive Measures Against Gas Attacks
Pages 20 and 21 of Defensive Measures Against Gas Attacks
"King of the battle gases"
The chemical weapons race was at a stalemate by spring of 1917, because improved gas mask technology kept troops safe from the asphyxiating chlorine and phosgene gases; casualties occurred only when they were caught off guard and exposed before they got masks on. German researchers broke the impasse that year with something new and different: dichloroethylsulfide, also called "mustard gas" (for its odor), "Yperite" (for the first place it was used), or "Yellow Cross" (for the marking on the shells.) It wasn't actually a gas, but a volatilized oily liquid that could penetrate clothing and leather, and persist on buildings, equipment, and the ground for days. And within a few hours, it would produce incapacitating burns on any skin surface it touched, particularly the eyes and respiratory tract. The German army used mustard gas for the first time in July 1917, shelling Allied forces in the Ypres area repeatedly from July 12th to August 1st. As with the first chlorine gas attacks in 1915, the Allies were caught by surprise. The mustard gas (unlike chlorine) had no immediate irritating effect except to cause sneezing. Several hours later, however, many of the troops had developed painful blistering, including such severe eye inflammation that they were virtually blind and had to be led around by their comrades. (Lines of temporarily blinded soldiers outside the medical stations would become a common sight, captured in photographs and in John Singer Sargent's well-known painting Gassed, 1919.) During those first weeks, over 14,000 cases of gas poisoning arrived at the British casualty clearing stations, and about 500 of them died.
Gas masks could protect the eyes and lungs from mustard gas, but everyone exposed to it had to get out of contaminated clothing, which had to be isolated and washed, and, then, ideally, wash with hot water, as well.
De-gassing Station in The medical department of the United States Army in the world war (Volume 14), 1926
Mustard Gas Burn (Contact) of Neck in The medical department of the United States Army in the world war (Volume 14), 1926
Mustard gas exposure was a challenge for medical officers at several levels. Because "mustard" could remain active for days, medical staff had to get the clothing off wounded soldiers quickly without getting the stuff on themselves. Mustard gas burns took much longer to heal than ordinary chemical or physical burns, prolonging the soldiers' time on sick leave, and increasing the chances of wound infection.
And mustard gas didn't just dissipate with the wind, either—it settled on the ground, coated tents and equipment and structures. If weather was warmer, it would evaporate and the vapors would still be toxic. In cooler weather, it would persist on the ground for weeks. Troops had to decontaminate everything, usually using chloride of lime or other neutralizing agents. And it was hard to see, and difficult to smell (the mustardy odor is faint) so there was a real danger of soldiers tracking it around and exposing others to it. [See instructions for clearing mustard gas in "Defensive measures against gas attacks" in the gallery above] Thus, although mustard gas didn't penetrate gas masks to any degree, it was an incredibly effective means of hampering enemy operations. It could inflict substantial long-term casualties, and complicated medical officers' triage work. And it required many hours of clean-up and decontamination, along with extra supplies, including uniforms.
Page 61 of Defensive Measures Against Gas Attacks
Several dozen chemical agents were developed as weapons between 1914 and 1918. Some, like chlorine and phosgene, were asphyxiants, which caused massive edema in the lungs and obstructed breathing. Many others were "lachrymators" (tear gas) or caused sneezing or vomiting. Vesicants such as mustard gas (and lewisite, developed by the U. S. late in the war) inflicted blistering burns. Chlorine, phosgene, and mustard were used most extensively, and sometimes mixed together for added effect. Over the course of the war, chemical weapons accounted for about 1,300,000 casualties, including 91,000 deaths. This was only about 5% of the war's total casualties.
Chemical weapons were developed and used in the Great War despite several international agreements (in 1899 and 1907) that poisons would not be used in war. The Geneva Protocol, prohibiting the use of both chemical and biological weapons, was signed in 1925 and took effect in 1928. Nevertheless, most countries continued to develop, manufacture, and stockpile chemical weapons; expecting that some nation would fail to honor the agreement, they wanted to be prepared.
Through 2018, Circulating Now will periodically publish posts featuring NLM collections that illuminate the medical history of The Great War, which lasted from August 1914 to November 1918.
Susan Speaker, PhD, is Historian for the Digital Manuscripts Program of the History of Medicine Division at the National Library of Medicine.
animalschemical weaponsgas warfaremilitarywarfareWorld War I
Previous Post: Revealing Data: London's Deadly Visitation
Next Post: Treatise of Artificial Waters
Pingback: Weekly Postings | The MARquee


text:
Needle Drop: FerrariLover,
"Endless Seconds" »
Graded on a Curve: Cadillac Baby's Bea & Baby Records: The Definitive Collection
As evidenced by the threads he's sporting in the cover photo above, Narvel Eatmon, better known as Cadillac Baby, was a colorful character. Having made the trip from Mississippi to Chicago, by the 1950s he was a smooth operator who ran his own club; by decade's end he was trying his hand at releasing records. Commercially, the results were modestly successful at best, but the contents of the 4CD + 128pg hardback book Cadillac Baby's Bea & Baby Records: The Definitive Collection documents a layer of the Windy City's blues experience that ran alongside the dominant sound of Chess and fortifies the years between Cobra Records and the Delmark label. It's out August 16 through Earwig Music Company.
Some of the names included in this set are obscure, but there is a high number of contributors who will be immediately familiar to blues fans; right off the bat, or more accurately immediately after the opening track "Welcome to Cadillac Baby's Show Lounge," which comes from Bea & Baby's sole LP, 1971's Colossal Blues (marketed as a live recording but obviously concocted from studio-originated songs and "club atmosphere"), there's Eddie Boyd, he of 1951 R&B chart #1 "Five Long Years."
Across the four discs, he's followed by such notables as Earl Hooker, Hound Dog Taylor (making his recording debut), James Cotton, Sunnyland Slim, Homesick James, and in contrast to the prevailing currents of electricity, the acoustic folk-blues styling of Sleepy John Estes and Hammie Nixon, the duo offered up via four cuts, all previously unreleased.
And to clarify, Bea & Baby wasn't strictly about the blues. There are dips into R&B, courtesy of the sprightly pop-tinged gal group action of The Chances, deep smooth crooner Phil Sampson, and the late Andre Williams even making an appearance, though the doo-wop-tinged work of the Daylighters is a bit more prevalent through their own stuff and overdubbed onto a revamped Eddie Boyd single in hopes of increased market appeal. But 11 Year Old Faith Evans & the Sweet Teens, with their symphonic heart tug A-side backed with up-tempo doo-wop nugget nearly steal the non-blues show.
There's also some solid organ groove via Tall Paul Hawkins & the Hudson Brothers, a couple raw (but not "blue") stabs at comedy from Clyde Lasley, a few Christmas tunes (Lasley also figures in "Santa Came Home Drunk"), two cuts from noted eccentric T. Valentine ("Little Lu-Lu Frog" is like Frogman Henry fronting The Champs), a big helping of early '60s gospel harmony rounding out disc four, and even a previously unissued '80s single by Chicago rapper 3D (real name Richard Davenport), his mildly Slick Rick-like tracks an aged Cadillac Baby's final stab at releasing a record.
But Earwig's mission here is as much an illumination of Eatmon's life as it is the recordings he ushered into the annals of the blues (and R&B). Along with photos and the perspective of the set's producer Michael Robert Frank, (who was a longtime associate of Cadillac Baby including producing 3D's two songs), there is a reprint of an article from the autumn 1971 issue (No. 6) of Living Blues magazine that put Eatmon's life in the spotlight, beginning with Mississippi origins and wrapping up with selling candy and soda to Chicago residents at the time of the piece's original publication.
The Living Blues text is essentially a transcription of a tape recording of Cadillac Baby telling his life story that was made by Jim O'Neal, who provides the historical liner notes to this collection. That tape and later autobiographical recordings of Eatmon have survived and are interspersed throughout the four CDs to further amplify a personality that was larger-than-life but once in danger of being forgotten.
Succinctly, Narvel "Cadillac Baby" Eatmon carried the attitude of a hustler while operating as a legit businessman (his lounge even had a float in a parade that occurred yearly in Chicago from 1950-'60) and a family man (Bea is the nickname of his wife Bertha). One of The Definitive Collection's strongpoints is that it humanizes but doesn't idolize the man; his self-promotion-sheer braggadocio isn't soft-pedaled (if anything, it's put under a magnifying glass in the midday sun), and there are a handful of negative statements from musicians.
Some of the music here was previously issued by European labels (like Red Lightnin'), but the majority has been out of print for a long time on either side of the Atlantic, or unreleased, which transforms this roundup by Earwig into a trove of worthy material. And I'll note that while there isn't an abundance of groundbreaking and mind-blowing selections here, the 101 tracks still accumulate substantial heft, a circumstance that can be attributed in part to those running Bea & Baby, but is certainly just as much due to the baseline professionalism of the musicians.
This is to be expected with guys like Boyd, Sunnyland Slim and Cotton, though it's also true of the debut 45 by Detroit Junior, "Money Tree" b/w "So Unhappy" and Bobby Saxton's "Trying to Make a Living," which was one side of a split single with Earl Hooker's "Dynamite." Detroit Junior went on to amass a fairly extensive discography while, with the exception of a duet with Minnie Thomas for the Mark IV label in '62, Saxton's track for Bea & Baby was his only recording.
What they share was eventual national distribution by Chess; neither became a chart hit, though they are amongst Bea & Baby's biggest commercial successes. However, the label's biggest overall achievement is in how it maintained a fairly high level of quality across its lifespan (to be accurate, in the '70s-'80s the operations were intermittent).
If there is little broken ground or few fried synapses, there are numerous enlightening entries for blues lovers, none more so than the Hound Dog Taylor tracks. Like on his Chess stuff, he's nowhere as fried as later with the Houserockers, but the cuts surely do drive home just deeply Elmore James impacted him. Elsewhere, L.C. McKinley's two numbers sound like they could've came from the vaults of Imperial (or maybe even Specialty), and the 1970 recordings by Willie Williams are vibrant and robust with the help of guitarist Eddie Taylor, harp-man Carey Bell, and pianist Sunnyland Slim.
Like the aforementioned professionalism, there are a plenty of expected turns, like Earl Hooker's track being a groover. But the expected never falters into the humdrum. Lovers of the blues will find the exquisitely designed Cadillac Baby's Bea & Baby Records: The Definitive Collection to be an experience rife with the familiar, but through flair and passion, interesting throughout.


One week ago, small businesses were expecting lower lending rates, courtesy of another Reserve Bank rate cut. Now, they're being slapped with interest rate rises – on top of SME rates that were already well above those charged for mortgage holders or big business.
There are expectations that Commonwealth Bank and National Australia Bank will raise small business and mortgage rates this week, citing higher costs of funding and sluggish domestic demand.
This follows decisions by ANZ and Westpac on Friday to lift their small business loans and variable home loans by 0.06 and 0.1 percentage points respectively.
The rate rises prompted Assistant Treasurer Mark Arbib to note that banks' net interest margins have returned to pre-global financial crisis levels and Treasurer Wayne Swan to call on borrowers to look at alternative lenders.
But small business faces a double whammy: not only is it more cumbersome for it to switch lenders, but its rates are much higher than loans for mortgages and big business.
Recently released Reserve Bank figures show that the big banks' average rates were 8.25% on small business, compared with 6.59% on mortgages and 6.7% for big business. Similarly, margins charged to small business above the cash rate have soared to 6% from 3.45% before the global financial crisis.
Peter Strong, executive director of the Council of Small Business of Australia, says the rate rises from ANZ and Westpac will dint confidence among small business, because they will feel they can't predict the direction of rates.
"They'll wonder if it is worth getting a loan, because you're not sure what it's going to be anymore," Strong says.
This uncertainty is compounded by the widening gap between mortgage lending and small business lending.
Strong says about five years ago the difference was as low as 50 basis points, but it has since soared to 150 basis points or more.
"The banks say it's about the rules on holding more money on reserve for small business loans. APRA and the RBA need to look at that," he says.
Strong says COSBOA is planning to hold a round-table to discuss finance to small business. The forum is expected to be held over the next month or so, with guests including the banks, the Australian Bankers Association, the prudential regulator, the Australian Securities and Investments Commission, the Reserve Bank and finance experts.
He says the forum is designed to discuss how small business finance is working now, and what can be improved.
"We've asked for better information, because we're all in a vacuum when it comes to how many loans have been applied for, how many have been rejected and why," Strong says.


Hello, mom. Today I would like to talk to you about the effects of pregnancy on your brain. My presence will permanently alter your way of thinking and feeling. I will start from the very beginning, so that you understand: from the moment that you and I first come together.
The first thing that happens is that a hormone called progesterone starts to flood through your body, mom. Your breasts get sensitive, but your brain will relax. At the beginning you will notice that you often feel sleepy, and need to rest and eat more than usual.
I'm the reason for those hormones, which stimulate the places in your brain that are responsible for thirst and hunger. Let's just say that I need to eat! This means you will have to produce a greater volume of blood to make sure I get all the nutrients I need.
Don't worry, it's normal that your water bottle is always in your hand, and that you don't want to go very far from the bathroom. It's probably the same reason why your brain has cravings for certain foods, or you feel disgusted by certain smells.
Since you don't want to eat anything that might harm me, many things will disgust you. Sometimes you will even feel nauseous. Don't be concerned, this is just what the first trimester is like. These changes are normal effects of pregnancy.
You should know that your progesterone level increases tenfold between the second and fourth month of pregnancy, and that its effects are just as potent as an anti-anxiety drug such as Valium. Just think, your brain is flooded with a sedative. So relax – I just want you to protect us both from stress.
From the fourth month of pregnancy, more or less, your brain will have become used to the hormonal changes. It is likely that you can eat normally now, and might feel a little more anxious.
The conscious and subconscious parts of your brain will be focused on what is happening in your womb, my home. It's great in here, mom, your belly is a cozy place. I like to listen to your heartbeats and feel your warmth.
But don't get too comfortable, mom! I want you to know that I am here. So from the fifth month onwards, you'll likely start to experience what feels like bubbles of gas in your abdomen. You might think it's just the typical gas that we can get after a meal, but it isn't.
Your brain already knows this means I am moving. You will start to be aware of my presence. Your brain has changed and enhanced your sense of smell; it has made you hungrier, thirstier. Do you know why? Because of love.
You are already getting to know me. You feel my little kicks, you know when I am moving around. I bet you can't wait to hold me and look at me. Dad and the other people around you will probably want to look out for my movements, too, and listen to my heartbeat through your belly.
The increase in estrogen levels helps us to combat stress hormones while I am inside you, mom. Did you know that both my body and the placenta that protects me produce so much cortisol (a stress hormone), that by the end of the pregnancy your body will be full of it, just as if you had been doing exhausting physical exercise.
However, these hormones will not make you feel stressed, or at least, not in the typical way. What they really do is help you be aware of what you are eating, whether you are in a safe place and if everything around you is all right.
They help you to focus on yourself and on me, and on caring for both of us. The size and structure of your brain can also change. Your brain may shrink a little during the final six months of pregnancy and until birth.
Mom, I shrunk your brain! But don't worry about it, that will go back to normal too. It's just working on turning backroads into three lane highways. That is to say, you won't be losing abilities, but gaining new ones. And before I come out into the world, your brain will be back to its normal size.
As my birth approaches, you will start to worry a lot about me. You are probably wondering how we can get through the big moment awaiting us, and hoping we will both come out safe and sound.
So, you will be on high alert. You will waddle like a duck, drawing on your last little bit of strength. I will be born when I'm ready, mom. Don't expect me to stick to your schedule.
When your water breaks, your brain will flood with oxytocin, making your uterus contract. Your levels of progesterone (that hormone that once sedated us) will drop. The oxytocin and dopamine coursing through your system will create new neuronal connections in your brain.
And then, I will be out and you will meet me for the first time. You will be so exhausted that your vision might be blurry, but your brain will be all ready to love me. As soon as you smell me, feel me and look at me, you will be able to tell me apart from any other baby with astounding accuracy.
Your strength and your will to take care of me will be rooted in your brain forever. You will feel that you could stop a moving truck with your body to protect me. Nothing will stop us now.
You will probably develop greater spatial memory. One of the effects of pregnancy is that you will become more flexible, more efficient and braver – now and for the rest of your life. Your brain has prepared you to love me and keep me by your side.
This is it, mom, this is forever. I hope that now you understand how it is that we love one another so much. It seems like magic, right? Isn't it wonderful that we can grow together and make each other better and better?
I may not have the words to express it right now, but I will show it with hugs, kisses and a lot of love… after all, I learnt that from the best!
Bed Rest During Pregnancy: When Is It Recommended?
What Are the Causes of Postpartum Pre-eclampsia?
What Do Babies Feel During Childbirth?


Discover on-sale women's Women's Wedges from Castaner and similar brands at Shopbop.
Shop new Edgy styles like Castaner Bluma Crisscross Wedges that have just landed from this season's collection. Discover our wide selection of designer dresses, jackets, jeans, tops, shoes and more in our shopping section.


Next Article Is America's House Divided Again?
The so called rights of a few who seek unnatural sexual relations–and they are free to do so, I might add–are attempting to trample on the rights of marriage, family, and children and to silence those that look to Scripture as the guide to living a holy life.
I am sick to death of this agenda imposing its immorality on society. So there.