Video: See the floating football pitch that is keeping a Thai island afloat

Local residents say that the floating football pitch has ensured local businesses and restaurants are thriving

Click to follow

The southern Thai island of Koh Panyee might be known for its dramatic landscapes, jutting cliff faces and beautiful blue waters, but there is another thing that is attracting tourists to this picturesque island; its floating football pitch.

The floating pitch was created in its current form in 2010 and has been a major draw for tourists coming to the island ever since, helping to negate the events that have had a negative impact on Thailand’s tourism industry over the past twelve months.

Despite the current military Junta’s efforts to boost tourism to the country, events such as the military coup and the murder of the two British tourists, Hannah Witheridge and David Miller have seen the number of people visiting Thailand drop in recent times.

Nevertheless, according to residents on the island, the negative impact of these events on tourism to Koh Panyee hasve been softened because of their famous floating football pitch. The pitch was created as part of an advertising campaign by a Thai bank in 2010 and has become a major draw for the island in attracting people to Koh Panyee, and keeping young people on the island, ever since.

Local restaurants and businesses have said that the economic impact of the pitch has been vast and this has allowed business to thrive.

Local stall owner, Apom Janchulee, said: “The jobs here are now better than those on the mainland; the young can find money easier here.”

According, to Janchulee those on the island can earn thousands of Baht every day transporting tourists in canoes, massive when you consider the average wage for a person in Thailand is just over 400 baht a day.

So great has the financial impact been that it has supported an influx of Thai people coming to live on the island.

In the past ten years, the population of the island has increased by a third and this has led to the number of houses on the island increasing too.

Chief of Koh Panyee, Muhammad Prasanpan, was positive abou the impact the floating pitch was having on the community and hoped it could become a feature of the island for decades to come.

He said: “I think we need to keep the football pitch for our children and grandchildren, because we can say the floating football pitch is unique to the village.”


Beginning with Western preconceptions concerning conflict and post-conflict transitionâ€”especially in reference to developments in Third World statesâ€”, one is steered in the direction of accepting that marginalization of particular social groups will inevitably occur in â€˜primitiveâ€™ areas of the world that lack civility. The â€˜Stop Genocide in Sudanâ€™ tee-shirts and the rampant idealism in liberal, â€˜politically correctâ€™ media and academia cease to resonate after years of constructing walls of desensitization to gruesome topics that do not affect our daily lives. And furthermore, the minority who do not succumb to a more jaded, â€˜realisticâ€™ interpretation of society are often shunned for adopting labels such as â€˜feministâ€™ or â€˜progressiveâ€™â€”in turn perpetuating stereotypes that are divisive to a society grounded on principles of fundamental equality. But rather, the cynics who bolster that social marginalization will remain existent in â€˜unenlightenedâ€™ places appear to suggest that human development is a static entity that is not socially constructed; this postulation simply does not hold considering the range of human rights abuses and breakthroughs relative to cultural norms. In fact, as will be further developed, the overarching factor that influences the marginalization of women is the power structure of national and international systems that are socially and culturally constructed in a manner that distinguishes the extent of agency that women have. The amount of agency that women have of course varies culturally, but there are certain factors that remain prevalent in all societiesâ€”in summation, gender-based expectations coupled with a masculine power structure lead to the subordination of women seeking emancipation from historicized and contemporary male domination. Herein, significant facets that perpetuate the marginalization of women will be analyzed, and a final diagnosis regarding how the marginalization of women in conflict and post-conflict transition can be reduced will be articulated based upon the analysis of the array of causes leading to such marginalization.

Â Â Â Â Â Â Â Â Â Â Â  Prior to engaging in a critical analysis of why womenâ€™s marginalization occurs and how activists can work to halt its inhumane continuance, an empirical look at case studies is warranted in order to gain perspective on the issue at hand. Firstly, it should be noted that the international community recognizes that the marginalization of women is unjustly persistent and the Committee on the Elimination of Discrimination against Women (CEDAW) was created in 1979 in direct response to clear discrimination of women (UN General Assembly 1979: 1). Thus, state and non-state actors who engage in, â€œGender-based violence, which impairs or nullifies the enjoyment by women of human rights and fundamental freedoms,â€ are in direct violation of international lawâ€”and the direct defiance of international law by widespread actors reflects the shortcomings of the international systemâ€™s human rights initiatives that will be discussed in further detail later (Council of Europe 1992: 1). In Sudan, for example, the Janjawidâ€”comprised of Sudanese Arab tribesâ€”publicly raped in order to â€œhumiliate the womenâ€ and being the main caregivers in Darfur â€œrenders them [women] more vulnerable during attackâ€ as they usually stay closer to the village (Amnesty International 2004: 10-14). To make matters worse, women who were raped would stay away from relatives who fled to neighboring Chad because of the shame and stigma associated with rape, and communities would not welcome [back] rape victims, and this leads to social, economic, and medical vulnerability (Amnesty International 2004: 2-62). As written in the Amnesty International Report, â€œWomen and children are the most affected, physically and psychologically, during flight and as a consequence of forced displacement,â€ so it follows that the aforementioned vulnerabilities are only enhanced exponentially in cases of pregnancy which are ample in the absence of adequate contraceptive accessibility (Amnesty International 2004: 23). Ranging from Sierra Leone to Kosovo to Colombia the heinous abuses of women are similarly conducted, revealing that women are marginalized in the obvious manner of being subjected to physical and psychological abuse in conflict and post-conflict transition. Further analysis will examine why and how this marginalization is so prevalent in lead up to a prognosis as to how the abuse can be confronted more effectively.

