text:
/*
 * @(#)MimeBodyPart.java	1.63 06/03/02
 *
 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved.
 */

package javax.mail.internet;

import javax.mail.*;
import javax.activation.*;
import java.io.*;
import java.util.*;
import com.sun.mail.util.ASCIIUtility;
import com.sun.mail.util.LineOutputStream;

/**
 * This class represents a MIME body part. It implements the
 * BodyPart abstract class and the MimePart
 * interface. MimeBodyParts are contained in MimeMultipart
 * objects.

 *
 * MimeBodyPart uses the InternetHeaders class to parse
 * and store the headers of that body part.

 *
 *
A note on RFC 822 and MIME headers

 *
 * RFC 822 header fields must contain only
 * US-ASCII characters. MIME allows non ASCII characters to be present
 * in certain portions of certain headers, by encoding those characters.
 * RFC 2047 specifies the rules for doing this. The MimeUtility
 * class provided in this package can be used to to achieve this.
 * Callers of the setHeader, addHeader, and
 * addHeaderLine methods are responsible for enforcing
 * the MIME requirements for the specified headers.  In addition, these
 * header fields must be folded (wrapped) before being sent if they
 * exceed the line length limitation for the transport (1000 bytes for
 * SMTP).  Received headers may have been folded.  The application is
 * responsible for folding and unfolding headers as appropriate.

 *
 * @author John Mani
 * @author Bill Shannon
 * @author Kanwar Oberoi
 * @see javax.mail.Part
 * @see javax.mail.internet.MimePart
 * @see javax.mail.internet.MimeUtility
 */

public class MimeBodyPart extends BodyPart implements MimePart {

    // Paranoia:
    // allow this last minute change to be disabled if it causes problems
    private static boolean setDefaultTextCharset = true;

    private static boolean setContentTypeFileName = true;

    private static boolean encodeFileName = false;
    private static boolean decodeFileName = false;

    // Paranoia:
    // allow this last minute change to be disabled if it causes problems
    static boolean cacheMultipart = true;	// accessed by MimeMessage

    static {
	try {
	    String s = System.getProperty("mail.mime.setdefaulttextcharset");
	    // default to true
	    setDefaultTextCharset = s == null || !s.equalsIgnoreCase("false");

	    s = System.getProperty("mail.mime.setcontenttypefilename");
	    // default to true
	    setContentTypeFileName = s == null || !s.equalsIgnoreCase("false");

	    s = System.getProperty("mail.mime.encodefilename");
	    // default to false
	    encodeFileName = s != null && !s.equalsIgnoreCase("false");

	    s = System.getProperty("mail.mime.decodefilename");
	    // default to false
	    decodeFileName = s != null && !s.equalsIgnoreCase("false");

	    s = System.getProperty("mail.mime.cachemultipart");
	    // default to true
	    cacheMultipart = s == null || !s.equalsIgnoreCase("false");
	} catch (SecurityException sex) {
	    // ignore it
	}
    }

    /**
     * The DataHandler object representing this Part's content.
     */
    protected DataHandler dh;

    /**
     * Byte array that holds the bytes of the content of this Part.
     */
    protected byte[] content;

    /**
     * If the data for this body part was supplied by an
     * InputStream that implements the SharedInputStream interface,
     * contentStream is another such stream representing
     * the content of this body part.  In this case, content
     * will be null.
     *
     * @since	JavaMail 1.2
     */
    protected InputStream contentStream;

    /**
     * The InternetHeaders object that stores all the headers
     * of this body part.
     */
    protected InternetHeaders headers;

    /**
     * An empty MimeBodyPart object is created.
     * This body part maybe filled in by a client constructing a multipart
     * message.
     */
    public MimeBodyPart() {
	super();
	headers = new InternetHeaders();
    }

    /**
     * Constructs a MimeBodyPart by reading and parsing the data from
     * the specified input stream. The parser consumes data till the end
     * of the given input stream.  The input stream must start at the
     * beginning of a valid MIME body part and must terminate at the end
     * of that body part.

     *
     * Note that the "boundary" string that delimits body parts must
     * not be included in the input stream. The intention
     * is that the MimeMultipart parser will extract each body part's bytes
     * from a multipart stream and feed them into this constructor, without
     * the delimiter strings.
     *
     * @param	is	the body part Input Stream
     */
    public MimeBodyPart(InputStream is) throws MessagingException {
	if (!(is instanceof ByteArrayInputStream) &&
	    !(is instanceof BufferedInputStream) &&
	    !(is instanceof SharedInputStream))
	    is = new BufferedInputStream(is);

	headers = new InternetHeaders(is);

	if (is instanceof SharedInputStream) {
	    SharedInputStream sis = (SharedInputStream)is;
	    contentStream = sis.newStream(sis.getPosition(), -1);
	} else {
	    try {
		content = ASCIIUtility.getBytes(is);
	    } catch (IOException ioex) {
		throw new MessagingException("Error reading input stream", ioex);
	    }
	}

    }

    /**
     * Constructs a MimeBodyPart using the given header and
     * content bytes.

     *
     * Used by providers.
     *
     * @param	headers	The header of this part
     * @param	content	bytes representing the body of this part.
     */
    public MimeBodyPart(InternetHeaders headers, byte[] content)
			throws MessagingException {
	super();
	this.headers = headers;
	this.content = content;
    }

    /**
     * Return the size of the content of this body part in bytes.
     * Return -1 if the size cannot be determined.

     *
     * Note that this number may not be an exact measure of the
     * content size and may or may not account for any transfer
     * encoding of the content.

     *
     * This implementation returns the size of the content
     * array (if not null), or, if contentStream is not
     * null, and the available method returns a positive
     * number, it returns that number as the size.  Otherwise, it returns
     * -1.
     *
     * @return size in bytes, or -1 if not known
     */
    public int getSize() throws MessagingException {
	if (content != null)
	    return content.length;
	if (contentStream != null) {
	    try {
		int size = contentStream.available();
		// only believe the size if it's greate than zero, since zero
		// is the default returned by the InputStream class itself
		if (size > 0)
		    return size;
	    } catch (IOException ex) {
		// ignore it
	    }
	}
	return -1;
    }

    /**
     * Return the number of lines for the content of this Part.
     * Return -1 if this number cannot be determined.

     *
     * Note that this number may not be an exact measure of the
     * content length and may or may not account for any transfer
     * encoding of the content.

     *
     * This implementation returns -1.
     *
     * @return number of lines, or -1 if not known
     */
     public int getLineCount() throws MessagingException {
	return -1;
     }

    /**
     * Returns the value of the RFC 822 "Content-Type" header field.
     * This represents the content type of the content of this
     * body part. This value must not be null. If this field is
     * unavailable, "text/plain" should be returned.

     *
     * This implementation uses getHeader(name)
     * to obtain the requisite header field.
     *
     * @return	Content-Type of this body part
     */
    public String getContentType() throws MessagingException {
	String s = getHeader("Content-Type", null);
	if (s == null)
	    s = "text/plain";

	return s;
    }

    /**
     * Is this Part of the specified MIME type?  This method
     * compares only the primaryType and
     * subType.
     * The parameters of the content types are ignored.

     *
     * For example, this method will return true when
     * comparing a Part of content type "text/plain"
     * with "text/plain; charset=foobar".

     *
     * If the subType of mimeType is the
     * special character '*', then the subtype is ignored during the
     * comparison.
     */
    public boolean isMimeType(String mimeType) throws MessagingException {
	return isMimeType(this, mimeType);
    }

    /**
     * Returns the value of the "Content-Disposition" header field.
     * This represents the disposition of this part. The disposition
     * describes how the part should be presented to the user.

     *
     * If the Content-Disposition field is unavailable,
     * null is returned.

     *
     * This implementation uses getHeader(name)
     * to obtain the requisite header field.
     *
     * @see #headers
     */
    public String getDisposition() throws MessagingException {
	return getDisposition(this);
    }

    /**
     * Set the "Content-Disposition" header field of this body part.
     * If the disposition is null, any existing "Content-Disposition"
     * header field is removed.
     *
     * @exception	IllegalWriteException if the underlying
     *			implementation does not support modification
     * @exception	IllegalStateException if this body part is
     *			obtained from a READ_ONLY folder.
     */
    public void setDisposition(String disposition) throws MessagingException {
	setDisposition(this, disposition);
    }

    /**
     * Returns the content transfer encoding from the
     * "Content-Transfer-Encoding" header
     * field. Returns null if the header is unavailable
     * or its value is absent.

     *
     * This implementation uses getHeader(name)
     * to obtain the requisite header field.
     *
     * @see #headers
     */
    public String getEncoding() throws MessagingException {
	return getEncoding(this);
    }

    /**
     * Returns the value of the "Content-ID" header field. Returns
     * null if the field is unavailable or its value is
     * absent.

     *
     * This implementation uses getHeader(name)
     * to obtain the requisite header field.
     */
    public String getContentID() throws MessagingException {
	return getHeader("Content-Id", null);
    }

    /**
     * Set the "Content-ID" header field of this body part.
     * If the cid parameter is null, any existing
     * "Content-ID" is removed.
     *
     * @exception	IllegalWriteException if the underlying
     *			implementation does not support modification
     * @exception	IllegalStateException if this body part is
     *			obtained from a READ_ONLY folder.
     * @exception	MessagingException
     * @since		JavaMail 1.3
     */
    public void setContentID(String cid) throws MessagingException {
	if (cid == null)
	    removeHeader("Content-ID");
	else
	    setHeader("Content-ID", cid);
    }

    /**
     * Return the value of the "Content-MD5" header field. Returns
     * null if this field is unavailable or its value
     * is absent.

     *
     * This implementation uses getHeader(name)
     * to obtain the requisite header field.
     */
    public String getContentMD5() throws MessagingException {
	return getHeader("Content-MD5", null);
    }

    /**
     * Set the "Content-MD5" header field of this body part.
     *
     * @exception	IllegalWriteException if the underlying
     *			implementation does not support modification
     * @exception	IllegalStateException if this body part is
     *			obtained from a READ_ONLY folder.
     */
    public void setContentMD5(String md5) throws MessagingException {
	setHeader("Content-MD5", md5);
    }

    /**
     * Get the languages specified in the Content-Language header
     * of this MimePart. The Content-Language header is defined by
     * RFC 1766. Returns null if this header is not
     * available or its value is absent.

     *
     * This implementation uses getHeader(name)
     * to obtain the requisite header field.
     */
    public String[] getContentLanguage() throws MessagingException {
	return getContentLanguage(this);
    }

    /**
     * Set the Content-Language header of this MimePart. The
     * Content-Language header is defined by RFC 1766.
     *
     * @param languages 	array of language tags
     */
    public void setContentLanguage(String[] languages)
			throws MessagingException {
	setContentLanguage(this, languages);
    }

