arkstock.yahoo_finance_gateway module
A module that defines a set of method used to retrieve data from yahoo finance.
Due to the singleton nature of modules in python, all methods must inherently be functional.
''' A module that defines a set of method used to retrieve data from yahoo finance. Due to the singleton nature of modules in python, all methods must inherently be functional. ''' from datetime import date, timedelta from enum import Enum from typing import Union, List from collections.abc import Iterable from urllib.request import urlopen from urllib.parse import quote from ..exceptions import ImproperlyConfiguredRequest, IncompleteDataRetrieved, RequestFailedException import unittest base_url = 'http://ichart.yahoo.com/table.csv?' '''Yahoo Finance's base url used to make requests to retrieve data''' class YahooTimeInterval(Enum): ''' An enum to encapsulate yahoo finance specific time interval ''' weeks = ('w', 7) '''TimeInterval enum value to denote a time interval of 1 week i.e. 7 days''' def __init__(self, symbol, days): self.symbol = symbol # string specific to yahoo finance that represents that time range self.days = days # interval length in days def num_intervals(start_date: date, end_date: date, time_interval: YahooTimeInterval) -> int: ''' This method takes in the start_date, end_date, and time_interval and returns the number of complete time_intervals within that time range Args: * `start_date` - the start of the time range for which you would like to get data * `end_date` - the end of the time range for which you would like to get data * `time_interval` - the time interval at which you would like to get data for the given time range Returns: > Number of complete time intervals within that time range ''' return int((end_date - start_date).days / time_interval.days) def build_url_suffix(start_date: date, end_date: date, time_interval: YahooTimeInterval) -> str: ''' This method takes in the start_date, end_date, and time_interval and creates the generic url suffix that is used in almost all requests to yahoo finance Args: * `start_date` - the start of the time range for which you would like to get data * `end_date` - the end of the time range for which you would like to get data * `time_interval` - the time interval at which you would like to get data for the given time range Returns: > The generic url suffix that can be used to query yahoo finance with the given context ''' if start_date is None: raise ImproperlyConfiguredRequest('start_date is not specified') if end_date is None: raise ImproperlyConfiguredRequest('end_date is not specified') if time_interval is None: raise ImproperlyConfiguredRequest('time_interval is not specified') start_month = 'a=%s&' % str(start_date.month - 1) start_day = 'b=%s&' % str(start_date.day) start_year = 'c=%s&' % str(start_date.year) start_date_url_specifier = start_month + start_day + start_year end_month = 'd=%s&' % str(end_date.month - 1) end_day = 'e=%s&' % str(end_date.day) end_year = 'f=%s&' % str(end_date.year) end_date_url_specifier = end_month + end_day + end_year time_interval_url_specifier = 'g=%s&' % time_interval.symbol suffix = 'ignore=.csv' return start_date_url_specifier + end_date_url_specifier + time_interval_url_specifier + suffix def bytes_to_string(bytes_or_bytes_array: Union[bytes, List[bytes]]) -> Union[str, List[str]]: ''' Sometimes data from yahoo finance is in the form of bytes (or a list of bytes) and needs to be converted back into a string (or a list of strings). This method performs that transformation if and only if it is needed. Args: * `bytes_or_bytes_array` - bytes or an array of bytes Returns: > A string or a list of strings ''' if isinstance(bytes_or_bytes_array, Iterable) and not isinstance( bytes_or_bytes_array, bytes): result = [] for byte_str in bytes_or_bytes_array: if isinstance(byte_str, bytes): result.append(''.join(list(map(chr, byte_str)))) else: result.append(byte_str) return result else: if isinstance(bytes_or_bytes_array, bytes): return ''.join(list(map(chr, bytes_or_bytes_array))) else: return bytes_or_bytes_array def is_mcap_over_limit(mcap_string: str, limit_in_millions: int =300) -> bool: ''' Given a market capitalization string, this method checks to see if a given mcap_string exceeds the given limit_in_millions If the string is not correctly formed or cannot be parsed, this method returns False This method exposes yahoo finance specific details on the input and is such is 'private'. It should be chained to the output of #get_mcap and should not be used otherwise unless you know what you're doing Args: * `mcap_string` - the market capitalization string retreived from yahoo finance * `limit_in_millions` - the testing threshold in millions Returns: > Whether or not the provided market cap string meets a given threshold Note: > mcap comparisons are done based on the mcap in the stock's native currency ''' value = None try: if mcap_string[-1] == 'B': value = float(mcap_string[:-1]) * 1000 elif mcap_string[-1] == 'T': value = float(mcap_string[:-1]) * 10e6 elif mcap_string[-1] == 'M': value = float(mcap_string[:-1]) else: value = 0. except Exception as exc: return False return value > limit_in_millions if value is not None else False def get_mcap(symbols : List[str], code: str ='j1') -> List[List[str]]: ''' Retrieve current market capitalization for a given list of stock symbols. Args: * `symbols` - a collection of strings that represent the stock symbols to be queried * `code` - the code (specific to yahoo finance) that represents the market cap data Returns: > A list containing the retrieved data, where each retrieved data object is itself a list of two elements, the first being the symbol, and the second being the market cap string for the symbol. Note: > The return for this method is not in terms of USD, but in terms of the individual stock's native currency ''' try: mcap_url = 'http://download.finance.yahoo.com/d/quotes.csv?' suffix = '&e=.csv' symbol_str = 's=' + quote(','.join(symbols), ',') code_str = '&f=' + code # Retrieve and split the file mcap_data = urlopen(mcap_url + symbol_str + code_str + suffix).read( ).splitlines() mcap_data_as_strings = bytes_to_string(mcap_data) except Exception as exc: raise RequestFailedException('Could not retrieve mcap for requested stocks') from exc else: try: assert (len(symbols) == len(mcap_data_as_strings)) except AssertionError as exc: raise IncompleteDataRetrieved( 'Only retrieved mcap data for some of the requested stocks') from exc return list(zip(symbols, mcap_data_as_strings)) def get_native_currency_for_ticker(symbol : str, code: str ='c4') -> str: ''' This method returns the native currency for a given symbol Args: * `symbol` - a string repr for the ticker symbol for which native currency information must be retrieved * `code` - the code (specific to yahoo finance) that reprs currency data Returns: > A string repr of the native currency for the ticker ''' currency_url = 'http://download.finance.yahoo.com/d/quotes.csv?' suffix = '&e=.csv' symbol_str = 's=' + quote(symbol) code_str = '&f=' + '' + code raw_file = urlopen(currency_url + symbol_str + code_str + suffix).read( ).splitlines() currency = bytes_to_string(raw_file[0][1:-1]) return currency def get_historical_exch_rate_to_USD(currency: str, start_date: date, end_date: date, time_interval: YahooTimeInterval) -> List[float]: ''' Get exchange rate for currency to USD. Args: * `currency` - a string repr of the currency to be converted to USD * `start_date` - the start of the time range for which you would like to get data * `end_date` - the end of the time range for which you would like to get data * `time_interval` - the time interval at which you would like to get data for the given time range Returns: > A list of the historical exchange rate from the requested currency to USD Note: > The latest rate appears at index 0 ''' number_of_intervals = num_intervals(start_date, end_date, time_interval) if currency == 'USD' or currency.strip() == '/': return [1. for x in range(number_of_intervals)] symbol = '{0}=X'.format(currency) try: reverse_exch_rate = get_historical_stock_prices(symbol, start_date, end_date, time_interval) except RequestFailedException as exc: raise RequestFailedException( ('The request to retrieve historical exchange rates from yahoo finance' 'for %s failed') % (currency)) from exc except IncompleteDataRetrieved as exc: raise IncompleteDataRetrieved( ('Currency data could not be retrieved for days from %s to %s at an ' 'interval of %s') % (start_date, end_date, time_interval)) from exc return [1./ x for x in reverse_exch_rate] def get_historical_stock_prices(symbol: str, start_date: date, end_date: date, time_interval: YahooTimeInterval) -> List[float]: ''' This method retrieves historical price data for an ticker symbol. Note: this returns data in the native currency and not in USD. Args: * `symbol` - a string repr of the ticker symbol for which you wish to retrieve data * `start_date` - the start of the time range for which you would like to get data * `end_date` - the end of the time range for which you would like to get data * `time_interval` - the time interval at which you would like to get data for the given time range Returns: > A list of historical stock price data in the native currency Note: > The latest stock price appears at index 0 ''' number_of_intervals = num_intervals(start_date, end_date, time_interval) symbolic_query_uri = 's=%s&' % symbol total_url = base_url + symbolic_query_uri + build_url_suffix(start_date, end_date, time_interval) try: raw_file = urlopen(total_url).read().splitlines() raw_file = bytes_to_string(raw_file) l = [] for line in raw_file[1:]: l.append(line.split(',')[-1]) except Exception as exc: raise RequestFailedException( 'The request to retrieve historical prices from yahoo finance for %s failed' % (symbol)) from exc else: if len(l) >= number_of_intervals: l = [float(x) for x in l] return l[:number_of_intervals] else: raise IncompleteDataRetrieved( ('Historical price data could not be retrieved for %s for ' 'days from %s to %s at an interval of %s') % (symbol, start_date, end_date, time_interval)) def get_sp500_historical_data(start_date: date, end_date: date, time_interval: YahooTimeInterval) -> List[float]: ''' A special utility method to retrieve data for the S&P500 index Args: * `start_date` - the start of the time range for which you would like to get data * `end_date` - the end of the time range for which you would like to get data * `time_interval` - the time interval at which you would like to get data for the given time range Returns: > A list of historical price data for the S&P500 in USD Note: > The latest price appears at index 0 ''' symbol ='%5EGSPC' return get_historical_stock_prices(symbol, start_date, end_date, time_interval) class _YahooFinanceGatewayTest(unittest.TestCase): def setUp(self): self.time_interval = YahooTimeInterval.weeks self.end_date = date.today() - timedelta(days=date.today().weekday()) self.start_date = self.end_date - timedelta(weeks=103) def test_get_mcap(self): stock = 'GOOGL' mcap = get_mcap([stock])[0] self.assertIsInstance(mcap[0], str) self.assertIsInstance(mcap[1], str) self.assertIsInstance(float(mcap[1][:-1]), float) def test_is_mcap_over_limit(self): stock = 'GOOGL' mcap = get_mcap([stock])[0] self.assertTrue(is_mcap_over_limit(mcap[1])) self.assertFalse(is_mcap_over_limit(mcap[1], 10e9)) def test_get_native_currency_for_ticker(self): stock = 'GOOGL' native_curr = get_native_currency_for_ticker(stock) self.assertEqual('USD', native_curr) stock = 'SCC.TO' native_curr = get_native_currency_for_ticker(stock) self.assertEqual('CAD', native_curr) def test_get_historical_exch_rate(self): curr = 'CAD' exch_rate = get_historical_exch_rate_to_USD(curr, self.start_date, self.end_date, self.time_interval) self.assertEqual(num_intervals(self.start_date, self.end_date, self.time_interval), len(exch_rate)) curr = 'CADDD' self.assertRaises(RequestFailedException, get_historical_exch_rate_to_USD, curr, self.start_date, self.end_date, self.time_interval) def test_get_historical_stock_prices(self): stock = 'GOOGL' historical_prices = get_historical_stock_prices(stock, self.start_date, self.end_date, self.time_interval) self.assertEqual(num_intervals(self.start_date, self.end_date, self.time_interval), len(historical_prices)) self.assertRaises(RequestFailedException, get_historical_stock_prices, 'GOOGLER', self.start_date, self.end_date, self.time_interval) self.start_date = date.today() - timedelta(weeks=20 * 52) self.assertRaises(IncompleteDataRetrieved, get_historical_stock_prices, stock, self.start_date, self.end_date, self.time_interval) if __name__ == '__main__': unittest.main()
Module variables
var base_url
Yahoo Finance's base url used to make requests to retrieve data
Functions
def build_url_suffix(
start_date, end_date, time_interval)
This method takes in the start_date, end_date, and time_interval and creates the generic url suffix that is used in almost all requests to yahoo finance
Args:
start_date
- the start of the time range for which you would like to get dataend_date
- the end of the time range for which you would like to get datatime_interval
- the time interval at which you would like to get data for the given time range
Returns:
The generic url suffix that can be used to query yahoo finance with the given context
def build_url_suffix(start_date: date, end_date: date, time_interval: YahooTimeInterval) -> str: ''' This method takes in the start_date, end_date, and time_interval and creates the generic url suffix that is used in almost all requests to yahoo finance Args: * `start_date` - the start of the time range for which you would like to get data * `end_date` - the end of the time range for which you would like to get data * `time_interval` - the time interval at which you would like to get data for the given time range Returns: > The generic url suffix that can be used to query yahoo finance with the given context ''' if start_date is None: raise ImproperlyConfiguredRequest('start_date is not specified') if end_date is None: raise ImproperlyConfiguredRequest('end_date is not specified') if time_interval is None: raise ImproperlyConfiguredRequest('time_interval is not specified') start_month = 'a=%s&' % str(start_date.month - 1) start_day = 'b=%s&' % str(start_date.day) start_year = 'c=%s&' % str(start_date.year) start_date_url_specifier = start_month + start_day + start_year end_month = 'd=%s&' % str(end_date.month - 1) end_day = 'e=%s&' % str(end_date.day) end_year = 'f=%s&' % str(end_date.year) end_date_url_specifier = end_month + end_day + end_year time_interval_url_specifier = 'g=%s&' % time_interval.symbol suffix = 'ignore=.csv' return start_date_url_specifier + end_date_url_specifier + time_interval_url_specifier + suffix
def bytes_to_string(
bytes_or_bytes_array)
Sometimes data from yahoo finance is in the form of bytes (or a list of bytes) and needs to be converted back into a string (or a list of strings). This method performs that transformation if and only if it is needed.
Args:
bytes_or_bytes_array
- bytes or an array of bytes
Returns:
A string or a list of strings
def bytes_to_string(bytes_or_bytes_array: Union[bytes, List[bytes]]) -> Union[str, List[str]]: ''' Sometimes data from yahoo finance is in the form of bytes (or a list of bytes) and needs to be converted back into a string (or a list of strings). This method performs that transformation if and only if it is needed. Args: * `bytes_or_bytes_array` - bytes or an array of bytes Returns: > A string or a list of strings ''' if isinstance(bytes_or_bytes_array, Iterable) and not isinstance( bytes_or_bytes_array, bytes): result = [] for byte_str in bytes_or_bytes_array: if isinstance(byte_str, bytes): result.append(''.join(list(map(chr, byte_str)))) else: result.append(byte_str) return result else: if isinstance(bytes_or_bytes_array, bytes): return ''.join(list(map(chr, bytes_or_bytes_array))) else: return bytes_or_bytes_array
def get_historical_exch_rate_to_USD(
currency, start_date, end_date, time_interval)
Get exchange rate for currency to USD.
Args:
currency
- a string repr of the currency to be converted to USDstart_date
- the start of the time range for which you would like to get dataend_date
- the end of the time range for which you would like to get datatime_interval
- the time interval at which you would like to get data for the given time range
Returns:
A list of the historical exchange rate from the requested currency to USD
Note:
The latest rate appears at index 0
def get_historical_exch_rate_to_USD(currency: str, start_date: date, end_date: date, time_interval: YahooTimeInterval) -> List[float]: ''' Get exchange rate for currency to USD. Args: * `currency` - a string repr of the currency to be converted to USD * `start_date` - the start of the time range for which you would like to get data * `end_date` - the end of the time range for which you would like to get data * `time_interval` - the time interval at which you would like to get data for the given time range Returns: > A list of the historical exchange rate from the requested currency to USD Note: > The latest rate appears at index 0 ''' number_of_intervals = num_intervals(start_date, end_date, time_interval) if currency == 'USD' or currency.strip() == '/': return [1. for x in range(number_of_intervals)] symbol = '{0}=X'.format(currency) try: reverse_exch_rate = get_historical_stock_prices(symbol, start_date, end_date, time_interval) except RequestFailedException as exc: raise RequestFailedException( ('The request to retrieve historical exchange rates from yahoo finance' 'for %s failed') % (currency)) from exc except IncompleteDataRetrieved as exc: raise IncompleteDataRetrieved( ('Currency data could not be retrieved for days from %s to %s at an ' 'interval of %s') % (start_date, end_date, time_interval)) from exc return [1./ x for x in reverse_exch_rate]
def get_historical_stock_prices(
symbol, start_date, end_date, time_interval)
This method retrieves historical price data for an ticker symbol. Note: this returns data in the native currency and not in USD.
Args:
symbol
- a string repr of the ticker symbol for which you wish to retrieve datastart_date
- the start of the time range for which you would like to get dataend_date
- the end of the time range for which you would like to get datatime_interval
- the time interval at which you would like to get data for the given time range
Returns:
A list of historical stock price data in the native currency
Note:
The latest stock price appears at index 0
def get_historical_stock_prices(symbol: str, start_date: date, end_date: date, time_interval: YahooTimeInterval) -> List[float]: ''' This method retrieves historical price data for an ticker symbol. Note: this returns data in the native currency and not in USD. Args: * `symbol` - a string repr of the ticker symbol for which you wish to retrieve data * `start_date` - the start of the time range for which you would like to get data * `end_date` - the end of the time range for which you would like to get data * `time_interval` - the time interval at which you would like to get data for the given time range Returns: > A list of historical stock price data in the native currency Note: > The latest stock price appears at index 0 ''' number_of_intervals = num_intervals(start_date, end_date, time_interval) symbolic_query_uri = 's=%s&' % symbol total_url = base_url + symbolic_query_uri + build_url_suffix(start_date, end_date, time_interval) try: raw_file = urlopen(total_url).read().splitlines() raw_file = bytes_to_string(raw_file) l = [] for line in raw_file[1:]: l.append(line.split(',')[-1]) except Exception as exc: raise RequestFailedException( 'The request to retrieve historical prices from yahoo finance for %s failed' % (symbol)) from exc else: if len(l) >= number_of_intervals: l = [float(x) for x in l] return l[:number_of_intervals] else: raise IncompleteDataRetrieved( ('Historical price data could not be retrieved for %s for ' 'days from %s to %s at an interval of %s') % (symbol, start_date, end_date, time_interval))
def get_mcap(
symbols, code='j1')
Retrieve current market capitalization for a given list of stock symbols.
Args:
symbols
- a collection of strings that represent the stock symbols to be queriedcode
- the code (specific to yahoo finance) that represents the market cap data
Returns:
A list containing the retrieved data, where each retrieved data object is itself a list of two elements, the first being the symbol, and the second being the market cap string for the symbol.
Note:
The return for this method is not in terms of USD, but in terms of the individual stock's native currency
def get_mcap(symbols : List[str], code: str ='j1') -> List[List[str]]: ''' Retrieve current market capitalization for a given list of stock symbols. Args: * `symbols` - a collection of strings that represent the stock symbols to be queried * `code` - the code (specific to yahoo finance) that represents the market cap data Returns: > A list containing the retrieved data, where each retrieved data object is itself a list of two elements, the first being the symbol, and the second being the market cap string for the symbol. Note: > The return for this method is not in terms of USD, but in terms of the individual stock's native currency ''' try: mcap_url = 'http://download.finance.yahoo.com/d/quotes.csv?' suffix = '&e=.csv' symbol_str = 's=' + quote(','.join(symbols), ',') code_str = '&f=' + code # Retrieve and split the file mcap_data = urlopen(mcap_url + symbol_str + code_str + suffix).read( ).splitlines() mcap_data_as_strings = bytes_to_string(mcap_data) except Exception as exc: raise RequestFailedException('Could not retrieve mcap for requested stocks') from exc else: try: assert (len(symbols) == len(mcap_data_as_strings)) except AssertionError as exc: raise IncompleteDataRetrieved( 'Only retrieved mcap data for some of the requested stocks') from exc return list(zip(symbols, mcap_data_as_strings))
def get_native_currency_for_ticker(
symbol, code='c4')
This method returns the native currency for a given symbol
Args:
symbol
- a string repr for the ticker symbol for which native currency information must be retrievedcode
- the code (specific to yahoo finance) that reprs currency data
Returns:
A string repr of the native currency for the ticker
def get_native_currency_for_ticker(symbol : str, code: str ='c4') -> str: ''' This method returns the native currency for a given symbol Args: * `symbol` - a string repr for the ticker symbol for which native currency information must be retrieved * `code` - the code (specific to yahoo finance) that reprs currency data Returns: > A string repr of the native currency for the ticker ''' currency_url = 'http://download.finance.yahoo.com/d/quotes.csv?' suffix = '&e=.csv' symbol_str = 's=' + quote(symbol) code_str = '&f=' + '' + code raw_file = urlopen(currency_url + symbol_str + code_str + suffix).read( ).splitlines() currency = bytes_to_string(raw_file[0][1:-1]) return currency
def get_sp500_historical_data(
start_date, end_date, time_interval)
A special utility method to retrieve data for the S&P500 index
Args:
start_date
- the start of the time range for which you would like to get dataend_date
- the end of the time range for which you would like to get datatime_interval
- the time interval at which you would like to get data for the given time range
Returns:
A list of historical price data for the S&P500 in USD
Note:
The latest price appears at index 0
def get_sp500_historical_data(start_date: date, end_date: date, time_interval: YahooTimeInterval) -> List[float]: ''' A special utility method to retrieve data for the S&P500 index Args: * `start_date` - the start of the time range for which you would like to get data * `end_date` - the end of the time range for which you would like to get data * `time_interval` - the time interval at which you would like to get data for the given time range Returns: > A list of historical price data for the S&P500 in USD Note: > The latest price appears at index 0 ''' symbol ='%5EGSPC' return get_historical_stock_prices(symbol, start_date, end_date, time_interval)
def is_mcap_over_limit(
mcap_string, limit_in_millions=300)
Given a market capitalization string, this method checks to see if a given mcap_string exceeds the given limit_in_millions
If the string is not correctly formed or cannot be parsed, this method returns False
This method exposes yahoo finance specific details on the input and is such is 'private'. It should be chained to the output of #get_mcap and should not be used otherwise unless you know what you're doing
Args:
mcap_string
- the market capitalization string retreived from yahoo financelimit_in_millions
- the testing threshold in millions
Returns:
Whether or not the provided market cap string meets a given threshold
Note:
mcap comparisons are done based on the mcap in the stock's native currency
def is_mcap_over_limit(mcap_string: str, limit_in_millions: int =300) -> bool: ''' Given a market capitalization string, this method checks to see if a given mcap_string exceeds the given limit_in_millions If the string is not correctly formed or cannot be parsed, this method returns False This method exposes yahoo finance specific details on the input and is such is 'private'. It should be chained to the output of #get_mcap and should not be used otherwise unless you know what you're doing Args: * `mcap_string` - the market capitalization string retreived from yahoo finance * `limit_in_millions` - the testing threshold in millions Returns: > Whether or not the provided market cap string meets a given threshold Note: > mcap comparisons are done based on the mcap in the stock's native currency ''' value = None try: if mcap_string[-1] == 'B': value = float(mcap_string[:-1]) * 1000 elif mcap_string[-1] == 'T': value = float(mcap_string[:-1]) * 10e6 elif mcap_string[-1] == 'M': value = float(mcap_string[:-1]) else: value = 0. except Exception as exc: return False return value > limit_in_millions if value is not None else False
def num_intervals(
start_date, end_date, time_interval)
This method takes in the start_date, end_date, and time_interval and returns the number of complete time_intervals within that time range
Args:
start_date
- the start of the time range for which you would like to get dataend_date
- the end of the time range for which you would like to get datatime_interval
- the time interval at which you would like to get data for the given time range
Returns:
Number of complete time intervals within that time range
def num_intervals(start_date: date, end_date: date, time_interval: YahooTimeInterval) -> int: ''' This method takes in the start_date, end_date, and time_interval and returns the number of complete time_intervals within that time range Args: * `start_date` - the start of the time range for which you would like to get data * `end_date` - the end of the time range for which you would like to get data * `time_interval` - the time interval at which you would like to get data for the given time range Returns: > Number of complete time intervals within that time range ''' return int((end_date - start_date).days / time_interval.days)
Classes
class YahooTimeInterval
An enum to encapsulate yahoo finance specific time interval
class YahooTimeInterval(Enum): ''' An enum to encapsulate yahoo finance specific time interval ''' weeks = ('w', 7) '''TimeInterval enum value to denote a time interval of 1 week i.e. 7 days''' def __init__(self, symbol, days): self.symbol = symbol # string specific to yahoo finance that represents that time range self.days = days # interval length in days
Ancestors (in MRO)
- YahooTimeInterval
- enum.Enum
- builtins.object
Class variables
var name
var value
var weeks
TimeInterval enum value to denote a time interval of 1 week i.e. 7 days


It didn't create the new experiment form.
Created.
Updated.
Deleted.
| TITLE | URL | Type | Date | ||
|---|---|---|---|---|---|
|
{{experiment.title}}
|
{{experiment.url}}
|
{{experiment.type}}
|
{{experiment.date}}
|


Subscribe
Cryptocurrency
Coins
Bitcoin
Dogecoin
Ethereum
Blockchain
Information
What is a blockchain?
How it works?
About us


--- layout: post title: 'command: nc' date: 2012-09-13 22:00:35.000000000 +09:30 type: post published: true status: publish categories: - OS tags: - linux meta: posturl_add_url: 'yes' _edit_last: '1' views: '1049' ---
--translate some info
host_A: nc -l 1521
host_B: telnet <IP_ADDRESS> 1521
--file translate, translate file from B to A
1. host_A : nc -l 1521 > /tmp/hosts
2. host_B : nc my160165.cm6 1521 < /etc/hosts
#nc -h
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port]
[-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version]
[-x proxy_address[:port]] [hostname] [port[s]]
Command Summary:
-4 Use IPv4
-6 Use IPv6
-D Enable the debug socket option
-d Detach from stdin
-h This help text
-i secs Delay interval for lines sent, ports scanned
-k Keep inbound sockets open for multiple connects
-l Listen mode, for inbound connects
-n Suppress name/port resolutions
-p port Specify local port for remote connects
-r Randomize remote ports
-s addr Local source address
-T ToS Set IP Type of Service
-C Send CRLF as line-ending
-t Answer TELNET negotiation
-U Use UNIX domain socket
-u UDP mode
-v Verbose
-w secs Timeout for connects and final net reads
-X proto Proxy protocol: "4", "5" (SOCKS) or "connect"
-x addr[:port] Specify proxy address and port
-z Zero-I/O mode [used for scanning]
Port numbers can be individual or ranges: lo-hi [inclusive]


