text:
package com.google.android.photostream;

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpVersion;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.params.HttpParams;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.OutputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.net.URL;

import android.util.Xml;
import android.view.InflateException;
import android.net.Uri;
import android.os.Parcelable;
import android.os.Parcel;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

/**
 * Utility class to interact with the Flickr REST-based web services.
 *
 * This class uses a default Flickr API key that you should replace with your own if
 * you reuse this code to redistribute it with your application(s).
 *
 * This class is used as a singleton and cannot be instanciated. Instead, you must use
 * {@link #get()} to retrieve the unique instance of this class.
 */
class Flickr {
    static final String LOG_TAG = "Photostream";

    // IMPORTANT: Replace this Flickr API key with your own
    private static final String API_KEY = "730e3a4f253b30adf30177df803d38c4";

    private static final String API_REST_HOST = "api.flickr.com";
    private static final String API_REST_URL = "/services/rest/";
    private static final String API_FEED_URL = "/services/feeds/photos_public.gne";

    private static final String API_PEOPLE_FIND_BY_USERNAME = "flickr.people.findByUsername";
    private static final String API_PEOPLE_GET_INFO = "flickr.people.getInfo";
    private static final String API_PEOPLE_GET_PUBLIC_PHOTOS = "flickr.people.getPublicPhotos";
    private static final String API_PEOPLE_GET_LOCATION = "flickr.photos.geo.getLocation";

    private static final String PARAM_API_KEY = "api_key";
    private static final String PARAM_METHOD= "method";
    private static final String PARAM_USERNAME = "username";
    private static final String PARAM_USERID = "user_id";
    private static final String PARAM_PER_PAGE = "per_page";
    private static final String PARAM_PAGE = "page";
    private static final String PARAM_EXTRAS = "extras";
    private static final String PARAM_PHOTO_ID = "photo_id";
    private static final String PARAM_FEED_ID = "id";
    private static final String PARAM_FEED_FORMAT = "format";

    private static final String VALUE_DEFAULT_EXTRAS = "date_taken";
    private static final String VALUE_DEFAULT_FORMAT = "atom";

    private static final String RESPONSE_TAG_RSP = "rsp";
    private static final String RESPONSE_ATTR_STAT = "stat";
    private static final String RESPONSE_STATUS_OK = "ok";

    private static final String RESPONSE_TAG_USER = "user";
    private static final String RESPONSE_ATTR_NSID = "nsid";

    private static final String RESPONSE_TAG_PHOTOS = "photos";
    private static final String RESPONSE_ATTR_PAGE = "page";
    private static final String RESPONSE_ATTR_PAGES = "pages";

    private static final String RESPONSE_TAG_PHOTO = "photo";
    private static final String RESPONSE_ATTR_ID = "id";
    private static final String RESPONSE_ATTR_SECRET = "secret";
    private static final String RESPONSE_ATTR_SERVER = "server";
    private static final String RESPONSE_ATTR_FARM = "farm";
    private static final String RESPONSE_ATTR_TITLE = "title";
    private static final String RESPONSE_ATTR_DATE_TAKEN = "datetaken";

    private static final String RESPONSE_TAG_PERSON = "person";
    private static final String RESPONSE_ATTR_ISPRO = "ispro";
    private static final String RESPONSE_ATTR_ICONSERVER = "iconserver";
    private static final String RESPONSE_ATTR_ICONFARM = "iconfarm";
    private static final String RESPONSE_TAG_USERNAME = "username";
    private static final String RESPONSE_TAG_REALNAME = "realname";
    private static final String RESPONSE_TAG_LOCATION = "location";
    private static final String RESPONSE_ATTR_LATITUDE = "latitude";
    private static final String RESPONSE_ATTR_LONGITUDE = "longitude";
    private static final String RESPONSE_TAG_PHOTOSURL = "photosurl";
    private static final String RESPONSE_TAG_PROFILEURL = "profileurl";
    private static final String RESPONSE_TAG_MOBILEURL = "mobileurl";

    private static final String RESPONSE_TAG_FEED = "feed";
    private static final String RESPONSE_TAG_UPDATED = "updated";

    private static final String PHOTO_IMAGE_URL = "http://farm%s.static.flickr.com/%s/%s_%s%s.jpg";
    private static final String BUDDY_ICON_URL =
            "http://farm%s.static.flickr.com/%s/buddyicons/%s.jpg";
    private static final String DEFAULT_BUDDY_ICON_URL =
            "http://www.flickr.com/images/buddyicon.jpg";

    private static final int IO_BUFFER_SIZE = 4 * 1024;

    private static final boolean FLAG_DECODE_PHOTO_STREAM_WITH_SKIA = false;

    private static final Flickr sInstance = new Flickr();

    private HttpClient mClient;

    /**
     * Defines the size of the image to download from Flickr.
     *
     * @see com.google.android.photostream.Flickr.Photo
     */
    enum PhotoSize {
        /**
         * Small square image (75x75 px).
         */
        SMALL_SQUARE("_s", 75),
        /**
         * Thumbnail image (the longest side measures 100 px).
         */
        THUMBNAIL("_t", 100),
        /**
         * Small image (the longest side measures 240 px).
         */
        SMALL("_m", 240),
        /**
         * Medium image (the longest side measures 500 px).
         */
        MEDIUM("", 500),
        /**
         * Large image (the longest side measures 1024 px).
         */
        LARGE("_b", 1024);

        private final String mSize;
        private final int mLongSide;

        private PhotoSize(String size, int longSide) {
            mSize = size;
            mLongSide = longSide;
        }

        /**
         * Returns the size in pixels of the longest side of the image.
         *
         * @return THe dimension in pixels of the longest side.
         */
        int longSide() {
            return mLongSide;
        }

        /**
         * Returns the name of the size, as defined by Flickr. For instance,
         * the LARGE size is defined by the String "_b".
         *
         * @return
         */
        String size() {
            return mSize;
        }

        @Override
        public String toString() {
            return name() + ", longSide=" + mLongSide;
        }
    }

    /**
     * Represents the geographical location of a photo.
     */
    static class Location {
        private float mLatitude;
        private float mLongitude;

        private Location(float latitude, float longitude) {
            mLatitude = latitude;
            mLongitude = longitude;
        }

        float getLatitude() {
            return mLatitude;
        }

        float getLongitude() {
            return mLongitude;
        }
    }

    /**
     * A Flickr user, in the strictest sense, is only defined by its NSID. The NSID
     * is usually obtained by {@link Flickr#findByUserName(String)
     * looking up a user by its user name}.
     *
     * To obtain more information about a given user, refer to the UserInfo class.
     *
     * @see Flickr#findByUserName(String)
     * @see Flickr#getUserInfo(com.google.android.photostream.Flickr.User)
     * @see com.google.android.photostream.Flickr.UserInfo
     */
    static class User implements Parcelable {
        private final String mId;

        private User(String id) {
            mId = id;
        }

        private User(Parcel in) {
            mId = in.readString();
        }

        /**
         * Returns the Flickr NSDID of the user. The NSID is used to identify the
         * user with any operation performed on Flickr.
         *
         * @return The user's NSID.
         */
        String getId() {
            return mId;
        }

        /**
         * Creates a new instance of this class from the specified Flickr NSID.
         *
         * @param id The NSID of the Flickr user.
         *
         * @return An instance of User whose id might not be valid.
         */
        static User fromId(String id) {
            return new User(id);
        }

        @Override
        public String toString() {
            return "User[" + mId + "]";
        }

        public int describeContents() {
            return 0;
        }

        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(mId);
        }

        public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {
            public User createFromParcel(Parcel in) {
                return new User(in);
            }

            public User[] newArray(int size) {
                return new User[size];
            }
        };
    }

    /**
     * A set of information for a given Flickr user. The information exposed include:
     * - The user's NSDID
     * - The user's name
     * - The user's real name
     * - The user's location
     * - The URL to the user's photos
     * - The URL to the user's profile
     * - The URL to the user's mobile web site
     * - Whether the user has a pro account
     */
    static class UserInfo implements Parcelable {
        private String mId;
        private String mUserName;
        private String mRealName;
        private String mLocation;
        private String mPhotosUrl;
        private String mProfileUrl;
        private String mMobileUrl;
        private boolean mIsPro;
        private String mIconServer;
        private String mIconFarm;

        private UserInfo(String nsid) {
            mId = nsid;
        }

        private UserInfo(Parcel in) {
            mId = in.readString();
            mUserName = in.readString();
            mRealName = in.readString();
            mLocation = in.readString();
            mPhotosUrl = in.readString();
            mProfileUrl = in.readString();
            mMobileUrl = in.readString();
            mIsPro = in.readInt() == 1;
            mIconServer = in.readString();
            mIconFarm = in.readString();
        }

        /**
         * Returns the Flickr NSID that identifies this user.
         *
         * @return The Flickr NSID.
         */
        String getId() {
            return mId;
        }

        /**
         * Returns the user's name. This is the name that the user authenticates with,
         * and the name that Flickr uses in the URLs
         * (for instance, http://flickr.com/photos/romainguy, where romainguy is the user
         * name.)
         *
         * @return The user's Flickr name.
         */
        String getUserName() {
            return mUserName;
        }

        /**
         * Returns the user's real name. The real name is chosen by the user when
         * creating his account and might not reflect his civil name.
         *
         * @return The real name of the user.
         */
        String getRealName() {
            return mRealName;
        }

        /**
         * Returns the user's location, if publicly exposed.
         *
         * @return The location of the user.
         */
        String getLocation() {
            return mLocation;
        }

        /**
         * Returns the URL to the photos of the user. For instance,
         * http://flickr.com/photos/romainguy.
         *
         * @return The URL to the photos of the user.
         */
        String getPhotosUrl() {
            return mPhotosUrl;
        }

        /**
         * Returns the URL to the profile of the user. For instance,
         * http://flickr.com/people/romainguy/.
         *
         * @return The URL to the photos of the user.
         */
        String getProfileUrl() {
            return mProfileUrl;
        }

        /**
         * Returns the mobile URL of the user.
         *
         * @return The mobile URL of the user.
         */
        String getMobileUrl() {
            return mMobileUrl;
        }

        /**
         * Indicates whether the user owns a pro account.
         *
         * @return true, if the user has a pro account, false otherwise.
         */
        boolean isPro() {
            return mIsPro;
        }

        /**
         * Returns the URL to the user's buddy icon. The buddy icon is a 48x48
         * image chosen by the user. If no icon can be found, a default image
         * URL is returned.
         *
         * @return The URL to the user's buddy icon.
         */
        String getBuddyIconUrl() {
            if (mIconFarm == null || mIconServer == null || mId == null) {
                return DEFAULT_BUDDY_ICON_URL;
            }
            return String.format(BUDDY_ICON_URL, mIconFarm, mIconServer, mId);
        }

        /**
         * Loads the user's buddy icon as a Bitmap. The user's buddy icon is loaded
         * from the URL returned by {@link #getBuddyIconUrl()}. The buddy icon is
         * not cached locally.
         *
         * @return A 48x48 bitmap if the icon was loaded successfully or null otherwise.
         */
        Bitmap loadBuddyIcon() {
            Bitmap bitmap = null;
            InputStream in = null;
            OutputStream out = null;

            try {
                in = new BufferedInputStream(new URL(getBuddyIconUrl()).openStream(),
                        IO_BUFFER_SIZE);

                if (FLAG_DECODE_PHOTO_STREAM_WITH_SKIA) {
                    bitmap = BitmapFactory.decodeStream(in);
                } else {
                    final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
                    out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE);
                    copy(in, out);
                    out.flush();

                    final byte[] data = dataStream.toByteArray();
                    bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                }
            } catch (IOException e) {
                android.util.Log.e(Flickr.LOG_TAG, "Could not load buddy icon: " + this, e);
            } finally {
                closeStream(in);
                closeStream(out);
            }

            return bitmap;
        }

        @Override
        public String toString() {
            return mRealName + " (" + mUserName + ", " + mId + ")";
        }

        public int describeContents() {
            return 0;
        }

        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(mId);
            dest.writeString(mUserName);
            dest.writeString(mRealName);
            dest.writeString(mLocation);
            dest.writeString(mPhotosUrl);
            dest.writeString(mProfileUrl);
            dest.writeString(mMobileUrl);
            dest.writeInt(mIsPro ? 1 : 0);
            dest.writeString(mIconServer);
            dest.writeString(mIconFarm);
        }

        public static final Parcelable.Creator<UserInfo> CREATOR =
                new Parcelable.Creator<UserInfo>() {
            public UserInfo createFromParcel(Parcel in) {
                return new UserInfo(in);
            }

            public UserInfo[] newArray(int size) {
                return new UserInfo[size];
            }
        };
    }

    /**
     * A photo is represented by a title, the date at which it was taken and a URL.
     * The URL depends on the desired {@link com.google.android.photostream.Flickr.PhotoSize}.
     */
    static class Photo implements Parcelable {
        private String mId;
        private String mSecret;
        private String mServer;
        private String mFarm;
        private String mTitle;
        private String mDate;

        private Photo() {
        }

        private Photo(Parcel in) {
            mId = in.readString();
            mSecret = in.readString();
            mServer = in.readString();
            mFarm = in.readString();
            mTitle = in.readString();
            mDate = in.readString();
        }

        /**
         * Returns the title of the photo, if specified.
         *
         * @return The title of the photo. The returned value can be empty or null.
         */
        String getTitle() {
            return mTitle;
        }

        /**
         * Returns the date at which the photo was taken, formatted in the current locale
         * with the following pattern: MMMM d, yyyy.
         *
         * @return The title of the photo. The returned value can be empty or null.
         */
        String getDate() {
            return mDate;
        }

        /**
         * Returns the URL to the photo for the specified size.
         *
         * @param photoSize The required size of the photo.
         *
         * @return A URL to the photo for the specified size.
         *
         * @see com.google.android.photostream.Flickr.PhotoSize
         */
        String getUrl(PhotoSize photoSize) {
            return String.format(PHOTO_IMAGE_URL, mFarm, mServer, mId, mSecret, photoSize.size());
        }

        /**
         * Loads a Bitmap representing the photo for the specified size. The Bitmap is loaded
         * from the URL returned by
         * {@link #getUrl(com.google.android.photostream.Flickr.PhotoSize)}.
         *
         * @param size The size of the photo to load.
         *
         * @return A Bitmap whose longest size is the same as the longest side of the
         *         specified {@link com.google.android.photostream.Flickr.PhotoSize}, or null
         *         if the photo could not be loaded.
         */
        Bitmap loadPhotoBitmap(PhotoSize size) {
            Bitmap bitmap = null;
            InputStream in = null;
            BufferedOutputStream out = null;

            try {
                in = new BufferedInputStream(new URL(getUrl(size)).openStream(),
                        IO_BUFFER_SIZE);

                if (FLAG_DECODE_PHOTO_STREAM_WITH_SKIA) {
                    bitmap = BitmapFactory.decodeStream(in);
                } else {
                    final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
                    out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE);
                    copy(in, out);
                    out.flush();

                    final byte[] data = dataStream.toByteArray();
                    bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                }
            } catch (IOException e) {
                android.util.Log.e(Flickr.LOG_TAG, "Could not load photo: " + this, e);
            } finally {
                closeStream(in);
                closeStream(out);
            }

            return bitmap;
        }

        @Override
        public String toString() {
            return mTitle + ", " + mDate + " @" + mId;
        }

        public int describeContents() {
            return 0;
        }

        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(mId);
            dest.writeString(mSecret);
            dest.writeString(mServer);
            dest.writeString(mFarm);
            dest.writeString(mTitle);
            dest.writeString(mDate);
        }

        public static final Parcelable.Creator<Photo> CREATOR = new Parcelable.Creator<Photo>() {
            public Photo createFromParcel(Parcel in) {
                return new Photo(in);
            }

            public Photo[] newArray(int size) {
                return new Photo[size];
            }
        };
    }

    /**
     * A list of {@link com.google.android.photostream.Flickr.Photo photos}. A list
     * represents a series of photo on a page from the user's photostream, a list is
     * therefore associated with a page index and a page count. The page index and the
     * page count both depend on the number of photos per page.
     */
    static class PhotoList {
        private ArrayList<Photo> mPhotos;
        private int mPage;
        private int mPageCount;

        private void add(Photo photo) {
            mPhotos.add(photo);
        }

        /**
         * Returns the photo at the specified index in the current set. An
         * {@link ArrayIndexOutOfBoundsException} can be thrown if the index is
         * less than 0 or greater then or equals to {@link #getCount()}.
         *
         * @param index The index of the photo to retrieve from the list.
         *
         * @return A valid {@link com.google.android.photostream.Flickr.Photo}.
         */
        public Photo get(int index) {
            return mPhotos.get(index);
        }

        /**
         * Returns the number of photos in the list.
         *
         * @return A positive integer, or 0 if the list is empty.
         */
        public int getCount() {
            return mPhotos.size();
        }

        /**
         * Returns the page index of the photos from this list.
         *
         * @return The index of the Flickr page that contains the photos of this list.
         */
        public int getPage() {
            return mPage;
        }

        /**
         * Returns the total number of photo pages.
         *
         * @return A positive integer, or 0 if the photostream is empty.
         */
        public int getPageCount() {
            return mPageCount;
        }
    }

    /**
     * Returns the unique instance of this class.
     *
     * @return The unique instance of this class.
     */
    static Flickr get() {
        return sInstance;
    }

    private Flickr() {
        final HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, "UTF-8");

        final SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));

        final ThreadSafeClientConnManager manager =
                new ThreadSafeClientConnManager(params, registry);

        mClient = new DefaultHttpClient(manager, params);
    }

    /**
     * Finds a user by its user name. This method will return an instance of
     * {@link com.google.android.photostream.Flickr.User} containing the user's
     * NSID, or null if the user could not be found.
     *
     * The returned User contains only the user's NSID. To retrieve more information
     * about the user, please refer to
     * {@link #getUserInfo(com.google.android.photostream.Flickr.User)}
     *
     * @param userName The name of the user to find.
     *
     * @return A User instance with a valid NSID, or null if the user cannot be found.
     *
     * @see #getUserInfo(com.google.android.photostream.Flickr.User)
     * @see com.google.android.photostream.Flickr.User
     * @see com.google.android.photostream.Flickr.UserInfo
     */
    User findByUserName(String userName) {
        final Uri.Builder uri = buildGetMethod(API_PEOPLE_FIND_BY_USERNAME);
        uri.appendQueryParameter(PARAM_USERNAME, userName);

        final HttpGet get = new HttpGet(uri.build().toString());
        final String[] userId = new String[1];

        try {
            executeRequest(get, new ResponseHandler() {
                public void handleResponse(InputStream in) throws IOException {
                    parseResponse(in, new ResponseParser() {
                        public void parseResponse(XmlPullParser parser)
                                throws XmlPullParserException, IOException {
                            parseUser(parser, userId);
                        }
                    });
                }
            });

            if (userId[0] != null) {
                return new User(userId[0]);
            }
        } catch (IOException e) {
            android.util.Log.e(LOG_TAG, "Could not find the user with name: " + userName);
        }

        return null;
    }

    /**
     * Retrieves a public set of information about the specified user. The user can
     * either be {@link com.google.android.photostream.Flickr.User#fromId(String) created manually}
     * or {@link #findByUserName(String) obtained from a user name}.
     *
     * @param user The user, whose NSID is valid, to retrive public information for.
     *
     * @return An instance of {@link com.google.android.photostream.Flickr.UserInfo} or null
     *         if the user could not be found.
     *
     * @see com.google.android.photostream.Flickr.UserInfo
     * @see com.google.android.photostream.Flickr.User
     * @see #findByUserName(String)
     */
    UserInfo getUserInfo(User user) {
        final String nsid = user.getId();
        final Uri.Builder uri = buildGetMethod(API_PEOPLE_GET_INFO);
        uri.appendQueryParameter(PARAM_USERID, nsid);

        final HttpGet get = new HttpGet(uri.build().toString());

        try {
            final UserInfo info = new UserInfo(nsid);

            executeRequest(get, new ResponseHandler() {
                public void handleResponse(InputStream in) throws IOException {
                    parseResponse(in, new ResponseParser() {
                        public void parseResponse(XmlPullParser parser)
                                throws XmlPullParserException, IOException {
                            parseUserInfo(parser, info);
                        }
                    });
                }
            });

            return info;
        } catch (IOException e) {
            android.util.Log.e(LOG_TAG, "Could not find the user with id: " + nsid);
        }

        return null;
    }

    /**
     * Retrives a list of photos for the specified user. The list contains at most the
     * number of photos specified by <code>perPage</code>. The photos are retrieved
     * starting a the specified page index. For instance, if a user has 10 photos in
     * his photostream, calling getPublicPhotos(user, 5, 2) will return the last 5 photos
     * of the photo stream.
     *
     * The page index starts at 1, not 0.
     *
     * @param user The user to retrieve photos from.
     * @param perPage The maximum number of photos to retrieve.
     * @param page The index (starting at 1) of the page in the photostream.
     *
     * @return A list of at most perPage photos.
     *
     * @see com.google.android.photostream.Flickr.Photo
     * @see com.google.android.photostream.Flickr.PhotoList
     * @see #downloadPhoto(com.google.android.photostream.Flickr.Photo,
     *          com.google.android.photostream.Flickr.PhotoSize, java.io.OutputStream)
     */
    PhotoList getPublicPhotos(User user, int perPage, int page) {
        final Uri.Builder uri = buildGetMethod(API_PEOPLE_GET_PUBLIC_PHOTOS);
        uri.appendQueryParameter(PARAM_USERID, user.getId());
        uri.appendQueryParameter(PARAM_PER_PAGE, String.valueOf(perPage));
        uri.appendQueryParameter(PARAM_PAGE, String.valueOf(page));
        uri.appendQueryParameter(PARAM_EXTRAS, VALUE_DEFAULT_EXTRAS);

        final HttpGet get = new HttpGet(uri.build().toString());
        final PhotoList photos = new PhotoList();

        try {
            executeRequest(get, new ResponseHandler() {
                public void handleResponse(InputStream in) throws IOException {
                    parseResponse(in, new ResponseParser() {
                        public void parseResponse(XmlPullParser parser)
                                throws XmlPullParserException, IOException {
                            parsePhotos(parser, photos);
                        }
                    });
                }
            });
        } catch (IOException e) {
            android.util.Log.e(LOG_TAG, "Could not find photos for user: " + user);
        }

        return photos;
    }

    /**
     * Retrieves the geographical location of the specified photo. If the photo
     * has no geodata associated with it, this method returns null.
     *
     * @param photo The photo to get the location of.
     *
     * @return The geo location of the photo, or null if the photo has no geodata
     *         or the photo cannot be found.
     *
     * @see com.google.android.photostream.Flickr.Location
     */
    Location getLocation(Flickr.Photo photo) {
        final Uri.Builder uri = buildGetMethod(API_PEOPLE_GET_LOCATION);
        uri.appendQueryParameter(PARAM_PHOTO_ID, photo.mId);

        final HttpGet get = new HttpGet(uri.build().toString());
        final Location location = new Location(0.0f, 0.0f);

        try {
            executeRequest(get, new ResponseHandler() {
                public void handleResponse(InputStream in) throws IOException {
                    parseResponse(in, new ResponseParser() {
                        public void parseResponse(XmlPullParser parser)
                                throws XmlPullParserException, IOException {
                            parsePhotoLocation(parser, location);
                        }
                    });
                }
            });
            return location;
        } catch (IOException e) {
            android.util.Log.e(LOG_TAG, "Could not find location for photo: " + photo);
        }

        return null;
    }

    /**
     * Checks the specified user's feed to see if any updated occured after the
     * specified date.
     *
     * @param user The user whose feed must be checked.
     * @param reference The date after which to check for updates.
     *
     * @return True if any update occured after the reference date, false otherwise.
     */
    boolean hasUpdates(User user, final Calendar reference) {
        final Uri.Builder uri = new Uri.Builder();
        uri.path(API_FEED_URL);
        uri.appendQueryParameter(PARAM_FEED_ID, user.getId());
        uri.appendQueryParameter(PARAM_FEED_FORMAT, VALUE_DEFAULT_FORMAT);

        final HttpGet get = new HttpGet(uri.build().toString());
        final boolean[] updated = new boolean[1];

        try {
            executeRequest(get, new ResponseHandler() {
                public void handleResponse(InputStream in) throws IOException {
                    parseFeedResponse(in, new ResponseParser() {
                        public void parseResponse(XmlPullParser parser)
                                throws XmlPullParserException, IOException {
                            updated[0] = parseUpdated(parser, reference);
                        }
                    });
                }
            });
        } catch (IOException e) {
            android.util.Log.e(LOG_TAG, "Could not find feed for user: " + user);
        }

        return updated[0];
    }

    /**
     * Downloads the specified photo at the specified size in the specified destination.
     *
     * @param photo The photo to download.
     * @param size The size of the photo to download.
     * @param destination The output stream in which to write the downloaded photo.
     *
     * @throws IOException If any network exception occurs during the download.
     */
    void downloadPhoto(Photo photo, PhotoSize size, OutputStream destination) throws IOException {
        final BufferedOutputStream out = new BufferedOutputStream(destination, IO_BUFFER_SIZE);
        final String url = photo.getUrl(size);
        final HttpGet get = new HttpGet(url);

        HttpEntity entity = null;
        try {
            final HttpResponse response = mClient.execute(get);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                entity = response.getEntity();
                entity.writeTo(out);
                out.flush();
            }
        } finally {
            if (entity != null) {
                entity.consumeContent();
            }
        }
    }

    private boolean parseUpdated(XmlPullParser parser, Calendar reference) throws IOException,
            XmlPullParserException {

        int type;
        String name;
        final int depth = parser.getDepth();

        while (((type = parser.next()) != XmlPullParser.END_TAG ||
                parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
            if (type != XmlPullParser.START_TAG) {
                continue;
            }

            name = parser.getName();
            if (RESPONSE_TAG_UPDATED.equals(name)) {
                if (parser.next() == XmlPullParser.TEXT) {
                    final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    try {
                        final String text = parser.getText().replace('T', ' ').replace('Z', ' ');
                        final Calendar calendar = new GregorianCalendar();
                        calendar.setTimeInMillis(format.parse(text).getTime());

                        return calendar.after(reference);
                    } catch (ParseException e) {
                        // Ignore
                    }
                }
            }
        }

        return false;
    }

    private void parsePhotos(XmlPullParser parser, PhotoList photos)
            throws XmlPullParserException, IOException {
        int type;
        String name;
        SimpleDateFormat parseFormat = null;
        SimpleDateFormat outputFormat = null;

        final int depth = parser.getDepth();

        while (((type = parser.next()) != XmlPullParser.END_TAG ||
                parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
            if (type != XmlPullParser.START_TAG) {
                continue;
            }

            name = parser.getName();
            if (RESPONSE_TAG_PHOTOS.equals(name)) {
                photos.mPage = Integer.parseInt(parser.getAttributeValue(null, RESPONSE_ATTR_PAGE));
                photos.mPageCount = Integer.parseInt(parser.getAttributeValue(null,
                        RESPONSE_ATTR_PAGES));
                photos.mPhotos = new ArrayList<Photo>();
            } else if (RESPONSE_TAG_PHOTO.equals(name)) {
                final Photo photo = new Photo();
                photo.mId = parser.getAttributeValue(null, RESPONSE_ATTR_ID);
                photo.mSecret = parser.getAttributeValue(null, RESPONSE_ATTR_SECRET);
                photo.mServer = parser.getAttributeValue(null, RESPONSE_ATTR_SERVER);
                photo.mFarm = parser.getAttributeValue(null, RESPONSE_ATTR_FARM);
                photo.mTitle = parser.getAttributeValue(null, RESPONSE_ATTR_TITLE);
                photo.mDate = parser.getAttributeValue(null, RESPONSE_ATTR_DATE_TAKEN);

                if (parseFormat == null) {
                    parseFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    outputFormat = new SimpleDateFormat("MMMM d, yyyy");
                }

                try {
                    photo.mDate = outputFormat.format(parseFormat.parse(photo.mDate));
                } catch (ParseException e) {
                    android.util.Log.w(LOG_TAG, "Could not parse photo date", e);
                }

                photos.add(photo);
            }
        }
    }

    private void parsePhotoLocation(XmlPullParser parser, Location location)
            throws XmlPullParserException, IOException {
        int type;
        String name;
        final int depth = parser.getDepth();

        while (((type = parser.next()) != XmlPullParser.END_TAG ||
                parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
            if (type != XmlPullParser.START_TAG) {
                continue;
            }

            name = parser.getName();
            if (RESPONSE_TAG_LOCATION.equals(name)) {
                try {
                    location.mLatitude = Float.parseFloat(parser.getAttributeValue(null,
                            RESPONSE_ATTR_LATITUDE));
                    location.mLongitude = Float.parseFloat(parser.getAttributeValue(null,
                            RESPONSE_ATTR_LONGITUDE));
                } catch (NumberFormatException e) {
                    throw new XmlPullParserException("Could not parse lat/lon", parser, e);
                }
            }
        }
    }

    private void parseUser(XmlPullParser parser, String[] userId)
            throws XmlPullParserException, IOException {
        int type;
        String name;
        final int depth = parser.getDepth();

        while (((type = parser.next()) != XmlPullParser.END_TAG ||
                parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
            if (type != XmlPullParser.START_TAG) {
                continue;
            }

            name = parser.getName();
            if (RESPONSE_TAG_USER.equals(name)) {
                userId[0] = parser.getAttributeValue(null, RESPONSE_ATTR_NSID);
            }
        }
    }

    private void parseUserInfo(XmlPullParser parser, UserInfo info)
            throws XmlPullParserException, IOException {
        int type;
        String name;
        final int depth = parser.getDepth();

        while (((type = parser.next()) != XmlPullParser.END_TAG ||
                parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
            if (type != XmlPullParser.START_TAG) {
                continue;
            }

            name = parser.getName();
            if (RESPONSE_TAG_PERSON.equals(name)) {
                info.mIsPro = "1".equals(parser.getAttributeValue(null, RESPONSE_ATTR_ISPRO));
                info.mIconServer = parser.getAttributeValue(null, RESPONSE_ATTR_ICONSERVER);
                info.mIconFarm = parser.getAttributeValue(null, RESPONSE_ATTR_ICONFARM);
            } else if (RESPONSE_TAG_USERNAME.equals(name)) {
                if (parser.next() == XmlPullParser.TEXT) {
                    info.mUserName = parser.getText();
                }
            } else if (RESPONSE_TAG_REALNAME.equals(name)) {
                if (parser.next() == XmlPullParser.TEXT) {
                    info.mRealName = parser.getText();
                }
            } else if (RESPONSE_TAG_LOCATION.equals(name)) {
                if (parser.next() == XmlPullParser.TEXT) {
                    info.mLocation = parser.getText();
                }
            } else if (RESPONSE_TAG_PHOTOSURL.equals(name)) {
                if (parser.next() == XmlPullParser.TEXT) {
                    info.mPhotosUrl = parser.getText();
                }
            } else if (RESPONSE_TAG_PROFILEURL.equals(name)) {
                if (parser.next() == XmlPullParser.TEXT) {
                    info.mProfileUrl = parser.getText();
                }
            } else if (RESPONSE_TAG_MOBILEURL.equals(name)) {
                if (parser.next() == XmlPullParser.TEXT) {
                    info.mMobileUrl = parser.getText();
                }
            }
        }
    }

    /**
     * Parses a valid Flickr XML response from the specified input stream. When the Flickr
     * response contains the OK tag, the response is sent to the specified response parser.
     *
     * @param in The input stream containing the response sent by Flickr.
     * @param responseParser The parser to use when the response is valid.
     *
     * @throws IOException
     */
    private void parseResponse(InputStream in, ResponseParser responseParser) throws IOException {
        final XmlPullParser parser = Xml.newPullParser();
        try {
            parser.setInput(new InputStreamReader(in));

            int type;
            while ((type = parser.next()) != XmlPullParser.START_TAG &&
                    type != XmlPullParser.END_DOCUMENT) {
                // Empty
            }

            if (type != XmlPullParser.START_TAG) {
                throw new InflateException(parser.getPositionDescription()
                        + ": No start tag found!");
            }

            String name = parser.getName();
            if (RESPONSE_TAG_RSP.equals(name)) {
                final String value = parser.getAttributeValue(null, RESPONSE_ATTR_STAT);
                if (!RESPONSE_STATUS_OK.equals(value)) {
                    throw new IOException("Wrong status: " + value);
                }
            }

            responseParser.parseResponse(parser);

        } catch (XmlPullParserException e) {
            final IOException ioe = new IOException("Could not parser the response");
            ioe.initCause(e);
            throw ioe;
        }
    }

    /**
     * Parses a valid Flickr Atom feed response from the specified input stream.
     *
     * @param in The input stream containing the response sent by Flickr.
     * @param responseParser The parser to use when the response is valid.
     *
     * @throws IOException
     */
    private void parseFeedResponse(InputStream in, ResponseParser responseParser)
            throws IOException {

        final XmlPullParser parser = Xml.newPullParser();
        try {
            parser.setInput(new InputStreamReader(in));

            int type;
            while ((type = parser.next()) != XmlPullParser.START_TAG &&
                    type != XmlPullParser.END_DOCUMENT) {
                // Empty
            }

            if (type != XmlPullParser.START_TAG) {
                throw new InflateException(parser.getPositionDescription()
                        + ": No start tag found!");
            }

            String name = parser.getName();
            if (RESPONSE_TAG_FEED.equals(name)) {
                responseParser.parseResponse(parser);
            } else {
                throw new IOException("Wrong start tag: " + name);
            }

        } catch (XmlPullParserException e) {
            final IOException ioe = new IOException("Could not parser the response");
            ioe.initCause(e);
            throw ioe;
        }
    }

    /**
     * Executes an HTTP request on Flickr's web service. If the response is ok, the content
     * is sent to the specified response handler.
     *
     * @param get The GET request to executed.
     * @param handler The handler which will parse the response.
     *
     * @throws IOException
     */
    private void executeRequest(HttpGet get, ResponseHandler handler) throws IOException {
        HttpEntity entity = null;
        HttpHost host = new HttpHost(API_REST_HOST, 80, "http");
        try {
            final HttpResponse response = mClient.execute(host, get);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                entity = response.getEntity();
                final InputStream in = entity.getContent();
                handler.handleResponse(in);
            }
        } finally {
            if (entity != null) {
                entity.consumeContent();
            }
        }
    }

    /**
     * Builds an HTTP GET request for the specified Flickr API method. The returned request
     * contains the web service path, the query parameter for the API KEY and the query
     * parameter for the specified method.
     *
     * @param method The Flickr API method to invoke.
     *
     * @return A Uri.Builder containing the GET path, the API key and the method already
     *         encoded.
     */
    private static Uri.Builder buildGetMethod(String method) {
        final Uri.Builder builder = new Uri.Builder();
        builder.path(API_REST_URL).appendQueryParameter(PARAM_API_KEY, API_KEY);
        builder.appendQueryParameter(PARAM_METHOD, method);
        return builder;
    }

    /**
     * Copy the content of the input stream into the output stream, using a temporary
     * byte array buffer whose size is defined by {@link #IO_BUFFER_SIZE}.
     *
     * @param in The input stream to copy from.
     * @param out The output stream to copy to.
     *
     * @throws IOException If any error occurs during the copy.
     */
    private static void copy(InputStream in, OutputStream out) throws IOException {
        byte[] b = new byte[IO_BUFFER_SIZE];
        int read;
        while ((read = in.read(b)) != -1) {
            out.write(b, 0, read);
        }
    }

    /**
     * Closes the specified stream.
     *
     * @param stream The stream to close.
     */
    private static void closeStream(Closeable stream) {
        if (stream != null) {
            try {
                stream.close();
            } catch (IOException e) {
                android.util.Log.e(Flickr.LOG_TAG, "Could not close stream", e);
            }
        }
    }

    /**
     * Response handler used with
     * {@link Flickr#executeRequest(org.apache.http.client.methods.HttpGet,
     * com.google.android.photostream.Flickr.ResponseHandler)}. The handler is invoked when
     * a response is sent by the server. The response is made available as an input stream.
     */
    private static interface ResponseHandler {
        /**
         * Processes the responses sent by the HTTP server following a GET request.
         *
         * @param in The stream containing the server's response.
         *
         * @throws IOException
         */
        public void handleResponse(InputStream in) throws IOException;
    }

    /**
     * Response parser used with {@link Flickr#parseResponse(java.io.InputStream,
     * com.google.android.photostream.Flickr.ResponseParser)}. When Flickr returns a valid
     * response, this parser is invoked to process the XML response.
     */
    private static interface ResponseParser {
        /**
         * Processes the XML response sent by the Flickr web service after a successful
         * request.
         *
         * @param parser The parser containing the XML responses.
         *
         * @throws XmlPullParserException
         * @throws IOException
         */
        public void parseResponse(XmlPullParser parser) throws XmlPullParserException, IOException;
    }
}

redpajama_set_name: RedPajamaGithub


How do I transfer files to my personal web space?
How do I setup and check email in Netscape Communicator?
How do I setup and check email in Outlook Express?
How do I setup multiple email accounts in Netscape Communicator?
How do I setup multiple email accounts in Outlook Express?
I am a new customer, set up with Internet Explorer. How do I set up Netscape Communicator, if I would rather use it?
How do I check the DNS settings on my computer?
If you need help with a question not covered here, please call technical support at 1-888-273-1772 or email your question to support@communityweb.net. Make sure you include the nature of your problem, your login name, telephone number (including area code) and the best time to call. Technical support must have at least an hour to return your call, and a technician may not be available at the time you request.


text:
This War Of Mine: Stories Reveals 'The Last Broadcast' DLC Release Date
This War of Mine: Stories Reveals 'The Last Broadcast' DLC Release Date
October 31, 2018 Noisy Pixel Staff
11 Bit Studios have teamed up with Meg Jayanath, writer of 80 Days, to announce the release date of the second piece of story DLC for their survival adventure title This War of Mine: Stories.
Titled 'The Last Broadcast", this new story DLC has been in development for quite some time. The first story DLC, Father's Promise, release in November 2017, so a year isn't that bad, but the developer makes a note that they keep games in development until they can deliver the best game of their abilities.
"Surely it took us a while, but the focus was on delivering a deeply emotional story. The leading theme circles around the price of telling the truth." Says Project Lead, Tomasz Kisilewicz.
The new episode will release on November 14 on PC, which is the 4th anniversary of the original release of the game. In addition to the story DLC, the developers are introducing extra content such as different endings, new gameplay mechanics, new moral dilemmas about telling the truth that influences the world, newly playable civilians, a new shelter people can live in, and new sites of the city of Pogoren to visit.
Tomasz adds, "It had to be at least as good as the other stories you can find in This War of Mine. For this reason, after we received the scenario from Meg we iterated on the episode an enormous amount of times afterward. We had to make sure that in the end, the community would have a story they expect from us and we couldn't let them down. And now that The Last Broadcast is releasing, I'd like to say 'enjoy The Last Broadcast', but perhaps the better wording is actually 'experience The Last Broadcast'."
The new episode will cost $3.99 and the season pass of the game will rise from $4.99 to $6.99 due to the size of the update. The price is currently still at the lowest, so the developer is encouraged to get the season pass now.
This War of Mine: Stories is available now on PC-via Steam GOG.com, and Humble Store.
You can check out the short teaser trailer below:
Author's take: This game is pretty dope and hearing that there is a ton of new story coming makes me want to return to it. In this case, the wait was worth it. I don't think a developer should have to apologize for taking long, I think that's only necessary if they over promise or deliver a product that isn't what they were pitching.
OVERKILL's The Walking Dead Starts its Closed Beta
October 11, 2018 Victor Aparicio
Collar X Malice Unlimited Review – The Fandisc of Our Dreams
August 13, 2020 February 10, 2021 Jacob Kavanagh
Sense: A Cyberpunk Ghost Story Review – Doesn't Make Sense
September 21, 2020 February 10, 2021 Azario Lopez

redpajama_set_name: RedPajamaCommonCrawl


Privacy, views and clean air are some of the qualities this piece of land offers. Located in a quiet community of fine home, this is one of a few lots left to build your dream home in Southern Vermont. The lot is fully permitted with a community leach field ready to connect to. With elevation of about 2000 feet, you will have long range vistas. Easy access to all area amenities including skiing and golf at nearby Okemo Mountain Resort. A perfect spot to build.


text:
Community Health Spotlight Top 4
How every health worker can respond to domestic violence
25 Nov, 2020, 12:27 pm 02 Dec, 2020, 12:44 pm Harrison Vesey
Safer Pathways project officer Rhiannon Eves and domestic violence counsellor Thomi Coutsas stand in front of a temporary public art installation designed to increase awareness about family and domestic violence.
Violence in any form is a violation of human rights. Approximately one in four women in Australia have experienced violence by an intimate partner.
As the world retreated inside homes due to the lockdown measures introduced to curb COVID-19, reports showed an alarming increase in the already existing pandemic of violence against women.
This 'shadow pandemic' has reached a frightening point: domestic violence shelters and helplines have reached their capacity.
One team who is seeing the effects of this increase is Western Sydney's Integrated Violence Prevention and Response Service (IVPRS).
IVPRS community development counsellor Jay Pulvirenti said violence against women must be addressed in COVID-19 response and recovery efforts.
"We are seeing an increase in domestic abuse cases, and it's not just Western Sydney's problem. It's worldwide," Jay said.
"It is everybody's right to feel safe and be treated with respect and love in a relationship. No one should live in fear.
"Our team provides counselling, advocacy, information and referrals to other services, as well as access to a forensic medical service for documentation of injuries for the police and court.
"Not every victim reports the act of abuse. We would like to send the message out there that our team is always ready to step in and provide help."
One of the most important interfaces for people who are experiencing domestic violence is with the health service.
Health workers play a crucial role in identifying and supporting people experiencing violence. The way they respond has a big impact on what happens next for victims.
Jay said that it was important for person to feel safe during their initial contact with health service.
"People who present to hospital after a domestic abuse incident have experienced trauma, they may be overwhelmed and distressed. It is our role to identify that they were subjected to violence and provide help," she said.
This week marks the beginning of 16 Days of Activism against Gender-Based Violence.
Starting on 25 November, the International Day for the Elimination of Violence against Women, and running until 10 December, Human Rights Day, it aims to increase awareness, galvanize advocacy efforts and call on everyone to think about how they can make a difference.
"We can all take action, including health workers to help end violence against women – even during a pandemic," Jay said.
To help health workers assist victims of violence IVPRS has developed a list of helpful tips:
Privacy: Where possible, find a private place to speak to the patient.
Listen and validate: Let the patient know that you're here to listen, believe their experience and want to help.
Safety: Consider their immediate safety and needs. Do they have somewhere safe to go to? Do they have children in their care? (If yes, consider your Mandatory Reporter requirements). Where is the abuser currently located?
Support and refer: Whilst they are in your care, continue providing support to the patient. Seek advice by consulting with Social Work or IVPRS (9881 8787). The NSW DV Line (1800 656 463) can assist with emergency Housing and case management/referrals and 1800 RESPECT (1800 737 732) can provide crisis counselling. Consider what other services or departments the client is already connected with.
Referrals can also be made to the IVPRS Domestic Violence Counselling Service that provides specialist, long-term and trauma-informed counselling at no cost. It operates at multiple locations across Western Sydney and can assist with referrals for case management.
IVPRS can also arrange documentation of the injuries via the Forensic Medical Unit at Blacktown Hospital for police investigations and legal proceedings.
If you or anyone you know is experiencing domestic violence, when it's safe to do so, you can contact the following supports:
NSW Domestic Violence Line, for crisis counselling, referral or support on 1800 65 64 63
1800RESPECT on 1800 737 732 for sexual assault, domestic and family violence counselling and support services
Link2Home on 1800 152 152 who can help refer women experiencing domestic violence to crisis accommodation
Child Protection Helpline – 13 21 11
Lifeline – 13 11 14
IVPRS at Blacktown Community Health Centre – 9881 8700
If you are in immediate danger or in an emergency, always contact Triple Zero (000).
← Santa gets a new kidney from Mrs Claus at Westmead Hospital
Restrictions eased in time for Christmas →
What you need to know about one of the leading causes of death in hospital
13 Sep, 2018, 9:32 am 17 Sep, 2018, 10:57 am Sia Anthopoulos
Can you spare five minutes to help us understand and improve weight management in western Sydney?
23 Mar, 2022, 11:23 am 23 Mar, 2022, 11:38 am Alyssa Terese
Our stars recognised in Women of the Year awards
08 Mar, 2018, 2:40 pm 12 Mar, 2018, 2:27 pm Jenny Harrison


Silma Suba received a B.S. in journalism and a Certificate in Integrated Marketing Communications in 2016 from Northwestern in Qatar, where she was editor-in-chief of the Daily Q. She is fluent in four languages and is as adept at digital platforms and social media as she is in traditional print media. Silma has won prizes for poetry and journalism, most notably, the Best Journalistic Writing award for a story about a portable school for Afghan refugees, published while she was in a journalism residency at the Pulitzer Center in Washington, D.C. Silma has traveled a long road from Bangladesh to Qatar to Evanston, where she will begin studies for her Masters in Journalism at Medill this fall (2018).


text:
SHIPPING NOTE! We're shipping orders without any delay! However, the USPS has announced they are experiencing MAJOR delays due to the pandemic & staffing issues. Please stay patient if your order appears to be "stuck". We have been informed they will still be delivered, but will simply be late. This is outside of our control and doesn't affect all orders, but we appreciate your patience. Read more by clicking HERE.
Albums & More
Indie-Exclusives
Top-Reviewed Albums
Video, DVD, Blu-Ray +
Joco Merchandise
USPS Delays
Home / Vinyl Record Store / Artists / No Doubt / No Doubt (Limited, 180 Gram) (LP)
No Doubt (Limited, 180 Gram) (LP)
Limited 180gm vinyl LP pressing. No Doubt is the self-titled debut studio album by the alt-rock/ska band No Doubt, released March 17, 1992 on Interscope Records. The album was originally recorded as an independent release, but was re-recorded after the band was signed to Interscope. It was produced by Dito Godwin and recorded in Los Angeles. The album was released during a period in which the United States was mainly focused on grunge music, an angst-ridden genre that was almost the complete opposite of No Doubt's upbeat commercial sound. Despite strong tours, the album failed to perform as well as the record company expected it to, selling only 30, 000 copies. The record company refused to fund the release of a single from it, so No Doubt released the album's only single, "Trapped in a Box", independently. Since the band signed out of Interscope, the band independently produced and released a follow-up to No Doubt, The Beacon Street Collection, in 1995. This album had a better commercial performance than the band's debut album, selling 100, 000 copies, leading Interscope to finance and support their third album, Tragic Kingdom
Purchase this album now and earn 17 Points!
No Doubt (Limited, 180 Gram) (LP) quantity
GTIN (UPC): 602557602333 SKU: JMC-602557602333 Categories: No Doubt, Vinyl (LP) Tag: No Doubt
A1 BND 0:45
A2 Let's Get Back 4:11
A3 Ache 3:48
A4 Get On The Ball 3:32
A5 Move On 3:55
A6 Sad For Me 1:59
A7 Doormat 2:26
B1 Big City Train 3:56
B2 Trapped In A Box 3:24
B3 Sometimes 4:29
B4 Sinking 3:20
B5 A Little Something Refreshing 1:18
B6 Paulina 2:30
B7 Brand New Day 3:15
Be the first to review "No Doubt (Limited, 180 Gram) (LP)" Cancel reply
Nebraska (180 Gram) (LP)
The River (Gatefold, 180 Gram) (2 LP)
$30.99 Backorder
Greetings From Asbury Park, N.J. (Remastered, 180 Gram) (LP)
Greatest Hits (Limited, Gatefold, 150 Gram) (2 LP)
Born to Run (180 Gram, Gatefold) (LP)
Shake It Up (180 Gram, Expanded Version) (2 LP)
Sale - 12% off! $30.00 $26.55 Add to cart
Don't Smile At Me (Limited, Opaque Red Color) (LP)
Sale - 9% off! $20.93 $18.99 Add to cart
Panorama (Expanded Edition, Gatefold, 180 Gram) (2 LP)
Brett Dennen (LP)
Thank You Happy Birthday (LP)
Subscribe for updates and discounts
Privacy Policy – Shipping & Return Policies
© Copyright 2020 - JOCO RECORDS
Made with ♥ in Nebraska.
You're viewing: No Doubt (Limited, 180 Gram) (LP) $21.99 $16.99


Classes have now finished for the summer break but will recommence in September. Please click on courses page for venues and start dates.
Bookings for all the weekly course starting early in January are now being taken. Details can be found under Courses. The Wednesday night class has been moved to the more accessible and comfortable Art Room in the Rothesay Education Centre and continues to be specifically for drawing: both graphite and coloured pencils.
A series of Saturday workshops starting in February 2016 have just been released. They cover a wide range of topics designed to instruct and inspire and include some of the favourite botanical and wildlife subjects that David is well known for. All of these workshops book up very quickly so get your name down fast!


Mumbai Customs invites you to celebrate a unique partnership of economic stability, growth and security.
Mumbai Customs is the team of over 5,000 men & women responsible for keeping our economy in shape.
Responsible for collection of over Rs 72000 cr of revenue annually, Mumbai Customs pumps precious funds for our national development.
Apart from Revenue collection, we act as soldiers of our economic frontiers by facilitating fair trade & enabling Make in India while apprehending prohibited & illegitimate goods.
In the process, we protect our environment from Ozone depleting substances, protect our biodiversity by preventing smuggling of species, prevent terrorism by thwarting their supply chain, keep our nation healthy by intercepting counterfeit & expired foods, cosmetics & accessories.
In partnership with our citizens, Mumbai Customs keeps our economy fit & propels our nation towards a stronger, stable & prosperous economy.
Please note that participants who registered before October 20, 2017 will get a personalised BIB with their name printed on it. Participants who registered later will receive a BIB without their name printed on the BIB.


text:
BREAKING – House Passes Bill Without Hyde Amendment, Forcing Americans to Pay for Abortions
Posted by Brittany Raymer | Jul 29, 2021 | Life
The House of Representatives has passed a spending bill that does not include the Hyde Amendment, which prevents taxpayer funds from paying for abortions.
In a vote of 219-208, the House majority voted to approve H.R. 4502, which is a bill that includes funding for Labor, Health and Human Services, Educations (LHHS) Appropriations Act and Financial Services and General Government.
In addition to removing the Hyde Amendment and the Weldon Amendment, which protects health care workers from being forced to engage in abortion procedures, it also forces those taking Title X funding to offer three things after a positive pregnancy test, (1) prenatal care and delivery; (2) infant care, foster care, and adoption; and (3) abortion/abortion referral.
Though the bill passed the House, thankfully, it faces a tough fight in the Senate.
However, pro-abortion activists and politicians are celebrating this decision.
Rep. Diana DeGette, Colorado, tweeted, "For the first time in 45 years, the House just passed a spending bill WITHOUT the Hyde Amendment! For decades, this archaic policy has prevented MILLIONS of women from accessing the abortion care they need. This is a BIG win in our fight to finally #EndHyde."
Rep. Jan Schakowsky, Illinois, wrote, "Proud doesn't even begin to cover how I feel about helping pass the FIRST federal spending bill WITHOUT the Hyde Amendment. Today was the day to #BeBoldEndHyde, and we did just that.
"By passing this spending bill, we are one step closer to ending unjust policies like the Hyde Amendment and other abortion coverage bans. An enormous thank you to @rosadelauro and @RepBarbaraLee for their leadership to #BeBoldEndHyde!"
"I was a staffer on the Hill when Henry Hyde passed his racist & discriminatory policy designed to restrict abortion access for low-income people & people of color," Rep. Barbara Lee tweeted. "Today, we passed the first spending bill without it in decades—a major step in our flight to #BeBoldEndHyde."
Planned Parenthood also got in on the action, with president Alexis McGill Johnson writing on Twitter, "Today is an enormous victory for patients, health care providers, and advocates who've been fighting for decades to eliminate federal abortion coverage bans. Let's keep going!! #BeBoldEndHyde."
Removing the Hyde Amendment has been the dream of pro-abortion activists and some politicians for years, but it has nothing to do with helping women. Despite statements that the policy was discriminatory, removing the Hyde Amendment damages the country and ignores the conscience objections of millions of Americans across the country.
Rep. Elise Stefanik, New York, wrote on Twitter, "Here are the FACTS: For more than 40 years, the Hyde Amendment has ensured that Americans are not forced to pay for abortion-on-demand with their tax dollar. It has saved nearly 2.5 MILLION lives. #HydeSavesLives."
Rep. Cathy McMorris of Washington, said on the House floor, "With technology today, we can look into the womb and watch the development of a baby day by day. Docs are able to administer life-saving care to babies before they are born…Our laws should reflect the science and the truth."
The failure to include the Hyde Amendment will damage preborn babies, women, men and families across the country. It's the government-sanctioned killing of preborn babies, and is a sad reflection of how radical some politicians have become on the issue of abortion.
Pray that this appropriations bill will not pass the Senate, and that the Hyde Amendment will once again be reinstated.
PreviousProposed Bill in Congress Will Rein in Big Tech Censorship
Next'It's Incredibly Frustrating' Fox News' Janice Dean Responds to DOJ's Decision to Drop Investigation Into Nursing Home Deaths
Make a Stand for Life – Sign the Declaration for Life
Times Square Pro-Life Event: Senator Ben Sasse Talks with Jim Daly about Alive from New York
Supreme Court Temporarily Blocks Louisiana Abortion Law
Legislators Look to Expand Late-Term Abortions in New Mexico and Vermont


With the Chord Calculator, you can look up the most common chords. Select the chord type and press any note to show the chord starting from that note.
If you don't want to hear the chord as you tap a note you can mute the piano with the mute switch in the upper left corner on top of the piano!
If you want to show C# as Db just flip the Sharps/Flats switch in the upper left corner on top of the piano!
You can see the notes spelled out on the right side. The chord will be displayed on the staff as well. The notation is also correct with regards to double flats and double sharps.
In the middle of the screen, you can see the most common notation syntax for the selected chord!


text:
Rediff.com » Sports » Why Sindhu is struggling to break the final jinx
Why Sindhu is struggling to break the final jinx
'Sometime it does upset you when you lose in the finals, or even in a quarter-final or semi-final, especially when you think may be I could have played better or even if you gave your 100 percent and even then you lose.'
IMAGE: PV Sindhu was beaten in the finals at Commonwealth Games, Asian Games the World Championship, India Open and Thailand Open. Photograph: Robertus Pudyanto/Getty Images
India's badminton ace P V Sindhu believes she would be in top form at the BWF's World Tour Final as a recent break gave her the time to be well-prepared for the season-ending tournament, starting on December 12.
Olympic silver medallist Sindhu, who finished runner-up at the last edition of the event in Dubai, skipped last week's Syed Modi International in Lucknow to focus on the $1,500,000 event to be held in Guangzhou.
It is the third time that the Indian ace qualified for the prestigious event and asked if she would be in better form this time, Sindhu said: "Ya, because I have enough time to prepare this time.
"I hope I do well in this tournament. I am confident of giving my best. It is one of the biggest tournaments with all the top players and it will be tough but I really want to win it."
Sindhu continued her impressive form this year, claiming silver medals at all the major events -- Commonwealth Games, Asian Games and the World Championship, besides finishing runners-up at India Open and Thailand Open.
Talking about the final losses that were difficult to digest, Sindhu said: "I played five finals and lost and those were tough to take but I am happy with the Asian Games results. I mean, overall some good results and some upsets in the finals."
The 23-year-old listed several factors that might have led to her summit losses, which were a talking point this year.
"Sometime it does upset you when you lose in the finals, or even in a quarter-final or semi-final, especially when you think may be I could have played better or even if you gave your 100 percent and even then you lose."
"Sometimes you don't play up to the mark and you win even then. You think that you should have played better. You have to just think it is not your day. For example in 2017 World championship final, it was not my day because I gave everything in that match," she added.
So who were the players she found difficult to beat this year?
"I feel everyone is of same standard, it is not like one is tough. It is all about that particular day. You can see a lot of juniors coming up, so we have to give your best against even the lower-ranked players," she said.
On her six successive losses to Chinese Taipei's Tai Tzu Ying, Sindhu said: "Of course Tai Tzu is a deceptive player, she is the World No.1 but still I feel it was about that particular day.
"Actually, I feel it is not so tough...you have to prepare for her strokes. She (Tzu Ying) is deceptive in the sense that she has that confidence in her that if she plays a particular stroke, she will get that point.
"But if we can keep the shuttle in the court and take her strokes then it should be fine," she explains.
In a gruelling season, Sindhu played as many as 18 tournaments and she said there is hardly any time to reflect on the matches.
"We don't have much time but whatever time we get, we need to analyse and know what mistakes we are doing. We have to pick our tournaments where you can give your best, it is tough, you have to be mentally and physically fit.
"It is very important to be confident and strong even if you lose, because you know there are tournaments coming up next and you have to be prepared for it," she said.
Once the World Tour Finals are over, Sindhu will turn her attention to the Premier Badminton League (PBL) where she will play for Hyderabad Hunters, taking on Olympic champion Carolina Marin, in the opening match on December 22.
"I am really looking forward to play Carolina and I hope it turns out to be a match to remember," said Sindhu while talking about the the Spaniard, who will represent Pune 7 Aces this season.
"I will be representing my own city and that makes this opening clash even more special. You can expect full-throated support from the Hunters which will prove to be our strength as we face Pune."
My dream is to become World No 1: Sindhu
'Perennial bridesmaid' Sindhu aims to cross final hurdle
Sindhu: This is just the beginning; there is a lot more to come
Sindhu chokes yet again; loses to Marin in World Championships final
I have been working on my mental game: Sindhu


Also see Curtis Stone Does Lunch.
Kathryn Budig is a well known yoga teacher and regular contributor at Yoga Journal and Women's Health Magazine. But in her new book Aim True, she goes beyond the yoga mat, detailing her philosophy on how to live a happy, healthy, well-balanced life. In Aim True, she features meditation tips, inspiring yoga sequences and over 85 healthy, nutrient-rich recipes – like fresh salads and smoothies and simple dips and dressings made from whole foods and natural ingredients. We're featuring three of her gluten-free recipes that are perfect for lunch.
So, strike a pose, eat your veggies and smile!
These little pockets of joy are traditional snack food in Thailand and one of my all-time favorite things to prepare. I normally enjoy these with my girlfriends and several bottles of wine. I prep all the ingredients and turn us into an assembly line until every flavorful morsel is wrapped up in its green leaf burrito. The result? A happy dance in your mouth. Make a ton — these are "poppable" and go fast!
My niece and nephew both hail from Korea, and this recipe is an ode to their heritage. Kimchi is a classic fermented vegetable dish, often made with cabbage, that does wonders for your digestive system and taste buds. These pancakes are a great appetizer or casual lunch. Just be sure to make plenty — they tend to get scooped up before you're even done!
Raw cuisine isn't always my favorite (my digestion has seen better days), but I've always been impressed with veggie pasta. It's a sponge for flavor and the perfect canvas for sauce. I took a spin on the classic basil pesto by replacing pine nuts with almonds. The result is a simple, fast, refreshing lunch.
Also see Zucchini Noodles with Cherry Tomato Marinara.


text:
Why Actif4
Actif4 Diploma
Actif4 is a team of highly experienced business leaders, coaches and consultants who share a passion for bringing people through the transition into leadership. UK-based with extensive global experience, we specialise in leadership development and its accreditation.
We have a strong team of trusted advisers for clients to connect with, brought together through common value sets and complementary skills.
Ian Gourlay
Ian is an expert catalyst for raising leadership impact, strategy delivery and change. Working from the UK and engaged by clients across a dozen countries, Ian has a 20-year track record as a coach, facilitator and consultant in these fields. His engagements are characterised by lasting relationships and helping organisations and their people to succeed in what are often very challenging circumstances.
Prior to his consulting and coaching career, Ian spent 13-years with General Accident, now part of Aviva plc, where he gained rich experience in senior management and hands-on knowledge of change - leading it and dealing with its impact on others - through multiple mergers and acquisitions.
Ian is also Managing Director of specialist consultancy Initiate, which is focused on Leadership, Change and Collaboration. Initiate works across multiple sectors and has wide international experience of operating across continents and cultures.
Ian has an MBA, is a Chartered Insurer and found the spark for much that he has been doing in his career when completing his MA (Hons) in International Relations & History. That spark was in seeing potential in the distinctiveness of individuals and often-competing cultures to do great things when they commit to a shared endeavour.
With more than 30 years' industry experience, James has spent the past 18 years in a variety of senior leadership, operations management and contracts management roles within the Africa region as well as in Europe, Vietnam, Bangladesh, Brunei and the Philippines.
James previously had a 20-year career with Wood where he served in several senior leadership roles including President of the Asset Solutions business unit for the Europe business and managing director for Wood Group PSN's UK and Africa business.
James has been Kuro Consulting Services Managing Director since April 2019. Prior to this he spent time as an independent consultant for a year after leaving his role as Marathon Oil Regional Vice President in Equatorial Guinea.
James has an excellent track record in motivating and inspiring diverse senior leadership teams ensuring businesses strive for excellence with a constant focus on continuous improvement and that leaders are agile and reactive.
In addition, James is also Managing Director of global consultancy KURO, a GlobalScot and board member for The Scottish Africa Business Association (SABA).
Actif4
ian.gourlay@actif4.com or james.crawford@actif4.com
Actif4 Ltd, 6a Howe Street, Edinburgh, EH3 6TD
©2021 by Actif4 Ltd.


Find out what's planned for Taste of Portugal London in 2015, and read Audrey Gillan's quick review of Portal, one of the restaurants taking part.
It was responsible for the arrival of chillis in Asia and created and exported piri piri chicken, but these days Portugal is mostly associated with salt cod and custard tarts.Taste of Portugal's mission is to change that and to show the world more of the country's culinary diversity.
At Portal (main image, above) – one of London's finest Portuguese restaurant – a dinner of five courses, each made with Bisaro pork (a rare breed of pigs fed on chestnuts) was prepared by Ricardo Costa, executive chef at Porto's Yeatman hotel. There was belly of Bisaro suckling pig with cardinal prawn slices and a dessert of Abbey of Priscos pudding with a surprise sprinkling of cured Bisaro ham. Wines were matched by sommelier António Lopes from the Conrad Algarve.
The event was the precursor to the Obsession Festival hosted by Nigel Haworth at Northcote Manor, Lancashire, on 29 January, where Taste of Portugal was the star of two events, a wine masterclass and a dinner the following evening cooked by five of the country's finest chefs Dieter Koschina, Matteo Ferrantino, Miguel Laffan, Vitor Matos and José Avillez.
Taste of Portugal London: what else is on?


Ok, I was bored and had miscellaneous things to tell you so I thought, 'why not a vlog?' So that's exactly what I did. No one was home anyway and so, here is my 5 minute-ish vlog discussing life. I'm sure it will be inspirational for you.
Makeup. Who needs stinking makeup when you are a natural beauty. OK I'm done flirting. Enjoy your weekend.
Hey my Cherie….how many months are you and is it a boy or a girl???
Umm, thank you monsieur! I can now purge any and all foods! Lol!!
Anything to help…although many people would gaze at you and envy your outward beauty…..but hey, I'm just a Man so what do I know about what drives a woman to want to be thinner. Curves, thats the word for today. Enjoy your weekend and the start of Autumn.
Well now your makin' me blush sir! Thank you for the compliment and enjoy your weekend too!
Blushing, something every woman needs to do a whole lot more of. The teen footballer, he'll one day realize just how silly he was trying to be like the cool kids. A mom like you, one who actually cares, is kinda rare.
3. omg you're so adroable!
1. No, your adorable! 2. I think I will 3. Your more adorable! I want my friends to do another round table but 1 doesn't want to be on camera and the others don't have time! Ugh!!! Thank you!
Have the one who is camera shy hold the camera so we can still hear her but not see her?
Oh, that's a good idea!!!
I agree with her ^, right above me!
Ahh…..thank you! You guys rock!


My Technical Notes & Others...: How to Deploy a .war to Tomcat 7 via Maven?
How to Deploy a .war to Tomcat 7 via Maven?
In order to deploy a .war to Tomcat 7 during a maven build process, the cargo plugin is very useful.
The remote URI is configured to deploy the .war on a local Tomcat 7 installation listening to port 8080. The host could be a remote host too (one should use https instead for security).


Albion have turned down a bid from Championship rivals Cardiff City for Craig Noone.
The Welsh club are believed to have offered around £400,000 for the talented winger.
That falls way below the Seagulls' valuation of a player they are determined to hold onto.
They are reluctant to sell Noone to another Championship club at any price.
Noone has become a key player for Albion since signing from Plymouth Argyle for £250,000 a year ago.
The 24-year-old Liverpudlian's dribbling skills and weaving runs have turned him into a firm favourite with fans at The Amex.
Albion last night refused to confirm Cardiff's interest in Noone. Managing director Ken Brown told The Argus: "We are not prepared to comment on transfer speculation."
Their stance is the same as it was during the 2011 January transfer window when Norwich, who like Cardiff were chasing promotion from the Championship, were knocked back in their persistent attempts to buy winger Elliott Bennett.
The Canaries eventually bought Bennett for £1.5 million in the summer, after they had secured promotion to the Premier League and he had helped Albion to the League One title.
Noone is sidelined from today's FA Cup tie at home to Wrexham. He has been in Germany for treatment on a hamstring injury sustained in last Saturday's defeat at Coventry.


text:
(function () {
    var controllerId = 'app.views.questions.index';
    angular.module('app').controller(controllerId, [
        'abp.services.app.question', '$modal',
        function (questionService, $modal) {
            var vm = this;

            vm.permissions = {
                canCreateQuestions: abp.auth.hasPermission("Pages.Questions.Create")
            };

            vm.sortingDirections = ['CreationTime DESC', 'VoteCount DESC', 'ViewCount DESC', 'AnswerCount DESC'];

            vm.questions = [];
            vm.totalQuestionCount = 0;
            vm.sorting = 'CreationTime DESC';

            vm.loadQuestions = function (append) {
                var skipCount = append ? vm.questions.length : 0;
                abp.ui.setBusy(
                    null,
                    questionService.getQuestions({
                        skipCount: skipCount,
                        sorting: vm.sorting
                    }).success(function (data) {
                        if (append) {
                            for (var i = 0; i < data.items.length; i++) {
                                vm.questions.push(data.items[i]);
                            }
                        } else {
                            vm.questions = data.items;
                        }

                        vm.totalQuestionCount = data.totalCount;
                    })
                );
            };

            vm.showNewQuestionDialog = function () {
                var modalInstance = $modal.open({
                    templateUrl: abp.appPath + 'App/Main/views/questions/createDialog.cshtml',
                    controller: 'app.views.questions.createDialog as vm',
                    size: 'md'
                });

                modalInstance.result.then(function () {
                    vm.loadQuestions();
                });
            };

            vm.sort = function (sortingDirection) {
                vm.sorting = sortingDirection;
                vm.loadQuestions();
            };

            vm.showMore = function () {
                vm.loadQuestions(true);
            };

            vm.loadQuestions();
        }
    ]);
})();


Lion Wooden Pencil is a sweet little pencil with a very happy lion perched on the top.
This pencil is grey, made of wood and 22cm long.
The lion has a felt mane and his feet and arms are held onto the body with strong cotton string.
This is a very handsome lion with a lovely stripped rainbow coloured body.
We like this because: "A very sweet well made toy"


text:
Obiectivitatea este caracteristica măsurării științifice care poate fi testată independent de omul de știință individual (subiectul) care o propune.

Vezi și
 Intersubiectivitate

Bibliografie
 Ion Ceapraz, Tiberiu Nicola, Conceptul de realitate obiectivă - Considerații logico-epistemlogice, Editura Scrisul Românesc, Craiova, 1976

Filozofia științei

redpajama_set_name: RedPajamaWikipedia


text:
Q: How to revoke old OpenPGP keys? I've been foolish over the years and created a few OpenPGP keys for various reasons (mostly self teaching) and never revoked any of them or changed them etc before re-installs or whatnot.
Anyhow I was wondering if there was a way to fix my mistakes,  I have a list of all the previous keys I've used on Ubuntu's keyserver and was wondering if there was a way to re-import and revoke them or are they a lost cause.
I've since learned my errors and abide by a strict backup/revoke policy now.

A: It depends on whether you still have the private key, or not.

*

*Having access to the private key:
You're lucky, and will be able to revoke the key. It is as easy as running gpg --edit-key [key-id]. Inside the edit menu, run revkey. Import the revocation certificate if needed (gpg --import [file]), and send it to the key servers (gpg --send-keys [key-id]).

*Having no access to the private key:
This is very bad, as you're now not the key owner any more, but an "evil attacker".
Short answer: You're out of luck an will not be able to remove the keys, they will stay forever.
Long answer, with some perspective:

*

*In future times, it might be possible to brute-force old RSA 1024 keys within a reasonable amount of computing time. But don't expect this happen soon. Quantum computers might change this situation, once they actually arrive.

*There is another thing you can do to at least hint that you're not using these keys any more: OpenPGP knows so-called designated revocations, where a key may be revoked by another one. You could use your newest key to generate such revocations, but be aware these will not really be valid (as the old keys very likely did not specify your new one as designated revoker). But other users might observe this and draw their own conclusions. In the end, it's the best thing you can do.

Anyway: you're nor alone, this happens to a lot of people. If the keys do not have any certifications, it's pretty safe to ignore them anyway, as anybody could have created fake keys for your name (and even key ID).
GnuPG 2.1 automatically generates revocation certificates together with new keys. Make sure to generate one manually if using an older version, and also make sure to have a save backup of this certificate: I recommend creating a QR code (qrencode is helpful here) and print it on a piece of paper you could also hand over to a trusted person (the only thing that could happen is this person maliciously revokes your key, but cannot gain further access).

redpajama_set_name: RedPajamaStackExchange


We are seeking a Network & Systems Administrator that has experience working for a Managed Services Provider (MSP) or IT Services firm. Knowledge of SMB technology is highly desired and will be compensated competitively. This is primarily a projects/deployments role, but some reactive support will be required.
This is best characterized as a Tier II-III role that offers quick advancement, bonuses with a flexible career path into Management, Consulting, Team Lead/Coaching/Training, Network Engineering or Project Management. The IT Network & Systems Administrator will be part of a fast growing Cloud/MSP that has been in business for over 10 years, headquartered in Calabasas, CA, boasting an international presence.
Office environment is intensely collaborative and will have you working with bleeding edge technologies from Cisco and allow you to work with some of the brightest minds in the industry.
Benefits: 401(k), 4 certifications in first 2 years, 4 weeks starting vacation and 100% health coverage.


The Nucleus-Z Explorer is an ergonomic desk that provides a built in second tier and two (2) four space rack units, as well as ample work area on the desktop surface. Built using powder coated medium density fiberboard, the Nucleus Z gives you an ample workspace within a a compact (but not too small) frame. Sturdy, stylish, and perfect for when ambition exceeds the confines of your workspace, the Nucleus-Z Explorer will change your workspace for the better.


As Fayette County Property Valuation Administrator David O'Neill reported in his annual real estate assessment, there is an "encouraging trend" happening in the Fayette County real estate market, as evidenced by 17% more homes being sold in 2012 than 2011.
Click here to read the Real Estate Report in the Southsider.
Click here to read the additional article in the Southsider.


text:
For Equity, Presidency Should go to the South East - Afenifere
More from Hard Facts
Wednesday, April 27th, 2022 12:46pm
Ahead of the 2023 general election, Nigerians across various socio-political groups are beginning to make clear their positions on where the presidency should go.
This time it was the turn of the leader of the Afenifere socio-political group, Pa Ayo Adebanjo.
In his interview with host Sandra Ezekwesili on Nigeria Info's Hard Facts, Adebanjo said that "the president should come from the South East in the interest of equity and justice."
He noted that it's only fair for the South East to get its turn.
In addition, Adebanjo advocated for the creation of an all-inclusive constitution instead of the constitution currently in place, which he believes belongs to the military.
"I Was Tortured at Home and Also Tortured at School, with No One to Report to" - Caller
According to the World Health Organization, abuse or maltreatment of children can have severe short- and long-term effects on a child's physical, mental, and sexual well-being.
Do You Want Your Children To Have Your Candidate's Character?
Would you wish your children/wards to have the character of the person you intend to vote for in the 2023 elections?
Oil Theft: There is Connivance with the Gatekeepers - Petroleum Technical Expert
"The Nigerian government knows that crude oil theft in Nigeria without the connivance of the gatekeepers, cannot happen."


text:
Ex-UAW official to serve balance of sentence at home
DETROIT — A former United Auto Workers vice president convicted of corruption has been released from prison to serve his sentence under home confinement, his attorney said.
The U.S. Bureau of Prisons has been moving many prisoners because of the risk of the coronavirus. Norwood Jewell, 62, was at a low-security site in Oxford, Wisconsin.
Jewell has been serving a 15-month sentence for a scheme that involved cash from a job training center in Detroit.
"He has been moved from Oxford, but he is still serving his sentence," defense attorney Michael Manley told MLive.com.
More:Ex-UAW president Gary Jones arraigned in a most unusual fashion
Jewell's plea deal listed $60,000 in meals and golf paid with training center credit cards. Credit cards also were used for more than $40,000 in purchases for Jewell and others.
More:Ex-UAW President Gary Jones to be arraigned via video this week
Since 2017, nine union officials and a late official's spouse have pleaded guilty in the government's investigation, which has stretched from the UAW's coffers to a job training center funded by Fiat Chrysler. Some officials took kickbacks from union contractors.
A guilty plea is expected soon from Gary Jones, a former UAW president.


A plumber has lost his employment tribunal even though the Supreme Court backed his claim, that he was on the staff of a company who said he was self-employed.
Pimlico Plumbers has today won an Employment Tribunal in Croydon, brought by one of the firm's former plumbers Gary Smith, who believed he was entitled to holiday pay.
Chief executive Charlie Mullins says he will donate the cash to charity, as well as wanting to sue for reputational damages.
Pimlico chief executive Charlie Mullins, a prominent ant-Brexit campaigner – said: "While the Supreme Court deemed him to be a 'worker' and entitled to associated rights, the tables have been turned and common sense prevailed in the actual Employment Tribunal and Mr Smith has been told that he wasn't entitled to a penny.
"This decision is a vindication of everything that Pimlico Plumbers stands for. It also sends a message to those who have taken advantage of this case to peddle their poisonous bile about my company, and that they are in truth just a bunch of small-minded haters. I think that I have a case to sue for damages since there are some serious and obvious issues of reputational harm at stake here, which I am eager to pursue. After the tribunal's decision I have asked my lawyers to go after costs from Mr Smith, which will be donated to charity.
Pictured is Mullins outside the Supreme Court when it ruled against him last June.


Oh is it Iris season already? I can't wait to get back to Tokyo and go to the Imperial palace garden to take pictures!
Oh, Lynn, not sure if you're going to make it in time.
Keiko, I'm sorry I made you homesick! But surely England has enough gorgeous greenery to make up for anything you miss back home...?


38-year-old male patient who had total hip arthroplasty surgery for the treatment of coxarthrosis 5 years ago due to a childhood hip septic arthritis was admitted to our department. He had a complaint of left hip pain while walking and infected drainage from the iliac region which had started approximately 6 months ago (Figure 1A). After the laboratory results of high sedimentation rate and C-reactive protein and positive culture of drainage, the patient was operated again with the diagnosis of septic hip arthroplasty and an antibiotic spacer was used for the control of the infection (Figure 1B). After the treatment of the infection 9 months later with appropriate intravenous antibiotics, the patient was re-operated again with a revision hip arthroplasty surgery (Figure 1C). In the surgery, acetabular reconstruction was achieved with a modular coned hemi-pelvic implant (MUTARS®) (Modular Universal Tumor And Revision System, Implant cast, Buxtehude, Germany). The implant was uncemented and fits into the ilium with no additional screw fixation. The femoral stem was modular and uncemented. After surgery, partial weight bearing was allowed for 8 weeks and then patient had full-weight bearing with no sign of infection.
Figure 1: Hip arthroplasty surgery.
Bahtiyar Haberal, Department of Orthopaedics and Traumatology, Baskent University Hospital, Marasel Fevzi Cakmak Cad. 10. sok No: 45, 06490 Bahcelievler-Ankara, Turkey, Tel: +9031-2203-6868, Fax: +90-312-223-73-33.
© 2018 Haberal B, et al. This is an open-access article distributed under the terms of the Creative Commons Attribution License, which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited.


Nous sommes spécialisés Applied In Chain Link Fence fabricants et fournisseurs / usine de la Chine. Vente en gros Applied In Chain Link Fence avec des produits de haute qualité comme low price / cheap, l'un des Applied In Chain Link Fence} grandes marques chinoises, SHIJIAZHUANG QUNKUN METAL PRODUCTS CO.,LTD.
Wholesale Applied In Chain Link Fence from China, Need to find cheap Applied In Chain Link Fence as low price but leading manufacturers. Just find high-quality brands on Applied In Chain Link Fence produce factory, You can also feedback about what you want, start saving and explore our Applied In Chain Link Fence, We'll reply you in fastest.


We all know Action Bronson likes food, but did you know the extent of rappers' obsession?
The festival centred on sonic innovation runs this weekend.
Kendrick Lamar, Rihanna, Kehlani and Travis Scott are among his subjects.


text:
This application makes use of the following third party libraries:

## Alamofire

Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

## CryptoSwift

Copyright (C) 2014 Marcin Krzyżanowski <marcin.krzyzanowski@gmail.com>
This software is provided 'as-is', without any express or implied warranty.

In no event will the authors be held liable for any damages arising from the use of this software.

Permission is granted to anyone to use this software for any purpose,including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

- The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation is required.
- Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- This notice may not be removed or altered from any source or binary distribution.

## SwiftyJSON

The MIT License (MIT)

Copyright (c) 2016 Ruoyu Fu

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

## WebyclipSDK

Copyright (c) 2016 Nimrod Ben Yaakov <nimiby@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

## youtube-ios-player-helper

Copyright 2014 Google Inc. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Generated by CocoaPods - https://cocoapods.org