The /live/read
API provides a response in the following format:
LiveAlgorithmResults Model - Details a live algorithm from the live/read API endpoint. |
|
|---|---|
| LiveResults | LiveResultsData object Holds information about the state and operation of the live running algorithm. |
| success | boolean Indicate if the API request was successful. |
| errors | string Array List of errors with the API call. |
| Example |
{ "LiveResults": { "version": 0, "resolution": "10minute", "results": { "Holdings": { "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "Type": "Base", "CurrencySymbol": "$", "AveragePrice": 0, "Quantity": 0, "MarketPrice": 0, "ConversionRate": 0, "MarketValue": 0, "UnrealizedPnl": 0 }, "Cash": { "Symbol": "string", "Amount": 0, "ConversionRate": 0, "CurrencySymbol": , "ValueInAccountCurrency": 0 }, "AlphaRuntimeStatistics": { "MeanPopulationScore": { "UpdatedTimeUtc": "2021-11-26T15:18:27.693Z", "Direction": 0, "Magnitude": 0, "IsFinalScore": true }, "RollingAveragedPopulationScore": { "UpdatedTimeUtc": "2021-11-26T15:18:27.693Z", "Direction": 0, "Magnitude": 0, "IsFinalScore": true }, "LongCount": "string", "ShortCount": "string", "LongShortRatio": 0, "TotalAccumulatedEstimatedAlphaValue": 0, "KellyCriterionEstimate": 0, "KellyCriterionProbabilityValue": 0, "FitnessScore": 0, "PortfolioTurnover": 0, "ReturnOverMaxDrawdown": 0, "SortinoRatio": 0, "EstimatedMonthlyAlphaValue": 0, "TotalInsightsGenerated": "string", "TotalInsightsClosed": "string", "TotalInsightsAnalysisCompleted": "string", "MeanPopulationEstimatedInsightValue": 0 }, "Charts": { "Name": "string", "ChartType": "Overlay", "Series": { "Name": "string", "Unit": "string", "Index": 0, "Values": [ { "x": "string", "y": 0 } ], "SeriesType": "Line", "Color": "string", "ScatterMarkerSymbol": "none" } }, "Orders": { "Id": 0, "ContingentId": 0, "BrokerId": [ "string" ], "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "Price": 0, "PriceCurrency": "string", "Time": "2021-11-26T15:18:27.693Z", "CreatedTime": "2021-11-26T15:18:27.693Z", "LastFillTime": "2021-11-26T15:18:27.693Z", "LastUpdateTime": "2021-11-26T15:18:27.693Z", "CanceledTime": "2021-11-26T15:18:27.693Z", "Quantity": 0, "Type": "Market", "Status": "New", "Tag": "string", "SecurityType": "Base", "Direction": "Buy", "Value": 0, "OrderSubmissionData": { "BidPrice": 0, "AskPrice": 0, "LastPrice": 0 }, "IsMarketable": true }, "OrderEvents": [ { "OrderId": 0, "Id": 0, "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "UtcTime": "2021-11-26T15:18:27.693Z", "Status": { "OrderId": 0, "Id": 0, "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "UtcTime": "2021-11-26T15:18:27.693Z", "Status": "New", "FillPrice": 0, "FillPriceCurrency": "string", "FillQuantity": 0, "Direction": "Buy", "Message": "string", "IsAssignment": true, "StopPrice": 0, "LimitPrice": 0, "Quantity": 0 }, "OrderFee": { "Value": { "Amount": 0, "Currency": "string" } }, "FillPrice": 0, "FillPriceCurrency": "string", "FillQuantity": 0, "Direction": "Buy", "Message": "string", "IsAssignment": true, "StopPrice": 0, "LimitPrice": 0, "Quantity": 0 } ], "ProfitLoss": "number", "Statistics": "string", "RuntimeStatistics": "string", "ServerStatistics": "string" } }, "success": true, "errors": [ "string" ] } |
LiveList Model - List of the live algorithms running which match the requested status. |
|
|---|---|
| Algorithms | LiveAlgorithm Array Algorithm list matching the requested status. |
| success | boolean Indicate if the API request was successful. |
| errors | string Array List of errors with the API call. |
| Example |
{ "Algorithms": [ { "projectId": 0, "deployId": "string", "status": "DeployError", "launched": "2021-11-26T15:18:27.693Z", "stopped": "2021-11-26T15:18:27.693Z", "brokerage": "Interactive", "subscription": "string", "error": "string", "success": true, "errors": [ "string" ] } ], "success": true, "errors": [ "string" ] } |
LiveResultsData Model - Holds information about the state and operation of the live running algorithm. |
|
|---|---|
| version | integer Results version. |
| resolution | string Enum Storage format of the charting data. Options : ['10minute', 'minute', 'second'] |
| results | LiveResult object Live results object class for packaging live result data. |
| Example |
{ "version": 0, "resolution": "10minute", "results": { "Holdings": { "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "Type": "Base", "CurrencySymbol": "$", "AveragePrice": 0, "Quantity": 0, "MarketPrice": 0, "ConversionRate": 0, "MarketValue": 0, "UnrealizedPnl": 0 }, "Cash": { "Symbol": "string", "Amount": 0, "ConversionRate": 0, "CurrencySymbol": , "ValueInAccountCurrency": 0 }, "AlphaRuntimeStatistics": { "MeanPopulationScore": { "UpdatedTimeUtc": "2021-11-26T15:18:27.693Z", "Direction": 0, "Magnitude": 0, "IsFinalScore": true }, "RollingAveragedPopulationScore": { "UpdatedTimeUtc": "2021-11-26T15:18:27.693Z", "Direction": 0, "Magnitude": 0, "IsFinalScore": true }, "LongCount": "string", "ShortCount": "string", "LongShortRatio": 0, "TotalAccumulatedEstimatedAlphaValue": 0, "KellyCriterionEstimate": 0, "KellyCriterionProbabilityValue": 0, "FitnessScore": 0, "PortfolioTurnover": 0, "ReturnOverMaxDrawdown": 0, "SortinoRatio": 0, "EstimatedMonthlyAlphaValue": 0, "TotalInsightsGenerated": "string", "TotalInsightsClosed": "string", "TotalInsightsAnalysisCompleted": "string", "MeanPopulationEstimatedInsightValue": 0 }, "Charts": { "Name": "string", "ChartType": "Overlay", "Series": { "Name": "string", "Unit": "string", "Index": 0, "Values": [ { "x": "string", "y": 0 } ], "SeriesType": "Line", "Color": "string", "ScatterMarkerSymbol": "none" } }, "Orders": { "Id": 0, "ContingentId": 0, "BrokerId": [ "string" ], "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "Price": 0, "PriceCurrency": "string", "Time": "2021-11-26T15:18:27.693Z", "CreatedTime": "2021-11-26T15:18:27.693Z", "LastFillTime": "2021-11-26T15:18:27.693Z", "LastUpdateTime": "2021-11-26T15:18:27.693Z", "CanceledTime": "2021-11-26T15:18:27.693Z", "Quantity": 0, "Type": "Market", "Status": "New", "Tag": "string", "SecurityType": "Base", "Direction": "Buy", "Value": 0, "OrderSubmissionData": { "BidPrice": 0, "AskPrice": 0, "LastPrice": 0 }, "IsMarketable": true }, "OrderEvents": [ { "OrderId": 0, "Id": 0, "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "UtcTime": "2021-11-26T15:18:27.693Z", "Status": { "OrderId": 0, "Id": 0, "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "UtcTime": "2021-11-26T15:18:27.693Z", "Status": "New", "FillPrice": 0, "FillPriceCurrency": "string", "FillQuantity": 0, "Direction": "Buy", "Message": "string", "IsAssignment": true, "StopPrice": 0, "LimitPrice": 0, "Quantity": 0 }, "OrderFee": { "Value": { "Amount": 0, "Currency": "string" } }, "FillPrice": 0, "FillPriceCurrency": "string", "FillQuantity": 0, "Direction": "Buy", "Message": "string", "IsAssignment": true, "StopPrice": 0, "LimitPrice": 0, "Quantity": 0 } ], "ProfitLoss": "number", "Statistics": "string", "RuntimeStatistics": "string", "ServerStatistics": "string" } } |
ChartResolution Model - Storage format of the charting data |
|
|---|---|
| ChartResolution | string Enum Storage format of the charting data. Options : ['10minute', 'minute', 'second'] |
| Example |
{ "ChartResolution": "10minute" } |
LiveResult Model - Live results object class for packaging live result data. |
|
|---|---|
| Holdings | Holding object Dictionary of algorithm holdings information. |
| Cash | Cash object Represents a holding of a currency in cash. |
| AlphaRuntimeStatistics | AlphaRuntimeStatistics object Contains insight population run time statistics. |
| Charts | Chart object Charts updates for the live algorithm since the last result packet. |
| Orders | Order object Order updates since the last result packet. |
| OrderEvents | OrderEvent Array OrderEvent updates since the last result packet. |
| ProfitLoss | number object Trade profit and loss information since the last algorithm result packet. |
| Statistics | string object Statistics information sent during the algorithm operations. |
| RuntimeStatistics | string object Runtime banner/updating statistics in the title banner of the live algorithm GUI. |
| ServerStatistics | string object Server status information, including CPU and RAM usage. |
| Example |
{ "Holdings": { "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "Type": "Base", "CurrencySymbol": "$", "AveragePrice": 0, "Quantity": 0, "MarketPrice": 0, "ConversionRate": 0, "MarketValue": 0, "UnrealizedPnl": 0 }, "Cash": { "Symbol": "string", "Amount": 0, "ConversionRate": 0, "CurrencySymbol": , "ValueInAccountCurrency": 0 }, "AlphaRuntimeStatistics": { "MeanPopulationScore": { "UpdatedTimeUtc": "2021-11-26T15:18:27.693Z", "Direction": 0, "Magnitude": 0, "IsFinalScore": true }, "RollingAveragedPopulationScore": { "UpdatedTimeUtc": "2021-11-26T15:18:27.693Z", "Direction": 0, "Magnitude": 0, "IsFinalScore": true }, "LongCount": "string", "ShortCount": "string", "LongShortRatio": 0, "TotalAccumulatedEstimatedAlphaValue": 0, "KellyCriterionEstimate": 0, "KellyCriterionProbabilityValue": 0, "FitnessScore": 0, "PortfolioTurnover": 0, "ReturnOverMaxDrawdown": 0, "SortinoRatio": 0, "EstimatedMonthlyAlphaValue": 0, "TotalInsightsGenerated": "string", "TotalInsightsClosed": "string", "TotalInsightsAnalysisCompleted": "string", "MeanPopulationEstimatedInsightValue": 0 }, "Charts": { "Name": "string", "ChartType": "Overlay", "Series": { "Name": "string", "Unit": "string", "Index": 0, "Values": [ { "x": "string", "y": 0 } ], "SeriesType": "Line", "Color": "string", "ScatterMarkerSymbol": "none" } }, "Orders": { "Id": 0, "ContingentId": 0, "BrokerId": [ "string" ], "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "Price": 0, "PriceCurrency": "string", "Time": "2021-11-26T15:18:27.693Z", "CreatedTime": "2021-11-26T15:18:27.693Z", "LastFillTime": "2021-11-26T15:18:27.693Z", "LastUpdateTime": "2021-11-26T15:18:27.693Z", "CanceledTime": "2021-11-26T15:18:27.693Z", "Quantity": 0, "Type": "Market", "Status": "New", "Tag": "string", "SecurityType": "Base", "Direction": "Buy", "Value": 0, "OrderSubmissionData": { "BidPrice": 0, "AskPrice": 0, "LastPrice": 0 }, "IsMarketable": true }, "OrderEvents": [ { "OrderId": 0, "Id": 0, "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "UtcTime": "2021-11-26T15:18:27.693Z", "Status": { "OrderId": 0, "Id": 0, "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "UtcTime": "2021-11-26T15:18:27.693Z", "Status": "New", "FillPrice": 0, "FillPriceCurrency": "string", "FillQuantity": 0, "Direction": "Buy", "Message": "string", "IsAssignment": true, "StopPrice": 0, "LimitPrice": 0, "Quantity": 0 }, "OrderFee": { "Value": { "Amount": 0, "Currency": "string" } }, "FillPrice": 0, "FillPriceCurrency": "string", "FillQuantity": 0, "Direction": "Buy", "Message": "string", "IsAssignment": true, "StopPrice": 0, "LimitPrice": 0, "Quantity": 0 } ], "ProfitLoss": "number", "Statistics": "string", "RuntimeStatistics": "string", "ServerStatistics": "string" } |
Holding Model - Live results object class for packaging live result data. |
|
|---|---|
| Symbol | Symbol object Represents a unique security identifier. This is made of two components, the unique SID and the Value. The value is the current ticker symbol while the SID is constant over the life of a security. |
| Type | string Enum Type of tradable security / underlying asset. Options : ['Base', 'Equity', 'Option', 'Commodity', 'Forex', 'Future', 'Cfd', 'Crypto'] |
| CurrencySymbol | string The currency symbol of the holding. |
| AveragePrice | number Average Price of our Holding in the currency the symbol is traded in. |
| Quantity | number Quantity of the Symbol we hold. |
| MarketPrice | number Current Market Price of the Asset in the currency the symbol is traded in. |
| ConversionRate | number Current market conversion rate into the account currency. |
| MarketValue | number Current market value of the holding. |
| UnrealizedPnl | number Current unrealized P/L of the holding. |
| Example |
{ "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "Type": "Base", "CurrencySymbol": "$", "AveragePrice": 0, "Quantity": 0, "MarketPrice": 0, "ConversionRate": 0, "MarketValue": 0, "UnrealizedPnl": 0 } |
Symbol Model - Represents a unique security identifier. This is made of two components, the unique SID and the Value. The value is the current ticker symbol while the SID is constant over the life of a security. |
|
|---|---|
| Value | string The current symbol for this ticker. |
| ID | string The security identifier for this symbol. |
| Permtick | string The current symbol for this ticker. |
| Example |
{ "Value": "string", "ID": "string", "Permtick": "string" } |
SecurityType Model - Type of tradable security / underlying asset. |
|
|---|---|
| SecurityType | string Enum Type of tradable security / underlying asset. Options : ['Base', 'Equity', 'Option', 'Commodity', 'Forex', 'Future', 'Cfd', 'Crypto'] |
| Example |
{ "SecurityType": "Base" } |
Cash Model - Represents a holding of a currency in cash. |
|
|---|---|
| Symbol | string Gets the symbol used to represent this cash. |
| Amount | number Gets or sets the amount of cash held. |
| ConversionRate | number The currency conversion rate to the account base currency. |
| CurrencySymbol | object The symbol of the currency, such as $. |
| ValueInAccountCurrency | number The value of the currency cash in the account base currency. |
| Example |
{ "Symbol": "string", "Amount": 0, "ConversionRate": 0, "CurrencySymbol": , "ValueInAccountCurrency": 0 } |
AlphaRuntimeStatistics Model - Contains insight population run time statistics. |
|
|---|---|
| MeanPopulationScore | InsightScore object Defines the scores given to a particular insight. |
| RollingAveragedPopulationScore | InsightScore object Defines the scores given to a particular insight. |
| LongCount | string Gets the total number of insights with an up direction. |
| ShortCount | string Gets the total number of insights with a down direction. |
| LongShortRatio | number The ratio of InsightDirection.Up over InsightDirection.Down. |
| TotalAccumulatedEstimatedAlphaValue | number The total accumulated estimated value of trading all insights. |
| KellyCriterionEstimate | number Score of the strategy's insights predictive power. |
| KellyCriterionProbabilityValue | number The p-value or probability value of the KellyCriterionEstimate. |
| FitnessScore | number Score of the strategy's performance, and suitability for the Alpha Stream Market. |
| PortfolioTurnover | number Measurement of the strategies trading activity with respect to the portfolio value. Calculated as the sales volume with respect to the average total portfolio value. |
| ReturnOverMaxDrawdown | number Provides a risk adjusted way to factor in the returns and drawdown of the strategy. It is calculated by dividing the Portfolio Annualized Return by the Maximum Drawdown seen during the backtest. |
| SortinoRatio | number Gives a relative picture of the strategy volatility. It is calculated by taking a portfolio's annualized rate of return and subtracting the risk free rate of return. |
| EstimatedMonthlyAlphaValue | number Suggested Value of the Alpha On A Monthly Basis For Licensing. |
| TotalInsightsGenerated | string The total number of insight signals generated by the algorithm. |
| TotalInsightsClosed | string The total number of insight signals generated by the algorithm. |
| TotalInsightsAnalysisCompleted | string The total number of insight signals generated by the algorithm. |
| MeanPopulationEstimatedInsightValue | number Gets the mean estimated insight value. |
| Example |
{ "MeanPopulationScore": { "UpdatedTimeUtc": "2021-11-26T15:18:27.693Z", "Direction": 0, "Magnitude": 0, "IsFinalScore": true }, "RollingAveragedPopulationScore": { "UpdatedTimeUtc": "2021-11-26T15:18:27.693Z", "Direction": 0, "Magnitude": 0, "IsFinalScore": true }, "LongCount": "string", "ShortCount": "string", "LongShortRatio": 0, "TotalAccumulatedEstimatedAlphaValue": 0, "KellyCriterionEstimate": 0, "KellyCriterionProbabilityValue": 0, "FitnessScore": 0, "PortfolioTurnover": 0, "ReturnOverMaxDrawdown": 0, "SortinoRatio": 0, "EstimatedMonthlyAlphaValue": 0, "TotalInsightsGenerated": "string", "TotalInsightsClosed": "string", "TotalInsightsAnalysisCompleted": "string", "MeanPopulationEstimatedInsightValue": 0 } |
InsightScore Model - Defines the scores given to a particular insight |
|
|---|---|
| UpdatedTimeUtc | string($date-time) The time these scores were last updated. |
| Direction | number The direction score. |
| Magnitude | number The magnitude score. |
| IsFinalScore | boolean Is the insight past its expiry time and score can be finalized. |
| Example |
{ "UpdatedTimeUtc": "2021-11-26T15:18:27.693Z", "Direction": 0, "Magnitude": 0, "IsFinalScore": true } |
Chart Model - Single Parent Chart Object for Custom Charting. |
|
|---|---|
| Name | string Name of the Chart. |
| ChartType | string Enum Type of the Chart, Overlayed or Stacked. Options : ['Overlay', 'Stacked'] |
| Series | Series object List of Series Objects for this Chart. |
| Example |
{ "Name": "string", "ChartType": "Overlay", "Series": { "Name": "string", "Unit": "string", "Index": 0, "Values": [ { "x": "string", "y": 0 } ], "SeriesType": "Line", "Color": "string", "ScatterMarkerSymbol": "none" } } |
Series Model - Chart Series Object - Series data and properties for a chart. |
|
|---|---|
| Name | string Name of the series. |
| Unit | string Axis for the chart series. |
| Index | integer Index/position of the series on the chart. |
| Values | ChartPoint Array Values for the series plot. These values are assumed to be in ascending time order (first points earliest, last points latest). |
| SeriesType | string Enum Chart type for the series. Options : ['Line', 'Scatter', 'Candle', 'Bar', 'Flag', 'StackedArea', 'Pie', 'Treemap'] |
| Color | string Color the series. |
| ScatterMarkerSymbol | string Enum Shape or symbol for the marker in a scatter plot. Options : ['none', 'circle', 'square', 'diamond', 'triangle', 'triangle-down'] |
| Example |
{ "Name": "string", "Unit": "string", "Index": 0, "Values": [ { "x": "string", "y": 0 } ], "SeriesType": "Line", "Color": "string", "ScatterMarkerSymbol": "none" } |
ChartPoint Model - Location on a chart containing the X-Y location |
|
|---|---|
| x | string Time of this chart point: lower case for javascript encoding simplicty. |
| y | number Value of this chart point: lower case for javascript encoding simplicty. |
| Example |
{ "x": "string", "y": 0 } |
Order Model - Order struct for placing new trade. |
|
|---|---|
| Id | integer Order ID. |
| ContingentId | integer Order Id to process before processing this order. |
| BrokerId | string Array Brokerage Id for this order for when the brokerage splits orders into multiple pieces. |
| Symbol | Symbol object Represents a unique security identifier. This is made of two components, the unique SID and the Value. The value is the current ticker symbol while the SID is constant over the life of a security. |
| Price | number Price of the Order. |
| PriceCurrency | string Currency for the order price. |
| Time | string($date-time) Gets the utc time the order was created. |
| CreatedTime | string($date-time) Gets the utc time this order was created. Alias for Time. |
| LastFillTime | string($date-time) Gets the utc time the last fill was received, or null if no fills have been received. |
| LastUpdateTime | string($date-time) Gets the utc time this order was last updated, or null if the order has not been updated. |
| CanceledTime | string($date-time) Gets the utc time this order was canceled, or null if the order was not canceled. |
| Quantity | number Number of shares to execute. |
| Type | string Enum Order type. Options : ['Market', 'Limit', 'StopMarket', 'StopLimit', 'MarketOnOpen', 'MarketOnClose', 'OptionExercise'] |
| Status | string Enum Status of the Order. Options : ['New', 'Submitted', 'PartiallyFilled', 'Filled', 'Canceled', 'None', 'Invalid', 'CancelPending', 'UpdateSubmitted'] |
| Tag | string Tag the order with some custom data. |
| SecurityType | string Enum Type of tradable security / underlying asset. Options : ['Base', 'Equity', 'Option', 'Commodity', 'Forex', 'Future', 'Cfd', 'Crypto'] |
| Direction | string Enum Direction of the order. Options : ['Buy', 'Sell', 'Hold'] |
| Value | number Gets the executed value of this order. If the order has not yet filled, then this will return zero. |
| OrderSubmissionData | OrderSubmissionData object Stores time and price information available at the time an order was submitted. |
| IsMarketable | boolean Returns true if the order is a marketable order. |
| Example |
{ "Id": 0, "ContingentId": 0, "BrokerId": [ "string" ], "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "Price": 0, "PriceCurrency": "string", "Time": "2021-11-26T15:18:27.693Z", "CreatedTime": "2021-11-26T15:18:27.693Z", "LastFillTime": "2021-11-26T15:18:27.693Z", "LastUpdateTime": "2021-11-26T15:18:27.693Z", "CanceledTime": "2021-11-26T15:18:27.693Z", "Quantity": 0, "Type": "Market", "Status": "New", "Tag": "string", "SecurityType": "Base", "Direction": "Buy", "Value": 0, "OrderSubmissionData": { "BidPrice": 0, "AskPrice": 0, "LastPrice": 0 }, "IsMarketable": true } |
OrderDirection Model - Direction of the order. |
|
|---|---|
| OrderDirection | string Enum Direction of the order. Options : ['Buy', 'Sell', 'Hold'] |
| Example |
{ "OrderDirection": "Buy" } |
OrderSubmissionData Model - Stores time and price information available at the time an order was submitted. |
|
|---|---|
| BidPrice | number The bid price at an order submission time. |
| AskPrice | number The ask price at an order submission time. |
| LastPrice | number The current price at an order submission time. |
| Example |
{ "BidPrice": 0, "AskPrice": 0, "LastPrice": 0 } |
OrderEvent Model - Change in an order state applied to user algorithm portfolio |
|
|---|---|
| OrderId | integer Id of the order this event comes from. |
| Id | integer The unique order event Id for each order. |
| Symbol | Symbol object Represents a unique security identifier. This is made of two components, the unique SID and the Value. The value is the current ticker symbol while the SID is constant over the life of a security. |
| UtcTime | string($date-time) The date and time of this event (UTC). |
| Status | OrderStatus object Messaging class signifying a change in an order state and record the change in the users algorithm portfolio. |
| OrderFee | OrderFee object The order fee associated with the specified order. |
| FillPrice | number Fill price information about the order. |
| FillPriceCurrency | string Currency for the fill price. |
| FillQuantity | number Number of shares of the order that was filled in this event. |
| Direction | string Enum Direction of the order. Options : ['Buy', 'Sell', 'Hold'] |
| Message | string Any message from the exchange. |
| IsAssignment | boolean True if the order event is an assignment. |
| StopPrice | number The current stop price. |
| LimitPrice | number The current limit price. |
| Quantity | number The current order quantity. |
| Example |
{ "OrderId": 0, "Id": 0, "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "UtcTime": "2021-11-26T15:18:27.693Z", "Status": { "OrderId": 0, "Id": 0, "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "UtcTime": "2021-11-26T15:18:27.693Z", "Status": "New", "FillPrice": 0, "FillPriceCurrency": "string", "FillQuantity": 0, "Direction": "Buy", "Message": "string", "IsAssignment": true, "StopPrice": 0, "LimitPrice": 0, "Quantity": 0 }, "OrderFee": { "Value": { "Amount": 0, "Currency": "string" } }, "FillPrice": 0, "FillPriceCurrency": "string", "FillQuantity": 0, "Direction": "Buy", "Message": "string", "IsAssignment": true, "StopPrice": 0, "LimitPrice": 0, "Quantity": 0 } |
OrderStatus Model - Messaging class signifying a change in an order state and record the change in the users algorithm portfolio. |
|
|---|---|
| OrderId | integer Id of the order this event comes from. |
| Id | integer The unique order event Id for this order. |
| Symbol | Symbol object Represents a unique security identifier. This is made of two components, the unique SID and the Value. The value is the current ticker symbol while the SID is constant over the life of a security. |
| UtcTime | string($date-time) The date and time of this event. |
| Status | string Enum Status of the Order. Options : ['New', 'Submitted', 'PartiallyFilled', 'Filled', 'Canceled', 'None', 'Invalid', 'CancelPending', 'UpdateSubmitted'] |
| FillPrice | number Fill price information about the order. |
| FillPriceCurrency | string Currency for the fill price. |
| FillQuantity | number Number of shares of the order that was filled in this event. |
| Direction | string Enum Direction of the order. Options : ['Buy', 'Sell', 'Hold'] |
| Message | string Any message from the exchange. |
| IsAssignment | boolean Order event is an allocation of trades from ITM option assignment. |
| StopPrice | number The current stop price. |
| LimitPrice | number The current limit price. |
| Quantity | number The current order quantity. |
| Example |
{ "OrderId": 0, "Id": 0, "Symbol": { "Value": "string", "ID": "string", "Permtick": "string" }, "UtcTime": "2021-11-26T15:18:27.693Z", "Status": "New", "FillPrice": 0, "FillPriceCurrency": "string", "FillQuantity": 0, "Direction": "Buy", "Message": "string", "IsAssignment": true, "StopPrice": 0, "LimitPrice": 0, "Quantity": 0 } |
Status Model - Status of the Order. |
|
|---|---|
| Status | string Enum Status of the Order. Options : ['New', 'Submitted', 'PartiallyFilled', 'Filled', 'Canceled', 'None', 'Invalid', 'CancelPending', 'UpdateSubmitted'] |
| Example |
{ "Status": "New" } |
OrderFee Model - The order fee associated with the specified order. |
|
|---|---|
| Value | CashAmount object Represents a cash amount which can be converted to account currency using a currency converter. |
| Example |
{ "Value": { "Amount": 0, "Currency": "string" } } |
CashAmount Model - Represents a cash amount which can be converted to account currency using a currency converter. |
|
|---|---|
| Amount | number The amount of cash. |
| Currency | string The currency in which the cash amount is denominated. |
| Example |
{ "Amount": 0, "Currency": "string" } |
LiveAlgorithm Model - Live algorithm instance result from the QuantConnect Rest API. |
|
|---|---|
| projectId | integer Project Id for the live instance. |
| deployId | string Unique live algorithm deployment identifier (similar to a backtest id). |
| status | string Enum States of a live deployment. Options : ['DeployError', 'InQueue', 'Running', 'Stopped', 'Liquidated', 'Deleted', 'Completed', 'RuntimeError', 'Invalid', 'LoggingIn', 'Initializing', 'History'] |
| launched | string($date-time) Datetime the algorithm was launched in UTC. |
| stopped | string($date-time) Datetime the algorithm was stopped in UTC, null if its still running. |
| brokerage | string Enum Brokerage. Options : ['Interactive', 'FXCM', 'Oanda', 'Tradier', 'PaperTrading', 'Alpaca', 'Bitfinex', 'Binance', 'GDAX'] |
| subscription | string Chart we're subscribed to. |
| error | string Live algorithm error message from a crash or algorithm runtime error. |
| success | boolean Indicate if the API request was successful. |
| errors | string Array List of errors with the API call. |
| Example |
{ "projectId": 0, "deployId": "string", "status": "DeployError", "launched": "2021-11-26T15:18:27.693Z", "stopped": "2021-11-26T15:18:27.693Z", "brokerage": "Interactive", "subscription": "string", "error": "string", "success": true, "errors": [ "string" ] } |
AlgorithmStatus Model - States of a live deployment. |
|
|---|---|
| AlgorithmStatus | string Enum States of a live deployment. Options : ['DeployError', 'InQueue', 'Running', 'Stopped', 'Liquidated', 'Deleted', 'Completed', 'RuntimeError', 'Invalid', 'LoggingIn', 'Initializing', 'History'] |
| Example |
{ "AlgorithmStatus": "DeployError" } |
UnauthorizedError Model - Unauthorized response from the API. Key is missing, invalid, or timestamp is too old for hash. |
|
|---|---|
| www_authenticate | string Header |


WITNESS LIST Home Health & Assisted Living Facilities(Int) Committee July 28, 1998-9:30A HOME HEALTH/ASSISTED LIVING FAC. On: Crowe, Michael (Interim Cmte/HomeHealth), Austin Written materials submitted: On: Nail, Elaine (Self), Lubbock


My First Bootstrap Page
This is some text.
Name:
Surname:
Sex:
Male
Female
Description:
Submit
Create User
Name
Surname
Description


Recently (May 24th - 25th), Michael Potter and I had the opportunity to
present at the
Tech Pros Conference
at Penn State Dickinson Law. For those unfamiliar, Tech Pros is a conference
that visits a different Commonwealth Campus each year to increase development
and networking opportunities for IT professionals at the university. In past
years, the conference has mainly focused on classroom technology, media
integration, and technical support strategies. This year, the conference
introduced a new track for the web, so we jumped on the opportunity to
demonstrate some of the work we have been doing in Virtual Reality (VR).
As some of you might remember, the Office of Digital Learning has been working
with the Forensics team to develop an interactive crime scene prototype
(https://odl.science.psu.edu/blog/post/3dvr-prototype). Specifically, we’ve
been using an open source web platform called
A-Frame
to deliver images overlaid with clickable hotspots. Once clicked, the hotspots
reveal dialog windows that expose users to 3D models and other significant
information. In addition, we have also been using similar techniques to
implement 360 videos; check out this 360 video walk through of a cottage that
Forensics students explore during mock investigations:
Get a first person view.
During our presentation, Michael and I highlighted some of the more important
aspects of working with A-Frame as well as some of the key technologies that
we used to power the Forensics prototype. In addition, we showcased a variety
of demos and also introduced Augmented Reality (AR) by superimposing a
computer-generated 3D skull onto a
Hiro target. Check out the demos we shared below:
Locate the Mr. Potato Head Star Wars characters.
Identify Sputnik in deep space.
Explore this 3D skull using Augmented Reality.
Overall, we had a great time. The Tech Pros conference was rich with energy
and excitement over emerging technologies, and everyone seemed eager to
collaborate and share their ideas with each other. In addition to presenting,
we had the opportunity to sit-in on some great panel-discussions as well as
the chance to network with a number of colleagues within the university. We
thank the Tech Pros organizers for having us and we look forward to sharing
more advancements in web technology in the future.
Tech Pros 2018 Presentation Slides:


Form validation ensures users provide necessary data and that the data is propertly entered. This client-side jQuery validation plugin, named Bootstrap Validator is developed by Nguyen Huu Phuoc and maintained on this GitHub repo. The Bootstrap Validator site also includes documentation and examples.
While client-side validation is good for immediate user feedback on the data that is being entered, if you are validating input due to security concerns, it is recommended to have server-side validation also applied to the input since it is relatively easy to disable Javascript validation. Read this Stack Overflow topic for a broader discussion on this topic.
Boostrap Validator can validate almost anything. However, for the base build and in the interest of keeping the file size to a minimum, the Arrow Framework's version includes only the validations listed below.
We have also listed the validations that are available but not added into this version of the plugin. If you need too add any back, these validators can be found either by downloading the current full plugin, or by pulling the standalone validators from GitHub and adding them to your build.
Bootstrap Validator also allows you to write your own validation patterns. View the instructions on how to build your own validators here.
| Name | Enabled | Description |
|---|---|---|
| base64 | Validate a base64 encoded string | |
| between | Check if the input value is between (strictly or not) two given numbers | |
| callback | Return the validity from a callback method | |
| choice | Check if the number of checked boxes are less or more than a given number | |
| creditCard | Validate a credit card number | |
| cusip | Validate a CUSIP | |
| cvv | Validate a CVV number | |
| date | Validate date | |
| different | Return true if the input value is different with given field's value | |
| digits | Return true if the value contains only digits | |
| ean | Validate an EAN (International Article Number) | |
| emailAddress | Validate an email address | |
| file | Validate file | |
| greaterThan | Return true if the value is greater than or equals to given number | |
| grid | Validate a GRId (Global Release Identifier) | |
| hex | Validate a hexadecimal number | |
| hexColor | Validate a hex color | |
| iban | Validate an International Bank Account Number (IBAN) | |
| id | Validate identification number. Support 25 countries | |
| identical | Check if the value is the same as one of particular field | |
| imei | Validate an IMEI (International Mobile Station Equipment Identity) | |
| imo | Validate an IMO (International Maritime Organization) | |
| integer | Validate an integer number | |
| ip | Validate an IP address. Support both IPv4 and IPv6 | |
| isbn | Validate an ISBN (International Standard Book Number). Support both ISBN 10 and ISBN 13 | |
| isin | Validate an ISIN (International Securities Identification Number) | |
| ismn | Validate an ISMN (International Standard Music Number) | |
| issn | Validate an ISSN (International Standard Serial Number) | |
| lessThan | Return true if the value is less than or equals to given number | |
| mac | Validate a MAC address | |
| meid | Validate a MEID (mobile equipment identifier) | |
| notEmpty | Check if the value is empty | |
| numeric | Check if the value is numeric | |
| phone | Validate a phone number | |
| regexp | Check if the value matches given Javascript regular expression | |
| remote | Perform remote checking via Ajax request | |
| rtn | Validate a RTN (Routing transit number) | |
| sedol | Validate a SEDOL (Stock Exchange Daily Official List) | |
| siren | Validate a Siren number | |
| siret | Validate a Siret number | |
| step | Check if the value is valid step one | |
| stringCase | Check if a string is a lower or upper case one | |
| stringLength | Validate the length of a string | |
| uri | Validate an URL address | |
| uuid | Validate an UUID, support v3, v4, v5 | |
| vat | Validate VAT number. Support 32 countries | |
| vin | Validate an US VIN (Vehicle Identification Number) | |
| zipCode | Validate a zip code |
To validate this form, you would need the following Javascript:
{% highlight js %} $('.registerForm').bootstrapValidator({ message: 'This value is not valid', feedbackIcons: { valid: 'fa fa-check', invalid: 'fa fa-times', validating: 'fa fa-refresh' }, fields: { username: { message: 'The username is not valid', validators: { notEmpty: { message: 'The username is required and cannot be empty' }, stringLength: { min: 6, max: 30, message: 'The username must be more than 6 and less than 30 characters long' }, regexp: { regexp: /^[a-zA-Z0-9_]+$/, message: 'The username can only consist of alphabetical, number and underscore' } } }, email: { validators: { notEmpty: { message: 'The email is required and cannot be empty' }, emailAddress: { message: 'The input is not a valid email address' } } } } }); {% endhighlight %}Plugin options can be triggered by the data-bv-*
tag. However, unlike Bootstrap plugins, this plugin cannot be initiated via data-attributes. You will need to also instantiate the validation object via Javascript, as shown below. Full examples and documentation on how to use data-attributes for this plugin can be found here.
Call the bootstrapValidator
object using jQuery. You may also add options to the object this way, or use data-attributes in the markup.
A full list of options as well as more examples can be found at the Bootstrap Validator site.
| Option | Equivalent HTML attribute | default |
|---|---|---|
| container | data-bv-container | n/a |
| excluded | data-bv-excluded | [':disabled', ':hidden', ':not(:visible)'] |
| feedbackIcons | data-bv-feedbackicons-valid, data-bv-feedbackicons-invalid, data-bv-feedbackicons-validating | { valid: null, invalid: null, validating: null } |
| group | data-bv-group | '.form-group' |
| live | data-bv-live | 'enabled' |
| message | data-bv-message | 'This value is not valid' |
| submitButtons | data-bv-submitbuttons | '[type="submit"]' |
| threshold | data-bv-threshold | null |
| trigger | data-bv-trigger | null |
| fields | n/a | null |
Bootstrap Validator has numerous methods. Rather than add them all here, you can check out the API documentation at the Bootstrap Validator site.


Bora Bora Island
Bora Bora is an island in the Leeward group of the Society Islands of French Polynesia, an overseas collectivity of France in the Pacific Ocean. The original name of the island in the Tahitian language might be better rendered as Pora Pora, meaning "First Born"; an early transcription found in 18th- and 19th-century accounts, is Bolabolla or Bollabolla. The island, located about 230 kilometres (140 mi) northwest of Papeete, is surrounded by a lagoon and a barrier reef. In the center of the island are the remnants of an extinct volcano rising to two peaks, Mount Pahia and Mount Otemanu, the highest point at 727 metres (2,385 ft). Bora Bora is a major international tourist destination, famous for its aqua-centric luxury resorts. The island is served by Bora Bora Airport on Motu Mete in the north, with Air Tahiti providing daily flights to and from Papeete on Tahiti. The major settlement, Vaitape is on the western side of the main island, opposite the main channel into the lagoon. Produce of the island is mostly limited to what can be obtained from the sea and the plentiful coconut trees, which were historically of economic importance for copra. According to a census performed in 2008, the permanent population of Bora Bora is 8,880.
Today the island is mainly dependent on tourism. Over the last few years several resorts have been built on motu (small islands) surrounding the lagoon. Thirty years ago, Hotel Bora Bora built the first over-the-water bungalows on stilts over the lagoon and today, over-water bungalows are a standard feature of most Bora Bora resorts. The quality of those bungalows ranges from comparably cheap, basic accommodations to very luxurious - and expensive - places to stay. Most of the tourist destinations are aquacentric; however it is possible to visit attractions on land such as WWII cannons. Air Tahiti has five or six flights daily to the Bora Bora Airport on Motu Mute from Tahiti (as well as from other islands). Although French and Tahitian are the main languages spoken by the inhabitants, people in contact with tourists generally have some command of English. Most visitors to Bora Bora are American, Japanese, or European.[citation needed] Public transport on the island is non-existent. Rental cars and bicycles are the recommended method of transport. There are also small fun-cars for hire in Vaitape. Snorkeling and scuba diving in and around the lagoon of Bora Bora are popular activities. Many species of sharks and rays inhabit the surrounding body of water. There are a few dive operators on the island offering manta ray dives and also shark-feeding dives. In addition to the existing islands of Bora Bora (called Motu in Taihitian), the new man-made motu of Motu Marfo has been added in the north-eastern corner of the lagoon on the property of the St. Regis Resort.
Source article locates here.


Attendance Management System is the process of marking attendance online when an event is taken care by Event leader. Once the event got created in dashboard, Team Members who are registered and interested in the event can view their attendance from their dashboard.
1.TEAM LEADER
2.TEAM MEMBER
3.TEAM MANAGER
Contact Details and a contact form
Who we are and what we do.


Anatomy of a Web Map
Housekeeping!
You can follow along here:
sta.mn/qhg. Links are in blue boxes,
green is just emphasis. You can comment and edit on
github!
Now let's get started :)
Today we will be talking about the very most basic principles of web mapping.
We're including a little history, so you can get an idea of how web maps have come to be.
There are always exceptions! We'll talk about those too.
We'll talk a lot about Google, but we're going to show you a 100% open source Google-free stack
But first, what does anatomy have to do with a web map?
Well,
Both bodies and web maps have components and systems that interact and intertwine.
Instead of cells, maps have data.
Instead of circulatory and digestive systems, web maps have styles and tiles and servers.
oh my!
So,
What is a web map?
To answer that question, maybe it's more helpful to ask,
How is a web map different than a digital map?
Digital: involves a computer, but might not be accessible by the internet.
A web map is a kind of digital map. And both are obviously quite different from analog maps, such as paper maps and atlases!
We're talking about web maps that you view in a browser, like...
Making maps for
mobile devices can be similar, but we're not talking about that today.
We're also not talking about
digital globes like
Google Earth
ok ok
but how about a little history:
How did web maps come to be?
First, there were digital maps like
ArcGIS.
Although useful, GIS for the Web is not user friendly :(
In 1996, Mapquest launched its web service.
ta da!
Directions! Online! Revolutionary!
The problem: it was slow to load :(
MapQuest required a full page refresh to scroll or zoom, and was always aligned to tile boundaries.
Google Maps really paved the way for online mapping, beginning in 2005.
But what was the revolution?
Was it the interface?
The red marker?
The weather widget?
No!
It was the
tile.
Let's talk about tiles for a minute. And to do so, we're borrowing some info from amazing mapper
Lyzi Diamond, who got a bunch of info about tiles from
Mapbox.
Thanks y'all! <3 <3 <3
Now here goes...
All tiles
=
same size! 256x256 pixels
same boundaries
Tiles could be a road map, a satellite image, or anything else that's a raster!
All these little tiles load
way faster than one big map.
 If the map is “smart,” it will pre-load tiles outside of the screen, along the top, bottom, left, and right.
This kind of map is colloquially called a
slippy map
Each zoom level has its own set of tiles!
Zoom level 0: one tile for the world.
With each additional zoom level, the number of tiles increases exponentially.
Zoom level 1: 4 tiles for the world.
Zoom level 2, 3, 4, 5
Zoom level 13
Tiles are rendered in advance (usually) then stored in a cache
Map tiles are just images on the web, so you can link to them individually.
In order to understand how this works, let's break down the URL.
http://tile.openstreetmap.org/4/2/6.png -- this is the name of the tile server.
http://tile.openstreetmap.org/4/2/6.png -- this is the z value, or the zoom level.
http://tile.openstreetmap.org/4/2/6.png -- This is the x/y value, or the place in the grid where the tile lives.
Google maps use Mercator projection, which is designed for sailors BUT it works well for flat maps.
We'll see more map projections later...!
Anyway, so all other slippy maps and slippy map software followed Google's lead, with tiles at the base.
Not surprisingly, a collection of raster tiles makes up what we call the map's base layer.
When we layer things like markers on top of them, we call those data layers or content layers or feature layers.
*(Not every web map contains a feature layer, but they are fairly typical.)
They are often vector layers (point, line, polygon). Sometimes you can interact with them (clicking to produce a popup, for example).
Filetypes: GIS uses
shapefiles, but web maps prefer
KML, or more recently,
GeoJSON
Here's the breakdown of how these pieces fit together:
Make sense?
Great!
Now we're ready to dive a little deeper into the whole web map anatomy!
What does the javascript library do? Grabs the tiles, adds content layer, handles interaction.
3 exceptions to the simplified story!
Exception #1: Tiles are always rasters EXCEPT when they're not!
vector tiles: they are an alternative to a database that makes raster tiles. They still render to rasters for display
Raster: ask for data to fit into tile
Vector: already have vector data sliced up in the way that I will make raster tiles
So someone has to go through and chop up that data, like
MapBox
Exception #2: Can’t interact with features on a raster. BUT
UTFGrid (Mapbox invention) makes it possible.
UTFGrid is an invisble tile layer made up of arbitrary letters which are indexes into the clickable data
Exception #3:
D3 exists outside the world of tiles
you can’t easily make road map in D3 BUT can do things that are clumsy in slippy maps like...
different map projections (in the browser!)
sta.mn/jfs
D3
IS
IN
SANE
Very powerful, but steep learning curve
So.
Where do I start?
Do I need to make my own custom tiles?
Yes? Use
TileMill to design your own tiles.
Pretty!
Style your map with
CartoCSS (or just carto)
You can host these files on
MapBox, or...
Do I need a content layer?
No? Put all your data into the tiles, possibly using UTFGrid for interactivity
Yes? Convert a Shapefile to GeoJSON with
OGRE or write your own GeoJSON with
geojson.io
Finally,
CartoDB takes care of almost all of this for you!
Thanks to:
You!
Presentation made with
big


(Update: Available on Pixel 4) Top Shot will be available for short videos on the Pixel 4, 3, and 3a
by Rita El KhouryLaunched with the Pixel 3, Top Shot is an AI feature that smartly recommends saving a better photo than the one you snapped. Until now, Top Shot required you to have Motion Photos enabled, to save the brief moments before and after the pic was taken and be able to get a different photo if needed. The feature will soon be enabled for short videos too and it'll be available on the Pixel 4, 3, and 3a.
We knew this feature was coming when Smart Burst was removed from the camera app on the Pixel 3. Instead of snapping a succession of full-res photos, tapping and holding the capture button now saves a 768 x 1024 video. This is what Google refers to as a "short video" in its support pages for Top Shot.
Currently, our Pixel 3 units don't show any Top Shot recommendations on these videos, but the feature should show up soon. It likely requires an update to the Camera and/or Photos apps — or a server-side switch, you never really know.
This addition should afford you a little bit more control over your time-sensitive snaps:
- If you know you'll probably hit the exact correct timing, you should take a regular pic with Motion Sense enabled, and rely on Top Shot as a backup just in case you miss. Pics salvaged this way are 1536 x 2048.
- If you're not confident about timing and think the shot might be off by several seconds, tap and hold on the capture button to take a "short video" and be confident that you won't miss the correct time.
Top Shots saved this way are 768 x 1024.Edit: See update below.
While the logic behind this sounds sane, the resolution you get with the latter is abysmal. You're better off tapping repeatedly on the shutter button and hoping one of the full-res images is nice, or taking a proper 4K video then saving a snap from it. The former requires quick thinking though, and the latter needs you to swipe to the video mode on your phone, so the new pseudo-burst-mode slash "short video" has a small benefit of immediacy. I'd still take the regular Smart Burst over it any day.
Update 1: 2019/11/04 6:17am PST by Rita El Khoury
Saving Top Shots from these burst-like short videos is available on the Pixel 4 and 4 XL. Our tests reveal an interesting quirk, though. The videos saved after tapping and holding the camera shutter have a very low-res of 768 x 1024. However, picking a Top Shot from them and exporting it as a still results in a higher-res 1536 x 2048 HDR image.
Left : Low-res pseudo-burst video. Right : Saved Top Shot from that video is surprisingly high-res.
However, if you decide to go off-script and export a frame that isn't denoted by Top Shot's signature dots on the video timeline, you get a non-HDR and low-res 768 x 1024 still.
Left : Choosing a non-Top Shot frame to export. Right : Resulting image is low-res.
That's a little better than what we expected based on our earlier speculation. It seems that Google is saving burst images together as a low-res video, but still keeping what it considers the best shots at a higher quality. This new burst mode-wannabe is still worse than the full-res stills we used to get before, but it saves space and gives you a few decent images to choose from. Thanks, Moshe!
End of Update
Source:
Google


Examples of Python source code or interactive sessions are represented using standard reST literal blocks. They are started by a :: at the end of the preceding paragraph and delimited by indentation.
Representing an interactive session requires including the prompts and output along with the Python code. No special markup is required for interactive sessions. After the last line of input or output presented, there should not be an “unused” primary prompt; this is an example of what not to do:
>>> 1 + 1
2
>>>
Syntax highlighting is done with Pygments (if it’s installed) and handled in a smart way:
There is a “highlighting language” for each source file. Per default, this is 'python' as the majority of files will have to highlight Python snippets.
Within Python highlighting mode, interactive sessions are recognized automatically and highlighted appropriately.
The highlighting language can be changed using the highlight directive, used as follows:
.. highlight:: c
This language is used until the next highlight directive is encountered.
For documents that have to show snippets in different languages, there’s also a code-block directive that is given the highlighting language directly:
.. code-block:: ruby
Some Ruby code.
The directive’s alias name sourcecode works as well.
The valid values for the highlighting language are:
If highlighting with the selected language fails, the block is not highlighted in any way.
If installed, Pygments can generate line numbers for code blocks. For automatically-highlighted blocks (those started by ::), line numbers must be switched on in a highlight directive, with the linenothreshold option:
.. highlight:: python
:linenothreshold: 5
This will produce line numbers for all code blocks longer than five lines.
For code-block blocks, a linenos flag option can be given to switch on line numbers for the individual block:
.. code-block:: ruby
:linenos:
Some more Ruby code.
Longer displays of verbatim text may be included by storing the example text in an external file containing only plain text. The file may be included using the literalinclude directive. [1] For example, to include the Python source file example.py, use:
.. literalinclude:: example.py
The file name is relative to the current file’s path.
The directive also supports the linenos flag option to switch on line numbers, and a language option to select a language different from the current file’s standard language. Example with options:
.. literalinclude:: example.rb
:language: ruby
:linenos:
Footnotes
| [1] | There is a standard .. include directive, but it raises errors if the file is not found. This one only emits a warning. |


Intuition
Intuition is constantly used in mathematics, especially when constructing axioms of math. However, intuition cannot always be trusted since math frequently produces counterintuitive results (the Banach-Tarski paradox, Gabriel's Horn, Galileo's paradox, Russell's paradox, the Monty Hall problem, coastline paradox, etc.).


your_username.github.io
._config.yml
file to your preferences.about.md
file for your About page._posts
folder, there are sample of blog entries. Learn from it and start yours.http://your_username.github.io
and you should see your blog running.If you want to use this theme as a project page blog, you don’t need to rename the theme repo into your_username.github.io
.
All you need to do, open _config.yml
file, change baseurl
to your project name which contains this theme, e.g. baseurl: "/myproject"
.
Any question/problem, ask me or report it here.


What does all that mean?
First let's review some basic messaging terminology:
A topic is a category or feed name to which messages are published. For each topic, the Kafka cluster maintains a partitioned log that looks like this:
The Kafka cluster retains all published messages—whether or not they have been consumed—for a configurable period of time. For example if the log retention is set to two days, then for the two days after a message is published it is available for consumption, after which it will be discarded to free up space. Kafka's performance is effectively constant with respect to data size so retaining lots of data is not a problem.
In fact the only metadata retained on a per-consumer basis is the position of the consumer in the log, called the "offset". This offset is controlled by the consumer: normally a consumer will advance its offset linearly as it reads messages, but in fact the position is controlled by the consumer and it can consume messages in any order it likes. For example a consumer can reset to an older offset to reprocess.
This combination of features means that Kafka consumers are very cheap—they can come and go without much impact on the cluster or on other consumers. For example, you can use our command line tools to "tail" the contents of any topic without changing what is consumed by any existing consumers.
The partitions in the log serve several purposes. First, they allow the log to scale beyond a size that will fit on a single server. Each individual partition must fit on the servers that host it, but a topic may have many partitions so it can handle an arbitrary amount of data. Second they act as the unit of parallelism—more on that in a bit.
Each partition has one server which acts as the "leader" and zero or more servers which act as "followers". The leader handles all read and write requests for the partition while the followers passively replicate the leader. If the leader fails, one of the followers will automatically become the new leader. Each server acts as a leader for some of its partitions and a follower for others so load is well balanced within the cluster.
Consumers label themselves with a consumer group name, and each message published to a topic is delivered to one consumer instance within each subscribing consumer group. Consumer instances can be in separate processes or on separate machines.
If all the consumer instances have the same consumer group, then this works just like a traditional queue balancing load over the consumers.
If all the consumer instances have different consumer groups, then this works like publish-subscribe and all messages are broadcast to all consumers.
More commonly, however, we have found that topics have a small number of consumer groups, one for each "logical subscriber". Each group is composed of many consumer instances for scalability and fault tolerance. This is nothing more than publish-subscribe semantics where the subscriber is cluster of consumers instead of a single process.
Kafka has stronger ordering guarantees than a traditional messaging system, too.
A traditional queue retains messages in-order on the server, and if multiple consumers consume from the queue then the server hands out messages in the order they are stored. However, although the server hands out messages in order, the messages are delivered asynchronously to consumers, so they may arrive out of order on different consumers. This effectively means the ordering of the messages is lost in the presence of parallel consumption. Messaging systems often work around this by having a notion of "exclusive consumer" that allows only one process to consume from a queue, but of course this means that there is no parallelism in processing.
Kafka does it better. By having a notion of parallelism—the partition—within the topics, Kafka is able to provide both ordering guarantees and load balancing over a pool of consumer processes. This is achieved by assigning the partitions in the topic to the consumers in the consumer group so that each partition is consumed by exactly one consumer in the group. By doing this we ensure that the consumer is the only reader of that partition and consumes the data in order. Since there are many partitions this still balances the load over many consumer instances. Note however that there cannot be more consumer instances in a consumer group than partitions.
Kafka only provides a total order over messages within a partition, not between different partitions in a topic. Per-partition ordering combined with the ability to partition data by key is sufficient for most applications. However, if you require a total order over messages this can be achieved with a topic that has only one partition, though this will mean only one consumer process per consumer group.


TRIANGLE
TRACKER
Please enter your first value
Please enter your second value
Please enter your third value
Discover


This guide explains how to integrate your app with Facebook using the Facebook Developer Portal for both iOS and Android.
If you haven't already done so, sign in to the Facebook Developer Portal and register as a developer. This is a simple process and it doesn't involve downloading or installing any software.
You must register your app with Facebook to receive a unique App ID. You can do this even if your app isn't yet complete or in the marketplace. In the upper-right area of the apps page, click on the Create New App button. A window will appear; fill in the necessary information:
App Name — this should be unique and descriptive of your app.
App Namespace — this is optional and isn't required by Corona. If you wish, you can enter a unique code name or identifier for the app.
Next, you'll be asked to answer a security captcha. Do so and continue. In the next screen, you will be presented with your App ID and App Secret.
Now look further down on the same page for a series of checkboxes under Select how your app integrates with Facebook.
We recommend that you follow each step carefully, as one misstep can cause Facebook integration to fail. Even if you plan to ignore a certain feature or operating system in your app, we suggest that you read and complete this entire section.
Bundle ID must match the App ID Suffix that you use to build your app. This can be retrieved in the App IDs submenu of the iOS Provisioning Portal where you manage your certificates, devices, provisioning, etc. Here, use the same com.mycompany.myapp
. Do not attempt to use a wildcard App ID.
iPhone App Store ID and/or iPad App Store ID is required for Facebook Single Sign-On. See the Build Settings (iOS) section below for further details. You will receive this ID when you add your app to the iTunes Connect portal, even prior to uploading the binary. For more information about adding an app to iTunes Connect, please view this video. If you haven't yet configured the app within the iTunes store, you can use any existing app ID — just don't forget to change it to your App Store ID before you submit the binary to Apple.
Facebook Login should be checked as Enabled.
Deep Linking should be checked as Enabled. This allows Facebook to use URL schemes to perform specific actions when your app opens. For instance, when the Facebook mobile app launches your app from a link, you will get a launchArgs
parameter in your Corona app, from which you can parse an id
string.
Package Name — use the same package name that you've entered into Corona's build window.
Class Name is used for native linking — that is, if someone taps a link to your app in Facebook, it will automatically launch the app. This field must be set to com.ansca.corona.CoronaActivity
. Facebook on Android will then launch your app via an Android "intent" using the package name and class name that you've entered on the developer page. The package name (above) is your app's unique string ID and it tells the Android system which app to launch the activity from. As such, there won't be a conflict if more than one Corona app is installed on the same device.
Key Hash is required to integrate Facebook Single Sign-On in your Android app. Instructions on how to generate this key hash can be found under Section 4 of this guide.
Facebook Login should be checked as Enabled.
Deep Linking should be checked as Enabled. This allows Facebook to use URL schemes to perform specific actions when your app opens. For instance, when the Facebook mobile app launches your app from a link, you will get a launchArgs
parameter in your Corona app, from which you can parse an id
string.
Assuming everything is set up as indicated, please proceed to the Implementing Facebook guide which discusses how to implement common Facebook tasks and processes in your app.


If checked, our modified version of Bootstrap CSS will load to give the job board module basic layout and style. Uncheck this box if you are using a DNN Theme that uses Bootstrap already.
If checked, a simple application form will appear on the job details page and your users can submit their resumes to you directly through the module.
If left blank, applications will be sent to the site administrator.
This is a simple message that displays in the sidebar of the listing page.
If checked, the filters checkboxes will appear on the listing page that allows users to filter the listings by job types (full time, part time, etc).
The Job Details display on the listing and the detail view of the module. Typical job details would be location, compensation, or benefits. Create your first job detail »


If you have any questions or suggestions about our anthing, do not hesitate to contact us.
By email: chrislattner2020@outlook.com


JavaScript is disabled on your browser.
Skip navigation links
Overview
Package
Class
Tree
Deprecated
Index
Help
Prev Letter
Next Letter
Frames
No Frames
All Classes
A
C
D
E
F
G
H
I
L
M
N
O
P
Q
R
S
T
U
V
W
T
terminate()
- Method in class de.tuberlin.onedrivesdk.networking.
OneDriveSession
testChildCount()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testChildFiles()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testChildFolder()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testCopyFile()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testCreateAndDeleteFolder()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testCreateUploadSession()
- Method in class de.tuberlin.onedrivesdk.uploadFile.
ConcreteOneUploadFileTest
testDeleteFile()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testDeleteItem()
- Method in class de.tuberlin.
OneItemTest
testFactory()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testFileNotFound()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testFolderByPath()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testGetAllDrives()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testGetChildren()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testGetDefaultDrive()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testGetDriveById()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testGetFileById()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testGetFileByPath()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testGetFolderById()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testMoveFile()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testNullJsonParse()
- Method in class de.tuberlin.
OneItemTest
testNullJsonParseItems()
- Method in class de.tuberlin.
OneItemTest
testParentFolder()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testParseCorruptItems()
- Method in class de.tuberlin.
OneItemTest
testParseDate()
- Method in class de.tuberlin.
OneItemTest
testParseEmptyOneFiles()
- Method in class de.tuberlin.
OneItemTest
testParseEmptyOneFolder()
- Method in class de.tuberlin.
OneItemTest
testParseEmptyOneItem()
- Method in class de.tuberlin.
OneItemTest
testParseEmptyOneItems()
- Method in class de.tuberlin.
OneItemTest
testRefresh()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
testRootFolder()
- Method in class de.tuberlin.onedrivesdk.common.
ConcreteOneDriveSDKTest
TestSDKFactory
- Class in
de.tuberlin.onedrivesdk.common
Created by Sebastian on 10.06.2015.
TestSDKFactory()
- Constructor for class de.tuberlin.onedrivesdk.common.
TestSDKFactory
testSetApi()
- Method in class de.tuberlin.
OneItemTest
toString()
- Method in enum de.tuberlin.onedrivesdk.common.
ConflictBehavior
toString()
- Method in class de.tuberlin.onedrivesdk.common.
InnerError
toString()
- Method in class de.tuberlin.onedrivesdk.common.
OneDriveError
toString()
- Method in class de.tuberlin.onedrivesdk.drive.
ConcreteOneDrive
toString()
- Method in class de.tuberlin.onedrivesdk.drive.
DriveOwner
toString()
- Method in class de.tuberlin.onedrivesdk.drive.
DriveUser
toString()
- Method in class de.tuberlin.onedrivesdk.file.
ConcreteOneFile
toString()
- Method in class de.tuberlin.onedrivesdk.folder.
ConcreteOneFolder
toString()
- Method in interface de.tuberlin.onedrivesdk.folder.
OneFolder
toString()
- Method in class de.tuberlin.onedrivesdk.networking.
ConcreteOneResponse
toString()
- Method in class de.tuberlin.onedrivesdk.networking.
OneDriveSession
A
C
D
E
F
G
H
I
L
M
N
O
P
Q
R
S
T
U
V
W
Skip navigation links
Overview
Package
Class
Tree
Deprecated
Index
Help
Prev Letter
Next Letter
Frames
No Frames
All Classes


Coming Soon!
ReaderFeeder delivers RSS feeds in full-text format to your Kindle e-reader, wirelessly, on schedule.
The site is currently in development, our target launch date is late 2018! Sign up for updates using the form below!


--- layout: article publication-date: 2020-08-03 title: "Exploring the Future of Remote User Research" authors: - Nikolas Martelaro venue: Microsoft Research New Future of Work 2020, August 3–5, 2020. type: - Symposium - Position Paper - Peer-reviewed tags: - user research - remote work - future of work - design methods video: "https://www.youtube.com/watch?v=BxZwN4ojdj4" video-thumb: "https://www.youtube.com/watch?v=BxZwN4ojdj4" image: teaser_remote_user_research.png pdf: NFW-Martelaro_remote_user_research.pdf external-urls: - https://www.microsoft.com/en-us/research/publication/exploring-the-future-of-remote-user-research/ external-names: - Symposium Page external-types: - link page-title: "Exploring the Future of Remote User Research" page-subtitle: "How can our move to remote user research lead to more inclusive and sustainable user research practices?" ---
The rapid move to remote work due to COVID-19 social distancing policies has slowed or stopped most in-person qualitative user research activities. The limitation on in-person activities has pushed many user researchers to consider how they can continue their research remotely and presents an opportunity for user research teams to (re)design their research processes for remote work. In this position statement, I outline prior work in remote qualitative user research methods and discuss how this work can help us to (re)design new tools, methods, and frameworks that can enable remote work. I then propose a set of research questions that can further our knowledge and abilities to conduct effective remote user research. With creative development, we can create remote research methods that afford new ways of understanding user experience today and build more environmentally conscious and accessible research practices for a future where remote research is much more common.


XINS servlet container classes. The classes of this package should not be used by external APIs or programs as it may be removed in future releases. @since XINS 1.2.0


Accessibility Reference for App Designers and Developers
Ads free, subscriptions free, purchases free, tracking free, marketing free, etc; just here to help you implement more accessibility features in your apps.
This app aims to be your accessibility companion when designing and developing apps.
Hopefully you will be able to find in here tools to help you implement as many accessibility features and attributes as possible.
This app is not tracking you in anyway, nor sharing any information from you with no one.
This app will always be free, subscription free, and ad free.
Feel free to do whatever you want with this app and if you stop using it feel free to remove it from your device; you will always have a chance to download it again from the App Store.


|
| |
SSL_write(3)
SSL_write - write bytes to a TLS/SSL connection.
#include <openssl/ssl.h>
int SSL_write(SSL *ssl, const void *buf, int num);
SSL_write() writes num bytes from the buffer buf into the specified
ssl connection.
If necessary, SSL_write() will negotiate a TLS/SSL session, if
not already explicitly performed by SSL_connect(3) or
SSL_accept(3). If the peer requests a re-negotiation, it will be performed transparently
during the SSL_write() operation. The behaviour of
SSL_write() depends on the underlying BIO.
For the transparent negotiation to succeed, the ssl must have been initialized to client or server mode. This is being done by
calling
SSL_set_connect_state(3) or SSL_set_accept_state() before the first call to an SSL_read(3) or SSL_write() function.
If the underlying BIO is blocking, SSL_write() will only return, once the write operation has
been finished or an error occurred, except when a renegotiation take place,
in which case a SSL_ERROR_WANT_READ may occur. This behaviour can be
controlled with the SSL_MODE_AUTO_RETRY flag of the
SSL_CTX_set_mode(3) call.
If the underlying BIO is non-blocking, SSL_write() will also return, when the underlying BIO could
not satisfy the needs of SSL_write() to continue the
operation. In this case a call to
SSL_get_error(3) with the return value of SSL_write() will yield SSL_ERROR_WANT_READ or
SSL_ERROR_WANT_WRITE. As at any time a re-negotiation is possible, a call to
SSL_write() can also cause read operations! The calling
process then must repeat the call after taking appropriate action to
satisfy the needs of SSL_write(). The action depends on the
underlying BIO. When using a non-blocking socket, nothing is to be done,
but select() can be used to check for the required condition.
When using a buffering BIO, like a BIO pair, data must be written into or
retrieved out of the BIO before being able to continue.
SSL_write() will only return with success, when the complete
contents of buf of length num has been written. This default behaviour can be changed with the
SSL_MODE_ENABLE_PARTIAL_WRITE option of
SSL_CTX_set_mode(3). When this flag is set, SSL_write() will also return with
success, when a partial write has been successfully completed. In this case
the SSL_write() operation is considered completed. The bytes
are sent and a new SSL_write() operation with a new buffer
(with the already sent bytes removed) must be started. A partial write is
performed with the size of a message block, which is 16kB for SSLv3/TLSv1.
When an SSL_write() operation has to be repeated because of
SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE, it must be repeated with the same arguments.
When calling SSL_write() with num=0 bytes to be sent the
behaviour is undefined.
The following return values can occur:
- >0
-
The write operation was successful, the return value is the number of bytes
actually written to the TLS/SSL connection.
- 0
-
The write operation was not successful. Probably the underlying connection
was closed. Call SSL_get_error() with the return value ret to find out, whether an error occurred or the connection was shut down
cleanly (SSL_ERROR_ZERO_RETURN).
SSLv2 (deprecated) does not support a shutdown alert protocol, so it can
only be detected, whether the underlying connection was closed. It cannot
be checked, why the closure happened.
- <0
-
The write operation was not successful, because either an error occurred or
action must be taken by the calling process. Call
SSL_get_error() with the return value ret to find out the reason.
SSL_get_error(3), SSL_read(3),
SSL_CTX_set_mode(3), SSL_CTX_new(3),
SSL_connect(3), SSL_accept(3)
SSL_set_connect_state(3),
ssl(3), bio(3)
| | |


Bose QC35 II Noise-Cancelling Headphones are $70 Off for Black Friday
by Uzair GhaniThe legendary Bose QC35 II noise-cancelling headphones are currently $70 off on Amazon for Black Friday, bringing the price down to $279.
Grab the Bose QC35 II for Just $279 this Black Friday, Down from $349 MSRP
Ask anyone which are the best-ever noise cancelling headphones of all time. If they say anything else other than the Bose QC35 II, then they're probably lying. The point being, these headphones are the best in the business with noise-cancelling tech that puts everything else to shame. And if you need a pair of QC35 IIs for yourself, then you've come here on a very lucky day as they are discounted to just $279 for Black Friday 2019.
The Bose QC35 II offer an extremely comfortable fit and finish and offer battery life of up to 20 hours which is more than enough. You also get access to Bose AR, Alexa, 3 levels of noise-cancellation, music sharing and of course, the Bose Connect app. What more do you need? Of course, the headphones itself, which you can grab from the link below.
Buy Bose QuietComfort 35 II Wireless Bluetooth Headphones, Noise-Cancelling, with Alexa voice control, enabled with Bose AR - Was $349, now just $279
Want even more deals? They're all here:
- Best Black Friday Deal: Unlocked Galaxy S10 + Free Galaxy Buds for $699 [Was $1,029]
- Black Friday 2019 Deals on microSD Cards, From Just $5.79!
- Black Friday 2019 Discounts the Echo Show 5 to $49.99 [Save $40]
- Amazon Echo Dot (3rd Gen) Heavily Discounted to $22 for Black Friday 2019 [Was $49.99]
- GoPro HERO8 Holiday Bundle $150 Off for Black Friday 2019 [Now $349]
- 32GB iPad 7 Drops to $249 for Black Friday 2019, 128GB Model for $329
- Apple AirPods 2 with Wireless Charging Case are $44 Off Right Now
- Black Friday Deal: Magic Mouse 2 $20 Off, Now Just $59 [Was $79]
- Apple Pencil 1 Discounted to $79 for Black Friday 2019 [Was $100]
- Black Friday Deal Discounts SanDisk and WD Products by up to 60%, Includes microSD, SD Cards, SSDs, More
- Thanksgiving Day Deal Discounts Iron Man Edition Tello Drone to Just $89 [Was $129]
- Amazon Echo Dot + Smart Plug Bundle for Just $26.99 [Was $74.98]
- 11-inch iPad Pro Now $150 Off for Thanksgiving, Starting from $649
- Linksys Velop Tri-Band Mesh WiFi System $120 Off for Black Friday 2019
- Black Friday 2019 Discounts 64GB 11-inch iPad Pro to $674 [$125 Off]
- Black Friday 2019 Deal: Latest MacBook Air for Just $799 with No-Rush Shipping [Was $1100]
- Red Hot Black Friday Deal: 64GB SanDisk Extreme microSD Card for Just $14.48
- Amazon’s $29.99 Fire 7 Tablet Deal for Black Friday 2019 is Crazy Good
- Apple Watch Series 3 Discounted to $169 for Black Friday
- Black Friday 2019 Deal: Ring Video Doorbell for Just $59.99 [Was $99]
- GoPro HERO7 Bundle $135 Off for Black Friday 2019, Includes Extra Battery + microSD Card [Now $299]
- 12.9-inch iPad Pro is up to $120 Off for Black Friday 2019 – Multiple Options Available


|
Allegro CL version 10.1 |
This chapter contains the following sections:
6.1 How to add forms to a project
6.2 Form devices
6.3 Specifying the main form of a project
6.4 Form properties that affect appearance
6.5 Components and forms
6.5.1 Placing a new component on a form
6.5.2 Placing a copy of an existing component on a form
6.5.3 Positioning and sizing a component on a form
6.5.4 Aligning components
6.5.5 Selecting more than one component
6.5.6 Component position when a form is resized
6.6 Setting component properties at runtime
6.7 Modal dialogs
This is chapter 6 of the User Guide for the Allegro CL 10.1 Integrated Development Environment (IDE).
The chapters of the IDE User Guide are:
Chapter 1: Introduction to the IDE
Chapter 2: The Allegro CL Development Environment (IDE)
Chapter 3: An example
Chapter 4: Projects
Chapter 5: Components
Chapter 6: Designing a user interface using forms (this chapter)
Chapter 7: Menus
Chapter 8: Events
The Allegro CL Integrated Development Environment facilitates designing and creating a user interface for your application. The form is the canvas for designing windows. Typically, each project has one or more forms, one identified as the main form and the others (if any) subsidiary forms. Each form corresponds to a window in the actual application. The various windows you see in an application the primary window (the closing of which ends the application), other windows and dialogs all start as forms in the design process.
In this chapter, we describe how to:
Allegro CL starts with one blank form as part of a default project. The General tab of the project manager (displayed with View | Project Manager) shows all modules (a module may have one or more files associated with it) associated with a project. Form modules have two or three associated files: one .cl (source) file, one .bil file, and (if there are pixmaps associated with the form,) one .bml file. All have the same name but different extensions. The Project Manager shows the form name and the location of the form source (.cl) file if it is saved.
You can add a new, blank form to the current project by clicking File | New Form (i.e. click New Form on the File menu). You are asked what sort of window to design with a dialog similar to:
We describe the choices just below. It is often useful to subclass the classes provided: then you can write methods specifc to the new window (and others of the same subclass), methods that do not modify the behavior of existing windows. You can specify a new subclass in the area to the right. This class will be created and the new form will have it as the value of the class property (accessed by the device generic function).
A common choice is dialog. The different choices are called classes (or, in older documentation devices) and name classes of windows (as described in the next section). Once you choose the class, a new (and unsaved) blank form is displayed, named formn where n is an integer not already used (thus form2, form3, etc.) This new form is automatically added to the current project and will appear at the end of the modules listed in the Project Manager General tab.
You can add an existing form to the current project by clicking on the + button of the Project Manager toolbar and identifying the form source (.cl) file to the Open dialog that is displayed. (The .bil and, if there is one, .bml files must be in the same folder.)
As said in the previous section, when you click File | New Form, a dialog like the following is displayed:
The choices shown identify the class property of the form (meaning the class of the application window created from the form). Note that the accessor of the class property is device (since class is a Common Lisp symbol and should not be overloaded with a function definition). If you define a new class (by subclassing the appropriate window class), it will be displayed in the dialog as well, as the following example shows. Define a subclass of dialog by entering my-dialog in the type-in widget on the New Form dialog, or by evaluating a form like the following in a listener:
(defclass my-dialog (dialog) ())
Click File | New Form and the class choices now include my-dialog (which we have selected):
As we said above, subclassing predefined classes of windows is highly recommended. You can modify your subclasses changing the initial property values, redefining methods, and so on without worrying about affecting anything else. Change an existing class and many things may break.
There are many initial device choices. Among the more important are are frame-window, non-refreshing-window, rich-edit-dialog, dialog, text-edit-window, lisp-edit-window, and bitmap-window. The usual choice, if you intend to add components to the form, is dialog, because it is the choice most suitable for components since it supports ALT-key shortcuts and allows you to move keyboard focus among its controls with the TAB key. We describe each type and follow the description with definitions of some terms we use.
Note on windows with subwindows
. The classes that have subwindows (non-refreshing-window, bitmap-window, and text-edit-window) instantiate a frame window plus a pane window inside the frame (retrievable by calling frame-child on the frame). This is not absolutely necessary since you could just draw in the frame-window by itself, but it comes in handy when you want to add a toolbar or status-bar to the window. When added to the frame, these special panes become siblings of the main pane so that the main pane will be an independently scrolling area and the size of it is the actual available drawing size and so on.When you subclass a class of a window with a pane, you should subclass the pane class as well and provide a default-pane-class method so the correct pane will be instantiated when the window is instantiated. Thus, if you subclass text-edit-window, you must (1) subclass text-edit-pane as well and (2) make your subclass of text-edit-pane the default-pane-class of your subclass of text-edit-window (by providing a default-pane-class method).
Here are definitions of some of the terms we just used:
: a backing store is a copy of the contents of a window which is automatically displayed when any portion of the window is exposed after being hidden (covered by another window or because the window was shrunk). Only bitmap-windows have a backing store. (The text in text-edit-panes is redisplayed when the pane is exposed but by a means other than using a backing store.) Note that a backing store is expensive in its use of machine resources.Backing store
: when a window has a pane, it is actually two windows, a frame with the title and border (and perhaps other things) and the pane as a child window. The pane's advantage is that it is automatically resized when its parent is resized or when additional sub-windows, such as toolbars and status bars, are added to the parent. In a frame-window, adding a toolbar (with add-toolbar) covers whatever was at the top and the toolbar can be scrolled out of sight. If a toolbar is added to a non-refreshing-window (or text-edit- or bitmap-windows), the pane is resized (so nothing is covered) and the toolbar is not scrolled.Pane
: the ability to use access keys (pressing Alt and the underlined letter in the title) to change the value of a control or press a button. Access keys for menus on a menubar is supported for all windows.Alt key
: the ability to move focus among controls with the tab key.Tabbing
Because of its ability to have visible components, dialog (or your own subclass of dialog) is the standard choice for a window with visible components. Components on other types of windows should be placed on a toolbar added to the window. Add a toolbar by specifying the toolbar property to be true.
Some examples of window types in the Allegro CL environment: the Project Window in
Allegro CL (with the main menubar and toolbars) is a variety of frame-window; the debug
window is a variety of text-edit-window. If you see a window in the Allegro CL development
environment that you want to emulate, click Tools | Get Component and then click
on the window of interest (clicking on the frame will get the parent window and the
interior will get the pane if there is one). A printed representation of the window object
is written to the debug window. Evaluating (class-of *)
tells the class. You
can then look at the superclasses with Tools | Graph
Superclasses (select the class name without the trailing > and click the menu
command). Note that you should not use the classes of Allegro CL windows. Instead, create
your own classes with similar superclasses.
The window corresponding to the main form of a project has the feature that closing that window (by, e.g. clicking on the close button in the upper right) closes the application as well. Main forms are displayed with a different icon than other form modules when you view the General tab.
Form1 is the main form. Its icon looks like it is moving while the icon for form2 looks stable.
The options tab of the Project Manager window displays the forms associated with a project (this is from the Interface Builder Tutorial project):
The main form is identified doodler in the illustration. The other forms are displayed in the drop-down list. To select a different form, display the list and select a different form. The Init Function, in the default is make-<main-form> but the default name is not listed. This function creates and displays the window associated with the main form so if you use the default init function, when your application is started, the window associated with the main form is displayed and it is the only window displayed initially. Other windows must be displayed programatically.
Forms are components and have properties. You can inspect the properties of a form by selecting the form. The illustration shows the properties of a form:
All the properties are described on their online manual pages. Here we just mention two:
:none
, then
the corresponding window cannot be resized with the mouse and there are no close or
minimize buttons. nil
,
no title bar displayed and (as a result) no close or minimize buttons. Form design is somewhat WYSIWYG (what you see is what you get), i.e. it looks quite like its associated window, but a form always has a title bar, an active close box and minimize button, and a border, and are always resizable while the associated window may not have those features. These features are provided for forms to make them easy to design. Further, the attachment properties of the components on a form (how the component moves or resizes when the parent window is resized, e.g. right-attachment and left-attachment) are mostly disabled. Components keep constant distance from the top and left of the form and are never resized as the form is resized even though that might not be their behavior (depending on their attachment properties) when the window associated with the form is resized. Again, this is a feature to assist in form design.
Run the form (click Run | Run Project or Run | Run Form to see how the associated window will behave in the application). Run Project runs the project's init function (which in the default displays the main form only). Run Form displays the selected form regardless of whether it is the main form. Also Run Project runs the project in a separate thread (so you see an item for it in the task bar) while Run Form runs the form in the IDE GUI thread.
Much of the time spent designing the user interface to your application is spent manipulating components in forms. Chapter 5 on components describes the type of components, which are suitable for what purposes, and how the behavior of a component can be customized. Here we discuss issues relating to positioning components on the form, associating separate components with each other and tabbing between components, issues dealing with components on forms rather than individual component behavior.
Click on a component button on the component toolbar. The button stays pressed until you add the component to a form. Then clicking and releasing on the form (at the location you want the upper left corner of the bounding box of the component to appear) places the component with default size at that location. Clicking without releasing and dragging the mouse positions the component with one corner at the click location and the other corners specified by the rubber band box that appears as you drag. This allows components to be sized when placed if desired. (Components can be resized at any time by selecting and then dragging over the sizing handles that surround a selected component.) The new component object will have default properties.
Selecting an existing component, clicking Edit | Copy, and then Edit | Paste causes a new instance of the selected component (with all properties except name identical) to be placed on the form. The new copy is placed close (offset down and to the right) to the existing one (assuming they are on the same form). Move it to the desired location using the mouse.
Note that copying works between forms as well: if you copy a component from form1 and then select form2, clicking Edit | Paste will place the copy on form2. Using the same component instance (rather than copies) more than once is not supported.
Edit | Cut deletes the component and puts the component object on the clipboard. Edit | Paste places it on the selected form. Selecting a component and pressing the Delete key deletes the component.
When a component on a form has focus, sizing handles appear around it: If sizing handles are solid, then you can use a handle to resize the component.
As the cursor moves over the sizing handles, it changes to a vertical (top and bottom handles), horizontal (right and left handles), or 45 degrees (corner handles) double-headed arrow. Pressing the left mouse button and moving the mouse resizes in the direction of the arrows. You can also change the appropriate property (height, e.g.) of the component in the Inspector window while the component has focus and the size or location of the component on the form changes. Also, pressing the left button while inside the sizing handles and moving the mouse moves the component.
As a component moves into alignment (vertical or horizontal) with another component on a form, an alignment cue appears exactly when the components are aligned. Movement is also temporarily stopped. If you release the mouse button while the alignment cue is visible, the components will be in exact alignment. Thus it is easy to align components exactly as you wish.
Clicking Form | Show Alignment shows all alignment cues for currently aligned components.
Clicking Form | Space Equally while three or more components are selected repositions them so they are spaced equally along the obvious (to the system) axis. This feature is most useful when the selected components are aligned horizontally or vertically.
If you select a component (by clicking over it) and then, while pressing the Shift key, click over a second component, both components will be selected. (And additional components can be added to the selection in the same way press the shift key and click over the component you want added to the selection.) Resizing is disabled when more than one component is selected but all selected components will move as a unit if the left button is depressed over a selected component and the mouse is moved.
You can select multiple components with rectangular selection. Click on the form but outside of a component, drag the mouse and a selection rectangle appears. Any component that overlaps or is enclosed by the selection rectangle will be selected when the mouse button is released.
When more than one component is selected, the Inspector window shows common properties and events shared by all the selected components. (The title of the Inspector changes to Inspect Multiple. The values for the properties and events are for the last selected component. Changing a property/event changes all selected components.
Attachments are not active during design, because during design you need to specify the form size and component location without one affecting the other.
When a form is resized, the top-left corner of the component maintains the same relative position to the top-left corner of the forms interior. Component position on a form is determined by the top and left properties (they specify the distance from the top and left edge of the form). While a form is being designed, those values are not affected if the form is resized. Therefore, if the top of a component is 100 (meaning it is 100 pixels below the top of the form) and the form is resized so it is only 50 pixels high, the component will no longer be visible.
Note that this behavior is different from what happens when the window associated with the form is resized. The issue of what should happen to a component when the parent window is resized is complicated: should it be resized proportionally or remain the same size? If it remains the same size, should its location in the resized window be absolutely the same (still 100 pixels down from the top and 30 pixels right of the left border, say) or should they scale in proportion to the resizing (to 50 pixels down if the window height is halved). The behavior is controlled by the various attachment properties top-, bottom-, left-, and right-attachment. We will not discuss attachment in more detail here (see the online manual pages for attachment properties): we are emphasizing that this is a situation where the behavior of the form and the associated running window are different in that attachments are ignored on forms.
As a consequence, a large resize can cause a component to cease to be visible. This form has three components:
When we make the height much smaller, the check-box and multi-item-list cease to be visible:
They are still there of course. You can enlarge the form, move them up, and shrink it again. You can also see the list of all components by clicking on the dialog-items property (not the value but the property on the left). This causes the Inspector to inspect the value of the dialog-items property:
The first lines describe the value (identifying it as a cons i.e. a list) whose elements are then listed the (still visible) static-text, the multi-item-list, and the check-box. Clicking on 1 (on the left) inspects the value of our invisible multi-item-list.
Modify the top property, from the current 232 to, say 10, and the multi-item-list is visible again:
See Chapter 5 for more discussion of component properties and how to set them during the design (but briefly, select the component and its properties and their current values are displayed in the Inspector; click on the value of a property and either type in the new value or click on the button to the right of the value slot to set using a dialog or toggle if true/false). However, you may not want to specify everything at design time since you may want different things to appear depending on information provided at startup or from the environment. For example, suppose you have a window for providing information on how to contact you if your user has a problem with the application.
This window may be part of a standard project used as a subproject for various applications. The message may be the same for each application but the title (foo as displayed) should be the name of your application. If you are using this form for your Destructo application, your Gardening application, and your Thai Cooking application, Destructo, Gardening, and Thai Cooking should be the respective titles. Now, you can either have three different forms, one for each application, or you can have one form whose title property is set at runtime rather than design time. (And having one form means that only one form has to be changed if, for example, you get a new telephone number.)
In the source code for your application, during initialization, an expression such as the following should be executed (for the Destructo application, replace Destructo with Thai Cooking or Gardening for the other applications):
(setf (title (find-window :help-dialog)) "Destructo")
Here :help-dialog
is the name (the value of the name property) of the dialog, find-window finds the dialog object (i.e.
the window associated with the form), title
accesses the title property, and setf is the Lisp operator which changes
values of properties.
A dialog is modal if, when it is displayed, only it is receptive to events (mouse or keyboard). Therefore the user must deal with the dialog before doing anything else with the application. For example, the dialog displayed by File | Save As in Allegro CL is modal. You must either specify a file as a location to save whatever is being saved or click cancel.
For a dialog to be modal in an application, the following properties should be set as indicated:
nil
. If not, the window will not be displayed outside its owner and may in
fact be hidden, meaning that it cannot be cleared, but neither can anything else be done.nil
.
Modal windows typically do not have these features.:shrunk
,
so the window is not visible until popped-up with pop-up-modal-dialog.The pop-up property acts as a surrogate for those properties. If you set it to t in the inspector, the other properties will be coerced to the values indicated. Note that the pop-up property does not have additional programmatic effect. Note too that a non-modal window can have the indicated values for these properties as well.
Such dialogs can be displayed in a modal fashion with pop-up-modal-dialog. Every modal dialog should have an obvious way for the user to deal with it since the user can do nothing else until it is dealt with. The Default and Cancel button components are designed for this purpose. Each has an initial on-change handler function, return-t-from-pop-up-dialog and return-nil-from-pop-up-dialog respectively, that closes the dialog and causes pop-up-modal-dialog to return t or nil. After pop-up-modal-dialog returns, the dialog has disappeared from view but it still exists as an object and the values of the components on the dialog can be examined. Options dialogs are often modal (although the Allegro CL Options dialog is not). After the user has clicked the default button (often titled OK or Accept), the program can act on the choices the user made with code like:
(if (pop-up-modal-dialog (find-dialog :options)) (dolist (i (dialog-items (find-dialog :options)) (... get the value and act appropriately ...)))
Go to chapter 7. Go to the beginning of this chapter.
Copyright (c) 1998-2017, Franz Inc. Berkeley, CA., USA. All rights reserved.
Documentation for Allegro CL version 10.1.
Created 2017.2.27.
|
Allegro CL version 10.1 |


Settings
Guitar Practice
Setlists
10 minutes today
←
►
→
Another Love Song
Queens of the Stone Age
5
Delete markers
5
SLOW
∞
SETLIST
COUNT
D
U
x