    /**
     * Returns the "Content-Description" header field of this body part.
     * This typically associates some descriptive information with
     * this part. Returns null if this field is unavailable or its
     * value is absent.

     *
     * If the Content-Description field is encoded as per RFC 2047,
     * it is decoded and converted into Unicode. If the decoding or
     * conversion fails, the raw data is returned as is.

     *
     * This implementation uses getHeader(name)
     * to obtain the requisite header field.
     *
     * @return	content description
     */
    public String getDescription() throws MessagingException {
	return getDescription(this);
    }

    /**
     * Set the "Content-Description" header field for this body part.
     * If the description parameter is null, then any
     * existing "Content-Description" fields are removed.

     *
     * If the description contains non US-ASCII characters, it will
     * be encoded using the platform's default charset. If the
     * description contains only US-ASCII characters, no encoding
     * is done and it is used as is.

     *
     * Note that if the charset encoding process fails, a
     * MessagingException is thrown, and an UnsupportedEncodingException
     * is included in the chain of nested exceptions within the
     * MessagingException.
     *
     * @param description content description
     * @exception	IllegalWriteException if the underlying
     *			implementation does not support modification
     * @exception	IllegalStateException if this body part is
     *			obtained from a READ_ONLY folder.
     * @exception       MessagingException otherwise; an
     *                  UnsupportedEncodingException may be included
     *                  in the exception chain if the charset
     *                  conversion fails.
     */
    public void setDescription(String description) throws MessagingException {
	setDescription(description, null);
    }

    /**
     * Set the "Content-Description" header field for this body part.
     * If the description parameter is null, then any
     * existing "Content-Description" fields are removed.

     *
     * If the description contains non US-ASCII characters, it will
     * be encoded using the specified charset. If the description
     * contains only US-ASCII characters, no encoding  is done and
     * it is used as is.

     *
     * Note that if the charset encoding process fails, a
     * MessagingException is thrown, and an UnsupportedEncodingException
     * is included in the chain of nested exceptions within the
     * MessagingException.
     *
     * @param	description	Description
     * @param	charset		Charset for encoding
     * @exception	IllegalWriteException if the underlying
     *			implementation does not support modification
     * @exception	IllegalStateException if this body part is
     *			obtained from a READ_ONLY folder.
     * @exception       MessagingException otherwise; an
     *                  UnsupportedEncodingException may be included
     *                  in the exception chain if the charset
     *                  conversion fails.
     */
    public void setDescription(String description, String charset)
		throws MessagingException {
	setDescription(this, description, charset);
    }

    /**
     * Get the filename associated with this body part.

     *
     * Returns the value of the "filename" parameter from the
     * "Content-Disposition" header field of this body part. If its
     * not available, returns the value of the "name" parameter from
     * the "Content-Type" header field of this body part.
     * Returns null if both are absent.

     *
     * If the mail.mime.encodefilename System property
     * is set to true, the {@link MimeUtility#decodeText
     * MimeUtility.decodeText} method will be used to decode the
     * filename.  While such encoding is not supported by the MIME
     * spec, many mailers use this technique to support non-ASCII
     * characters in filenames.  The default value of this property
     * is false.
     *
     * @return	filename
     */
    public String getFileName() throws MessagingException {
	return getFileName(this);
    }

    /**
     * Set the filename associated with this body part, if possible.

     *
     * Sets the "filename" parameter of the "Content-Disposition"
     * header field of this body part.  For compatibility with older
     * mailers, the "name" parameter of the "Content-Type" header is
     * also set.

     *
     * If the mail.mime.encodefilename System property
     * is set to true, the {@link MimeUtility#encodeText
     * MimeUtility.encodeText} method will be used to encode the
     * filename.  While such encoding is not supported by the MIME
     * spec, many mailers use this technique to support non-ASCII
     * characters in filenames.  The default value of this property
     * is false.
     *
     * @exception	IllegalWriteException if the underlying
     *			implementation does not support modification
     * @exception	IllegalStateException if this body part is
     *			obtained from a READ_ONLY folder.
     */
    public void setFileName(String filename) throws MessagingException {
	setFileName(this, filename);
    }

    /**
     * Return a decoded input stream for this body part's "content".

     *
     * This implementation obtains the input stream from the DataHandler.
     * That is, it invokes getDataHandler().getInputStream();
     *
     * @return 		an InputStream
     * @exception	MessagingException
     * @exception       IOException this is typically thrown by the
     *			DataHandler. Refer to the documentation for
     *			javax.activation.DataHandler for more details.
     *
     * @see	#getContentStream
     * @see 	javax.activation.DataHandler#getInputStream
     */
    public InputStream getInputStream()
		throws IOException, MessagingException {
	return getDataHandler().getInputStream();
    }

   /**
     * Produce the raw bytes of the content. This method is used
     * when creating a DataHandler object for the content. Subclasses
     * that can provide a separate input stream for just the Part
     * content might want to override this method.

     *
     * @see #content
     * @see MimeMessage#getContentStream
     */
    protected InputStream getContentStream() throws MessagingException {
	if (contentStream != null)
	    return ((SharedInputStream)contentStream).newStream(0, -1);
	if (content != null)
	    return new ByteArrayInputStream(content);

	throw new MessagingException("No content");
    }

    /**
     * Return an InputStream to the raw data with any Content-Transfer-Encoding
     * intact.  This method is useful if the "Content-Transfer-Encoding"
     * header is incorrect or corrupt, which would prevent the
     * getInputStream method or getContent method
     * from returning the correct data.  In such a case the application may
     * use this method and attempt to decode the raw data itself.

     *
     * This implementation simply calls the getContentStream
     * method.
     *
     * @see	#getInputStream
     * @see	#getContentStream
     * @since	JavaMail 1.2
     */
    public InputStream getRawInputStream() throws MessagingException {
	return getContentStream();
    }

    /**
     * Return a DataHandler for this body part's content.

     *
     * The implementation provided here works just like the
     * the implementation in MimeMessage.
     * @see	MimeMessage#getDataHandler
     */
    public DataHandler getDataHandler() throws MessagingException {
	if (dh == null)
	    dh = new DataHandler(new MimePartDataSource(this));
	return dh;
    }

    /**
     * Return the content as a java object. The type of the object
     * returned is of course dependent on the content itself. For
     * example, the native format of a text/plain content is usually
     * a String object. The native format for a "multipart"
     * content is always a Multipart subclass. For content types that are
     * unknown to the DataHandler system, an input stream is returned
     * as the content.

     *
     * This implementation obtains the content from the DataHandler.
     * That is, it invokes getDataHandler().getContent();
     * If the content is a Multipart or Message object and was created by
     * parsing a stream, the object is cached and returned in subsequent
     * calls so that modifications to the content will not be lost.
     *
     * @return          Object
     * @exception       MessagingException
     * @exception       IOException this is typically thrown by the
     *			DataHandler. Refer to the documentation for
     *			javax.activation.DataHandler for more details.
     */
    public Object getContent() throws IOException, MessagingException {
	Object c = getDataHandler().getContent();
	if (cacheMultipart &&
		(c instanceof Multipart || c instanceof Message) &&
		!(dh instanceof CachedDataHandler) &&
		(content != null || contentStream != null)) {
	    dh = createCachedDataHandler(c, getContentType());
	}
	return c;
    }

    /**
     * This method provides the mechanism to set this body part's content.
     * The given DataHandler object should wrap the actual content.
     *
     * @param   dh      The DataHandler for the content
     * @exception       IllegalWriteException if the underlying
     * 			implementation does not support modification
     * @exception	IllegalStateException if this body part is
     *			obtained from a READ_ONLY folder.
     */
    public void setDataHandler(DataHandler dh)
		throws MessagingException {
	this.dh = dh;
	MimeBodyPart.invalidateContentHeaders(this);
    }

    /**
     * A convenience method for setting this body part's content.

     *
     * The content is wrapped in a DataHandler object. Note that a
     * DataContentHandler class for the specified type should be
     * available to the JavaMail implementation for this to work right.
     * That is, to do setContent(foobar, "application/x-foobar"),
     * a DataContentHandler for "application/x-foobar" should be installed.
     * Refer to the Java Activation Framework for more information.
     *
     * @param	o	the content object
     * @param	type	Mime type of the object
     * @exception       IllegalWriteException if the underlying
     *			implementation does not support modification of
     *			existing values
     * @exception	IllegalStateException if this body part is
     *			obtained from a READ_ONLY folder.
     */
    public void setContent(Object o, String type)
		throws MessagingException {
	if (o instanceof Multipart) {
	    setContent((Multipart)o);
	} else {
	    setDataHandler(new DataHandler(o, type));
	}
    }

    /**
     * Convenience method that sets the given String as this
     * part's content, with a MIME type of "text/plain". If the
     * string contains non US-ASCII characters, it will be encoded
     * using the platform's default charset. The charset is also
     * used to set the "charset" parameter.

     *
     * Note that there may be a performance penalty if
     * text is large, since this method may have
     * to scan all the characters to determine what charset to
     * use.

     *
     * If the charset is already known, use the
     * setText method that takes the charset parameter.
     *
     * @param	text	the text content to set
     * @exception	MessagingException	if an error occurs
     * @see	#setText(String text, String charset)
     */
    public void setText(String text) throws MessagingException {
	setText(text, null);
    }

    /**
     * Convenience method that sets the given String as this part's
     * content, with a MIME type of "text/plain" and the specified
     * charset. The given Unicode string will be charset-encoded
     * using the specified charset. The charset is also used to set
     * the "charset" parameter.
     *
     * @param	text	the text content to set
     * @param	charset	the charset to use for the text
     * @exception	MessagingException	if an error occurs
     */
    public void setText(String text, String charset)
			throws MessagingException {
	setText(this, text, charset, "plain");
    }

    /**
     * Convenience method that sets the given String as this part's
     * content, with a primary MIME type of "text" and the specified
     * MIME subtype.  The given Unicode string will be charset-encoded
     * using the specified charset. The charset is also used to set
     * the "charset" parameter.
     *
     * @param	text	the text content to set
     * @param	charset	the charset to use for the text
     * @param	subtype	the MIME subtype to use (e.g., "html")
     * @exception	MessagingException	if an error occurs
     * @since	JavaMail 1.4
     */
    public void setText(String text, String charset, String subtype)
                        throws MessagingException {
	setText(this, text, charset, subtype);
    }