Solid Notifications Protocol
Version 0.1.0, 2022-05-09
More details about this document
- This version
- https://solidproject.org/TR/2022/notifications-protocol-20220509
- Original resource
- https://solidproject.org/TR/notifications-protocol
- Editor’s draft
- https://solid.github.io/notifications/protocol
- Created
- Published
- Modified
- Repository
- GitHub
- Issues
- Derived From
- Language
- English
- License
- MIT License
- Document Status
- Published
- Resource State
- Memento
- In Reply To
- Solid Origin
- Notifications Panel Charter
- Policy
-
- Rule
- Offer
- Unique Identifier
- https://solidproject.org/TR/notifications-protocol#document-policy-offer
- Target
- https://solidproject.org/TR/notifications-protocol
- Permission
-
- Assigner
- W3C Solid Community Group
- Action
MIT License. Copyright © 2022 W3C Solid Community Group.
Abstract
This specification defines a Linked Data-based protocol for subscribing to resources in the Solid ecosystem. This protocol includes a mechanism for both discovering and establishing subscriptions to resources while also considering resource-based access controls and privacy.
Status of This Document
This section describes the status of this document at the time of its publication.
This document was published by the Solid Community Group as Version 0.1.0. The sections that have been incorporated have been reviewed following the Solid process. However, the information in this document is still subject to change. You are invited to contribute any feedback, comments, or questions you might have.
Publication as Version 0.1.0 does not imply endorsement by the W3C Membership. This document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
This document was produced by a group operating under the W3C Community Contributor License Agreement (CLA). A human-readable summary is available.
Introduction
This section is non-normative.
Much of the Solid Protocol is built on a RESTful API. This allows Solid to make use of well-understood interactions with resources on the Web, and this satisfies many use cases for client applications in the Solid ecosystem. However, for interactive client applications with multiple participants, chat-apps being just one such example, a RESTful API is too limited, as clients need to rely on polling in order to discover changes in the underlying data.
A notification API for Solid would complement the core RESTful API so that clients can listen for updates to particular resources. In addition, a notification-based mechanism may reduce latency and load on a Pod server.
One challenge with (near) real-time notifications on the Web involves the diversity of technologies available. WebSockets and EventSource APIs are two options that are widely supported by browsers; ReadableStreams are becoming more widely supported. Furthermore, there are other, more asynchronous models that are relevant in certain cases: WebHooks, WebSub and Linked Data Notifications are three examples. A major goal of the model described in this document is to make it possible for client applications to navigate the diversity of these technologies while also being open to new notification mechanisms as they emerge.
Finally, a critically important part of this model is security. Any notification-based API not only needs the same level of security that is found in the RESTful API but also the authorization mechanism needs to be consistent.
This specification is for:
- Resource server developers that want to enable clients to listen for updates to particular resources.
- Application developers who want to implement a client to listen for updates to particular resources.
In addition to this specification, readers might find the Use Cases and Requirements for Notifications Protocol [NOTIFICATIONS-UCR document useful.
Overview
This section is non-normative.
The following diagrams show the high-level interactions involved in source and target flows. How a client retrieves an access token for step 3 is outside the scope of this document.
Terminology
This section is non-normative.
This document uses terminology from the Solid Protocol specification, including data pod
. This document also uses terms from The OAuth 2.0 Authorization Framework specification, including resource server
, authorization server
and client
, as well as terms from the WebSub specification, including topic
.
This specification defines the following terms. These terms are referenced throughout this specification.
- Notification Subscription API
- An HTTP URI at which a client can initiate a subscription to notification events for a particular set of resources [RFC7231].
- Notification Subscription Metadata Resource
- An RDF document [RDF11-CONCEPTS] that includes metadata about the capabilities of a Notification Subscription API.
Namespaces
| Prefix | Namespace | Description |
|---|---|---|
rdf |
http://www.w3.org/1999/02/22-rdf-syntax-ns# | [rdf-schema] |
solid |
http://www.w3.org/ns/solid/terms# | Solid Terms |
notify |
http://www.w3.org/ns/solid/notifications# | Solid Notifications |
Conformance
All assertions, diagrams, examples, and notes are non-normative, as are all sections explicitly marked non-normative. Everything else is normative.
The key words “MUST” and “MUST NOT” are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
Protocol
The notification protocol includes both the Discovery of the capabilities of a subscription resource as well as the mechanism for establishing a Subscription.
Individual subscription types may augment the discovery and subscription requirements of the notification protocol.
Discovery
Issue: Notification Subscription Metadata Discovery
The specific mechanism defining the discovery of the Notification Subscription Metadata Resource is under consideration: issues/58.
The server MUST be capable of serializing the Notification Subscription Metadata Resource as Turtle [TURTLE] or JSON-LD [JSON-LD11].
Turtle Serialization
When serializing the Notification Subscription Metadata Resource as Turtle,
every notify:notificationChannel
definition
MUST
materialize an rdf:type
triple, indicating the channel type.
A sample representation of this resource might include the following:
The Notifications Panel will need to define a notification vocabulary to support this feature.
JSON-LD Serialization
When serializing the Notification Subscription Metadata Resource as JSON-LD,
the @context
field MUST
be an array containing the value https://www.w3.org/ns/solid/notification/v1
.
In addition, for every notificationChannel
definition,
the Subscription Metadata Resource MUST
materialize a type
field, indicating the channel type.
The Notifications Panel will need to define a JSON-LD context resource to support this feature.
Subscription
A subscription resource is an RDF document [RDF11-CONCEPTS] that can hold any information, typically used by clients to discover available features and capabilities (see Notification Features).
Servers MUST accept GET
, HEAD
and OPTIONS
requests targeting the subscription resource.
Servers
MUST accept
authorized POST
requests targeting the subscription resource
with a well-formed payload serialized as JSON-LD.
The JSON-LD payload received by a server in a POST
request
MUST contain
at least three fields: @context
, type
and topic
.
All other data requirements are defined by the individual subscription types.
Some common feature properties are described in the Features section of this document.
- @context
-
The
@context
property is MUST be an array containing the valuehttps://www.w3.org/ns/solid/notification/v1
. Other values MAY also be present. - type
-
The
type
property MUST indicate the subscription type to be created. - topic
-
The
topic
property MUST indicate the IRI(s) of the resources about which the client would like to receive notifications.
Subscription Types
This document makes it possible to define new subscription types. A list of known subscription types is available in the Solid Notifications source repository.
Guidelines for defining new subscription types are included in the Subscription Types Extension section.
Notification Features
Features allow clients to customize the details of a subscription. Some features are specific to particular subscription types while others may be used across all types. These shared features are listed as an initial baseline, though not all subscription types are required to implement these. Individual subscription types may define type-specific features. The list of common, shared features is not intended to be exhaustive.
The requirements for new notification features is explained in the Notification Features Extension section.
- expiration
- An ISO 8601 datetime value indicating a proposed expiration point for a subscription. A server may choose another value.
- state
- An opaque value representing the last known state of a resource. If the resource state is known to have changed when the client establishes a subscription, an initial notification must be sent to the client. This value should correspond to a resource's
ETag
header value. - rate
- An ISO 8601 duration value indicating the minimum amount of time to elapse between notifications sent to the client
- accept
- A MIME-Type value that indicates the desired serialization of the notification. For instance,
text/turtle
may be acceptable.
Notification Data Model
The content of a Solid Notification is defined in terms of a Activity Streams 2.0 [ACTIVITYSTREAMS-CORE]. As such, JSON-LD 1.0 is a required baseline serialization format, though other formats are not prohibited [JSON-LD]. JSON-LD version 1.1 is recommended when using JSON-LD serializations [JSON-LD11].
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://www.w3.org/ns/solid/notification/v1"
],
"id":"urn:uuid:<uuid>",
"type": [
"Update"
],
"actor": [
"<WebID>"
],
"object": {
"id":"https://example.org/<user>/some-container/",
"type": [
"http://www.w3.org/ns/ldp#BasicContainer",
"http://www.w3.org/ns/ldp#Resource",
"http://example.com/SomeType"
]
},
"state": "1234-5678-90ab-cdef-12345678",
"published":"2021-08-05T01:01:49.550044Z"
}
Note: Solid Notification JSON-LD Context
The Solid JSON-LD context resource does not currently exist. An implementation may choose to augment the context definition.
The content of these serialized notifications may be extended, but the example here provides a minimal baseline that clients can expect.
Extensions
Extensions incorporate additional features beyond what is defined in this specification. Extensions MUST NOT contradict nor cause the non-conformance of functionality defined in this specification.
Subscription Types Extension
This section is non-normative.
New subscription types may be defined and published independently of this document. This section describes some guidelines and recommendations for publishing new subscription types.
Each new subscription type will declare a unique IRI for use with both discovery and with the establishment of new subscription connections.
When defining IRIs for use with a subscription type, it is considered best practice to publish vocabulary and JSON-LD context documents that are publicly accessible.
An example subscription request with a custom @context
is below:
Note: Subscription Types Index
An index of subscription types that are work in progress can be found at the repository hosting this document. The index of subscription types that are published as a Solid Technical Report can be found at Notification Subscription Types.
While not necessary, we encourage authors to register subscription types with the Solid project, allowing them to be discovered by the Solid community. The process for registration shall be available at the Solid Notifications repository.
Notification Features Extension
This section is non-normative.
Considerations
This section details security, privacy, accessibility and internationalization considerations.
Some of the normative references with this specification point to documents with a Living Standard or Draft status, meaning their contents can still change over time. It is advised to monitor these documents, as such changes might have implications.
Security Considerations
This section is non-normative.
Privacy Considerations
This section is non-normative.
Accessibility Considerations
This section is non-normative.
Internationalization Considerations
This section is non-normative.
Security and Privacy Review
This section is non-normative.
These questions provide an overview of security and privacy considerations for this specification as guided by [SECURITY-PRIVACY-QUESTIONNAIRE].
- What information might this feature expose to Web sites or other parties, and for what purposes is that exposure necessary?
- ..
- Do features in your specification expose the minimum amount of information necessary to enable their intended uses?
- ..
- How do the features in your specification deal with personal information, personally-identifiable information (PII), or information derived from them?
- ..
- How do the features in your specification deal with sensitive information?
- ..
- Do the features in your specification introduce new state for an origin that persists across browsing sessions?
- ..
- Do the features in your specification expose information about the underlying platform to origins?
- ..
- Does this specification allow an origin to send data to the underlying platform?
- ..
- Do features in this specification allow an origin access to sensors on a user’s device
- ..
- What data do the features in this specification expose to an origin? Please also document what data is identical to data exposed by other features, in the same or different contexts.
- ..
- Do features in this specification enable new script execution/loading mechanisms?
- ..
- Do features in this specification allow an origin to access other devices?
- ..
- Do features in this specification allow an origin some measure of control over a user agent’s native UI?
- ..
- What temporary identifiers do the features in this specification create or expose to the web?
- ..
- How does this specification distinguish between behaviour in first-party and third-party contexts?
- ..
- How do the features in this specification work in the context of a browser’s Private Browsing or Incognito mode?
- ..
- Does this specification have both "Security Considerations" and "Privacy Considerations" sections?
- ..
- Do features in your specification enable origins to downgrade default security protections?
- ..
- How does your feature handle non-"fully active" documents?
- ..
References
Normative References
- [ACTIVITYSTREAMS-CORE]
- Activity Streams 2.0. James Snell; Evan Prodromou. W3C. 23 May 2017. W3C Recommendation. URL: https://www.w3.org/TR/activitystreams-core/
- [JSON-LD]
- JSON-LD 1.0. Manu Sporny; Gregg Kellogg; Markus Lanthaler. W3C. 3 November 2020. W3C Recommendation. URL: https://www.w3.org/TR/json-ld/
- [JSON-LD11]
- JSON-LD 1.1. Gregg Kellogg; Pierre-Antoine Champin; Dave Longley. W3C. 16 July 2020. W3C Recommendation. URL: https://www.w3.org/TR/json-ld11/
- [LDN]
- Linked Data Notifications. Sarven Capadisli; Amy Guy. W3C. 2 May 2017. W3C Recommendation. URL: https://www.w3.org/TR/ldn/
- [OAUTH-POP-KEY-DISTRIBUTION]
- OAuth 2.0 Proof-of-Possession: Authorization Server to Client Key Distribution. J. Bradley; P. Hunt; M. Jones; H. Tschofenig. IETF. 5 March 2015. Internet Draft (work in progress). URL: https://datatracker.ietf.org/doc/draft-ietf-oauth-pop-key-distribution/
- [RDF-SCHEMA]
- RDF Schema 1.1. Dan Brickley; Ramanathan Guha. W3C. 25 February 2014. W3C Recommendation. URL: https://www.w3.org/TR/rdf-schema/
- [RDF11-CONCEPTS]
- RDF 1.1 Concepts and Abstract Syntax. Richard Cyganiak; David Wood; Markus Lanthaler. W3C. 25 February 2014. W3C Recommendation. URL: https://www.w3.org/TR/rdf11-concepts/
- [RFC2119]
- Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
- [RFC3986]
- Uniform Resource Identifier (URI): Generic Syntax. T. Berners-Lee; R. Fielding; L. Masinter. IETF. January 2005. Internet Standard. URL: https://datatracker.ietf.org/doc/html/rfc3986
- [RFC6454]
- The Web Origin Concept. A. Barth. IETF. December 2011. Proposed Standard. URL: https://datatracker.ietf.org/doc/html/rfc6454
- [RFC6749]
- The OAuth 2.0 Authorization Framework. D. Hardt, Ed.. IETF. October 2012. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6749
- [RFC7231]
- Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. R. Fielding, Ed.; J. Reschke, Ed.. IETF. June 2014. Proposed Standard. URL: https://httpwg.org/specs/rfc7231.html
- [RFC8274]
- Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
- [RFC8288]
- Web Linking. M. Nottingham. IETF. October 2017. Proposed Standard. URL: https://httpwg.org/specs/rfc8288.html
- [SOLID-OIDC]
- SOLID-OIDC. Aaron Coburn; elf Pavlik; Dmitri Zagidulin. W3C Solid Community Group. W3C Editor's Draft. URL: https://solid.github.io/solid-oidc/
- [SOLID-PROTOCOL]
- Solid Protocol. Sarven Capadisli; Tim Berners-Lee; Ruben Verborgh; Kjetil Kjernsmo. W3C Solid Community Group. W3C Editor’s Draft. URL: https://solidproject.org/TR/protocol
- [TURTLE]
- RDF 1.1 Turtle. Eric Prud'hommeaux; Gavin Carothers. W3C. 25 February 2014. W3C Recommendation. URL: https://www.w3.org/TR/turtle/
- [WEBSOCKETS]
- The WebSocket API. Ian Hickson. W3C. 28 January 2021. W3C Note. URL: https://www.w3.org/TR/websockets/
- [WEBSUB]
- WebSub. Julien Genestoux; Aaron Parecki. W3C. 23 January 2018. W3C Recommendation. URL: https://www.w3.org/TR/websub/
Informative References
- [NOTIFICATIONS-UCR]
- Solid Notifications Use Cases and Requirements. Sarven Capadisli. W3C. 20 January 2022. W3C Editor’s Draft. URL: https://solid.github.io/notifications-panel/notifications-ucr
- [SECURITY-PRIVACY-QUESTIONNAIRE]
- Self-Review Questionnaire: Security and Privacy. Theresa O'Connor; Peter Snyder. W3C. 23 March 2021. W3C Note. URL: https://www.w3.org/TR/security-privacy-questionnaire/
- [WEBARCH]
- Architecture of the World Wide Web, Volume One. Ian Jacobs; Norman Walsh. W3C. 15 December 2004. W3C Recommendation. URL: https://www.w3.org/TR/webarch/


Sausage, caramelized onions, and fennel.
Pepperoni, tomatoes, mushrooms, and onion
Sizes
Vegeterian
Chicken Pizza
Crust
Toppings
Multiple purchases


Thank you for your order! |
||||
|
||||
|
||||
|
Please do not reply to this email, this email address is not monitored. |
||||
{COMPANY_NAME} |
||||
| {COMPANY_ADDRESS1} | ||||
| {COMPANY_CSZ} | ||||
| {COMPANY_PHONE} |


My name is Trevor Mahoney. I am 21 years old an am a former college student who had a change of heart and was looking to do something I can enjoy and make a living out of.


---
sort_order: 25
tei_id: rdx_b5h9g.p.idp10478032
annotation_count: 0
images:
small-thumbnail: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcj2c/mini-thumbnail/
json: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcj2c/info/
full: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcj2c/fs/
page: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcj2c/single-page/
thumbnail: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcj2c/thumbnail/
title: Page 25
number: 25
---
{% raw %}JACOB HODGES. 17{% endraw %}
{% raw %}await his trial, at the next session of uV{% endraw %}
{% raw %}court cf oyer and terminer.{% endraw %}
{% raw %}At this court, indictments were found{% endraw %}
{% raw %}by the grand jury against the three white{% endraw %}
{% raw %}men, Jacob, and Mrs. T., for the wilful{% endraw %}
{% raw %}murder of Jennings. Upon the trial of{% endraw %}
{% raw %}the white men and Mrs. T., Jacob wa?{% endraw %}
{% raw %}the chief witness on the part of the prose¬{% endraw %}
{% raw %}cution. His testimony commences as fol¬{% endraw %}
{% raw %}lows: "About one year ago, one of the{% endraw %}
{% raw %}prisoners told me that I was a fit person{% endraw %}
{% raw %}to destroy Jennings. Another said to me,{% endraw %}
{% raw %}I wish I had killed him, and in the even¬{% endraw %}
{% raw %}ing he requested me to do it. During the{% endraw %}
{% raw %}sitting of the court, last fall, two of them{% endraw %}
{% raw %}several times spoke to me, and wished I{% endraw %}
{% raw %}would do it; and told me not to let my{% endraw %}
{% raw %}mind fail me, for I should have spirits{% endraw %}
{% raw %}enough; that Y :.nd D. would assist me,{% endraw %}
{% raw %}and would divide one thousand dollars{% endraw %}
{% raw %}between them and nie. On Thursday, be¬{% endraw %}
{% raw %}fore the murder, after an hour's conversa¬{% endraw %}
{% raw %}tion, 1 agreed to kill Jennings. On Satur¬{% endraw %}
{% raw %}day, C. loaded the gun, and showed me{% endraw %}
{% raw %}how to do it. When the sun was about an{% endraw %}
{% raw %}2*{% endraw %}