Â Â Â Â Â Â Â Â Â Â Â  While there are several socially constructed norms that exist in the realm of reality that influence that marginalization of women, mythological tales describing women form a bond between the perception of women in fantasy and the treatment of women in reality. As Sjoberg and Gentry posit in reference to the renowned Medea who commits a series of violent actions out of her forced love for Jason in Euripidesâ€™ Medea, â€œEven one of historyâ€™s most famous villainesses is not credited with her own violent choices. Instead, her violence is characterized as reliant on her role as a wife and mother, and thus not of her own doingâ€ (Sjoberg & Gentry 2007: 30). And in the Roman Boudica myth, Boudicaâ€™s violent response to the murders of her own loved ones is seen as monstrously â€œsavage and unwomanlyâ€ rather than a natural human reaction along the same lines as Hamletâ€™s (Sjoberg & Gentry 2007: 38-39). Given the circumstances of Medea and Boudica, a more reasonable explanation of their actions would be that they acted with calculated, rational agency (regardless of whether one agrees with the ethics of retributive violence). The insistence that these women acted without â€˜innately womanlyâ€™ agency in the sense that only â€˜dysfunctional womenâ€™ can act maternally violent or monstrously is described by Hussain as an, â€œattempt to control, govern, regulate, or discipline text(s) in terms ofÂ  policing the boundaries ofÂ  meaningâ€ (Hussain 2000: 29). Such monopolized censorship of storiesâ€™ interpretation affects how society and the international system as a separate entity perceive women. In essence, it is an attempt to maintain the gender stereotype that â€˜regular womenâ€™ are peaceful, innocent, maternal creatures, and any resort to violence is a result of one of these inborn qualities gone awry. If policymakers and activists in general fall victim to such simplified discourses, then policy will not account for the diverse motives that women agents have for their respective choices. Gibson-Graham hones in on this point when ascertaining that, â€œfeminists engage in projects of discursive destabilization, looking for and pointing out the gendered silences and oppressions inherent in the stories that get toldâ€ (Gibson-Graham 1994: 216). As discursive destabilization occurs, actors become open to an array of explanations behind the actions of women, and this can only lead to more adequate policy in terms of promoting the betterment of womenâ€™s lives ranging from equal pay in the Western workplace to the right to be part of the decision-making process, in the likes of Sierra Leone and Sudan, in postcolonial post-conflict transition after participation in conflict.

Â Â Â Â Â Â Â Â Â Â Â  Regardless of whether the genesis is in fantasy or reality, gender-based expectations dominate the conception of how women are supposed to act. Womenâ€™s violence betrays the peaceful stereotype, and women in combat are forced to adopt a form of â€˜hypermasculinityâ€™ in order to conform to the male-dominated discipline (Dâ€™Amico & Beckman 1995: 8). In Sierra Leone, for example, women combatants must necessarily â€œassume male rolesâ€ and â€œoutdo menâ€ in order to prove that they are no longer â€˜typicalâ€™, yet once the process of demobilization begins â€œfemale fighters are frequently â€˜forgottenâ€™â€ and â€œpassed off as â€˜camp followersâ€™â€ (Coulter 2008: 63). A blatant double-standard exists: women have to work harder to gain respect in camp, but once peace begins to develop the military heartlessly abandons the very women who made unfathomable sacrifices. In a form of irony that shatters gender-based expectations and prompts further marginalization of women, women are often the most courageous, â€˜masculineâ€™ fighters during conflict, and menâ€”supposedly in existence to protect and provideâ€”fail to protect and provide for women in post-conflict transition. What this further entails is that, while males and females may exhibit respective tendencies, it is foolish to presume that there are modes of action that all men or all women share. As postulated by Sjoberg, â€œWomen soldiers were â€˜not soldiers but women soldiers; their gender marked their identity in militariesâ€™,â€ and this often creates a state-perpetuated â€œgendered â€˜protection racketâ€™ which marginalizes women while appearing to foreground their interestsâ€ (Sjoberg 2007: 83). A comparable example of the argument Sjoberg is highlighting is the process of affirmative action in the United States. In short, by signifying that a â€˜women soldierâ€™ is different from a â€˜soldierâ€™ or, in the case of affirmative action, that a â€˜qualified minority applicantâ€™ is different from a â€˜qualified applicantâ€™, the State actually marginalizes social groups that are already perceived to be marginalized by indirectly making the claim that it is highly unlikely for them to be a formidable candidate at whatever enterprise they are pursuing. Instead, civil liberties pertaining to abolishing womenâ€™s marginalization, racial discrimination, etc. can and should still be pursued, but if the framework has undertones of gender-based expectations then the implication that civil liberties are in some way contrary to how humanity should naturally treat each other unnecessarily exists.