    /**
     * This method sets the body part's content to a Multipart object.
     *
     * @param  mp      	The multipart object that is the Message's content
     * @exception       IllegalWriteException if the underlying
     *			implementation does not support modification of
     *			existing values.
     * @exception	IllegalStateException if this body part is
     *			obtained from a READ_ONLY folder.
     */
    public void setContent(Multipart mp) throws MessagingException {
	setDataHandler(new DataHandler(mp, mp.getContentType()));
	mp.setParent(this);
    }

    /**
     * Use the specified file to provide the data for this part.
     * The simple file name is used as the file name for this
     * part and the data in the file is used as the data for this
     * part.  The encoding will be chosen appropriately for the
     * file data.
     *
     * @param		file		the File object to attach
     * @exception	IOException	errors related to accessing the file
     * @exception	MessagingException	message related errors
     * @since		JavaMail 1.4
     */
    public void attachFile(File file) throws IOException, MessagingException {
    	FileDataSource fds = new FileDataSource(file);
        this.setDataHandler(new DataHandler(fds));
        this.setFileName(fds.getName());
    }

    /**
     * Use the specified file to provide the data for this part.
     * The simple file name is used as the file name for this
     * part and the data in the file is used as the data for this
     * part.  The encoding will be chosen appropriately for the
     * file data.
     *
     * @param		file		the name of the file to attach
     * @exception	IOException	errors related to accessing the file
     * @exception	MessagingException	message related errors
     * @since		JavaMail 1.4
     */
    public void attachFile(String file) throws IOException, MessagingException {
    	File f = new File(file);
    	attachFile(f);
    }

    /**
     * Save the contents of this part in the specified file.  The content
     * is decoded and saved, without any of the MIME headers.
     *
     * @param		file		the File object to write to
     * @exception	IOException	errors related to accessing the file
     * @exception	MessagingException	message related errors
     * @since		JavaMail 1.4
     */
    public void saveFile(File file) throws IOException, MessagingException {
    	OutputStream out =
    		new BufferedOutputStream(new FileOutputStream(file));
        InputStream in = this.getInputStream();
        try {
	    byte[] buf = new byte[8192];
	    int len;
	    while ((len = in.read(buf)) > 0)
		out.write(buf, 0, len);
        } finally {
	    // close streams, but don't mask original exception, if any
	    try {
		if (in != null)
		    in.close();
	    } catch (IOException ex) { }
	    try {
		if (out != null)
		    out.close();
	    } catch (IOException ex) { }
        }
    }

    /**
     * Save the contents of this part in the specified file.  The content
     * is decoded and saved, without any of the MIME headers.
     *
     * @param		file		the name of the file to write to
     * @exception	IOException	errors related to accessing the file
     * @exception	MessagingException	message related errors
     * @since		JavaMail 1.4
     */
    public void saveFile(String file) throws IOException, MessagingException {
    	File f = new File(file);
    	saveFile(f);
    }

    /**
     * Output the body part as an RFC 822 format stream.
     *
     * @exception MessagingException
     * @exception IOException	if an error occurs writing to the
     *				stream or if an error is generated
     *				by the javax.activation layer.
     * @see javax.activation.DataHandler#writeTo
     */
    public void writeTo(OutputStream os)
				throws IOException, MessagingException {
	writeTo(this, os, null);
    }

    /**
     * Get all the headers for this header_name. Note that certain
     * headers may be encoded as per RFC 2047 if they contain
     * non US-ASCII characters and these should be decoded.
     *
     * @param   name    name of header
     * @return  array of headers
     * @see     javax.mail.internet.MimeUtility
     */
    public String[] getHeader(String name) throws MessagingException {
	return headers.getHeader(name);
    }

    /**
     * Get all the headers for this header name, returned as a single
     * String, with headers separated by the delimiter. If the
     * delimiter is null, only the first header is
     * returned.
     *
     * @param name		the name of this header
     * @param delimiter		delimiter between fields in returned string
     * @return			the value fields for all headers with
     *				this name
     * @exception       	MessagingException
     */
    public String getHeader(String name, String delimiter)
				throws MessagingException {
	return headers.getHeader(name, delimiter);
    }

    /**
     * Set the value for this header_name. Replaces all existing
     * header values with this new value. Note that RFC 822 headers
     * must contain only US-ASCII characters, so a header that
     * contains non US-ASCII characters must be encoded as per the
     * rules of RFC 2047.
     *
     * @param   name    header name
     * @param   value   header value
     * @see     javax.mail.internet.MimeUtility
     */
    public void setHeader(String name, String value)
                                throws MessagingException {
	headers.setHeader(name, value);
    }

    /**
     * Add this value to the existing values for this header_name.
     * Note that RFC 822 headers must contain only US-ASCII
     * characters, so a header that contains non US-ASCII characters
     * must be encoded as per the rules of RFC 2047.
     *
     * @param   name    header name
     * @param   value   header value
     * @see     javax.mail.internet.MimeUtility
     */
    public void addHeader(String name, String value)
                                throws MessagingException {
	headers.addHeader(name, value);
    }

    /**
     * Remove all headers with this name.
     */
    public void removeHeader(String name) throws MessagingException {
	headers.removeHeader(name);
    }

    /**
     * Return all the headers from this Message as an Enumeration of
     * Header objects.
     */
    public Enumeration getAllHeaders() throws MessagingException {
	return headers.getAllHeaders();
    }

    /**
     * Return matching headers from this Message as an Enumeration of
     * Header objects.

     */
    public Enumeration getMatchingHeaders(String[] names)
                        throws MessagingException {
	return headers.getMatchingHeaders(names);
    }

    /**
     * Return non-matching headers from this Message as an
     * Enumeration of Header objects.
     */
    public Enumeration getNonMatchingHeaders(String[] names)
                        throws MessagingException {
	return headers.getNonMatchingHeaders(names);
    }

    /**
     * Add a header line to this body part
     */
    public void addHeaderLine(String line) throws MessagingException {
	headers.addHeaderLine(line);
    }

    /**
     * Get all header lines as an Enumeration of Strings. A Header
     * line is a raw RFC 822 header line, containing both the "name"
     * and "value" field.
     */
    public Enumeration getAllHeaderLines() throws MessagingException {
  	return headers.getAllHeaderLines();
    }

    /**
     * Get matching header lines as an Enumeration of Strings.
     * A Header line is a raw RFC 822 header line, containing both
     * the "name" and "value" field.
     */
    public Enumeration getMatchingHeaderLines(String[] names)
                                    throws MessagingException {
	return headers.getMatchingHeaderLines(names);
    }

    /**
     * Get non-matching header lines as an Enumeration of Strings.
     * A Header line is a raw RFC 822 header line, containing both
     * the "name"  and "value" field.
     */
    public Enumeration getNonMatchingHeaderLines(String[] names)
                                        throws MessagingException {
	return headers.getNonMatchingHeaderLines(names);
    }

    /**
     * Examine the content of this body part and update the appropriate
     * MIME headers.  Typical headers that get set here are
     * Content-Type and Content-Transfer-Encoding.
     * Headers might need to be updated in two cases:
     *
     *

     * - A message being crafted by a mail application will certainly
     * need to activate this method at some point to fill up its internal
     * headers.
     *
     *

     * - A message read in from a Store will have obtained
     * all its headers from the store, and so doesn't need this.
     * However, if this message is editable and if any edits have
     * been made to either the content or message structure, we might
     * need to resync our headers.
     *
     *

     * In both cases this method is typically called by the
     * Message.saveChanges method.
     */
    protected void updateHeaders() throws MessagingException {
	updateHeaders(this);
    }

    /////////////////////////////////////////////////////////////
    // Package private convenience methods to share code among //
    // MimeMessage and MimeBodyPart                            //
    /////////////////////////////////////////////////////////////

    static boolean isMimeType(MimePart part, String mimeType)
				throws MessagingException {
	// XXX - lots of room for optimization here!
	try {
	    ContentType ct = new ContentType(part.getContentType());
	    return ct.match(mimeType);
	} catch (ParseException ex) {
	    return part.getContentType().equalsIgnoreCase(mimeType);
	}
    }

    static void setText(MimePart part, String text, String charset,
			String subtype) throws MessagingException {
	if (charset == null) {
	    if (MimeUtility.checkAscii(text) != MimeUtility.ALL_ASCII)
		charset = MimeUtility.getDefaultMIMECharset();
	    else
		charset = "us-ascii";
	}
	// XXX - should at least ensure that subtype is an atom
	part.setContent(text, "text/" + subtype + "; charset=" +
			MimeUtility.quote(charset, HeaderTokenizer.MIME));
    }

    static String getDisposition(MimePart part) throws MessagingException {
	String s = part.getHeader("Content-Disposition", null);

	if (s == null)
	    return null;

	ContentDisposition cd = new ContentDisposition(s);
	return cd.getDisposition();
    }

    static void setDisposition(MimePart part, String disposition)
			throws MessagingException {
	if (disposition == null)
	    part.removeHeader("Content-Disposition");
	else {
	    String s = part.getHeader("Content-Disposition", null);
	    if (s != null) {
		/* A Content-Disposition header already exists ..
		 *
		 * Override disposition, but attempt to retain
		 * existing disposition parameters
		 */
		ContentDisposition cd = new ContentDisposition(s);
		cd.setDisposition(disposition);
		disposition = cd.toString();
	    }
	    part.setHeader("Content-Disposition", disposition);
	}
    }

    static String getDescription(MimePart part)
			throws MessagingException {
	String rawvalue = part.getHeader("Content-Description", null);

	if (rawvalue == null)
	    return null;

	try {
	    return MimeUtility.decodeText(MimeUtility.unfold(rawvalue));
	} catch (UnsupportedEncodingException ex) {
	    return rawvalue;
	}
    }

    static void
    setDescription(MimePart part, String description, String charset)
			throws MessagingException {
	if (description == null) {
	    part.removeHeader("Content-Description");
	    return;
	}

	try {
	    part.setHeader("Content-Description", MimeUtility.fold(21,
		MimeUtility.encodeText(description, charset, null)));
	} catch (UnsupportedEncodingException uex) {
	    throw new MessagingException("Encoding error", uex);
	}
    }

    static String getFileName(MimePart part) throws MessagingException {
	String filename = null;
	String s = part.getHeader("Content-Disposition", null);

	if (s != null) {
	    // Parse the header ..
	    ContentDisposition cd = new ContentDisposition(s);
	    filename = cd.getParameter("filename");
	}
	if (filename == null) {
	    // Still no filename ? Try the "name" ContentType parameter
	    s = part.getHeader("Content-Type", null);
	    if (s != null) {
		try {
		    ContentType ct = new ContentType(s);
		    filename = ct.getParameter("name");
		} catch (ParseException pex) { }	// ignore it
	    }
	}
	if (decodeFileName && filename != null) {
	    try {
		filename = MimeUtility.decodeText(filename);
	    } catch (UnsupportedEncodingException ex) {
		throw new MessagingException("Can't decode filename", ex);
	    }
	}
	return filename;
    }

