Archive for the ‘Uncategorized’ Category

Raise the Wage, Not the Marginal Income Tax Rate

Monday, December 8th, 2008

I never really understood why capital gains are taxed at a lower rate than income from regular income. It does seem like adjustments on the limits on IRA contributions should provide the government enough influence over increasing or decreasing savings. OK, taxes probably don’t bother entrepreneurship. Taxes probably don’t bother lottery players either. Low tax rates or “refundable” tax credits demotivating the less inspired end of the spectrum seems more plausible, but I’m not sure how to check this. 32% of tax filers already pay no federal tax.

Expanding this group or giving extra refunds seems like a strange goal. It distorts the labor market, subsidizing low-value jobs. The rebates given earlier this year were supposedly not very effective; it seems
like refunds would have a similar level of effectiveness. Anyway, it seems that income tax is a pretty blunt tool for moving wealth between different groups.

The “rule of law” benefits people in direct proportion to their income and accumulated property. It’s not clear to me that diminishing marginal utility for income is a good reason to tax richer people at a higher
rate. It seems like there should be a better way to enrich people who have lower incomes right now.

The news around the UAW highlights a better way for getting more wealth to lower skilled people. Through the union, auto workers have clearly captured more more of the value that they produce (and we can’t give

the UAW too much blame for the collapse of the auto manufacturers, since the German companies prosper despite higher compensation rates).
Unionization also provides a nice consistent structure where the legislature where the courts and legislature can make more predictable adjustments to the balance of power between labor and management.

Perhaps “broad” employee ownership would align everyone’s interests and give better results than unionization, but I don’t know the examples. Maybe ownership is too always easy to lose… not even “management” can hold on to it.

The minimum wage should be another way to help low skilled people capture more income and also to nudge people into more productive activities. A marginally higher minimum wage is not incompatible with
the most productive state economies. A gradual increase in minimum wage would increase unemployment somewhat, but on the whole it could be beneficial to economic growth. Lower valued positions are priced out, making workers more readily available for relatively higher value positions.

Minimum Wage versus Per-Capita State GDP

Minimum Wage versus Per-Capita State GDP

Sources for the plot: US Department of Labor and Wikipedia.

income tax

Friday, November 28th, 2008

I don’t support changes to the income tax that raise the marginal rate (neither the earned income tax credit or the deduction increase). I posted this comment on bluestategroup, but I’ll copy it here, just in case:

We’re simultaneously seeking “fairness” and “positive social outcome”, but the two concepts don’t necessarily point to the same solution for state revenue collection. Progressive income tax produces a desirable social outcome: moving wealth to lower-income families. However, this is at the expense of fairness: tax burden is moved onto a smaller portion of the population and lower-income families still don’t end up with any more leverage to capture the social wealth that their labor is generating.

I would regard a fair taxation scheme to be one where everyone pays for the services that they use. The load that each person and each piece of property makes on the state resources is probably pretty consistent, so a low marginal tax rate will probably be more fair than a progressive tax system with a higher marginal rate. Fairness is important to avoid creating a economic distortion that discourages entrepreneurship and creates incentive to “game the system” (leaving the state or disguising income). On the other hand, becoming less progressive would have a negative overall social outcome, since a lot of people cannot currently afford to pay “their fair share” in this sense.

We can try to keep both the fairness of a non-progressive income tax and also the social benefit of increasing the wealth of low-income families by taking other measures to increase their wealth. If someone works diligently and still cannot afford to pay rent, tax, food and heating, then he or she is not being paid fairly for their work (or else we have unrealistic expectations for quality of life for Massachusetts residents). Strengthening unions, increasing the minimum wage, preferring economically depressed areas for new public assets (trains, universities, government offices) would all encourage increases in the wealth of lower-income people by giving them better leverage to capture the wealth that their labor is actually creating.

Raise Leverage, not Taxes

Monday, November 24th, 2008

Like the authors of the Massachusetts constitution, I believe that everyone should pay their fair share of state taxes. A dramatic increase in the deduction and the income tax rate erodes that principle. Such a change is currently being discussed among state legislators. Instead of inventing tax schemes to redistribute wealth, we should focus on ways to make it easier for low-income families to increase their income. For example, we could double the minimum wage. Property tax (which disproportionately burdens middle-income people) could be lowered by allowing towns to add a percentage to the local income or sales tax rates.

I do think that an increase in the gas tax to compensate the current budget shortfall is a good idea. For example, a 35 cent per gallon tax increase (to a total of 56 cents per gallon) should close the $1B budget gap. The price of gasoline will stay low throughout the recession. The tax should keep pressure to move towards lower carbon output and lower oil imports. However we should plan on the price of gasoline to naturally rise as we exit the recession in a year or two.

A gasoline tax scheme that periodically adjusts to achieve target gas price (say, $3 per gallon) could both solve our current budget crisis and also provide price stability. Price stability will make it easier to budget for transportation costs and it will increase the certainty of economic reward for investment in more efficient transportation. This “counter-cyclic” tax should also help keep the state income more consistent. When economic growth declines, income and sales tax revenue will fall, but so will the price of gasoline. A “price target” gasoline tax would automatically offset some of this decline in state revenue.

Once You’re Lucky, Twice You’re Good

Tuesday, June 17th, 2008

The book begins with a diagram… a mishmash of squares, circles, dots and dashes and crisscrossing edges: something to inspire another Tufte book. The difficult diagram sets the tone for the rest of the work, a careless presentation full of circular and square nodes, and edges coded with several variations of dots and dashes. In fact, the graph is planar.

Planar

Planar

Sarah Lacy takes the fundamentally captivating and unexpected story of the founders behind the second wave of internet innovation and makes it inexplicably dull and confused. She demonstrates a lack of critical thinking and cannot afford to criticize the folks she is reporting on, since the future of her career depends on maintaining their trust.

Stories in a Black Box

Tuesday, May 20th, 2008

My wife’s encaustic paintings (made of beeswax) are hanging in Boston at The Brant Gallery (on the 3rd floor of South Building at Mass Art) until May 30. She was also chosen to have a solo show at Medallion Gallery. Hopefully she can get some exposure at the next opening and get to the “next level”. The exhibitions are part of Naveed Nour’s Photo Emerge project. He is trying to promote fine art photography in Boston. Both of my parents are also artists, but they live in Florida. There are more buyers down there and the art scene seems to be closer to a meritocracy. My impression is that in Boston, art is more of an academic pursuit where overcoming obscurity is governed by a certain clique.

Selling fine art on the web is undoubtedly a challenge! Perhaps it is possible for well-known artists where markets for their work are already established. For emerging artists, I think that the sense of exclusivity of ownership of the product is important but difficult to communicate through a web site. Perhaps there is a way to accomplish this with a very interactive application that learns something about the potential patron.

BarCamp

Monday, May 19th, 2008

On Saturday, I went to BarCamp. I skipped out on the Sunday sessions, since the weather was too nice to spend the day nerding in a high-school basement. CEOs from places like diet.com, mypunchbowl.com and pixily.com (online OCR document processing) were slapping stickers on anyone who stood still for too long. The event seems to have been too much for poor babbledog: their web site has been down since then. One item that stood out was Many Eyes. While Many Eyes does not appear to have been substantially updated in the past year, they are looking for a contract developer now. They probably want to make some new charts types with the new Flash 10.

perspective projection

Sunday, May 18th, 2008

Up to this point, if you need a perspective projection of a raster image on a web page, you’re pretty much stuck with a Java applet or browser extension. Scalable Vector Graphics, the HTML “canvas” element, Silverlight and Flash 9 are all limited to affine transformations. A common problem is to combine two photographs in a perspective-correct way. The image of the painting needs a perspective projection to match the background image. Alexander Zadorozhny has written a Flash demo illustrating tessellation of an image to approximate a correct perspective projection. While good quality and reasonable performance can be achieved, there is a large impact on the complexity of the application.

Soon there will be a couple of new options for 3-D rendering in a browser. Flash 10 has pretty complete GPU-accelerated rendering functionality. Webkit is also possibly introducing a 3-D perspective transformation property into CSS. Perhaps this will be taken up by the new standard.

tainted yahoo finance data

Friday, April 25th, 2008


Be careful what you feed your stock-trading robot. For years, Yahoo Finance has published easily downloaded historical prices derived from Commodity Systems. It would seem to be a good place to start… but beware: their “adjusted prices” have errors. Aside from the obvious problem of rounding to the nearest cent, Yahoo fails to account for some stock splits. Here is an example of an artifact around a reverse split of DARA. Yahoo’s data downloadable stock history seems to be fairly widely used. For example, Mathematica’s FinancialData function uses Yahoo as a source and it propagates these artifacts. Google also gets their historical data from CSI, however they appear to give more reliable adjusted prices.

sculpture

Monday, November 5th, 2007

After a weekend of cutting up the ceiling, pulling wire, refinishing and generally making a huge mess of our kitchen, Julie and I finally said goodbye to the kitchen nipple-light and finished installing the first part of ceiling light sculpture.

saving exceptions

Saturday, October 27th, 2007

My previous post explained the need to provide debugging context with C++ exception objects and provided an easy way to manually incorporate arbitrary pieces of context. An interesting suggestion is to incorporate a stack trace into the exception. This time, I’ll look at exceptions in a multi-threaded environment.

Termination style exceptions trace back to the notion of the “undefined” symbol in abstract functional programming. Any expression containing the undefined symbol evaluates to the undefined symbol. In C++, an “expression” is meticulously assembled on the stack. A throw statement is tantamount to dropping the undefined symbol into the expression embodied by the stack. Instead of simply reducing to a single symbol, the throw statement maps to a new expression (beginning with the catch statement) through the following steps:

  1. squirrels away an arbitrary piece of state, pushing it onto the exception stack,
  2. abandons the partially evaluated expression embodied by the current call stack,
  3. and then evaluates a sequence of catch handlers.

Real applications are multi-threaded. Even if side effects are successfully managed in our C++ code, the program-is-an-expression model is not adequate anymore. We have to consider how an exception in one thread should relate to the execution of the other threads of the system.

Many multi-threaded scenarios can be mapped onto the “futures pattern”. A primary thread initiates an asynchronous action and retains the option to retrieve a result at a later time, through a proxy object that represents a “future” value. In this scenario, the correct behavior is obviously that an exception be transfered from the asynchronous actor back to the primary thread when it attempts to retrieve the actual “future value”.

Thus, we want a mechanism to transfer and continue the cancellation action of an exception from an asynchronous actor to a primary thread. This transfer is passive, meaning there is a phase after the exception passes out of the asynchronous actor and before it enters the primary thread. (It is interesting to note that Haskell has an active “throwTotransfer mechanism where a perpetrator thread can asynchronously inject an exception into a victim thread.)

Now - back to C++’s state squirreling. Our exception is held just outside the reach of the “catch” statement. We can only see the slice of it that corresponds to the catch declaration. This presents a bit of a problem when we try to implement something that transfers the exception between threads. The “re-throw” feature lets us transfer the hidden exception state between catch handlers within a thread. However, there is no mechanism that can either completely reveal the hidden state or transfer it to a second thread.

C++09 will solve this problem by adding a handful of functions to retrieve and manipulate an opaque pointer (exception_ptr) to a thrown exception.

Of course, we need this to work in 2007. The simplest approximation of the exception_ptr system is to add a “cloneable_exception” base class with “clone” and “rethrow” virtual functions. However, this approach does not address exceptions thrown from 3rd party libraries. It builds in a kind of obscolescene, since the cloneable_exception base class will be unnecessary once we move to C++09.

Anthony Williams has provided an implementation of exception_ptr for MSVC based on lower-level details of structured exception handling.

I have prototyped a portable implementation, available here. My system requires that all exception types be registered (this is automatic for exceptions thrown using boost::throw_exception). The implementation still needs mutual exclusion protection for access to the exception type registry and reference counts. It effectively adds an “external clone” function to all registered exception types.