intake salt Pacific data food g/d; sugar countries dietary g/d Islands studies fat Solomon Health aged Island Vanuatu Samoa reported foods assessment Household adults expenditure fat, review study quality total Cross-sectional Fiji Survey {border-style Food National collab: households (modelling): FSM Guam Statistics contribution px;} years): #ffffff;} Dietary New energy Nutrition consumption females males saturated (H-FR; Expenditure Salt intakes literature Data HIES Tonga intervention overall percentage States high included modelling nutrition systematic Federated household intake, risk urine Cook H-FR NCD Table available based imported information (modelling; AI, Income Kiribati Martyn, Ministry Nutr absolute country day diary diets factors including methods reduce search sources Micha, Office Powles, Republic Two-week World adult analysis fat): grey national processed reduction surveys years Global Organization availability feast policy population present px; studies. used using {font-family (FFQ; Assessment Centre FSM, Government Islanders Islands; Public Studies Sugar adults): countries. font-size health method number outcome ranged rates table type unpublished women %), Absolute Commonwealth FFQ H-UNa Islands, Islands. Mariana Northern Pacific. Papua Report University behaviours collection confectionery daily double; intake. measure monitoring non-feast obesity participation products questionnaire recommended results showed terms tool years; (secondary Bureau CNMI Countries Fat Geneva: H-FR, Micronesia Micronesia; Report. Snowdon Trieu WHO. [], analysis): assessed associated baseline border-color border-width conducted cooking countries, d/week; drinks fats follow-up frequency initiatives interventions low patterns peer-reviewed solid; strategies sugar, sugar-sweetened {font-style {font-weight (H-UNa; (grant (often (questionnaire; AV, Adults Australia CNMI, Caledonia Clin Dela Description Development Diseases Fig. Finance Islands: J.W. Kaufer, Main Marshall Martyn Micha Modelling NHMRC Nauru Nusa PNG, Palau Percentage Pre–post RMI, Research STEPS Samoa, Samoa. Samoa: Santos South Survey, Sydney Thow Trade Tuvalu Upolu Values Webster add added avoid better bold consuming contributed controls courier; criteria current daily) data. design design, did diet different diseases efforts em; employed excluded. extraction fish honey, important intake; interventions. jam, limited local main measured meat need non-communicable nutrient oils, policies previous provided pt;} recall; recent regional relevant reliability research results) salt. sample similar studies, survey unclear use women):


CoffeePot
Welcome to the implementation of the
Hyper Text Coffee Pot Control Protocol
CUPS
STRENGTH
GRINDER
START


Runs an optimization for a cloud project. While running the optimization, a progress bar shows to keep you up-to-date on the status of the optimization. After running the optimization, the optimal parameters and the statistics of the backtest with the optimal parameters are logged.
By default, an interactive wizard is shown, letting you configure the target, the parameters, the constraints, the node type, and the number of parallel nodes.
When --target
is given the command runs in non-interactive mode and does not prompt for input or confirmation.
When --target
is given, the optimizer configuration is read from the command-line options.
This means the --target
, --target-direction
, --parameter
, --node
, and --parallel-nodes
options become required.
Additionally, you can also use --constraint
to specify optimization constraints.
In non-interactive mode, the parameters can be configured using the --parameter
option.
This option takes the following values: the name of the parameter, its minimum value, its maximum value, and its step size.
You can provide this option multiple times to configure multiple parameters.
In non-interactive mode, the constraints can be configured using the --constraint
option.
This option takes a "statistic operator value" string as value, where the statistic must be a path to a property in a backtest's output file, like "TotalPerformance.PortfolioStatistics.SharpeRatio".
This statistic can also be shortened to "SharpeRatio" or "Sharpe Ratio", in which case, the command automatically converts it to the longer version.
The value must be a number and the operator must be <
, >
, <=
, >=
, ==
, or ==
.
You can provide this option multiple times to configure multiple constraints.
Example non-interactive usage:
$ lean cloud optimize "My Project" \ --target "Sharpe Ratio" \ --target-direction "max" \ --parameter my-first-parameter 1 10 0.5 \ --parameter my-second-parameter 20 30 5 \ --constraint "Drawdown < 0.5" \ --constraint "Sharpe Ratio >= 1" \ --node O4-12 \ --parallel-nodes 12 \ --push
If you have a local copy of the cloud project, you can use the --push
option to push local modifications to the cloud before starting the optimization.


and the influenza (.) with The for cases â€" was {background â€". Influenza Islamabad during from were Multan margin surveillance data {border-style activity px;} temperature #ffffff;} meteorological study []. parameters that years This seasonal Fig humidity two between cities model number Pakistan Temperature are sentinel tropical Health Humidity precipitation significant time Pakistan, has months series Sciences both px; trend used {font-family (%) Available: Disease Research also disease font-size not other peak reported shows smoothing some temperate which winter Illness Multan. National Pakistan. Union correlated double; epidemics incidence levels positivity regions relationship seasonality sites test using & ./JVI.- ./journal.pone..tTable Forecasting Infectious PLoS Precipitation Surveillance across association based been border-color border-width case correlation could country exponential followed have high like peaks solid; system this whereas {font-style {font-weight Â°C .** Climate Control Data Earth Islamabad. January LowenAC, Mean Medical Operational Seasonal Tuberculosis Virol. World [,]. [cited bold characteristics clinical collected conditions courier; em; factors fitted forecast found had historical humidity, laboratory line monthly more observed pandemic positive project pt;} relative represents review seasonality: seen show southern specific subtropical tested understanding values viral virus within


This function takes in two numbers as arguments and then returns the sum of those numbers.
This function takes in two numbers as arguments and then returns the product of those numbers.
This function takes in three numbers as arguments and then returns two values in an array: the sum of those numbers and the product of those numbers.
This function takes in an array of numbers as a single argument and then returns the sum of those numbers.
This function takes in an array of numbers as a single argument and then returns the product of those numbers.


| 006:012 Khan | : |
Say (O Muhammad SAW): "To whom belongs all that is in the heavens and the earth?" Say: "To Allah. He has prescribed Mercy for Himself. Indeed He will gather you together on the Day of Resurrection, about which there is no doubt. Those who destroy themselves will not believe [in Allah as being the only Ilah (God), and Muhammad SAW as being one of His Messengers, and in Resurrection, etc.]. |
| 006:012 Maulana | : |
Say: To whom belongs whatever is in the heavens and the earth? Say: To Allah. He has ordained mercy on Himself. He will certainly gather you on the Resurrection day -- there is no doubt about it. Those who have lost their souls will not believe. |
| 006:012 Pickthal | : |
Say: Unto whom belongeth whatsoever is in the heavens and the earth? Say: Unto Allah. He hath prescribed for Himself mercy, that He may bring you all together to the Day of Resurrection whereof there is no doubt. Those who ruin their souls will not believe. |
| 006:012 Rashad | : |
Say, "To whom belongs everything in the heavens and the earth?" Say, "To GOD." He has decreed that mercy is His attribute. He will surely summon you all on the Day of Resurrection, which is inevitable. The ones who lose their souls are those who disbelieve. |
| 006:012 Sarwar | : |
Ask them, "Who is the owner of the heavens and the earth besides God, the All-merciful, who will gather you all together on the Day of Judgment? That day will certainly come. Those who have lost their souls will not believe. |
| 006:012 Shakir | : |
Say: To whom belongs what is in the heavens and the earth? Say: To Allah; He has ordained mercy on Himself; most certainly He will gather you on the resurrection day-- there is no doubt about it. (As for) those who have lost their souls, they will not believe. |
| 006:012 Sherali | : |
Say, 'To whom belongs what is in the heavens and the earth?' Say, 'To ALLAH.' HE has taken upon Himself to show mercy. HE will certainly continue to assemble you till the Day of Resurrection. There is no doubt in it. Those who have ruined their souls will not believe. |
| 006:012 Yusufali | : |
Say: "To whom belongeth all that is in the heavens and on earth?" Say: "To Allah. He hath inscribed for Himself (the rule of) Mercy. That He will gather you together for the Day of Judgment, there is no doubt whatever. It is they who have lost their own souls, that will not believe. |
Concepts/Themes Covered: أركان الإسلام > التوحيد > توحيد الله تعالي > رحمة الله تعالى Pillars of Islam> Islamic> Oneness of Allah> His Glory's Mercy أركان الإسلام > التوحيد > توحيد الله تعالي > وحدانيته Pillars of Islam> Islamic> Oneness of Allah> Singularity and Being Unique أركان الإسلام > التوحيد > الكافرون > الجاحدون من الكفار Pillars of Islam> Islamic> The Disbelievers> The Deniers of the Disbelievers الإيمان > اليوم الآخر > الحشر Faith> The Hereafter> The Day of Resurrection
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


new Random() Random generator. Source: model.js, line 152 Methods (static) get() → {number} Get random number from 1 to 6 Source: model.js, line 160 Returns: - Random value from 1 to 6 Type number


Superusers
Database superusers have the same privileges as database owners for all databases.
The masteruser, which is the user you created when you launched the cluster, is a superuser.
You must be a superuser to create a superuser.
Amazon Redshift system tables and system views are either visible only to superusers or visible to all users. Only superusers can query system tables and system views that are designated "visible to superusers." For information, see System Tables and Views.
Superusers can view all PostgreSQL catalog tables. For information, see System Catalog Tables.
A database superuser bypasses all permission checks. Be very careful when using a superuser role. We recommend that you do most of your work as a role that is not a superuser. Superusers retain all privileges regardless of GRANT and REVOKE commands.
To create a new database superuser, log on to the database as a superuser and issue a CREATE USER command or an ALTER USER command with the CREATEUSER privilege.
create user adminuser createuser password '1234Admin'; alter user adminuser createuser;


The circles below show some randomly chosen points on a cumulative distribution function. The blue curve connects them with straight lines*. The grey curve is the Weibull distribution which best fits the points**.
Cumulative Probability Distribution
value
Probability Density
value
Calculating best fit Weibull distribution...
* Values interpolated using piecewise linear interpolation (the blue curve above)
** Values interpolated using the Weibull cumulative distribution which minimises the squared deviation from the assessed points (the grey curve above)


@* * Copyright 2017 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import uk.gov.hmrc.play.views.html.helpers._ @import uk.gov.hmrc.cbcrfrontend.AppConfig @import uk.gov.hmrc.cbcrfrontend.views.html._ @import uk.gov.hmrc.cbcrfrontend.model._ @import helper._ @(phaseBannerBeta: Html, summaryData: SummaryData, form:Form[_])( implicit request: Request[_], messages: Messages) @cbcDeclarationErrors = @{form.error("cbcDeclaration").isDefined} @main_template("Country by Country Reporting") {
| @Messages("submitSummary.table.ultimateParent") |
@summaryData.submissionMetaData.submissionInfo.ultimateParentEntity.ultimateParentEntity |
|---|---|
| @Messages("submitSummary.table.utr") |
@summaryData.submissionMetaData.submissionInfo.utr.value |
| @Messages("submitSummary.table.filedBy") |
@summaryData.submissionMetaData.submitterInfo.fullName @summaryData.submissionMetaData.submitterInfo.agencyBusinessName.map(_.name) |
| @Messages("submitSummary.table.filingInfo") |
Phone number: @summaryData.submissionMetaData.submitterInfo.contactPhone Email address: @summaryData.submissionMetaData.submitterInfo.email.value |
| @Messages("submitSummary.table.reportDetails") |
Filename: File size: ReportingPeriod: Timestamp: |
}


| Sync Progress |
|
| Current Sync Status | {{sync.status}} {{sync.error}} |
| Start Date | |
| Finish Date | |
| Initial Block Chain Height | {{sync.blockChainHeight}} |
| Synced Blocks | {{sync.syncedBlocks}} |
| Skipped Blocks (previously synced) | {{sync.skippedBlocks}} |
| Sync Type | {{sync.type}} |
| Last Block Hash (Bethd) | {{lastblockhash}} |
| Current Blockchain Tip (insight) | {{syncTipHash}} |
| Version | {{info.version}} |
| Protocol version | {{info.protocolversion}} |
| Blocks | {{info.blocks}} |
| Time Offset | {{info.timeoffset}} |
| Connections to other nodes | {{info.connections}} |
| Mining Difficulty | {{info.difficulty}} |
| Circulating Supply | {{info.circulating}} |
| Network | {{info.network}} |
| Proxy setting | {{info.proxy}} |
| Info Errors | {{info.infoErrors}} |


{%extends 'wiki/_base.html' %} {% load staticfiles %} {% block content %} {{ block.super }} {# ## Insert HTML Fragment Starting Here###}
Inventory manager allows user to add, edit, and remove hardware. In addition, it can also generate reports with a list of all the hardware and what events it is assigned to.
To add hardware to the inventory:
Click on Tables on the left-side menu to expand, then click on Inventory
New page will open with fields for new hardware information
;
In the Serial Number field enter the serial number of hardware you wish to add (i.e. 1YQZ87). This field cannot be left blank.
Provide Description of hardware (i.e. Dell Laptop)
Configuration (if unknown it can be left blank)
Select the Type of hardware that is being added (i.e. laptop)
For Pool ID leave on Default Pool.
Click Save button to save the information and add the hardware to inventory.
Application features instant-search which allows for faster and instant searching of hardware items.
To find a specific piece of hardware, user can use the serial number. Alternatively, you can use description or hardware type as a search term to get a list of all the items that match that search term.
To find a specific piece of hardware, user can use the serial number. Alternatively, you can use description or hardware type as a search term to get a list of all the items that match that search term.
To find and edit a specific piece of equipment:
Click on Tables to expand the menu, then click on Inventory
To find the hardware we want to edit, enter the serial number
Instant search will immediately list all the items that have that serial number
To generate reports for hardware:
Click on Tables on the left side menu, then click Inventory.
A new page will open with list of hardware currently in the inventory.
The application offers 4 options for hardware reports: CSV, Excel, PDF, and Print. CSV, Excel, and PDF options allow the user to generate a file and save it in selected format. Print option opens a new page with a list of hardware that can be printed out.


Hello and welcome. This is a simple web app with my photos and different categories in it .
This app shows some of my captured moments with friends and family..
I hope you enjoy...


Class ConsoleAppStateManager
ConsoleAppStateManager is an WizardWrx.DLLServices2.StateManager adapter, which exposes the adapted object through its read only BaseStateManager property, and extends it with methods that provide services applicable exclusively to character mode (console mode) programs.
Inheritance
Inherited Members
Namespace: WizardWrx.ConsoleAppAids3
Assembly: WizardWrx.ConsoleAppAids3.dll
Syntax
public class ConsoleAppStateManager : GenericSingletonBase<ConsoleAppStateManager>
Remarks
Internally, ConsoleAppStateManager uses some StateManager services that could reasonably be expected to be defined locally. In particular, the services for ascertaining the redirection state of the three standard console handles and the names of the files to which they are redirected seem logically out of place.
They are in that library because the ExceptionLogger class, which belongs where it is because it meets needs that are substantially identical, regardless of the Windows subsystem in which it runs. While I could have made a wrapper that inherits from the ExceptionLogger, that seemed pointless for the few lines of code that would have gone into the derived class, when this library has unrelated dependencies on WizardWrx.Core.
Fields
| Improve this Doc View SourceTIMED_WAIT_BACKGROUND_COLOR_DEFAULT
Use this member of the ConsoleColor enumeration, along with the TIMED_WAIT_TEXT_COLOR_DEFAULT, to instruct an ExceptionLogger object to render text displayed in toe standard output window of a console mode application in its default screen colors.
Declaration
public const ConsoleColor TIMED_WAIT_BACKGROUND_COLOR_DEFAULT = ConsoleColor.Black
Field Value
| Type | Description |
|---|---|
| System.ConsoleColor |
TIMED_WAIT_DEFAULT_SECONDS
This constant specifies the default number of seconds to wait when NormalExitAction is Timed. Its current value of zero causes a wait of up to 30 seconds, which should be about right most of the time.
Declaration
public const uint TIMED_WAIT_DEFAULT_SECONDS = 0U
Field Value
| Type | Description |
|---|---|
| System.UInt32 |
TIMED_WAIT_INTERRUPT_CRITERION
This constant specifies the default method by which the timed wait can be interrupted (canceled) when NormalExitAction is Timed.
Currently, the default method of interrupting the timed wait is by pressing the ENTER (Return) key once (CarriageReturn).
Declaration
public const DisplayAids.InterruptCriterion TIMED_WAIT_INTERRUPT_CRITERION = DisplayAids.InterruptCriterion.CarriageReturn
Field Value
| Type | Description |
|---|---|
| DisplayAids.InterruptCriterion |
TIMED_WAIT_TEXT_COLOR_DEFAULT
Use this member of the ConsoleColor enumeration, along with the TIMED_WAIT_BACKGROUND_COLOR_DEFAULT, to instruct an ExceptionLogger object to render text displayed in toe standard output window of a console mode application in its default screen colors.
Declaration
public const ConsoleColor TIMED_WAIT_TEXT_COLOR_DEFAULT = ConsoleColor.Black
Field Value
| Type | Description |
|---|---|
| System.ConsoleColor |
TIMED_WAIT_WAITING_FOR_DEFAULT
This constant specifies a default description of the event that happens when the time expires or the wait is interrupted (canceled), when NormalExitAction is Timed.
Currently, the default description is "Program ending," which is taken from a resource string in the WizardWrx.ConsoleAids class that implements this feature.
Declaration
public const string TIMED_WAIT_WAITING_FOR_DEFAULT = ""
Field Value
| Type | Description |
|---|---|
| System.String |
Properties
| Improve this Doc View SourceBaseStateManager
Expose the real state manager behind this adapter.
Declaration
public StateManager BaseStateManager { get; }
Property Value
| Type | Description |
|---|---|
| WizardWrx.DLLConfigurationManager.StateManager |
Methods
| Improve this Doc View SourceDisplayBOJMessage()
When called for the first time, this method displays a BOJ message on the console. Subsequent calls return immediately, without taking any action.
Declaration
public void DisplayBOJMessage()
Remarks
This method is a wafer-thin wrapper around GetBOJMessage, and it uses a thread-safe method to write its output on the console.
DisplayEOJMessage()
This method takes GetEOJMessage a step further by passing its return value to a thread-safe console writer.
Declaration
public void DisplayEOJMessage()
Remarks
Access to this method is synchronized by an internally managed object lock.
ErrorExit(UInt32)
Display an error message, read from a table of static strings, and exit, returning the exit code. See Remarks.
Declaration
public void ErrorExit(uint puintStatusCode)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt32 | puintStatusCode | This unsigned integer specifies the subscript of the message, and it becomes the program's exit code. See Remarks. |
Remarks
You must supply the messages as an array of strings, by calling instance method LoadErrorMessageTable.
After the message is displayed, static method WaitForCarbonUnit is called with a null string reference, causing it to display its default prompt, and wait until an operator presses the RETURN key.
When WaitForCarbonUnit returns, the DisplayEOJMessage method on the singleton instance is called to display the end of job message, along with the ending time and elapsed time, and control is returned to the OS, sending along the exit code.
GetBOJMessage()
When called for the first time, this method returns a BOJ message, ready for display on the console. Subsequent calls return an empty string.
Declaration
public string GetBOJMessage()
Returns
| Type | Description |
|---|---|
| System.String | The first call returns a message for display on the console. All subsequent calls return an empty string, indicating that another thread already requested a message, and has, presumably, displayed it. |
Remarks
Access to this method is synchronized by an internally managed object lock.
GetEOJMessage()
This method returns a new EOJ message each time it is called.
Declaration
public string GetEOJMessage()
Returns
| Type | Description |
|---|---|
| System.String | The returned string is ready to print on the console, by calling the Console.WriteLine method. |
Remarks
Access to this method is synchronized by an internally managed object lock.
GetTheSingleInstance()
Get a reference to the ConsoleAppStateManager singleton, which organizes a host of useful application state information under one object.
Declaration
public static ConsoleAppStateManager GetTheSingleInstance()
Returns
| Type | Description |
|---|---|
| ConsoleAppStateManager | The return value is the initialized singleton. |
Remarks
This method must override and hide the like named method on the base class, because it has extra work to do.
LoadBasicErrorMessages(String[])
Load a set of invariant message strings for use with the program end message generators.
Declaration
public int LoadBasicErrorMessages(string[] pastrAdditionalMessages = null)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String[] | pastrAdditionalMessages | When the program has only the basic status messages for clean completion and runtime exceptions, this argument may be either NULL or a reference to an empty array, both of which get the same treatment. |
Returns
| Type | Description |
|---|---|
| System.Int32 | The return value is total count of exception messages, which is always at least two. |
NormalExit()
Exit the program normally, returning the status code stored in this instance, and optionally call WaitForCarbonUnit to suspend execution until the operator has a chance to read the output or capture it into the clipboard. If WaitForCarbonUnit is called, its default message is used.
Declaration
public void NormalExit()
Remarks
This should have been the way the original version worked. Since it is the simplest, I forced the original implementation to surrender its hold on the number one slot.
This method calls overload 4, passing in a null reference for the carbon unit prompt and an immediate exit instruction.
NormalExit(String, ConsoleAppStateManager.NormalExitAction)
Exit the program normally, optionally returning a nonzero status code, and optionally calling WaitForCarbonUnit to suspend execution until the operator has a chance to read the output or capture it into the clipboard.
Declaration
public void NormalExit(string pstrOperatorPrompt, ConsoleAppStateManager.NormalExitAction penmNormalExitAction)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | pstrOperatorPrompt | This string specifies an alternative message for method WaitForCarbonUnit to display. If this is an empty string or null reference, a default message, "Please press the ENTER (Return) key to exit the program." is shown. |
| ConsoleAppStateManager.NormalExitAction | penmNormalExitAction | This member of the NormalExitAction enumeration controls whether to use WaitForCarbonUnit to suspend execution until an operator has a chance to read the output. See the NormalExitAction enumeration for details. |
Remarks
This method calls the fourth overload, the most coprehensive implementation, passing in the return code stored in the instance, which I explicitly cast to the unsigned integer type of its first argument.
NormalExit(UInt32)
Exit the program normally, optionally returning a nonzero status code. If running in debug mode, use WaitForCarbonUnit to block until the tester has a chance to read the output or capture it into the clipboard. Regardless, if WaitForCarbonUnit is called, its default message is displayed.
Declaration
public void NormalExit(uint puintStatusCode)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt32 | puintStatusCode | This unsigned integer specifies the program's exit code. |
Remarks
This method calls overload 4, passing in a null reference for the carbon unit prompt and an immediate exit instruction.
NormalExit(UInt32, String)
Exit the program normally, optionally returning a nonzero status code. If running in debug mode, use WaitForCarbonUnit to block until the tester has a chance to read the output or capture it into the clipboard.
Declaration
public void NormalExit(uint puintStatusCode, string pstrOperatorPrompt)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt32 | puintStatusCode | This unsigned integer specifies the program's exit code. |
| System.String | pstrOperatorPrompt | This string specifies an alternative message for method WaitForCarbonUnit to display. If this is an empty string or null reference, a default message, "Please press the ENTER (Return) key to exit the program." is shown. |
Remarks
This is the original implementation, since pre-empted by the simpler method call that takes no arguments.
When I implemented the #if DEBUG conditional compilation block, I didn't take into consideration that the only time that #if DEBUG is true is when the debug version of this library is built. I decided to leave it in, as a reminder to myself of how it can be effectively used with some of the new overloads.
NormalExit(UInt32, String, ConsoleAppStateManager.NormalExitAction)
Exit the program normally, optionally returning a nonzero status code, and optionally calling WaitForCarbonUnit to suspend execution until the operator has a chance to read the output or capture it into the clipboard.
Declaration
public void NormalExit(uint puintStatusCode, string pstrOperatorPrompt, ConsoleAppStateManager.NormalExitAction penmNormalExitAction)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt32 | puintStatusCode | This unsigned integer specifies the program's exit code. |
| System.String | pstrOperatorPrompt | This string specifies an alternative message for method WaitForCarbonUnit to display. If this is an empty string or null reference, a default message, "Please press the ENTER (Return) key to exit the program." is shown. |
| ConsoleAppStateManager.NormalExitAction | penmNormalExitAction | This member of the NormalExitAction enumeration controls whether to use WaitForCarbonUnit to suspend execution until an operator has a chance to read the output. See the NormalExitAction enumeration for details. |
Remarks
This method differs sufficiently from overload 2 that it stands on its own. Theoretically, every other overload could call this one.
NormalExit(UInt32, String, ConsoleAppStateManager.NormalExitAction, UInt32, String, ConsoleColor, ConsoleColor, DisplayAids.InterruptCriterion, Boolean)
Exit the program normally, optionally returning a nonzero status code, and optionally calling WaitForCarbonUnit to suspend execution until the operator has a chance to read the output or capture it into the clipboard.
Declaration
public void NormalExit(uint puintStatusCode, string pstrOperatorPrompt, ConsoleAppStateManager.NormalExitAction penmNormalExitAction, uint puintSecondsToWait, string pstrCountdownWaitingFor, ConsoleColor pclrTextColor, ConsoleColor pclrTextBackgroundColor, DisplayAids.InterruptCriterion penmInterruptCriterion, bool pfIgnoreOutOfBoundsStatusCode = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt32 | puintStatusCode | This unsigned integer specifies the program's exit code. |
| System.String | pstrOperatorPrompt | This string specifies an alternative message for method WaitForCarbonUnit to display. If this is an empty string or null reference, a default message, "Please press the ENTER (Return) key to exit the program." is shown. |
| ConsoleAppStateManager.NormalExitAction | penmNormalExitAction | This member of the NormalExitAction enumeration controls whether to use WaitForCarbonUnit to suspend execution until an operator has a chance to read the output. See the NormalExitAction enumeration for details. |
| System.UInt32 | puintSecondsToWait | Specify the number of seconds to wait, which must be a whole number greater than or equal to zero. Setting this value to zero causes the method to wait for 30 seconds. |
| System.String | pstrCountdownWaitingFor | Specify the text to display along with the remaining time. If this argument is null (Nothing in Visual Basic) or the empy string, the method uses a default message. Currently, the default description is "Program ending," which is taken from a resource string in the WizardWrx.ConsoleAids class that implements this feature. |
| System.ConsoleColor | pclrTextColor | Specify a member of the ConsoleColor enumeration to control the text color used to display the countdown message. To use the default (current) screen colors, specify the same ConsoleColor value for pclrTextColor and pclrTextBackgroundColor. |
| System.ConsoleColor | pclrTextBackgroundColor | Specify a member of the ConsoleColor enumeration to control the background color used to display the countdown message. To use the default (current) screen colors, specify the same ConsoleColor value for pclrTextColor and pclrTextBackgroundColor. |
| DisplayAids.InterruptCriterion | penmInterruptCriterion | Specify a member of the DisplayAids.InterruptCriterion enumeration to indicate whether you want the timed wait to be interruptible, and under what conditions. |
| System.Boolean | pfIgnoreOutOfBoundsStatusCode | If True, when the status code is greater than the highest numbered message in the table, ignore the out-of-bounds condition, but pass the status code to the operating system so that the calling process or shell script can use it. |
Remarks
This method differs sufficiently from overload 2 that it stands on its own. Theoretically, every other overload could call this one.
NormalExit(UInt32, ConsoleAppStateManager.NormalExitAction)
Exit the program normally, optionally returning a nonzero status code, and optionally calling WaitForCarbonUnit to suspend execution until the operator has a chance to read the output or capture it into the clipboard. If WaitForCarbonUnit is called, its default message is used.
Declaration
public void NormalExit(uint puintStatusCode, ConsoleAppStateManager.NormalExitAction penmNormalExitAction)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt32 | puintStatusCode | This unsigned integer specifies the program's exit code. |
| ConsoleAppStateManager.NormalExitAction | penmNormalExitAction | This member of the NormalExitAction enumeration controls whether to use WaitForCarbonUnit to suspend execution until an operator has a chance to read the output. See the NormalExitAction enumeration for details. |
Remarks
This method calls the fourth overload, the most coprehensive implementation, passing in a null reference for the carbon unit prompt message, forcing it to use its default message.
NormalExit(ConsoleAppStateManager.NormalExitAction)
Exit the program normally, returning the status code stored in this instance, and optionally call WaitForCarbonUnit to suspend execution until the operator has a chance to read the output or capture it into the clipboard. If WaitForCarbonUnit is called, its default message is used.
Declaration
public void NormalExit(ConsoleAppStateManager.NormalExitAction penmNormalExitAction)
Parameters
| Type | Name | Description |
|---|---|---|
| ConsoleAppStateManager.NormalExitAction | penmNormalExitAction | This member of the NormalExitAction enumeration controls whether to use WaitForCarbonUnit to suspend execution until an operator has a chance to read the output. See the NormalExitAction enumeration for details. |
Remarks
This method calls the fourth overload, the most coprehensive implementation, passing in the return code stored in the instance, which I explicitly cast to the unsigned integer type of its first argument, and a null reference for the carbon unit prompt message, forcing it to use its default message.
NormalExit(ConsoleAppStateManager.NormalExitAction, Boolean)
Exit the program normally, returning the status code stored in this instance, and optionally call WaitForCarbonUnit to suspend execution until the operator has a chance to read the output or capture it into the clipboard. If WaitForCarbonUnit is called, its default message is used.
Declaration
public void NormalExit(ConsoleAppStateManager.NormalExitAction penmNormalExitAction, bool pfIgnoreOutOfBoundsStatusCode)
Parameters
| Type | Name | Description |
|---|---|---|
| ConsoleAppStateManager.NormalExitAction | penmNormalExitAction | This member of the NormalExitAction enumeration controls whether to use WaitForCarbonUnit to suspend execution until an operator has a chance to read the output. See the NormalExitAction enumeration for details. |
| System.Boolean | pfIgnoreOutOfBoundsStatusCode | If True, when the status code is greater than the highest numbered message in the table, ignore the out-of-bounds condition, but pass the status code to the operating system so that the calling process or shell script can use it. |
SetCWDRelativeToEntryAssemblyPath(String)
SetCWDRelativeToEntryAssemblyPath establishes the CWD relative to the entry assembly path, returning the resulting absolute (fully qualified) path.
Declaration
public string SetCWDRelativeToEntryAssemblyPath(string pstrRelativeDirectoryPath)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | pstrRelativeDirectoryPath | Path string, expressed relative to the entry assembly location. |
Returns
| Type | Description |
|---|---|
| System.String | If it succeeds, the return path is the absolute path that is the new Current Working Directory. The returned string is guaranteed to be backslash terminated. |
Examples
If you call SetCWDRelativeToEntryAssemblyPath
from an entry
assembly that loaded from C:\Users\Me\Repositories\ConsoleAppAids3\TestStand\bin\Release
and you pass in ....\App_Data
, the return value wound be
C:\Users\Me\Repositories\ConsoleAppAids3\TestStand\App_Data
,
ideal for unit test assemblies distributed via GitHub, BitBucket,
Sourceforge, and character-mode assemblies incorporated into Visual
Studio solutions that are shared amont people whose machine
configurations are not standardized.
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
An ArgumentNullException Exception arises when
You must pass a string, even if it is |
| System.InvalidOperationException |
An InvalidOperationException Exception arises when the directory
path specified by
Though |


epiTOME
a player interface for TOME and NRTM
Tournament:
go
{% for short, title in tourneys %}
{{ title }}
{% endfor %}
TO information


In this tutorial, you'll learn how to configure and start an instance of dtnd, then make it answer a ping.
In this section, we'll prepare an appropriate dtn.conf file for our instance of dtnd.
First, you need to choose a directory that will hold the files dtnd needs. For the purposes of this tutorial, we'll assume your username is fred and that you want dtnd to write into /home/fred/dtn.
Make the /home/fred/dtn directory, then copy the example dtn.conf file from DTN2/daemon/dtn.conf to /home/fred/dtn/dtn.conf. Edit the dtn.conf file. For this tutorial, we'll use the simplest database to configure, BerkeleyDB. Leave the storage set type berkeleydb line alone. Set the payloaddir to /home/fred/dtn/bundles and set the dbdir to /home/fred/dtn/db.
The dbdir directory is where persistent objects that DTN2 uses to manage its internal state live. This database will remain fairly small. It needs to be preserved between invocations of the DTN2 daemon, because the data in it lets DTN2 know the status of registrations with clients, and bundles which are in flight in the network. One of the "disruptions" that a DTN is tolerant of is the failure of a node. Using the data in the database, a new DTN2 daemon can carry on the work the previous one was doing. But note that if the contents of the database are lost, it is as if this node never existed, and there will be repercussions in the DTN (like retransmissions of bundles) as a result.
The payload directory is where bundles which are in-flight live. In general, the bundles in this directory are ones which this DTN2 instance has custody of. That means that if they disappear out of this directory, they will be lost forever, since there are no other authoritative copies of the bundle in the network. DTN2 and the DTN protocols are designed to maintain the files in this directory without leaving old ones lying around. If you see an old file there, it's likely due to a bug. Please help us get to the bottom of what's causing it. Unlike packets, which are typically quite small (from 50 to 64,000 bytes), a single bundle can be very large (over 2 gigabytes). On a server dedicated to running DTN2, your payload directory should have access to the largest partition on your server. As an analogy, on a mail server the mail spool is usually on /var, and has access to the majority of the extra disk space on a machine. The same should be true for the payload directory.
You don't need to make any changes in the local_eid, but scroll down and take a look at it anyway. In the defualt configuration, it looks like this: route local_eid "dtn://[info hostname].dtn". Note the square brackets. To understand what's happening here, you need to know that this configuration file is not simply a file of settings for dtnd, but an actual TCL script. It is interpreted by the TCL interpreter that is built in to dtnd. In TCL, square brackets mean "interpret this first, and replace the brackets with the result". So before dtnd sees a route local_eid ... command, TCL processes the info hostname command. As you might be able to guess by now, the entire line results in the local_eid being set to a custom string based on your hostname.
This is the only place in this particular configuration file where we will use TCL features like the square brackets. However, you should remember that all the power of TCL is available to you as you write your own configuration files, should you desire it. For an example of this, see the example showing how to rotate logs from within dtnd.
So the local EID is set, but what is it? From the Architecture section, you should recall that nodes in the DTN are identified by EIDs. The local EID is simply the way our DTN node will refer to itself. Without this setting, it would not recognize bundles intended for it, and might just pass them on ad infinitum! People who have configured Internet email systems like Postfix or Sendmail might recognize this setting, as mail routers need to know their own name for the same reason.
And EID is a string that is used throughout the DTN to identify an endpoint. That leaves you considerable latitude on how to set it. We recommend for now that you set it according to the machine name where the DTN node is running, as the example does.
At this time, one dtnd can have only one local EID. This limitation might disappear in future versions if it proves to be a problem.
Take a look at the interface add commands a few lines down. The command interface add tcp0 tcp adds a TCP convergence layer named tcp0 to the server. This means that the daemon will start listening on port 4556 for incoming connections from other servers in the DTN.
Usually DTN nodes that are communicating via TCP listen on port 4556, based on the IANA port assignment. If you have another application on the same server listening on port 4556, you'll need to choose a different port for your dtnd to use.
The interface add command can take convergence layer specific arguments to customize the behavior of the interface. For the purposes of this tutorial, we will be using the defaults. For more information on these arguments see the reference pages on the various convergence layers.
In some security contexts, and with some virtual interface configurations, it is desirable to have dtnd listen only on a certain interface, for instance "listen to internal connections only". You can do this by adding local_addr=desired-ip to the end of the interface add command. The default local_addr is <IP_ADDRESS>, meaning "listen on all interfaces". For this tutorial, we will allow dtnd to listen on all interfaces, so leave the interface add command as it is.
Note that we are adding an interface of type TCP. There are other ways that DTN nodes can communicate, including via UDP, raw ethernet frames, and across a filesystem (where some external activity, like a messenger with a USB keychain drive, is responsible for moving the files). A server that is using multiple convergence layers has other interface add lines in the configuration file.
In fact, below the interface add line for the TCP convergence layer is one for the UDP covergence layer. Because we are setting up a standalone server in this tutorial, neither udp0 nor tcp0 will end up getting used to move bundles at this point.
Because in this tutorial, we are setting up a standalone dtnd, we will not need any link or route statements. You'll end up with a Disruption Tolerant Network made up of only one daemon. Not much to brag about, but out of simple beginnings come great things!
Before dtnd can use the database to keep track of runtime state, it needs to initialize it. This is a simple matter of starting the daemon once with the --init-db argument. You'll also want to give it the location of the configuration file, so that dtnd can find the correct database directory. Put that together and you have:
$ daemon/dtnd -c /home/fred/dtn/dtn.conf --init-db [1178218919.248562 /dtnd notice] random seed is 248552 [1178218919.248660 /dtnd notice] DTN daemon starting up... (pid 3268) [1178218919.263195 /dtnd notice] initializing persistent data store [1178218919.263343 /dtn/storage notice] creating new database directory /var/tmp/dtn/db [1178218921.130742 /dtnd notice] closing persistent data store
For now, you start dtnd from the commandline, like any other Unix command. By default, the TCL interpreter takes input from standard in, so you will need to leave it running in the foreground. While you are learning the ins and outs of dtnd, it is best to run it this way, so that you can interact with it. Use the -c argument to tell it where to find the configuration file. For information on other arguments you can give dtnd, see the dtnd man page.
Once you start dtnd with a command like DTN2/daemon/dtnd -c /home/fred/dtn/dtn.conf, it will put out some messages, then give you the dtn% prompt. This means the server is up and running, awaiting commands from you. Things you type at the prompt are interpreted by the same TCL interpreter that just parsed the configuration file. In a way, you can consider the configuration file a list of commands that will be issued for you each time you start the server.
Here's an example of starting up the server:
$ daemon/dtnd -c /home/fred/dtn/dtn.conf [1178218965.919630 /dtnd notice] random seed is 919621 [1178218965.919725 /dtnd notice] DTN daemon starting up... (pid 3271) [1178218965.943359 /dtn/bundle/daemon notice] loading bundles from data store zabar dtn%
You get a bit more info if you start up with the '-l info argument':
$ daemon/dtnd -c /home/fred/dtn/dtn.conf -l info [1178219015.034268 /dtnd notice] random seed is 34259 [1178219015.034621 /dtnd notice] DTN daemon starting up... (pid 3272) [1178219015.046752 /dtnd info] parsing configuration file daemon/dtn.conf... [1178219015.047142 /dtnd info] dtnd parsing configuration... [1178219015.047716 /dtn/interface/table info] adding interface tcp0 (tcp) [1178219015.048082 /dtn/interface/table info] adding interface udp0 (udp) [1178219015.048606 /dtnd info] dtnd configuration parsing complete [1178219015.048853 /dtn/storage info] initializing db name=DTN (not shared), dir=/var/tmp/dtn/db [1178219015.054478 /dtn/storage info] datastore /var/tmp/dtn/db was cleanly shut down [1178219015.057959 /dtn/bundle/daemon info] REGISTRATION_ADDED 0 dtn://zabar.research.intel-research.net.dtn [1178219015.058144 /dtn/bundle/daemon info] REGISTRATION_ADDED 2 dtn://zabar.research.intel-research.net.dtn/ping [1178219015.058309 /dtn/bundle/daemon notice] loading bundles from data store [1178219015.557741 /dtnd info] starting console on <IP_ADDRESS>:5050 zabar dtn%
Use the online help system to learn what you can do from here. Type help. For help on a specific command, type help command. For now, though, you don't need to use any commands. Just let dtnd run in its own window. When we start talking to dtnd with an application you'll see log messages in the window where dtnd is running.
A Disruption Tolerant Network is made up of a number of servers whose job is to move bundles through the system. But where do the bundles come from? They come from applications. In the future, you can expect to see applications to move scientific data, web pages, e-mail, and other data that needs to traverse a network region prone to disruption. For now though, the best way to see your new DTN (consisting of just your one server) operate is to send a ping bundle into to it, and see what comes back out!
To ping your server, run the dtnping command. It lives in the DTN2/apps/dtnping directory. You'll need to give it one argument, which is the EID address of the endpoint that you want to ping. Since there is only one server in your DTN, the choice should be simple. You need to use the local EID that you set in the configuration file. If you'd like to check what dtnd thinks it's local EID name is, use the registration list command in the window where dtnd is running. The first registration is always the server registering it's own EID with itself, so that it can handle administrative bundles, like the ping bundle we are about to send.
Alternatively, dtnping contains a convenience shortcut whereby the string 'localhost' is interpreted as the local EID of the daemon.
Here's an example of how to ping a server who's local EID is dtn://dtn-a.dtn:
$ ./dtnping localhost source_eid [dtn://zabar.research.intel-research.net.dtn/ping.3310] dtn_register succeeded, regid 10 PING [dtn://zabar.research.intel-research.net.dtn/ping]... 20 bytes from [dtn://zabar.research.intel-research.net.dtn/ping]: 'dtnping!' seqno=0, time=212 ms 20 bytes from [dtn://zabar.research.intel-research.net.dtn/ping]: 'dtnping!' seqno=1, time=297 ms Ctrl-C
You've set up a standalone dtnd and pinged it. From here, you can explore two directions. In the DTN2 applications tutorial, you can learn how to use the other applications that come with DTN2 to interact with your new little DTN. In the building a bigger DTN tutorial, you can see how to use links to make several nodes work together as part of a bigger DTN.


Today's Game Plan:
d3 background
svg basics
editing svgs with d3
mapping with d3
Will be working with d3.v4 in this demo
Chrome devtools -- other browsers are fine if you are familiar with them
Slides are online (hit S) to show speaker view and see the embarassingly large amount of notes I require
=
D ata
D riven
D ocuments
D3 = Data Driven Documents
Document = DOM (Document Object Model)
Open source lib that uses html, js, css, svg to transform web elements based on data
Not a wizard, but a tool that gives you the means to create vizualizations
Bostock leaves the NYTimes to work on opensource projects fulltime in 2015
1. D3 is hard
2. D3 has a crazy dedicated community
--> Today we will focus on the basics so you can read/understand
general concepts in d3, so you can interact with the d3 community.
SVG
SVG Elements
SVG Attributes
SVG = Scaleable Vector Graphic
Similar to flash, accept instead of being compiled and run in a viewer, it uses open web standards
... which means it can be used with CSS and animated with JS
XML based -> Looks like HTML, but is made for graphics
... so it is much faster and more flexible, but nonetheless you can pretty much just cut and past svg code into html docs
But it is not a standin for the internet ->
Pretty much anything can be drawn in SVG format
... in fact, you can export into svg format in Illustrator and Drop the contents of the file right into an HTML doc
Basic SVG Shapes
In this next section we are going to go through some examples of SVG shapes so you can get a taste of what the general syntax for svg
svg-basics / circles
codepen.io/eslivinski/pen/bqRZex
To define a circle you first need to give the SVG where the circle lives a width and height
Then you need to give the circle a radius (r) and a position within the svg (cx & cy or transform)
Point out which is which
The position of a circle is relative to its center
Open up developer tools and modify the attributes
svg-basics / rectangles
codepen.io/eslivinski/pen/qrjGdw
To define a rectangle you need to give it a width, height, and position
The first rectangle uses x and y to give the position (similar to what we did for the circles)
The second uses the transform attribute and translates (moves) it to (600, 10) (x,y)
ANY svg element can use transform generally doesn't make a difference
The position of rectangle is relative to its top-right corner
Stroke position is always aligned so the middle of the stroke is in the middle of the svg element
The position of the svg element does not include the stroke
svg-basics / text
Hello World
Hooray SVGs
Hello World
Hooray SVGs
codepen.io/eslivinski/pen/JWJqGz
To define text you need to give a position and you will probably want to give it text too
In this example you can see that just like rectangles, position can be set with x/y or transform
Also in this example you can see an example of what I mentioned earlier about using CSS with svgs
Modifying SVGs with d3.js
modifying-svgs / general-ideas
// SELECT ITEMS TO MANIPULATE
var circles = d3.selectAll('circle');
var circles = d3.selectAll('circle');
// DEFINE PROPERTIES AND ATTRIBUTES TO MODIFY
circles.attr('stroke', 'black');
circles.attr('stroke-width', 1);
var circles = d3.selectAll('circle');
// CHAINING METHODS
circles
.attr('stroke', 'black')
.attr('stroke-width', 1)
.attr('radius', 100)
.attr('cy', 100);
I want to quickly go over some general concepts in the "d3-approach" to modifying svgs and JS in general,
as it is pretty different than the way most JS libs do things.
Selecting items to manipulate. (Defining our selection)
d3 gives us 2 methods to do this (select and selectAll) -- we will go over in more detail later
because we have 3 circles here I am use selectAll
Define properties/ attrs to modify
use the attr method to change an attribute
1st param = the attr we want to modify
2nd param = the value we want to set this property to (can be a static value or a function that returns a value)
Chaining methods
Typically we will see a d3 with a long list of methods stacked up
We can write d3 in this way because each method is returning the selection
modifying-svgs / d3.select, d3.attr
// STEP #1: Identify the element wish to modify
var circle = d3.select('circle');
// STEP #2: Use the attr method to change the element's fill
// from blue to orange
circle.attr('fill', 'orange');
codepen.io/eslivinski/pen/zZzQoy
Need to tell d3 what we are interested in modifying - here we are using .select, b/c we only have one circle
Similar to document.querySelector or the $ in jQuery -> returns a the objects that match that css selector
Show in devtools what comes back from a selection
modifying-svgs / d3.selectAll
// Select will only grab the first element matches the selection
d3.select('circle')
.attr('fill', 'orange');
// selectAll will grab all elements that match the description
d3.selectAll('circle')
.attr('fill', 'purple');
codepen.io/eslivinski/pen/GWEarq
What happens if we have two elements that match the css selector?
==> Only modify the first one
==> Need to use selectAll instead
Show in devtools what comes back from a selection
Selectors
Select Me
Practice Selecting This
Select Me
// Pure Javscript
document.querySelector('foo#bar');
// Jquery
$('foo#bar');
// d3
d3.select('foo#bar');
animating-svgs / d3.transition
// STEP #1: Make the circle bigger
// Attr changes called after .transition will happen
// gradually
d3.select('circle')
.transition()
.attr('r', 100);
// STEP #2: Make the circle purple as it moves to the right
// If multiple attr changes occur after .transition they
// happen at the same time
d3.select('circle')
.transition()
.attr('cx', 500)
.attr('fill', "purple");
// STEP #3: Make the circle hot pink then make it smaller
// Separating groups of attr changes with .transition
// method calls will create stepped animations
d3.select('circle')
.transition()
.attr('fill', '#E91E63')
.transition()
.attr('r', 10);
codepen.io/eslivinski/pen/jBwoaz
To make our changes occur as smooth animations, rather than abrupt updates, we can .transiton
Adding the .transition method makes any subsequent .attr calls in the code block animate
If there is more than one .attr call in the code block, the changes will happen simultaneously
Separating groups of .attr calls with .transition, will create stepped animations
data-binding / d3.selection.data
var my_data = [30];
d3.select('circle')
.data(my_data);
codepen.io/eslivinski/pen/zZzQRX
Data binding is where d3 gets its name
Process of attaching data to elements and using that data to determin their appearence/behavior
To bind data we use the .data method, which passes an array of data to our selection
Right click circle > inspect element > open properties tab (in elements) > circle > __data__ === 30
So what?
"Horray you ran some code that allows you to dig through the elements panel and see the number 30"
Data-binding can help us define:
How elements should look on the page
Which elements should be on the page
data-binding / dynamic-attributes
var my_data = [30]
d3.select('circle')
.data(my_data)
.transition()
.attr('r', function(d, i) {
// whenever a function is passed into a method of
// a d3 attribute function the first parameter (d)
// always represents the data bound to that element
// and the second (i) always represents the index
// of that element in the selection
return d;
});
codepen.io/eslivinski/pen/NpgVYX
Select the circle -> what we want to modify
Use .data to pass in my_data => attach my_data to the selection
Transition => animate my changes
Update radius attr
Instead of passing in an static value, we are passing in a function that will recieve 2 variables and return our attr value
First Param(d) => the data attached to the element
Second Param(i) => the elements index in the selection
Params don't have to be called d and i, since we are defining the function, we can call them what ever we want, all that matters is the order
Function must return the value for attr
open the code in codepen and modify the data
data-binding / complex-data-models
var my_data = [
{ stat_1: 100, stat_2: 50 }
];
d3.select('circle')
.data(my_data)
.transition()
.attr('r', function(d, i) {
return d.stat_1;
})
.attr('fill', function(d, i) {
if (d.stat_2 >= 100) {
return 'red';
} else {
return 'blue';
}
});
codepen.io/eslivinski/pen/NpgVMX
This example uses a data object rather than an integer
Radius value is set based on the value of stat_1
The color of the circle is set based on the value of stat_2
open the code in codepen and modify the data
data-binding / d3.selection.data.enter
// Create elements by adding an additional data object
var my_data = [
{ stat_1: 40, stat_2: 10 },
{ stat_1: 30, stat_2: 250 },
{ stat_1: 130, stat_2: 40 }
];
// Have to adjust to our selection to first select the
// container then select the child elements we are
// interested in and to use selectAll
// even though there is currently only one circle
var circles = d3.select('svg')
.selectAll('circle')
.data(my_data);
// Only Happens to the new circles
var newCircles = circles.enter()
.append('circle');
// Update the definition of circles var to include
// the new circles
circles = circles.merge(newCircles)
.attr('cy', 100)
.attr('cx', function(d, i) {
return (i+1) * 200;
})
.transition()
.attr('r', function(d, i) {
return d.stat_1;
})
.attr('fill', function(d, i) {
if (d.stat_2 >= 100) {
return 'red';
} else {
return 'blue';
}
});
codepen.io/eslivinski/pen/bqRyzL
What happens if there are more items in our array then on the page?
By making some adjustments to our code we can actually add el to the page to match the array
.select('svg').selectAll('circle')
Like .attr, the select/selectAll are chainable
When we use select followed by selectAll we are effectively defining a parent and its children
This is necessary if we are going to add new items because we have to tell d3 where to put them
.enter().append
After binding datat to circles
, we are defububg another var newCircles = circles.enter().append('circle')
What this is saying is for all the items in the array that don't don't have a matching element in the DOM, add a new circle to the svg
Specifically, .enter()
selects the elements that are going to be added & ...
.append
adds a new element. -- the value passed into the append method defines what kind of element to add
Open dev tools to show new elements
We could do other stuff in this code block too, but it would only happen to our new circles
circles = circles.merge(newCircles)
Here we are updating our definition of circles to include the newCircles we just added, then setting attr for them
.attr('cx', function(d, i) { return (i+1) * 200; })
js arrays are "zero indexed", meaining var firstItem = someArray[0]; var secondItem = someArray[1];
if we remember that the "i" param passed into our attr function = index, then we see that this evaluates to [200, 400, 600]
this is a very common way to structure code in d3 when arranging items
data-binding / d3.selection.data.exit
var my_data = [
{ stat_1: 150, stat_2: 300 },
{ stat_1: 30, stat_2: 115 }
];
var circles = d3.select('svg')
.selectAll('circle')
.data(my_data);
// Get rid of the extra circle
circles.exit()
.remove();
// Won't be needed because the data is getting smaller
// But we will include it for good measure
var newCircles = circles.enter()
.append('circle');
circles.merge(newCircles)
.attr('cy', 100)
.attr('cx', function(d, i) {
return (i+1) * 200;
})
.transition()
.attr('r', function(d, i) {
return d.stat_1;
})
.attr('fill', function(d, i) {
if (d.stat_2 >= 100) {
return 'red';
} else {
return 'blue';
}
});
codepen.io/eslivinski/pen/YZQbMp
What happens if there are more el in the DOM than in the array?
Again, by making some adjustments to our code we can actually add el to the page to match the array
circles.exit().remove();
Similar to .enter()
, .exit()
selects all the items on the page that don't have matching items in the array and therefore are presumeably leaving
.remove()
deletes the elments in this subset
You might notice that I left the code we added in the last step.
This is because, together these to codeblocks exemplify the 'insert, update, delete' code structure of d3.
This is a pretty advanced concept (horray you did it!), but it allows us to basically throw anything into the array and see it represented in our svg.
data-binding / selecting-things-that-don't-exist
var my_data = [
{ stat_1: 40, stat_2: 10 },
{ stat_1: 30, stat_2: 250 },
{ stat_1: 130, stat_2: 40 }
];
// This looks like craziness, because there are no circles in the svg
// but we are essentially creating a placeholder for circles
// and handling the possibility that there might be circles
var circles = d3.select('svg')
.selectAll('circle')
.data(my_data);
var newCircles = circles.enter()
.append('circle');
circles.exit()
.remove();
circles = circles.merge(newCircles)
.attr('cy', 100)
.attr('cx', function(d, i) {
return (i+1) * 200;
})
.transition()
.attr('r', function(d, i) {
return d.stat_1;
})
.attr('fill', function(d, i) {
if (d.stat_2 >= 100) {
return 'red';
} else {
return 'blue';
}
});
codepen.io/eslivinski/pen/MmWYXy
To really prove the utility of the insert/update/delete structure lets try one more example
Why select things that don't exist?
Takes care of the possibility that they might exist -- we might not know what the data will look like
Create elements with data already bound to them
codepen.io/eslivinski/pen/WpOqeK
Defining the SVG
Unlike the other examples we have gone through, we are starting from complete scratch and need to define the SVG and all the things we want to put in it.
Similar to what we did when we added the circles in a previous example we create the SVG by selecting the parent container where we want the SVG inserted (d3.select("body")
)...
...then add the svg using .append("svg")
...finally, we set the width and the height attrs to create space for our map.

In d3 a projection is the exact same thing, but that strategy for going from round to flat is expressed as a js function
Function takes an array of coords ([lng, lat]) and returns an array of coords within our svg
Lots of built in projections, plus the ability to add custom definitions.
Path
Seeing as our projection function only takes one array of coords at a time, we will want to use a path generator to more efficiently project geojson polygons and lines.
Path generators take in geojsons and return projected coordinates expressed in an svg path (ie. d)
Data URL
To make things easy for codepen I am hosting the geojson of the US on github
If you open the url in your browser you will see it is just a geojson
D3.JSON
Since we are loading this json file from somewhere outside of this JS file we need to request the file using d3.json
D3.json takes 2 params
Url of our data
Callback function (What to do when d3 is done going out and grabbing our dataset)
2 param (err and data)
err - if all goes according to plan, we don't have to worry about this, but if there is an issue loadingour dataset
d3 will send that issue back in this 1st param.
data - the data we were looking for
We have to work with our data within the scope of this callback function, because there is no telling how long it will take
our request to actually retrieve the data (like all AJAX calls d3.json is handled asynchronously)
Defining states
var states = svg.selectAll("path").data(geojson.features).enter().append("path")
Using our "selecting things that don't exist" strategy to bind our geojson data to our states
Drawing states
.attr("d", path)
We want to use our geo path function to define the d property of our states. Since attr accepts a function and
will pass the states' data into the first param of that function we can write it like this.
.attr("d", function(d) { return path(d); })
works too.
Styling states
Adding the states class, which will define the stroke color.
Setting the fill property based on the the states' properties.stat_1
Drawing complex SVG shapes / SVG Paths
SVG Paths


--- title: "Hello R Markdown" author: "Frida Gomam" date: 2015-07-23T21:13:14-05:00 months: "2015 07" categories: ["R"] type: "post" output: blogdown::html_page: toc: true toc_depth: 4 number_sections: true highlight: "zenburn" description: "Really need a description, otherwise it comes out with nonsense HTML" ---
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
You can embed an R code chunk like this:
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
fit <- lm(dist ~ speed, data = cars)
fit
##
## Call:
## lm(formula = dist ~ speed, data = cars)
##
## Coefficients:
## (Intercept) speed
## -17.579 3.932
Some text
You can also embed plots. See Figure 1.1 for example:
par(mar = c(0, 1, 0, 1))
pie(
c(280, 60, 20),
c('Sky', 'Sunny side of pyramid', 'Shady side of pyramid'),
col = c('#0292D8', '#F7EA39', '#C4B632'),
init.angle = -50, border = NA
)


I had been taking 300 of bupropion for depression already for several months. Sometimes to get a boost before morning class I would pop 25-50 mg of ephedrine. One such morning I had no ephedrine so I decided to try the bupropion up the snoot to see if it had a different kick. I crushed one 150 mg tablet and cut it into four large lines. When I snorted it back it burned painfully, like pure amphetamine. This coupled with the size of the lines needed made this activity for strictly diehards.
 Colors became more vivid, I felt enthusiastic and a bit giggly.
At 45 minutes I was pepped up good, not the edgy nerves of ephedrine but the more subtle stimulation of a small dose of good coke. The long half-life of bupropion gave the feeling legs. Over the next 4 hours my high peaked gently and faded away before being lost in the common fizzle of my mind.
While the activity itself is rather unpleasant the boost was quite enjoyable. Soon I was bringing a flap of crushed bupropion with me when I was partying. Great for when the cops stopped me. With a prescription for the stuff they can't detain me and they don't seem to like that.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Before Change
if collapse_potentials:
for potential in model.potentials:
if collapse_deterministics:
potential_parents = reduce(lambda x,y: x.union(set(y)), [get_obj_names(p,None) for p in potential.extended_parents], set())
else:
potential_parents=set()
for parent in potential.parents.values():
if isinstance(parent, pm.Variable):
After Change
for potential in model.potentials:
if collapse_deterministics:
potential_parents = set()
for p in potential.extended_parents:
potential_parents.update(get_obj_names(p,None))
else:
potential_parents=set()
for parent in potential.parents.values():
if isinstance(parent, pm.Variable):


Having our capital in a bank deposit is a good decision when the economy of the country is going backwards but the currency that supports the country depends on the economy of other countries.
This is the case, for example, of the Spanish situation when bubble exploded, where deflation was beginning to take place and the euro gained more strength, as the European Central Bank's policy was to gradually lower rates until they reached 0.
Nowadays, having our capital in a bank deposit is to give wings to the banks, when situation is completely different from 10 years ago.
The risk of an economic crisis in the European Union is barely low and it seems that steady economic growth is taking root.
Just after the crisis in 2009, the risk was very high although the worst had already happened and with the bags so low it would have been worth putting our money in the bag.
When panic spreads and alarms go off you have to have the radar to buy and when the situation is good to have it to collect benefits.
All this I speak in the thread of good investor keys.
As soon as we get our money in euros in our case, we could have our capital in another currency.
Although it is always desirable to move money to places where it is generating wealth.
If we were like Uncle Scrooge accumulating dollars the only thing we would do in the long run is to lose money as the dollar depreciates over time.
However the precious materials maintain their value since they have also rise with inflation so they maintain the price.
That is why if the coins were real gold they would have added value to the nominal as precious metals which would keep or raise the price over time.
Euro as well as dollar, fortunately is quite stable, in spite of it has been years to drift, the best is still to come.
There is little time for the rate escalation and revaluation with respect to other currencies to begin.
I say this because there are a lot of currencies and there are countries where people had their money only in the local currency could have lost everything as Venezuela and many African countries.
But in those countries they worry more about these things and do not live like in Europe where we do not believe this could one day happen.
I say this because there are a lot of currencies and there are countries where people had their money only in the local currency could have lost everything as Venezuela and many African countries.
But in those countries they worry more about these things and do not live like in Europe where we do not believe this could one day happen.
But what happens if the price of the money happens to be worth more with respect to the other goods by a raise of interest rates.
That said, what are interest rates? .
Interest rates are modulated according to the rate of inflation.
The real interest rate is the nominal return or nominal interest rate of an asset discounting the loss of value of money because of inflation.
Its approximate value can be obtained by subtracting the inflation rate at the nominal interest rate.
Therefore, the nominal interest rate, which is usually the amount of interest in credits, would include both the real interest rate and the inflation rate.
When the nominal interest rate is equal to the rate of inflation, the lender gets neither profit nor loss, and the value returned in the future is equal to the value of money in the present.
The lender wins when the interest rate is high and inflation is very low or nonexistent.
An inflation rate above the nominal interest rate implies a negative real interest rate and, as a consequence, a negative return for the lender or investor.
From the point of view of the monetary policy of the State, a high interest rate encourages savings and a low interest rate encourages consumption.
This is why in Europe after the crisis and low unemployment, families have less purchasing power and find it more difficult to spend.
For this reason and so that it does not affect quickly all sectors, central bank has to stimulate the consumption by what low the rates.
Accounting that, money begins to be worth less and everything in general reduces its real value with what it loses after these artificial measures of the banks are those that own the capital.
However, wages are also reduced because the profits of the companies diminish leading to a new status.
On the other hand, at the beginning of these measures, those finite global assets such as materials, in particular precious metals, increase in value with respect to foreign exchange.
Hence the state intervention on interest rates in order to encourage either savings or expansion, according to general macroeconomic objectives.
Many people just care how much they earn without knowing that euros or money is something subjective that depends on many factors.
It is not the same 1 dollar 20 years ago today. In fact, the dollar has lost value over time, as well as an ounce of gold in the 90s with an ounce of gold today.
So in addition to having our money in euros, we could well have it in another currency or another precious metal, gold, silver, diamonds.
Next, I will show an explanatory chart comparing these metals with other currencies or material goods over time.
As you can see the silver is now consolidating values and following patterns of other economic crises to deduce that it will be long stable in those values.
In my opinion it still has to be corrected in the next two years to stabilize around the $ 12.
In the case of diamonds the bullish trend is uncorrupted and will continue to rise for quite some time.
Let's talk about gold.
In the 1990s the difference between the cost of production and the nominal cost was quite low having a rather low profitability.
However in recent years has witnessed a boom ending at the end of the crisis. At the time of price stabilization and adjustment of rates began to correct value until the
Range of the $ 1200 currently listed.
The current cost of production is around $ 800, making production really cost-effective. Here is a chart that compares the cost of production with the value of gold.
In this way it is also seen that as its value increases it costs more to extract it but the profit differential increases.
In favorable economic seasons the investment in gold is a mistake since in revaluing the other currencies and generate interest gold loses value since it only rises by the mere fact of raising inflation.
Although in the whole market the precious metals adjust to market before the events occur and the speculation is quite high.
In addition to all this we must make special mention of the cryptocoins that would merit a complete thread to talk about them.
At the moment most famous is the Bitcoin that after an initial impulse in 2010 has not reappeared with force until 2016.
Right now it is gaining special prominence due to the huge increases recorded in the first months of 2017.
To the right attached a Bitcoin chart compared to the recent dollar gold.
In addition to Bitcoin there are numerous cryptocoins that correct errors of Bitcoin as the space of transactions that in the case of Bitcoin is enormous.
The most famous are Ethereum and Ardor , since February of this year they have revalued more than 1000% , going from 10 $ to 250 $ at the moment.
This space that traces all the movements from the origin without a good optimization would end up dethroning Bitcoin as a crypto-currency in the future.
So the question is, what is the best way that our saved income does not lose value with the passage of time?
The best answer would be to have a balance in what we have saved, and not put everything in the same bag.
As in the thread of the keys of the good investor is not to invest in the distribution of our capital in
Different sectors and relocating these investments to minimize risks per zone in the case of our real capital would go in the same direction.
With this also say that it is not true that gold is revalued above the dollar except when adverse events arrive.
So it is advisable not to exceed 10% of our capital in precious metals and when revalued by bad economic cycles sell is the best option.
Since if today gold is worth 3 times more dollars than 30 years ago but the dollar is also worth almost 3 times less with what more or less has remained stable.
When banks give interest for our money do that because they are earning more with it.
So even though we think that we are earning a current 2% -5% the truth is that we are losing money.
This will happen in a few years as soon as types go up. Currently, money is worth less and in addition prices are rising with what we are losing capital year by year.
And the companies that will receive loans more easily is also a point to take into account although where less would invest would be in companies that carry a high debt with the difficult time to lower since the benefits will be reduced considerably.
Companies that have not done well in financial matters are at risk of being swept up by rate rises.
It also affects those who have an interest rate-dependent mortgage, such as the Euribor rate, which can be adversely affected.
While houses depending on where they are located can gain value in the face of good economic cycles.
Another matter is one that invests your money in a mortgage, is it really good business?
Depending on the amount of the mortgage or bank loan, and from where it was purchased may be a good option.
More if you are living in a home that is not ours. Many think, rather than pay the owner I become the owner and payment to the bank and at least the money goes to the house.
This is not entirely true, since we have to take into account the monetary policy that is going to be and if the area where we have bought will be more demanded in the future.
Apart from this we will have to add the interest that we are going to pay the bank with the years that can get to surpass 100% of what was worth the house in the beginning,
(Although the money will have had its revaluation over time).
From my point of view, in Spain after the flat price of housing, few sites have revalued above other sectors of the economy.
Although this increase is due in large measure to the exaggerated depreciation of properties that have an intrinsic value for the area where they are.
Housing for me is a basic good that we should all be able to access and that we must evaluate when choosing a job or not.
Many people, sin of innocent to think that the work is for the whole life, unless it is a position of official. So buying a home is more an investment item.
A point of view when buying is also very determining is to compare the prices of the rent with those of the purchase of houses.
If they are very misfit in favor of the purchase perhaps this is the right thing to do but you have to see where they are turning.
Right now because of the puncture of the bubble are getting more things in favor of the purchase.
If you want to pay a mortgage or if you want to pay a rent and invest the capital somewhat different.
Currently the price of houses is being revalued around 5% on average in large cities.
In the case of making this important transaction, I would have more than half prepared to pay, and I would do something that is not overvalued at the time of purchase.
A really interesting fact to know how things are would be to compare the CPI with the current housing price.
In the following chart we can see how in 2015 the soil was established and the entire previous bubble was corrected.
If the area where the work environment is located does not give affordable options, and the rental price exceeds 30% the salary maybe the logical thing is to look for a job in another area.
Not to see barbarities as they have been done around Madrid, buying real estate for values that touched the average salary of 30 years because the rents came to around 80% of the salaries.
Sometimes it is better to know a little of economy before working, or to have common sense, which in our society is in decline, hence what is happening.
We have seen people who were negative return after work, accounting for overall expenses.
The companies are doing around 20% on average in the stock market and the currencies have not yet started to take off.
Banks in the last two years have risen almost 100% in market value from lows (after the oil crisis in early 2015).
Despite that 100% rise, it is true that 4 years ago they were at current levels, and I estimate that in another 3 years they will revalue another 100% until reaching historical highs
Therefore for me the safest investment is to have a large part of portfolio in stocks of banks, but not to the current values as they will be corrected soon.
When the IBEX approaches the 10,300 points good time of entry , 15% Fibonacci recoil.
© 2016 - All Rights Reserved - Diseñada por Sergio López Martínez


This portfolio example demonstrates an interactive form with formulae implemented in Javascript. Data is generated dynamically based on user input.
on employee turnover every year.


Food Factory serves Italian, American and Mexican food with a focus on fresh and local ingredients. The concept is brought to provide delicious comfort food in a cozy intimate setting with a unique Ambience
Food Factory, the first waiter-less order taking restaurant in Auckland, allows you to place your order through a conveyor belt made with bike chains.
Driven by Passion, Innovation & Service as our motto, you will experience only the best Food, Music, Ambience and Drinks here!
Food Factory is not only a place to find the best food but a place of enjoyment, excitement for each of our guests. We aim to ensure everyone gets an unforgettable experience! Read More..
© 2019 Food Factory. All Rights Reserved


About
Open Trivia! by Anushan Lingam.
A small party quiz game demo which involves a host device which acts as the main quiz screen and other devices such as
phones which act as players.
Demo made with Javascript using Express
and Node.js for the server and
the Bulma CSS framework for the UI.
Trivia questions provided by the Opentdb API available here.
Source code available on github.


I am the first paragraph! Howdy!
I am the second paragraph. I just sit here under the first one.
I am the third and last paragraph on this page!


The munge
function allows a convenient format for applying a
sequence of mungepiece
objects to a dataset.
munge(data, mungelist, stagerunner = FALSE, list = FALSE, parse = TRUE)
| data | data.frame. Raw, uncleaned data. |
|---|---|
| mungelist | list. A list of lists which will be translated to a list of mungepieces. It is also possible to pass a list of mungepieces, but often the special syntax is more convenient. See the examples section. |
| stagerunner | logical or list. Either One can also provide a list with a |
| list | logical. Whether or not to return the list of mungepieces
instead of executing them on the |
| parse | logical. Whether or not to pre-parse the |
A cleaned data.frame
, the result of applying each
mungepiece
constructed from the mungelist
.
The munge
helper accepts a raw, pre-munged (pre-cleaned)
dataset and a list of lists. Each sublist represents the code
and hyperparameters necessary to clean the dataset. For example,
the first row could consist of an imputation function and a list
of variables to apply the imputation to. It is important to
understand what a mungebit
and mungepiece
does before using the munge
helper, as it constructs these
objects on-the-fly for its operation.
The end result of calling munge
is a fully cleaned data set
(i.e., one to whom all the mungepieces have been applied and trained)
adjoined with a "mungepieces"
attribute: the list of trained
mungepieces.
For each sublist in the list of pre-mungepieces passed to munge
,
the following format is available. See the examples for a more hands-on
example.
list(train_fn, ...)
-- If the first element of args
is
a function followed by other arguments, the constructed mungepiece
will use the train_fn
as both the train and predict
function for the mungebit, and list(...)
(that is, the remaining
elements in the list) will be used as both the train and predict
arguments in the mungepiece. In other words, using this format
specifies you would like exactly the same behavior in
training as in prediction. This is appropriate for mungebits
that operate in place and do not need information obtained
from the training set, such as simple value replacement or
column removal.
list(list(train_fn, predict_fn), ...)
-- If args
consists of a two-element pair in its first
element, it must be a pair of either NULL
s or functions,
with not both elements NULL
. If the train_fn
or predict_fn
, resp., is NULL
, this will signify to have
no effect during training or prediction, resp.
The remaining arguments, that is list(...)
, will be used
as both the training and prediction arguments.
This structure is ideal if the behavior during training and prediction
has an identical parametrization but very different implementation,
such as imputation, so you can pass two different functions.
It is also useful if you wish to have no effect during prediction,
such as removing faulty rows during training, or no effect during
training, such as making a few transformations that are only
necessary on raw production data rather than the training data.
list(train = list(train_fn, ...), predict = list(predict_fn, ...))
If args
consists of a list consisting of exactly two named
elements with names "train" and "predict", then the first format will be
used for the respective fields. In other words, a mungepiece will
be constructed consisting of a mungebit with train_fn
as the
training function, predict_fn
as the predict fuction, and
the mungepiece train arguments will be the train list of additional
arguments list(...)
, and similarly the predict arguments will be
the predict list of additional arguments list(...)
.
Note train_fn
and predict_fn
must both be functions
and not NULL
, since then we could simply use the second format
described above.
This format is ideal when the parametrization differs during training and
prediction. In this case, train_fn
usually should be the same
as predict_fn
, but the additional arguments in each list can
be used to identify the parametrized discrepancies. For example, to
sanitize a dataset one may wish to drop unnecessary variables. During
training, this excludes the dependent variable, but during prediction
we may wish to drop the dependent as well.
This format can also be used to perform totally different behavior on
the dataset during training and prediction (different functions and
parameters), but mungebits should by definition achieve the same
operation during training and prediction, so this use case is rare
and should be handled carefully.
mungebit
, mungepiece
,
parse_mungepiece
# First, we show off the various formats that the parse_mungepiece # helper accepts. For this exercise, we can use dummy train and # predict functions and arguments. train_fn <- predict_fn <- function(x, ...) { x } train_arg1 <- predict_arg1 <- dual_arg1 <- TRUE # Can be any parameter value. # The typical way to construct mungepieces would be using the constructor. piece <- mungepiece$new( mungebit$new(train_fn, predict_fn), list(train_arg1), list(predict_arg1) ) # This is tedious and can be simplified with the munge syntax, which # allows one to specify a nested list that defines all the mungebits # and enclosing mungepieces at once. raw_data <- iris munged_data <- munge(raw_data, list( # If the train function with train args is the same as the predict function # with predict args, we use this syntax. The first element should be # the funtion we use for both training and prediction. The remaining # arguments will be used as both the `train_args` and `predict_args` # for the resulting mungepiece. "Same train and predict" = list(train_fn, train_arg1, train_arg2 = "blah"), # If the train and predict arguments to the mungepiece match, but we # wish to use a different train versus predict function for the mungebit. "Different functions, same args" = list(list(train_fn, predict_fn), dual_arg1, dual_arg2 = "blah"), # If we wish to only run this mungepiece during training. "Only run in train" = list(list(train_fn, NULL), train_arg1, train_arg2 = "blah"), # If we wish to only run this mungepiece during prediction. "Only run in predict" = list(list(NULL, predict_fn), predict_arg1, predict_arg2 = "blah"), # If we wish to run different arguments but the same function during # training versus prediction. "Totally different train and predict args, but same functions" = list(train = list(train_fn, train_arg1), predict = list(train_fn, predict_arg1)), # If we wish to run different arguments with different functions during # training versus prediction. "Totally different train and predict function and args" = list(train = list(train_fn, train_arg1), predict = list(predict_fn, predict_arg1)) )) # End the call to munge() # This is an abstract example that was purely meant to illustrate syntax # The munged_data variable will have the transformed data set along # with a "mungepieces" attribute recording a list of trained mungepieces # derived from the above syntax. # A slightly more real-life example. not_run({ munged_data <- munge(raw_data, list( "Drop useless vars" = list(list(drop_vars, vector_of_variables), list(drop_vars, c(vector_variables, "dep_var"))), "Impute variables" = list(imputer, imputed_vars), "Discretize vars" = list(list(discretize, restore_levels), discretized_vars) )) # Here, we have requested to munge the raw_data by dropping useless variables, # including the dependent variable dep_var after model training, # imputing a static list of imputed_vars, discretizing a static list # of discretized_vars being careful to use separate logic when merely # using the computed discretization cuts to bin the numeric features into # categorical features. The end result is a munged_data set with an # attribute "mungepieces" that holds the list of mungepieces used for # munging the data, and can be used to perform the exact same set of # operations on a single row dataset coming through in a real-time production # system. munged_single_row_of_data <- munge(single_row_raw_data, munged_data) }) # The munge function uses the attached "mungepieces" attribute, a list of # trained mungepieces.


Interactive demo of a simple convnet trained on MNIST (see
Jupyter notebook). All computation performed entirely in your browser. Toggling GPU on/off shouldn't reveal any significant speed differences, as this is a fairly small network. In the architecture diagram below, intermediate outputs at each layer are also visualized.


NOSTALGHIA (director: Andrei Tarkovsky; cast: Oleg Jankovsky (Andrei Gortchakov), Erland Josephson (Domenico), Domiziana Giordano (Eugenia), Patrizia Terreno (Gortchakov's wife), Laura De Marchi (chambermaid), Delia Boccardo (Domenico's wife), 1983-It.)
Tarkovsky in his book, SCULPTING IN TIME, mentions that he wanted to make a film about Russian nostalgia- "about that state of mind peculiar to our nation which affects Russians who are far from their native land. I wanted the film to be about the fatal attachment of Russians to their national roots, an attachment which they will carry with them for their entire lives, regardless of where destiny may fling them. How could I have imagined as I was making this film that the stifling sense of longing that fills the screen was to become my lot for the rest of my life; that from now until the end of my days I would bear the painful malady within myself?"
For that reason, seeing how the filmmaker himself was pleased with the film and considered it so important to himself, and because of the power and perfection of craft the film exhibited, it makes it that much easier for me to say that this film ranks as one of his best works, an intriguing masterpiece, that is equal to, if not better than his other masterpieces, SOLARIS, ANDREI RUBLYOV, THE SACRIFICE, and MIRROR.
This is the tale, and it seems almost unreal and dreamlike at times, of a Russian poet (Oleg) who is on assignment in Italy's Tuscany area, to write a book about an obscure 17th - century Russian composer, Sosnovsky, who studied music in Bologna. His landowner sent him there because he believed he was immensely talented. He was able to live in Italy for awhile composing, but he soon returned to Russia voluntarily to face enslavement as a serf, evidently feeling that he would rather be a slave in the country he loved, than a free man in a country he did not understand. Something must have gone wrong, because soon after his return he hung himself. How to understand that, is puzzling to Oleg, who is deeply plagued himself with family problems and deeply ensconced in a brooding type of meditation, definetly not Buddhist-like, that leaves him in a state of disorientation as he tries to discover who he is.
The film opens in a deep fog, as he and his Rubenesque Italian translator (Giordano) drive in the sloping mountaneous terrain to visit one of the shrine's that mostly women tourists visit when they pray here to the Virgin Mary. This opening scene is shot in black- and- white until the translator enters the church, and then it is shot in a magnificent sepia and pastel coloring. The visual images of all the scarved peasant ladies with lit candles and starlings coming out of the Virgin's body are, indeed, startling. Tarkovsky will use the black- and- white shots again in the film when he is using flashbacks to show that he is dreaming or reflecting back on the events in his life.
The first impression one gets, is that he is having an affair with his translator, but that is not the case, he is so obsessed with his thoughts that he has difficulty communicating with her, which is frustrating for her, as she expects something to happen between them and, when nothing happens, blames it on her poor luck of always choosing the wrong man. The mood of the film is gloomy, when a laugh is heard or someone does something silly it is monumental and takes on an unreal scope. The feeling one gets, is somewhat as if a child, saddened by the outside world, is nevertheless able to laugh at something he makes up, and thereby feels good about himself.When Giordano is asked by the sacristan, "Whether she has come to pray to have a child, or to not have one," she says, "She is just looking." The sacristan's response is, "What are you here for, then?" The implication being that a woman's duty is to raise kids. But what is even eerier than her evasive response, is that Oleg, who insisted on coming here, chooses not to even go inside the church. It would seem that he is making a statement to the effect, that he suddenly realizes, amidst such a religious setting, that what he wants to find is not outside of himself, that he cannot be a tourist anymore, he must look inside himself to find what he is looking for.
He meets his kindred spirit in a madman, a former math teacher(Erland), with gloom and doom prophesies for the world, who locks his family in the house for seven years for their own safety before someone breaks the door down and they escape; and, as one guest in the luxurious hotel Oleg is staying at says, "the child runs out of there like a rat from his cage." These two hit it off, they see something in each other that is akin in spirit. At first, Erland is reluctant to talk about what he did, but when Oleg pursues him to his house, which is damaged and flooded from a leaky roof, their conversation becomes surreal, as both recognize in each other that they are possessed to do what it is they seem compelled to do and nothing can stop them.When Erland gives a prophetic speech in Rome and then torches himself to death to the accompaniment of music as his parishoners stand impassively by, and only his dog shows feelings for what is happening to him, we are struck with feelings of empathy and wonder about someone who is so sensitive, yet is not sensitive enough to function in a world that is so apathetic to the sufferings in others. His suicide is a harsh opinion on orthodox religion's failing role in getting him to alleviate that suffering, and how it is quite necessary that we learn ourselves, how to humble ourself before we relate to God, otherwise there can be no proper cure for our disease.
The best and truest lines in the film are spoken by the madman. The poet is inarticulate, taken aback by his memories and loss of spirit. All the other people he meets on this journey, he forms only an allegorical relationship with, whether it's the translator, or churchmen, or hotel guests, or the Italian workers, they all have little to say to him. The people are much like the weathermen who can give you the temperature, but are lost when the conversation takes a deeper turn, they are simply not prepared to talk about what they do not comprehend. For Tarkovsky, this film is a lifetime journey, made by someone who is in pain and must see this pain through for what it is, because there is no going ahead without taking this pain with him. He must also be prepared to take care of his spiritual obligations. Since Tarkovsky, for all intensive purposes, is a projection, at least for this film, of Oleg, as he envisions his life passing before him, and is in anguish as he sees his faith being tested; and, as he starts to take hold of his fragile life, maybe for the first time in his long life, he seems like a changed person, who recognizes his melancholy to be a death wish, something that poetically inspires him, something that is necessary.
Things do not seem so foreign to him, anymore. He knows now that he can travel anywhere in the world without a translator, as he lights the candles in the holy water at the hotel and carries out the promise he made to Erland when they conversed in his house. The flames are important reminders to him about what he must do to cleanse himself, as he takes the lit candles over the baths in his cupped hands; he believes they can burn away the core of the material world and give him hope for purity and an eternal life. The film ends in light, as through the open circular window of a ruined church the sun shines in and, metaphorically Erland's house is transposed in it, symbolizing his divided state. And, as Oleg begins to meditatively see who he is inside these literary structures, he realizes that he is whole again, and that he will return to his native Russia that he loves so dearly, that is inside his blood; and he knows for certain, now, that it will be there for him, forever, wherever he goes.
REVIEWED ON 11/4/98 GRADE: A+
Dennis Schwartz (Movie Reviews<EMAIL_ADDRESS>http:www.sover.net/~ozus
© ALL RIGHTS RESERVED DENNIS SCHWARTZ
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews