Some weeks back I saw a poster for “Shen Yun: Reviving 5,000 Years of Civilization” at work and thought “Excellent! The wife digs artistic performance and bonus points for digging some traditional Chinese culture.” I grabbed some tickets and mentioned to a coworker. “Shen Yun? That’s Falun Gong.” I know very little about Falun Gong, except that the Chinese government views them as a threatening cult. Of course, the mainland government is easily wigged out over any perceived threat to stability, so I figured that doesn’t tell us much. We’re seeing a performance sponsored by an oppressed religious minority. That could mean anything, really.
The performance was pretty cool. Lots of dancers in colorful costumes evoking stories from Chinese history. I’d say it is like watching a Chinese version of the Nutcracker Suite. Lots of color, lots of movement, and good music. Although they’re telling mostly ancient stories they make effective use of a modern prop of a projected backstage. This saves not only on set design, but the characters at various points jump off the back stage and fly up into the screen as digital avatars. The first time I saw this I thought it was a bit gimmicky, but by the second instance I thought “hey, that is pretty neat, and I bet really magical for the kids.”
And then there’s the Falun Dafa bits. They have some solo singers come out and sing in Chinese, which is cool. They even put the lyrics on the back screen in Chinese and English. I am sure some of the poetic nuance is lost in translation, but the songs lament that we are … most of us, anyway … Gods from the Heavens who have come down to Earth for some reason, something about breaking the cycle of reincarnation and restoring the cycle of creation and destruction. To the disinterested observer it comes across as Buddhist Scientology, and the cycle of creation and destruction sounds like the sort of thing that would raise the ear of a mainland censor.
Two of the dance performances are set in modern China. In one, a tourist gets sent to jail when he unintentionally takes a picture of an innocuous Falun Dafa protest. The guy is tossed in a cell with the Falun Dafa kids, whom he wants nothing to do with, but after the guards treat him contemptibly, everyone in the cell identifies their common predicament. I thought “alright, the Chinese government overdoes it, and many social reform movements have found strength in the jails. Right on, brothers! Fight the power!” In the final dance, the Falun Dafa are having a great time protesting in Tienanmen Square. Right on, sisters! Let us see your “tank man” performance! As soon as the Chinese police come out to bust some heads, a massive earthquake starts to destroy Beijing. Huh? That kind of sucks! But, no worry, the Gods come down and restore Beijing … everything except the Great Hall of the People … ah!
Yeah, I can see how even a reasonable government might not be super enthusiastic about that sort of performance.
The show was overall entertaining. I would still hope that people can practice their religion freely. But whatever innate sympathy I might have had for the Falun folks is diminished, especially by their last performance. When it comes to resistance movements, I am most sympathetic to the non-violent, and to those who aren’t fantasizing that apocalypse is an element to their eventual success.
The current Google Car can operate on city streets autonomously, but it needs someone doing the backend work of getting all the streets mapped out perfectly, figuring out exactly where the lanes are. Then in order to do a truly autonomous taxi service, you’ll want a two-way video linkup for the dispatcher to pilot the car if it gets stuck in some situation like the fire department blocking the street, or to monitor security.
For that reason, the current livery model works really well: a small, local company will service its fleet and its IT needs. The biggest expense, the driver, will be eliminated. This will serve an evolutionary role of a taxi service within a limited service area. This will be mostly shopping trips for car-less people, and “last mile” services to transit connection points, like Taxis serve now. The evolution comes with lower cost: short-haul, off-peak commuter needs, more “last mile” transit service where an autotaxi will be faster and more convenient than the local bus service, but also cheap.
What happens next? “Roaming” agreements among carriers sharing a common technology platform. The service areas of the autotaxi companies grow larger: your local autotaxi can drop you off on a shopping trip to a regional big-box store two towns over and the local autotaxi there can bring you back cheap. Expanded mobility, less reliance on transit.
This doesn’t mean the end of transit. Individual automobiles still require more energy and infrastructure to operate. The autotaxi will dominate short trips, but especially at peak demand, we will need to rely on higher-capacity transit backbones.
The biggest driver of the need for peak-period transit handoff is the capacity limitations of the autotaxi carriers. You simply can not carry everyone, but you want to be a part of the picture. So, yeah, the service gets you from your house to the transit hub, maybe work out relationships with local transit agencies so thaty “last mile” can be served by auto-taxi as a part of the transit fare itself.
The other limitation is for longer-range travel, even a fully autonomous rubber-on-pavement highway system will not be able to match the speed of rail-based or air travel. The autotaxi might drive you fifty miles to the high-speed train station, but then you’ll board the bullet train for LA which will be faster and charge a lower fare.
Anyway, the roaming evolution will mean that we go from local taxi service to regional airport shuttle service, and this will be great for those who live some distance from a long-haul transportation hub who want to make it to/from the airport, &c.
I think autonomous cars are a very reasonable evolution on human-piloted cars, which were a very reasonable evolution on horse-drawn carriages. In the twentieth century we evolved from horses to humans, and in the twenty-first we will evolve even more seamlessly from human to computer.
Our streets didn’t change much from the carriage to the automobile era. They’re wider and too dangerous for people to walk in. I doubt the streets will change much in the autonomous era, except they’ll narrow again and it will be safe to walk, bike, and play in them again.
My other prediction is that the autotaxi will make getting around so convenient, that car ownership will continue to decline. You will see a winners-and-losers scenario in the auto industry: the losers will realize too late just how badly they are in trouble. They will try to spread Fear, Uncertainty, and Doubt as to the safety and wisdom of reliance on autonomous vehicles, just as they try to sell some. The winners will have identified the coming trend and geared their business to serving the needs of autonomous fleet operators, and to those niche consumers for whom autonomous vehicles are not appropriate, or who just love driving their own car. Other winners will include pedestrians, cyclists, the young, the elderly, people with disabilities, suburbanites, night life, and very likely the environment.
“A well regulated Militia, being necessary to the security of a free State, the right of the people to keep and bear Arms, shall not be infringed.”
You can own any firearm you want. All firearms will be stored at armories. Armories will be regulated by the ATF. Safe transportation of armaments among munitions factories and armories will be entrusted to the National Guard. Owners of firearms may store their firearms at any armories of their choice. The operation of public armories shall be funded by subscriber fees.
Firearms owners will have access to their weapons for maintenance and skills training at their armory of choice. Different armories may have different facilities for maintenance and skills training.
Licensed hunters may “check out” not more than two firearms for the duration of the hunting season. Hunters may only check out firearms suitable for their type of hunting. Firearms intended for human combat are not to be checked out.
The Military, National Guard, and Law Enforcement Agencies shall have the ability to license their agents to bear firearms for human combat. These agents must have current training on the appropriate use of these firearms to ensure public safety. Agents should be provided with sufficient access to these firearms for the performance of their duty. When not on duty, firearms will be stored at either a public armory or a private armory maintained by their employer. Agents entrusted with combat firearms must have free and immediate access to mental health services during their employment, and submit to a basic psychiatric review every three months.
In the event of a collapse in public order, state of emergency, suspension of habeas corpus, revolution, coup d’etat, military invasion or occupation, or other circumstances in which government of the people, by the people, and for the people has been compromised or forfeited, armories may release firearms for public use at their discretion.
The Cascading Select Custom Field type in JIRA is a bear. The first trick is learning to set the “null” value and then the “1” child value. The next trick is building out a ModifiedValue object to hold your change. Then you get to jump down the rabbit hole of finding the correct Option values for the custom field, and setting them with the tricks just mentioned.
So, in the interests of saving me sanity next time I need to set a Cascading Select, here’s a Jython function that works in Jira 4.2:
import logging
from com.atlassian.jira import ComponentManager
from com.atlassian.jira.issue.customfields.manager import OptionsManager
from com.atlassian.jira.issue.customfields.view import CustomFieldParamsImpl
from com.atlassian.jira.issue import ModifiedValue
from com.atlassian.jira.issue.util import DefaultIssueChangeHolder
from java.util import HashSet
# cf = custom field
# issue = issue to modify
# parent = top value to set (string value)
# child = child value to set (string value)
def set_cascading_select(cf, issue, parent, child):
# Get the managers
cfm = ComponentManager.getInstance().getCustomFieldManager()
om = ComponentManager.getComponentInstanceOfType(OptionsManager)
fli = ComponentManager.getInstance().getFieldLayoutManager().getFieldLayout(issue).getFieldLayoutItem(cf)
parent_options = om.getOptions(cf.getRelevantConfig(issue))
parent_option = None
child_option = None
try:
parent_option = parent_options.getOptionForValue(parent, None)
except:
pass
try:
child_option = parent_options.getOptionForValue(child, parent_option.getOptionId())
except:
pass
if parent_option and child_option:
old_application = issue.getCustomFieldValue(cf)
new_application = CustomFieldParamsImpl(cf)
a_none = HashSet()
a_none.add(parent_option)
a_1 = HashSet()
a_1.add(child_option)
new_application.put(None, a_none)
new_application.put("1", a_1)
mf = ModifiedValue(old_application, new_application)
cf.updateValue(fli, issue, mf, DefaultIssueChangeHolder())
logging.debug("set issue " + issue.getKey() + " cf " + cf.getName() + " setting " + parent + "/" + child)
return True
else:
logging.error("invalid parent/child option: " + parent + "/" + child)
return None
Example function calls from within a validation hook:
cfm = ComponentManager.getInstance().getCustomFieldManager()
application_cf = cfm.getCustomFieldObjectByName("Beverages")
# good
set_cascading_select(application_cf, issue, "Hard Drinks", "Whiskey")
# bad child
set_cascading_select(application_cf, issue, "Hard Drinks", "Coke")
# bad parent
set_cascading_select(application_cf, issue, "Soft Drinks", "Whiskey")
# total crap
set_cascading_select(application_cf, issue, "Illicit Drugs", "Bath Salts")
The logging stuff is useful for debugging, if you have that set up, else just remove those bits.
Audible car alarms are a public nuisance. Their use is thus prohibited, with the following exception:
The owner or operator of an automobile may actively trigger an audible car alarm if it would serve the interests of public safety. Any activation of an audible car alarm must be accompanied by a request for emergency services. Any button which triggers an audible car alarm must also send an automated distress signal to public safety authorities. If authorities do not respond in a timely fashion, concerned citizens are empowered to act on the behalf of the authorities.
If an alarm is raised in error, the responding authority must respond in one of two ways, at their discretion:
1) Use “the jaws of life” or comparable apparatus to remove or destroy the audible portion of the car alarm. If this apparatus is not available, sledge hammers, firearms, explosives and other such tools may be used, if they can be safely deployed without jeopardizing public safety.
2) Impound the automobile for not more than 90 days. Upon confiscation, all audible alarm technologies will be removed or rendered permanently inoperable, and the automobile will be made available to members of the impounding organization for their use for either official business or employee leisure.
This drives me insane. Part of the challenge is that most software dictionaries are unaware of the word “colocation” and are happy to offer “collocation” as an alternative, but that is wrong wrong wrong wrong and it makes me a little nuts every time.
So, here is some explanation I just sent to the NOC and copied to the Sales team of a “Colocation Provider” who keeps sending me messages from something called “Collocation Status Report”:
Dear NOC:
A collocation is a statistic used by linguists to determine the
frequency with which words and phrases are found together.
On your contact information page, there is an option to contact Sales
about “Colocation”
Assuming that you are indeed in the business of Colocation, and not
actually updating us on the status of word frequencies, please fix the
name in your outgoing envelope from “Collocation Status Reports” to
“Colocation Status Reports”
A MAN who was caught growing cannabis in his cellar months after being given a suspended sentence for the same offence has been sent to jail.
Daniel Howard’s second illegal enterprise was discovered by police when they went to his home in Harehills, Leeds, looking for another person who was wanted for arrest.
FREMONT, Calif.—A Fremont man is facing charges that he tried to hang his girlfriend from a backyard tree.
Thirty-one-year-old Daniel Howard is scheduled to be arraigned on attempted murder and criminal threat charges on Tuesday.
Police say they found Howard Sunday evening standing behind his girlfriend, who was tied to a tree with a rope fashioned as a noose around her neck. Her hands were tied behind her back.
Howard was allegedly continuing to wrap the rope around her neck.
On the Friday immediately following Thanksgiving, no store may open any earlier than it does on any other Friday.
On Thanksgiving, a store may extend their hours beyond the time they usually close, but all customers must be offered a complimentary slice of pie, of a size not less than 1/8 of a 9″ diameter pie, and no less than 1″ deep. A store must offer either pumpkin, sweet potato, or pecan pie, but may offer additional flavors. Customers will be allowed their fill of complimentary coffee, tea, drinking water, and whipped cream.
Modern retailers have a challenge we have come to call “showrooming” where a consumer visits the local store to try out a product, then they go and order the product off Amazon.com or another retailer for less money. Some retailers will do online price matching, which is reasonable because even though that lowers their margin, they still get the sale, and can upsell you a few accessories. I saved a few dollars this way while buying a TV from Fry’s.
However, I was just browsing Amazon.com for a resin adirondack chair, where I saw:
Twenty six bucks!? Sounds good . . . not eligible for Prime, so let’s check the shipping . . .
Whiskey . . . Tango . . . Foxtrot . . . $192 shipping you say?!! Something is fishy here . . .
So, I surf on over to True Value’s web site, where the chairs are $20, and they’ll ship to the local store.
Which makes me wonder if this is a case of “reverse showrooming” . . . I go to Amazon.com because I can probably find what I am looking for, then I am led to a local retailer to save money. Very clever . . .
It took a few hours to figure this hook out, so I’m including my hard-won lines of code here.
# -*- coding: UTF-8 -*-
# Check if PARENT is resolved.
# Monitoring creates Events in the Event queue, these Events
# automatically create Incident children.
# We don't want to resolve any Incident children until the parent Event
# resolves.
#
# (Normally you want to block on your children instead of your parent.)
from com.atlassian.jira import ComponentManager
from com.atlassian.jira.issue.link import IssueLinkManager
ilm = ComponentManager.getInstance().getIssueLinkManager()
# Assume we are okay ...
result = True
for link in ilm.getInwardLinks(issue.getId()):
if link.getIssueLinkType().getName() == "Parent" and link.getSourceObject().getResolution() == None:
result = False