    static void setFileName(MimePart part, String name)
		throws MessagingException {
	if (encodeFileName && name != null) {
	    try {
		name = MimeUtility.encodeText(name);
	    } catch (UnsupportedEncodingException ex) {
		throw new MessagingException("Can't encode filename", ex);
	    }
	}

	// Set the Content-Disposition "filename" parameter
	String s = part.getHeader("Content-Disposition", null);
	ContentDisposition cd =
		new ContentDisposition(s == null ? Part.ATTACHMENT : s);
	cd.setParameter("filename", name);
	part.setHeader("Content-Disposition", cd.toString());

	/*
	 * Also attempt to set the Content-Type "name" parameter,
	 * to satisfy ancient MUAs.  XXX - This is not RFC compliant.
	 */
	if (setContentTypeFileName) {
	    s = part.getHeader("Content-Type", null);
	    if (s != null) {
		try {
		    ContentType cType = new ContentType(s);
		    cType.setParameter("name", name);
		    part.setHeader("Content-Type", cType.toString());
		} catch (ParseException pex) { }	// ignore it
	    }
	}
    }

    static String[] getContentLanguage(MimePart part)
		throws MessagingException {
	String s = part.getHeader("Content-Language", null);

	if (s == null)
	    return null;

	// Tokenize the header to obtain the Language-tags (skip comments)
	HeaderTokenizer h = new HeaderTokenizer(s, HeaderTokenizer.MIME);
	Vector v = new Vector();

	HeaderTokenizer.Token tk;
	int tkType;

	while (true) {
	    tk = h.next(); // get a language-tag
	    tkType = tk.getType();
	    if (tkType == HeaderTokenizer.Token.EOF)
		break; // done
	    else if (tkType == HeaderTokenizer.Token.ATOM)
		v.addElement(tk.getValue());
	    else // invalid token, skip it.
		continue;
	}

	if (v.size() == 0)
	    return null;

	String[] language = new String[v.size()];
	v.copyInto(language);
	return language;
    }

    static void setContentLanguage(MimePart part, String[] languages)
			throws MessagingException {
	StringBuffer sb = new StringBuffer(languages[0]);
	for (int i = 1; i < languages.length; i++)
	    sb.append(',').append(languages[i]);
	part.setHeader("Content-Language", sb.toString());
    }

    static String getEncoding(MimePart part) throws MessagingException {
	String s = part.getHeader("Content-Transfer-Encoding", null);

	if (s == null)
	    return null;

	s = s.trim();	// get rid of trailing spaces
	// quick check for known values to avoid unnecessary use
	// of tokenizer.
	if (s.equalsIgnoreCase("7bit") || s.equalsIgnoreCase("8bit") ||
		s.equalsIgnoreCase("quoted-printable") ||
		s.equalsIgnoreCase("binary") ||
		s.equalsIgnoreCase("base64"))
	    return s;

	// Tokenize the header to obtain the encoding (skip comments)
	HeaderTokenizer h = new HeaderTokenizer(s, HeaderTokenizer.MIME);

	HeaderTokenizer.Token tk;
	int tkType;

	for (;;) {
	    tk = h.next(); // get a token
	    tkType = tk.getType();
	    if (tkType == HeaderTokenizer.Token.EOF)
		break; // done
	    else if (tkType == HeaderTokenizer.Token.ATOM)
		return tk.getValue();
	    else // invalid token, skip it.
		continue;
	}
	return s;
    }

    static void setEncoding(MimePart part, String encoding)
				throws MessagingException {
	part.setHeader("Content-Transfer-Encoding", encoding);
    }

    static DataHandler createCachedDataHandler(Object o, String mimeType) {
	return new CachedDataHandler(o, mimeType);
    }

    static void updateHeaders(MimePart part) throws MessagingException {
	DataHandler dh = part.getDataHandler();
	if (dh == null) // Huh ?
	    return;

	try {
	    String type = dh.getContentType();
	    boolean composite = false;
	    boolean needCTHeader = part.getHeader("Content-Type") == null;

	    ContentType cType = new ContentType(type);
	    if (cType.match("multipart/*")) {
		// If multipart, recurse
		composite = true;
		Object o = dh.getContent();
		if (o instanceof MimeMultipart)
		    ((MimeMultipart)o).updateHeaders();
		else
		    throw new MessagingException("MIME part of type \"" +
			type + "\" contains object of type " +
			o.getClass().getName() + " instead of MimeMultipart");
	    } else if (cType.match("message/rfc822")) {
		composite = true;
	    }

	    // Content-Transfer-Encoding, but only if we don't
	    // already have one
	    if (!composite) {	// not allowed on composite parts
		if (part.getHeader("Content-Transfer-Encoding") == null)
		    setEncoding(part, MimeUtility.getEncoding(dh));

		if (needCTHeader && setDefaultTextCharset &&
			cType.match("text/*") &&
			cType.getParameter("charset") == null) {
		    /*
		     * Set a default charset for text parts.
		     * We really should examine the data to determine
		     * whether or not it's all ASCII, but that's too
		     * expensive so we make an assumption:  If we
		     * chose 7bit encoding for this data, it's probably
		     * ASCII.  (MimeUtility.getEncoding will choose
		     * 7bit only in this case, but someone might've
		     * set the Content-Transfer-Encoding header manually.)
		     */
		    String charset;
		    String enc = part.getEncoding();
		    if (enc != null && enc.equalsIgnoreCase("7bit"))
			charset = "us-ascii";
		    else
			charset = MimeUtility.getDefaultMIMECharset();
		    cType.setParameter("charset", charset);
		    type = cType.toString();
		}
	    }

	    // Now, let's update our own headers ...

	    // Content-type, but only if we don't already have one
	    if (needCTHeader) {
		/*
		 * Pull out "filename" from Content-Disposition, and
		 * use that to set the "name" parameter. This is to
		 * satisfy older MUAs (DtMail, Roam and probably
		 * a bunch of others).
		 */
		String s = part.getHeader("Content-Disposition", null);
		if (s != null) {
		    // Parse the header ..
		    ContentDisposition cd = new ContentDisposition(s);
		    String filename = cd.getParameter("filename");
		    if (filename != null) {
			cType.setParameter("name", filename);
			type = cType.toString();
		    }
		}

		part.setHeader("Content-Type", type);
	    }
	} catch (IOException ex) {
	    throw new MessagingException("IOException updating headers", ex);
	}
    }

    static void invalidateContentHeaders(MimePart part)
					throws MessagingException {
	part.removeHeader("Content-Type");
	part.removeHeader("Content-Transfer-Encoding");
    }

    static void writeTo(MimePart part, OutputStream os, String[] ignoreList)
			throws IOException, MessagingException {

	// see if we already have a LOS
	LineOutputStream los = null;
	if (os instanceof LineOutputStream) {
	    los = (LineOutputStream) os;
	} else {
	    los = new LineOutputStream(os);
	}

	// First, write out the header
	Enumeration hdrLines = part.getNonMatchingHeaderLines(ignoreList);
	while (hdrLines.hasMoreElements())
	    los.writeln((String)hdrLines.nextElement());

	// The CRLF separator between header and content
	los.writeln();

	// Finally, the content. Encode if required.
	// XXX: May need to account for ESMTP ?
	os = MimeUtility.encode(os, part.getEncoding());
	part.getDataHandler().writeTo(os);
	os.flush(); // Needed to complete encoding
    }
}

/**
 * A package-private class that serves just as a "flag" that
 * we're using a special data handler to cache getContent data.
 */
class CachedDataHandler extends DataHandler {
    public CachedDataHandler(Object o, String mimeType) {
	super(o, mimeType);
    }
}


Cllr John Cribbin, Cathaoirleach, Mayo County Council concluded the year on a festive note when he presented prizes to the winners of the "Recycled Christmas Tree Decorations Competition 2009". Hundreds of children around the County participated in the Christmas Tree Decoration competition for primary school pupils, which aims to get children and their parents thinking about how to reuse and recycle materials that might otherwise be thrown away.
Ms. Mary Forde, Mayo Co. Co., Ms. Sharon Cameron, Env. Awareness Officer, Mayo Co. Co., Cllr. John Cribbin, Cathaoirleach of Mayo, Ms. Ceiligh Barrett – Corclough N.S., (winner), Lucy Barrett, Corclough N.S., Mr. Joe Beirne, County Manager, Mrs. Geraldine Barrett and Mr. Sean Barrett (parents). Photo Tom Campbell.
Entries included decorations made from beverage bottles and cartons, cardboard and more unusual materials such as old socks, CDs, light bulbs and deodorant roll-on balls.
Management and staff of Mayo County Council with the three County Winners of the Recycled Christmas Tree Decorations Competition 2009 at the Christmas Tree located in Aras an Chontae, Castlebar. Winning schools – Corclough N.S., Belmullet, Mayo Abbey N.S., Claremorris and Lankill N.S., Westport. Photo Tom Campbell.
"I am delighted with the imagination shown by the children in turning waste materials into beautiful decorations, this is the seventh year that Mayo County Council has run this competition and each year we see novel ideas and the most beautiful decorations" said Sharon Cameron, Environment Awareness Officer, Mayo County Council. Thirty schools throughout Mayo participated in the competition and one entry from each school was put forward to the Final. The entries were adjudicated by a panel from the Environment Section of Mayo County Council and the winning decorations hung on the Council's Christmas Tree in Aras an Chontae, Castlebar.
Ms. S. Cameron, Env. Awareness Officer, Mayo County Council, Mr. Seamus Granahan, Director of Services, Mayo County Council, Ms. Jessica Scahill, Mayo Abbey N.S., Cllr. John Cribbin, Cathaoirleach of Mayo, Ms. Niamh Mannion, Mayo Abbey N.S. (winner), Mrs. Madge Mannion (parent), Ms. Carmel Flynn, School Secretary, Mayo Abbey N.S., Mr. Joe Beirne, County Manager, Ms. Maura Murphy, Mayo Co. Co., Ms. Mary Forde, Mayo Co. Co. Photo Tom Campbell.
Ms. Ceiligh Barrett, Corclough N.S., Belmullet with "Santa in his Sleigh".
Ms. Rebecca Lydon, Lankill N.S., Westport with her "Frosty the Snowman".