Â Â Â Â Â Â Â Â Â Â Â  Thus far, and surprisingly contrary to many researchers, it has been argued that violent women, subjected to conflict as victim or combatant, engaging in action are rational agents just as men engaging in the repulsive abuse of women are acting rationally. Even if women were simply driven to action by how they have been affected as a wife or motherâ€”like media coverage of women in Palestine assumesâ€”, women still have control over bestowing primacy to caring for loved ones (Sjoberg & Gentry 2007: 23-24). In spite of their rational agency, however, agency is socially constructed in a manner that leaves the â€˜culturally acceptableâ€™ action as the only plausible choice (as evidenced by the earlier reference to rape victims in Sudan refusing to flee to Chad). Some people may then jump to claim that women like the Sudan rape victims are acting irrationally by passing on the opportunity to flee to a safer stateâ€”but this would paradoxically entail that abiding by cultural norms is irrational. Hence, these women are not acting irrationally; they have weighed the options of suffering prolonged abuse in Darfur versus receiving shame from friends and family in a safer Chad and have chosen the former option. This is a prime example of the strength of socially constructed norms. Aretxaga has characterized this type of decision as a â€œchoiceless decisionâ€ but it never ceases to be a rational one. And if one considers the chances of survival if the Sudanese rape victim returned to unwelcoming villagers or if the Sierra Leonean woman refused to fight after just witnessing the murder of her husband because joining the militia that massacred oneâ€™s spouse â€˜soundsâ€™ reprehensible, the decisions these women make offer the greatest chance of survivalâ€”surely the core indicator of rational choice (Aretxaga 1997: 61). Of course, it is not being claimed that these women are not victims of unimaginable trauma or that they have agency in the same way that I have the agency to go to the pub tonightâ€”there are structural constraints on their action. As said by Shaw, â€œThe agency of those who deploy 'weapons of the weak', is very differentÂ  from the agency of those whose authorityÂ  allows them to act upon the world throughÂ  control of an apparatus of dominationâ€ (Shaw 2002: 19). The argument is that â€˜victimâ€™ does not equate to â€˜no agencyâ€™ but that as asserted by Coulter in reference to Sierra Leone â€œOne needs to make a distinction, therefore, between different kinds and degrees of power and agencyâ€ (Coulter 2008: 68). Â Â Â

Â Â Â Â Â Â Â Â Â Â Â  Â Â In accordance, clearly womenâ€™s marginalization is socially constructedâ€”but this remains vague and does not address whether marginalization is a result of structure, members of society, ruling elites, a culmination, etc. For instance, during the socialist revolution in Iran male activists attributed womenâ€™s marginalization to a â€˜problem of structureâ€™, but then remained ambivalent to women once gaining power (Shahidian 1994: 1). Therefore it follows that a â€œfeminist consciousnessâ€ cannot be created instantaneouslyâ€”or even as a result of democratic revolutionâ€”if oppression has historically been prevalent (Sajjad 2004: 12). Nordstrom writes, â€œWhat people tolerate in peace shapes what they will tolerate in war,â€ and this quote is certainly cyclical; if people tolerate marginalization during peace then their minds are socially constructed to accept oppression, and war albeit inspired by social revolution will not instantaneously change that (Nordstrom 1997: 1). Like the Civil Rights Movement in the United States or the international response to South African apartheid, changing social dynamics is a process because it requires altering ingrained mental schema. In acknowledging that reducing the marginalization of women will be a gradual process, the international community has the obligation to make womenâ€™s marginalization a public concern. But as aforementioned, the international community has done this and human rights abuses still persistâ€”often times at the hands of the very state that is supposed to provide security.

Therefore a clear divide persists between â€˜international securityâ€™ and â€˜national securityâ€™ since the former promotes human rights but lacks direct influence and the latter [in some cases] abuses human rights and has direct influence. Writes Shepherd, â€œâ€˜International securityâ€™ depends on states complying with the moral authority of the â€˜international communityâ€™,â€ but individual states are the central actors in relation to monitoring marginalization (Shepherd 2006: 383). In this view, â€˜international securityâ€™ is rendered obsolete if states act amorally. States maintain a tense relationship with women because in many cases joining in revolution alongside men has promised a womenâ€™s emancipation that has not been delivered by the State that still controls and defines gender roles. Womenâ€™s increased involvement in conflict and post-conflict transition has begun to pave the way for women of future generations, but instances of revolution by women combatants coupled with increased international recognition of womenâ€™s rights abuses has not yet eradicated womenâ€™s marginalization due to the fact that gender inequality is one of the few aspects of international relations that the domestic State and the beliefs it has rooted into its populous still maintains near total control over. Social movements and policy that advocate womenâ€™s rights, agency, access to medical care, and equality in a way that alters domestic abuse, socially constructed schemas of inequality, and general subordination rather than focusing upon abstract internationally systematic efforts would be a step in the right direction towards stopping the marginalization of women in conflict and post-conflict transition. Â

Amnesty International., â€œSudan: Darfur: Rape as a weapon of war: sexual violence and its

Consequencesâ€. (2004). 1-46.

Aretxaga, B., Shattering Silence: Women, Nationalism and Political Subjectivity in Northern

Ireland. Princeton, NJ: Princeton University Press. (1997).

Coulter, C., â€œFemale Fighters in the Sierra Leone War: Challenging the Assumptions?â€, Feminist Review. 88. 1. (2008). 54-73.

Council of Europe., â€œGeneral Recommendation No. 19: Violence Against Womenâ€. (1992). 1.

Dâ€™Amico, F. and Beckman, P., Women in World Politics: An Introduction. Westport, Connecticut: Bergin & Garvey. (1995).

Gibson-Graham, J.K., â€œâ€˜Stuffed If I Knowâ€™: Reflections on Post-modern Feminist Social Researchâ€, Gender, Place and Culture. 1. (1994). 205-224.

Hussain, A., â€œJoy Harjo and Her Poetics as Praxis: A â€œPostcolonialâ€ Political Economy of the Body, Land, Labor, and Languageâ€, Wicazo Sa Review. 15. 2. (2000). 27-61.

Nordstrom, C., â€œGirls and Warzones: Troubling Questions, Uppsalaâ€ Life & Peace Institute. (1997). 1.

Sajjad, T., â€œWomen Guerillas: Marching toward True Freedom? An Analysis of Women's Experiences in the Frontlines of Guerilla Warfare and in the Post-War Periodâ€, Agenda Feminist Media. 59. 1. (2004). 4-15.

Shahidian, H., â€œWomen and clandestine politics in Iran: 1970-1985â€, Feminist Studies. 23. 1. (1997).

Shaw, R., Memories of the Slave Trade: Ritual and the Historical Imagination in Sierra Leone. Chicago, Illinois: University of Chicago Press. (2002).

Shepherd, L.I., â€œLoud Voices Behind the Wall: Gender Violence and the Violent Reproduction of the Internationalâ€, Millennium: Journal of International Studies. 34. 2. (2006). 377-401.

Sjoberg, L. â€œAgency, Militarized Femininity, and Enemy Othersâ€. International Feminist Journal of Politics. 9. 1. (2007). 82-101.

Sjoberg, L. and Gentry, C.E., Mothers, Monsters, and Whores: Womenâ€™s Violence in Global Politics. London, England: Zed Books. (2007).

UN General Assembly. â€œConvention on the Elimination of All Forms of Discrimination against Womenâ€œ (1979). 1-30.


Rainfall in some areas this spring has created ideal conditions for several tree diseases and foliage abnormalities.

AMES, Iowa – Rainfall in some areas this spring has created ideal conditions for several tree diseases and foliage abnormalities.

My 'Spring Snow' crabapple bloomed beautifully this spring, but has recently begun to lose many of its leaves. Why?

The 'Spring Snow' crabapple is widely planted as it is one of the few crabapple varieties (cultivars) that doesn't bear fruit. Unfortunately, 'Spring Snow' is very susceptible to apple scab.

Apple scab is a fungal disease. It's caused by the fungus Venturia inaequalis. Cool, wet weather in spring favors apple scab development.

Apple scab appears as velvety, olive-green to black spots on crabapple leaves. Heavily infected leaves turn yellow and fall from the tree. Highly susceptible crabapple cultivars may lose a large percentage of their leaves by mid-summer. Fortunately, apple scab does not kill affected trees. The damage is mainly aesthetic. Heavily defoliated crabapples are not very attractive.

Apple scab can be prevented by applying fungicides from bud break through mid-June. For most home gardeners, however, controlling apple scab with fungicides is simply not practical. Sanitation also plays a role in controlling apple scab. Raking and destroying the leaves as soon as they fall may reduce the severity of the infection next season. However, the best way to prevent apple scab is to plant scab resistant crabapple cultivars.

Why are the leaves on my pin oak yellow-green?

In Iowa, the foliage of the pin oak (Quercus palustris) often turns a sickly yellow-green. The yellow-green foliage is due to a deficiency of iron. The problem is referred to as iron chlorosis. (A close examination of chlorotic leaves will show that while most of the leaf is yellow-green, the tissue around the major veins is a darker green.) Most soils in Iowa contain sufficient amounts of iron. However, in alkaline soils (those with a pH above 7.0), the pin oak is unable to absorb adequate amounts of iron because much of it is in an insoluble form. Since many soils in Iowa are alkaline, chlorotic pin oaks are common in the state. Wet soil conditions make absorption of iron even more difficult.

Correcting an iron chlorosis problem is difficult. Applying additional iron to the soil usually doesn't help. The soil already contains sufficient amounts of iron. Adding more iron doesn't overcome the problem. Lowering the soil pH to 6.0 to 6.5 would allow the roots of the pin oak to more readily absorb iron in the soil. Unfortunately, lowering the soil pH is extremely difficult, if not impossible. As a result, homeowner efforts to treat iron chlorosis are often unsuccessful.

One strategy that sometimes works is to have an arborist or other tree care professional inject an iron containing compound directly into the trunks of chlorotic pin oak trees. The effects of a trunk injection may last three or four years.