Lead, HBO GO Data Analytics and Insights
Apr 2020 - Present
Warner Bros. Discovery, Inc. (WBD) is an American multinational mass media and entertainment conglomerate headquartered in New York City.
The company's properties are divided into nine business units, including the flagship Warner Bros. film and television studios, comic book publisher DC Entertainment, Home Box Office, Inc. (which includes HBO), U.S. Networks (which includes the majority of the ad-supported cable networks of its predecessors, including Discovery, Scripps Networks, Turner Broadcasting, and Warner), CNN, Sports (which includes Motor Trend Group, AT&T SportsNet, TNT Sports, and Eurosport, among others), Global Streaming & Interactive Entertainment (which includes the Discovery+ and HBO Max streaming services, and video game publisher Warner Bros. Games), and International Networks.
My Role:
* Lead the team to proactively identify and define high-impact problems and opportunities. Build, coach, and mentor data analytics group
* Create innovative solutions to problems via in-depth analysis of the data. Conceive, plan, and prioritize data projects
* Primary partner for cross-functional stakeholders (Product, Tech, Marketing, Finance, Programming, Content, Affiliate Partners) and geographies (SG, MY, ID, PH, TH, TW, HK, VN) to improve analytical capabilities around data architecture, modeling, and visualization.
* Translate analytic insights into concrete, actionable recommendations for business or product improvement
* Direct the team to design and develop statistical/machine learning models, around key performance metrics, that explain user acquisition, retention, and engagement on our digital platforms, various partner initiatives, and devices
* Ensure data quality and integrity; Create and enforce policies for effective data management


We're sorry but admin-website doesn't work properly without JavaScript enabled. Please enable it to continue.


Note: This english translation is a first draft and may undergo further improvements.
Told here is the story of Rita, a laying hen who experiences the different forms of the egg industry. But Rita is no regular „egg-worker“. Little by little, she discovers her own basic instincts and does not hesitate to fight for them.
This project aims to provide an overview of regulations and conditions in the different forms of the laying hen industry (hatchery, barn, free range, organic) in Germany. These are encountered with positions that are predominantly derived from the laying hens lineage of their ancestors, the junglefowls.
Initially the project was created in german language, therefore all cited sources are only available in German.
The project is a student work, created in 2017 as part of the course „Hühner à la carte“, a cooperation between the University of Applied Sciences Potsdam, Humboldt-Universität zu Berlin and the IRI THESys institute.
Thanks to the interdisciplinary cooperation it was possible to present the project in several exhibitions.


Learn from LearnEd for better higher studies in
Indian Institutes of Technologies(IIT)
Practice Mathematics on your tips...
Learn deeply about Digital Logic Circuits...
Build your concepts strong easily with our great tutors...
Build your concepts strong easily with our great tutors...
Build your concepts strong easily with our great tutors...
Build your concepts strong easily with our great tutors...
Build your concepts strong easily with our great tutors...
Practice more and more question papers


#assign querypartialobjects = "true">
Partial Objects
is where an entity bean is not fully populated with all its properties but instead has only
some of it's properties populated/loaded.
Partial properties are very important from a database
, JDBC
and network
performance perspective and everything in Ebean is built to support partially populated beans. The query
language, enhancement, persisting, event adapters and all of Ebean's internals work on the premise that
partially populated beans are the norm.
If a SQL query executes where all the columns used are included in an index then the database has the ability to return the query result by only using the index and specifically avoid reading the data blocks associated with the table. This is sometimes described as a "covering index" or "covering query".
Small number of columns selected = opportunity for index only query```java database.find(Customer.class) // only fetch the customer id and name // ... if there is an index covering id and name the database has the ability // ... to avoid reading the customer table data blocks and instead resolve the // ... query by only using the index (which can be much faster) .select("name") // predicates and order by covered by index .where().name.istartsWith("rob") .orderBy().name.asc() .findList(); ```
Similar to 'Index only query' is the case for joins where the columns needed/used on the joined table can be fully resolved by an index. For example, joining the customer table and only needing customer name. Similarly, joining to the product table and only needing the product name. These are examples where the join can often be resolved by the database by just using an index and not actually needing to read/access the table data blocks (join resolved by just reading the index blocks and avoiding reading the table blocks).
Small number of columns selected in joined table = opportunity for index only join```java database.find(Order.class) ... // only fetch the customer id and name // ... if there is an index on the customer table that is covering the customer id and name // ... the database has the ability to avoid reading the customer table data blocks and instead // ... resolve the join part of this query from only the customer index (which is faster) .fetch("customer", "name") ... .findList(); ```
When the database is processing the query it creates buffers to performing sorting, joining etc. These buffers are larger when there is more columns involved as there is more data. If you can only select the columns needed then these buffers and the amount of data involved in the sorting, joining etc is reduced. This is more important if the columns that can be excluded are large varchar columns or the entity beans are mapped to tables with large numbers of columns.
Less columns selected = smaller buffers used by DB to process sorts/joins etc
The JDBC driver also has buffers to pump the resultSet data over the network. More columns means a bigger JDBC buffer and more memory required by the JDBC driver.
Less columns selected = smaller buffers used by JDBC driver
More columns included in the fetch means more data is pumped over the network. Note that some JDBC drivers do have something like column wise compression to reduce the network payload when values repeat (as repeating values is a pretty common occurrence with SQL resultSet data).
Less columns selected = less data pumped over the network
Ebean makes it easy to control what you want to fetch on a query using select()
and fetch()
.
select()
is used to define the specific properties to fetch/load for the root level and fetch()
is used to define the properties to fetch/load for all other levels (with additional control over eager/lazy loading
and loading batch size etc).
AutoTune will tune each query for each use case to fetch the minimal set of properties
Manually optimising queries to fetch only what is needed can be some work and even when you do that you often have the case where a single query like 'find order by id' is used in multiple user cases and each use case uses a different part of the object graph.
AutoTune is a feature than can profile the object graph use relative to the call stack for each query and provide an query that selects/fetches only what is used for the given call stack - effectively provide a nice automated way of optimising the query to only fetch what the application uses.


Search
Anywhere
Anywhere
Options
Files
Internet
Settings
Start
Sergey Pimenov
General
Calendar
Inbox
Pressure:
mm
Ozone:
Wind bearing:
Wind speed:
0
m/s
Weather
Images
Gallery
Photos
Office
Games
X-Box Live
Other
Editor
Store
Skype
OneDrive


Actions (Hold to reposition)
Location Info
Event Log
Player Status
Cash at Bank: $
Working Capital: $
Current Assets: $
Current Liabilities: $
Chapter 2 Completed
Photography Game Mode Now Avaliable
Chapter 3 Now Avaliable
Welcome to the photography game. In this game your goal is to try to survive as long as possible. Do not let your Working Capital drop below -$2000.
You can end this tutorial at any time. Click next to continue the tutorial.
Here are your financial status.
Cash at bank measures the amount of money you have.
Working Capital is your actual value.
Current Assets is the value of all your assets together (photos etc...).
Current Liabilities is your monthly debt you must pay.
You must travel and take photos of locations and events scattered around Australia.
Each of the red marker on the map indicates a potential for photos to be taken.
Hover over them to see a overview of the area.
Potential Revenue is the amount of money you could make from that area.
Travel Expense is the cost of travelling to that location from your current location. This will deduct from your cash at bank.
To move, simply click any of the red markers.
Now you can take a photo by pressing 'Take Picture' in your actions bar.
To view the photo you have taken, press 'Inventory' in your actions bar.
As you perform actions, the Event Log will keep a track and display the effect of your actions.
Travel around Australia and take a few more pictures. Press next when you're ready.
You may have noticed your photos depreciate in value the longer you keep them. It is important to plan ahead and try maximise as much profit as possible.
In order to sell the photos, you must wash them. Press 'Wash' in the action bar to wash your photos.
Once they are washed, press 'Sell' to sell your Photos.
Should you run out of photo opportunities, you can wait some time by pressing 'Wait' on the action bar.
The longer you wait, the more opportunities will show up.
If you are in a financial struggle, you can take a bank loan by pressing 'Take Loan' on the action bar.
You will need to repay the additional interest expense at the end of the month.
Occationally there will be rare photo opportunities. These photos can be added to your personal collection and can be sold for a high value. Keep an eye out for them.
This concludes the tutorial. Good luck have fun!


login
Sign In
Welcome to browse Here!
Service
Retailer
Toggle navigation
Zhong Guan Cun
Home
Link
Dropdown
Action
Another action
Something else here
Separated link
One more separated link
Submit
Link
Dropdown
Action
Another action
Something else here
Separated link
All
product
price
amount
total
operation
All
delete
check out
total：$
0.00
selected items:
0
product
︽
︾
◆
◆
Box of macaroons
A very delicious macaroons ...
$19.99
modify
Name
Price
Amount
H_Discount
B_Discount
Status
Avaliable
Unavaliable
Branch
url
Cherry Straws
A very delicious macaroons ...
$34.99
modify
Name
Price
Amount
H_Discount
B_Discount
Status
Avaliable
Unavaliable
Branch
url
Coffee Macaroons
A very delicious macaroons ...
$59.99
modify
Name
Price
Amount
H_Discount
B_Discount
Status
Avaliable
Unavaliable
Branch
url
Finetti ones
A very delicious macaroons ...
$9.99
modify
Name
Price
Amount
H_Discount
B_Discount
Status
Avaliable
Unavaliable
Branch
url
Minty duo
A very delicious macaroons ...
$3.99
modify
Name
Price
Amount
H_Discount
B_Discount
Status
Avaliable
Unavaliable
Branch
url
Pistachio
A very delicious macaroons ...
$13.99


libhybrid++
A library for discretized Hybrid Dynamical Systems
Here is a list of all file members with links to the files they belong to:
- c -
c1 :
model_sliding_masses.hpp
c2 :
model_sliding_masses.hpp
- d -
d :
model_sliding_masses.hpp
DGELS_CALL :
math.hpp
dim_p :
model_sliding_masses.hpp
,
model_bouncing_ball.hpp
dim_u :
model_bouncing_ball.hpp
,
model_sliding_masses.hpp
dim_x :
model_bouncing_ball.hpp
,
model_sliding_masses.hpp
dim_y :
model_sliding_masses.hpp
,
model_bouncing_ball.hpp
- h -
HybridModel :
model_bouncing_ball.hpp
,
model_sliding_masses.hpp
- i -
Input :
model_bouncing_ball.hpp
,
model_sliding_masses.hpp
IntegrationScheme :
model_bouncing_ball.hpp
,
model_sliding_masses.hpp
- k -
k1 :
model_sliding_masses.hpp
k2 :
model_sliding_masses.hpp
- m -
m1 :
model_sliding_masses.hpp
m2 :
model_sliding_masses.hpp
- o -
Output :
model_bouncing_ball.hpp
,
model_sliding_masses.hpp
- p -
p_idx :
model_sliding_masses.hpp
Params :
model_bouncing_ball.hpp
,
model_sliding_masses.hpp
- s -
SGELS_CALL :
math.hpp
State :
model_bouncing_ball.hpp
,
model_sliding_masses.hpp
StateJacobian :
model_bouncing_ball.hpp
,
model_sliding_masses.hpp
Generated by
1.8.14


Class: Aws::SageMaker::Types::Filter
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Struct
|
|
|
Instance Chain:
self,
::Aws::Structure ,
Struct
|
|
| Inherits: |
Struct
|
| Defined in: | gems/aws-sdk-sagemaker/lib/aws-sdk-sagemaker/types.rb |
Overview
A conditional statement for a search expression that includes a
resource property, a Boolean operator, and a value. ::Aws::Resources
that
match the statement are returned in the results from the Search
API.
If you specify a Value
, but not an Operator
, ::Aws::SageMaker
uses the
equals operator.
In search, there are several property types:
Metrics
: To define a metric filter, enter a value using the form
"Metrics.<name>"
, where <name>
is a metric name. For example,
the following filter searches for training jobs with an "accuracy"
metric greater than "0.9"
:
\{
"Name": "Metrics.accuracy",
"Operator": "GreaterThan",
"Value": "0.9"
\}
HyperParameters
: To define a hyperparameter filter, enter a value with the form
"HyperParameters.<name>"
. Decimal hyperparameter values are
treated as a decimal in a comparison if the specified Value
is
also a decimal value. If the specified Value
is an integer, the
decimal hyperparameter values are treated as integers. For example,
the following filter is satisfied by training jobs with a
"learning_rate"
hyperparameter that is less than "0.5"
:
\{
"Name": "HyperParameters.learning_rate",
"Operator": "LessThan",
"Value": "0.5"
\}
Tags
: To define a tag filter, enter a value with the form Tags.<key>
.
Constant Summary
Instance Attribute Summary
-
#name ⇒ String
rw
A resource property name.
-
#operator ⇒ String
rw
A Boolean binary operator that is used to evaluate the filter.
-
#value ⇒ String
rw
A value used with
Name
andOperator
to determine which resources satisfy the filter's condition.
Instance Method Summary
::Aws::Structure
- Included
| #to_hash | Alias for Aws::Structure#to_h. |
Instance Attribute Details
#name ⇒ String
(rw)
A resource property name. For example, TrainingJobName
. For valid
property names, see SearchRecord. You must specify a valid
property for the resource.
#operator ⇒ String
(rw)
A Boolean binary operator that is used to evaluate the filter. The operator field contains one of the following values:
Equals
: The value of Name
equals Value
.
NotEquals
: The value of Name
doesn't equal Value
.
Exists
: The Name
property exists.
NotExists
: The Name
property does not exist.
GreaterThan
: The value of Name
is greater than Value
. Not supported for
text properties.
GreaterThanOrEqualTo
: The value of Name
is greater than or equal to Value
. Not
supported for text properties.
LessThan
: The value of Name
is less than Value
. Not supported for text
properties.
LessThanOrEqualTo
: The value of Name
is less than or equal to Value
. Not
supported for text properties.
In
: The value of Name
is one of the comma delimited strings in
Value
. Only supported for text properties.
Contains
: The value of Name
contains the string Value
. Only supported
for text properties.
A SearchExpression
can include the Contains
operator multiple
times when the value of Name
is one of the following:
Experiment.DisplayName
Experiment.ExperimentName
Experiment.Tags
Trial.DisplayName
Trial.TrialName
Trial.Tags
TrialComponent.DisplayName
TrialComponent.TrialComponentName
TrialComponent.Tags
TrialComponent.InputArtifacts
TrialComponent.OutputArtifacts
A SearchExpression
can include only one Contains
operator for
all other values of Name
. In these cases, if you include
multiple Contains
operators in the SearchExpression
, the
result is the following error message: "'CONTAINS' operator
usage limit of 1 exceeded.
"
#value ⇒ String
(rw)
A value used with Name
and Operator
to determine which resources
satisfy the filter's condition. For numerical properties, Value
must be an integer or floating-point decimal. For timestamp
properties, Value
must be an ISO 8601 date-time string of the
following format: YYYY-mm-dd'T'HH:MM:SS
.


Gateway
BOT
22-Apr-19 07:21 PM
[dscrd-hush] <Inevitability> Dukeleto said that "HUSH has fully functional new web wallet" but it's wrong actually . Because when I tri send HUSH from my web wallet - a see error 400.
[dscrd-hush] <Inevitability> Fully functional? Haha - Just new address and nothing more .....
[dscrd-hush] <penguin> this guy.
[dscrd-hush] <ComputerGenie - ChickenPool>
[dscrd-hush] <Inevitability>
[dscrd-hush] <penguin> you should try reading the text around here, some time ..
[dscrd-hush] <ComputerGenie - ChickenPool> newvulcanToday at 1:13 PM
If you get a Status Code 400 error with the web wallet, reload the webpage and reimport the priv key and it all works again
[dscrd-hush] <penguin> merry christmas.
[dscrd-hush] <ComputerGenie - ChickenPool> and a crappy new beer
[dscrd-hush] <Inevitability> i try
[dscrd-hush] <ComputerGenie - ChickenPool> is in the US, all the beer we get is crappy (new or old)
[dscrd-hush] <penguin> i can only try imagine - i do know half the stuff there is fake to begin with :/\
[dscrd-hush] <penguin> get yourself some japanese whisky - its magnificient !
[dscrd-hush] <ComputerGenie - ChickenPool> I've lived from coast to coast and I can count on 1 hand the number of people I've met that know what good whisky or good beer tastes like
(edited)
[dscrd-hush] <penguin> ha - that's quite daunting ..
[dscrd-hush] <Inevitability> scotch whisky - That's best from the best
[dscrd-hush] <Inevitability> Drink now!
[dscrd-hush] <ComputerGenie - ChickenPool> scotch whisky is a broad a term as tall tree
(edited)
[dscrd-hush] <Inevitability> Glenfiddich 13 and 15 yers
[dscrd-hush] <Inevitability> I love that ))
[dscrd-hush] <ComputerGenie - ChickenPool> on the down-side, I'd rather drink American "beer" than Glenlivet 12 yr
[dscrd-hush] <ComputerGenie - ChickenPool> =
[dscrd-hush] <Inevitability> I hate beer
[dscrd-hush] <Inevitability> What whisky you drink ?
[dscrd-hush] <Inevitability> Everybody likes different whiskies. Do you think you like the best whiskey? But this is only your opinion.  And this may well be true))
[dscrd-hush] <Inevitability> ooohhh Label
[dscrd-hush] <Inevitability> Classic .... A love that, Red, black, Blue. All of this. But Glent. -It's special for me.
[dscrd-hush] <Inevitability> I thought you were going to say something rare or exotic. ))
[dscrd-hush] <ComputerGenie - ChickenPool> is too poor for rare and exotic


Some library users do not have CCA accounts.
If you fall into one of these categories, use the login form below. Your username is of the form "surname.givenname" (e.g. "jones.olivia" for someone named "Olivia Jones") and your password is initially set to your library barcode (something like PCAC9876543210X
) but can be changed. Contact us if you experience any problems.


Sir Gustav Athebaldt:
Wonderful! You were able to secure the Scepter of Judgement! Where is your clan leader, by the way? I trust he wasn't hurt?


A hierarchical/tree selection control for AngularJS. It can either have the whole data structure (a tree) passed to it or set to asynchronously load each level via a callback. It also allows auto-complete searching of the tree, optional multiple selection and kayboard navigation.
View on GitHub Latest Release<!-- Include AngularJS (we'll skip this in futher examples) -->
<script id="angularScript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.5/angular.min.js"></script>
<!-- Somewhere on your page -->
<hierarchical-selector data="data" on-selection-changed="selectedItem = items" />
<hierarchical-selector data="data" multi-select="true" on-selection-changed="onSelectionChanged(items)" />
Also works in single selection mode
<hierarchical-selector data="data" select-only-leafs="true" multi-select="true" on-selection-changed="onSelectionChanged(items)" />
For custom logic of if an item should be selectable. Takes preference over select-only-leafs
$scope.selectOnly1Or2 = function(item) {
if (item)
return /[12]/.test(item.name);
return false;
};
<hierarchical-selector data="data" can-select-item="selectOnly1Or2(item)" multi-select="true" on-selection-changed="onSelectionChanged(items)" />


---
layout: post
title: 'Lorenzo''s Music Podcast #9'
date: '2005-09-29T18:03:00.000-05:00'
author: Tom Ray
tags:
modified_time: '2005-09-29T19:37:54.290-05:00'
blogger_id: tag:blogger.com,1999:blog-11319466.post-112803508968580870
blogger_orig_url: http://www.lorenzosmusic.com/2005/09/lorenzos-music-podcast-9.html
---
Part four of our series of before and after shows of the songs on the album you can't download.
This week Mark and I discuss what to do for the podcast over the phone.
In this podcast we showcase the song "Too Late Now" from our album - Solamente Tres Palabras.


JSON to CSV Converter
CSV to JSON Converter
Paste Your JSON Here:
[{"Id":1,"UserName":"Sam Smith"}, {"Id":2,"UserName":"Fred Frankly"}, {"Id":1,"UserName":"Zachary Zupers"}]
Wrap values in double quotes
Include labels in first row
Convert to CSV
Download CSV


Released dio version 1.5 today. It incorporates a few improvements that several people have asked for.
| You can now specify a max count which is the number of times that you want dio to sample data. | |
| The scrolling section of dio's output will now expand in size to fit the size of the terminal it's running in. | |
| dio now supports OSA environments. | |
| Some coding improvements including using getopt to get command line options and improving the way it invokes curses. |
Donald McIntosh.
17th October 2002.
Version 1.4 is now available. I have finally done the enhancement that most people have asked for, to provide an easy way of mapping the device name sdX,X (which dio uses) to the more familiar cXtXdXsX notation. The dio -l option now shows the mapping, if it exists, between these two naming schemes.
As usual, thank you to everyone for their suggestions. I've only had time to implement the most popular. Thanks also to everyone who helped me test the new version, including Asif Sadiq, Rocke Robertson, Andrew Brooks and Louwtjie Burger.
Donald McIntosh.
11th January 2002.
I have released another version of dio. It incorporates many improvements and some minor bug fixes. Following is a list of changes and improvements in version 1.3:
| dio now measures write operations and read operations. The br+bw column has been dropped in favour of the more useful ro and wo columns. | |
| The -o option now includes in the log file (which is n ow better formatted) a start time and an end time. | |
| To exit out of dio, users now hit q or ctrl-d instead of the more ugly ctrl-c which was required before. | |
| dio is now available in Solaris package format. This is the download format I would recommend as it includes the man page. | |
| There is now a makefile included in the source as prov ided by Ade Rixon. | |
| Following advice kindly offered by Peter Bray my code is now a lot tidier and compiles without any errors. |
Thank you to everyone who wrote to me with suggestions, makefiles (!) or just to say that they find dio useful. It all helps. I am not intending to do any more enhancements to dio for a while now.
Donald McIntosh.
21th November 2001.
Yet another release, but I am now happy with this one. In version 1.2 the code has been tidied up and has another option -l. If you do dio -l it will print out the device name and class of all the I/O devices on your machine. You can then use dio with any of these devices. This gets round the problem of working out device names which can be quite laborious.
Donald McIntosh.
6th November 2001.
I've done one of the enhancements. There is now a -o option that allows users to specify an output file, where the data is logged. It is logged in a very simlar format to the real-time display, except the columns are also separated by commas. This for ease of import to Excel for example, where one of the data input formats is "comma separated". The source and all the binaries have been updated to dio v1.1.
Donald McIntosh.
5th November 2001.
Two enhancements that I know I need to do, and will be coming soon, is to write an option to provide an output file name. All the data that is currently lost as it scrolls off the screen would be saved to a file. The data could then be graphed in Excel or something, which would be very useful I think. The other thing that I want to do is write wrapper script which derives the sd2,c style of disk notation from the c0t0d0s3 notation, or maps a file system name to a metadevice. I am aware that it's a bit of a hassle to work out the device names just now, so this should sort that.
Donald McIntosh.
3rd November 2001.


|
ActiveTcl User Guide
|
||
Tcl_Alloc, Tcl_Free, Tcl_Realloc, Tcl_AttemptAlloc, Tcl_AttemptRealloc, ckalloc, ckfree, ckrealloc, attemptckalloc, attemptckrealloc - allocate or free heap memory
#include <tcl.h>
char *
Tcl_Alloc(size)
void
Tcl_Free(ptr)
char *
Tcl_Realloc(ptr, size)
char *
Tcl_AttemptAlloc(size)
char *
Tcl_AttemptRealloc(ptr, size)
char *
ckalloc(size)
void
ckfree(ptr)
char *
ckrealloc(ptr, size)
char *
attemptckalloc(size)
char *
attemptckrealloc(ptr, size)
These procedures provide a platform and compiler independent interface for memory allocation. Programs that need to transfer ownership of memory blocks between Tcl and other modules should use these routines rather than the native malloc() and free() routines provided by the C run-time library.
Tcl_Alloc returns a pointer to a block of at least size bytes suitably aligned for any use.
Tcl_Free makes the space referred to by ptr available for further allocation.
Tcl_Realloc changes the size of the block pointed to by ptr to size bytes and returns a pointer to the new block. The contents will be unchanged up to the lesser of the new and old sizes. The returned location may be different from ptr.
Tcl_AttemptAlloc and Tcl_AttemptRealloc are identical in function to Tcl_Alloc and Tcl_Realloc, except that Tcl_AttemptAlloc and Tcl_AttemptRealloc will not cause the Tcl interpreter to panic if the memory allocation fails. If the allocation fails, these functions will return NULL. Note that on some platforms, attempting to allocate a block of memory will also cause these functions to return NULL.
The procedures ckalloc, ckfree, ckrealloc, attemptckalloc, and attemptckrealloc are implemented as macros. Normally, they are synonyms for the corresponding procedures documented on this page. When Tcl and all modules calling Tcl are compiled with TCL_MEM_DEBUG defined, however, these macros are redefined to be special debugging versions of of these procedures. To support Tcl's memory debugging within a module, use the macros rather than direct calls to Tcl_Alloc, etc.
alloc, allocation, free, malloc, memory, realloc, TCL_MEM_DEBUG
Copyright © 1995-1996 Sun Microsystems, Inc. Copyright © 1995-1997 Roger E. Critchlow Jr.


The WiFi Pineapple is more than hardware or software -- it's home to a helpful community of creative penetration testers and IT professionals. Welcome!
The forums are a great place to share feedback and ideas. You'll also find community support and discussion as well as modules, tutorials and firmware releases. Be sure to use the search feature to find answers to common questions.
Find a bug? If it hasn't already been reported, you're encouraged to report it along with detailed steps to reproduce the issue at the bug tracker.
Looking for something a little more informal? The IRC channel is home to a passionate group of WiFi Pineapple enthusiasts. Join us at #pineapple on irc.hak5.org -- though be aware that views expressed are not those of Hak5 or the WiFi Pineapple team.
Tips for reporting issues:
The dashboard provides an at-a-glance view of the WiFi Pineapple status, landing page browser stats, notifications and bulletins.
Landing Page Browser Stats will display hits from popular web browsers when the Landing Page is enabled from Configuration. Notifications will display notifications from modules. The Bulletins feature fetches the latest project information from wifipineapple.com.
Unlike traditional War Driving, whereby the auditor passively listens for beacons being advertised by Access Points to paint a picture of the surrounding WiFi landscape, the WiFi Pineapple Recon goes one giant step further.
By monitoring channels for both beacons and data activity, Recon paints a more complete picture by combining Access Points with their respective clients. With the WiFi landscape displayed in this manner, a tester can quickly identify potential targets from Recon and immediately take action.
Recon allows the auditor to scan for nearby Access Points, or Access Points and their respective Clients. Clients are identified by sniffing for active traffic and are displayed underneath their parent Access Point. If a Client is associated to an Access Point but idle, it may not appear in the list. Increasing scan duration from the drop-down allows the sniffer to see more potential traffic on each channel.
The SSID, MAC, Security, Channel and Signal of Access Points are displayed in the table view. Clients are listed as MAC addresses only.
Clicking the menu button next to an MAC address shows a menu providing buttons to add or remove the MAC from the PineAP Filter or PineAP Tracking feature. Deauth uses the multiplier to send multiple deauthentication frames to the target Client. A multiplier of 2 is twice as many deauthentication frames as a multiplier of 1.
Clicking the menu button next to an SSID shows a menu providing buttons to add or remove the SSID from the PineAP Pool or PineAP Filter. Deauth Client will send deauthentication frames to all associated clients currently recognized by Recon using the multiplier. A multiplier of 2 is twice as many deauthentication frames as a multiplier of 1.
Unassociated Clients show in a unique table listed by MAC Address. These Clients have active radios, however are not associated to an Access Point.
Out Of Range Clients will display in a unique table along with their relationship to their parent Access Point by MAC address only.
Checking the Continuous box will enable an ongoing scan. The tables will update the the latest information the the scan duration interval until the scan is stopped.
The WiFi Pineapple will allow clients to connect if Allow Associations is checked in PineAP. Connected clients will list in the Clients view along with their respective MAC Address, IP Address, the SSID to which they have connected (if Log Probes is enabled in PineAP) and Hostname. If the SSID or Hostname is unavailable it will display as such.
The Kick button allows the auditor to remove a client from the WiFi Pineapple network.
Clicking the menu button next to an MAC address shows a menu providing buttons to add or remove the MAC from the PineAP Filter or PineAP Tracking feature.
Clicking the menu button next to an SSID shows a menu providing buttons to add or remove the SSID from the PineAP Pool or PineAP Filter.
The Clients table can be updated by clicking the Refresh button.
Filtering may be performed by Client MAC Address or SSID. Both Deny and Allow modes are supported and this option may be toggled using the switch button.
Client Filtering
In Deny Mode, Clients with MAC Addresses listed in the Client Filter will not be able to connect to the WiFi Pineapple. In Allow Mode, only Clients with MAC Addresses listed in the Client Filter will be able to connect. When performing an audit, it is best to use Allow Mode to ensure that only clients within the scope of engagement are targeted.
Client MAC Addresses and SSIDs may be added from menu buttons associated with their respective listings in Recon or Client views.
SSID Filtering
In Deny Mode, clients will not be able to associate with the WiFi Pineapple if they are attempting to connect to an SSID listed in the filter. In Allow Mode, clients will only be able to associate with the WiFi Pineapple if the SSID they are attempting to connect to is listed in the filter.
SSIDs may be added to the filter from the menu buttons associated with their respective listings in Recon.
Managing Filters
Filtered Clients and SSIDs will display in the lists. Client MAC addresses and SSIDs may be added to the list manually by using the text input field and Add button. Clicking a Client MAC or SSID will populate the text input field and clicking Remove will remove the entry from the Filter list.
PineAP is an effective, modular rogue access point suite designed to aid the WiFi auditor in collecting clients by thoroughly mimicking Preferred Networks.
Allow Associations - when enabled, Client devices will be allowed to associate with the WiFi Pineapple through any requested SSID. E.g. If a Client device sends a Probe Request for SSID "example" the WiFi Pineapple will acknowledge the request, respond and allow the Client device to associate and connect to the WiFi Pineapple network. This feature works in conjunction with Client and SSID filtering. When disabled, clients will not be allowed to associate. Formerly named Karma.
Log Probes - when enabled, Client device Probe Requests will be logged. This feature provides information for analysis from the Logging view.
Log Associations - when enabled, Client Associations to the WiFi Pineapple will be logged. This feature provides information for analysis from the Logging view. If disabled, Associations will not be logged and may not appear in the SSID column from the Clients view.
PineAP Daemon - This daemon must be enabled in order to use the Beacon Response, Capture SSIDs to Pool and Broadcast SSID pool features. The PineAP Daemon will coordinate the appropriate actions based on Source and Target MAC settings as well as the Beacon Response and SSID Broadcast intervals. This feature requires access to wlan1 and cannot be used in conjunction with WiFi Client Mode if wlan1 is used. PineAP Daemon must be enabled and PineAP Settings must be saved before the associated features will be available.
Beacon Response - when enabled, targeted beacons will be transmitted to Client devices in response to a Probe Request with the appropriate SSID. These beacons will not be transmitted to broadcast, but rather specifically to the device making the probe request. This prevents the beacon from being visible to other devices. If Allow Associations is enabled and the Client device associates with the WiFi Pineapple, then targeted Beacon Responses will continue to transmit to the Client device for a period of time. Beacon Responses will use the Source MAC setting, which is also shared with the Broadcast SSID Pool feature.The Beacon Response Interval will dictate how frequently to transmit.
Capture SSIDs to Pool - when enabled, the sniffer will save the SSID data of captured Probe Requests to the SSID Pool. This passive feature benefits the Broadcast SSID Pool feature. The SSID Pool may also be managed manually.
Broadcast SSID Pool - when enabled, the SSID Pool will be broadcast as beacons using the Source MAC and Target MAC settings at the interval specified. Formerly named Dogma.
Source MAC - by default, this is the MAC address of wlan0 on the WiFi Pineapple. This is the interface for which associations may be allowed and also hosts the Management Access Point. The MAC address of wlan0 may be changed from the Networking view. This MAC address may be set to that of a secondary WiFi Pineapple if desired.
Target MAC - by default, this is the broadcast MAC address FF:FF:FF:FF:FF:FF. Frames transmitted to broadcast will be seen by all nearby Client devices. Setting the Client MAC address will target PineAP features at the single device. Similar to Beacon Response, only SSIDs Broadcast from the Pool will be visible to the targeted Client device. When used in conjunction with Filtering, this feature enables precision device targeting.
Broadcast SSID Pool Interval - Specifies the Interval in which to Broadcast SSIDs from the Pool. Aggressive requires more CPU usage while Lower requires less.
Beacon Response Interval - Specifies the Interval in which to transmit Beacon Responses. Aggressive requires more CPU usage while Lower requires less.
Save as Default on Boot - From the Configuration menu, Saving as the Default on Boot will remember the saved PineAP features and settings for use on next boot.
SSID Pool - populated automatically when the Capture SSID Pool feature is enabled. May also be added to manually using the text field and Add button. Similarly, clicking a listed SSID will populate the text field allowing for the removal of the entry using the Remove button. From the SSID Pool Menu, Clear SSID Pool will remove all entries.
The tracking feature will continuously scan for specified Clients by MAC address and execute a customizable Tracking Script. This feature requires the Log Probes and/or Log Associations features of PineAP to be enabled.
Clients may be specified manually using the text field and add button. Clients may also be added to the Client Tracking List by using the PineAP Tracking Add MAC button from an associated MAC address within the Clients view or Recon view. Selecting a MAC address from the Client Tracking List will populate the text field for removal using the Remove button.
When a client is identified by a logged Probe or Association, the customizable Tracking Script will execute. The Tracking Script defines variables for the Client MAC address, the identification type (Probe or Association) and the SSID with which the Client is Probing or Associating.
The Logging view displays the PineAP Log, System Log, Dmesg and Reporting Log.
PineAP Log - chronologically displays PineAP events if Log Probes and/or Log Associations are enabled. Each event contains a timestamp, event type (Probe Request or Association), the MAC address of the Client device, and the SSID for which the device is Probing or Associating.
PineAP Log Filtering
The Display Probes and Display Associations checkboxes enable the auditor to toggle the display of Probes or Associations. The Remove Duplicates checkbox will remove any duplicate entry, regardless of timestamp. For example, if a Client transmits a Probe Request for SSID "example" 10 times in 1 hour, checking the Remove Duplicates box will show only the first entry.
Filtering by MAC address and SSID is supported by completing the associated text fields. For example, if de:ad:be:ef:c0:fe is input in the MAC text field, only that Client device activity will show in the PineAP Log. Similarly the Log may be filtered by SSID.
Filters do not apply until the Apply Filter button is pressed. Clear Filter will reset to the default and display all captured data. Refresh Log will obtain the latest log data from PineAP and Clear Log will empty the Log File. By default the comma tab delimited PineAP log is located in /tmp and will not be saved after a reboot.
This feature enables the auditor to generate reports at a specified interval. The report may be sent via email and/or saved locally on a suitable SD card. See the Format SD Card option from the USB menu on the Advanced view to setup a new card. Email Configuration must be complete in order for the Send Report via email function to operate successfully.
The Report Contents may contain: the PineAP Log with an option to clear after generating the report, a PineAP Site Survey similar to the Recon View with option to specify AP & Client scan duration, and PineAP Probing and Tracked Clients.
From the Networking view, the auditor may make changes to the Routing, Access Point, MAC Addresses, Hostname and connect to an Access Point using WiFi Client Mode.
Route - the Kernel IP routing table is displayed and may be modified for the selected interface. The Route menu enables the auditor to Restart DNS. By default the expected Default Gateway is <IP_ADDRESS>. When using the WiFi Pineapple Connector Android app, IP routing will automatically update to use usb0 as the default gateway.
Access Point - The WiFi Pineapple primary open access point and management access point may be configured. Both the open and management access point share the same channel. The open access point may be hidden and the management access point may be disabled.
WiFi Client Mode - this feature enables the auditor to connect the WiFi Pineapple to another wireless access point for Internet or local network access. When using WiFi Client Mode, the IP routing will automatically update to use the selected interface. The WiFi Pineapple can be used with a number of supported USB WiFi adapters to add a third (wlan2) interface. wlan0 is reserved for use by the Access Point and wlan1 is required by PineAP and cannot be used if the PineAP Daemon and its subsequent features are being used.
To connect to a nearby Access Point, select the desired Interface and click Scan. From the Access Point list, choose the desired network, enter the Passphrase (if required) and click Connect. Once connected the WiFi Pineapple IP address will display and the Default Route will update to that of the newly connected network. Click Disconnect to end the connection.
MAC Address - The Current MAC address for the selected interface will display. A New MAC address may be specified manually, or set randomly using the New MAC text field and Set New MAC or Set Random MAC buttons. MAC Addresses may be reset to default from the MAC Address menu button. Changing MAC addresses may disconnect connected clients from the WiFi Pineapple.
Advanced - The Hostname may be updated using the hostname text field and Update Hostname button. Wireless configuration may be reset using the Reset WiFi Config to Defaults option from the Advanced menu button. The output of ifconfig is displayed.
The Configuration view provides the auditor with means to set general settings and modify the landing page.
General - Timezone settings is displayed and may be manually selected. The system password may be set. The WiFi Pineapple may be rebooted or reset to factory defaults from the General menu button.
Landing Page - when enabled, this feature will act as a captive portal. New clients connecting to the WiFi Pineapple will be forwarded to this landing page. Some client devices will automatically launch a browser to this page upon connection. Landing page browser stats will display on the dashboard. PHP and HTML are accepted. The Landing Page may only display if the WiFi Pineapple has an Internet connection.
The Advanced view provides the auditor with information on system resources, USB devices, file system table, CSS and the ability to upgrade the WiFi Pineapple firmware.
Resources - displays file system disk usage and memory. From the Resources menu button Page Caches may be dropped.
USB - displays connected USB peripherals and allows the auditor to set the file system table (fstab). SD cards may be formatted from the USB menu button.
CSS - The WiFi Pineapple Web Interface stylesheet may be modified.
Firmware Upgrade - displays current firmware version and allows the auditor to check for updates. This requires an Internet connection and will initiate a connection to WiFiPineapple.com. If an update is available, the changelog will display and the option to Perform Upgrade will be available. Users are advised to carefully read the warnings related to the firmware upgrade feature.