Dec 102013
 

18 months ago I suggested that UBS get out of investment banking, if for no other reason than I was sickened by having to pay thousands of francs to bail a too-big-to-fail greedy bunch of arseholes who should have been hung out to dry long ago. I apologise for the strong language, but I really am sick and tired of this. In an unexpected move, they appointed Sergio Ermotti, a wise Swiss-Italian (like the brilliant Alfredo Gysi) as group CEO and he had the sense wind down the loss-making division. I’m far from ready to heap praise on UBS, but let us render unto Caesar, it’s a step in the right direction.

Nov 282013
 

The debate over e-cigarettes continues to rage, with statements that are often so extreme as to be laughable. I particularly enjoyed the latest from the European Commission’s proposal for Article 18 which states

Electronic cigarettes are a tobacco related product.

This makes as much sense as saying

Caffeine is a cocaine-related product

because they have similar-sounding names. Nicotine can be synthesised in a laboratory. The fact that it is cheaper to extract it from tobacco demonstrates convenience, not necessary relation.

Let’s look at some facts about nicotine’s properties, in relation to other common drugs (I add the adverb ‘quickly’ as a reminder of Haber’s Law):

  • Caffeine is a widely-used addictive drug that is perfectly acceptable. The lethal dose of caffeine for rats is 192 mg/kg. A cup of coffee contains 40mg of caffeine. A 70Kg human will thus die on drinking 192*70/40=336 cups of coffee quickly.
  • Nicotine is widely portrayed as an addictive poison which should be avoided at all costs. The lethal dose of nicotine for rats is 50mg/Kg. A cigarette or equivalent use of an e-cigarette delivers about 1mg to its user. A 70Kg human will thus die on smoking (or equally vaping) 50*70=3’500 cigarettes quickly.
  • Alcohol is a widely-used addictive drug that is perfectly acceptable. The lethal dose of ethanol for rats is 7’060 mg/kg. A 70Kg human will thus die on drinking 7’060*70=~494g (about 1.2 liters of vodka) quickly.

I’ll be accused of bias, but it seems much easier to drink a couple of bottles of vodka than it is to to drink 33 liters of coffee. Smoking a few thousand cigarettes (or vaping the equivalent) is simply impossible, in a relatively short space of time. The point here is that abusing anything quickly enough will kill you.

Long-term use presents a different picture.

  • Caffeine has no known dangers.
  • Cigarettes are a health risk. “In 2000–2004, cigarette smoking cost more than $193 billion“.
  • Alcohol is too. “The economic costs of excessive alcohol consumption in 2006 were estimated at $223.5 billion“.
  • Vaping is recent, so there are no long-term studies, but nicotine alone has never been associated with a health risk and propyl glycol is innocuous.

The medical profession seems to agree with me:

“Nicotine itself is not a particularly hazardous drug, says Professor John Britton, who leads the Tobacco Advisory Group for the Royal College of Physicians. It’s something on a par with the effects you get from caffeine.
If all the smokers in Britain stopped smoking cigarettes and started smoking e-cigarettes we would save five million deaths in people who are alive today. It’s a massive potential public health prize.”.

How is it that policy makers ignore this? The answer is obvious, unless you fall under Hanlon’s Razor; the truth is this:

  1. Governments collect some 400 billion $ in cigarette taxes yearly
  2. The tobacco industry profits were ~$35 billion in 2012. They have both the clout and a strong incentive to eradicate vaping by promoting regulation to restrict e-cigarettes.
  3. The pharmaceutical industry sells close to a billion $ in Nicotine Replacement Therapy products. They will logically lobby to maintain this profitable business.

My advice to vapers: Buy a 20-year stock of 100mg/mL e-liquid (a few liters) whilst you can and hide it in your cellar; the 600% nicotine tax is just around the corner.

Nov 152013
 

That people find smoking objectionable is perfectly understandable, cigarette smoke contains a plethora of undesirable substances, many of them carcinogenic. For many years I have smoked away from everyone for the obvious reasons.

I recently replaced 40 years of smoking Marlboro lights with vaping. Absolutely nothing to be proud of nor news-worthy in any way, it simply seemed reasonable, once I had learned of the alternative, to replace a health-endangering activity with one that was less so.

Given that vaping presents no risks to bystanders, I quietly vaped at my office desk. Not a day later, complaints were raining and a manager called me in, declaring that vaping was forbidden.

Fine. At the next restaurant I visit, I will complain vehemently about the man who eats with his mouth open and demand that the old biddy with her Chihuahua be expelled from the restaurant immediately.

Mar 192013
 

Word 2007 recently balked when re-opening a file I had spent quite some time on, with “The file cannot be opened because there are problems with the contents”. Not to worry, I said to myself, the Details>>> button will tell me what’s wrong. I couldn’t have been more wrong, it said “No error detail available”. This is bad programming at its worst. If Word has figured out that the file is unreadable, it must by definition know why it can’t read it; either it can read it or it can’t and it has to know why. If one of my programmers did something like that they’d be enjoying a very long weekend, apparently not the case at Microsoft.

Some Googling later I’d discovered a raft of morons trying either to make me download some virus-riddled software or promising to repair my file for 22$. SavvyCorrupt is a prime example, he has the balls to post on SourceForge, but without publishing the source. TechRepublic has the usual collection of spam links and if you’re really have a soft spot for viruses, you might like to try wordrepairrecovery DOT com, repairmyword DOT com and all the other spammers.

The solution is remarkably simple and little-advertised: Open Office. I installed it and opened my ‘damaged’ docx file with only a slight loss in fidelity; a “Save As .DOC” and I was a happy man.

As our American friends would say, “your mileage may vary”, but it worked perfectly for me.

Mar 172013
 

The European Union has decided to bail out the Cypriots on the condition of imposing a 9.9% one-off tax on holdings over €100’000 deposits in Cypriot banks and 6.7% below €100’000. The justification is that Cyprus only represents 0.2% of the EU GDP and the holdings in question are held mostly by rich Russians and a handful of under-represented Brits. Be that true or not makes no difference; citizen X living in Cyprus has exactly the same rights as citizen X living in France, Germany or wherever. Unilaterally confiscating a citizen’s assets without due cause is not only unacceptable, it is theft. Were my government to propose such a measure, my instinctive reaction would be to buy a weapon; for if my basic property rights are no longer secure, there’s little left else to lose.

Mar 012013
 

The European Union seems close to making a law that limits excessive bonuses. Few will disagree that the finance industry needs to be curbed, and the intention is good. The problem is in the method proposed; no matter how carefully it will be worded (the text apparently runs to over 1’000 pages), they’ll always be someone smarter to find a work-around.

The wiser and far more concise solution problem was proposed by the Swiss entrepreneur Thomas Minder in the initiative he made back in 2008. Here is an English translation, which I made from the official German and French texts:

Federal Peoples’ Initiative “against Rip-off”[1]
The Swiss Federal constitution of 18 April 1994 is completed as follows:

Article 95, alinea 3 (new)

In order to protect the economy, private property and shareholders and to ensure sustainable management of businesses, the law requires that Swiss public companies listed on stock exchanges in Switzerland or abroad observe the following rules:

  1. Each year, the Annual General Meeting votes the total remuneration (both monetary and in kind) of the Board, the Executive Board and the Advisory Board. Each year, the AGM elects the President of the Board or the Chairman of the Board and, one by one, the members of the board, the members of the Compensation Committee and the independent proxy voter or the independent representative. Pension funds vote in the interests of their policyholders and disclose how they voted. Shareholders may vote electronically at a distance; proxy voting by a member of the company or by a depositary is prohibited.
  2. Board members receive no compensation on departure, or any other compensation, or any compensation in advance, any premium for acquisitions or sales of companies and cannot act as consultants or work for another company in the group. The management of the company cannot not be delegated to a legal entity.
  3. The company statutes stipulate the amount of annuities, loans and credits to board members, bonus and participation plans and the number of external mandates, as well as the duration of the employment contract of members of the management.
  4. Violation of the provisions set out in letters a to c above shall be sanctioned by imprisonment for up to three years and a fine of up to six years’ remuneration.

Article 197 chapter 8 (new)

Pending implementation of the law, the Federal Council shall implement legal provisions within one year following the acceptance of article 95 alinea 3.

The genius of Minder’s text is that instead of setting limits on bonuses, it simply forces shareholders to approve them every year, whilst ensuring that it’s the real shareholders that vote.

We’ll be voting on it this weekend (I already voted for) and it seems that it has a good chance of passing. If it does,

Minder’s text was passed on the 3rd of March 2013 by all the counties and an astonishing 67.9% of the voters. Of the 183 initiatives submitted to the vote in Switzerland since 1893, only 21 (8.7%) have been accepted. 67.9% is the 3rd highest score ever obtained by a popular initiative. The highest score, 83.8%, was obtained in the 1993 initiative to make the 1st of August a National holiday; hardly ground-breaking. The 2nd highest score, 71.4%, was for the 1921 initiative on international treaties.

I predict that the concept will gradually be adopted globally and Thomas Minder will be recognised as the father of a new era in corporate governance.

1. It is difficult to find an exact translation of Abzocker. Cheater, swindler, deceiver and liar are all close. Abzockerei literally means rip-off, but Abzockerei isn’t slang. Scam is another synonym.

Aug 142012
 

So S&C get a huge fine for having traded with Iran. Naughty boys. In our capitalist society, nobody will question that banks are there to make money, which by definition is odourless. Punishing a bank for dealing with X is morally identical to punishing Smith and Wesson when a gun they manufactured is used to kill X. If a criminal steals a gold ingot and buries it, are you going to take the soil to court? Going after banks is no more than a short-cut to apprehending the criminal in the first place. Much easier of course, but fundamentally incorrect.

Lest I be misunderstood, I have not the least sympathy for bankers and their ilk, but “money-laundering” is a euphemism for “finding the criminal is too much effort”; there’s nothing wrong with looking after X’s money; if X got it illegally, then have him punished for his crime. Smith and Wesson anybody?

Aug 132012
 
Imports System.Data
' Refer to these DLLs:
'   microsoft.sqlserver.connectioninfo
'   Microsoft.SqlServer.Management.Sdk.Sfc
'   Microsoft.SqlServer.smo
'   Microsoft.SqlServer.sqlenum
Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Sdk.Sfc
Imports Microsoft.SqlServer.Management.Common

Module Module1

    Sub Main()
        GetServers()
        Console.ReadLine()
    End Sub

    Private Function GetServers() As List(Of String)

        Dim servers As New List(Of String)
        Dim dt As DataTable = SmoApplication.EnumAvailableSqlServers(False)

        If dt.Rows.Count > 0 Then

            For Each dr As DataRow In dt.Rows

                Dim servername As String = dr("Name")

                If Not servers.Contains(servername) Then ' Only once per server

                    servers.Add(servername)
                    Console.WriteLine(servername)

                    Dim server As New Server(servername)
                    Try
                        ' Enumerate databases 
                        For Each db In server.Databases

                            If Not db.issystemobject Then
                                Console.WriteLine("  " & db.name)

                                ' Enumerate user tables
                                For Each t As Table In db.tables

                                    If Not t.IsSystemObject Then
                                        Console.WriteLine("    " & t.Name)
                                    End If

                                Next

                            End If

                        Next

                    Catch ex As Exception
                        Console.WriteLine("  " & ex.Message)
                        Console.WriteLine("  Maybe the SQL Server Browser Service isn't started on " & servername & "?")
                    End Try
                End If
            Next
        End If

        Return servers

    End Function


End Module

 Posted by at 10:17 pm  Tagged with: