 In reality, the process of reforming the economy is nuanced, involving a diverse set of issues and actors. The following scorecard is a list of thirty big reforms that the Modi government confronted when it took office, and the status of each. Such a list can never be absolutely definitive. We hope this list helps the public understand the choices that are on the table, and that each reform will move at an independent pace. This scorecard will be updated on a monthly basis as we see tangible progress on individual reforms.
To Learn More About the Wadhwani Chair.
Completed
Incomplete
In progress/partial success
Graphic
Video/Audio
Complete
DIFFICULTY: High
Will combine most of India's state and local taxes into a streamlined tax system.
The Goods and Services Tax went into effect nationwide on July 1, creating India's first-ever national market and replacing most state and federal taxes.
In Progress
DIFFICULTY: Medium
Eliminate the Revenue Department’s ability to retrospectively apply new tax laws. This provision, introduced in 2012, creates uncertainty for foreign investors.
In his February 29 Budget Speech Finance Minister Jaitley announced that the Revenue Secretary would chair a high-level committee that had to approve all retrospective tax demands and offered
a one-time dispute resolution opportunity for parties to current cases.
For a detailed analysis, click here
Complete
DIFFICULTY: Medium
Deregulating diesel pricing will lower government subsidies and also encourage the expansion of private hydrocarbon production.
The government deregulated diesel pricing on 10/18/2014.
In Progress
DIFFICULTY: Medium
Deregulating natural gas pricing will encourage the expansion of private hydrocarbon production.
On March 10, the Cabinet announced a new energy policy that switches to a revenue-sharing model (from a profit-sharing model), allows substantial pricing freedom for difficult fields, and eliminates minimum acreage requirements for new fields. While not total price deregulation, the policy offers new incentives for private hydrocarbon exploration.
Incomplete
DIFFICULTY: High
Deregulating kerosene pricing will lower government subsidies and also encourage the expansion of private hydrocarbon production.
The central government has ordered state oil companies to continue to raise the subsidized price of kerosene each month until the subsidy is eliminated.
Incomplete
DIFFICULTY: High
Removing minimum support prices will reduce the government’s subsidy burden and help end the over-production of staple grains.
For a detailed analysis, click here
In Progress
DIFFICULTY: Medium
Direct cash payments programs, such as pensions, should employ Direct Benefit Transfers to send funds to recipients.
The government has introduced a dedicated portal tracking its efforts to transition to DBT.
In Progress
DIFFICULTY: High
Programs where the government broadly subsidizes goods for targeted groups should be shifted to Direct Benefit Transfer programs to strengthen targeting and reduce diversion.
The government has introduced a dedicated portal tracking its efforts to transition to DBT.
Incomplete
DIFFICULTY: High
Deregulating fertilizer subsidies will lower government subsidies, increase private investment, and reduce over-fertilization that can erode soil viability.
On 5/13/15 the government announced a new four-year urea policy that will continue the price regulation regime.
In Progress
DIFFICULTY: High
Allow foreign investors to own a majority stake in life and non-life insurance firms.
The 2016 Consolidated FDI Policy Circular allows up to 49% investment in insurance through the automatic route.
For a detailed analysis, click here
In Progress
DIFFICULTY: Medium
Allow foreign investors to own a majority stake in defense production firms.
The Ministry of Defence rejected the first-ever proposal to establish a 100% foreign-owned defense manufacturer in India.
For a detailed analysis, click here
Complete
DIFFICULTY: Low
Allowing foreign investors to own a majority stake in the railway-related businesses will encourage much-needed investment in infrastructure.
DIPP Press Note 8 (2014), issued 8/27/2014, opened most of the railways sector to 100 percent FDI.
Incomplete
DIFFICULTY: High
Allowing foreign law firms to establish offices and practice law in India will lower barriers to doing business in India.
Prime Minister Modi has reportedly requested the Ministry of Law and Justice to prepare a draft regulation that would open the Indian legal market to foreign lawyers.
Complete
DIFFICULTY: Low
Relax the rules specifically governing foreign investment in construction projects, including minimum built-up space and lock-in periods.
DIPP Press Note 12 removed almost all restrictions on FDI in construction, including minimum project size, and reduced the lock-in period for capital to three years (or as soon as trunk infrastructure is completed, whichever comes first).
In Progress
DIFFICULTY: Medium
FDI was opened in Sept. 20121. But rules governing foreign investment — minimum investment size, sourcing rules, and location — have precluded investment in this sector.
For a detailed analysis, click here
In Progress
DIFFICULTY: Medium
FDI in single-brand retail was opened1 in September 2012. However, foreign firms must source 30% of what they sell from local manufacturers.
Press Note 5 of 2016 allows FDI up to 100% via the government approval route, but requires that 30% of goods sold in the first 5 years be manufactured in India. This period is tolled 3 years for 'cutting edge' technology.
In Progress
DIFFICULTY: Low
While FDI is allowed1 in business-to-business e-commerce, and in e-commerce that uses a marketplace model, the sector is still closed2 to FDI when companies sell directly to consumers.
Press Note 3 of 2016 clarified that FDI is not allowed in business-to-consumer e-commerce, unless items are all being sold under a single brand and meet local-content requirements.
Sources:
1Department of Industrial Policy & Promotion
2Department of Industrial Policy & Promotion
Complete
DIFFICULTY: Medium
Coal mining for public sale was previously the exclusive right of government-owned “Coal India” and its subsidiaries.
Parliament approved the Coal Mines (Special Provisions) Act, 2015 on 3/20/2015, opening the sector to private—including foreign—investment.
In Progress
DIFFICULTY: High
India’s Industrial Disputes Act sets a floor of 100 employees after which government permission is required to lay off workers. Some firms choose to remain below this level, giving up growth opportunities, in order to retain flexibility.
On March 16, 2018, the Ministry of Labour relaxed rules for fixed-term (contract) employees, allowing such labor in all sectors.
For a detailed
analysis, click here
In Progress
DIFFICULTY: Medium
Banks are required to direct 40% of loans to "priority sectors", including agriculture, small businesses, education, and housing. This slows growth by reducing capital available for the fastest-growing industries.
On September 21, 2018, the RBI slightly relaxed Priority Sector Lending rules to allow banks to share credit risk with non-banking finance companies.
In Progress
DIFFICULTY: Medium
In 2013, the Financial Sector Legislative Reforms Commission called for stronger rules for regulatory interventions. This includes clearly stating the purpose of new regulations, mandatory notice & comment periods, and impact studies.
The Ministry of Finance recently solicited comments on a Task Force Report proposing the structure of a new Financial Redress Agency (FRA). First recommended by the FSLC, the FRA that will act as a consumer regulator of the financial services industry.
In Progress
DIFFICULTY: High
The current law governing eminent domain requires that states obtain approval from at least 80% of residents before buying land, making it difficult to find plots for industry and infrastructure.
The new national land acquisition law, although it passed in the Lok Sabha, failed in the Rajya Sabha, and the government is no longer making this issue a legislative priority.
Complete
DIFFICULTY: Low
Onerous licensing is one aspect of India’s difficult “doing business” environment. Extending the validity of industrial licenses will decrease the frequency businesses will need to undertake this exercise.
DIPP Press Note 9 (2014), issued on 12/20/2014, increased the maximum validity of an industrial license from two years to seven years.
Complete
DIFFICULTY: High
India’s laws do not allow for a quick resolution of dead companies. The long process of winding up bankrupt companies contributes to overall legal paralysis, and locks up assets and intellectual property that could be deployed elsewhere.
The first case under the new Insolvency Code has begun in the Maharashtra High Court.
Incomplete
DIFFICULTY: Medium
The World Bank's Ease of Doing Business Report 20171 notes that it requires 12.9 procedures to start a business in India, compared to the South Asia regional average of 8.1.
In Progress
DIFFICULTY: Medium
According to the World Bank's Ease of Doing Business Report 20171, it takes 26 days to start a business, more than in any other country in South Asia.
In Progress
DIFFICULTY: Medium
A consistent, transparent regulatory environment gives businesses greater confidence.
The Ministry of Law & Justice sent a letter on 2/5/2014 to all ministries, urging them to comply with a 30 day notice & comment period and other rules. Implementation has been inconsistent.
For a detailed analysis, click here
Incomplete
DIFFICULTY: Low
The long-standing 10% limit on single institutional investors hinders investment in high-growth Indian companies. SEBI raising this threshold — even to 20% — will unlock significant liquidity for listed Indian companies.
In his February 29 Budget Speech Finance Minister Jaitley raised the investment limit for foreign portfolio investors in public sector enterprises from 49% from 24% and allowed FPIs up to 100% of each tranche of securities released by asset reconstruction companies. Neither change has yet been notified by RBI.
Complete
DIFFICULTY: Low
India historically reserved dozens of products and sectors for small and medium businesses. The rules prevented successful businesses manufacturing these goods from expanding and limited their access to capital.
On 4/10/2015 the government removed the last 20 products from the reserved list.
Complete
DIFFICULTY: Medium
Government must conduct auctions in a way that allocations of the spectrum being auctioned off are transparent and create a barrier to participation.
India has now conducted multiple free and fair telecom auctions with no complaints from private-sector participants.


General discussion about Komodo. For useful links and more info click the pinned messages to the right. DON'T DM @jl777
100 messages
Before 05-Dec-19 12:00 AM
BlockTech04-Oct-18 12:23 PM
Sure sorry ^^ , "interest" was maybe easier to understand for someone not understanding UTXO. But indeed, "Reward" is more accurate. (Reward to active user)
SHossain04-Oct-18 12:24 PM
yep. in detail it is Komodo Active User Reward
1
André04-Oct-18 02:37 PM
How do you "claim" your reward? Also, isn't Komodo mineable?
Sorry, also new here
crumb04-Oct-18 02:39 PM
there is a claim reward button in Agama wallet. to get 5.1% APR you'll need to claim the rewards once a month
André04-Oct-18 02:40 PM
Ah ok, can I store it on a Ledger nano s and still get the reward?
crumb04-Oct-18 02:41 PM
ledger nano s reward claiming is tricky. there is a guide, but it's not really not that straightforward
HyperDEX team is working on the more simple solution
until then i'd keep them in Agama
passcombo.com 🏴☠🏴04-Oct-18 02:42 PM
questions keep repeating - is there a link with all answers for APR ?
TL;DR: There are now over 250 decentralized exchanges in the world today. These are the hurdles of what it will take to be #1.
The liquidity problem is already being solved today by DEX aggregators like dexdexplatform (Dexdex) Easytrade.io that pools orders from multiple DEXs. According to the site:
“Dexdex searches multiple exchanges, protocols and market makers ensuring you always get the best available price. It also provides tools for anyone to generate their own liquidity.”
Maybe we can use or benefit from this .. (edited)
Their technology is also open-source and on GitHub.
3
jspook1604-Oct-18 04:58 PM
@afe I think you first have to integrate it locally then once tested submit it to be added. New ac or new coin?
Desktop App for SuperNET DAPPs. Contribute to KomodoPlatform/Agama development by creating an account on GitHub.
SHossain05-Oct-18 08:37 PM
41d is the stable release for the users that don't want PIRATE. If you want to use PIRATE then the above URL has the latest
Ludom05-Oct-18 09:54 PM
Hi
IndéNodes has a new logo
New IndéNodes logo
Just for the fun
Just giving some news before my vacancies
I'm working on partnerships.
That's it
Go Komodo go
5
4
4
1
1
D2D privacyalternatives.com06-Oct-18 08:27 AM
Hi, I watched the video about the 5.1% rewards for holding KMD in Agama. It suggests using the lite version. Is it possible to also claim the rewards if you use the native one?
blackjok3r06-Oct-18 08:28 AM
You can but the coins end up in change address, because hte Agama dev wont let you use -pubkey.
D2D privacyalternatives.com06-Oct-18 08:29 AM
Thanks. What do you mean when you say "change address"?
grewalsatinder06-Oct-18 08:38 AM
you have a physical wallet. with pockets.
got 100 note bill in 1
you buy/sell something. give that 100 bill to someone and get back 50, 20, 10 note bills.
this change doesn't go back to the same pocket you picked the 100 bill from.
it always creates a new pocket, and puts these notes into it.
that new pocket creation is a "rule" in native mode only.
it is done by the native wallet, and not a human intervention.
this analogy should clear you what is change address.
D2D privacyalternatives.com06-Oct-18 08:45 AM
OK thanks for the explanation. Does it put all the KMD you have in a different pocket after claiming the reward, or just the rewards?
Anyway, I think it doesn't make much difference if it's in a different pocket...as it's still inside my wallet.
blackjok3r06-Oct-18 08:50 AM
yes it doesnt mean you lose anyting, but it makes it harder to track. Also for the election, if all your KMD is spread over hundresds of change address's its a huge problem to cast your vote.
Your darling agama now and on android! https://t.co/VwmJ9L8LsT #Agama #KMD #OOT @utrumdotio @utrumrussia
SHossain06-Oct-18 10:51 AM
@D2D privacyalternatives.com you can also use native mode now. Native mode has an option to select address where the rewards will end up. Select the same address as you are claiming reward from
D2D privacyalternatives.com06-Oct-18 10:59 AM
Ah great, thanks
I also have another question.
If you want to create a token on the Komodo blockchain, do you have an easy to use interface to do it (similar to Waves platform)?
KomodoWorld06-Oct-18 11:21 AM
not yet, asset CC is very recent development and there isn't a gui yet
D2D privacyalternatives.com06-Oct-18 11:26 AM
OK I understand . So there will probably be one in the future.
Waves makes it very easy to create tokens, but they don't have some of the features that Komodo has which I think are important, like privacy and dpow(edited)
Agama Mobile v0.1.0 can now be installed on Android! https://t.co/iTPPMKpcT5 #Agama #KMD #OOT @utrumdotio @utrumrussia
meatspoon06-Oct-18 07:51 PM
Do i remember correctly that DPoW costs 300 KMD per year for any blockchain that wants to use that notarization?
jl777c06-Oct-18 07:55 PM
only for the past ones, prices going up
meatspoon06-Oct-18 08:02 PM
Do you have a new price point in mind? With a total supply 110 mil, 300 KMD wouldnt put much buy pressure on KMD even if literally every crypto project paid for DPoW.
ComputerGenie 👴👴👴06-Oct-18 08:04 PM
can't imagine that even with 5000 assetchains that 1500000 would put any pressure on the market spread over a year's time (4109.58904109589 per day)(edited)
jl777c06-Oct-18 08:09 PM
the benefit to KMD isnt from the direct transactional purchases
think of what it would mean if hundred(s) of coins uses dPoW
there is a new business segment, blockchain to blockchain, with KMD becoming the leader of this new market
meatspoon06-Oct-18 08:15 PM
So, computer, you are imagining a world in which crypto assets number 2.5 times what they do today and all of them use DPoW? Quite the imagination you have.
I am trying to think of what it would mean (on price action) of hundreds used DPoW at a price of 300 (or even a thousand) KMD annually and it doesnt seem like there would be much effect on price. Sure, the asset chains would be more secure, but it wont have an effect on KMD price.
jl777c06-Oct-18 08:23 PM
really?
how much does marketing cost?
ComputerGenie 👴👴👴06-Oct-18 08:27 PM
So, computer, you are imagining a world in which crypto assets number 2.5 times what they do today and all of them use DPoW? Quite the imagination you have.
I was agreeing with what you said and pointing out an exponential increase example
Kitchen Table06-Oct-18 08:32 PM
I would imagine most chains using DPoW would buy close to 7k KMD and let the yearly reward pay for the future use of DPoW.
jl777c06-Oct-18 08:36 PM
well 7 million KMD purchased by 1000 chains, would actually have a transactional effect
but the bigger effect from dPoW adoption by the industry is that KMD becomes an industry standard way for securing a chain. If the value of this in your mind is not a significant value, then it seems you not thinking long term enough
industry standards tend to survive very long term
now, look at PIRATE. the difference of PIRATE before and after dPoW. without it, it was an interesting test coin, but once it got it, then it becomes a viable contender in the privacy coin space. If the PIRATE chain is not secure, then it cant get a lot of interest.
A lot of people are expecting a giant shakeout in the crypto space, and it is indeed a possible scenario where a lot of projects just dont survive in any meaningful way. how is an investor to be able to differentiate which ones? we assume they are not able to tell apart based on tech details since they dont really do much research, that's too hard to do
now with the current level of "research" investors do, if they find out that many other coins are using KMD for dPoW security (whatever that is), it transforms KMD from one of many to one of the few that will be surviving whatever shakeout the altcoins will have
THAT is worth far more than the 300 KMD per chain
but what do I know, I am just a simple C programmer
meatspoon06-Oct-18 08:46 PM
Fair enough. So you see DPoW more as a way to offer unique value—not as something that will affect price. Or at least not in the short or medium term.
@ComputerGenie 👴👴👴 my apologies, Puter.  Mark the calendar, we sort of agreed on something.
2
jl777c06-Oct-18 08:52 PM
well requiring 100,000 to a few million KMD wont be hurting its price
but that is not the primary power of dPoW
crypto is very crowded. so crowded that even though KMD has solved many things, there are still startups that are raising millions to do what a single CC can do
an already existing CC
by getting many dPoW coins, we not only secure them, some percentage of people will dig a bit deeper
this organic marketing is priceless
snowdamn06-Oct-18 08:56 PM
is the CC that will allow shorting ready?
i lost track
jl777c06-Oct-18 08:56 PM
I had to slow down my development pace. everybodys head was spinning around, and waiting for testers to catch up
snowdamn06-Oct-18 08:58 PM
it's down to testing? not bad at all!
jl777c06-Oct-18 08:59 PM
mihailo got channels CC (improved LN) into testing too, so testers are overloaded
snowdamn06-Oct-18 08:59 PM
awesome
jl777c06-Oct-18 08:59 PM
taking a little pirate vacation
2
snowdamn06-Oct-18 09:00 PM
throughout the years there have been so many times i found myself wishing i could short the shit out of so many shitcoins
ComputerGenie 👴👴👴06-Oct-18 09:09 PM
Will the new ZcashParams conflict with KMD? zcashd is telling me I need to dl different ones than the ones I have in order to run zcash
jl777c06-Oct-18 09:10 PM
sapling uses new (and much smaller) parameters
you still need the old ones though
ComputerGenie 👴👴👴06-Oct-18 09:13 PM
will zec keep both, or do I need to save and move back when I'm done with zec? any idea?


backend¶
Base¶
Kevin Fung - Github Alias: kkf18
Private parent class for workflow backend. This module is intended to contain key features that will be used across all workflow backend.
-
class
mlflowrate.backend.base.
Base
(dfs=None, dicts=None, datasets=None)¶ Parent class for workflow backend.
Currently holds public data attributes, reorganisation methods, and plotting methods.
-
dfs
¶ Dictionary of different Spark DataFrames holding mixed features of well data.
- Type
dict
-
dicts
¶ Dictionary of different organised dictionaries of single featured well data.
- Type
dict
-
sets
¶ Dictionary of different Spark DataFrames created by the user.
- Type
dict
-
datasets
¶ Dictionary of different Dset objects that hold the datasets for machine learning.
- Type
dict
-
CB_color_cycle
¶ Matplotlib plotting colour cycle.
- Type
dict
-
cache_data
(*args)¶ Wrapper method for Spark Caching DataFrames into the running cluster.
- Parameters
*args – argument list of key names present in the dfs sttribute.
- Returns
Cached Spark DataFrame in cluster framework.
-
plot
(title, dicts_dfs, third_axis=None, marker_dict=None, is_sets=False)¶ Plot multiple timeseries Spark DataFrames onto a figure, x axis = time, y axis = value.
- Parameters
title (str) – Name of Spark DataFrame
dicts_dfs (dict) – example input: {data: [WHP, DHP], data: [DHT, Qliq]}
third_axis (dict) – example input: {data: [WHP, DHP], data: [DHT, Qliq]}
marker_dict (dict) – dict of lists of dataframes with desired marker styles {marker:list}
- Returns
Matplotlib figure and axes objects for displaying in notebook.
-


lorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsum
Contact Samlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsum
Contact DineshPair-programming is the act of teaming up with another fellow programmer in order to complete a specific task. I believe it is important to DBC because it really emphasises the importance of cooperating with the people working around you and being able to communicate effectively. While pairing one programmer is the driver and the other is the navigator. The navigator essentially gives instructions and methods of writing code to the driver, who in turn, writes the code down. I feel for me that navigation was a bit more difficult as there is the pressure of making sure everything you communicate to the driver in terms of syntax should be correct otherwise you are giving faulty instructions. That being said I greatly enjoyed both roles.
I had a great time pairing for the first time. One thing that was crucial and that worked was communicating effectively. We ran into a couple of syntax problems however with clear communication and a bit of internet searching we were able to overcome this.


{% load xextends %} {% xextends "events/base.html" with secondary_nav="my_tickets" %} {% load plugins %} {% block content %}
You have have indicated you will attend {{event}}
Click here to return to {{event}}.