There are bumps on the undersides of my hackberry leaves. What are they? Are they harming the tree?

The bumps on the leaves are hackberry nipple galls. Galls are abnormal plant growths induced to form by small insects or mites. Hackberry psyllids (small aphid-like insects) are responsible for the galls on hackberry leaves. In early spring, adult hackberry psyllids emerge from their over-wintering locations and lay eggs on hackberry leaf buds. Eggs hatch into tiny nymphs that stimulate the raised swellings or galls in which the insect lives and feeds for the rest of summer. The psyllids complete their development in late summer and emerge from the galls. The adults spend the winter in cracks and crevices in tree bark and other sheltered locations.

Galls do not cause serious harm to healthy, well-established trees. Galls cannot be "cured" once they have formed. Preventive insecticide treatments are seldom warranted.


The 1974 game, of course, was 24-0 ND before halftime
by ShermanOaksND (2014-11-30 16:31:25)

  In reply to: That's pretty damning if true,  posted by PattyMulligan

Yesterday was 35-0 USC before halftime. It was infinitely worse than the 1974 game, which was painful because of the blown lead.

The only time an Ara-coached ND team was truly blown out was the 1973 Orange Bowl, 40-6 to Nebraska. That game was 20-0 at halftime and 40-0 at about the same point in the third quarter as USC led 49-7 yesterday.

Ara's teams lost by 20+ points in only 2 other games, 28-8 at LSU in 1971 and 45-23 at USC in 1972. But those weren't really blowouts. ND had more total yardage in both games. Against LSU, ND was killed by turnovers and multiple blown opportunities inside the LSU 10. Against USC, ND closed to 25-23 late in the 3rd, before Anthony Davis had his 2nd KO return for a TD. ND actually had an outside shot at the national championship if they'd won that game. Instead, they were flat for the Orange Bowl, and half the team was hung over from partying on the beach on New Year's Eve.


How to develop for Linux

The community is making it easier for developers to contribute code - and that means you too!

While Quickly is fantastic for getting users up and running with a new application, there is a much wider challenge around how developers can collaborate together around code. Producing software and providing an environment in which contributors can work together on it requires a large number of tools and the integration of those tools.

In the bad old days of open source it was a nightmare to set up and integrate these tools, but these days we have a variety of free websites with ready-to-roll development environments for creating and maintaining open source projects easily. One such example is Launchpad.

Get developing

LAUNCHPAD: Launchpad is Ubuntu's site for hosting code and fixing bugs, and is where you should upload your new app.

Launchpad is a powerful, simple and comprehensive development forge that has become hugely popular over the last few years (it currently sports over 17,000 projects) and is right at the heart of how Ubuntu is developed. The site provides a range of useful facilities:

Code hosting: Launchpad knits together neatly with the popular Bazaar distribution version control system. Together they provide a fantastic method for contributors to work together on code, merge changes into a main code base and host code online.

Bug tracking: Although traditionally a complex and ugly part of software development, the bug tracker built into Launchpad is simple and effective.

Translations: Many projects struggle with providing multiple language support, but Launchpad provides a simple means for anyone who knows more than one language to translate applications without ever touching code.

Blueprints: This feature provides a means to produce specifications for ideas and features in your project.

Support: Launchpad provides a question-and-answer facility that is well suited to give support for your users.

Package building: A hugely popular feature in Launchpad is the ability to have your very own Personal Package Archive (PPA), which enables you to automatically build and deliver Ubuntu packages to your users.

If you want to find out more about the range of facilities in Launchpad, you should take a look at the online tour at

Launchpad offers a simple and effective experience for creating applications, and much of its simplicity is in how the different components of Launchpad can link together. As an example, you can create a blueprint and specific, attach bugs to it, attach Bazaar branches to bugs and more. This interconnection of information helps simplify visibility of information and ensure that developers always know what is going on.

Launchpad is not perfect though, and some developers have tried to simplify its use in application development. One such example is the way that Quickly enables you to publish to Launchpad (more on this later). Another interesting example is a tool called Ground Control by Ubuntu community member Martin Owens.

Get developing

GROUND CONTROL:A more specific set of steps to produce an app for Linux.

Ground Control takes an innovative approach in turning your file manager (Nautilus) into your development environment. Imagine you want to fix a bug. The process for fixing a bug is typically the one highlighted on the opposite page. It works like this:

Choose a bug to fix: You find a bug on Launchpad that irritates you enough that you want to fix it.

bzr branch: Download the code for the project that's afflicted by the bug.

Fix bug: Perform the fix in your local branch of the code.

bzr commit: You commit the fix to your local branch, ready to push.

bzr push You push the code to Launchpad so the maintainer of the application can take your fix and apply it.

Attach branch to bug report: For completeness, you attach the branch to the bug report. This ensures that anyone subscribed to the bug report is aware of the fix.

Propose for merge: You then follow the Launchpad 'Propose Merge' process in which you notify the original developer of the fix so he/she can review it and merge it in if suitable.

When you are a new developer starting this process, all those commands and the correct order and syntax can be a little confusing. Many developers have gone so far as to create a sticky note outlining the process until it becomes rote.

Martin Owens' Ground Control project provides an entirely graphical way of performing the same process...all within a file manager. The way it works is that you load up Nautilus and browse to a Projects directory in your home directory. In there is a 'Fetch Project' button. Clicking on it pops up a dialog box in which you can search for a project (for example the Ground Control project mentioned earlier).

When you perform the search a list of matching projects will be displayed, and you can click on one to select it. Doing this creates a new folder in the Projects directory in Nautilus with the same name as the project (eg groundcontrol).

If you click inside this new folder another button called 'Fix Bug' appears. Clicking it pops up another search dialog box which enables you to search for a bug number or bug search term inside that project. When you search, a range of bugs are displayed, and you can double-click on one to grab the latest code from Launchpad and automatically create a folder called bugfix-lp-123456.

Get developing

QT Creator: The KDE team have an excellent set of Qt development tools for building apps.

Ground control

You now go and hack on the code in that folder and fix the bug in question. When you have changed some of the files in that folder a new button appears in Nautilus called Upload Fix. Clicking that button opens a new dialog box where you can describe the changes you made to the code.

Clicking OK then pops up a final dialog box asking you to enter a merge message (this is the message that you send the developer asking them to merge your bug fix into the main code). When you click on OK, your changes are pushed to Launchpad, the branch is attached to the bug report in question, and a merge proposal is automatically made.

The entire process simply involves clicking buttons in a logical set of events, and at no point do you ever need to enter a command or create a note to remind you of the process. Projects such as Ground Control demonstrate the desire to simplify the process of collaborating on development, and the project was made possible by the flexibility of the Launchpad API, which enables developers to provide alternative interfaces to the date inside Launchpad.

With a simple method of creating applications, and a simple method of collaborating around applications, the next step is to get your application into the hands of users. This process is typically broken into two steps:

Packaging the application: Making the installation and removal of the application compatible with different distributions by using either the Debian packaging system (Deb), Red Hat Package Manager (RPM), or other system such as Gentoo's Portage.

Uploading to a distribution: Unlike with Windows, we don't expect users to go to random websites and download executable files. We instead expect distributions to have large archives of pre-packaged software. As such, we need to get the application uploaded to the archive.

Unfortunately, both of these steps have traditionally been quite complicated. The former has involved learning the relevant packaging systems, which in themselves can be fairly complex even for a basic desktop application. Part of the challenge with packaging has been that there are often many different ways to package an application, and the skills required to package your new app are often outside of the scope and interest of application developers.

Fortunately, Quickly eases this significantly. With a single command you can generate a Debian/Ubuntu package that's fully compatible and pulls in all required dependencies (much of this was made possible due to the excellent Martin Pitt).

In addition to this, Quickly includes a 'release' command that will automatically produce an Ubuntu package and upload it to your Launchpad Personal Package Archive, all in one command. This effectively makes it a one-command operation to publish new versions of your software, and saves you oodles of reading about packaging when you would prefer to be hacking on your app.

Get developing

QUICKLY: A sample Quickly app just after it has been generated.:

The latter of the two steps above, uploading to the distribution, is the more complex element. All Linux distros have teams of developers who have worked hard to build trust and technical competence to be approved as an official developer; that is, having direct upload rights to add packages to the archives and future releases of a given distribution.

Gaining these upload privileges often requires significant skills, and skills that are traditionally designed for assessing operating system integrators. As an example, in Ubuntu, there are two broad types of contribution:

Core Dev: This is for developers who want to upload to the 'main' archive, which includes all of the officially supported software (such as the software in the official release ISO images and CDs).

MOTU: This is for those developers who want to work on the non-supported Universe archive, which includes thousands of applications imported from Debian.

Becoming a Core Dev requires significant generalist Ubuntu and packaging knowledge, and it also requires comprehensive technical competence to become a MOTU. With both there is an assumption that developers will be working on multiple packages, and these developerassessment processes rightly require a high level of quality.

The challenge with these current processes is that for app developers they are a little heavy. To help resolve this in the Ubuntu 10.10 cycle a new process called the Application Review Board was introduced, in which application authors can submit an application for technical assessment by a community board.

If the application meets a set of technical assessments around code and packaging quality, the application is approved and made available in the Ubuntu Software Centre. Details about the process can be found at

Wrapping up

In the last few years we have seen ever more competition in attracting application developers to different platforms.

While Apple and Google have done an excellent job with their respective platforms, there is a huge opportunity to make Linux a top-tier application platform, and this article outlines some of the work going on in the Ubuntu world to help encourage and motivate application developers and make their lives as easy as possible.

This article has not had the space to cover the many innovations happening inside the Gnome and KDE camps, other distributions or the wide variety of upstream projects that are seeking to make development easier. Fortunately, it seems that many in the open source community are passionate about enabling more people to contribute to free software, and if we keep stepping back and making our different tools, processes and systems easier to use, we can hope to see a wealth of additional applications available across different Linux distributions.


The Mandiram practice is a synthesis of meditation, yoga rope wall vinyasa, myofascial release work, yoga asana vinyasa and restorative posturing, all used to enhance the student’s ability to move deeper into their meditation practices of self-awareness. This system has proven to assist thousands of students in obtaining and maintaining optimal health and longevity. Below you will find several resources for learning about the Mandiram practice and our classes and events.


Category Archives: Structural Violence

I just got this book in the mail today, so I’m not even done with the introduction. But I had to pass this along because it almost defies comprehension:

“If there were a single indicator to measure the status of Black women in the United States, it would be the difference in median wealth for single Black women compared to single white women. A 2010 study found that the median wealth for a single white woman was $42,600 compared to the surreal median of $5 for single Black women.”

— Keeanga-Yamahtta Taylor, From #BlackLivesMatter to Black Liberation

Inequality for All

From Oxfam:

In 2014, the richest 1% of people in the world owned 48% of global wealth,
leaving just 52% to be shared between the other 99% of adults on the planet.
Almost all of that 52% is owned by those included in the richest 20%, leaving just
5.5% for the remaining 80% of people in the world. If this trend continues of an
increasing wealth share to the richest, the top 1% will have more wealth than the
remaining 99% of people in just two years, as shown on Figure 2, with the wealth
share of the top 1% exceeding 50% by 2016.

Starting in the mid-1970s, the United States stiffened its laws on drugs and violent crime and ratcheted up the police presence on city streets. The number of people in American jails and prisons has risen fivefold over the past 40 years. There are now roughly six million people under criminal-justice supervision. “In modern history,” Goffman writes, “only the forced labor camps of the former U.S.S.R. under Stalin approached these levels of penal confinement.”

“More African American men are in prison or jail, on probation or parole than were enslaved in 1850, before the Civil War began,” Alexander, an Ohio State law professor, recently told listeners at the Pasadena Branch of the American Civil Liberties Union.


MySQL does not need SQL

The “DBMS” part of MySQL is fine – storage engines (especially with new kids on the block), replication, etc, but it really sucks at executing SQL.

I won’t even get into complex SQL that has complex data dependencies, will start with very basic tasks.

SELECT * FROM table WHERE indexed = "A" LIMIT 1

If multiple indexes can satisfy the query, MySQL will hit each of them at least twice – looking up first “A” and last “A” records. It will do that while planning the SQL execution. Once it comes up with a plan, it will go and hit the index it picked again, this time once. So, if you have two candidate indexes, you will have 5 index accesses at 4 positions.

How would a direct cursor access work? Single index hit. Want to simulate that in SQL? You can add a ‘FORCE INDEX’ hint, then only one index will be considered, but still at two positions and you will have three index accesses. I wrote about this before.

This query:

SELECT * FROM table WHERE indexed IN (101, 201, 301) LIMIT 1

Would do six index dives during preparation as well (two for each IN position), plus another one during execution – seven dives when one would suffice.

What we learn from this is that whenever there’s an opportunity for lazy evaluation, MySQL will gladly miss it and do most work possible to run your query.

If you could express it yourself, you’d be lazy and you’d be efficient. It gets even worse if we start expecting something more advanced than a basic cursor positioning.

Whenever you’re doing a range scan on (a, b) indexed table:

SELECT * FROM table WHERE a BETWEEN 1 and 100 AND b=1234567 LIMIT 1

There’s an easy optimization given low-cardinality ‘a’ – you jump to each ‘a’ position and then you can do a dive for the ‘b’ value. In a way you can emulate this behavior with:

USING (a) WHERE b=1234567 LIMIT 1

As I mentioned, MySQL will skip any opportunity to be lazy and in this case it will fully materialize all distinct ‘a’ values. If it were able to lazy evaluate, there’s a chance we can terminate the scan early.

We’re adding ability to skip-scan records in our builds (you can follow the work at

It is quite easy to describe whatever is needed in basic loop though – storage engines already provide with necessary hooks for these types of access methods.

Another basic single-table SELECT that fails with SQL is a standard “feed” query:

SELECT * FROM table WHERE category IN (5,6)

MySQL will have to pick between two alternatives, one would be just scanning ‘time’ index and searching for specified categories among found rows, another is read all entries for each category, sort them all and return top 5.

Efficient way to execute such query would involve having per-category cursors and merging their reads, something like:

( SELECT * FROM table WHERE category = 5 ORDER BY time DESC LIMIT 5 )
( SELECT * FROM table WHERE category = 6 ORDER BY time DESC LIMIT 5 )

MySQL is unable to merge these two cursors without writing all the data into temporary file and sorting it – although we already are reading much smaller datasets than with alternative naive (and readable) query. Besides, each subselect will open a table handler with all the associated buffers and if you want to merge hundred cursors you’re looking at hundred open tables.

You can do this operation efficiently in bash (with ‘sort -m’), it isn’t that complicated algorithm in any scripting language, but having such access method in MySQL’s SQL doesn’t seem likely.

Even where MySQL is already doing efficient loose scan (like in indexed-based GROUP BY), there were basic bugs open for years where efficiency would go down the drain simply because a LIMIT is added.

There’re quite a few other limitations in access methods that are quite annoying to work around. For example a query like this one:

SELECT * FROM table ORDER BY priority DESC, time ASC

Would be unable to use a regular index on (priority, time) – it can only walk everything in one direction and cannot have mixed order scans that are trivial to implement in basic procedural algorithm (move cursor to lowest time of lower priority, read all records for that priority in ascending order before repositioning the cursor to even lower priority).

Of course, one can change the direction of an index, or even have multiple indexes on same columns just to get an ordered read efficient. But none of that is needed if there’s a proper access method that can be used by SQL execution.

Directional index hints may be needed just to specify common order (e.g. prefix compression in RocksDB makes one direction cheaper than the other, although both still much cheaper than full blown filesort).

Even basic single order traversal breaks if you’re joining two tables:

SELECT * FROM t1 JOIN t2 USING (b) ORDER BY t1.a, t1.b, t2.c

In some cases I (*shudder*) had to use ‘FORCE INDEX’ without an ORDER BY to pick a direction I needed. One could expect basic functionality like ordered JOIN traversal to be part of SQL package.

There’re various other issues related to JOINs – again, in the best tradition of MySQL, lazy evaluation of joins is not possible – it will gladly do more work than you’d ever need, reading from tables you did not ask for.

These things slowly slowly change with each version, and to get basic things right we have to yell a lot. Hurray, 5.7 may finally have fixes for issues we were working around back when 5.x series did not exist) – but that is just way too slow for an SQL layer to evolve.

MySQL employs many bright engineers many of whom are trying to make better cost decisions on same existing limited set of access methods they use, by spending more cycles and adding more and more overhead.

In order to execute various queries one has to either resort to network roundtrips after each row or over-fetch data all the time. You may suggest stored procedures, but their data access is limited to running SQL queries and returning them as multiple result sets (or buffer everything in temporary table). Amount of deferred work and lazy evaluation you can do in a stored procedure is quite limited and overhead of running many SQL statements within a procedure is high.

Ability to access data via lower level interfaces by high performance server-side language (Lua? JS?) would allow to circumvent many many many limitations and inefficiencies of existing SQL optimizer and execution layer while still allowing occasional SQL access, high performance storage engines, replication and all the tooling that has been built to support MySQL at scale.

What do we do today? We run lots of that conditional logic in our application and absorb lots of the cost with a cache layer in the middle. There’s a chance that we would be able to spend less CPU, less I/O, less memory and less network resources if we could ask smarter queries expressed as procedures instead of wrangling all the relational algebra on top of dumb executor.

In some cases we have different database systems.

P.S. Many of the hypothetical scenarios map to workloads where amounts of data and query volume warrants all the optimizations I discussed here.

P.P.S. Other databases may have other set of issues.

A case for FORCE INDEX

I remember various discussions in different mediums where people were building cases against use of FORCE INDEX in SQL queries. I’ll hereby suggest it using way more often, but at first I’ll start with small explanation.

For ages, the concept of index statistics affecting query plans has been clogging minds of DBAs, supported by long explanations of MyISAM and InnoDB manuals. Actually, statistics are used just for determining which index to use for a joined table, as predicate is not known at the time of ‘optimization’.

What happens if you do a simple query like:

SELECT * FROM table WHERE a=5 AND b=6

? If there’s an index that enforces uniqueness on (a,b), it will be used – this is short-path for PRIMARY KEY lookups. Otherwise, it will go to any index, composite or not, that can satisfy either a or b (or both), and evaluate how many rows it will fetch from it using the provided criteria.

Now, contrary to what people usually think, the row count evaluation has nothing really much to do with cardinality statistics – instead it builds the range that the known predicate can check on existing index, and does two full B-Tree dives to the index – one at the start of the range, and one at the end of it. For each possible index.
This simply means that even if you are not using the index to execute query, two leaf pages (and all the tree branches to reach them) will end up being fetched from disk into the cache – wasting both I/O cycles and memory.

There’s also quite interesting paradox at this – in some cases, more similar other indexes are, more waste they create because of rows-in-range checks. If a table has indexes on (a,b,c) and (a,b,d), query for (a,b,d) will be best satisfied by (a,b,d) index, but will evaluate range sizes for (a,b). If the first index were (a,c,b), it would be only able to check head and tail of (a) – so way less B-Tree positions would be cached in memory for the check. This makes better indexing sometimes fare worse than what they’re worth in benchmarks (assuming that people do I/O-heavy benchmarking :)

The easy way out is using FORCE INDEX. It will not do the index evaluation – and no B-Tree dives on unneeded index.

In my edge case testing with real data and skewed access pattern hitting a second index during ‘statistics’ phase has increased execution time by 70%, number of I/Os done by 75%, number of entrances into buffer pool by 31% and bloated buffer pool with data I didn’t need for read workload.

For some queries like “newest 10 entries” this will actually waste some space preheating blocks from the other end of the range that will never be shown – there will definitely be a B-Tree leaf page in buffer pool with edits from few years ago because of RIR. Unfortunately, the only MySQL-side solution for this is HANDLER interface (or probably HandlerSocket) – but it doesn’t make using FORCE INDEX not worth it – it just pushes towards making FORCE INDEX be much more forceful.

So, use the FORCE, Luke :)