Design Criticisms
The idea for Mongrel2 is slightly controversial, but it has potential. Here's some criticisms about the proposed design, and I'm looking for more.
Criticism: Windows Registry
"Using sqlite for the config file will be like working with the windows registry."
Mongrel2 now has support for configuring itself from anything, including the default of a sqlite3 database. After a year of using Mongrel2 in production I can tell you this is freaking awesome.
Criticism: Config Files Are Better
I work in a fully automated developer operations world, and have found that no, configuration files are not better.  The rest of us generate them from a Chef or Puppet server and get on with our lives.
Criticism: It should be event based, not use coroutines or threads.
It is event based in that it uses kqueue/epoll/poll/select, but it abstracts the complexity of event systems away using coroutines. You get the best of both worlds.
Criticism: Flash sucks, use something else.
JSSockets work, and they're reliable. When WebSockets is established and in at least 2 browsers I'll add that as well. Mongrel2 works with long polling but it's not that big of a deal, it's just how Mongrel2 works.
We'll be also releasing a version with the latest "hybi" implementation of WebSockets because they don't suck.
Criticism: It needs to serve files.
It does serve files, and since obviously that's the first vanity metric everyone uses, it will serve them fast. It's just Mongrel2 will favor language agnostic applications over simple file serving. Actually, I'm not sure why people thought it wouldn't.
Criticism: People hate SQL and won't want to use it to configure Mongrel2.
They don't use SQL, they use a tool called m2sh or use any programming language they want with any database they want, even flat files.
Criticism: SQLite3 is not Diff/Git friendly so I can't use it.
The default m2sh command uses a config file, so diff away. If you want to then use only config files you can write a new backend that gets rid of sqlite3, or uses redis. Whatever you want.
Criticism: SQLite3 will be hard to change quickly so I'll be stuck in an emergency situation.
It's a SQL database, it's all about changes, and you won't use SQL directly, so this is just plain wrong. Not only will you be able to change it quickly, but you'll be able to replicate those changes to all your servers in one shot, roll them back, and lots of other great features.

No, it will obviously be for both, it'll just be focused on operations needs before developer needs.
Criticism: SQLite cannot handle hierarchical configs like in NGinx.
We have completely smashed this criticism in the face. We have working code that not only can load a full hierarchical config from SQLite, but also load it from anything else.


WebSite
Name
Home
Setting
Profile
Help
Fill the form Bellow
Complete the below form to get instant acces.
Chosse option
Bici
Moto
Send request


{% extends 'comment/email/base.html' %} {% comment %}Inspired from Daniel Rus Morales's django-comments-xtd: * https://github.com/danirus/django-comments-xtd{% endcomment %} {% comment %}Email template is used from: * https://github.com/leemunroe/responsive-html-email-template{% endcomment %} {% load i18n %} {% block content %}
{% trans "Hey there," %}
{% trans "You or someone on your behalf have requested to post a comment into this page:" %}
http://{{ site.domain }}{{ comment.content_object.get_absolute_url }}
{% blocktrans with posted_time=comment.posted %}at {{ posted_time }}.{% endblocktrans %}
{% trans "The comment:" %}
{{ comment.content }}
{% trans "If you do not wish to post the comment, please ignore this message or report an incident to" %} {{ contact }}. {% trans "Otherwise click on the button below to confirm the comment." %}
|
{% trans "If clicking does not work, you can also copy the below link and paste the address into your browser's address window" %}.
http://{{ site.domain }}{{ confirmation_url|slice:":40" }}...
{% trans "Thanks for your comment!" %}
------
{% trans "Kind regards," %}
{{ site }}


The Space Shuttle is a large, complex, manned spacecraft that is designed to carry people, satellites, probes, parts of space stations, or experiments into low-Earth orbit. It is re-usable and has flown many times.
Probes, on the other hand, are small, unmanned, robotic spacecraft that are sent to explore other moons, planets, or asteroids. There are many different types of probes, each designed for a specific mission. Probes are not re-usable and are destroyed or abandoned after they have completed their missions. Several examples of probes include the Galileo spacecraft, the Voyager spacecraft, the Mariner spacecraft, and the Mars Exploration Rovers Spirit and Opportunity.


1. Find a Good Vet The first place you and your new puppy should go together is, you guessed it, straight to the vet for a checkup. This visit will not only help ensure that your puppy is healthy and free of serious health issues, birth defects, etc., but it will help you take the first steps toward a good preventive health routine. If you don’t have a vet already, ask friends for recommendations. If you got your dog from a shelter, ask their advice as they may have veterinarians they swear by. Local dog walkers and groomers are also a great source of ideas.
2. Make the Most of Your First Vet Visit Ask your vet which puppy foods he or she recommends, how often to feed, and what portion size to give your pup.
3. Shop for Quality Food Your puppy’s body is growing in critical ways which is why you’ll need to select a food that’s formulated especially for puppies as opposed to adult dogs. Look for a statement from the Association of American Feed Control Officials (AAFCO) on the packaging to ensure that the food you choose will meet your pup’s nutritional requirements.
4. Establish a Bathroom Routine Because puppies don’t take kindly to wearing diapers, housetraining quickly becomes a high priority on most puppy owners’ list of must-learn tricks. According to the experts, your most potent allies in the quest to housetrain your puppy are patience, planning, and plenty of positive reinforcement. In addition, it’s probably not a bad idea to put a carpet-cleaning battle plan in place, because accidents will happen.
Ways to Dress Up Your Dog
1 Evening Wear A night on the town requires more than just a bit of fur. If you and your dog are heading out to a special event, don’t forget to get your pal in on the action by dressing them up in their own version of formal wear. Try a sparkly evening dress for the lady dog in your life and male dogs with jackets and ties can complete an evening. In addition, coats and tails are not just for humans as brides and grooms are beginning to pick their favorite dog for the task of their ring bearer or flower girl.
Coats and jackets While most dogs can handle a bit of inclement weather, every dog owner should have cold and wet weather gear handy. However, dog gear doesn’t just have to be about utility. Add a bit of sunshine to your dog’s dreary day with a jacket in a bright, singular color (such as a popular yellow or red) or select a puffy winter coat in a funky pattern. It will be sure to put a smile on others faces as they pass your pet by on your morning walk.
Boots and shoes Just like a jacket and coat, boots are a must when the weather is bad. Not only do they keep your dog from the elements, they also protect delicate paws from dangerous litter and salt. It may take some time for your pup to get used to the weight and the oddness of having a paw covered, but it certainly serves both a stylish and necessary function. Once the dog gets used to a boot, try adding on made-for-dog shoes. From cowboy boots to bunny slippers, your dog’s shoe closet may fill up faster than your own.
5 Ways to Cook for Your Dog on a Tight Budget
These treats and meals will help you get your feet wet in creating K-9 cuisine and help crank up your comfort in making homemade meals for your pooch. After all, when you have control of your dog's meal plan, you're in control of the ingredients—something many pet owners care about these days, given recent pet food recalls.  "While proteins, vitamins, and minerals provide the base for keeping our bodies going, it's the wider variety of proteins, phytochemicals, and antioxidants in fresh foods that determine the long-term shape of the health of us—and our pets," explains Rick Woodford, author of Feed Your Best Friend Better.
CHICKEN STOCK
While it's never a good idea to feed chicken bones to dogs, you can create a healthy, nourishing broth from a properly prepared chicken carcass. When making this stock for the dogs, you can pack it with flavors and use it as an excuse to clean out the fridge a bit. If you have saved other fruits and vegetables that are still fresh but not likely to be used in the next couple of days, go ahead and add a cup or two. Don't worry so much about precision—you never have to make the same stock twice because you may not be stocking the same ingredients in the fridge. The resulting stock will be rich with flavor, vitamins, and minerals, and can be used to moisten dry food or in any of the cookie recipes. "This recipe not only makes a great addition to the dog bowl, it can be used in the cookie recipe (below) or in your own risotto. No onions needed to flavor this stock," Woodford says.
FRESH KISS COOKIES
dogs love us, so they're going to try and kiss us, no matter how much we protest. Get those kisses early, before your dog starts to drool. And make these cookies, which not only will make those kisses more tolerable, but they'll also increase your pet's desire to say thank you. Plus, this recipe will help you use up extra parsley and mint that's left over from your human food.
MUTT LOAF
Dnner loaf is free of grain and packed with nutrient-dense veggies. Take off your rings, though, because the best way to mix any good meat loaf is with your hands. Like a friendly mutt, this loaf is a blend of different things. In this case, it's healthy, tasty ingredients that are easy to prepare.
SWEET POTATO FRIES FOR SHARING
e's a healthy treat that you and your dog can both enjoy! Even dogs that aren't so sure about vegetables will love this treat. Finish with a little salt and pepper on your portion, to taste. This recipe also works well with yams, parsnips, and turnips.
TUNA SANDWICH LEFTOVERS
Ofthis dog snack is that you're using leftovers you'd probably toss out otherwise—an inexpensive way to include a little something extra in your dog's food dish. When you're making a tuna fish sandwich, what's the first thing you do? Drain off the water and pour it down the sink. Next, you grab two pieces of bread, being careful to avoid the heel of the loaf. Put these two things you weren't even going to use together and you have a nice little pick-me-up for your pooch.
Space, the final frontier. These are the voyages of the Starship Enterprise. Its five-year mission: to explore strange new worlds, to seek out new life and new civilizations, to boldly go where no man has gone before.
As I stand out here in the wonders of the unknown at Hadley, I sort of realize there’s a fundamental truth to our nature, Man must explore, and this is exploration at its greatest.
Placeholder text by Space Ipsum. Photographs by NASA on The Commons.


CSS...yep
Let us clarify CSS Positioning
October 15, 2015
First, a few things about positioning in CSS
So you've got a simple HTML document with the usual elements like head, body, a couple divs, and a footer. If we take a closer look at those divs (that only have width and height values of 100px), their position on the page (remember with no CSS) they'd appear like so:
As you can see the normal flow of content appears like blocks stacked on top of each other. This is called static positioning. It's the default position for elements. But you must be wondering where's the excitement, the thrill, the pizazz that CSS boasts about all the time?  Next thing you do is look up on Google "how to position elements css" and up pops the word 'relative.' You plop that into your code and.....uhh what did it do?
Relative
Yeah so you're not really sure what putting position: relative; really did to your divs. But here I'll show you a clearer illustration of whats going on. Relative positioning moves an element in relation to where it would have been had it not been moved, leaving a gap where it used to be. Back to our toy blocks, if you keep div 1 at static positioning (default), but you make div 2's position relative and give it a left margin of 50px, you can see div 2 moved left 50px from where it was initially while also leaving a gap of 50px.
Take note that divs 3 and 4 stayed in their static positions while div 2 moved. Relative positioning stays within the scope of the element being re-positioned, without affecting the flow of content.
Absolute
Ok cool great. But at some point positioning elements has to affect the surrounding elements right? Otherwise we can't really do that much with CSS and it all becomes a huge let down. Let's explore absolute positioning, then. So we've got these four divs, with divs 1, 3, and 4 being static, and div 2 being relative. What we're gonna do now is remove relative positioning and left 50px from div 2 (so it goes back into the normal content flow) but we'll change div 3 position to absolute and give it a left pixel value of 50 and top of 20px. Check it out:
WAIT what just happened??? Why is div 4 now riding up against div 2, gettin' all personal and intrusive on div 3's space. RUDE. And what's div 3 doing at the top, chillin by div 1? Well, because we changed div 3's positioning to absolute, it's movement is in relation to its closest positioned ancestor element. Ancestor in this sense refers to the parent or parent of the parent (grandparent) of div 3 which is the body in this example; that's why div 3 is now up near the top of the page by div 1. What's also important to note is that div 3's re-positioning did not leave a gap where it used to be, so div 4 took it as an opportunity to fill in that gap and snuggle up to div 2 (they're dating now btw).
Fixed
Ahh fixed. Finally a name that describes exactly what the positioning will do! I think you can guess what effect fixed positioning will have. It won't move! Even when you scroll. Therefore it is fixed. You should also note that fixed positioning is similar to absolute positioning in that it positions relative to its closest positioned ancestor and doesn't leave a gap. But the exception with fixed is that it will not follow the stacking model, so it'll overlap elements.
Feeling a little less nauseous about CSS positioning? Hopefully all this repositioning business is making at least some sense now. It gets easier as you keep practicing, I promise!


GES marks World Toilet Day
By Isaac Newton Tetteh, GNA
Tema, Nov. 24, GNA - The Tema Metro Directorate, the Ghana Education Service (GES) has observed the 2019 World Toilet Day with students of Community Eight Number Four Basic School in Tema.
The Day was held under the theme: “Leaving no one behind”.
Mrs Bernice Ofori, Tema Metropolitan Education Director said the battle against open defecation was not over adding that there are still some work that needs to be done to completely eradicate open defecation in the country.
She said there are still some schools within the metropolis without decent toilet facilities and called on the contractors to fast track their works on such projects to save the situation on the campuses.
The GES Metro Education Director advised student to take very good care of the few facilities they have on their campuses and maintain them very well, stressing “Do not put your sanitary pads into the toilets”.
Mrs Bertha Essel, Greater Accra Metropolitan Area (GAMA) Project Coordinator for the Tema Metropolis, said 99 schools within the Tema Metropolitan Assembly have benefited from the GAMA institutional toilet facilities.
She said her outfit took advantage of the world toilet day to inspect the status of some of the already commissioned toilet facilities in some 17 schools across the metropolis.
She called on the various Parents Teachers Association (PTA) Executives to frequently monitor and ensure the facilities are put to good use by the beneficiary schools.
GNA


Power exponentials for unit conversions.
const ( BasePow10Exponential = 0 KiloPow10Exponential = 3 MegaPow10Exponential = 6 GigaPow10Exponential = 9 TeraPow10Exponential = 12 PetaPow10Exponential = 15 )
const WeiRatio = 0.000000001
func CalculateAverageBlockReward(blocks []api.Block) uint
CalculateAverageBlockReward takes a slice of api.Block instances and calculates the average reward per block in gwei and returns it as an int.
func CalculateAverageBlocksPerDay(blocks []api.Block) int
CalculateAverageBlocksPerDay takes a slice of api.Block instances and calculates the number of blocks found per day based on the roundtime of the blocks.
func CalculateExpectedRoundTime(networkHashrate uint, poolHashrate uint, averageBlocktime int) uint
CalculateExpectedRoundTime takes a given network hashrate, pool hashrate, and average block time, and calculates what the expected roundtime should be in seconds. The units for the network and pool hashrate do not matter as long as they're consistent and the same unit. Megahashes/second is recommended for reasonable accuracy.
func CalculatePPLNSShareWindow(N int, shareDifficulty uint, poolHashrate uint) uint
CalculatePPLNSShareWindow takes the N value, the pool's current share difficulty, and the pool's hashrate to calculate how many seconds it will take for those shares to be exhausted / expire. The units for the share difficulty and pool hashrate do not matter as long as they're consistent and the same unit. Megahashes/second is recommended for reasonable accuracy.
func CalculateUncleRate(blocks []api.Block) float64
CalculateUncleRate takes a slice of api.Block instances and returns the uncle rate as a percentage as a float64.
func ConvertEthToGwei(eth float64) uint
ConvertEthToGwei takes an eth value as a float64 and returns it's value in gwei as an int.
func ConvertGweiToEth(gwei uint) float64
ConvertGweiToEth takes a gwei value as an int and returns it's value in ethereum as a float64.
func ConvertHashrate(inputHashrate uint, inputHashrateUnit HashrateUnit, outputHashrateUnit HashrateUnit) uint
ConvertHashrate takes an input hashrate, as well as an input and output HashrateUnit, and converts the input to the output hashrate with the given unit conversion. Returns the converted hashrate as an integer.
Units for measuring hashrates.
type HashrateUnit int
HashrateUnit type values.
const ( HashesPerSecond HashrateUnit = iota KiloHashesPerSecond MegaHashesPerSecond GigaHashesPerSecond TeraHashesPerSecond PetaHashesPerSecond )


🍗🍗🍗 IVY ENVY WEIGHTED CHICKEN DINNER PICKER 🍗🍗🍗
Name
Number of Entries
Chance of Winning
Delete
{{ person.name }}
{{ person.entries }}
{{ calculateChance(person) }}
X
Add 'em
Pick A Winner!
Winner Winner Chicken Dinner is:
{{ winner }}


I graduated from Yarmouk-University | 2013 - 2018
I studied a civil engineering / construction managment


6.1-magnitude quake hits Thailand-Laos border
There were no immediate reports of damage after the quake hit at 6:50 am
A shallow 6.1-magnitude earthquake hit northwestern Laos near the Thai border early Thursday, the United States Geological Survey reported, alarming locals who felt buildings shake as far away as Bangkok.
There were no immediate reports of damage after the quake hit at 6:50 am.
But tremors could be felt more than 700 kilometres away in the Thai capital, where Pope Francis is currently on a four-day visit.
"The shaking... was the main shock from a quake in Laos at 6:50 am and was felt in northern and northeastern Thailand and Bangkok and suburbs," said Sophon Chaila, an official at the Thai Meteorological Department.
"As of now there is no report of damage," Sophon said.
The department said the quake-affected nine provinces in Thailand and there were four lesser aftershocks. It also became a top trending topic on Twitter in Thailand.
Residents in the Vietnamese capital Hanoi also felt buildings sway.
"The ceiling lights were shaking quite strongly. I felt dizzy and scared," said Hanoi resident Tran Hoa Phuong, who felt the earthquake in her 27-storey apartment building.
It hit about three hours after a 5.7-magnitude earthquake struck the same region of Laos, near the site of the large Xayaburi dam project, which reported no damage so far.
Information is slow to trickle out of the closed communist state, and there were similarly no official reports of damage or injuries after the twin quakes hit early Thursday.
Impoverished Laos has ploughed ahead with ambitious dam-building projects that critics say lack transparency and stringent safety measures.

Pope Francis arrived in Bangkok on Wednesday and has a busy agenda Thursday meeting officials and the Thai king before he leads a mass in the evening.
There was no word from his team on whether he felt the quake.
Powerful earthquakes occasionally strike hard in Southeast Asia.
In 2016 a 6.8-magnitude quake struck Myanmar, killing at least three people and damaging temples in the ancient temple town of Bagan.


Chapter 1 Introduction
1.1 Household Problem and Distributions
In Nygaard, Sorensen and Wang (2020), we study the optimal allocation of COVID-19 welfare checks. Congress spent $250 billion sending checks to individuals in March 2020 to provide economic stimulus. Could the same amount of stimulus have been achieved for less money? Using a life-cycle consumption-saving model with heterogeneous consumers, we calculate the consumption responses to cash transfers for, e.g., couples and singles with different levels of income and number of children. We calculate the aggregate consumption response for all feasible allocations of $250 billion and, using a new algorithm that allows for the ranking of an arbitrarily large number of allocations, we find the optimal allocation under alternative constraints. The optimal policy allocates more toward low-income and younger consumers and can achieve the same stimulus effect at almost half the cost.
This Matlab based programming guide, package, and associated vignettes, provide examples and instructions on how the dynamic programming problem in Nygaard, Sorensen and Wang (2020) is solved. The R optimal allocation package PrjOptiAlloc takes inputs from the dynamic programming problems and solves for optimal allocations given varying planner objectives and constraints.
1.1.1 Flat Script and Code Package
There are two broad versions of the code. A number of files are included in the zflat folder, including the operation gateway file main. Files in the zflat folder provides a linear, easier to understand illustration/demonstration of the overall code structure. It is useful to review the overall algorithm design. However, it should not be called to implement the programs. Programs in the folder were written to help test out algorithm ideas.
The rest of the files inside PrjOptiSNW form a matlab package that can be downloaded and installed. Each component of the overall code program is programmed up separately with its own testing vignette and default parameter structure. Various solution algorithms are provided at each step, with the final checks problem relying on efficient and precise solution methods.
1.1.2 Dynamic Programming Solution Structure COVIDless World
First we solve for the optimal consumption/savings problem in the COVID-less world:
83: 2020 age groups, age 18 to 100 age groups
65: grid of savings state-space grid, and exact continuous optimal savings choices using the FF_VFI_AZ_BISEC_VEC function from MEconTools.
6650 shocks: 1330 productivity shocks for household head and sposue and 5 kids transition count shocks
2 permanent education states
2 permanent marital states
The state-space has: 2*2*6650*65*83= 143,507,000 elements. The choice-space is is continuous. Two important things two note:
The large number of shocks are needed to obtain accurate group-specific marginal propensity effects for small income bins that define the choice-set of the allocation problem.
While a choice-grid-based solution algorithm might sufficiently approximate the value function, but its policy function zig-zags. For the welfare checks problem, where welfare checks come in small increments, the zig-zags lead to fluctuating (negative and positive) marginal propensities to consume as resource availability increases for very small amounts of check increments. To deal with this challenge, we rely on the FF_VFI_AZ_BISEC_VEC function from MEconTools to provides efficient exact savings choices.
Solving this dynamic life-cycle programming problem requires approximately 10 to 20 minutes on a home-pc depending on computer speed. There is no processor requirements. Memory requirement is approximately 20GB. There are two core associated functions vignettes that solves the dynamic programming problem to obtain value/policy and distributions induceds by exogenous processes and the policy function:
Core dynamic programming code: snwx_vfi_bisec_vec
Core distribution code: snwx_ds_bisec_vec
Small testing vignettes of alternative solution algorithms for policy/value:
Small test using matlab minimizer (very slow but identical results as core program): snwx_vfi_test
Small test using grid-search-based solution algorithm (insufficiently precise for welfare checks): snwx_vfi_test_grid_search
Small test of core dynamic programming code: snwx_vfi_test_bisec_vec
Small test of core dynamic programming code with spousal shock: snwx_vfi_test_bisec_vec_spousalshock
Testing vignettes for alternative solution algorithm for distribution:
Grid serach distributional code (insufficiently precise) :snwx_ds_grid_search
Core solution distribution code (vectorized for policy/value, looped for dist): snwx_ds_bisec_vec_loop
Core solution distribution code (vectorized fully): snwx_ds_bisec_vec
1.1.3 Dynamic Programming Solution Structure during COVID Year
During the COVID year, we use the value function from the COVID-less world as the continuation value, and solve for consumption-savings policy/value functions during the COVID year. We solve once for households facing realized COVID surprise unemployment shocks, one more time for households who do not experience COVID unemployment shocks.
We solve for the marginal consumption differences and value given 244 increments of checks ($100) each check. This is done again by using the FF_VFI_AZ_BISEC_VEC function from MEconTools. While checks could be viewed as an additional state variable, we evaluate the marginal effects of check by solving for the equivalent household-specpfic variation in savings state that has the same effect as a welfare check transfer. The process takes into account the nonlinear tax-schedule that households face as well as return on savings.
Overall:
286 million: Solve 143 million state-space points twice under COVID unemployment and COVID employment world
70 billion: Solve at the 143 million state-space elements 244 + 1 times for all possible check levels (244 checks + no check value/consumption) to arrive at 70 billion marginal propensity to consume for households with heterogeneities in education level, marital status, children below 18 count (0 to 4), age, savings levels, household head and spouse shocks.
Associated functions vignettes: the core dynamic programming code: snwx_vfi_bisec_vec, has a third input which is the existing future value function. When this is provided, the dynamical programming problems solves for one period given already computed future value, and so the dynamic programming solution solves forward. When it is not provided, solves for value/policy backwards.
snwx_vfi_unemp_bisec_vec provides the vignette given unemployment shock.
snwx_a4chk_wrk_bisec_vec computes the marginal impacts of a particular welfare check increment for those without unemployment shock in COVID year.
snwx_a4chk_unemp_bisec_vec computes the marginal impacts of a particular welfare check increment for those with unemployment shock in COVID year.
snwx_evuvw20_jaeemk considers probabilities for getting hit with the COVID shock and considers the expected value conditional on age, savings level, shocks, educational status, kids count and marital status in 2020.
1.2 Values of Checks Conditional on 2019 Information
Eligibility for the stimulus checks was tied to each household’s income and family size in the year prior to COVID-19. Consistent with this, we focus on the optimal allocation of stimulus checks given household characteristics in 2019.
1.2.1 Expected Outcomes given 2019 Information
In the actual welfare checks allocation policy setting, 2020 realized individual level COVID shocks and other productivity shocks were not used by the IRS to determine allocation eligibility. Instead, the IRS used information available from 2019. Given the persistence of productivity shocks, as well as the correlation between surprised COVID shock and household income and age from 2019, 2019 information are good predicators of household status in 2020.
We compute the expected outcomes from 2019 perspective conditional on household attributes that are observed to the IRS in 2020 given information they gathered in 2019. The planner does not observe the full state-space so we intergrate from 2019 perspective given 2019 to 2020 COVID transition probabilities (conditional on state-space) and kids and shock transitions.
82 age groups: Age 18 to 99
5 kids groups: Children 0 to 4
2 marital groups: Marital Status 0 or 1
509 Income Groups: 476 bins below max actual phaseout: solved at $500 intervals between $0 and $238,000, and 33 bins after max actual phaseout: solved at $5000 interval after $238,000, where the 33rd final bin is between $401,130 and Maximum.
Together, these are: 5*2*83*509 = 422,470 groups/bins in 2019. We have (244+1) marginal average consumption gain, and value gain for each of the groups, so from 2019 planner perspective, we have 103.5 million expected MPCs (and expected value changes): 422470*(244+1)=103,505,150.
Each income group is composed of individuals of with different 2019 productivity shocks and savings levels. Given the transition probabilities, policy functions, and covid-less distributions across household types, we can compute the joint distribution of education type, shocks, and savings levels condition on income bins, martial status, kids count and age. This joint distribution is only well approximated when sufficient number of shocks were used when solving for value/policy in the covid-less world and covid-year world.
snwx_evuvw19_jaeemk provides the expected outcomes conditional on 2019 age, savings levels, shocks, educational status, marital status and kids under 18 count, given the transition probabilities that incorporate the surprise COVID shock. Households do not optimize in 2019 given COVID shock probabilities, the shock is a surprise. But expected value in 2019 given 2019 state-space for consumption and value depends on COVID shock and the non-covid households dynamic consumption/savings choices in 2019.
snwx_evuvw19_jmky provides the expected value in 2019 given not the full state-space, but the state-space that is potentially known to the IRS in 2019: age, marital status, kids count and 2019 household income. Household income is a function of savings, shock and educational status.
snwx_evuvw19_jmky_allchecks solves for the marginal incremental effects of a vector of checks for all household types, and stores the results to file. This operation is fully parallelizable.
Given the solution, snwx_evuvw19_jaeemk_mky shows key overall distributional statistics, and distributional statistics by kids, marital and income bins.
1.2.2 Dynamic Programming Timing
Overall time requirements for solving the checks problem on a standard ($1000) dollar desktop with 4 cores:
30 minutes to 1 hour: solving the dynamic programming problem 3 times for covid-less world, for covid-world with unemployement shock and without.
3 hours: derive the distributions induced by policy functions and shock processes.
650 seconds: the time it takes to compute the marginal effects of one check. This step is fully scalable. With a cloud computer with larger memory and cores, the problem over all checks could be solved fully parallelly.
Due to the large state-space, especially the large shock-grid, the memory requirement for storing the various multi-dimensional matrixes is high. Solving the problem requires 20GB of memory.
On a workstation with 12 cores with 190 GB of memory (12 workers same time), the computer is able to fully solve the problem from start to finish for 244 check increments in less than 24 hours. On a computer with 4 to 6 cores and 36 GB of memory, the computer is able to fully solve the problem from start to finish for 244 check increments in about 48 hours.
1.3 The Welfare Check Planning Problem
The planner chooses the amount of stimulus checks for each group, where groups are defined by marital status, number of children, income, and age in 2019.
1.3.1 2019 Information Planning Problem
Given the expected outcomes we computed conditional on 2019 information, we can solve the planning problem. We have a number of different planning problems that we solve given different individual level constraints and what the planner can condition allocations on.
For FEASIBLE allocation, there are 970=5*2*97 types/cells of households:
5 children groups
2 spousal groups
97 income bins: the allocation planner sees approximately $2500 income bins between $0 and $238,800, and 1 bin after $238,800. There are 97 bins
for OPTIMAL G4 (4 age groups 18 to 64) allocation, there are 3880=5*2*97*4 types/cells of households:
5 children groups
2 spousal groups
4 age groups
97 income bins
for OPTIMAL G47 (47 age groups) allocation, there are 45590=5*2*97*47 types/cells of households:
5 children groups
2 spousal groups
47 age groups
97 income bins
Optimal G4 has a + 1 version where we allocate for a fifth age group of individuals older than 64 years of age. Optimal G47 has a + 35 version where optimal allocation for all age groups are determined.
1.3.2 Allocation Functions
Functions in the AllocateR/alloc_discrete_fun_R folder of the project repository page is responsible for feeding the dynamic programming results into the allocation functions. The functions in this folder call the ffp_snw_process_inputs function to solve the allocation problems and compute REV, and call the ffp_snw_graph_feasible function to generate allocation graphs. These two functions are a part of the PrjOptiAlloc package.


Audit of Vehicle Abatement: The City Could Improve Customer Service for Vehicle Abatement Requests
See press coverage on CBS, NBC, Fox, and Univision.
I am a policy wonk with a keen interest in civic innovation, good governance, emerging technology, and digital media. My career has spanned the public, private and nonprofit sectors with an emphasis on technology and public affairs.
Audit of Vehicle Abatement: The City Could Improve Customer Service for Vehicle Abatement Requests
See press coverage on CBS, NBC, Fox, and Univision.
Behind the Good Intentions, It's Easy To See the Failings of the System describes the challenges facing applicants and departments in Los Angeles' civil service process. [The Commons]
U.S. To Scale Back Its Role In Internet Governance [TechCrunch]
Welcome To The Valley, Mr. President [TechCrunch]


SPAR UK Cloud Services (by Zenesis Limited)
The Cloud Services application platform is the ongoing replacement of internal IT software
systems at SPAR (UK), a national retailer with over 2,600 stores. Front end development
switched to Qooxdoo around 2010 and now encompases full stack development with Qooxdoo at
its core.
SPAR UK Cloud Services supports over 500 users from hundreds of companies, connecting suppliers, wholesalers, retailers, store owners, product development consultants, auditors, design & marketing, and other consultancies together with SPAR UK's central office.


Week 3 Round Up: Twitter Fitter—the tweet generator!
12 Jan 2015So there's still a lot more work I want to do on my week 3 app Twitter Fitter. But the general idea is there--it's a Markov generator. You type in a twitter handle, and it spits back a generated tweet (or tweet-like string) that is in the style of that user. (Try @DATABASE_HULK, @StephenAtHome, @BarackObama, or @kimkardashian) Part of the app/week project is that I want to learn something new each time. So what did I learn this week?
Firsts:
Well, this was my first app where I had to connect to another service (in this case it was the Twitter API through the Twitter gem) and also the first app where I wrote my own POROs (plain old Ruby objects) inside of Rails. In fact, this was barely a Rails app. It doesn't even have a model. It's mostly just a single page that connects to Twitter and then runs the MarkovChain object that I wrote for it. I also obviously learned a lot about Markov generators and how they work. (I knew about them generally but never thought about how to write one before)
Testing:
I was able to write tests for my MarkovChain object. I'm pretty proud of this. But I haven't written tests for the actual controller code yet (which is currently very messy).
To do:
As always there are still many things I want to do to improve it:
- Needs major styling. Looks really ugly right now. I want it to look good!
- I want you to be able to retweet the generated tweets. Maybe it will retweet it from a custom account, maybe @TwitterFitter
- I want to make a gem out of the MarkovChain object. There are already similar gems out there (and my algorithm isn't all that unique), but I think it would be a learning experience to create my own gem.
- Tweak my generator code. Currently it's pretty simple, and the results are either pretty funny / nonsensical or else they're pretty boring (like almost word for word of an existing tweet rather than a mix-match of different tweets)
Challenges:
- writing the actual Markov generator, and making it perform okay as well as be open to modification in the future if I wanted to change the way it works later. For example, I thought it would be cool if I could pass it a lambda so that it picks the next word based on running that lambda code. The default is just random, but maybe someone would want to tweak it themselves without having to go into my code.
- figuring out how to call private / public methods within my class, and whether or not to even use private methods. Here's a blog post I wrote about this topic.
- tweaking the generator. When I use a prefix length of 2, I get back text that's very similar to the original text, so much so that it's kind of boring. If I set it to 1, I get back things that are sometimes very nonsensical. I decided on 1. But it would be nice to come up with a different algorithm so that it's between totally nonsensical and completely boring.
- figuring out how to include my ruby object in the lib directory and have rails auto include it. I was not naming my file correctly, so it didn't include it when autoloading! Took me some extra googling to figure out why.
- writing test code. I'm not sure I did it right, but testing code that's supposed to be random was also kind of tricky. I had to seed the generator with values so that it would be predictable/testable.
- using the Twitter gem. I had to figure out how to give it my API keys and secrets without exposing it through github. I wrote a blog post about this here.
Next week(s):
I've mentioned taking the incredibly helpful edX.org SaaS class (Software as a Service) before. Well, part 2 of the class has just started, so instead of continuing with my own apps, I will be doing the SaaS homework apps every week for the next few weeks. It's only a few weeks, and there's not a homework for every week, so it won't be taking over this project completely, but its presence will definitely be felt. I will still be blogging about my discoveries, though! Hope you'll keep reading.


--- layout: page title: About header-img: "img/about-bg.png" ---
Aspiring Software Engineer in the Greater Seattle Metro. Technology of any kind tends to light a spark in me. I enjoy digging into things to understand how they work or could be made better - in real life and with software. Previously worked in distribution as Director Customer Service Operations and Director Digital Commerce, currently transitioning to a Software Development career path.