The Indonesian presidential election on Wednesday will be a re-run of the 2014 poll, pitting the incumbent, Joko Widodo (also known as Jokowi), against the same candidate, former major-general Prabowo Subianto.
Various polls over the past few months have consistently shown Jokowi with a sizeable lead. The last survey from the Centre for Strategic and International Studies (CSIS), for example, shows Jokowi with a lead of 51.4% among likely voters, compared to just 33.3% for Prabowo. (The rest are undecided.) The latest poll this week from Indo Barometer, meanwhile, gives Jokowi an even wider lead – 59.9% to 40.1%.
With a total of nearly 200 million registered voters expected to cast ballots at some 800,000 polling stations across the country, the election is a massive undertaking. Making things even more complex this year is the fact that legislative elections are being held at the same time as the presidential election, with some 250,000 candidates running for more than 20,000 legislative seats. However, the legislative elections have not received the same level of domestic or international attention as the contest between Jokowi and his old adversary, Prabowo.
Jokowi has spent the past few months highlighting his achievements since entering office in 2014, especially with infrastructure development and the streamlining of bureaucracy for businesses and the general public. Prabowo, on the other hand, has tried to chip away at Jokowi's lead with a fiery brand of nationalism and promises of change (for example, the halting the importation of food and fuel, lowering prices for staples and reducing inequality) without offering any details on how to achieve them.
Prabowo's leadership abilities are also unclear – he's never held elected office.
Even though Jokowi has a big lead in the polls, he has nonetheless faced questions about his religious credentials and specifically whether he is "Muslim enough" for the hard-line conservatives in his party. Just days before the election, he embarked on a quick trip to Mecca in Saudi Arabia – a move many analysts believe was intended to shore up support among religious voters.
Jokowi has also selected one of the most influential Muslim clerics in the country, Ma'ruf Amin, to be his running mate. Ma'ruf is head of the Indonesian Ulema Council (Majelis Ulama Indonesia), a top clerical body comprised of registered Muslim organisations across the country.
Jokowi's decision to choose Ma'ruf as his running mate has not been popular with his more moderate supporters. His initial preference for running mate was Mahfud MD, a former chief justice of the Constitutional Court of Indonesia and a former minister when Abdurrahman Wahid was president.
However, this move carried the risk of being perceived as not "Muslim enough" for religious voters, hence the selection of Ma'ruf.
So far, this decision has seemed successful. The results of surveys indicate that although Ma'ruf's overall popularity is not as high as Prabowo's running mate – the former vice governor of Jakarta, Sandiaga "Sandi" Uno – most prospective voters are only looking at the top of the ticket. The contest is squarely between Jokowi and Prabowo.
However, there are also concerns that Jokowi's more moderate supporters think he has not yet fulfilled some of his promises on human rights, and they may abstain from the election in protest. There is a campaign on social media urging people to abstain or cast blank ballots – known as golput in Bahasa.
What would a second Jokowi term mean for Indonesia?
Should Jokowi win as expected, he is unlikely to bring sweeping changes to the country. The main challenge for him will be continuing Indonesia's economic growth. Further reforms are needed to reduce protectionism, encourage foreign investment and improve productivity. With the mining industry in decline, more attention should be focused on sectors with growth potential, such as agriculture, manufacturing and services, including tourism and hospitality. The government needs to do more to tackle corruption and cut red tape, too.
Infrastructure and mass transport development also remain key issues, as is boosting financial assistance to university students and expanding health insurance.
As for foreign policy, Jokowi's focus will likely remain on economic diplomacy and market expansion. One priority will be implementing the just-signed free-trade agreement between Indonesia and Australia, which will eliminate many tariffs between the countries and increase the number of work visas for Indonesians in Australia. The deal is also expected to allow Australian hospitals to open and universities to set up campuses in Indonesia.


text:
Os Grandes Líderes foi uma coleção publicada no Brasil pela Nova Cultural em 1987, sendo composta por 90 volumes de capa dura contendo cerca de 100 páginas cada um. Diversos autores foram responsáveis pelo texto dos volumes, todos professores de universidades renomadas e jornalistas.

Livros biográficos
Livros de política
Editora Nova Cultural

redpajama_set_name: RedPajamaWikipedia


Transporter just released a new device called the Transporter Sync. It is a $99 device that you can attach to any USB storage device and turn it into Transporter cloud storage. It has all of the benefits of the traditional Transporter device of your own personal cloud storage with no subscription fees. The difference is it gets rid of the built in hard drive and attaches to your existing storage. You can plug it into a thumb drive, an external drive, or even something really big like a multi-terrabyte Drobo. All of this costs you exactly 99 bucks. I think I'm going to buy one and attach it to my Drobo and put it all in my personal cloud. We could have our 12 years of digital photos on all of our devices this way. Crazy. If that isn't enough for you, there's a Sandwich Video.


Chidoriya original pure camellia oil based lip balm combined with Organic rose hip seed oil and 100% natural Japanese Citrus oil. Yuzu Oil is excellent for skin preparations and its fresh citrus aroma has a stabilizing effect on the emotions. Rose Hip Seed Oil to nourish, hydrate and restore your skin's delicate moisture balance. Please try it! You will love it!


produced by the behold Moving Coil adapter MCA768 is sent to the master Clock. It is "packed" digitally here together with the system clock and processed to a standard 50Ω line to be sent on it.
is this signal then conducted to the pre-amp over a distance of up to 10 m using a simple 50Ω coaxial cable.
makes an additional power supply unnecessary. This technique is known at satellite receiving systems for decades.


goimomi.com (previously known as IslamicPilgrimages.com) was brought live at U-Connects' 3rd networking event, at Chennai City Center on January 19, 2019.
Mohamed Mubarak, CEO goimomi.com, hails from a village down south of India who started his entrepreneurship journey at his young age. Looking up to his parents as role models, he now had launched a reliable online platform that caters the booming Islamic/Halal tourism market.
This revolutionary digital platform will change the way of traditional sales and purchase of the tour packages, thanks to the ever growing India's online purchase and booking trend. The operators also get the benefit of free online ERP access to manage their packages, customer's data and customer payments.
With over 120 tour operators registered during the pre-launch demonstration of goimomi.com, Mubarak invites all Islamic tour organisers and accommodation aggregators to sign up and increase their sales, customers and brand identity at partner.goimomi.com. The packages are published on goimomi.com, its partnered 3rd party sites and operator's own website as well, thereby easing the marketing and bookings.
"The travel industry needs a big swift from the way they operating right now. goimomi.com will cater the travel industry and bring best suitable packages to its customer by eliminating the unethical travel operators from the marketplace" says, the founder and CEO, Mubarak.
'goimomi.com' will surely be a game changer for Halal tourism operators going forward.


Buy Justin Timberlake Nationwide Arena tickets. See Justin Timberlake at Nationwide Arena in Columbus.
Want to get your hands on some Justin Timberlake tickets at Nationwide Arena? Check out our huge inventory of Justin Timberlake Nationwide Arena tickets here at TonsOfTickets. This is where you can find a massive selection tickets for the concert at Nationwide Arena in Columbus. Call us anytime and our excellent customer service will bring you all the information you need to get to your event.
TonsOfTickets provides all the best Justin Timberlake Nationwide Arena tickets at low prices. Our ticket inventory for Justin Timberlake in Nationwide Arena is updated by the minute and can be purchased by clicking the "Buy" button for any of the dates above. You will then be sent to our secure checkout page. Unless otherwise noted, your Justin Timberlake Nationwide Arena tickets will be sent via FedEx. In many cases, E-Tickets are available which allows you to download and print your Justin Timberlake tickets from your email.


text:
Q: Is it possible to use Python to search for Excel files in subfolders and then list all of the workbooks and worksheets in a file? I know how to find all of the files within a folder\subfolders. I use the following python script:
import os

with open("output.txt", "w") as a:
    for path, subdirs, files in os.walk(r'\D:\folder\'):
       for filename in files:
         f = os.path.join(path, filename)
         a.write(str(f) + os.linesep)

Is it possible to find all of the excel files in a folder/subfolders and then list the workbooks and their worksheets in an output file?
My expectation of the output would be the following:

A: There are multiple python packages available to work with Excel files that will run on any Python platform and that do not require either Windows or Excel to be used. Some examples include
openpyxl, xlsxwriter, xlrd, xlwt, xlutils just to name a few.
for walking through directories try something like this
# Import the os module, for the os.walk function
import os

# Set the directory you want to start from
rootDir = '.'
for dirName, subdirList, fileList in os.walk(rootDir):
    print('Found directory: %s' % dirName)
    for fname in fileList:
        print('\t%s' % fname)

A: Yes. You could check the file extension, then use openpyxl to get the sheet names.
Something like this:
from openpyxl import load_workbook

filename, file_extension = os.path.splitext(file)
if file_extension == ".xlsx":
    wb2 = load_workbook(file)
    sheets = wb2.sheetnames

redpajama_set_name: RedPajamaStackExchange


text:
Gaza has been under attack since Wednesday, when Israel launched a military offensive with the declared goal of deterring fighters in the Palestinian enclave from launching rockets into its territory. 84 Palestinians have reportedly been killed. Violence erupted in the eastern provinces of DRC, following a months-long calm, with the rebel group M23 advancing on the regional capital of Goma. Heavy fighting between rebels and the military continues to rage nationwide in Syria, primarily in Idlib, Deir al-Zor, Damascus and Aleppo governorates.
Global Emergency Overview Snapshot, 5 - 12 November 2012
Both Guatemala and Myanmar were affected by earthquakes during the reporting period. On 7 November, an earthquake of 7.2 magnitude struck the pacific coast of Guatemala, affecting more than 600,000 people followed by a second quake of 6.2 magnitude on 11 November. There were no immediate reports of major infrastructural damage caused by the second earthquake. The 6.8 magnitude earthquake which struck in Myanmar on 10 November, meanwhile, damaged infrastructure but the full extent of the impact remains unclear.
Despite a four-day truce which was supposed to come into effect on Friday 26 October, fighting has continued to escalate in Damascus province, Aleppo, Idlib, Daara and Deir Ezzor in Syria manifested by a new wave of airstrikes by the Syrian forces and attacks by the rebels on strategic army checkpoints and air bases.
Global Emergency Overview Snapshot, 22 - 29 October 2012
This week, renewed violence between Arakan Buddhists and Rohingya Muslims took place in Rahkin state in Myanmar, affecting an estimated 28,000 people. Sectarian violence between the two communities in June already left more than 75,000 people displaced. Despite a four-day truce that was supposed to come into effect on Friday 26 October, fighting has continued in Damascus province, Aleppo, Idlib, Daara and Deir Ezzor in Syria. The number of flood-affected people in Chad has risen to 700,000, up from 445,000 in September, with 16 of the country's 22 regions affected.
This week, armed violence continued to escalate in Syria with heavy fighting occurring in Homs, Daraa, Deir Ezzor, Idlib, Latakia, Aleppo and Damascus. The Government has been accused of using cluster munitions in populated areas. There is an increasing risk of regional spill over, the most recent event being the assassination of a senior intelligence official leading to unrest in Lebanon. Recent reports indicate that more than 900,000 people have been affected by conflict in South Kordofan and Blue Nile state in Sudan.
Insect Infestation1

redpajama_set_name: RedPajamaCommonCrawl


What's new in the design industry, how has our history and geography affected our design traditions, what is hygge? Design is just a really interesting and timeless subject, this is our hub for design subjects.
This article is written by Stephen Burrell from stephenburrell.com Dr Martin Luther King Jr. once said: "The time is always right to do what is right". This week I had a wonderful Q&A with the sustainable jewellery designer, Anna Moltke-Huitfeldt….
Unique Scandinavian design on a budget!
Copenhagen has got a new pearl – and it's black as coal! An old coal crane from 1944 has been rebuilt to be a 50-metre-square luxury hotel apartment in Nordhavn. ENIITO stopped by for a closer look at The Krane….


Geek lifestyle shop Think Geek now offers the Mana Energy Potion, which comes in little wizard bottles.
The tiny energy drink (1.35oz) is supposed to be as strong as 2 Red Bull or 4 cups of coffee.
Besides lots of caffeine there is L-Taurine, Glucuronolactone, Malic Acid, L-Phenylalanine, N-Actetyl Tyrosine in the Mana Energy Potion.
A six pack of the Mana Energy Potion sells for $19.99 on Think Geek.


I was first introduced to this in the British Virgin Islands. I really like it because of how thick it is, I used it as a base for my deep conditioner, the recipe for that you can find here. OGX has a few different conditioners and oils in this line and I love them all. It has major slippage and slides through my knots as if they are non-existent. The pricing is in the range about $15-$18 US and can be found at Cherry's Beauty Salon Locations and Nicole's Beauty Supplies in Half Way Tree.
This one comes in here because of its a little more pricey $15-$20 US. Knot Today has gotten raving reviews from Naturals across the world and in most cases, I can see why. The fragrance is very light, it has slippage and can be used as a leave-in, so essentially its a 2 in 1 product. Major dislike is that it comes in small bottles and because of the price I doubt it would be affordable to get a bigger bottle.
The VO5 Conditioners are some of the most cost-efficient conditioners on the market, it comes in a various different light and yummy scents. Vo5 does not have much slippage and I wouldn't use it as a leave in due to the silicones that are used in this product. It can be used as a mild shampoo substitute as I have found it does do a deeper clean as a conditioner than say a Hello Hydration and a Knot Today. The pricing on this is very affordable less than $8US starting from the largest size. I love the fact that I can find this conditioner anywhere from the gas station mini-mart to the superstores of Mega Mart.
I would compare this directly with the V05 Conditioner with fragrance, availability and product performance. Tresseme comes in large bottles which is awesome but it does not have a pump action sprout like Hello Hydration and other large bottles and makes it hard to re-condition your hair when your hands are all slippery. It has some slippage and does help with detangling the scent is light and refreshing but doesn't linger for too long. Due to the size of the containers it usually retails upwards of $10 US, however, it available in all Hair Care and Beauty Stores, Mega Stores and Supermarket, the challenge will be to get the Natural hairline that they now offer.
This list contains affiliate links, which means if you purchase through these links, I will receive a small commission. This is at no cost to you, but it is an awesome way to help me keep my blog going. Thanks for your support!
Since your hair then I know you will be interested in signing up for my Natural Hair Guide that is formulated for your hair type. Its simple just enter your email below and you can get started. GO AHEAD GRAB IT!
I have heard wonderful things about the herbal essence hello hydration and will definitely be giving a try soon.


In 1966, China's leader, Mao Ze-dong, announced the Chinese Cultural Revolution. In the previous years, the Chinese Communist Party worked to restore a divided nation, and promote equal resources for all its citizens. However, there were problems, and these problems grew much worse after the Revolution.
Ji-Li turned twelve the year of the Cultural Revolution. Before it, she was an excellent student and her family was respected by the community. However, when Chairman Mao announces the need to get rid of the "Four Olds", or the values of the past that undermine the communist ideal, things become dangerous for Ji-Li's family. Rather than promoting equality, the leaders of the Revolution looked to persecute families that were wealthy in the past. Because Ji-Li's grandfather had been a landlord, her family was considered to be traitors. Students at the school are encouraged to tell on each other, and houses are searched. Sometimes the leaders are violent. How can Ji-Li be loyal to her family and her country at the same time?
Red Scarf Girl is a memoir of Ji-Li Jiang's experiences during the Cultural Revolution in China. I had never come across anything like this for young adults before, and was intrigued. There are many fictional and factual books covering both World Wars, the Holocaust, and other upheavals, but this is the first I've seen from Communist China. I was especially interested because it is true; I wanted to learn how the youth of China perceived the government and cultural ideals during this time.
This book would be a valuable addition to a classroom library, especially with the included pronunciation guide, glossary, and epilogue. I loved reading the author's explanation of her own feelings about the Revolution, and I think middle school readers would benefit from a solid account of an overlooked event in our history.
Jiang, Ji-Li. Red Scarf Girl. New York: HarperTrophy, 1997. 285 pp. Ages 10-14.
If you liked this book, you might want to check out Running the Rift by Naomi Benaron.


Sakarya, Turkey Coworking Map has 0 coworking spaces, and the highest ranked coworking spaces in Sakarya, Turkey are N/A.
Sakarya, Turkey ranks 0 in Turkey and N/A globally, based on the number of coworking spaces there.
View the newest or the top ranked coworking spaces in Sakarya, Turkey.
Browse Sakarya, Turkey Startups, Sakarya, Turkey Accelerators, Sakarya, Turkey Leaders and Sakarya, Turkey Investors.


text:
FDA: Test before giving GSK med
Personalized medicine, here we come--at least that's the message in two genetic-testing developments today. First, the FDA is advising docs to screen HIV patients for a particular genetic variant before prescribing abacavir, a GlaxoSmithKline anti-AIDS med sold under the brand name Ziagen and as part of the combo treatments Trizivir and Epzicom. That's because people with that genetic variation are at a far higher risk of a severe allergic reaction.
Though that risk was first reported several years ago, it was only recently quantified in a clinical trial. The genetic test will be recommended in a "black box" warning on abacavir labeling. With this move, abacavir becomes one of only a handful of meds for which the FDA has recommended genetic screening--but we can expect more to come.
Second, a new study tagged a particular variant with statins' most serious side effect. People who have that genetic variation were five to 17 times more likely to develop muscle pain and weakness--which can lead to muscle breakdown, kidney failure and death--when taking the cholesterol-lowering meds. The finding could lead to a predictive genetic test, which could help doctors know which patients can tolerate the higher doses that are increasingly common amongst statin-users.
- read the abacavir news from the New York Times
- check out the Washington Post statin story


by Kafka, which I'd read when I was 16 years old. Even now I have a distinct memory of its absurd story in which a human creature is transformed into an insect.
I thought that this story's theme would match Archimboldo's painting style. This work is a fusion of the two worlds produced by Archimboldo and Kafka, and homage to them.
First I produced insect models to constitute the nose, eyes, and mouth, since they are at the center of the face. Then I added other parts: the head, cheeks and ears while coordinating the balance of shape. The species and number of insects used in this work were determined one by one after judging the results of test renderings. All the shapes were modeled on curved surfaces using 3D program 'Shade 7', which was produced in Japan. Since the shape of even a single insect is complex, it was necessary to conduct fine adjustments many times to cope with the knotty superimposition of their legs, horns, and antennas. I set ball joints at the bases of insects' wings to make it possible to change their postures freely. By changing the combination of each insect model I obtained the optimum angles and sizes. The processes of the production were just like assembling a 3D jigsaw puzzle.
When determining the texture of "Metamorphosis" the problem I considered most was tha when every insect model has very different colorations and textures, the whole impression which should be seen as a human face, becomes vague. To deal with this problem I put a basic crack pattern texture onto all the models, and examined the balance of coloration and shading. After that, I put a specific texture on each insect model. The abovementioned procedures were conducted by super-imposing rendering images using Photoshop and then conducting fine adjustments of coloration and texturing, which is similar to the process of oil painting in which color is added little by little with a brush.


Join us on Wednesday, April 24th, 2019 for a Networking Social and CTF Walkthrough. This is a free event where Marcelle Lee and Tyrone E. Wilson, who recently hosted the #CTF4Noobz at @BSidesNoVA, will be on hand to provide a walkthrough on how to complete the challenges from the CTF.
We will spend the first session networking and enjoying light snacks. The walkthrough will start around 7:00 PM EST. Attendees will have the option of attempting to solve the challenges prior to the walkthrough :-).
CTF Requirements: A laptop running Kali Linux or a machine with the ability to run nmap, wireshark, ssh, and hydra.
Marcelle Lee is a threat researcher with WhiteOps, an adjunct professor in digital forensics and network security, and she also provides security consulting and training services through her company, Fractal Security Group, LLC. She specializes in network traffic analysis, malware analysis, phishing, and threat hunting. She is involved with many industry organizations, working groups, and boards, including the Women's Society of Cyberjutsu, the NIST Cyber Competitions Working Group, and the Cybersecurity Association of Maryland Advisory Board. She also both builds and participates in cyber competitions, and shares her work through her Github site, https://marcellelee.github.io/.
Mr. Tyrone E. Wilson is an information security professional with over 20 years of experience in information technology and systems configuration, including information systems and network security. Wilson also has extensive knowledge in computer network defense, vulnerability assessments, cyber threat analysis, and incident response. Currently, Wilson is the Founder and President of Cover6 Solutions; which teaches companies and professionals various aspects of information security, penetration testing, and IPv6. Wilson is also the organizer of a 6,000+ person Information Security meetup group called The D.C. Cybersecurity Professionals.
There is a small parking lot as well as street parking. There is also DMV parking across the street.


text:
St Margaret's-at-Cliffe Guide 1907. Pages 10-20
A 1972 reproduction of the St Margaret's-at-Cliffe Guide first published in 1907; written by John Bavington Jones and printed by K.J.Madge.
Featuring local information and history with maps and photographs interspersed with advertisements for local shops and businesses.
See also item numbers 4966, 4964, 4963 and 4962
St Margaret's at Cliffe
Village Guidebooks and Street Directories
"St Margaret's-at-Cliffe Guide 1907. Pages 10-20," St Margaret's History catalogue, accessed January 17, 2020, http://catalogue.stmargaretshistory.org.uk/items/show/4965.
St Margaret's 'People and Places' interviews
In 2015/16 St Margaret's History Society was awarded a grant by the Heritage Lottery Funded 'Up on the Downs' Project to carry out a programme of oral…
St Margaret's Golf Club
It's true! For just over forty years from 1899-1940 this village had a thriving 18 hole golf club with 250 members, its own club house, golf…
The Village on the Beach
The land under the cliff in St Margaret's Bay was once almost a separate community in its own right. Only the Coastguard public house, originally 'The…
NEW: Village WW2 shelling and bombing sites
This collection is made up of six maps showing WW2 bombing and shelling and aircraft crash sites in St Margaret's. It was created in 2014 by Alan…


text:
Alice Coltrane, Jazz Artist and Spiritual Leader, Dies at 69 - New York Times
Alice Coltrane, Jazz Artist and Spiritual Leader, Dies at 69 - New York Times:
Alice Coltrane, Jazz Artist and Spiritual Leader, Dies at 69
By BEN RATLIFF
Alice Coltrane, widow of the jazz saxophonist John Coltrane and the pianist in his later bands, who extended her musical searches into a vocation as a spiritual leader, died on Friday in Los Angeles. She was 69.
The cause was respiratory failure, said Marilyn McLeod, her sister and assistant.
Ms. Coltrane lived in the Woodland Hills section of Los Angeles near the Sai Anantam ashram in Agoura Hills, which she had founded in 1983. Known as Swami Turiyasangitananda, Sanskrit for "the highest song of God," she was the guiding presence of the 48-acre ashram, set among the Santa Monica mountains, where 25 to 30 full-time residents study the Vedic scriptures of ancient India, as well as Buddhist and Islamic texts.
She was also the manager of Coltrane's estate, as well as of his music-publishing company, Jowcol Music, and the John Coltrane Foundation, which has given out scholarships to music students since 2001.
As a pianist, her playing was dense with arpeggios that suggested the harp; the instrument had an important place in her life. One of her childhood heroes was the Detroit-based jazz harpist Dorothy Ashby, and she was later motivated to study that instrument by Coltrane, who loved its sound.
Raised in a musical family in Detroit, Ms. Coltrane played piano and organ for church choirs and Sunday school from age 7. As a young musician in Detroit, she was studying classical music and playing piano in jazz clubs, in a group including her half-brother, the bassist Ernie Farrow, and the trombonist George Bohannon.
In her early 20s she lived briefly in Paris, where she studied informally with the pianist Bud Powell, and was briefly married to the singer Kenny (Pancho) Hagood, with whom she had a daughter, Michelle. She returned to Detroit, playing in a band with her brother, and then moved to New York in 1962. A year later she met John Coltrane.
She was playing vibraphone and Powell-inspired bebop piano in a group led by the drummer Terry Gibbs at Birdland, on a double-bill with Coltrane's quartet. Coltrane was well established by the beginning of the 1960s, though she hadn't known about him for long before moving to New York; the first time she ever heard him, she said, was on the 1961 album "Africa/Brass."
They connected instantly; she moved in with him and traveled with the Coltrane band. By the summer of 1964 they had relocated from New York City to a house in Dix Hills, on Long Island. They married in 1965 in Juárez, Mexico, coinciding with Coltrane's divorce from his first wife, Naima Grubbs. By that time she and Coltrane had already had two of their three children together — John Jr., who died in 1982, and Ravi, who by his 30s had become an acclaimed jazz saxophonist.
Ms. Coltrane is survived by her sisters, Marilyn McLeod of Winnetka, Calif., and Margaret Roberts of Detroit; her daughter, Michelle Carbonell-Coltrane of Los Angeles; her sons Oran Coltrane of Los Angeles and Ravi, of Brooklyn; and five grandchildren.
In 1966, as the Coltrane band's music became wilder and more prolix, she became its pianist. She replaced McCoy Tyner, who quit without rancor, largely because he could no longer hear himself on the bandstand. Though she wasn't Mr. Tyner's technical equal and lacked his percussive power, she fit with the group's new purpose; by the time of the recordings that would become the album "Stellar Regions," in February 1967, she was fluid and energetic within the group's freer new language.
She told an interviewer that Coltrane helped her to play "thoroughly and completely." This meant stretching the definitions of rhythm and harmony, but she also meant something broader; Coltrane was talking about "universalizing" his music, creating a nondenominational religious art that took cues from ancient history and foreign scales. He helped her to sign a contract as a solo artist with his label, Impulse. And he introduced her to Eastern philosophy and religion, which became the main focus of her life.
After Coltrane's death from liver cancer in 1967, Ms. Coltrane took a vow of celibacy. And at first she made music closely related to his, often reflective, minor and modal; on piano or harp she played flowing, harplike phrases over a deep midtempo swing, and she worked with the bassist Jimmy Garrison and the drummer Rashied Ali from John Coltrane's band. On records like "A Monastic Trio," "Ptah, the El Daoud" and "Journey in Satchidananda," she was able to reconcile blues phrases and jazz rhythm with a kind of ancient, flowing sound.
Ms. Coltrane met her guru, Swami Satchidananda, in 1970, and in more recent years became a devotee of Sathya Sai Baba. By the early 1970s she developed a renewed interest in the organ, because it produced a continuous sound; she wanted to make a meditative music that wouldn't be interrupted by pauses for breath. Her 1972 record, "Universal Consciousness," with Ms. Coltrane on Wurlitzer organ and string arrangements by Ornette Coleman, became a far-out classic. In the mid-70s she switched to the Warner Brothers label and made four more records, including orchestras and Hindu chants. Thereafter, until 2004, she made records purely for religious purposes, distributing them privately.
After first establishing the Vedanta Center in San Francisco, she moved her ashram to Agoura Hills, just northwest of Los Angeles, and expanded it. In the past 10 years, she performed the occasional concert with Ravi, and in 2004 she finally returned to recording jazz, making "Translinear Light," produced by Ravi, who reunited her with some old colleagues like Charlie Haden and Jack DeJohnette, as well as a chorus of singers from her ashram.
Posted by John H Armwood II at 3:34 PM 3 comments: Links to this post
ALICE COLTRANE, MUSICIAN 1937-2007
She became a devotee of Indian guru Sathya Sai Baba after the 1967 death of her husband, legendary saxophonist John Coltrane
BY BEN RATLIFF, NEW YORK
Pianist and harpist Alice Coltrane was the widow of legendary jazz saxophonist John Coltrane, whose death led her to explore a vocation as a spiritual leader.
Ms. Coltrane lived in the Woodland Hills section of Los Angeles near the Sai Anantam Ashram in Agoura Hills, which she had founded in 1983. Known as Swami Turiyasangitananda, Sanskrit for "the highest song of God," she was the guiding presence of the 20-hectare ashram, set among the Santa Monica mountains, where 25 to 30 fulltime residents study the Vedic scriptures of ancient India, as well as Buddhist and Islamic texts. She was also the manager of John Coltrane's estate, as well as of his publishing company, Jowcol Music.
Michael Brecker | Obituaries | Guardian Unlimited
Michael Brecker | Obituaries | Guardian Unlimited:
Michael Brecker
Master saxophonist who straddled the worlds of jazz, blues rock and funk
John Fordham
Michael Brecker, the Philadelphia-born saxophonist star who has died of leukaemia aged 57, could hurl out more notes faster than almost all of his fellow-practitioners, but his 11 Grammy awards, devoted worldwide audience and status among musicians everywhere testified to artistic strengths that went far beyond technique. He was a composer, bandleader and improviser whose solo career started late, after years as a sideman and session-player; but in the two decades after he made his leadership debut, he became the most emulated jazz saxophonist on the planet after John Coltrane.
Article continues

Brecker was held in such awe by students, commentators and players alike that the thought of his exit will be hard for many to comprehend. A reserved, private and undemonstrative man, who made light of his talent - he was so indifferent to onstage histrionics that he would play the most high-energy solos with almost nothing visibly moving but his fingers - Brecker inspired enduring loyalties for his modesty as much as his influence. He also inspired confidence in the most demanding of artists that his presence would make even their best work sound better. Those who hired him in his pre-leadership days included Frank Sinatra, John Lennon and Yoko Ono, Steely Dan, Frank Zappa, Bruce Springsteen, Joni Mitchell, Charles Mingus and Jaco Pastorius.
Brecker combined the striving energy, technical ambition and sophisticated harmonic sense of Coltrane - his first and biggest inspiration - with a soulful bluesiness that allowed him to drop easily into the earthiest of blues, rock or funk bands. In his prime, he could sustain an unaccompanied one-man show by sounding like several sax players, and even parts of a rhythm section, all at the same time. But if he could tingle the spine with Coltranesque split-note wails that took the tenor sax way above its regular range as well as transforming it into a chordal instrument, he could be tender with slow music, as his performance of Every Day I Thank You on guitarist Pat Metheny's 80/81 album confirms.
Self-revelatory emotions were not perhaps his style, in the way they were Coltrane's. But, playing in New York in the week following 9/11, Brecker told me: "I maybe felt in touch with the true purposes of music in a way I never had been before - as a hearing, transporting, unifying force." He seemed to tune into both his inner voices and the wider possibilities of his art increasingly in later years; that journey ends with an as yet unnamed new album completed just two weeks ago.
Brecker's lawyer father was a part-time jazz pianist, his sister Emmy a classical pianist, and his brother Randy became a celebrated jazz trumpeter. Michael would joke that the only way the children could have had a subversive teenage rebellion would have been to become doctors or attorneys. "[Our father] took us to jazz concerts the way other kids went to ball games," he recalled of those childhood trips to hear Miles Davis, Duke Ellington or Thelonious Monk.
Michael played drums at first (percussive accents remained a strong feature of his saxophone style), then clarinet from the age of seven, alto sax in high school, and finally the tenor and soprano instruments. While at Indiana University he mostly played rock, turning to R&B and funk at the end of the 60s when he moved to New York to play professionally. In 1969 Michael and Randy Brecker, guitarist John Abercrombie and drummer Billy Cobham co-founded Dreams, one of the earliest and most creative of the first wave of jazz-rock bands. Work with Cobham and with Horace Silver followed, before Randy and Michael formed the Brecker Brothers.
One of the group's album titles, Heavy Metal Bebop, aptly described the style. Michael's spiky, chromatically dense improvising style developed in this period - but, unlike a good many jazz players turning to funk in the 70s, he never sounded cramped by the rhythm patterns of the idiom. He burst with ideas whether the underpinning was the loose, cruising feel of swing, or the slamming backbeats of rock.
The Brecker Brothers continued with various line-ups until 1982, and between 1977 and 1985 they also ran a New York club called Seventh Avenue South. Between 1970 and the mid-80s, Michael also contributed to more than 400 pop albums as a session saxist. Then, in 1986, with pianist Joey Calderazzo, drummer Adam Nussbaum and bassist Jeff Andrews, he formed a much more jazz-oriented post-bop group, and in 1987 recorded his debut album as a leader (it was jazz album of the year in both Downbeat and Jazziz magazines), and toured with Herbie Hancock's quartet. He also briefly explored the possibilities of an electronic sax, the EWI.
That first album was well received, partly for the revelation that Brecker had an eloquent compositional talent with which to trigger his torrential saxophone variations (though he never composed extensively, and depended on a close relationship with pianist Gil Goldstein as a composer-arranger). Sideman roles still occasionally tempted him (he toured with Paul Simon in 1991-92 and with Hancock in 1997), and the Brecker Brothers were occasionally coaxed out of retirement, but it was the powerful quartet (often featuring the drummer Jeff "Tain" Watts) that was his most regular vehicle through the 1990s. Albums like Tales From the Hudson, Time Is Of the Essence, The Ballad Book and Wide Angles (2004) displayed the same improvisational verve as ever, but were also showcases for Brecker's high-class admirers - like McCoy Tyner, Metheny, Hancock and Elvin Jones.
In his 50s, Brecker's improvising gradually shed the grandstanding pyrotechnics, gaining subtler colours, greater contrast and a compelling narrative strength. In 2001, at the invitation of the English Contemporary Music Network, he also successfully explored leadership of a larger band, working with Gil Goldstein and an Anglo-American group on expanded arrangements of his own compositions. A bigger group also participated on Wide Angles, which won two Grammy awards.
The following year, the news emerged that Brecker was suffering from the blood disease myelodysplastic syndrome, a condition that frequently precedes leukaemia. Last summer, an experimental blood stem cell transplant was attempted, but was unsuccessful. Realising the importance of the marrow donor programme, Brecker and his family began campaigning for raised awareness about it generally. "This whole experience has allowed me to be a conduit to attract attention for a cause that's much larger than me," Brecker said. He is survived by his wife Susan, children Jessica and Sam, brother Randy and sister Emily Brecker Greenberg.
· Michael Brecker, saxophonist, born March 29 1949; died January 13 2007
Brecker was held in such awe by students, commentators and players alike that the thought of his exit will be hard for many to comprehend. A reserved, private and undemonstrative man, who made light of his talent - he was so indifferent to onstage histrionics that he would play the most high-energy solos with almost nothing visibly moving but his fingers - Brecker inspired enduring loyalties for his modesty as much as his influence. He also inspired confidence in the most demanding of artists that his presence would make even their best work sound better. Those who hired him in"
village voice > music > by Greg Tate
village voice > music > by Greg Tate:
Eulogy for Black Caesar
James Brown, 1933–2006
by Greg Tate
January 2nd, 2007 4:00 PM
James Brown funeral procession
photo: Cary Conover
Photo gallery from the Apollo wake
High Bias: The James Brown special
Skinny white bands who owe the Godfather
Eeeeeeyow. Gud gaad. Aintit fonkeenah? James Brown knew how to freak the tribal speak and the tribal feet alike—the tribal neckbone and irrepressible tribal hambone too. Being a poet, a boxer, and a onetime Pentecostal supplicant, the Godfather knew a thing or two about being hit with the spirit and hit with the quickness; he also knew how to hit back, how to respond in kind in a New York minute. Bold, Black, and Beautiful things just happened faster in the world according to Brown. Tempos, terpsichore, tantrums, tangents, even jail time. They didn't call him Mr. Dynamite for nothing. Word is that when the Hardest Working Man in Showbiz did his three-year bid, he stayed industrious, organized a choir, ran the kitchen and laundry detail. Sit-down time for Black Caesar? Fuhgeddaboudit. And unlike so many of our fallen fighters whom dust and base cocaine dropped to the mat in the '80s and '90s, JB came back up as superbaaad as ever. Lest we forget, he transitioned to another world tour by straight stealing Jesus' thunder on Xmas Day. He wasn't ever a puny human to begin with anyway, so don't act surprised.
The line for his people's wake at the Apollo Thursday—as great a day in Black ancestor worship as the world done seen since James Baldwin's 1987 going-away soiree at St. John the Divine—began at 1 p.m. and didn't end till nine that night, teeming multitudes still being turned away to the chilly neon darkness uptown. All kinds of reporters, I'm talking cats from here to Melbourne, spent all day asking about the significance of JB. Your reporter hit it and quit with one inquisitor, obliquely declaring Brown "the Alpha and the Omega of the African in African American." Say wha? Because JB is the embodiment of all the working-class African blood that got us through, all that African left in us beyond the Middle Passage. Because JB embodied all our collective love, joy, ingenuity, and indefatigability, all our spirited and spiritual survivalist complexity, all our freedom jazz dance. The power of King James rang true for continental Africans too—in Ghana, Nigeria, Mali, and Congo especially. He became the bridge, and the measure of how much New World African modernity they needed to keep their postcolonial cultures moving, grooving, and counting off like a sex machine too. In a nutshell, JB was our grand Black unifier. The universal Negro solvent with the feral eyes, flashwhite teeth, torrential sweaty brow, swinging crown of piled-up processed hair, and skintight pants, who made us understand nothing less than absolute soulfulness as our cultural prime directive.
Truth be told, JB remains the one Black truth we can all agree to agree on as a life-giving essential. Just ask Sly, Jimi, Miles, Fela, and Marley, because by the time the '70s rolled around they were all convinced James was the Answer. You can hear that for yourself in Fresh, Band of Gypsys, Jack Johnson, Africa 70, Exodus, and everything that flowed from those funk-saturated templates. All the way to heaven, all the way to Parliament-Funkadelic, all the way to hiphop. No surprise that everybody attributes the way hiphop music sounds to JB—the Godfather, Jimmy Nolen, Clyde Stubblefield, and Maceo Parker knew they had built a rhythmcentric beast, a perpetual-motion-making machine whose gifts couldn't help but keep on giving. But dig, if you will, this picture: The streetwise poesy of hiphop lyrics is all his inspiration too. JB's every economical, anthropological utterance legitimized and laid bare the thought process of the 'hood's hardknockschooled philosophers, those organic Black intellectual Bamm-Bamms whose only book might be the Bible, but whose chiseled, charismatic bullet-point language was their bloodsoaked own. Point-blank, the vernacular priesthood of the MC begins with Mr. Brown, a man whose savior-like social vision, bottomless erotic optimism, and boundless capitalist ambition all found expression in his dolla-bill raps, his gangsta raps, his love raps, his protest raps, and his party raps for damn sure.
This man could sum up the modern Black condition and modern Black gender relations in two or three declarative sentences: "I don't care about your past/I just want our love to last. . . . I don't care about your wants/I just want to tell you about the dos and don'ts. . . . When you kiss me and ya miss me/You hold me tight/Make everything alright/I break out—in a cold sweat." You could fish a whole August Wilson play out of those lines, with their naked, scary promise of unconditional love and inflexible control, their spooked response to a sexual charge, their punch-drunk fervor thrown down before his intended like damnation and salvation will be delivered by the same hand. Girl, you heard the man: Get up off that thang, dance to the music, and put your foot on the rock.
While we're on that subject, we'll also remind y'all that JB's footwork, legwork, and neckwork were damn near bionic in their velocity, violence, viscosity. Talking about that way he had of moving everything below his waist at fuming warp speed while his triangular pugilist's torso became hummingbird-still, more implacable than any mannequin. Talking about the way that famously unhinged slide so aptly contrasted with that almost "zombie" freeze. Talking about that voodoo thing he did with his visage midstroke, that look from somewhere between trance and terror, jokes and hallelujah, grimace and beatitude.
Something like that look was seen on his face at the Apollo last week, Mr. Brown's body driven there by two white horses and two dark horsemen in tails and top hats. Lying in state in a solid-gold casket on the very stage he'd rocked so often in days of yore, Mr. Dynamite, a/k/a the Godfather, a/k/a He's Soul Brother Number One in Tokyo was decked out in a dark-powder-blue silk suit, delicate white gloves, and sparkling silver ankle boots as his music burst like bombs around the solemn processional line and the Apollo's famous ushers did everything they could not to break in to the Funky Chicken. His face, his death mask, postmortem and post- mortician—yes, that carved granite face, first on Black Rushmore after King and X (and before Clinton and Pryor)—epitomized what the old folks mean when they say they made him look "natural." And maybe even too natural at that, as there was something etched in that famous ebony-grain skin whose cheeks now sagged under the weight of a suddenly tight mouth poised somewhere between smirk, surrender, and dissatisfaction. Something that said he wasn't too happy the way this final act had been sprung on him, and on us too, quiet as it's kept. Because truth be known, Mr. Brown was one of those iconic figures we all thought of as family first, and as with family, we took his every success and setback as our reflection, illumination, and humiliation too. If loud James said we were Black and proud, we instantly became all that in spades: louder, Blacker, prouder. If James liked the hot pants, we blindly followed suit. And if Brown went to the slammer, we did too: "Free James Brown!" Tell me you don't remember that! And we always knew, as he'd already so famously reminded us, that while money won't change you, time will take you out. Troubles, flaws, and all, Mr. Brown was one of our best, perhaps precisely because he was an object lesson in self-mastery and self-martyrdom, and took every licking as a spur to resurrection. Lawd, tell me: Now that James Brown is truly free, what's to become of the rest of us?
Posted by John H Armwood II at 4:34 AM 2 comments: Links to this post
Alice Coltrane, Jazz Artist and Spiritual Leader, ...


text:
Health Committee worried about outbreak
August 14, 2013 August 16, 2013 Comments Off on Health Committee worried about outbreak
The Portfolio Committee on Health has expressed concerns about the outbreak of diarrhoea in Nelspruit.
Thirty two pupils were reportedly rushed to a local hospital. Eleven of the 32 pupils were admitted. Chairperson for the Committee, Dr Bevan Goqwana, welcomed the Mpumalanga Health Department's decision to probe the outbreak. "As the Committee, we will closely monitor the situation," said Dr Goqwana. He added: "Diarrhoea can have devastating effects. We laud the measures taken by the local health authorities to keep the outbreak under control".
Meanwhile, Dr Goqwana wished the Minister of Health, Dr Aaron Motsoaledi, a speedy recovery, "We welcome the initiative by the Minister to lead by example. By going to a government institution this indicates he (Minister) has faith in the sector that he oversees". The Minister was admitted to the Steve Biko Academic Hospital on Tuesday for a planned surgical procedure.
MEC Robin Carlisle to announce the appointment of the new Transport and Public Works Head of Department
Energy committee wants more details from department on biofuels strategy and gas industry transformation