Implements travel time bound calculation based on zero flows. More...
#include <BoundsCalculatorForBSP.h>
Public Member Functions | |
| BoundsCalculatorForBSP (StarNetwork &net, const TollContainerType &tolls) | |
| virtual void | initializeBounds () |
| virtual void | updateTimeBounds (int destNodeIndex, int odPairIndex) |
| virtual TollType | getTollLowerBound (int nodeIndex, int destNodeIndex) |
| virtual FPType | getTimeLowerBound (int nodeIndex, int destNodeIndex) |
Protected Member Functions | |
| virtual StarNetwork * | getNetwork (StarNetwork &net) |
| virtual StarNetwork * | getNetworkWithTolls (StarNetwork &net, const TollContainerType &tolls) |
| virtual StarNetwork * | getOppositeNet () |
Protected Attributes | |
| LabelCorrectingAlWithoutZonesCheck * | spp_ |
| std::vector< FPType > | zeroFlowTimes_ |
| std::vector< TollType > | tolls_ |
| StarNetwork * | reverseStar_ |
| StarNetwork * | originalNet_ |
| const TollContainerType & | linkTolls_ |
Detailed Description
Implements travel time bound calculation based on zero flows.
Toll lower bounds are also calculated in this class.
Member Function Documentation
|
protectedvirtual |
Creates reversed network for bounds calculation.
Reimplemented in BoundsCalculatorForBackwardNet.
|
protectedvirtual |
Creates reversed network with tolls as link costs for bounds calculation.
Reimplemented in BoundsCalculatorForBackwardNet.
|
protectedvirtual |
- Returns
- pointer to the network.
Reimplemented in BoundsCalculatorForBackwardNet.
|
virtual |
- Returns
- zero flow travel time lower bound from node nodeIndex to destination destNodeIndex.
Reimplemented from BoundsCalculatorForBSPBase.
Reimplemented in BoundsCalculatorWithTimeUpdate.
|
virtual |
- Returns
- toll lower bound from node nodeIndex to destination destNodeIndex.
Reimplemented from BoundsCalculatorForBSPBase.
|
virtual |
Calculates all bounds (travel time based on zero flows and toll): from every node to every destination node.
Reimplemented from BoundsCalculatorForBSPBase.
|
virtual |
Hook method for children classes to update travel time bounds when necessary.
Reimplemented from BoundsCalculatorForBSPBase.
Reimplemented in BoundsCalculatorWithTimeUpdate.
The documentation for this class was generated from the following files:
- BoundsCalculatorForBSP.h
- BoundsCalculatorForBSP.cpp


Page Links: Index Page
| dmussen 8th Feb 2011, 05:51 permalink Post: 1178 |
Happy Days
I worked on the project for eighteen months in production design control at Brooklands. We were to facilitate certification by the CAA and BEA (Fr).
We built the enlarged tail cone tank and the "droop Snoop" and fwd. fuselage. I recall that one of the biggest design problems was the toilet up the front. There simply wasn't the space. Sir George Edwards fired most of us prior to to the first revenue flight of G-BOAC out of Heathrow. I got a job at BP in Meadhurst and enjoyed listening and watching this beautiful aircraft get airbourne for New York from the roof of the research establishment that day. I only played a small part but by God it was fun. I am looking at my office wall in Fremantle, Western Australia at a photograph of G-BOAC after getting airbourne on its maiden flight. It is signed by my work golleges at Brooklands. Somewhere in a trunk I have a copy (blueprint) of prototype 01 notated in both English and French. (I cannot recall how I came by it). This is the best thread I have read ever.  The spin parachute and emergency escape hatch are interesting |
|
| dmussen 9th Feb 2011, 02:34 permalink Post: 1184 |
More About Happy Days.
Great to hear from folk involved with this beautiful work of art (and engineering).
I tried to find that blueprint of the general arrangement of 01 but that trunk in my Garage has a lot of stuff in it. My memory is not what it used to be and brake parachute indeed makes sense. Spinning one of these aircraft would not have been an option. I did manage to get on board G-BOAC in the hanger at Filton and was permited to walk out onto the port wing wearing felt overshoes. When I saw that leading edge at close quarters I was stunned. Never got to fly the aircraft but once saw one over the Bristol Channel when I was in a Folland Gnat. He was climbing when I decided to take a closer look. Needless to say this was an exercise in futility.  Cheers. |
|
| stilton 9th Apr 2015, 00:35 permalink Post: 1858 |
Great information Exwk.
Didn't the early prototypes have a braking parachute ? |
|
| dazdaz1 9th Apr 2015, 15:03 permalink Post: 1861 |
||
| Volume 10th Apr 2015, 07:35 permalink Post: 1863 |
How was the procedure for re-packing that parachute?
Has it been done to the same strict requirements which apply to pilots/ejection seat paracutes, meaning only specifically trained and licenced personnel could do it? For how many landings was that parachute good? Was there a life limit or has it been an on-condition item? Was the Concorde design somehow based on the Caravelle parachute, or a specific new design? |
|
| CliveL 12th Apr 2015, 16:36 permalink Post: 1867 |
@ Volume
Sorry for slight delay; I hadn't a clue and had to ask an old friend who was directly involved in Flight Test. This is his verbatim reply:
Quote:
I think that is about as much as one could hope for after all this time |
Page Links: Index Page


{% extends 'base.html' %} {% block title %}{{ name }}{% endblock %} {% block styles %} body{ padding-top: 40px; } path { stroke: #F3C66F; stroke-width: 2; fill: none; } .axis path, .axis line { fill: none; stroke: grey; stroke-width: 1; shape-rendering: crispEdges; } text { font-family: 'Open Sans','Helvetica Neue',Arial,sans-serif; } {% endblock %} {% block content %}
Unemployment rate is the number of people in the labor force who are unemployed but currently looking for employment. This rate is typically high during recessions as the high peak during the Great Recession illustrates.
{% endif %} {% if name == 'Interest' %}Interest rate is an amount set by the Federal Reserve on bank-to-bank loans, which has a trickle-down effect on consumer interest rates. The Federal Reserve uses this rate along with other money control methods to fight inflation. However, high interest rates can lead to high unemployment requiring economists to balance between unemployment and inflation.
{% endif %} {% if name == 'Inflation' %}Inflation rate is the sustained increased in prices in the general level of goods and services. By creating a typical basket of consumers goods, the Consumer Price Index tracks how prices for food, energy, shelter and other services like transportation have changed monthly and yearly. High inflation devalues the dollar so the currency is able to buy less and less.
{% endif %}


1. In developing tt_3
, we suggested the block of code
if "`by'" == "" {
/* issue an error message, such as: */display as error "by() required" exit 198 }
to verify that by()
was specified. Explain the
significance of the double quotes around `by'
. (Hint:
Consider what would have happened if we had omitted the double quotes and if
(1) the user did not specify by()
and (2) the user did
specify by()
.)
We are to compare
if "`by'" == "" {
with
if `by' == "" {
I ask this question whenever the opportunity arises because I know from experience that this gives users problems. Finally, once they get it, they invariably say, "Oh, that's really easy. Why didn't you say so?" So, I will say so: this is really easy, especially if you understand simple algebra. If I show you the equation
x + 5 = 7
you have no trouble seeing that x = 2 and, more importantly, you still have no difficulty distinguishing the symbol x from the number 2. The answer to this question is much the same.
by
is the name of a macro and `by'
refers to the contents of the macro by
. by
corresponds to x and `by'
to 2.
In the context of our program, by
presumably contains
the name of a variable, so let's consider the two cases where `by'
is foreign
and `by'
is nothing.
When we type
if "`by'" == "" {
we ask the question whether the contents of the macro by
are literally nothing. If by
contains foreign
, which is to say, the letters
f-o-r-e-i-g-n, those letters are not the same as nothing. In that case, if "`by'" == ""
is false.
Now, consider what would happen if we omitted the double quotes. Were we to type
if `by' == "" {
and macro by
contained foreign
, the question becomes
if foreign == "" {
Read the statement as it is written. Stata will interpret foreign
as the name of a variable and, in particular, will
consider whether the first observation of variable foreign
is "". If variable foreign
is not a string variable—it is not in the automobile data—this is a
type-mismatch error. If variable foreign
is a string
variable, the statement is not an error, but it is not the question we intend
to ask because, right now, we are merely trying to determine whether the macro
by
contains anything.
Now, pretend by
contains nothing. The question we wish to ask is
if "`by'" == "" {
which substitutes
if "" == "" {
and would be evaluated as true. The macro by
contains
nothing. Had we left off the double quotes, we would have
if `by' == "" {
which becomes
if == "" {
and that is a plain syntax error.
To review, when we want to treat the contents of the macro by
, which is to say, `by'
, as a
string—to examine the contents itself—we must refer to "`by'"
, which is a string. When we want `by'
treated as a variable or something else, we refer to
`by'
.
2. Write the command
mygg yvar xvar [if exp] [in range]
So, here's my mygg.ado
file:
| ADO-FILE: mygg.ado (Q.2) |
|---|
|
To address the warnings, my program will produce reasonable error messages if too few or too many variables are specified because I declared
syntax varlist(min=2 max=2) [if] [in]
^^^^^^^^^^^^^
meaning there must be exactly two variables specified.
My program will respect whatever if exp
and in range
the user specifies, if any, because I
remembered to put `if' `in'
at the end of all the
commands that worked on the data, namely the regress
,
the predict
, and the scatter
.
3. Modify mygg
to allow
mygg yvar xvar [if exp] [in range]
[, saving(filename[,replace]) ]
The saving()
option is scatter
's saving option.
I add a few lines and modify another:
| ADO-FILE: mygg.ado (Q.3) |
|---|
|
The first thing I had to do was allow the saving()
option. This I did by coding
syntax varlist(min=2 max=2) [if] [in] [, SAVing(passthru) ]
After the syntax
command, macro saving
contains either nothing or whatever the user typed.
Pretend the user specified saving(myfile)
; then, macro
saving
contains saving(myfile)
. If the user typed saving("my dir\my file", replace)
, then macro saving
contains saving("my dir\my file",
replace)
, quotes and all.
The final step was to add `saving'
to the end of my scatter
command:
scatter `y' `hat' `x' `if' `in', c(. l) m(O i) sort `saving'
4. Modify mygg
to have the syntax
mygg yvar xvar [if exp] [in range]
[, quad saving(filename[,replace]) ]
If quad
(abbreviation q
) is
specified, a quadratic rather than a straight line is to be drawn through the
points. By quadratic, we mean to fit the regression y = c + b*x + d*x^2.
Before you write the program, the first step is to determine what it is you
will be coding. If the user does not specify quad
,
the logic will be as before:
.regress
lhsvar rhsvar .predict
workvar .scatter
lhsvar workvar rhsvar, c(. l) sort m(O i)
If the user does specify quad
, the logic will be
.gen sqvar
= rhsvar^2 .regress
lhsvar rhsvar sqvar .predict
workvar .scatter
lhsvar workvar rhsvar, c(. l) sort m(O i)
The corresponding code is
| ADO-FILE: mygg.ado (Q.4) |
|---|
|
That is, I add the option quad
by declaring
syntax varlist(min=2 max=2) [if] [in] [, SAVing(passthru) Quad]
After the syntax
command, the macro quad
contains either nothing (meaning quad
was not specified) or quad
(meaning quad
was specified). When I get to running
the regression, I ask myself whether quad
was
specified and, if so, generate
an `x'
squared variable and run the regression on `x'
and `x2'
. Otherwise, I do just
as before and run `y'
on `x'
.
In the tempvar
statement I added x2
,
tempvar pred x2
even though I might never use x2
. That is fine, and
there is no cost to doing that. tempvar
does not
create the temporary variable. It merely provides a name in case I want to
create a temporary variable later.
5. Assume that you often estimate regressions that include quadratic terms. For instance, one day you might be analyzing wages and estimate
ln(wage) = c + b*age + a*age^2 + d*educ + u
and another day be looking at the automobile data and estimate
mpg = c + b*weight + a*weight^2 + d*foreign + u
Anyway, you often have terms like X and X^2. Suppose that you wish to write a program to help you interpret such regressions. You would like the program to report
Write program equad
to do this. equad
is to have syntax
equad
varname1 varname2 [if exp] [in range]
where varname1 is the name of the X variable and varname2 the name of the X^2
variable. equad
is for use after regress
or any other estimation
command.
Hint: As a reminder, if X is the name of a variable in an estimated model,
the coefficient can be obtained as _b[X]
. For instance, if I
. gen weight2 = weight^2
. regress mpg weight weight2 foreign
the coefficient on weight is _b[weight]
. The intercept
(coefficient on the constant) is _b[_cons]
.
In my version of equad
, I obtained the following
output after running the indicated regression on the automobile data:
. equad weight weight2
1.591e-06*weight2 + -.01657294*weight + 56.538839
min: weight= 1760 effect= 32.29922
max: weight= 4840 effect= 13.59953
turning point: weight= 5207.837 effect= 13.38425
By the way, the formula for the "turning point", the point at which a*X^2 + b*X + c achieves a minimum or maximum, is X = −b/2a.
The parsing for this command is
syntax varlist(min=2 max=2) [if] [in]
tokenize `varlist'
After this, I can refer to the X and X2 variables as `1'
and `2'
. I personally do not
like casting my programs in terms of things like `1'
and `2'
because it makes them difficult to read, so
the next thing I will do is create macros with more mnemonic names:
local X "`1'"
local X2 "`2'"
There is nothing subtle here; I just created two new macros named X and X2 that
contain the same thing as `1'
and `2'
. From now on, I can refer to `X'
for the X variable and `X2'
for
the X2 variable.
Along the same lines, I will define three more macros to improve readability:
local a "_b[`X2']"
local b "_b[`X']"
local c "_b[_cons]"
Now, I can think of the quadratic as being a*X2 + b*X + c, although I must
remember to include the single quotes. It will be much easier to type
`b'
rather than _b[`X']
when I need the coefficient on X.
I emphasize that this step of creating macros for readability is not something I am doing just because this is a course. I do this in my own (real) work. Introducing a few extra macros may seem unnecessary, but I find I make fewer errors when I have convenient and readable shorthands.
So, at this point, my program reads
program define equad
syntax varlist(min=2 max=2) [if] [in]
tokenize `varlist'
local X "`1'"
local X2 "`2'"
local a "_b[`X2']"
local b "_b[`X']"
local c "_b[_cons]"
and I am ready to begin. The necessary calculations are easy, so let's get them out of the way:
qui summ `X' `if' `in'
local xmin = r(min)
local xmax = r(max)
local x0 = -`b'/(2*`a')
local ymin = `a'*(`xmin')^2 + `b'*(`xmin') + `c'
local ymax = `a'*(`xmax')^2 + `b'*(`xmax') + `c'
local y0 = `a'*(`x0' )^2 + `b'*(`x0' ) + `c'
Summarizing `X'
will get the minimum and maximum X
values. Obtaining the X value corresponding to the minimum or maximum of the
quadratic is a simple formula, and then I calculate the Y values corresponding
to each of the X values.
All that is left is to display the results:
di " min: `X'=" %9.0g `xmin' " effect=" %9.0g `ymin'
di " max: `X'=" %9.0g `xmax' " effect=" %9.0g `ymax'
di "turning point: `X'=" %9.0g `x0' " effect=" %9.0g `y0'
So, my completed program reads
| ADO-FILE: equad.ado (Q.5) |
|---|
|
I added one small thing in this final version. equad
displays the quadratic under consideration just to remind me what I, as an
equad
user, specified and, as a programmer, to prove
that I have defined everything correctly. That is the line that reads
di `a' "*`X2' + " `b' "*`X' + " `c'
^^^ ^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^
What I put inside and what outside double quotes may be confusing, so let me
expand the line for you (assume `X'
contains weight
and `X2'
contains weight2
):
di _b[weight2] "*weight2 + " _b[weight] "*weight + " _b[_cons]
^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^
Does that help? Actually, I do not think of it in this way. I just think that
`a'
, `b'
, and `c'
contain something that, when evaluated (i.e., outside
double quotes), equals the coefficients, and that `X'
and `X2'
contain the variable names (meaning that if I
want to display the names themselves, I enclose them in double quotes).
6. Pretend that you have not yet estimated a regression but
mistakenly think that you have. Does your equad,
program produce a
reasonable error message? Why or why not? (Hint: You can type discard
to make Stata forget previous estimation results, so you could experiment by
typing discard
followed by equad weight weight2
.)
Let's try the suggested experiment:
. discard
. equad weight weight2
_coef[weight2] not found r(111);
That's not too bad. The important thing is that our program is safe. Since it
refers to _b[X]
and _b[X2]
if
the user has not run the appropriate regression, our program will refuse to run
and the user will not be misled. If we wanted a better error message, we might
modify our code to include
capture local junk = `a' + `b'
if _rc {
error 301
}
Remember, `a'
contains _b[`X2']
and `b' _b[`X']
in my
shorthand. In your program, you might need to code something like
capture local junk = _b[`X2'] + _b[`X']
or something else. It is not important that I am summing the coefficients; I
just wanted to do something that used both of them so that local junk = ...
would produce an error if either
coefficient did not exist. Then, I caught the error code and took my own
action. I chose to display error 301
, meaning produce
the standard error message for rc=301 and stop the program. I just happened to
remember that 301 is Stata's code for last estimates not found
, and that
seemed particularly appropriate. (You can look in
[P] error
for a full listing of Stata's error codes.)
7. Modify equad
to display the turning point on the
correct line relative to the min and max lines. For instance, using the
automobile data, if I
. gen weight2 = weight^2
. regress mpg weight weight2 foreign
. equad weight weight2
1.591e-06*weight2 + -.01657294*weight + 56.538839 min: weight= 1760 effect= 32.29922 max: weight= 4840 effect= 13.59953 turning point: weight= 5207.837 effect= 13.38425
it just so happens that the turning point appears on the third line, which I like. On the other hand, if I run the same regression on price,
. regress price weight weight2 foreign
. equad weight weight2
.0011211*weight2 + -3.7145739*weight + 5526.6637
min: weight= 1760 effect= 2461.738
max: weight= 4840 effect= 13810.61
turning point: weight= 1656.662 effect= 2449.766
I would prefer the turning point line appear before the min and max lines because weight = 1656.662 < 1760 = minimum value of weight. In some other example, if the turning point weight were between 1760 and 4840, I would like the turning point line to appear between the min and max lines.
This is just a simple modification of our program:
| ADO-FILE: equad.ado (Q.7) |
|---|
|
The modifications are at the end:
if `x0'<`xmin' {
...
}
else if `x0'>`xmax' {
...
}
else {
...
}I
8. Sometimes I want equad
to report effects, including
the constant, and other times I do not. That is, sometimes I want predicted
effects calculated as a*X^2 + b*X + c, and other times I merely want the
calculation made a*X^2 + b*X. Modify equad
to have a nocons
option:
equad
varname1 varname2 [if exp] [in range] [, nocons]
This is an easy modification to my program, and I did not cheat by knowing I
was going to ask this question when I wrote my earlier answer. I write the
questions and the answers at the same time and did not know I was going to ask
for this generalization until I had tried equad
. I
then decided this would be a useful addition.
No matter how you wrote your code, the modification necessary to handle the
parsing of the option is easy; modify the syntax
line to read
syntax varlist(min=2 max=2) [if] [in] [, noCons]
equad
now allows the nocons
option (abbreviation noc
). It just does not do
anything with it yet.
In my case, I had the easy-access macros `a'
, `b'
, and `c'
,
which I set up to refer to the coefficients. Early in my code I had the line
local c "_b[_cons]"
and I just changed this to read
if "`cons'"=="" { /* meaning -nocons- NOT specified */
local c "_b[_cons]"
}
else local c 0
I bet that in your code you did not have this shorthand. If you did not, that means that later in your code you had the equivalent of
local ymin = _b[`X2']*(`xmin')^2 + _b[`X']*(`xmin') + _b[_cons]
local ymax = _b[`X2']*(`xmax')^2 + _b[`X']*(`xmax') + _b[_cons]
local y0 = _b[`X2']*(`x0' )^2 + _b[`X']*(`x0') + _b[_cons]
and so you could modify this to calculate `ymin'
,
`ymax'
, and `y0'
differently
according to `nocons'
:
if "`cons'" == "" {
local ymin = _b[`X2']*(`xmin')^2 + _b[`X']*(`xmin') + _b[_cons]
local ymax = _b[`X2']*(`xmax')^2 + _b[`X']*(`xmax') + _b[_cons]
local y0 = _b[`X2']*(`x0' )^2 + _b[`X']*(`x0') + _b[_cons]
}
else {
local ymin = _b[`X2']*(`xmin')^2 + _b[`X']*(`xmin')
local ymax = _b[`X2']*(`xmax')^2 + _b[`X']*(`xmax')
local y0 = _b[`X2']*(`x0' )^2 + _b[`X']*(`x0')
}
Or perhaps you never stored `ymin'
, `ymax'
, and `y0'
but simply
calculated them on the fly in your display
statement.
That would just mean that you would have the if "`cons'" ==
""
farther down in your code.
Anyway, here's my code:
| ADO-FILE: equad.ado (Q.8) |
|---|
|


?7
8
9
The
New
York
copyright
reserved
Botanical
Garden
FLORA
OF
PUERTO
RICO
UNIVERSIDAD
DE
PUERTO
RICO
-
RIO
PIEDRAS
(UPRRP)
Polypremum
procumbens
L.
manat
I
"¥
Bo.
Tierras
Saliente,
sandy
Tortuguero.
Scrub
and
grassland
on
C.
1
m.
18¡27.08*N
66*26.52*W.
Prostrate
herb,
white
fl.
area
S
of
Laguna
sandy
soil.
Elev
IMAGED
11
Feb
1994
F.
Axelrod
7477
A.
Comas
Yo^
BOTANICAL
s^ARDE*^
LOGANIACEAE
NEW
YORK
BOTANICAL
GARDEN
00843190
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


ppmtoneo(1) ppmtoneo(1) NAME ppmtoneo - convert a portable pixmap into an Atari Neochrome .neo file SYNOPSIS ppmtoneo [ppmfile] DESCRIPTION Reads a portable pixmap as input. Produces an Atari Neochrome .neo file as output. SEE ALSO neotoppm(1), ppm(5) AUTHOR Copyright (C) 2001 by Teemu Hukkanen<EMAIL_ADDRESS>based on ppmtopi1 by Steve Belczyk<EMAIL_ADDRESS>and Jef Poskanzer. 24 April 2001 ppmtoneo(1)


A thorough study of the performance of Pandas vs Numpy in diverse scenario. The author shares a Benchmark class that he used as well as the conclusions of this investigation. And it's quite a mess. For instance, you should use df.sum() instead of np.sum(). But for sorting, you better use np.sort() instead of df.sort_item() (the difference is huge, up to 5x...). Interesting read if you want to optimise your data processing performance.
This paper proposes a novel context-assisted single shot face detector, named PyramidBox, to handle the hard face detection problem. Observing the importance of the context, we improve the utilization of contextual information.
IMPRESSIVE face detector!!!
A study (all in visualisation) on how skin color and gender affects the quality of ouputs. Microsoft seems to be the one which has the less bias (even though it has some).
By the authors of the famous Mask R-CNN repo. This post gives an overview of Mask RCNN and indications on how to train a Mask RCNN model from scratch. It also shows you how to create a dataset for instance segmentation. In particular, I was impressed to see that he needed only 75 images to get a decent ballon detection system (the original model was pretrained on COCO).
The details of an implementation of an online service for style transfer. The particularity of this project is that it is (mostly) serverless. The post is very well documented, providing all the finest details of the implementation.
In our work we propose to learn image features by training ConvNets to recognize the 2d rotation that is applied to the image that it gets as input. We demonstrate both qualitatively and quantitatively that this apparently simple task actually provides a very powerful supervisory signal for semantic feature learning.
A very interesting idea to perform unsupervised learning. It sounds simple but it reportedly leads to strong performance.
It’s hard to explain to people who haven’t worked with machine learning, but we’re still back in the dark ages when it comes to tracking changes and rebuilding models from scratch. It’s so bad it sometimes feels like stepping back in time to when we coded without source control.
A statement in favor of better reproducibility in the field.
A small utility class to plot training curves in a notebook. Currently supports Keras and PyTorch. It's not ground breaking and will definitevely not compare with Tensorboard but it can be handy for small projects.
A blog post that introduces 4 major papers from Facebook Research in 2017. We have Feature Pyramid Networks for Object Detection, Focal Loss for Dense Object Detection, Mask R-CNN and Learning to Segment Everything. most of them were described in our reading groups (when Pouria came back from ICCV). I was excited to read this post but I'm quite disapointed overall. I'd say it's a good introduction if you want to understand the context of those papers but the explanations did not help me get a better understanding of the ideas presented in the papers...
An NLP study of 2 806 reviews on 930 ICRL papers. The author explores the language of reviews that tend to reject a paper of those that tend to accept it. While there is definitively a lot of work behind this study as well as nice web visualisation, it looks to me the conclusions are rather unsurprising (rejected papers will have negations in their reviews).
While training error of most deep neural networks degrades as the depth of the network increases, residual networks appear to be an exception. We show that the main reason for this is the Lyapunov stability of the gradient descent algorithm: for an arbitrarily chosen step size, the equilibria of the gradient descent are most likely to remain stable for the parametrization of residual networks.
In this work we explore an alternative way of identifying a target object, namely by employing language referring expressions. Besides being a more practical and natural way of pointing out a target object, using language specifications can help to avoid drift as well as make the system more robust to complex dynamics and appearance variations.
I really love this ambitious idea that facilitates the labelling of videos.
We present Dynamic Sampling Convolutional Neural Networks (DSCNN), where the position-specific kernels learn from not only the current position but also multiple sampled neighbour regions. During sampling, residual learning is introduced to ease training and an attention mechanism is applied to fuse features from different samples. And the kernels are further factorized to reduce parameters.
ApolloScape was released under Baidu’s autonomous driving platform Apollo, which Baidu hopes will become “the Android of the auto industry.” Apollo gives developers access to a complete set of service solutions and open-source codes and can enable for example a software engineer to convert a Lincoln MKZ into a self-driving vehicle in about 48 hours.
This paper proposes an efficient, automated physically-based augmentation pipeline to vary sensor effects -- specifically, chromatic aberration, blur, exposure, noise, and color cast -- across both real and synthetic imagery.
This paper explores new sets of data augmentation where we try to simulate camera artefacts that can arise in the wild.
A pytorch implementation of last week's paper Averaging Weights Leads to Wider Optima and Better Generalization.
A very short read that gives some ideas onhow we can try to plot a multi-dimensional surface back to 2d.
An alternative to batch norm which does not suffer from performance drop when using a small batch size.
In this paper, we offer a better theoretical understanding of GANs by analyzing some of their mathematical and statistical properties. We study the deep connection between the adversarial principle underlying GANs and the Jensen-Shannon divergence, together with some optimality characteristics of the problem.
AI2 is a sound and scalable analysis framework for proving robustness of deep neural networks. It supports networks with convolutional, max-pooling, and fully-connected layers.
The abstract is promising. See the website for a visualisation of their algorithm.
A blog post that serves as tutorial to introduce a service the author created: Data Version Control. It seems to be a sort of plug in to Git,... made to work with data and to facilitate reproducibility. The post (and the product) are clearly targeted towards data science so I'm not sure to what extent this might concern us.


You can (should!) test your own matchers
public function test_it_can_determine_if_router_has_a_given_route()
{
$router = new Router(
resolve(Dispatcher::class), resolve(Container::class)
);
$router->get('/', function () {})->name("foo.bar");
assertThat($router, hasRoute("foo.bar"));
}
public function test_exception_message_contains_correct_router_description_with_no_routes()
{
$this->expectException(AssertionError::class);
$this->expectExceptionMessageRegExp("/router has no routes/");
$router = new Router(
resolve(Dispatcher::class), resolve(Container::class)
);
assertThat($router, hasRoute("foo.bar"));
}


Derek Eder
@derekeder
RT @KimCrayton1: This statement from @basecamp's leadership is one we heard from @coinbase and others will follow
The push to turn back; t…
4/26/2021, 4:24:24 PM
Favs: 0
Retweets: 0
link← @derekeder Twitter archive
Derek Eder
@derekeder
RT @KimCrayton1: This statement from @basecamp's leadership is one we heard from @coinbase and others will follow
The push to turn back; t…
4/26/2021, 4:24:24 PM
Favs: 0
Retweets: 0
link


Main Menu
Page One
Page Two
Also View:
View Last 20 Visits
Url Analysis for Page One
User-Agent Analysis for Server


Living Room
-
-
Kitchen
-
Bedroom
-
Bathroom
New Fall Collection
Check out our brand new fall items!
-
FREE SHIPPING
On everything over $50.
-
AMAZING DEALS
Save up to 70% on high-quality furniture.
-
TOP CUSTOMER SERVCE
We're glad to help you pick the best item.


class: center, middle, inverse, title-slide # Introduction to Data Science ## Workshop 8. Categorical Variables with forcats ### Zaira Gonzalez Mora & Luka Vasilj ### Hertie School | Berlin, Germany --- class: inverse, center, middle # Welcome to your workshop on
 # Categorical Variables with *forcats*!

 --- # What are we covering in this workshop ✅ .pull-left-wide[ 1. [Introduction](#introduction) 2. [Categorical Data](#categoricaldata) 3. [Factors](#factors) 4. [**`forcats`**!](#forcats) 5. [Some useful functions from **`forcats`** + examples](#functions) * [`factor()`](#factor) * [`as_factor()`](#factor) * [`fct_relevel()`](#relevel) * [`fct_count()`](#count) * [`levels()`](#levels) * [`fct_reorder()`](#reorder) * [`fct_collapse()`](#collapse) * [`fct_lump()`](#lump) 6. [Summary](#summary) ] --- name: introduction # Introduction 🤓 By now, we already know that **data cleaning** is important. We have realized that treating certain variables is not always so straightforward, and we worry because we know that an inadequate treatment of variables can impact our analysis. #### - How many times have you struggled when finding **categorical data** in your datasets? 😿

 #### - Do not worry! * In this workshop we will to show you how to work with **categorical data** using the **`forcats`** tool. * It will help you to work with **factors**. But more about about that in a minute. --- # Introduction 🤓 ### What do we need? * To install the **`forcats`** package in R.

 *OR* * You can also use **`forcats`** if you have installed the tidyverse. * Or the development version from GitHub: `devtools::install_github("tidyverse/forcats")`. --- class: inverse, center, middle name: categoricaldata # Categorical Data

 --- # Categorical Data 📈 ### What is categorical data? * A set or collection of **categorical variables**.
 ### What is a categorical variable? * Categorical variables are those that have a fixed and known set of possible values. * They assign each unit of observation to a particular group or nominal category. * Categorical variables can be used to represent different types of qualitative data. * Nominal: two or more categories with no particular order (yes/no, gender, ethnicity). * Ordinal: ordered or ranked categories (movie ratings, education degrees). * Interval: intervals between the values of the variable are equally spaced (temperature, weight). --- # Categorical Data 💹 ### Why can categorical variables be problematic? * They are often stored with different values in a dataset and we need to differentiate category numbers and category labels. * We need consistency to work with them properly. 😐 * Thus, we need to know their *true value* not to miss important information.

 --- class: inverse, center, middle name: factors # Factors

 --- # Factors 🔠 ### What are factors? * Factors are R's data structure for categorical data: **R represents categorical data with factors**. * A **factor** is an integer vector with a **levels attribute** that stores a set of mappings between integers and categorical values. [level: all possible 'categories' of a factor] * R displays not the integers from a variable, but the levels associated with them. ### Why are factors useful? * Factors in the R language allow you to treat character variables in a different way. * Factors could be easier to work with than characters. * Factors are helpful for reordering character vectors in a non alphabetical order and to improve display. * They allow you to inspect levels in a more detailed way. * Working with factors is a nicer alternative that working only with dummies. --- class: inverse, center, middle name: forcats # Hello *forcats*!

 --- # Hello *forcats*! 🐱 ### Nice Anagram, Hadley!

 --- # Hello *forcats*! 🐱 ### Factors in the concept of tidy data * The **`forcats`** package provides useful tools to solve problems with factors. * It is better to work with categorical data using tidyverse than with base R. We will see why!

 --- class: inverse, center, middle name: functions # *forcats*: some useful functions

 --- name: factor # Create a new factor: *factor()*, *as_factor()* ## **`factor()`** ### Description * Base R has its own function to create factors, **`as.factor()`**, which basically encodes a vector as a factor. However, this function lists the levels of the factors in alphabetical order, whereas we might need to order levels in a different way. * Instead of using base R, we can use the **`factor()`** function from **`forcats`**. * **`factor()`** will create an ordered factor with assigned levels. ## **`as_factor()`** * You can also convert an input to a factor with **`as_factor()`**. * When x is a character, **`as_factor()`** creates levels in the order in which they appear. * When x is numeric, the ordering is based on the numeric value. --- # Create a new factor: *factor()*, *as_factor()* #### Let's start from zero to show you how it works:
 ```r R> #Create vector R> eu_countries <- c("Poland", "Belgium", "Germany", "Malta", "Italy", "Spain", "Netherlands", + "Denmark", "Ireland", "Greece", "France", "Portugal", "Austria", + "Finland", "Cyprus", "Czechia", "Estonia", "Hungary", "Latvia", + "Lithuania", "Croatia", "Slovakia", "Slovenia", "Sweden", "Bulgaria", + "Luxembourg", "Romania") R> eu_countries ``` ``` ## [1] "Poland" "Belgium" "Germany" "Malta" "Italy" ## [6] "Spain" "Netherlands" "Denmark" "Ireland" "Greece" ## [11] "France" "Portugal" "Austria" "Finland" "Cyprus" ## [16] "Czechia" "Estonia" "Hungary" "Latvia" "Lithuania" ## [21] "Croatia" "Slovakia" "Slovenia" "Sweden" "Bulgaria" ## [26] "Luxembourg" "Romania" ``` --- # Create a new factor: *factor()*, *as_factor()* #### With the base R **`as.factor()`** function our output would be the following:
 ```r R> eu_countries_fct <- as.factor(eu_countries) R> R> eu_countries_fct ``` ``` ## [1] Poland Belgium Germany Malta Italy Spain ## [7] Netherlands Denmark Ireland Greece France Portugal ## [13] Austria Finland Cyprus Czechia Estonia Hungary ## [19] Latvia Lithuania Croatia Slovakia Slovenia Sweden ## [25] Bulgaria Luxembourg Romania ## 27 Levels: Austria Belgium Bulgaria Croatia Cyprus Czechia Denmark ... Sweden ``` --- # Create a new factor: *factor()*, *as_factor()* #### But... what if we want to see countries ordered by their year of accession to the EU? * Let's see how it would work with **`factor()`** ```r R> country_sample <- c(sample(eu_countries, 40, replace = T)) R> R> members <- c("Belgium", "France", "Germany", "Italy", "Luxembourg", "Netherlands", + "Denmark", "Ireland", "Greece", "Portugal", "Spain", "Austria", + "Finland", "Sweden", "Cyprus", "Czechia", "Estonia", "Hungary", "Latvia", + "Lithuania", "Malta", "Poland", "Slovakia", "Slovenia", "Bulgaria", + "Romania", "Croatia") R> R> factor(country_sample, levels = members) ``` ``` ## [1] Spain Slovakia Malta Estonia Germany Czechia ## [7] Latvia Finland Estonia Lithuania Bulgaria Luxembourg ## [13] Greece Latvia Italy Slovenia Bulgaria France ## [19] Czechia Netherlands Italy Denmark Finland Greece ## [25] Poland Austria Lithuania Slovakia Croatia Italy ## [31] Portugal Ireland Ireland Lithuania Malta Belgium ## [37] Italy Denmark Czechia Ireland ## 27 Levels: Belgium France Germany Italy Luxembourg Netherlands ... Croatia ``` --- name: relevel # Change levels of factors: *fct_relevel()* ## **`fct_relevel()`** ### Description * Factors in R come ordered and unordered. * Examples: small, medium, large (ordered); pen, brush, pencil (unorderded). * If the factor is ordered, then the specific order of the levels matters (small < medium < large). * If they're not, we need to determine the levels according our needs (maybe pencil, pen, brush?). * **`fct_relevel()`** is useful to manually change the order in which the levels of a factor will appear. --- name: count #Inspect factors: *fct_count()* ## **`fct_count()`** ### Description * This function is useful to count how many times each factor appears in a sample of data. * It counts the number of values with each level (count entries in a factor). * Usage: fct_count(f, sort = FALSE, prop = FALSE), where *f* is a factor. * If *sort* is TRUE, the most common values float to the top will be shown. * If *prop* is TRUE, the fraction of marginal table will be computed. --- #Inspect factors: *fct_count()* #### Following our example: ```r R> #Count the times the name of a country is repeated R> R> fct_count(country_sample) %>% + head(12) ``` ``` ## # A tibble: 12 x 2 ## f n ## <fct> <int> ## 1 Austria 1 ## 2 Belgium 1 ## 3 Bulgaria 2 ## 4 Croatia 1 ## 5 Czechia 3 ## 6 Denmark 2 ## 7 Estonia 2 ## 8 Finland 2 ## 9 France 1 ## 10 Germany 1 ## 11 Greece 2 ## 12 Ireland 3 ``` --- name: levels # Inspect factors: *levels()* ## **`levels()`** ### Description * **`levels()`** returns/set the levels of a factor. * This function allows to check all the levels that are stored in a factor, as not all factors might appear in a sample. Before counting with **`fct_count()`**, for instance, we might want to check this. For this part, we are going to use the **General Social Survey (GSS)** dataset, a product of the National Data Program for the social Sciences from the United States. * It contains demographic, behavioral, and attitudinal questions, plus topics of special interest from adults. * Among the topics covered are civil liberties, crime and violence, intergroup tolerance, morality, national spending priorities, psychological well-being, social mobility, and stress and traumatic events. * So, a lot of categorical data, right? * You can find it here: https://gss.norc.org/get-the-data --- # Inspect factors: *levels()* #### From our GSS data base, we want to see all the levels stored in the income factor: ```r R> levels(df$INCOME) ``` ``` ## [1] "LT $1000" "$1000 TO 2999" "$3000 TO 3999" "$4000 TO 4999" ## [5] "$5000 TO 5999" "$6000 TO 6999" "$7000 TO 7999" "$8000 TO 9999" ## [9] "$10000 - 14999" "$15000 - 19999" "$20000 - 24999" "$25000 OR MORE" ``` #### We also want explore the levels in the religion factor: ```r R> levels(df$RELIG) ``` ``` ## [1] "PROTESTANT" "CATHOLIC" ## [3] "JEWISH" "NONE" ## [5] "OTHER" "BUDDHISM" ## [7] "HINDUISM" "OTHER EASTERN" ## [9] "MOSLEM/ISLAM" "ORTHODOX-CHRISTIAN" ## [11] "CHRISTIAN" "NATIVE AMERICAN" ## [13] "INTER-NONDENOMINATIONAL" ``` --- name: reorder # Change the order of levels: *fct_reorder()* ## **`fct_reorder()`** ### Description * This function will reorder a factor based on the value of another variable, *i.e.*, it will reorder the levels by their relationship with that other variable. * The argument to use this function is **`fct_reorder(f, x, fun)`**, where *f* is the factor, *x* is the variable according to which the reorder is happening, and *fun* is the function to determine the reordering, with the median being its default. --- # Change the order of levels: *fct_reorder()* #### Let's see how it works.  --- # Change the order of levels: *fct_reorder()* #### Now, look what does **`fct_reorder()`** do: .pull-left[ ```r R> #Reorder plot! R> df_marriage <- df %>% + na.omit(MARITAL) %>% + group_by(MARITAL) %>% + summarize(age = mean(as.numeric(AGE), na.rm = T)) %>% + ggplot(aes(age, fct_reorder(MARITAL, age))) + + geom_point() ``` ] .pull-right[  ] --- name: collapse # Collapse levels: *fct_collapse()*, *fct_lump()* * **`forcats`** also allows to collapse factors into other factors. * This is particularly useful when a factor has too many levels, especially if the level of granularity is too high. ## **`fct_collapse()`** * This function collapses levels into manually defined groups. ## **`fct_lump()`** * This function lumps levels that do not appear in the top n = number of times into "Other" --- # Change the value of levels: *fct_collapse()* #### Consider the income variable from our GSS as an example:  --- # Change the value of levels: *fct_collapse()* #### It makes more sense to recategorize the data according to income classes so we use **`fct_collapse()`**: .pull-left-wide[ ```r R> df_brackets <- df %>% + mutate(income_brackets = fct_collapse(INCOME, + "low" = c("LT $1000", "$1000 TO 2999", "$3000 TO 3999", + "$4000 TO 4999", "$5000 TO 5999", "$6000 TO 6999", + "$7000 TO 7999", "$8000 TO 9999", "$10000 - 14999"), + "middle" = c("$15000 - 19999", "$20000 - 24999"), + "high" = c("$25000 OR MORE"))) ``` ] .pull-right-small[  ``` ] --- name: lump # Change the value of levels: *fct_lump()* #### OR other groupings of data ranges: <img src="./relig1.png" style="display: block; margin: auto;" /> --- # Change the value of levels: *fct_lump()* #### Lumping levels that appear below a minimum frequency together into a single factor .pull-left[ ```r R> df_relig_new <- df %>% + mutate(religion = fct_lump(RELIG, n = 4)) %>% + group_by(religion) %>% + ggplot(aes(x = religion)) + + geom_bar() + + theme(axis.text.x = element_text(angle = 90)) ``` ] .pull-right[  ] --- class: inverse, center, middle name: summary # Summary

 --- # Summary 📜 * Factors are R's data structure for categorical data. * Categorical data is a set or collection of categorical variables. * Categorical variables assign units of observation (levels) to a particular category. * Factors reorder character vectors in non alphabetical order and improve display. * They allow to inspect levels in a more detailed way. * The **`forcats`** package provides useful tools to solve problems with factors. --- # Summary 📃 ### Summary of **`forcats`** functions.

  Function 	  Description

  factor() 	  Creates an ordered factor with assigned levels

  as_factor() 	  Converts an input to a factor

  fct_relevel() 	  Reorders de the levels of a factor

  fct_count() 	  Counts entries in a factor

  fct_unique() 	  Removes duplicates

  levels() 	  Returns the levels of a factor

  fct_reorder() 	  Reorders a factor based on the value of another variable

  fct_collapse() 	  Collapses levels into defined groups

  fct_lump() 	  Lumps together factor levels into "Other"

 --- class: inverse, center, middle name: # Thank you! 👋

 ---


Referring to the (then) highest resolution photo of the Andromeda Galaxy:
Two things are amazing (to me) about this picture.
1) When you look up in the sky at the Andromeda Galaxy, your retina is absorbing photons that have been screaming through space for 2.5 million years. If you were on the Earth then, you'd be hanging out with Smilodon, the saber-toothed cat. For 2.5 million years, those photons were freely zooming through space and time, and when you see them, those photons are gone forever, their energy powering a chemical reaction in the rods and cones lining your retina that enables you to see them.
2) In about 3.75 billion years, the Andromeda Galaxy, currently zipping through space toward the Milky Way Galaxy at 110 km/s (nearly 70 miles per second, or about 250,000 MPH), will collide with and merge with our galactic home. It's unlikely anything would happen to the majority of planetary systems in either galaxy (there's a lot of empty space in there) -- but the night sky (not from Earth, we'd probably be cooked by the Sun by then) sure would be beautiful. And bright.
Scientists even proposed the name for the new galaxy: Milkomeda.
ref
"It takes great courage to see the world in all its tainted glory, and still to love it. And even more courage to see it in the one you love" -Oscar Wilde
ref


England in New Zealand: BJ Watling hits 205 as tourists face battle to save Test
by Jack Skelton| First Test, Bay Oval, Mount Maunganui, day four of five: |
| England 353 & 55-3: Santner 3-6 |
| New Zealand 615-9 dec: Watling 205, Santner 126, De Grandhomme 65 |
| England trail by 207 runs |
| Scorecard |
England face a tough battle to save the first Test against New Zealand after BJ Watling scored a superb double century on day four in Mount Maunganui.
Watling made 205 and Mitchell Santner hit 126 for his maiden Test century in a stand of 261 for the seventh wicket.
New Zealand declared just after tea on 615-9 - their highest score against England in Tests - leading by 262.
England were 55-3 at the close and will have to bat an entire day with just seven wickets in hand to force a draw.
Santner took all three wickets for just six runs, removing England openers Dom Sibley and Rory Burns before dismissing nightwatchman Jack Leach with the last ball of the day.
Replays suggested Leach had not nicked the ball to short leg, but he and Joe Denly had opted against a review, summing up a chastening day for the tourists.
With left-arm spinner Santner extracting turn on an otherwise docile pitch and England jaded after being kept in the field for 201 overs, New Zealand will be confident of securing a 1-0 lead in the two-match series on day five.
Tired England falter late on
Facing 28 tricky overs until the close, Burns and Sibley negotiated the first hour with relative ease, seeing off opening bowlers Trent Boult and Tim Southee and not falling for Neil Wagner's short-ball trap.
But just as England seemed on course to get through unscathed, Santner produced a canny spell that could prove decisive in securing a New Zealand win.
Testing the batsmen with drift and bounce, he saw Sibley dropped via an inside edge by Watling and a diving Southee put down Burns but neither England opener could add to their total before they were dismissed.
Sibley pushed at a wide one to be caught behind for 12 before a bogged down Burns miscued a sweep shot trying to rotate the strike and was caught by Colin de Grandhomme for 31.
Tom Latham then took a one-handed diving catch as Leach prodded uncertainly and was given out despite the ball appearing to only deflect off the pad, leaving England to rue not using a review.
That England's concentration faltered late on was perhaps not surprising given they had been worn down in the field.
Despite an improved bowling performance, the damage had been done on day three as a tired attack could only muster one wicket in the first two sessions, with this now the sixth time in England's last 24 overseas Tests that they have conceded 600 or more.
Watling and Santner give England masterclass
England have struggled to make imposing totals on overseas tours in recent years and here Watling and Santner showed them exactly how to, with an immaculate approach to batting on a flat, slow pitch.
Both continued to eschew flamboyant shots in the morning session as they ground out singles to establish a healthy lead of 99 at lunch and only then did they start to attack.
Where England thought they had earned the right to play more expansively at 277-4 and slipped to a disappointing 353 all out, Watling and Santner showed the virtue of doing so when the bowlers have been totally ground down as they added another 138 runs by tea.
Watling tapped his way to 150 before ramping a Jofra Archer short ball over third man for six, while Santner targeted fellow slow left-armer Jack Leach, using his feet superbly to loft several sixes down the ground.
Santner scampered two to fine leg to bring up a fine century off 252 balls - his restrained celebration reflecting his admirable discipline after struggling early in his innings.

Kane Williamson allowed his tailenders to tee off and punish England a while longer before calling them in on 615-9, far surpassing their previous highest score against England, the 551-9 at Lord's in 1973.
'We need to show a lot of character' - reaction
Ex-England batsman Mark Ramprakash on Test Match Special: "It was always going to be a tough ask for England, given the fatigue factor. The two openers seemed to negotiate the opening burst pretty well, they looked very calm.
"But it was the introduction of Mitchell Santner that made the difference. He's not a big spinner of the ball but he's tall and gets extra bounce. I think that bounce troubled Rory Burns and led to his dismissal.
"England have to be able to rotate the strike but also back their defence for long periods of time. Burns was trying to rotate the strike but he got a top edge."
Former England bowler Steven Finn: "This is an opportunity for England's batsmen to keep their side in the series tomorrow [Monday]."
England batsman Jos Buttler: "The pitch is starting to create rough. There's a few cracks but I still think it's a pretty good wicket. If you can get through the odd ball that does something, it's still a decent wicket.
"I'm sure the Kiwi seamers will try to get extra bounce out of the wicket. We need high skill levels and a lot of character and this side has got that in abundance."


Few surprises as McCarthy names Irish side to face Denmark
Alan Browne and Conor Hourihane both start as the manager makes three changes from the side that lost in Geneva.
by Gavin CooneyMICK MCCARTHY HAS reverted to the tried and trusted as he has named his side to face Denmark in tonight’s decisive Euro 2020 qualifier.
There are three changes from the side that lost in Switzerland last month, with Conor Hourihane returning to the side alongside David McGoldrick. Matt Doherty replaces the suspended Seamus Coleman.
Alan Browne keeps his place, and he is likely to line up on the right of the front three with Hourihane slotting into midfield. Formation-wise, it looks like a 4-5-1/4-3-3 from Ireland.
The team in full:
Randolph; Doherty, Dufy (captain), Egan, Stevens; Whelan, Hendrick, Hourihane; Browne, McGoldrick, McClean.
Troy Parrott and Jack Byrne are among the substitutes, with only Callum O’Dowda and Scott Hogan missing out on the matchday squad.
Denmark, meanwhile, also make three changes from the side that battered Gibraltar 6-0 ahead of this game. Dalsgaard, Poulsen and Cornelius return for a side captained by Simon Kjaer but likely to be inspired by Christian Eriksen.
Schmeichel; Dalsgaard, Jorgensen, Kjaer, Styger Larsen; Schone, Delaney; Poulsen, Eriksen, Braithwaite; Cornelius
The permutations for tonight are straightforward. Ireland must win to qualify from the group, while a draw will be enough to qualify Denmark. Both sides are guaranteed a place in the Nations League play-offs regardless of tonight’s result, although qualifying via that route will require winning two, back-to-back games.
Mick McCarthy said yesterday that he hadn’t yet given the play-offs any thought, and that he “would prefer to get it done tonight.”
Kick-off at the Aviva Stadium is at 7.45pm.


Auto Bowling Scorecard
Frame 1
Ball 1
You Hit 1
Points Tracker
Final Score TBD
Note: Score will calculate bonus points for spare and strikes upon completion of the 10th frame.


Welcome to my bookstore
Id
Title
Price
Action
Create new book
English
Hebrew
×
Book Title
Book Price
Add a book picture
-
+
Submit


{extend, last} = require './helpers'
exports.Scope = class Scope
The Scope class regulates lexical scoping within CoffeeScript. As you
generate code, you create a tree of scopes in the same shape as the nested
function bodies. Each scope knows about the variables declared within it,
and has a reference to its parent enclosing scope. In this way, we know which
variables are new and need to be declared with var
, and which are shared
with external scopes.
Import the helpers we plan to use.
{extend, last} = require './helpers'
exports.Scope = class Scope
The root
is the top-level Scope object for a given file.
@root: null
Initialize a scope with its parent, for lookups up the chain, as well as a reference to the Block node it belongs to, which is where it should declare its variables, and a reference to the function that it belongs to.
constructor: (@parent, @expressions, @method) ->
@variables = [{name: 'arguments', type: 'arguments'}]
@positions = {}
Scope.root = this unless @parent
Adds a new variable or overrides an existing one.
add: (name, type, immediate) ->
return @parent.add name, type, immediate if @shared and not immediate
if Object::hasOwnProperty.call @positions, name
<EMAIL_ADDRESS>= type
else
@positions[name] = @variables.push({name, type}) - 1
When super
is called, we need to find the name of the current method we’re
in, so that we know how to invoke the same method of the parent class. This
can get complicated if super is being called from an inner function.
namedMethod
will walk up the scope tree until it either finds the first
function object that has a name filled in, or bottoms out.
namedMethod: ->
return @method if @method?.name or !@parent
@parent.namedMethod()
Look up a variable name in lexical scope, and declare it if it does not already exist.
find: (name) ->
return yes if @check name
@add name, 'var'
no
Reserve a variable name as originating from a function parameter for this
scope. No var
required for internal references.
parameter: (name) ->
return if @shared and @parent.check name, yes
@add name, 'param'
Just check to see if a variable has already been declared, without reserving, walks up to the root scope.
check: (name) ->
!!(@type(name) or @parent?.check(name))
Generate a temporary variable name at the given index.
temporary: (name, index) ->
if name.length > 1
'_' + name + if index > 1 then index - 1 else ''
else
'_' + (index + parseInt name, 36).toString(36).replace /\d/g, 'a'
Gets the type of a variable.
type: (name) ->
return v.type for v in @variables when v.name is name
null
If we need to store an intermediate result, find an available name for a
compiler-generated variable. _var
, _var2
, and so on…
freeVariable: (name, reserve=true) ->
index = 0
index++ while @check((temp = @temporary name, index))
@add temp, 'var', yes if reserve
temp
Ensure that an assignment is made at the top of this scope (or at the top-level scope, if requested).
assign: (name, value) ->
@add name, {value, assigned: yes}, yes
@hasAssignments = yes
Does this scope have any declared variables?
hasDeclarations: ->
!!@declaredVariables().length
Return the list of variables first declared in this scope.
declaredVariables: ->
realVars = []
tempVars = []
for v in @variables when v.type is 'var'
(if v.name.charAt(0) is '_' then tempVars else realVars).push v.name
realVars.sort().concat tempVars.sort()
Return the list of assignments that are supposed to be made at the top of this scope.
assignedVariables: ->
"#{v.name} = #{v.type.value}" for v in @variables when v.type.assigned


Reducer
public struct Reducer<StateType>
⚙ Reducer
is a pure function wrapped in a monoid container, that takes current state and an action to calculate the new state.
The Middleware
pipeline can trigger ActionProtocol
, and handles both EventProtocol
and ActionProtocol
. But what they can NOT do is changing the app state. Middlewares have read-only access to the up-to-date state of our apps, but when mutations are required we use the Reducer
function. Actually, it’s a protocol that requires only one method:
func reduce(_ currentState: StateType, action: Action) -> StateType
Given the current state and an action, returns the calculated state. This function will be executed in the last stage of an action handling, when all middlewares had the chance to modify or improve the action. Because a reduce function is composable monoid and also can be lifted through lenses, it’s possible to write fine-grained sub-reducer
that will handle only a sub-state
, creating a pipeline of reducers.
It’s important to understand that reducer is a synchronous operations that calculates a new state without any kind of side-effect, so never add properties to the Reducer
structs or call any external function. If you are tempted to do that, please create a middleware. Reducers are also responsible for keeping the consistency of a state, so it’s always good to do a final sanity check before changing the state.
Once the reducer function executes, the store will update its single source of truth with the new calculated state, and propagate it to all its observers.
-
Reducer initializer takes only the underlying function
(S, A) -> S
that is the reducer function itself.Declaration
Swift
public init(_ reduce: @escaping (StateType, ActionProtocol) -> StateType)
Parameters
reduce
a pure function that is gonna be wrapped in a monoid container, and that calculates the new state from the old state and an action.
-
Neutral monoidal container. Composing any monoid with an empty monoid should result in a function unchanged, regardless if the empty element is on the left-hand side or the right-hand side.
Therefore,
Reducer<StateType> <> empty == Reducer<StateType> == empty <> Reducer<StateType>
Declaration
Swift
public static var empty: Reducer<StateType> { get }
-
Monoid Append operation
Declaration
Swift
public static func <> (lhs: Reducer<StateType>, rhs: Reducer<StateType>) -> Reducer<StateType>
Parameters
lhs
First monoid
(S, A) -> S
, let’s call itf(x)
rhs
Second monoid
(S, A) -> S
, let’s call itg(x)
Return Value
a composed monoid
(S, A) -> S
equivalent tog(f(x))
-
A lenses method. The global state of your app is Whole, and the
Reducer
handles Part, that is a sub-state. So for example you may want to have agpsReducer
that knows about the followingstruct
:struct Location { let latitude: Double let longitude: Double }
Let’s call it
Part
. Both, this state and its reducer will be part of an external framework, used by dozens of apps. Internally probably theReducer
will receive some knownActionProtocol
and calculate a new location. On the main app we have a global state, that we now callWhole
.struct MyGlobalState { let title: String? let listOfItems: [Item] let currentLocation: Location }
As expected,
Part
is a property ofWhole
, maybe not directly, it could be several nodes deep in the tree.Because our
Store
understandsWhole
and ourgpsReducer
understandsPart
, we mustlift(_:)
theReducer
to theWhole
level, by using:let globalStateReducer = gpsReducer.lift(\MyGlobalState.currentLocation)
Now this reducer can be used within our
Store
or even composed with others. It also can be used in other apps as long as we have a way to lift it to the world ofWhole
.Declaration
Swift
public func lift<Whole>(_ substatePath: WritableKeyPath<Whole, StateType>) -> Reducer<Whole>
Parameters
substatePath
the keyPath that goes from
Whole
toPart
Return Value
a
Reducer<Whole>
that mapsWhole
toPart
and vice-versa, by using the key path.


July 5, 2021
What is Emotional Intelligence?
Emotional intelligence (EQ) is the ability to pick up on signs, control your own and evaluate how to act on emotions. It is an important part of life and research shows it to be a large factor in the ability to be hired and improve your career. Some people may innately have more capability than others but it is a skill that can be trained with practice.
How is it different to IQ?
Unlike EQ, IQ is based on one’s ability to learn, understand and apply information to skills such as word comprehension and mathematics. It is all about cognitive functionality.
EQ identifies people with leadership/teamwork skills or who have social challenges.
Why is it important?
Emotional intelligence is important for our success in life and our own wellbeing. Emotions left unchecked lead to imbalance and we lose our control over where our mindset sits. If we are able to identify and control what we feel, we can set ourselves in a positive state. Good leaders can empathize and understand the people around them and help them also achieve this state.


virtual shredder
`Prev `__
V
`Next `__
--------------
**virtual shredder**: n.
The jargonic equivalent of the `*bit bucket* <../B/bit-bucket.html>`__
at shops using IBM's VM/CMS operating system. VM/CMS officially supports
a whole bestiary of virtual card readers, virtual printers, and other
phantom devices; these are used to supply some of the same capabilities
Unix gets from pipes and I/O redirection.
--------------
+------------------------------------+----------------------------+--------------------------+
| `Prev `__ | `Up <../V.html>`__ | `Next `__ |
+------------------------------------+----------------------------+--------------------------+
| virtual reality | `Home <../index.html>`__ | virus |
+------------------------------------+----------------------------+--------------------------+


Mr. Roboger's Neighborhood
Please enter a number here:
Please enter your name:
Get Result
Reverse Result
The result is:
The reverse result is:
Please, enter the number greater or equal 0.
Please, enter your name.


Reddit - Easy Giveaway
Copy the url of your giveaway post in here:
Go!
GitHub Project
· Version 0.1 · Created & Maintained by
Colin Frick
Cancel
Loading content...
45% Complete
Pick random winner from selected entries


2 references to New
System.Management.Automation (2)
engine\InitialSessionState.cs (1)
2814
var userDriveInfo = initializedRunspace.ExecutionContext.SessionState.Drive.
New
(newDriveInfo, null);
help\UpdatableHelpSystem.cs (1)
1639
cmdlet.SessionState.Drive.
New
(mappedDrive, "local");


Press|FAQ
NOTE: This is a test page and uses a test directory. Availability as shown here is NOT representative of the real registration status of a name.
Choose your cloud name


{% extends 'flask_user/public_base.html' %} {% block content %} {% from "base_templates/form_macros.html" import render_field, render_file_field, render_submit_field with context %} {% if fields %}
{{ word('Here is the start of a question you can use to assemble the PDF by filling form fields.') }}
{{ fields }}{% endif %}


***********************************************************
Free Shipping On Everything. Limited Time Only.
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo16d?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
***********************************************************
Best. Weekend.  Rock Your $$ Off With…
25 To 50% Off Everything
Exclusions Apply.
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo16l?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Shop Men
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo12b?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Shop Women
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo13b?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Shop Shoes
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo11b?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
***********************************************************
Free Shipping On Everything. Limited Time Only.
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo16p?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
***********************************************************
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo23?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Forward
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo8?RAF_TRACK=&AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Become A Fan On Facebook
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo21?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Follow Us On Twitter
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo24?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Instagram
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo6?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Pinterest
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo22?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
shopkick
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo1?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
***********************************************************
Mobile Messages
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo7?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Come Hang Out…Find A Store
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo20?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
The AE App
Download Now
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo18?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Earn Up To 40% Off
Sign Up For AEREWARDS
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo19?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
***********************************************************
Automatic free shipping valid for orders placed
beginning September 26, 2013, at 6:00 am EDT through October 31, 2013 at
11:59 PM PDT, and shipping to U.S. & Canadian addresses. Offer not valid
on international orders. This offer is good for U.S. standard shipping
within 3 to 7 business days pending credit approval and authorization.
Orders to Canadian addresses will be shipped via Canada post within 6 to
10 business days to urban areas and 15 to 22 business days to rural
areas. This free shipping offer can be combined with other discount
offers. No discount code is required at the ae.com, aerie.com, or
aeofactorystore.com shopping bag. Not applicable toward previously
purchased merchandise. All deliveries are pending credit approval,
merchandise availability, delivery and weather conditions. Free shipping
promotion and associated terms & conditions subject to change at AE’s
sole discretion.
Beginning October 4, 2013 at 6:00 A.M. EDT through October 6, 2013 at
11:59 P.M. PDT receive $40 off your purchase of $125 or more, or $20 off
your purchase of $75-$124.99 when you enter the discount code 17539291
at the ae.com, aerie.com or aeofactorystore.com shopping bag or at AE,
Aerie or AEO Factory stores when presenting the printable coupon at
checkout. Valid in US and Canada stores only. Discount will apply when
threshold has been met and discount code 17539291 has been entered at
AE.com, Aerie.com and aeofactorystore.com shopping bag or coupon is
presented at (U.S. or Canada) store checkout. Discount applied to
merchandise only prior to sales tax and shipping & handling. This coupon
is not redeemable for cash, nor is it applicable toward previously
purchased merchandise. This discount offer cannot be combined with other
discount offers. Excludes merchandise from these brands: Bass, BC, Bed
Stu, Birkenstock, Clarks, Creative Rec, DV, Eastland, GOLA, Havaianas,
Keds, Matisse, Minnetonka, Mowgli Surf, New Balance, New Balance/PF
Flyers, Palladium, Pro Keds, Pura Vida, Reebok, Seychelles, Thorogood,
Tretorn, Tailgate, Timberland, Volley and College and Pro merchandise.
Discount promotion and associated terms and conditions subject to change
at AE’s sole discretion.
Beginning October 2, 2013 at 6:00 am EDT through October 8, 2013 at
11:59 pm PDT, get 25% to 50% off your AE purchase, only at ae.com. All
prices as marked, excluding AE Clearance 50% Off Shop items. This offer
can be combined with other discount offers. Discount applies to AE
merchandise costs only, not tax and shipping & handling costs. This
discount is not redeemable for cash, nor applicable toward previously
purchased merchandise. Excludes AE Stores, AE Clearance 50% Off Shop,
Aerie merchandise, AEO Factory Store merchandise, and merchandise from
these brands: Bass, BC, Bed Stu, Birkenstock, Clarks, Creative Rec, DV,
Eastland, GOLA, Havaianas, Keds, Matisse, Minnetonka, Mowgli Surf, New
Balance, New Balance/PF Flyers, Palladium, Pro Keds, Pura Vida, Reebok,
Seychelles, Thorogood, Tretorn, Tailgate, Timberland, Volley and College
and Pro merchandise. Discount promotion and associated terms and
conditions subject to change at AE’s sole discretion.
© 2013 AEO MANAGEMENT CO. ALL RIGHTS RESERVED.
***********************************************************
Update Your Email Address:
<EMAIL_ADDRESS>Sign Up For Email:
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo17?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Privacy Policy:
http://e.ae.com/a/tBSTsw5B7uylYB81jUINuZn6SMQ/aeo15?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Add<EMAIL_ADDRESS>to your address book.
Our mailing address: 77 Hot Metal Street, Pittsburgh, PA 15203