text:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
 * CodeIgniter Twitter Library.
 * Do whatever you want with this library.
 * It uses the tmhOauth library from themattharris. All credits to him.
 *
 * @author Demostenes Garcia -> www.demogar.com + www.twitter.com/demogar
 * @version 0.1 (2011-01-13)
 *
 */
class Twitter {

	private $CI; // CodeIgnier super object (to handle CI functionality)
	private $consumer_key; // twitter
	private $consumer_key_secret; // twitter
	private $configs; // array of consumer key and secret
	public $tmhOAuth;
	public $userdata; // user data
	public $tempImage; // temporary avatar image, loaded locally

	function __construct()
	{
		$this->CI =& get_instance();

		// Loading the consumer key and consumer key secret from the config file
		$this->consumer_key = $this->CI->config->item("consumer_key");
		$this->consumer_key_secret = $this->CI->config->item("consumer_key_secret");

		$this->configs = array(
			'consumer_key'		=> $this->consumer_key,
			'consumer_secret'	=> $this->consumer_key_secret
		);

		// Init the tmhOAuth
		$this->tmhOAuth = new tmhOAuth($this->configs);
	}

	/**
	 * Get the Access Token and stores it in the session for future usage
	 *
	 * @param string $oauth_verifier
	 * @return void
	 * @author demogar
	 */
	public function getAccessToken($oauth_verifier)
	{
		$this->tmhOAuth->config['user_token']  = $this->CI->session->userdata("o_oauth_token");
		$this->tmhOAuth->config['user_secret'] = $this->CI->session->userdata("o_oauth_token_secret");

		$this->tmhOAuth->request('POST', $this->tmhOAuth->url('oauth/access_token', ''), array(
			'oauth_verifier' => $oauth_verifier
		));

		$response_access = $this->tmhOAuth->extract_params($this->tmhOAuth->response['response']);
		$access_tokens = array(
			"a_oauth_token"			=> $response_access["oauth_token"],
			"a_oauth_token_secret"	=> $response_access["oauth_token_secret"]
		);

		$this->CI->session->set_userdata($access_tokens);
	}

	/**
	 * Get the OAuth Token. It will be used to obtain the Access Token
	 *
	 * @param string $callback
	 * @return void
	 * @author demogar
	 */
	public function getOauthToken($callback)
	{
		$this->tmhOAuth->request('POST', $this->tmhOAuth->url('oauth/request_token', ''), array(
			'oauth_callback' => $callback
		));

		if ( $this->tmhOAuth->response['code'] == 200 ) {
			$response		= $this->tmhOAuth->extract_params($this->tmhOAuth->response['response']);
			$oauth_tokens	= array(
				"o_oauth_token"			=> $response["oauth_token"],
				"o_oauth_token_secret"	=> $response["oauth_token_secret"]
			);
			$this->CI->session->set_userdata($oauth_tokens);
			header("Location: " . $this->tmhOAuth->url("oauth/authorize", "") . "?oauth_token=" . $response["oauth_token"]);
		} else {
			show_error( $this->tmhOAuth->pr(htmlentities($this->tmhOAuth->response['response'])) );
		}
	}

	/**
	 * Stores the User's data under the userdata public var
	 *
	 * @return void
	 * @author demogar
	 */
	public function getUserData()
	{
		$this->tmhOAuth->request("GET", $this->tmhOAuth->url("1/account/verify_credentials"));
		$this->userdata = json_decode($this->tmhOAuth->response["response"]);

		if ( $this->tmhOAuth->response["code"] != 200 ) {
			show_error( $this->tmhOAuth->response["code"] );
		}
	}

	/**
	 * Get the Avatar URL
	 *
	 * @param string $size = size of the image (normal or bigger)
	 * @return void
	 * @author demogar
	 */
	public function getAvatarUrl($size = "bigger")
	{
		$possible_sizes = array("bigger", "normal", "mini");
		if ( $this->userdata->screen_name != NULL && in_array($size, $possible_sizes) ) {
			$this->tmhOAuth->request("GET", $this->tmhOAuth->url("1/users/profile_image/" . $this->userdata->screen_name), array(
				'screen_name'	=> $this->userdata->screen_name,
				'size'			=> $size
			));

			if ( $this->tmhOAuth->response["code"] == 302 ) {
				// This contains the URL for the image
				return $this->tmhOAuth->response["headers"]["location"];
			} else {
				show_error( $this->tmhOAuth->response["code"] );
			}
		} else {
			show_error("
You are not logged in or you specified a wrong size
");
		}
	}

	/**
	 * Get the Original Sized Avatar
	 *
	 * @return The original sized avatar
	 * @author demogar
	 */
	public function getOriginalAvatar() {
		// get the regular sized avatar
		$url = $this->userdata->profile_image_url;

		// save the extension for later
		$ext = strrchr($url, '.');

		// strip the '_normal' suffix and add back the extension
		return substr($url, 0, strrpos($url, '_')) . $ext;
	}

	/**
	 * Download the Avatar from Twitter and store it locally
	 *
	 * @return void
	 * @author demogar
	 */
	public function downloadAvatar()
	{
		// Random image name
		$this->tempImage	= $this->userdata->screen_name . "_avatar.png";
		$this->path			= FCPATH . 'tmp/' . $this->tempImage;

		// Download image and save at the application/tmp folder
		$url	= $this->getAvatarUrl();
		$ch	= curl_init($url);
		$fp	= fopen($this->path, 'wb');
		curl_setopt($ch, CURLOPT_FILE, $fp);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_exec($ch);
		curl_close($ch);
		fclose($fp);
	}

	/**
	 * Add a user to the following list (add as a friend)
	 *
	 * @param string $user = the screen_name o id
	 * @param string $type = if we are adding it as a scree_name or as a id
	 * @return void
	 * @author demogar
	 */
	public function followUser($user = NULL, $type = 'screen_name')
	{
		if ( $user != NULL ) {
			// Already friends?
			if ( ! $this->checkFriendship($this->userdata->screen_name, $user) ) {
				$this->tmhOAuth->request('POST', $this->tmhOAuth->url('1/friendships/create'), array(
					$type	=> $user
				), true, true);

				if ( $this->tmhOAuth->response['code'] != 200 ) {
					$error = "
Unable to add {$user} to your list of friends.
";
					$error .= "
Error code: " . $this->tmhOAuth->response['code'] . "
";
					$error .= "
Error: " . $this->errorMessage() . "
";
					show_error($error);
				}
			}
		} else {
			show_error("You must specify a user to follow");
		}
	}

	/**
	 * Verify the friendship between two different users
	 *
	 * @param string $user1 = screen name for the source user
	 * @param string $user2 = screen name for the target user
	 * @return boolean = return if the source user is following the target user
	 * @author demogar
	 */
	public function checkFriendship($user1, $user2)
	{
		$this->tmhOAuth->request("GET", $this->tmhOAuth->url("1/friendships/show"), array(
			'source_screen_name'	=> $user1,
			'target_screen_name'	=> $user2
		));

		if ( $this->tmhOAuth->response['code'] == 200 ) {
			$data = json_decode($this->tmhOAuth->response["response"]);

			if ( $data->relationship->source->following == 1 || $data->relationship->source->following === 't' || $data->relationship->source->following === 'true' ) {
				return TRUE;
			} else {
				return FALSE;
			}
		} else {
			$error = "
Errow while verifying the friendship between {$user1} and {$user2}.
";
			$error .= "
Error code: " . $this->tmhOAuth->response['code'] . "
";
			$error .= "
Error message: " . $this->errorMessage() . "
";
			show_error( $error );
		}
	}

	/**
	 * Commit the avatar to Twitter
	 *
	 * @param string $path = local path for the image
	 * @param string $image = image filename
	 * @return void
	 * @author demogar
	 */
	public function sendAvatarToTwitter($path = NULL)
	{
		if ( file_exists($path) && $path != NULL) {
			$this->tmhOAuth->request('POST', $this->tmhOAuth->url('1/account/update_profile_image'), array(
				'image' => '@' . $path . ';type=image/png'
			), true, true);

			// Error
			if ( $this->tmhOAuth->response['code'] != 200 ) {
				$error = "
Error while commiting the new Profile Picture.
";
				$error .= "
Error code: " . $this->tmhOAuth->response['code'] . "
";
				$error .= "
Error: " . $this->errorMessage() . "
";
				$error .= "
Path: " . $path;
				show_error($error);
			}
		} else {
			show_error("Your avatar doesn't exist in our system");
		}
	}

	/**
	 * Will send a tweet with the Text specified in the first parameter
	 *
	 * @param string $text = the tweet, max 140 chars
	 * @return void
	 * @author demogar
	 */
	public function sendTweet($text)
	{
		$this->tmhOAuth->request('POST', $this->tmhOAuth->url('1/statuses/update'), array(
			'status' => substr($text, 0, 140)
		));

		// Error? Return false
		if ( $this->tmhOAuth->response['code'] != 200 )
			return false;
	}

	public function errorMessage()
	{
		$information = json_decode($this->tmhOAuth->response["response"]);
		return $information->error;
	}

	/**
	 * Will verify is the user is logged in already
	 *
	 * @return boolean
	 * @author demogar
	 */
	public function isAuthed()
	{
		if ($this->CI->session->userdata('a_oauth_token') != NULL && $this->CI->session->userdata('a_oauth_token_secret') != NULL) {
			return TRUE;
		}
		return FALSE;
	}

}

/**
 * tmhOAuth
 *
 * An OAuth 1.0A library written in PHP.
 * The library supports file uploading using multipart/form as well as general
 * REST requests. OAuth authentication is sent using the an Authorization Header.
 *
 * @author themattharris
 * @version 0.3
 *
 * 28 September 2010
 */
class tmhOAuth {
  /**
   * Creates a new tmhOAuth object
   *
   * @param string $config, the configuration to use for this request
   */
  function __construct($config) {
    $this->params = array();
    $this->auto_fixed_time = false;

    // for ease of testing
    if (file_exists(dirname(__FILE__).'/_account.php')) {
      include '_account.php';
      if (isset($_accounts) && $config['consumer_key'] == 'YOUR_CONSUMER_KEY') :
        if ($config['user_token'] == 'A_USER_TOKEN')
          $config = array_merge($config, $_accounts['test_with_user']);
        else
          $config = array_merge($config, $_accounts['test']);
      endif;
    }

    // default configuration options
    $this->config = array_merge(
      array(
        'consumer_key'               => '',
        'consumer_secret'            => '',
        'user_token'                 => '',
        'user_secret'                => '',
        'use_ssl'                    => true,
        'host'                       => 'api.twitter.com',
        'debug'                      => false,
        'force_nonce'                => false,
        'nonce'                      => false, // used for checking signatures. leave as false for auto
        'force_timestamp'            => false,
        'timestamp'                  => false, // used for checking signatures. leave as false for auto
        'oauth_version'              => '1.0',

        // you probably don't want to change any of these curl values
        'curl_connecttimeout'        => 30,
        'curl_timeout'               => 10,
        // for security you may want to set this to TRUE. If you do you need
        // to install the servers certificate in your local certificate store.
        'curl_ssl_verifypeer'        => false,
        'curl_followlocation'        => false, // whether to follow redirects or not

        // streaming API
        'is_streaming'               => false,
        'streaming_eol'              => "\r\n",
        'streaming_metrics_interval' => 60,
      ),
      $config
    );
  }

  /**
   * Generates a random OAuth nonce.
   * If 'force_nonce' is true a nonce is not generated and the value in the configuration will be retained.
   *
   * @param string $length how many characters the nonce should be before MD5 hashing. default 12
   * @param string $include_time whether to include time at the beginning of the nonce. default true
   * @return void
   */
  private function create_nonce($length=12, $include_time=true) {
    if ($this->config['force_nonce'] == false) {
      $sequence = array_merge(range(0,9), range('A','Z'), range('a','z'));
      $length = $length > count($sequence) ? count($sequence) : $length;
      shuffle($sequence);
      $this->config['nonce'] = md5(substr(microtime() . implode($sequence), 0, $length));
    }
  }

  /**
   * Generates a timestamp.
   * If 'force_timestamp' is true a nonce is not generated and the value in the configuration will be retained.
   *
   * @return void
   */
  private function create_timestamp() {
    $this->config['timestamp'] = ($this->config['force_timestamp'] == false ? time() : $this->config['timestamp']);
  }

  /**
   * Encodes the string or array passed in a way compatible with OAuth.
   * If an array is passed each array value will will be encoded.
   *
   * @param mixed $data the scalar or array to encode
   * @return $data encoded in a way compatible with OAuth
   */
  private function safe_encode($data) {
    if (is_array($data)) {
      return array_map(array($this, 'safe_encode'), $data);
    } else if (is_scalar($data)) {
      return str_ireplace(
        array('+', '%7E'),
        array(' ', '~'),
        rawurlencode($data)
      );
    } else {
      return '';
    }
  }

  /**
   * Decodes the string or array from it's URL encoded form
   * If an array is passed each array value will will be decoded.
   *
   * @param mixed $data the scalar or array to decode
   * @return $data decoded from the URL encoded form
   */
  private function safe_decode($data) {
    if (is_array($data)) {
      return array_map(array($this, 'safe_decode'), $data);
    } else if (is_scalar($data)) {
      return rawurldecode($data);
    } else {
      return '';
    }
  }

  /**
   * Returns an array of the standard OAuth parameters.
   *
   * @return array all required OAuth parameters, safely encoded
   */
  private function get_defaults() {
    $defaults = array(
      'oauth_version'          => $this->config['oauth_version'],
      'oauth_nonce'            => $this->config['nonce'],
      'oauth_timestamp'        => $this->config['timestamp'],
      'oauth_consumer_key'     => $this->config['consumer_key'],
      'oauth_signature_method' => 'HMAC-SHA1',
    );

    // include the user token if it exists
    if ( $this->config['user_token'] )
      $defaults['oauth_token'] = $this->config['user_token'];

    // safely encode
    foreach ($defaults as $k => $v) {
      $_defaults[$this->safe_encode($k)] = $this->safe_encode($v);
    }

    return $_defaults;
  }

  /**
   * Extracts and decodes OAuth parameters from the passed string
   *
   * @param string $body the response body from an OAuth flow method
   * @return array the response body safely decoded to an array of key => values
   */
  function extract_params($body) {
    $kvs = explode('&', $body);
    $decoded = array();
    foreach ($kvs as $kv) {
      $kv = explode('=', $kv, 2);
      $kv[0] = $this->safe_decode($kv[0]);
      $kv[1] = $this->safe_decode($kv[1]);
      $decoded[$kv[0]] = $kv[1];
    }
    return $decoded;
  }

  /**
   * Prepares the HTTP method for use in the base string by converting it to
   * uppercase.
   *
   * @param string $method an HTTP method such as GET or POST
   * @return void value is stored to a class variable
   * @author themattharris
   */
  private function prepare_method($method) {
    $this->method = strtoupper($method);
  }

  /**
   * Prepares the URL for use in the base string by ripping it apart and
   * reconstructing it.
   *
   * @param string $url the request URL
   * @return void value is stored to a class variable
   * @author themattharris
   */
  private function prepare_url($url) {
    $parts = parse_url($url);

    $port = @$parts['port'];
    $scheme = $parts['scheme'];
    $host = $parts['host'];
    $path = @$parts['path'];

    $port or $port = ($scheme == 'https') ? '443' : '80';

    if (($scheme == 'https' && $port != '443')
        || ($scheme == 'http' && $port != '80')) {
      $host = "$host:$port";
    }
    $this->url = "$scheme://$host$path";
  }

  /**
   * Prepares all parameters for the base string and request.
   * Multipart parameters are ignored as they are not defined in the specification,
   * all other types of parameter are encoded for compatibility with OAuth.
   *
   * @param array $params the parameters for the request
   * @return void prepared values are stored in class variables
   */
  private function prepare_params($params) {
    // do not encode multipart parameters, leave them alone
    if ($this->config['multipart']) {
      $this->request_params = $params;
      $params = array();
    }

    // signing parameters are request parameters + OAuth default parameters
    $this->signing_params = array_merge($this->get_defaults(), (array)$params);

    // Remove oauth_signature if present
    // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
    if (isset($this->signing_params['oauth_signature'])) {
      unset($this->signing_params['oauth_signature']);
    }

    // Parameters are sorted by name, using lexicographical byte value ordering.
    // Ref: Spec: 9.1.1 (1)
    uksort($this->signing_params, 'strcmp');

    // encode. Also sort the signed parameters from the POST parameters
    foreach ($this->signing_params as $k => $v) {
      $k = $this->safe_encode($k);
      $v = $this->safe_encode($v);
      $_signing_params[$k] = $v;
      $kv[] = "{$k}={$v}";
    }

    // auth params = the default oauth params which are present in our collection of signing params
    $this->auth_params = array_intersect_key($this->get_defaults(), $_signing_params);
    if (isset($_signing_params['oauth_callback'])) {
      $this->auth_params['oauth_callback'] = $_signing_params['oauth_callback'];
      unset($_signing_params['oauth_callback']);
    }

    // request_params is already set if we're doing multipart, if not we need to set them now
    if ( ! $this->config['multipart'])
      $this->request_params = array_diff_key($_signing_params, $this->get_defaults());

    // create the parameter part of the base string
    $this->signing_params = implode('&', $kv);
  }

  /**
   * Prepares the OAuth signing key
   *
   * @return void prepared signing key is stored in a class variables
   */
  private function prepare_signing_key() {
    $this->signing_key = $this->safe_encode($this->config['consumer_secret']) . '&' . $this->safe_encode($this->config['user_secret']);
  }

  /**
   * Prepare the base string.
   * Ref: Spec: 9.1.3 ("Concatenate Request Elements")
   *
   * @return void prepared base string is stored in a class variables
   */
  private function prepare_base_string() {
    $base = array(
      $this->method,
      $this->url,
      $this->signing_params
    );
    $this->base_string = implode('&', $this->safe_encode($base));
  }

  /**
   * Prepares the Authorization header
   *
   * @return void prepared authorization header is stored in a class variables
   */
  private function prepare_auth_header() {
    $this->headers = array();
    uksort($this->auth_params, 'strcmp');
    foreach ($this->auth_params as $k => $v) {
      $kv[] = "{$k}=\"{$v}\"";
    }
    $this->auth_header = 'OAuth ' . implode(', ', $kv);
    $this->headers[] = 'Authorization: ' . $this->auth_header;
  }

  /**
   * Signs the request and adds the OAuth signature. This runs all the request
   * parameter preparation methods.
   *
   * @param string $method the HTTP method being used. e.g. POST, GET, HEAD etc
   * @param string $url the request URL without query string parameters
   * @param array $params the request parameters as an array of key=value pairs
   * @param string $useauth whether to use authentication when making the request.
   */
  private function sign($method, $url, $params, $useauth) {
    $this->prepare_method($method);
    $this->prepare_url($url);
    $this->prepare_params($params);

    // we don't sign anything is we're not using auth
    if ($useauth) {
      $this->prepare_base_string();
      $this->prepare_signing_key();

      $this->auth_params['oauth_signature'] = $this->safe_encode(
        base64_encode(
          hash_hmac(
            'sha1', $this->base_string, $this->signing_key, true
      )));

      $this->prepare_auth_header();
    }
  }

  /**
   * Make an HTTP request using this library. This method doesn't return anything.
   * Instead the response should be inspected directly.
   *
   * @param string $method the HTTP method being used. e.g. POST, GET, HEAD etc
   * @param string $url the request URL without query string parameters
   * @param array $params the request parameters as an array of key=value pairs
   * @param string $useauth whether to use authentication when making the request. Default true.
   * @param string $multipart whether this request contains multipart data. Default false
   */
  function request($method, $url, $params=array(), $useauth=true, $multipart=false) {
    $this->config['multipart'] = $multipart;

    $this->create_nonce();
    $this->create_timestamp();

    $this->sign($method, $url, $params, $useauth);
    $this->curlit($multipart);
  }

  /**
   * Make an HTTP request using this library. This method is different to 'request'
   * because on a 401 error it will retry the request.
   *
   * When a 401 error is returned it is possible the timestamp of the client is
   * too different to that of the API server. In this situation it is recommended
   * the request is retried with the OAuth timestamp set to the same as the API
   * server. This method will automatically try that technique.
   *
   * This method doesn't return anything. Instead the response should be
   * inspected directly.
   *
   * @param string $method the HTTP method being used. e.g. POST, GET, HEAD etc
   * @param string $url the request URL without query string parameters
   * @param array $params the request parameters as an array of key=value pairs
   * @param string $useauth whether to use authentication when making the request. Default true.
   * @param string $multipart whether this request contains multipart data. Default false
   */
  function auto_fix_time_request($method, $url, $params=array(), $useauth=true, $multipart=false) {
    $this->request($method, $url, $params, $useauth, $multipart);

    // if we're not doing auth the timestamp isn't important
    if ( ! $useauth)
      return;

    // some error that isn't a 401
    if ($this->response['code'] != 401)
      return;

    // some error that is a 401 but isn't because the OAuth token and signature are incorrect
    // TODO: this check is horrid but helps avoid requesting twice when the username and password are wrong
    if (stripos($this->response['response'], 'password') !== false)
     return;

    // force the timestamp to be the same as the Twitter servers, and re-request
    $this->auto_fixed_time = true;
    $this->config['force_timestamp'] = true;
    $this->config['timestamp'] = strtotime($this->response['headers']['date']);
    $this->request($method, $url, $params, $useauth, $multipart);
  }

  /**
   * Make a long poll HTTP request using this library. This method is
   * different to the other request methods as it isn't supposed to disconnect
   *
   * Using this method expects a callback which will receive the streaming
   * responses.
   *
   * @param string $method the HTTP method being used. e.g. POST, GET, HEAD etc
   * @param string $url the request URL without query string parameters
   * @param array $params the request parameters as an array of key=value pairs
   * @param string $callback the callback function to stream the buffer to.
   */
  function streaming_request($method, $url, $params=array(), $callback='') {
    if ( ! empty($callback) ) {
      if ( ! function_exists($callback) ) {
        return false;
      }
      $this->config['streaming_callback'] = $callback;
    }
    $this->metrics['start']          = time();
    $this->metrics['interval_start'] = $this->metrics['start'];
    $this->metrics['tweets']         = 0;
    $this->metrics['last_tweets']    = 0;
    $this->metrics['bytes']          = 0;
    $this->metrics['last_bytes']     = 0;
    $this->config['is_streaming']    = true;
    $this->request($method, $url, $params);
  }

  /**
   * Handles the updating of the current Streaming API metrics.
   */
  function update_metrics() {
    $now = time();
    if (($this->metrics['interval_start'] + $this->config['streaming_metrics_interval']) > $now)
      return false;

    $this->metrics['tps'] = round( ($this->metrics['tweets'] - $this->metrics['last_tweets']) / $this->config['streaming_metrics_interval'], 2);
    $this->metrics['bps'] = round( ($this->metrics['bytes'] - $this->metrics['last_bytes']) / $this->config['streaming_metrics_interval'], 2);

    $this->metrics['last_bytes'] = $this->metrics['bytes'];
    $this->metrics['last_tweets'] = $this->metrics['tweets'];
    $this->metrics['interval_start'] = $now;
    return $this->metrics;
  }

  /**
   * Utility function to create the request URL in the requested format
   *
   * @param string $request the API method without extension
   * @param string $format the format of the response. Default json. Set to an empty string to exclude the format
   * @return string the concatenation of the host, API version, API method and format
   */
  function url($request, $format='json') {
    $format = strlen($format) > 0 ? ".$format" : '';
    $proto  = $this->config['use_ssl'] ? 'https:/' : 'http:/';

    // backwards compatibility with v0.1
    if (isset($this->config['v']))
      $this->config['host'] = $this->config['host'] . '/' . $this->config['v'];

    return implode('/', array(
      $proto,
      $this->config['host'],
      $request . $format
    ));
  }

  /**
   * Utility function to parse the returned curl headers and store them in the
   * class array variable.
   *
   * @param object $ch curl handle
   * @param string $header the response headers
   * @return the string length of the header
   */
  private function curlHeader($ch, $header) {
    $i = strpos($header, ':');
    if ( ! empty($i) ) {
      $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
      $value = trim(substr($header, $i + 2));
      $this->response['headers'][$key] = $value;
    }
    return strlen($header);
  }

  /**
    * Utility function to parse the returned curl buffer and store them until
    * an EOL is found. The buffer for curl is an undefined size so we need
    * to collect the content until an EOL is found.
    *
    * This function calls the previously defined streaming callback method.
    *
    * @param object $ch curl handle
    * @param string $data the current curl buffer
    */
  private function curlWrite($ch, $data) {
    $l = strlen($data);
    if (strpos($data, $this->config['streaming_eol']) === false) {
      $this->buffer .= $data;
      return $l;
    }

    $buffered = explode($this->config['streaming_eol'], $data);
    $content = $this->buffer . $buffered[0];

    $this->metrics['tweets']++;
    $this->metrics['bytes'] += strlen($content);

    if ( ! function_exists($this->config['streaming_callback']))
      return 0;

    $metrics = $this->update_metrics();
    $stop = call_user_func(
      $this->config['streaming_callback'],
      $content,
      strlen($content),
      $metrics
    );
    $this->buffer = $buffered[1];
    if ($stop)
      return 0;

    return $l;
  }

  /**
   * Makes a curl request. Takes no parameters as all should have been prepared
   * by the request method
   *
   * @return void response data is stored in the class variable 'response'
   */
  private function curlit() {
    if (@$this->config['prevent_request'])
      return;

    // method handling
    switch ($this->method) {
      case 'GET':
        // GET request so convert the parameters to a querystring
        if ( ! empty($this->request_params)) {
          foreach ($this->request_params as $k => $v) {
            // Multipart params haven't been encoded yet.
            // Not sure why you would do a multipart GET but anyway, here's the support for it
            if ($this->config['multipart']) {
              $params[] = $this->safe_encode($k) . '=' . $this->safe_encode($v);
            } else {
              $params[] = $k . '=' . $v;
            }
          }
          $qs = implode('&', $params);
          $this->url = strlen($qs) > 0 ? $this->url . '?' . $qs : $this->url;
          $this->request_params = array();
        }
        break;
    }

    // configure curl
    $c = curl_init();
    curl_setopt($c, CURLOPT_USERAGENT, "themattharris' HTTP Client");
    curl_setopt($c, CURLOPT_CONNECTTIMEOUT, $this->config['curl_connecttimeout']);
    curl_setopt($c, CURLOPT_TIMEOUT, $this->config['curl_timeout']);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER, $this->config['curl_ssl_verifypeer']);
    curl_setopt($c, CURLOPT_FOLLOWLOCATION, $this->config['curl_followlocation']);
    curl_setopt($c, CURLOPT_URL, $this->url);
    // process the headers
    curl_setopt($c, CURLOPT_HEADERFUNCTION, array($this, 'curlHeader'));
    curl_setopt($c, CURLOPT_HEADER, FALSE);
    curl_setopt($c, CURLINFO_HEADER_OUT, true);

    if ($this->config['is_streaming']) {
      // process the body
      $this->response['content-length'] = 0;
      curl_setopt($c, CURLOPT_TIMEOUT, 0);
      curl_setopt($c, CURLOPT_WRITEFUNCTION, array($this, 'curlWrite'));
    }

    switch ($this->method) {
      case 'GET':
        break;
      case 'POST':
        curl_setopt($c, CURLOPT_POST, TRUE);
        break;
      default:
        curl_setopt($c, CURLOPT_CUSTOMREQUEST, $this->method);
    }

    if ( ! empty($this->request_params) ) {
      // if not doing multipart we need to implode the parameters
      if ( ! $this->config['multipart'] ) {
        foreach ($this->request_params as $k => $v) {
          $ps[] = "{$k}={$v}";
        }
        $this->request_params = implode('&', $ps);
      }
      curl_setopt($c, CURLOPT_POSTFIELDS, $this->request_params);
    } else {
      // CURL will set length to -1 when there is no data, which breaks Twitter
      $this->headers[] = 'Content-Type:';
      $this->headers[] = 'Content-Length:';
    }

    // CURL defaults to setting this to Expect: 100-Continue which Twitter rejects
    $this->headers[] = 'Expect:';

    if ( ! empty($this->headers)) {
      curl_setopt($c, CURLOPT_HTTPHEADER, $this->headers);
    }

    // do it!
    $response = curl_exec($c);
    $code = curl_getinfo($c, CURLINFO_HTTP_CODE);
    $info = curl_getinfo($c);
    curl_close($c);

    // store the response
    $this->response['code'] = $code;
    $this->response['response'] = $response;
    $this->response['info'] = $info;
  }

  /**
   * Debug function for printing the content of an object
   *
   * @param mixes $obj
   */
  function pr($obj) {
    echo '
';
    if ( is_object($obj) )
      print_r($obj);
    elseif ( is_array($obj) )
      print_r($obj);
    else
      echo $obj;
    echo '
';
  }

  /**
   * Returns the current URL. This is instead of PHP_SELF which is unsafe
   *
   * @param bool $dropqs whether to drop the querystring or not. Default true
   * @return string the current URL
   */
  function php_self($dropqs=true) {
    $url = sprintf('%s://%s%s',
      $_SERVER['SERVER_PORT'] == 80 ? 'http' : 'https',
      $_SERVER['SERVER_NAME'],
      $_SERVER['REQUEST_URI']
    );

    $parts = parse_url($url);

    $port = @$parts['port'];
    $scheme = $parts['scheme'];
    $host = $parts['host'];
    $path = @$parts['path'];
    $qs   = @$parts['query'];

    $port or $port = ($scheme == 'https') ? '443' : '80';

    if (($scheme == 'https' && $port != '443')
        || ($scheme == 'http' && $port != '80')) {
      $host = "$host:$port";
    }
    $url = "$scheme://$host$path";
    if ( ! $dropqs)
      return "{$url}?{$qs}";
    else
      return $url;
  }

  /**
   * Entifies the tweet using the given entities element
   *
   * @param array $tweet the json converted to normalised array
   * @return the tweet text with entities replaced with hyperlinks
   */
  function entify($tweet) {
    $keys = array();
    $replacements = array();
    $is_retweet = false;

    if (isset($tweet['retweeted_status'])) {
      $tweet = $tweet['retweeted_status'];
      $is_retweet = true;
    }

    if (!isset($tweet['entities'])) {
      return $tweet['text'];
    }

    // prepare the entities
    foreach ($tweet['entities'] as $type => $things) {
      foreach ($things as $entity => $value) {
        $tweet_link = "{$tweet['created_at']}";

        switch ($type) {
          case 'hashtags':
            $href = "#{$value['text']}";
            break;
          case 'user_mentions':
            $href = "@{$value['screen_name']}";
            break;
          case 'urls':
            $url = empty($value['expanded_url']) ? $value['url'] : $value['expanded_url'];
            $display = isset($value['display_url']) ? $value['display_url'] : str_replace('http://', '', $url);
            // Not all pages are served in UTF-8 so you may need to do this ...
            $display = urldecode(str_replace('%E2%80%A6', '…', urlencode($display)));
            $href = "{$display}";
            break;
        }
        $keys[$value['indices']['0']] = substr(
          $tweet['text'],
          $value['indices']['0'],
          $value['indices']['1'] - $value['indices']['0']
        );
        $replacements[$value['indices']['0']] = $href;
      }
    }

    ksort($replacements);
    $replacements = array_reverse($replacements, true);
    $entified_tweet = $tweet['text'];
    foreach ($replacements as $k => $v) {
      $entified_tweet = substr_replace($entified_tweet, $v, $k, strlen($keys[$k]));
    }
    return $entified_tweet;
  }
}

/* End of file Twitter.php */
/* Location: ./system/application/libraries/Twitter.php */


text:
Remember Reset
Skip Navigation LinksHome /Important Information /Important Info
American Heritage Life Insurance Company
Domicile State: Florida
Home Office: 1776 American Heritage Life Drive, Jacksonville, Florida 32224
California Certificate of Authority Number: 1769
Licensed in all states except New York. Also licensed in the District of Columbia,
Puerto Rico and the U.S. Virgin Islands.
First Colonial Insurance Company
Licensed in all states except California, Connecticut, New York and Wyoming.
Also licensed in the District of Columbia.
Allstate Northbrook Indemnity Company
Domicile State: Illinois
Administrative Office for Credit Products: 1776 American Heritage Life Drive, Jacksonville, Florida 32224
Credit Products marketed in Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, Georgia, Hawaii, Idaho, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maryland, Massachusetts, Michigan, Minnesota, Missouri, Montana, Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, North Dakota, Pennsylvania, Rhode Island, South Carolina, Tennessee, Utah, Vermont, Virginia, Wisconsin and Wyoming.
The generated results from a search may contain valuable business information that is privileged and confidential. If the displayed information does not pertain to your account, you are hereby notified that any disclosure, dissemination, copying or use of the information is strictly prohibited. Under the legal rights of AHiS, its agencies and clients, please immediately notify AHiS Customer Support of any instances where information displays that does not pertain to your account at reply@allstatedealerservices.com. Note that any waivers not yet accepted and finalized will not display.
This website provides access to Data generated by AHiS. AHiS is not responsible and assumes no liability for any manipulation of the Data obtained from the website or the reports the website generates.
This Web site is controlled, operated and intended for use only in the United States of America and its territories. We do not represent that materials on this Web site are appropriate or made available for use outside of the United States of America or its territories.
Descriptions or any other information related to our products on this Web site are not intended to constitute an offer of such products. All insurance products referred to in this Web site are subject to exclusions, limitations and reductions of benefits and may not be available for sale in all states or jurisdictions. For costs and complete details, contact your insurance Agent or call 800.621.4871.
Participation Programs
GAP Claims
Vehicle Service Contract
Excess Wear & Tear
Theft Deterrent Program
Paint & Fabric Defense
Complete Protection
F&I Support
Maintenance Program Portal
Important Info | Terms Of Use | GLB Privacy Notice |
Contact AHiS
General Questions/Claims: 800.741.4216
Licensing/Processing: 800.621.4871
Allstate Dealer Services is a marketing name for Pablo Creek Services, Inc., E.R.J. Insurance Group, Inc. d/b/a American Heritage Insurance Services, and First Colonial Insurance Company;
each of these entities is a member of the Allstate family of companies. ©2020 Allstate

redpajama_set_name: RedPajamaCommonCrawl


text:
Home Texas TX Dallas
Walking with Wisdom, PLLC
Licensed Professional Counselor, LPC-S
3500 Oak Lawn Avenue
Call Jennifer Furlong
Lower Greenville
M Streets
Do you have a teenager who seems to be struggling or who has gone through some major changes recently? They could be experiencing depression and anxiety. I am here to help. I can offer an assessment and provide guidance on next steps to get your teen back on track. I am also available for grief counseling if you or a loved one has gone through any losses and are still finding it difficult to cope. Everyone experiences loss multiple times throughout their life and I can help to guide you through it and come out better and healthier on the other side.
I personally have experienced several losses in my lifetime - as a child, as a teen and as an adult. I have multiple perspectives on loss and grief and am also certified in the Grief Recovery Method. I offer both individual grief counseling and group grief counseling. I am experienced at assessing people in crisis and providing a treatment plan.
I believe that if we have hope and keep looking forward to tomorrow it is possible to grow and change and live the fulfilling life that we were meant to live. I can understand where you've been and I have hope for where you are going. My goal is to guide you through the dark and help you to find the light of hope and happiness. I am ready to help!
Call or Email Walking with Wisdom, PLLC for a free phone consultation now - (214) 651-4292
License and State: 19179 Texas
Pay By: Cash, Check, Health Savings Account, Mastercard, Paypal, Visa
Not currently In-Network with any Insurance plans (but working on it). I am able to assist with filing an Out of Network claim.
Email us or call (214) 651-4292 with questions.
Walking with Wisdom, PLLC's Groups
Teen Girls High School Group
Discussing high school girl struggles in a group setting and offering support, understanding and guidance. Providing tools to help make it through some challenging times. Being a teen in our world today is not easy. Let's meet and help each other learn how to maneuver through these challenges.
Teen Talks - Info for Parents/Guardians of teens
Offering Teen Talks monthly on different topics impacting teenagers and providing info that parents might need. Some upcoming topics with include alcohol and drug use, self-harm behavior and suicidal thinking.
Married women's group
This group is for married women who are experiencing struggles in marriage. It can be difficult to share your life with one person and sometimes harder to raise children together. This group will offer some guidance and support for married women feeling a little lost in their lives.
Faith: Christian
Joyce Kay Hamilton, MLA, LPC
Last Modified: 29 Nov 2019
Walking with Wisdom, PLLC has been Verified by Psychology Today
Share Walking with Wisdom, PLLC's Profile
Email Walking with Wisdom, PLLC
Request a Video Call with Walking with Wisdom, PLLC
Searches containing Walking with Wisdom, PLLC
65+ Therapists in Dallas, TX
Academic Counseling Therapists in Dallas, TX
Academic Underachievement Therapists in Dallas, TX
Adolescents / Teenagers (14 to 19) Therapists in Dallas, TX
Adults Therapists in Dallas, TX
Anxiety Therapists in Dallas, TX
Bereavement Therapists in Dallas, TX
Bipolar Disorder Therapists in Dallas, TX
Child or Adolescent Therapists in Dallas, TX
Christian Counseling Therapists in Dallas, TX
Christian Therapists in Dallas, TX
Clinical Supervision and Licensed Supervisors - Therapists in Dallas, TX
Codependency Therapists in Dallas, TX
Cognitive Behavioral (CBT) Therapists in Dallas, TX
Coping Skills Therapists in Dallas, TX
Counseling Supervision Therapists in Dallas, TX
Culturally Sensitive Therapists in Dallas, TX
Cutting Therapists in Dallas, TX
Depression Therapists in Dallas, TX
Divorce Therapists in Dallas, TX
Domestic Abuse Therapists in Dallas, TX
Elders (65+) Therapists in Dallas, TX
Family Conflict Therapists in Dallas, TX
Family Systems Therapists in Dallas, TX
Family Therapists in Dallas, TX
Fears Therapists in Dallas, TX
Grief Therapists in Dallas, TX
Group Therapists in Dallas, TX
Individuals Therapists in Dallas, TX
Interpersonal Therapists in Dallas, TX
Life Transitions Therapists in Dallas, TX
Loss Therapists in Dallas, TX
Manic Depression Therapists in Dallas, TX
Mood Disorders Therapists in Dallas, TX
Motivational Interviewing Therapists in Dallas, TX
Mourning Therapists in Dallas, TX
Narcissistic Therapists in Dallas, TX
Oppositional Defiance Therapists in Dallas, TX
Paranoid Therapists in Dallas, TX
Parenting Therapists in Dallas, TX
Peer Relationships Therapists in Dallas, TX
Person-Centered Therapists in Dallas, TX
Personality Disorders Therapists in Dallas, TX
Phobia Therapists in Dallas, TX
Post-Partum Therapists in Dallas, TX
Post-Traumatic Stress Therapists in Dallas, TX
Postpartum Depression Therapists in Dallas, TX
Pregnancy Issues Therapists in Dallas, TX
Pregnancy, Prenatal, Postpartum Therapists in Dallas, TX
Prenatal Issues Therapists in Dallas, TX
Preteens / Tweens (11 to 13) Therapists in Dallas, TX
Psychoanalytic Therapists in Dallas, TX
Psychosis Therapists in Dallas, TX
Relationship Issues Therapists in Dallas, TX
Schizophrenia Therapists in Dallas, TX
School Issues Therapists in Dallas, TX
Seasonal Affective Therapists in Dallas, TX
Self Esteem Therapists in Dallas, TX
Self-Harming Therapists in Dallas, TX
Seniors Therapists in Dallas, TX
Sleep or Insomnia Therapists in Dallas, TX
Solution Focused Brief (SFBT) Therapists in Dallas, TX
Spirituality Therapists in Dallas, TX
Strength-Based Therapists in Dallas, TX
Suicidal Ideation Therapists in Dallas, TX
Thinking Disorders Therapists in Dallas, TX
Trauma and PTSD Therapists in Dallas, TX
Women's Issues Therapists in Dallas, TX
65+ Therapists in Oak Lawn, Dallas
Academic Counseling Therapists in Oak Lawn, Dallas
Academic Underachievement Therapists in Oak Lawn, Dallas
Adolescents / Teenagers (14 to 19) Therapists in Oak Lawn, Dallas
Adults Therapists in Oak Lawn, Dallas
Anxiety Therapists in Oak Lawn, Dallas
Bereavement Therapists in Oak Lawn, Dallas
Bipolar Disorder Therapists in Oak Lawn, Dallas
Child or Adolescent Therapists in Oak Lawn, Dallas
Christian Counseling Therapists in Oak Lawn, Dallas
Christian Therapists in Oak Lawn, Dallas
Clinical Supervision and Licensed Supervisors - Therapists in Oak Lawn, Dallas
Codependency Therapists in Oak Lawn, Dallas
Cognitive Behavioral (CBT) Therapists in Oak Lawn, Dallas
Coping Skills Therapists in Oak Lawn, Dallas
Counseling Supervision Therapists in Oak Lawn, Dallas
Culturally Sensitive Therapists in Oak Lawn, Dallas
Cutting Therapists in Oak Lawn, Dallas
Depression Therapists in Oak Lawn, Dallas
Divorce Therapists in Oak Lawn, Dallas
Domestic Abuse Therapists in Oak Lawn, Dallas
Elders (65+) Therapists in Oak Lawn, Dallas
Family Conflict Therapists in Oak Lawn, Dallas
Family Systems Therapists in Oak Lawn, Dallas
Family Therapists in Oak Lawn, Dallas
Fears Therapists in Oak Lawn, Dallas
Grief Therapists in Oak Lawn, Dallas
Group Therapists in Oak Lawn, Dallas
Individuals Therapists in Oak Lawn, Dallas
Interpersonal Therapists in Oak Lawn, Dallas
Life Transitions Therapists in Oak Lawn, Dallas
Loss Therapists in Oak Lawn, Dallas
Manic Depression Therapists in Oak Lawn, Dallas
Mood Disorders Therapists in Oak Lawn, Dallas
Motivational Interviewing Therapists in Oak Lawn, Dallas
Mourning Therapists in Oak Lawn, Dallas
Narcissistic Therapists in Oak Lawn, Dallas
Oppositional Defiance Therapists in Oak Lawn, Dallas
Paranoid Therapists in Oak Lawn, Dallas
Parenting Therapists in Oak Lawn, Dallas
Peer Relationships Therapists in Oak Lawn, Dallas
Person-Centered Therapists in Oak Lawn, Dallas
Personality Disorders Therapists in Oak Lawn, Dallas
Phobia Therapists in Oak Lawn, Dallas
Post-Partum Therapists in Oak Lawn, Dallas
Post-Traumatic Stress Therapists in Oak Lawn, Dallas
Postpartum Depression Therapists in Oak Lawn, Dallas
Pregnancy Issues Therapists in Oak Lawn, Dallas
Pregnancy, Prenatal, Postpartum Therapists in Oak Lawn, Dallas
Prenatal Issues Therapists in Oak Lawn, Dallas
Preteens / Tweens (11 to 13) Therapists in Oak Lawn, Dallas
Psychoanalytic Therapists in Oak Lawn, Dallas
Psychosis Therapists in Oak Lawn, Dallas
Relationship Issues Therapists in Oak Lawn, Dallas
Schizophrenia Therapists in Oak Lawn, Dallas
School Issues Therapists in Oak Lawn, Dallas
Seasonal Affective Therapists in Oak Lawn, Dallas
Self Esteem Therapists in Oak Lawn, Dallas
Self-Harming Therapists in Oak Lawn, Dallas
Seniors Therapists in Oak Lawn, Dallas
Sleep or Insomnia Therapists in Oak Lawn, Dallas
Solution Focused Brief (SFBT) Therapists in Oak Lawn, Dallas
Spirituality Therapists in Oak Lawn, Dallas
Strength-Based Therapists in Oak Lawn, Dallas
Suicidal Ideation Therapists in Oak Lawn, Dallas
Thinking Disorders Therapists in Oak Lawn, Dallas
Trauma and PTSD Therapists in Oak Lawn, Dallas
Women's Issues Therapists in Oak Lawn, Dallas


text:
11 potentially awesome movies still stuck in development hell
Somebody make them happen!
By Rosie Fletcher and Matt Hill
Hollywood's a tricky beast, and getting a movie made involves millions of people and bajillions of dollars. Or even pounds, occasionally. But it's still depressing when some of the coolest projects announced just don't seem to quite happen.
Especially when top bods are ploughing money into something like Ben Hur, which we totally could have told them wasn't a very good idea.
There are thousands of movies in development. Right now, there are in fact 28,413 movies listed on IMDb as "in development", and a lot of them are never going to see the light of day.
But these are the ones we really, really hope might get shuffled to the top of the pile again, simply because they clearly would've been awesome.
1. Neil Blomkamp's Alien
Neill Blomkamp/Instagram20th Century Fox
District 9 was exceptional, Chappie was cute and funny, and okay, Elysium wasn't very good. But Blomkamp is a director with flair and edge and his Alien movie just sounded really interesting.
There was talk of Newt and Hicks possibly making a return, Sigourney Weaver was well up for it, and the concept art just blew us away – but Alien: Covenant held things up, with Sir Ridley wanting his Prometheus sequel to come out first.
Now Blomkamp says the chances of it getting made at all are slim. Ah well, you never know, these things have a habit of reappearing.
2. BioShock
It's ironic that arguably the most literate, grand and movie-like video game of all time has not made it to the big screen, while disposable tosh like House of the Dead and Doom gets farted out with glee by Uwe Boll and their ilk. The reason, as ever, is money and audience.
Pirates of the Caribbean's Gore Verbinski, who signed on as director – and who we reckon would have nailed the atmosphere of the underwater city of Rapture – reckoned the project was just eight weeks from shooting before it was canned.
"It was devastating," he told IGN. "Everyone wants to protect their IP – it started to smell a little funky. I think at the time there had been some expensive R-rated movies that hadn't worked out."
Based on right-wing pin-up Ayn Rand's weighty tome on the art of selfishness, Atlas Shrugged, BioShock is an unapologetically adult, cerebral take on a supposed utopia that goes very wrong when all restrictions on scientific progress are removed, reducing the population to thieves, murderers and drug addicts, so a PG-13 was never quite going to cut it.
And with the game's developer Irrational closing since, this one may now be swimming with the fishes forever.
3. Beetlejuice 2
We're a bit torn about this one. Beetlejuice is an absolute classic, one of our favourites of the '80s when Tim Burton was at his peak. It was greenlit in 2016, with a script by Seth Grahame-Smith, and Winona Ryder and Michael Keaton potentially attached. But it's all gone a bit quiet since last year.
Thing is (arguably), Burton hasn't made an actually good live-action movie since Sleepy Hollow, or maybe Sweeney Todd if we're being generous. And the last thing we want is Beetlejuice ruined. So: "Beetlejuice, Beetlejuice," (but only if it's good) "Beetlejuice!"
4. The Crow
Rex Shutterstock
The original is gothic and sad but we really would like to see a remake. Trouble is, it's been through so many different hands we can't imagine ever seeing it come to life. Everyone and his dog has been attached to star, including Bradley Cooper, Mark Wahlberg, Tom Hiddleston, Jack Huston, Luke Evans and, currently in the frame, Jason Momoa.
It's gone through its fair share of directors too, including F J Gutierrez, Juan Carlos Fresnadillo and most recently Corin Hardy, who may or may not still be in. This one remains flapping about in the background.
5. Blood Meridian
Some say No Country for Old Men author Cormac McCarthy's bleak, brutal novel is unfilmable due to the unrelenting and extreme violence (it's about a teenage boy who joins a group of scalpers in the 1800s), but a few directors have had a crack.
Tommy Lee Jones was attached to direct at one point, later Ridley Scott was on board, and after that James Franco shot an extract starring Luke Perry and Dave Franco. Mercifully, the last version isn't happening. Most recently, Tye Sheridan and Vincent D'Onofrio were to play the leads – great casting, but not much use without a director.
6. Hancock 2
The first Hancock wasn't as well received as it could have been, probably because of its muddled second half, which took the cool anarchic principle of a drunk, careless, homeless superhero who annoys the city he lives in and made it into a convoluted love story about gods or something.
But that doesn't mean we couldn't still have a sequel, with Smith back in the beanie hat and all that Charlize Theron biz brushed under the carpet. Could be just what Smith needs.
7. Akira
This live-action manga adap has been in the works for yonks, and we're sort of glad earlier attempts didn't quite get off the ground, with actors including Ezra Miller, Robert Pattinson, Emile Hirsch, Paul Dano, Andrew Garfield, James McAvoy, Charlie Hunnam, Toby Kebbell and Zac Efron considered for the role of Tetsuo.
Post-Ghost in the Shell, it's unlikely they'd make it with without Japanese actors (you'd hope), and the most recent director attached is Jordan Peele, who made the very much loved Get Out. Get in, we say.
8. At The Mountains of Madness
Pretty much the only story by go-to gothic writer HP Lovecraft that hasn't been turned into a film – although it's not for want of trying by beardy horror-master Guillermo Del Toro.
The Pan's Labyrinth and Pacific Rim director has spent in excess of ten years trying to adapt the bloody thing, with Tom Cruise, James Cameron, ILM and a $150m budget all attached at one point.
Alas, the fear of so much money being thrown at a bleak, R-rated horror about ancient tentacled beasts in 1930s Antarctica spooked a succession of studios including Warner Bros, Universal and Legendary Pictures – even before Ridley Scott's Prometheus did something similar and made a fortune. "I think the R-rating should be worn as a badge of merit in promoting this movie," declared Del Toro to deaf ears a good five years before Deadpool broke down the door.
So where's this horror classic at now? Over, as far as Del Toro is concerned. "We did over 300 pieces of art, we did storyboards, we did models, we had a whole presentation," he told Collider just this month. "One day, I'll show you everything we did. You will cry, you will go, 'Why?'"
9. Gremlins 3
Not a horrible, cynical, ruin-your-childhood redo but another scrappy instalment of the satirical creature franchise would be welcome. Star Zach Galligan has said a sequel (not a reboot) is in the works, and Gremlins writer Chris Columbus is keen.
For our money we want series director Joe Dante back along with all the black humour and the ickiness. Could still happen.
10. The Sandman
Neil Gaiman's spectacular graphic novel series – featuring the embodiments of Dream, Death, Destiny, Desire, Despair, Delirium and Destruction – is crying out for a movie adap and one has been in the works for years at Warner Bros.
Neil Gaiman has said he'd love Terry Gilliam to bring his strange existentialist, surrealist work to life, although Joseph Gordon-Levitt was attached for a time. He's now dropped out and everything's gone quiet. The last we heard is that it might be turned into a TV show. Which we 'spose is alright if that's all we can have.
11. Pinocchio
Screw Beauty and the Beast (well okay, we really liked it), we can't stop thinking about how wonderful this proposed Disney adaptation from Guillermo del Toro might have been.
A dark update in stop-motion, we can picture it being a sort of nightmarish fantasy, Jan Svankmajer-style. It might still happen – although the fact that there's another Pinocchio optioned by Ron Howard with Robert Downey Jr attached may not bode well.
Movies Features
11 major movies stuck in development hell
7 awesome TV shows stuck in development hell as of 2018
6 huge movies which only just escaped development hell
6 TV shows stuck in development hell
7 most awesome shows in development hell
'Sub-Mariner' movie still in development


text:
<?php
use yii\helpers\Url;
 ?>password
<!DOCTYPE html>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="renderer" content="webkit">

    <title>修改交易密码</title>
    <meta name="keywords" >
    <meta name="description" >

    <link href="css/bootstrap.min.css?v=3.4.0" rel="stylesheet">
    <link href="font-awesome/css/font-awesome.css?v=4.3.0" rel="stylesheet">

    <link href="css/animate.css" rel="stylesheet">
    <link href="css/style.css?v=2.2.0" rel="stylesheet">

Hh

修改交易密码

            <form action="<?=Url::toRoute('site/tra_edit')?>" method="post" >

                    原交易密码:
                    <input type="password" class="number fl h_form_control" style="width:360px;"  name="tra_pwd" minlength="6"  maxlength="20" placeholder="请输入交易密码" required >

                    新交易密码:
                    <input type="password" class="number fl h_form_control" style="width:360px;"name="new_pwd1" minlength="6"  maxlength="20" placeholder="请设置6~20位交易密码"
                    required>
                    <input type="hidden" class="inputs " name="_csrf" value="<?= Yii::$app->request->csrfToken ?>" placeholder="请设置6~20位登录密码">

                    确认信交易密码:
                    <input type="password" class="number fl h_form_control" style="width:360px;"  name="new_pwd2" minlength="6"  maxlength="20"  placeholder="请输入新设置的密码" required>

                <input type="submit" id="submit" value="提交" class="l_zhanghao_bg" style="width:160px;">
                <input type="button"  value="返回"  onclick="window.history.back(-1);" class="l_zhanghao_bg" style="width:160px;">
            </form>

redpajama_set_name: RedPajamaGithub


text:
layout: relation
title: 'advmod:deg'
shortdef: 'advmod with degree modality'
udver: '2'
---

The _advmod:deg_ relation is used for adverbal modifiers of degree.

~~~ sdparse
Кӧть луныс вӧлі зэв мича. \n Even though the day had been quite beautiful.
advmod:deg(мича, зэв)

~~~

<!-- Interlanguage links updated Po lis 14 15:35:06 CET 2022 -->


A lovely and quite large etching by the Scottish marine artist Colin Hunter showing a Banff-registered fishing boat working with its harbour in the distance. Signed in pencil, this work is in its original frame and mount. Recently remounted and in good condition.
Posted in the Scottish Etchings category. Artist Colin Hunter.


Damn, that would've been perfect too as he was #27. Haven't owned anyone with that number since I had a Giants Ron Dayne jersey in 2002.
New pickup: Brand new with tags, 2011 World Series Albert Pujols St. Louis Cardinals authentic home jersey from Majestic, size 48. This is the last jersey he wore with the Cardinals (2011 Champions) before he signed with the Angels. I sold a Cardinals Pujols many years ago and I've finally recouped it.
el platano, bsv2.0, Chao321988 and 5 others like this.
Unfortunately all the patches are team-issued only. Caption patches and Walter Payton aren't publicly available. The Tom Benson patch used by the team is different than the retail version.
Your best best for a Brees pre-made authentic is a restock next summer.
skyizthalimit, gilagain and likeaboss2 like this.
You might want to try one out in the store if possible. @needsomejays is correct that sizing has changed over the years. I believe the current Adidas authentics are a lot more fitted looking than the previous Reebok Edge jerseys.
Demondecko, ahat20, mikegasol and 1 other person like this.
Demondecko, Hahahaha, ahat20 and 5 others like this.
ninjahood, mikegasol and disgusta like this.
Can I please can a legit check on this?
Legit. The patch and the arm band were likely added later. I know who the seller is from facebook.
@Chao321988 ebayer selling some Flex Base jerseys for the low.
mikegasol, robpzee612, Chao321988 and 2 others like this.
eastbayrudy007, jaypesoz, eyanks and 5 others like this.
My last pickup of 2018: 1975 Jose Cruz Houston Astros Mitchell & Ness jersey, size XL.
ninjahood, 1978S, likeaboss2 and 4 others like this.
My grandfather recently passed away from cancer. This Braves jersey was his. He wasn't really a baseball fan. Took him to a Braves game and while we were in the Game Used store he saw Wiley which was his middle name and had to buy it. The Lightning practice jersey was a Christmas gift from my mom. She got them for people in the family. Everyone called my grandpa Papa whether they were family or not.
cedric ceballos, bigdaddychacon, redmercury and 11 others like this.
Way late on this, but you're either a 46 or 50.
For comparison, I'm 6'1" / 185 and wear 54. Friend is a little bigger than you (5'8" or so) and fits 50.
ninjahood, bigdaddychacon, robpzee612 and 1 other person like this.


This Sunday at UCSA, "The 3 Truths of Sufficiency" Sunday, October 2, 11:00 a.m.
Rev. Linda Martella-Whitsett Week three of a five-week study series, Living a Prosperous Life: Hopeful and Full of Possibilities. Based on the book The Soul of Money by Lynne Twist Join Rev. Linda Martella-Whitset as she expands on these three universal Truths of sufficiency: 1. Money is Like … [Read more...] about This Sunday at UCSA, "The 3 Truths of Sufficiency" Sunday, October 2, 11:00 a.m.
Come Celebrate the Milestones, Sunday, October 2, 11:00 a.m. Every Sunday Service is a celebration at Unity of SA, but the first Sunday of the month is especially festive because we celebrate you and your milestones! During our service, we'll honor all those with birthdays or anniversaries in the … [Read more...] about Celebration Sunday This Week!


Hi,I am so Happy to create this account One Of the best Marketplace Fiverr.I want to give 100% deliveries on Exact time and my aim is to make client satisfaction.
Hello, @designloverr11 welcome to this awesome community. Wishing your regular success from Fiverr.
Welcome designloverr11. Wish you all the best for your journey on fiverr.
welcome to the family and all the best!
Welcome to Fiverr community and Best of luck.


text:
International architectural historians honor USC scholars
Vittoria Di Palma and Amy Ogata write award-winning books on desolate regions and the history of architecture
BY Allison Engel
The books of two USC professors, Vittoria Di Palma of the USC School of Architecture, and Amy Ogata, chair of art history at the USC Dornsife College of Letters, Arts and Sciences, have been honored at the international conference of the Society of Architectural Historians in Pasadena.
Di Palma received the Elisabeth Blair MacDougall Book Award, which recognizes the most distinguished work of scholarship in the history of landscape architecture or garden design, for Wasteland: A History, published by Yale University Press. The book previously was honored with the Louis Gottschalk Prize by the American Society for Eighteenth-Century Studies, a John Brinckerhoff Jackson Book Prize by The Foundation for Landscape Studies, and an award from The American Publishers Awards for Professional and Scholarly Excellence.
Architectural historian Di Palma spent several years researching desolate areas ravaged by culture and produced the first history of the concept of wasteland — toxic, derelict and abandoned sites. Her efforts produced an engaging history of landscape and land use that explains how these forlorn places have shaped our conceptions of landscape.
Distinguished scholarship
Ogata accepted the Alice Davis Hitchcock Book Award given to the most distinguished work of scholarship on the history of architecture published by a North American scholar. Designing the Creative Child: Playthings and Places in Midcentury America was published by the University of Minnesota Press.
A review described the book as demonstrating "how new ideas about children's natural creativity and expressiveness … were materialized, packaged and disseminated through a range of designed objects and spaces that included educational toys, play structures, suburban playrooms, schools and children's museums."
Founded at Harvard University in 1940, the Society of Architectural Historians is an organization of academics, preservationists, architects and members of the public interested in studying the built environment that boasts members in 56 countries. It publishes a journal, creates curricula for K-12 education and received a $1.5 million National Endowment for the Arts grant to document the 100 most iconic buildings in each state. Images and information on these 5,000 sites will be available to the public on the society's website.
The president of the society for the past two years has been USC Architecture Associate Professor Ken Breisch, who founded USC's graduate Historic Preservation Program (now called Heritage Conservation) and teaches popular courses on the modern tradition in Southern California and the history of American architecture and urbanism.
The society's conference featured architectural tours throughout Southern California, including projects by John Lautner, Myron Hunt, Rudolph Schindler, Richard Neutra and Gregory Ain, and areas of architectural interest in Frogtown, Claremont, Boyle Heights and Irvine, among other locations.
More stories about: Architecture, Art History, Awards, Publications
Ken Breisch holds a textile block in the 1923 Samuel Freeman House in the Hollywood Hills. Designed by Frank Lloyd Wright, it was bequeathed to USC and damaged in the Northridge earthquake. (USC Photo/Gus Ruelas)
Ken Breisch serves as architectural historian in chief
Assistant professor pens a comprehensive book on American libraries and leads national historians group.
Wastelands provide a rich history for architectural historian
Vittoria Di Palma's exhaustive research yields a look at landscape and land use through the ages.
Crosstown rivals USC and UCLA battle in the final track and field meet of the regular season on April 29. (USC Photo/John McGillen)
USC captures 2018-19 Crosstown Cup over UCLA
It's the 11th Trojan victory in the 18-year history of the head-to-head all-sports competition for L.A. sports superiority.
Honored at Saturday's Alumni Awards were (clockwise from top left) Herb Goodman, Michael Nyman, Kevin Xu, Lloyd Greif, Sandra Evers-Manley, Kathleen L. McCarthy and Kathy Goodman.
Prominent Trojans recognized at 86th annual USC Alumni Awards
Kathleen L. McCarthy, philanthropist and USC trustee, receives the university's highest alumni honor, the Asa V. Call Alumni Achievement Award.


Richard Wysk, PhD, is a Dopaco Distinguished Professor with the Department of Industrial and Systems Engineering at North Carolina State University.
Dr. Wysk has spent most of his professional career as an endowed professor at three different universities (Penn State University, Texas A&M University and NC State), where he has developed and evolved many successful programs and centers focused on modern manufacturing. He is the (co)author of nine books and more than 200 journal publications. He was the founding Co-Director of the NCSU/UNC Rehabilitation Engineering Center as well as the founding partner of a medical device company, AIONX Inc. housed in State College, PA. He has held industry positions at GE and Caterpillar Inc.


I think kindness is undervalued. We lump it with words like "nice" and "good" which are often used to describe a state of being. But when I think of kindness, I don't think of an internal state, I think of its expression.
Thank God for his hernia.
Alejandrino Alvarez will forever thank God that his hernia caused him so much pain and swelling that he finally made an appointment with a doctor a year later. Though the hernia was the patient's cause of pain, our team knew that the priority was to rule out the possibility of cancer.
Including and loving our own.
Belonging. It's what we all want deep down, inclusion. Belonging is being loved for exactly who you are, being seen and valued, being cared for.
Unexpected news can be received in a variety of ways. Our response to the unexpected exposes the genuine state of our emotional and spiritual life, and informs the employ of our coping skills. How are we going to handle "x" ?


text:
Shop in United States
Store Locator Shop in United States
MIYA Lantern
Lamps inspired by the soft atmospheres of the Armani Privé club in Milan. All versions feature an iconic lamellar cube that filters light in a very cozy and luxurious way. The lantern version (large and small) are in greige painted wood and has a LED working with a battery device
This item is not available online.
Please visit the Store Locator and use the "Armani/Casa" filter to find the item in a store near you.
Rechargeable lamp
Wooden structure
LED illuminating system
By clicking on the "Register" key, you declare that you are over 16 and provide your consent to have your personal data processed in order to receive newsletters and other advertising communications from Giorgio Armani S.p.A. and its affiliated entities worldwide (hereinafter, "GIORGIO ARMANI") in your email inbox. Your data will be kept for the period of time needed to accomplish the objectives for which it was collected; you may revoke your consent at any time, without this prejudicing the lawful nature of the processing that was completed prior to revocation. The Data Controller is Giorgio Armani S.p.A., Via Borgonuovo 11, 20121 Milan; the Data Protection Officer may be contacted at: dpo@giorgioarmani.it; You may exercise your rights (Art. 15 et seq. GDPR), including the right to access your data, to have it deleted or transferred, and/or to request further information by writing to privacy@giorgioarmani.it. You may also submit a claim to the supervisory authority. For further information consult the Privacy Policy.


Check out the annual holiday open house at The Spare Room (Vintage Flea Market) on Saturday, November 10th, 2018 at 10:00 am. Enjoy and shop from showcases fabulous holiday decor, furniture, home decor, vintage & boutique items. Enjoy sweet treats & storewide 10% off your purchases! Don't miss this fun and festive event!


James Dyson, a vocal Brexiteer, will move the headquarters of his vacuum cleaner company, Dyson, from the U.K. to Singapore as the company thinks about "future-proofing" the business, The Guardian reports.
Between the lines: Dyson CEO Jim Rowan said the move has "nothing to do with Brexit," as the company has already moved most of its production to Singapore. But many companies are leaving the U.K. because of Brexit. Airbus announced it might be leaving Britain, and BlackRock, JPMorgan Chase, Bank of America and Citigroup are redirecting thousands of employees to continental Europe.


Stone Crushing Plant… Ethiopia Price Of ... Contact Supplier used mobile crusher in ethiopia . ... Ethiopia Price Of Portable Stone Crushing Plant,Portable Crusher ... Stone Crusher Machine in India Stone Crushing Machine for Stonein europe european type jaw ... Contact Supplier ethiopian portable crusher from taicheng .
1 Set/Sets mobile crusher plant for sale in ethiopia Contact Supplier sand making in Ethiopia, stone crusher in jaw crusher (portable crushing plant) Crusher Plant Stone Crushing Plants Fabo Machinery is a professional Concrete mixing plants manufacturer in Turkey, we mainly offer Stone Crushers, concrete plants,mobile concrete plants and, etc.
Feb 13 2016 Ethiopia stone crusher importers ethiopia stone crushing plant is the Machine Importers Buyers and .stone crusher price in ethiopia. stone crusher price in ethiopia New Ethiopia HCV buildig block production machine required in Ethiopia. i want to buy machin Stone crusher price request from Ethiopia.
limestone mobile crusher supplier, in india liscence ap limestone powder plants in and suppliers of lime stone crusher from, cone crusher made in italy cost; Live Chat; Used Limestone Crusher Price In Nigeria. lime stone crusher plant in, Nigeria In Ethiopia In Ethiopia Limestone Crusher machinery In Nigeria, from germany nigeria italy Chinese .
80 120 mesh cone mobile crusher plant price ethiopia. ... ethiopia stone crushing plant mtmcrusher cselohim. ... Jul 14 2016 Ethiopia Price Of Portable Stone Crushing PlantPortable Crusher Plant Manufacturer From China Mobile Stone Crushing Plant Portable rock Send Enquiry Get More Info mobile crusher plant china gatewaypreschoolorg.
cruserhing plant with 100 tons per hour - crusher plants for sale . 100-120 Tons Per Hour River Stone Crushing Plant For za krews.co.in in ethiopia 150 tons per hour crusher a flow ball mill 10 ton per hour cost price 100 ton stone crushing plant 2 to 5 tons per hour industrial mining jaw crushers south africa .
stone crusher machine mini plant price. Mini Crusher And Mini Mobile Crushing Plant - . Mini Crusher And Mini Mobile Crushing Plant. ... ore jaw crusher supplier in ethiopia. portable crusher in potash crushing plant in ethiopiaportable crusher in potash crushing plant in ethiopia portable crusher in iron ore mining luckyengineering.
Stone Crusher Price In Ethiopia . concrete crusher eBay. Find great deals on eBay for concrete crusher mini diggers. Shop with confidence. ... stone crusher machine in ethiopia,price for sale.. .. hargal stone crusher plant 150 tph portable jaw crushers used in australia crusher plant for sale uae.


We are aware that our success as a company is success of our employees. We always try to support our employees both educational and different activities. We care for the education of youths.
Faz hires high qualified employees, which most of them are educated and trained within Faz education program. Since 1986, we have been supporting the training of our young people with the Apprenticeship School approved by the Ministry of National Education, which was established for the purpose of raising qualified intermediate staffs that both our company and the industry need. After three years of training, we also offer jobs to our young people.


Today, I am reviewing Bar Taco, which is located on 12th South here in Nashville, TN. It is an absolute must if you plan on visiting the area! The atmosphere is truly something special and is a wonderful place to grab some food with loved ones or friends. This restaurant has a lot to offer in terms of dishes, and the guacamole is unbelievable good! My recent experience was amazing, and I plan to go back very soon.
Just like many of the restaurants I have reviewed lately, the parking on 12th South can be a bit of a challenge, but Bar Taco does have complementary valet parking! This makes life a bit easier when dining at this restaurant. The atmosphere is truly electric and enhances the dining experience tremendously. The staff is amazing and very helpful when it comes to choosing what entrées to order. Most items are the menu only includes the entrée itself, so one has the option to try many different dishes.
I recently went to this restaurant for dinner, and I ordered a few different tacos. I tried a fish taco, a duck taco, and a chicken taco, and I enjoyed all of them! If I had to recommend one specific dish, I would go with the duck or chicken taco. They are full of flavor! Although I didn't get to try the margaritas, I have heard from many friends that they are the best around, so if you were in the mood, I would highly recommend trying one. This place has a lot to offer from the food, atmosphere, and margaritas, so make sure to grab some friends and try this place out!
Today, I have decided to review a restaurant a bit different! The past few restaurants have been what I call "leisure" restaurants. Multiple courses and high levels of service warrant a higher price tag, but what about a restaurant that has great food and only takes a handful of minutes to get your food? I recently visited Blaze Pizza, which is in Brentwood, Tennessee (just outside Nashville). I love good pizza and this place sure didn't disappoint!
Since we are moving further away from Nashville, available parking is easily found! The restaurant is open and has a social but relaxed atmosphere. Once arriving at the ordering line, a friendly employee takes your unique order. There are a myriad of options as far as toppings, types of pizza, or even whether you want it gluten-free or not. Everything is fresh and it is easily noticeable once taking your first bite! As stated above, this is a place where you can grab a quick bite to eat, so if you're in the need for a quick family dinner or want to grab a snack with your friends, this is a great option!
After my recent visit, I built a pizza with fresh mozzarella, marinara sauce, Italian sausage, fresh oregano, and sea salt. Because my pizza was so good, I had to take a picture of my friend's pepperoni pizza (as seen above). I couldn't control myself long enough to take a picture! This restaurant is very affordable ($10 per person), and I would highly recommend giving this place a try if you haven't! It's hard to find a delicious thin-crust pizza that doesn't taste like all the "other" delivery options. In other words… cardboard. This open-fire style of cooking the pizza adds a smokiness, which boosts the flavor of the pizza! Who doesn't love pizza?!
I celebrated my birthday over the weekend and decided to try another chain restaurant in the Nashville area! Stoney River has a few Middle Tennessee locations in both Franklin and Nashville, but I decided to give the Franklin location a try! Similar to BrickTops I reviewed last week, the food is of high quality and doesn't have the feel of a chain restaurant. The overall decor is elegant and modern, which adds to the inviting, relaxing atmosphere. The restaurant spans multiple sections and rooms that can host a myriad of different occasions! The staff is absolutely amazing from the greeting hostesses to the managers. Service is something this restaurant truly values and it shows!
I have been to both locations and parking has never been an issue for me. Even during peak dinner hours, parking has still been an absolute breeze! To reiterate what was stated above, the atmosphere is very relaxing and truly creates an enjoyable dinning experience. This is a great place for a date night out, dinner celebration, or just another "night out" with the family. Out of all the restaurants I have reviewed, I would say this restaurant warrants the highest average cost per plate. After drink, appetizer, and entrée, I would say one is looking at spending around $30-$35. Of course, it depends on what you order, but again, it's just an average.
Because it was my birthday, I ordered a Filet with a baked potato! My steak was served medium rare, which is exactly how I prefer my red meats. For an appetizer, I got the Whiskey Shrimp, which is amazing! I would highly recommend it if you haven't tried it! The jumbo shrimp is fresh and tender, not chewy or rubbery. Finally, for dessert I ordered the Chocolate Fudge Cake with vanilla ice cream. While it was very good, I would suggest sharing it between a few friends, because it is extremely rich. This is truly a great restaurant that has a wide variety of dishes, so if you are looking to treat yourself to a nice dinner, check this place out!
BrickTops is located off of West End here in Nashville and serves a wide-variety of high end dishes. First off, I know what you're thinking… it's a chain, but that doesn't mean the food isn't fantastic! While many chain restaurants do pump out low-quality, bland dishes, BrickTops seems to break this preconceived notion. The dishes are unique and full of flavor! BrickTops has a very crisp, modern decor and layout in its Nashville location. It is very spacious, spanning multiple rooms inside and out and allows for a very relaxing, private dinning experience, which is contrary to the restaurant I reviewed last week. The staff is extremely professional and seeks to not only meet your expectations, but exceed them with flying colors.
Unlike many Nashville restaurants, BrickTops has a plethora of available parking, so I have never had any difficulty finding free parking. The restaurant boasts a very relaxing, yet sociable atmosphere that can meet any occasion. Need a place to host a "friends night out," a business meeting, or even a graduation dinner? BrickTops is another wonderful option! The price-point of this restaurant is a bit higher than the other restaurants I have reviewed, but I would say that you could get away with around $20-$25 a plate.
It's still burger week here in Nashville, so I ordered a Cheeseburger with French Fries. It was by far the best burger I have had in a very long time. It was cooked perfectly! The meat was tender and the bun was toasted which added a nice crunch. I have tried many dishes at this restaurant and would recommend the burger or Bistro Chicken! As for side dishes, the fries are fabulous and the Mac & Cheese is to die for. I consider myself a Mac & Cheese connoisseur, and haven't found one I enjoy more! Please give this restaurant a try if you haven't; you will not be disappointed!
It's Nashville Scene's Burger Week here in Music City! In honor of this event, I wanted to review a burger joint for those who are interested in participating. Burger Up is located on 12th South here in Nashville, TN and offers a wide variety of items on its menu. Want a veggie burger, beef burger, or another type of burger? This place has whatever you are looking for! Burger Up's welcoming restaurant has a very relaxed, social feel when first walking in the doors. It has one big open space with tables, picnic-style seating, and features a large outdoor porch. The staff is very friendly and personable, and seeks to make sure all of your needs are met when dinning at Burger Up.
Parking can be challenging especially during peak lunch and dinner hours. However, there is free parking up and down 12th South, so it's not too daunting. The atmosphere, as mentioned above, is very social and the layout seeks to spark conversation between guests. The restaurant is on the smaller side, so there is a good chance you will be sitting right next to a stranger. I am an extrovert, so for me, I welcome an opportunity to meet new people! If you are more introverted or would prefer a more private dinning experience, I am not so sure this restaurant would meet your needs. However, I would highly recommend coming to this restaurant with a group of friends or with family, because again, it has a very inviting, friendly atmosphere and delicious food!
I visited Burger Up on Monday and ordered a classic burger. I believe that in order to tell if a burger is truly well prepared, you order it as plain as possible! My burger was fantastic and cooked to the exact temperature I requested. The appetizers are great here, so if you want a few recommendations that I have tried, I would go with the fried mac & cheese or the fried pickles. Both are fantastic and a great starter! As for dessert, I would recommend the chocolate ice cream sandwich! I truly enjoyed my lunch at Burger Up, so if you want to find a local burger joint that has great food and atmosphere, this is the place to go! If you have tried this restaurant, let me know what your thoughts are!
Tavern Midtown is located off of Broadway here in Nashville, TN. While being called a gastropub, the food is truly amazing throughout the day! Not only is it a great spot for lunch and dinner, it offers brunch on the weekends which is absolutely fantastic! The Tavern has a very "Nashville" feel throughout the restaurant. It has modern decor with a rustic twist. The staff is friendly and knowledgeable about the menu, so if you aren't sure what is "good" on the menu, they can steer you in the right direction.
Since the Tavern is right off of Broadway, self-parking can be a bit of a challenge. However, there are meters up and down the street and a parking lot right next door that you can pay for by the hour. Thankfully, there is complementary valet parking during certain times! The atmosphere at the Tavern is very relaxed and yet, very social. There is a bar that has a large seating area and an upper-deck section that holds many more customers. Need a place to hold a business meeting or grab a quick bite with a group of friends? The Tavern is the answer!
After my recent visit for lunch, I order the Grilled Chicken Skewers, which is served with a sweet soy sauce over a bed of white rice. I would highly recommend giving this dish a try if it's your first time dinning at this restaurant. In addition to this dish, the truffle chips are a great side that can be shared between two people! During my last visit, I spent around $20 on my meal, which I would say is average at this restaurant. I truly enjoy this restaurant and have never regretted coming back! Grab some friends, coworkers, or your significant other and check this place out!
Are you in the mood for some good BBQ and fun times? Just down the street on from the restaurant featured earlier, Edley's BBQ is a Nashville staple also located on 12th South. The restaurant has a very inviting layout that spreads across two main eating areas inside and a spacious porch outside! Because of the amazing food and high brand recognition, there may be a line inside, but to pass the time, one can look at the countless, delicious options waiting to be ordered. Once placing your order with the friendly cashier, the customer has complete autonomy where he or she wants to sit, because the restaurant has open seating.
As for parking, there is a lot behind the restaurant that holds around a dozen or two of vehicles. This is where the iconic: "I Believe In Nashville" mural is located. Of course, there is additional parking up and down 12th South, so parking is fairly easy to find! The atmosphere at Edley's is very relaxed and enjoyable to eat at. Whether you are looking for a place to host a social gathering or wanting to have a relaxed date night with your significant other, Edley's is another great option!
After my recent visit to Edley's, I ordered the pork platter, which left me wanting more. The pork was tender and flavorful and Edley's sure doesn't go light on the portions it serves! As for sides, I always go with their Mac and Cheese and corn bread, which I would recommend trying if it's your first time. Finally, for dessert, Edley's has a variety of pies that seek to meet the desires of a broad array of consumers. For me personally, as long as it's chocolate, I am satisfied. If you are looking for a place with great meats at an affordable price ($10 per person), I would highly recommend Edley's BBQ for a family dinner or for a gathering with friends. It will not disappoint you!
When comparing both Edley's BBQ and Martin's BBQ, I prefer Edley's for a few reasons. In my opinion, I believe the location, atmosphere, and food is of higher quality. With that said, I truly enjoy both BBQ joints, so the only way to settle this dispute is to give both a try!
Let me know which restaurant you prefer in the comments and let's finish this debate!


text:
Q: unsigned and int gotcha
Possible Duplicate:
Arithmetic operations on unsigned and signed integers

unsigned int b=2;
int a=-2;

if(a>b)
    printf("a>b");
else
    printf("b>a");

OUTPUT: a>b
int b=2;
int a=-2;

if(a>b)
    printf("a>b");
else
    printf("b>a");

OUTPUT: b>a
PLEASE, someone explain the output

A: In the first case both operands are converted to unsigned int, the converted a will be UINT_MAX-1, which is much larger than b and hence the output.
Don't compare signed and unsigned integers unless you understand the semantics of arithematic conversions, the results might surprise you.

A: The following is taken from The C Programming Language by Kernighan and Ritchie - 2.7 Type Conversions - page 44; the second half of the page explains the same scenario in detail. A small portion is below for your reference.
Conversion rules are complicated when unsigned operands are involved. The problem is that comparison between signed and unsigned values are machine dependent, because they depend on the sizes of the various integer types. For example, suppose that int is 16 bits long and long is 32 bits. Then -1L < 1U, because 1U, which is an int, is promoted to a signed long. But -1L > 1UL, because -1L is promoted to unsigned long and thus appears to be a larger positive number.

A: When signed and unsigned values are compared, and when the unsigned values can't all be represented in the signed type, then the signed operand is promoted to unsigned. This is done with a formula that amounts to a reinterpretation of the 2-s complement bit pattern.
Well, negative numbers have lots of high bits set...
Since your operands are all of the same rank, it's just a matter of unsigned bit patterns being compared.
And so -2 is represented with 111111..110, one less than the largest possible, and it easily beats 2 when interpreted as unsigned.

A: You need to learn the operation of the operators in C and the C promotion and conversion rules. They are explained in the C standard. Some excerpts from it plus my comments:
6.5.8 Relational operators
Syntax
1 relational-expression:
shift-expression
relational-expression < shift-expression
relational-expression > shift-expression
relational-expression <= shift-expression
relational-expression >= shift-expression
Semantics
3 If both of the operands have arithmetic type, the usual arithmetic conversions are
performed.
Most operators include this "usual arithmetic conversions" step before the actual operation (addition, multiplication, comparison, etc etc). - Alex
6.3.1.8 Usual arithmetic conversions
1 Many operators that expect operands of arithmetic type cause conversions and yield result
types in a similar way. The purpose is to determine a common real type for the operands
and result. For the specified operands, each operand is converted, without change of type
domain, to a type whose corresponding real type is the common real type. Unless
explicitly stated otherwise, the common real type is also the corresponding real type of
the result, whose type domain is the type domain of the operands if they are the same,
and complex otherwise. This pattern is called the usual arithmetic conversions:

*

*First, if the corresponding real type of either operand is long double, the other
operand is converted, without change of type domain, to a type whose
corresponding real type is long double.

*Otherwise, if the corresponding real type of either operand is double, the other
operand is converted, without change of type domain, to a type whose
corresponding real type is double.

*Otherwise, if the corresponding real type of either operand is float, the other
operand is converted, without change of type domain, to a type whose
corresponding real type is float.

*Otherwise, the integer promotions are performed on both operands. Then the
following rules are applied to the promoted operands:

*If both operands have the same type, then no further conversion is needed.

*Otherwise, if both operands have signed integer types or both have unsigned
integer types, the operand with the type of lesser integer conversion rank is
converted to the type of the operand with greater rank.

*Otherwise, if the operand that has unsigned integer type has rank greater or
equal to the rank of the type of the other operand, then the operand with
signed integer type is converted to the type of the operand with unsigned
integer type.

*Otherwise, if the type of the operand with signed integer type can represent
all of the values of the type of the operand with unsigned integer type, then
the operand with unsigned integer type is converted to the type of the
operand with signed integer type.

*Otherwise, both operands are converted to the unsigned integer type
corresponding to the type of the operand with signed integer type.
6.3.1.3 Signed and unsigned integers

*

*When a value with integer type is converted to another integer type other than _Bool, if the value can be represented by the new type, it is unchanged.

*Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or
subtracting one more than the maximum value that can be represented in the new type
until the value is in the range of the new type. (The rules describe arithmetic on the mathematical value, not the value of a given type of expression.)

*Otherwise, the new type is signed and the value cannot be represented in it; either the
result is implementation-defined or an implementation-defined signal is raised.
So, in your a>b (with a being an int and b being an unsigned int), per the above rules you get a converted to unsigned int before the comparison. Since a is negative (-2), the unsigned value becomes UINT_MAX+1+a (this is the repeatedly adding or
subtracting one more than the maximum value bit). And UINT_MAX+1+a in your case is UINT_MAX+1-2 = UINT_MAX-1, which is a huge positive number compared to the value of b (2). And so a>b yields "true".
Forget the math you learned at school. Learn how C does it.

A: In this first case you get the unsigned a converted into a signed int. Then these two are compared.
Type conversion ranks between signed and unsigned types could have the same rank in C99. This is when a unsigned and a signed type have the corresponding types, when this happens the result is up to the compiler.
Here is a summary of the rules.

redpajama_set_name: RedPajamaStackExchange


text:
package com.navercorp.pinpoint.plugin.httpclient5.interceptor;

import com.navercorp.pinpoint.bootstrap.config.HttpDumpConfig;

import com.navercorp.pinpoint.bootstrap.context.MethodDescriptor;
import com.navercorp.pinpoint.bootstrap.context.SpanEventRecorder;
import com.navercorp.pinpoint.bootstrap.context.Trace;
import com.navercorp.pinpoint.bootstrap.context.TraceContext;
import com.navercorp.pinpoint.bootstrap.context.TraceId;
import com.navercorp.pinpoint.bootstrap.interceptor.AroundInterceptor;
import com.navercorp.pinpoint.bootstrap.logging.PLogger;
import com.navercorp.pinpoint.bootstrap.logging.PLoggerFactory;
import com.navercorp.pinpoint.bootstrap.plugin.request.ClientHeaderAdaptor;
import com.navercorp.pinpoint.bootstrap.plugin.request.ClientRequestAdaptor;
import com.navercorp.pinpoint.bootstrap.plugin.request.ClientRequestRecorder;
import com.navercorp.pinpoint.bootstrap.plugin.request.ClientRequestWrapper;
import com.navercorp.pinpoint.bootstrap.plugin.request.ClientRequestWrapperAdaptor;
import com.navercorp.pinpoint.bootstrap.plugin.request.DefaultRequestTraceWriter;
import com.navercorp.pinpoint.bootstrap.plugin.request.RequestTraceWriter;
import com.navercorp.pinpoint.bootstrap.plugin.request.util.CookieExtractor;
import com.navercorp.pinpoint.bootstrap.plugin.request.util.CookieRecorder;
import com.navercorp.pinpoint.bootstrap.plugin.request.util.CookieRecorderFactory;
import com.navercorp.pinpoint.bootstrap.plugin.request.util.EntityExtractor;
import com.navercorp.pinpoint.bootstrap.plugin.request.util.EntityRecorder;
import com.navercorp.pinpoint.bootstrap.plugin.request.util.EntityRecorderFactory;
import com.navercorp.pinpoint.common.trace.AnnotationKey;
import com.navercorp.pinpoint.common.util.ArrayArgumentUtils;
import com.navercorp.pinpoint.plugin.httpclient5.*;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.HttpResponse;

public class InternalHttpClientDoExecuteInterceptor implements AroundInterceptor {
    private final PLogger logger = PLoggerFactory.getLogger(this.getClass());
    private final boolean isDebug = logger.isDebugEnabled();

    private final TraceContext traceContext;
    private final MethodDescriptor methodDescriptor;
    private final ClientRequestRecorder<ClientRequestWrapper> clientRequestRecorder;
    private final CookieRecorder<HttpRequest> cookieRecorder;
    private final EntityRecorder<HttpRequest> entityRecorder;
    private final RequestTraceWriter<HttpRequest> requestTraceWriter;
    private final boolean statusCode;

    public InternalHttpClientDoExecuteInterceptor(TraceContext traceContext, MethodDescriptor methodDescriptor) {
        this.traceContext = traceContext;
        this.methodDescriptor = methodDescriptor;

        final HttpClient5PluginConfig config = new HttpClient5PluginConfig(traceContext.getProfilerConfig());
        final boolean param = config.isParam();
        final HttpDumpConfig httpDumpConfig = config.getHttpDumpConfig();

        ClientRequestAdaptor<ClientRequestWrapper> clientRequestAdaptor = ClientRequestWrapperAdaptor.INSTANCE;
        this.clientRequestRecorder = new ClientRequestRecorder<>(param, clientRequestAdaptor);

        CookieExtractor<HttpRequest> cookieExtractor = HttpClient5CookieExtractor.INSTANCE;
        this.cookieRecorder = CookieRecorderFactory.newCookieRecorder(httpDumpConfig, cookieExtractor);

        EntityExtractor<HttpRequest> entityExtractor = HttpClient5EntityExtractor.INSTANCE;
        this.entityRecorder = EntityRecorderFactory.newEntityRecorder(httpDumpConfig, entityExtractor);

        this.statusCode = config.isStatusCode();

        ClientHeaderAdaptor<HttpRequest> clientHeaderAdaptor = new HttpRequest5ClientHeaderAdaptor();
        this.requestTraceWriter = new DefaultRequestTraceWriter<>(clientHeaderAdaptor, traceContext);
    }

    @Override
    public void before(Object target, Object[] args) {
        if (isDebug) {
            logger.beforeInterceptor(target, args);
        }

        final Trace trace = traceContext.currentRawTraceObject();
        if (trace == null) {
            return;
        }

        try {
            final HttpHost httpHost = ArrayArgumentUtils.getArgument(args, 0, HttpHost.class);
            final HttpRequest httpRequest = ArrayArgumentUtils.getArgument(args, 1, HttpRequest.class);
            if (httpRequest == null) {
                return;
            }

            final String host = HostUtils.get(httpHost, httpRequest);
            final boolean sampling = trace.canSampled();
            if (!sampling) {
                if (httpRequest != null) {
                    this.requestTraceWriter.write(httpRequest);
                }
                return;
            }

            final SpanEventRecorder recorder = trace.traceBlockBegin();
            // set remote trace
            final TraceId nextId = trace.getTraceId().getNextTraceId();
            recorder.recordNextSpanId(nextId.getSpanId());
            recorder.recordServiceType(HttpClient5Constants.HTTP_CLIENT5);
            this.requestTraceWriter.write(httpRequest, nextId, host);
        } catch (Throwable t) {
            logger.warn("Failed to BEFORE process. {}", t.getMessage(), t);
        }
    }

    @Override
    public void after(Object target, Object[] args, Object result, Throwable throwable) {
        if (isDebug) {
            logger.afterInterceptor(target, args);
        }

        final Trace trace = traceContext.currentTraceObject();
        if (trace == null) {
            return;
        }

        try {
            final HttpHost httpHost = ArrayArgumentUtils.getArgument(args, 0, HttpHost.class);
            final HttpRequest httpRequest = ArrayArgumentUtils.getArgument(args, 1, HttpRequest.class);
            if (httpRequest == null) {
                return;
            }
            final String host = HostUtils.get(httpHost, httpRequest);
            SpanEventRecorder recorder = trace.currentSpanEventRecorder();
            // Accessing httpRequest here not BEFORE() because it can cause side effect.
            ClientRequestWrapper clientRequest = new HttpClient5RequestWrapper(httpRequest, host);
            this.clientRequestRecorder.record(recorder, clientRequest, throwable);
            this.cookieRecorder.record(recorder, httpRequest, throwable);
            this.entityRecorder.record(recorder, httpRequest, throwable);
            recorder.recordApi(methodDescriptor);
            recorder.recordException(throwable);

            if (statusCode) {
                final Integer statusCodeValue = getStatusCodeFromHttpResponse(result);
                if (statusCodeValue != null) {
                    recorder.recordAttribute(AnnotationKey.HTTP_STATUS_CODE, statusCodeValue);
                }
            }
        } catch (Throwable t) {
            logger.warn("Failed to AFTER process. {}", t.getMessage(), t);
        } finally {
            trace.traceBlockEnd();
        }
    }

    Integer getStatusCodeFromHttpResponse(Object result) {
        if (result instanceof HttpResponse) {
            HttpResponse httpResponse = (HttpResponse) result;
            return httpResponse.getCode();
        }
        return null;
    }
}


Patti LaBoucane-Benson appointed to Canada's Senate! Finding Olivia James at CXC! Plus: Grant Morrison, Matthew Thurber and why we love Spider-Man so dang much!
People: In an interview subtitled "Those I Trusted Betrayed Me," Stan Lee speaks to The Daily Beast about elder-abuse allegations against his daughter and the removal of several of his associates from his life.
People: The Outside Circle comic writer Patti LaBoucane-Benson has been appointed to Canada's Senate by Prime Minister Trudeau.