---
abstract: 'Regenerating codes allow distributed storage systems to recover from the loss of a storage node while transmitting the minimum possible amount of data across the network. We present a systematic computer search for optimal systematic regenerating codes. To search the space of potential codes, we reduce the potential search space in several ways. We impose an additional symmetry condition on codes that we consider. We specify codes in a simple alternative way, using additional recovered coefficients rather than transmission coefficients and place codes into equivalence classes to avoid redundant checking. Our main finding is a few optimal systematic minimum storage regenerating codes for $n=5$ and $k=3$, over several finite fields. No such codes were previously known and the matching of the information theoretic cut-set bound was an open problem.'
author:
-
-
-
bibliography:
- 'thesisbib.bib'
title: Searching for Minimum Storage Regenerating Codes
---

Introduction
============

Erasure codes can be used in storage systems to efficiently store data while protecting against failures much more efficiently than replication. We can divide a file of size ${\mathcal{M}}$ into $k$ pieces, each of size ${\mathcal{M}}/k$, encode them into $n$ coded pieces using an $(n,k)$ maximum distance separable (MDS) code, and store them at $n$ nodes. Then, the original file can be recovered from any set of $k$ coded pieces. This is optimal in terms of the redundancy–reliability tradeoff because $k$ pieces, each of size ${\mathcal{M}}/k$, provide the minimum data for recovering the file, which is of size ${\mathcal{M}}$.

In practical distributed storage systems based on $(n,k)$ MDS codes, we are often faced with the *repair problem* [@DGWR_Infocom07]: If a node storing a encoded piece fails or leaves the system, in order to maintain the same level of reliability, we need to create a new encoded piece and store it at a new node, but we can only access other encoded blocks. One straightforward way to do so is to let the new node download $k$ encoded pieces from a subset of the surviving nodes, reconstruct the original file, and compute the needed new coded piece. In this process, the new node incurred a total network traffic of $\gamma_{naive}=k\times {\mathcal{M}}/k={\mathcal{M}}$.

Recent prior work [@DGWR_Infocom07] showed that it is possible to reduce this repair bandwidth below ${\mathcal{M}}$ and developed information theoretic lower bounds and achievable schemes. At this point, need to distinguish between two different repair problems: In this paper we consider the problem of *systematic repair* [@Wu09] (also called *exact repair* [@Rashmi09]) where we require that it is exactly the same block that is reconstructed after a failure. This is in sharp contrast to *functional repair* i.e. only requiring that the new block is linearly independent and hence forms a good erasure code jointly with the other existing blocks [@DGWR_Infocom07]. Systematic repair is a strictly harder problem, which however is of great practical interest since in most practical storage systems reading parts of the data is the most common operation and it should not require decoding of blocks if no failures have occurred (see also [@ICDCS09] for a practical analysis).

\[fig:53repair\] ![An optimal (5,3) systematic MSR code over GF(3). We show the repair of the first node. The key property is that in the last two packets communicated, the coefficients of $(a_3, b_3)$ are aligned (both are $(1,0)$) and *at the same time*, the coefficients of $(a_2,b_2)$ are aligned (since $(2,1)=2 \times (1,2) \,\text{mod}\, 3$. This allows for only two extra blocks $(2a_2+b_2)$ and $(a_3)$ to suffice for four linear equations that can be solved in the desired variables $(a_1,b_1)$. The rotational symmetry of the code allows all node failures to be recovered similarly](allerton_graphic.pdf "fig:"){width="13cm"}

As was shown in [@DGWR_Infocom07], the functional repair problem is equivalent to a multicasting problem on an information flow graph that adds all reconstruction points as virtual data collectors who demand all the data. Using cut-set arguments (which are achievable for multicasting [@Ahlswede00; @RLNC]) we can determine the minimum repair bandwidth for MDS codes (codes matching this bound are called Minimum Storage Regenerating codes [@DGWR_Infocom07]): $$\label{cutset}
\gamma_{MSR}=\frac{{\mathcal{M}}}{k} \frac{n-1}{n-k},$$ if the new node is allowed to connect to $d=n-1$ surviving nodes, after one failure. Note that throughout this paper, we are only considering the minimum storage point and we do not address other points in the storage-repair tradeoff curve of [@DGWR_Infocom07].

The systematic repair problem, however, is equivalent to a network coding problem where there are receivers who want all the data (the data collectors) and receivers who want subsets of the data (the nodes who will replace the failed ones are now also sinks with a demand of the lost blocks). This reduction shows exactly why systematic repair is a much harder problem and careful coefficient selections are required. Further, the cut-set bound \[cutset\] is no longer necessarily tight and the optimal systematic repair rates are unknown for general $(n,k)$. Recent work [@Wu09] has developed an achievable scheme that is based on aligning the undesired subspaces, similarly to recent ideas for the interference channel (see e.g.  [@CadambeJ:08]) that have an achievable repair rate of $$\label{IR_rate}
\gamma_{IA}=\frac{{\mathcal{M}}}{k} \frac{(k-1)(n-k)+1}{n-k},$$ achieved by sub-packetizing each packet into $q=n-k$ blocks of size ${\mathcal{M}}/kq$ and communicating a total of $(k-1)q+1$ blocks from $d=n-1$ surviving nodes.

It is easy to verify that the achievable rate (\[IR\_rate\]) is matching the cut-set lower bound (\[cutset\]) for $k=2$ and $k=n-1$ but the other cases remain unknown. In this paper we present a searching approach to find systematic MSR codes that match the information theoretic lower bound (\[cutset\]). Our search found some optimal systematic $(5,3)$ MSR codes (the existence of which was previously unknown), the simplest of which is shown in figure \[fig:53repair\]. The key property that allows optimality is that when one of the undesired subspaces is aligned (as done in the scheme of [@Wu09]), the other is also aligned because of the selection of coefficients of the code. This remarkable property is only possible if the code coefficients are carefully chosen and is closely linked to the size of the finite field.

To search the space of potential codes in feasible amounts of time, we reduce the search space in several ways. We impose an additional condition that restricts the type of codes that we consider. This allows us to consider only highly symmetric codes that can be more concisely specified. We specify a code in a simple alternative way, using additional recovered coefficients rather than transmission coefficients. The space of codes can be searched more easily and efficiently when codes are specified this way. Finally, we use linear transformations to relate codes to each other and place them into equivalence classes. This allows us to check only one code from each equivalence class.

Definitions and Notation
========================

The storage networks that we are concerned with contain $n$ equivalent storage nodes. We wish to store $\mathcal{M}$ bits of data in the network, where $\mathcal{M}$ is $k$ times the size of one of the storage nodes. Because of this, we say that the network has $k$ source nodes.

Lower bound on recovery bandwidth
---------------------------------

During the recovery process, $\frac{\mathcal{M}d}{k(d-k+1)}$ bits of data must be transmitted, where $d$ is the number of nodes providing data [@DGWR_Infocom07]. We are interested in the case where $d=n-1$, so this bound becomes $\frac{\mathcal{M}(n-1)}{k(n-k)}$. There are $n-1$ nodes that each contain $\frac{\mathcal{M}}{k}$, so each node is transmitting $\frac{1}{n-k}$ of its contents. Because of this, we store $n-k$ packets of data in each storage node. We break the source data up into packets of the same size and each storage packet will be some linear combination of the $k(n-k)$ packets of source data.

Notation
--------

We use several matrices to represent the data and coefficients used in an MSR code.

  ${\mathbf{A}_i}$        $(n-k)$    $\times$   $k(n-k)$  matrix of storage coefficients
  ---------------------- ---------- ---------- ---------- -----------------------------------------
  ${\mathbf{B}_{i,j}}$      $1$      $\times$   $(n-k)$   row vector of transmission coefficients
  ${\mathbf{C}_i}$        $(n-k)$    $\times$   $(n-1)$   matrix used to rebuild storage node $i$
  $\mathbf{D}$            $k(n-k)$   $\times$     $x$     matrix of source data

The $i$th storage node contains ${\mathbf{A}_i}\mathbf{D}$, the original data multiplied by the storage coefficients for that node.

Independence
------------

The storage nodes of the code are independent if any $k$ nodes can reproduce the original data. That is, for all combinations of $k$ storage nodes, there is a matrix $\mathbf{M}$ such that\
$$\begin{aligned}
    \mathbf{D} &=&
    \mathbf{M}
    {\left(\begin{array}{c}{\mathbf{A}}_{c(1)}\\#2\\#3\\#4\\\end{array}\right)}
    \mathbf{D}
    \end{aligned}$$

for any value of D. An equivalent condition is that for each combination of k nodes, the matrix of storage coefficients must have full rank, i.e. a nonzero determinant.

Recovery
--------

When node $j$ fails, the $i$th node transmits ${\mathbf{B}_{i,j}}{\mathbf{A}_i}\mathbf{D}$. The code allows the recovery of node $j$ if there is a matrix ${\mathbf{C}}_j$ that recreates the lost node from the transmitted vectors: $$\begin{aligned}
    {\mathbf{A}}_{j}\mathbf{D} &=&
    {\mathbf{C}}_j
    {\left(\begin{array}{c}{\mathbf{B}}_{1,j}{\mathbf{A}}_{1}\\#2\\#3\\#4\\#5\\#6\\\end{array}\right)}
    \mathbf{D}
    \end{aligned}$$

for any value of $\mathbf{D}$. Therefore, $\mathbf{D}$ drops out of both the independent and recovery conditions, and we can focus on the coding coefficients only. We can also ignore the ${\mathbf{C}}_i$ matrices because from the recovery condition we can see that in a working code the ${\mathbf{C}_i}$ matrices are fully specified by the ${\mathbf{A}_i}$ and ${\mathbf{B}_{i,j}}$ matrices. With these two conditions, we can determine whether a set of ${\mathbf{A}_i}$ and ${\mathbf{B}_{i,j}}$ matrices form a code.

Rotationally Symmetric Codes
============================

To reduce the total number of coefficients, we consider codes whose ${\mathbf{A}_i}$ matrices are related to each other by a simple transformation.\
Let ${\mathbf{R}}$ be an $k(n-k)\times k(n-k)$ matrix such that $$\begin{aligned}
    {\mathbf{R}}^{n}={\mathbf{I}},
    \end{aligned}$$ and let $$\begin{aligned}
    {\mathbf{A}_i}={\mathbf{A}}{\mathbf{R}}^{i}.
    \end{aligned}$$\
A discussion of the ${\mathbf{R}}$ matrices themselves can be found in [@DanThesis]. This reduces the number of storage coefficients needed to specify a code by a factor of $n$, reducing the search space exponentially.

Recovery Condition
------------------

This makes the recovery condition\
$$\begin{aligned}
    {\mathbf{A}}{\mathbf{R}}^{j} &=&
      {\mathbf{C}}_{j}
      {\left(\begin{array}{c}{\mathbf{B}}_{1,j}{\mathbf{A}}{\mathbf{R}}^{1}\\#2\\#3\\#4\\#5\\#6\\\end{array}\right)}
            \\
        {\mathbf{A}}&=&
        \begin{comment}
      {\mathbf{C}}_{j}
      {\left(\begin{array}{c}{\mathbf{B}}_{1,j}{\mathbf{A}}{\mathbf{R}}^{1}\\#2\\#3\\#4\\#5\\#6\\\end{array}\right)}
        {\mathbf{R}}^{n-j}\\
    &=&
        \end{comment}
      {\mathbf{C}}_{j}
      {\left(\begin{array}{c}{\mathbf{B}}_{1,j}{\mathbf{A}}{\mathbf{R}}^{n-j+1}\\#2\\#3\\#4\\#5\\#6\\\end{array}\right)}.
        \end{aligned}$$ We can replace ${\mathbf{B}_{i,j}}$ with ${\mathbf{B}}_{i-j}$, reorder the rows of the transmitted coefficient matrix, and replace ${\mathbf{C}}_{j}$ with ${\mathbf{C}}$. Now there is only one recovery condition.\
$$\begin{aligned}
        {\mathbf{A}}&=&
      {\mathbf{C}}{\left(\begin{array}{c}{\mathbf{B}}_{1}{\mathbf{A}}{\mathbf{R}}^{1}\\#2\\#3\\\end{array}\right)}
        \end{aligned}$$ This is an improvement of a factor of $n$.

Independence Condition
----------------------

Similarly, when checking independence, we only need to check combinations that include the first node. $$\begin{aligned}
      \det{\left(\begin{array}{c}{\mathbf{A}}{\mathbf{R}}^{c(1)}\\#2\\#3\\#4\\\end{array}\right)}
        &=&
        \det{\left(\begin{array}{c}{\mathbf{A}}{\mathbf{R}}^1\\#2\\#3\\#4\\\end{array}\right)}
        \det{\mathbf{R}}^{c(1)}
        \end{aligned}$$

This reduces the number of conditions from ${\left(\begin{array}{c}n\\#2\\\end{array}\right)}$ to ${\left(\begin{array}{c}n-1\\#2\\\end{array}\right)}$. This is an improvement of a factor of $\frac{n}{k}$.\

Example
-------

$$\begin{aligned}
        {\mathbf{R}}&=& \left(\begin{array}{cccc}0&1&0&0\\0&0&1&0\\0&0&0&1\\1&0&0&0\\\end{array}\right)\\
        {\mathbf{A}}_1 &=& {\left(\begin{array}{cccc}1&0&0&0\\#5&1&1&0\\\end{array}\right)}                \end{aligned}$$

The ${\mathbf{B}}_{i}$ matrices gives us the transmitted vectors. $$\begin{aligned}
        {\mathbf{B}}_{1}{\mathbf{A}}_2 &=&
        {\left(\begin{array}{cc}1&0\\\end{array}\right)}{\left(\begin{array}{cccc}0&1&0&0\\#5&0&1&1\\\end{array}\right)}\\
        &=& {\left(\begin{array}{cccc}0&1&0&0\\\end{array}\right)}
    \end{aligned}$$ $$\begin{aligned}
        {\mathbf{B}}_{2}{\mathbf{A}}_3 &=&
        {\left(\begin{array}{cc}1&0\\\end{array}\right)}{\left(\begin{array}{cccc}0&0&1&0\\#5&0&0&1\\\end{array}\right)}\\
        &=& {\left(\begin{array}{cccc}0&0&1&0\\\end{array}\right)}
    \end{aligned}$$ $$\begin{aligned}
        {\mathbf{B}}_{3}{\mathbf{A}}_4 &=&
        {\left(\begin{array}{cc}0&1\\\end{array}\right)}{\left(\begin{array}{cccc}0&0&0&1\\#5&1&0&0\\\end{array}\right)}\\
        &=& {\left(\begin{array}{cccc}1&1&0&0\\\end{array}\right)}
    \end{aligned}$$ From these we can complete the code by calculating ${\mathbf{C}}$. $$\begin{aligned}
        {\mathbf{A}}_1 &=& {\mathbf{C}}{\left(\begin{array}{c}{\mathbf{B}}_{1}{\mathbf{A}}_2\\#2\\#3\\\end{array}\right)}
            \\
            {\left(\begin{array}{cccc}1&0&0&0\\#5&1&1&0\\\end{array}\right)} &=&
            {\mathbf{C}}\left(\begin{array}{cccc}0&1&0&0\\0&0&1&0\\1&1&0&0\\\end{array}\right)
            \\
            {\mathbf{C}}&=& {\left(\begin{array}{ccc}-1&0&1\\#4&1&0\\\end{array}\right)}
    \end{aligned}$$

Additional Recovered Coefficients
=================================

The ${\mathbf{B}_{i,j}}$ matrices cannot be eliminated in a similarly simple manner, but their contribution to the code to be represented in alternative way. During recovery $n-1$ vectors are transmitted to the lost node, but the original ${\mathbf{A}_i}$ matrix has only $n-k$ rows. Thus $k-1$ additional vectors of coefficients are recovered. Specifying these vectors allows the ${\mathbf{B}_{i,j}}$ matrices to be determined.

Let ${\mathbf{Z}}_j$ be the $k-1 \times k(n-k)$ matrix that contains the additional rows recovered when node $j$ is lost. Let $$\begin{aligned}
{\mathbf{X}_j}={\left(\begin{array}{c}{\mathbf{Z}}_j\\#2\\\end{array}\right)}\end{aligned}$$ be the $n-1 \times k(n-k)$ matrix that contains all of the rows recovered when node $j$ is lost. Then ${\mathbf{X}_j}^{T}({\mathbf{X}_j}{\mathbf{X}_j}^{T})^{-1}{\mathbf{X}_j}$ projects vectors into $\operatorname{span}{\mathbf{X}_j}$. A row vector $\mathbf{v}$ is in $\operatorname{span}{{\mathbf{X}_j}}$ if the projection does not change the vector, or $$\begin{aligned}
\mathbf{v}({\mathbf{X}_j}^{T}({\mathbf{X}_j}{\mathbf{X}_j}^{T})^{-1}{\mathbf{X}_j})=\mathbf{v}
.\end{aligned}$$ This can be rewritten as $$\begin{aligned}
\mathbf{v}({\mathbf{I}}-{\mathbf{X}_j}^{T}({\mathbf{X}_j}{\mathbf{X}_j}^{T})^{-1}{\mathbf{X}_j})=\mathbf{0}.\end{aligned}$$

${\mathbf{I}}-{\mathbf{X}_j}^{T}({\mathbf{X}_j}{\mathbf{X}_j}^{T})^{-1}{\mathbf{X}_j}$ gives the difference between the original vector and the projection. This is a projection to the $(k-1)(n-k-1)$-dimensional space $\mathbb{F}^n/\operatorname{span}{{\mathbf{X}_j}}$. The only potentially useful vectors to transmit during recovery are those in $\operatorname{span}{\mathbf{X}_j}$, so we need to ensure that the transmitted vector ${\mathbf{B}_{i,j}}{\mathbf{A}_i}$ must satisfy $$\begin{aligned}
{\mathbf{B}_{i,j}}{\mathbf{A}_i}({\mathbf{I}}-{\mathbf{X}_j}^{T}({\mathbf{X}_j}{\mathbf{X}_j}^{T})^{-1}{\mathbf{X}_j})=\mathbf{0}.  \end{aligned}$$ Thus the choices for ${\mathbf{B}_{i,j}}$ are the vectors in the nullspace of ${\mathbf{A}_i}({\mathbf{I}}-{\mathbf{X}_j}^{T}({\mathbf{X}_j}{\mathbf{X}_j}^{T})^{-1}{\mathbf{X}_j})$.

Unrecovered Coefficients
------------------------

Let ${\mathbf{Y}_j}$ refer to a basis that spans $\mathbb{F}^n/\operatorname{span}{{\mathbf{X}_j}}$. Now we can rewrite the projection as ${\mathbf{I}}-{\mathbf{X}_j}^{T}({\mathbf{X}_j}{\mathbf{X}_j}^{T})^{-1}{\mathbf{X}_j}={\mathbf{Y}_j}^{T}({\mathbf{Y}_j}{\mathbf{Y}_j}^{T})^{-1}{\mathbf{Y}_j}$. Now we can say ${\mathbf{B}_{i,j}}{\mathbf{A}_i}$ must satisfy ${\mathbf{B}_{i,j}}{\mathbf{A}_i}{\mathbf{Y}_j}^{T}({\mathbf{Y}_j}{\mathbf{Y}_j}^{T})^{-1}{\mathbf{Y}_j}=\mathbf{0}$, which reduces to ${\mathbf{B}_{i,j}}{\mathbf{A}_i}{\mathbf{Y}_j}^{T}=0$. Thus the null space of ${\mathbf{A}_i}({\mathbf{I}}-{\mathbf{X}_j}^{T}({\mathbf{X}_j}{\mathbf{X}_j}^{T})^{-1}{\mathbf{X}_j})$ is the same as the nullspace of ${\mathbf{A}_i}{\mathbf{Y}_j}^{T}$. ${\mathbf{A}_i}{\mathbf{Y}_j}^{T}$ is a $(n-k)\times(k-1)(n-k-1)$ matrix, so its nullity is at least $(n-k)-(k-1)(n-k-1)$ or $1+(n-k-1)(2-k)$. However, if $2<k<n-1$, this bound does not force the nullity to be positive. This bound does explain why it is so easy to find codes when $k=2$.

Example: Obtaining ${\mathbf{B}}$ from $\mathbf{Y}$
---------------------------------------------------

Now we can see how the ${\mathbf{B}_{i,j}}$ vectors were discovered in the previous example. Let $\mathbf{Y}_1 = (\begin{array}{cccc} 0&0&0&1\\ \end{array})$. Note that ${\mathbf{A}}_1\mathbf{Y}_1^T=0$ as required. We apply $\mathbf{Y}_1^T$ to the other ${\mathbf{A}_i}$ matrices and find the ${\mathbf{B}_{i,j}}$ vectors that satisfy ${\mathbf{B}_{i,j}}{\mathbf{A}_i}{\mathbf{Y}_j}^{T}=0$. $$\begin{aligned}
    {\mathbf{A}}_2\mathbf{Y}_1^T &=& {\left(\begin{array}{c}0\\#2\\\end{array}\right)} \\
    {\mathbf{B}}_{1} &=& {\left(\begin{array}{cc}1&0\\\end{array}\right)}
    \end{aligned}$$ $$\begin{aligned}
    {\mathbf{A}}_3\mathbf{Y}_1^T &=& {\left(\begin{array}{c}0\\#2\\\end{array}\right)} \\
    {\mathbf{B}}_{2} &=& {\left(\begin{array}{cc}1&0\\\end{array}\right)}
    \end{aligned}$$ $$\begin{aligned}
    {\mathbf{A}}_4\mathbf{Y}_1^T &=& {\left(\begin{array}{c}1\\#2\\\end{array}\right)} \\
    {\mathbf{B}}_{3} &=& {\left(\begin{array}{cc}0&1\\\end{array}\right)}
    \end{aligned}$$

For the $n=4$, $k=2$ case, nearly all choices for ${\mathbf{Y}_j}$ produce a working code. This is not the case for larger coefficients.

Transformations of codes and equivalence classes
================================================

Row transformations
-------------------

Suppose we have an invertible $(n-k)\times(n-k)$ matrix ${\mathbf{T}}$ and a working code defined by ${\mathbf{A}_i}$ and ${\mathbf{B}_{i,j}}$ matrices. Then the matrices ${\mathbf{T}}{\mathbf{A}_i}$ and ${\mathbf{B}_{i,j}}{\mathbf{T}}^{-1}$ also define a working code. For recoverability we have $$\begin{aligned}
    {\mathbf{T}}{\mathbf{A}}_{j} &=&
      {\mathbf{T}}{\mathbf{C}}_{j}
      {\left(\begin{array}{c}{\mathbf{B}}_{1,j}{\mathbf{T}}^{-1}{\mathbf{T}}{\mathbf{A}}_{1}\\#2\\#3\\#4\\#5\\#6\\\end{array}\right)}
        \\
        &=&{\mathbf{T}}{\mathbf{C}}_{j}
      {\left(\begin{array}{c}{\mathbf{B}}_{1,j}{\mathbf{A}}_{1}\\#2\\#3\\#4\\#5\\#6\\\end{array}\right)},
        \end{aligned}$$ and for independence we have $$\begin{aligned}
      \det{\left(\begin{array}{c}{\mathbf{T}}{\mathbf{A}}_{c(1)}\\#2\\#3\\#4\\\end{array}\right)}
        &=&
        \det\left(\begin{array}{cccc}
            {\mathbf{T}}& 0 & \hdots & 0\\
            0 & {\mathbf{T}}& \ddots & \vdots\\
            \vdots & \ddots & \ddots & 0\\
            0 & \hdots & 0 & {\mathbf{T}}\\
        \end{array} \right)
        \det{\left(\begin{array}{c}{\mathbf{A}}_{c(1)}\\#2\\#3\\#4\\\end{array}\right)}
        \\
        &=&(\det{\mathbf{T}})^{k}\det{\left(\begin{array}{c}{\mathbf{A}}_{c(1)}\\#2\\#3\\#4\\\end{array}\right)}
        \\
        &\neq&0.
        \end{aligned}$$ The row transformation is applied to the ${\mathbf{A}}$ matrices from the left and the rotation matrix in a rotationally symmetric code is applied from the right. Thus, applying the transformation to a rotationally symmetric code results in another rotationally symmetric code that uses the same rotation matrix. We can define codes to be equivalent if they are related by a row transformation. Testing only one code from each equivalence class reduces the search space by $k^2$ dimensions.

Column transformations
----------------------

The same technique can be applied to the columns. If we have an invertible $k(n-k)\times k(n-k)$ matrix ${\mathbf{T}}$ and a working code defined by ${\mathbf{A}_i}$ and ${\mathbf{B}_{i,j}}$ matrices, then the matrices ${\mathbf{A}_i}{\mathbf{T}}$ and ${\mathbf{B}_{i,j}}$ also define a working code. For recoverability we have $$\begin{aligned}
    {\mathbf{A}}_{j}{\mathbf{T}}&=&
      {\mathbf{C}}_{j}
      {\left(\begin{array}{c}{\mathbf{B}}_{1,j}{\mathbf{A}}_{1}{\mathbf{T}}\\#2\\#3\\#4\\#5\\#6\\\end{array}\right)}
        \\
        &=&{\mathbf{C}}_{j}
      {\left(\begin{array}{c}{\mathbf{B}}_{1,j}{\mathbf{A}}_{1}\\#2\\#3\\#4\\#5\\#6\\\end{array}\right)}
        {\mathbf{T}},
    \end{aligned}$$ and for independence we have $$\begin{aligned}
\det{\left(\begin{array}{c}{\mathbf{A}}_{c(1)}{\mathbf{T}}\\#2\\#3\\#4\\\end{array}\right)}
        &=& \det{\left(\begin{array}{c}{\mathbf{A}}_{c(1)}\\#2\\#3\\#4\\\end{array}\right)}
        \det{\mathbf{T}}\\
        &\neq&0.
        \end{aligned}$$ In a rotationally symmetric code, the column transformation and the rotation are both applied from the right, so they interact. $$\begin{aligned}
        {\mathbf{A}_i}{\mathbf{T}}&=& {\mathbf{A}}{\mathbf{R}}^{i}{\mathbf{T}}\\
        &=& {\mathbf{A}}{\mathbf{T}}{\mathbf{T}}^{-1}{\mathbf{R}}^{i}{\mathbf{T}}\\
        &=& {\mathbf{A}}{\mathbf{T}}({\mathbf{T}}^{-1}{\mathbf{R}}{\mathbf{T}})^{i}
        \end{aligned}$$ So the new code is rotationally symmetric with a different rotation matrix, ${\mathbf{T}}^{-1}{\mathbf{R}}{\mathbf{T}}$. This means that we can use a simple rotation matrix when searching for codes and simultaneously check all rotationally symmetric codes that use similar rotation matrices.

This also makes it possible to put any rotationally symmetric code into systematic form. When a code is in systematic form, the first $k$ storage matrices can be stacked to form an identity matrix. $$\begin{aligned}
            {\left(\begin{array}{c}{\mathbf{A}}_1{\mathbf{T}}\\#2\\#3\\\end{array}\right)}
        &=& {\mathbf{I}}\end{aligned}$$ Finding the transformation that puts a code into systematic form is simple. It is simply the inverse of the stack of first $k$ storage matrices.

$$\begin{aligned}
    {\mathbf{T}}&=&
    {\left(\begin{array}{c}{\mathbf{A}}_1\\#2\\#3\\\end{array}\right)}
    ^{-1}\end{aligned}$$

Example: Systematic Form
------------------------

$$\begin{aligned}
{\left(\begin{array}{c}{\mathbf{A}}_1\\#2\\\end{array}\right)} &=&
    \left(\begin{array}{cccc}
        1&0&0&0\\
        0&1&1&0\\
        0&1&0&0\\
        0&0&1&1\\
    \end{array} \right)
\\
{\mathbf{T}}&=& {\left(\begin{array}{c}{\mathbf{A}}_1\\#2\\\end{array}\right)}^{-1}
\\
&=&
    \left(\begin{array}{cccc}
        1&0&0&0\\
        0&0&1&0\\
        0&1&-1&0\\
        0&-1&1&1\\
    \end{array} \right)\end{aligned}$$

The same ${\mathbf{B}}$ vectors as before will work for recovery. $$\begin{aligned}
    {\mathbf{B}}_{1}{\mathbf{A}}_2{\mathbf{T}}&=&
    {\left(\begin{array}{cc}1&0\\\end{array}\right)}{\left(\begin{array}{cccc}0&0&1&0\\#5&0&0&1\\\end{array}\right)}\\
    &=& {\left(\begin{array}{cccc}0&0&1&0\\\end{array}\right)}\end{aligned}$$ $$\begin{aligned}
    {\mathbf{B}}_{2}{\mathbf{A}}_3{\mathbf{T}}&=&
    {\left(\begin{array}{cc}1&0\\\end{array}\right)}{\left(\begin{array}{cccc}0&1&-1&0\\#5&-1&1&1\\\end{array}\right)}\\
    &=& {\left(\begin{array}{cccc}0&1&-1&0\\\end{array}\right)}\end{aligned}$$ $$\begin{aligned}
    {\mathbf{B}}_{3}{\mathbf{A}}_4{\mathbf{T}}&=&
    {\left(\begin{array}{cc}0&1\\\end{array}\right)}{\left(\begin{array}{cccc}0&-1&1&1\\#5&0&1&0\\\end{array}\right)}\\
    &=& {\left(\begin{array}{cccc}1&0&1&0\\\end{array}\right)}\end{aligned}$$

The same ${\mathbf{C}}$ matrix as before will also work. $$\begin{aligned}
    {\mathbf{A}}_1{\mathbf{T}}&=& {\mathbf{C}}{\left(\begin{array}{c}{\mathbf{B}}_{1}{\mathbf{A}}_2\\#2\\#3\\\end{array}\right)}
            {\mathbf{T}}\\
    &=& {\left(\begin{array}{ccc}-1&0&1\\#4&1&0\\\end{array}\right)}
    \left(\begin{array}{cccc}0&0&1&0\\0&1&-1&0\\1&0&1&0\\\end{array}\right)
    \\
    &=& {\left(\begin{array}{cccc}1&0&0&0\\#5&1&0&0\\\end{array}\right)} \end{aligned}$$

Search Procedure
================

When searching for codes of a given $n$ and $k$ over a finite field, this procedure was used. Iterate over ${\mathbf{A}}$ matrices in a way that ensures that exactly one matrix from each row transformation equivalence class is produced. For each ${\mathbf{A}}$ matrix, produce the collection of $n$ ${\mathbf{A}_i}$ matrices using a single simple column rotation matrix. Then test the independence condition. Test it before the recovery condition because it requires only ${\mathbf{A}_i}$ matrices. If the independence condition is met, iterate over the space of potential additional recovered coefficients. For each ${\mathbf{X}_j}$ matrix produced by this process, check the recovery condition. If the condition is met, this is a code.

Search results
==============

$n=4$, $k=2$
------------

These coefficients are small enough to all several fields to be searched exhaustively. We have searched the prime fields up to $GF(13)$. There are no rotationally symmetric codes in $GF(2)$, but in all larger fields codes are extremely easy to find. In all of these fields, nearly all of the potential codes that satisfy the independence condition also satisfy the recovery condition. As the field size increases, larger and larger fractions of the potential codes satisfy the independence condition. In $GF(3)$, $22\%$ of potential codes satisfy the independence condition, and of these all satisfy the recovery condition. In $GF(13)$, $78\%$ of potential codes satisfy the independence condition and of these $92\%$ also satisfy the recovery condition.

$n=5$, $k=3$
------------

For these coefficients, codes were not previously known. We have exhaustively searched $GF(2)$, $GF(3)$, $GF(4)$, and $GF(5)$ and randomly searched in larger fields for rotationally symmetric codes. We found codes in $GF(3)$, $GF(4)$, $GF(7)$, and larger fields, but none in $GF(2)$ or $GF(5)$. While the codes we have found in smaller fields are not composed of vectors in general position, we found a code in $GF(17)$ that is. Several of these codes are given in the appendix. The full descriptions can be found in [@DanThesis].

$n=6$, $k=3$
------------

For these coefficients, We have yet to find any codes. In $GF(3)$, only about $1\%$ of potential codes satisfy the independence condition. In $GF(4)$ this number is about $14\%$ and in $GF(5)$ it is about $30\%$.

Appendix
========

$(5,3)$ code over $GF(3)$ in systematic form
--------------------------------------------

$$\begin{aligned}
    {\mathbf{B}}_{2,1}{\mathbf{A}}_2 &=&
    \left(\begin{array}{cc} 2&1\\ \end{array}\right)
    \left(\begin{array}{cccccc} 0&0&1&0&0&0\\0&0&0&1&0&0\\ \end{array}\right)
    $$

$$\begin{aligned}
    {\mathbf{B}}_{3,1}{\mathbf{A}}_3 &=&
    \left(\begin{array}{cc} 1&0\\ \end{array}\right)
    \left(\begin{array}{cccccc} 0&0&0&0&1&0\\0&0&0&0&0&1\\ \end{array}\right)
    $$

$$\begin{aligned}
    {\mathbf{B}}_{4,1}{\mathbf{A}}_4 &=&
    \left(\begin{array}{cc} 0&1\\ \end{array}\right)
    \left(\begin{array}{cccccc} 1&1&2&0&1&2\\1&2&1&2&1&0\\ \end{array}\right)
    $$

$$\begin{aligned}
    {\mathbf{B}}_{5,1}{\mathbf{A}}_5 &=&
    \left(\begin{array}{cc} 1&1\\ \end{array}\right)
    \left(\begin{array}{cccccc} 0&2&2&2&2&2\\1&1&0&2&2&1\\ \end{array}\right)
    $$

$$\begin{aligned}
    {\mathbf{A}}_1 &=& {\mathbf{C}}\left(\begin{array}{c}
            {\mathbf{B}}_{2,1}{\mathbf{A}}_2\\
            {\mathbf{B}}_{3,1}{\mathbf{A}}_3\\
            {\mathbf{B}}_{4,1}{\mathbf{A}}_4\\
            {\mathbf{B}}_{5,1}{\mathbf{A}}_5\\
        \end{array}\right)
    \\
                &=&
        \left(\begin{array}{cccc} 2&2&0&1\\1&0&2&1\\ \end{array}\right)
        \left(\begin{array}{cccccc} 0&0&2&1&0&0\\0&0&0&0&1&0\\1&2&1&2&1&0\\1&0&2&1&1&0\\ \end{array}\right)
        $$

$(5,3)$ code over $GF(7)$ in systematic form
--------------------------------------------

$$\begin{aligned}
    {\mathbf{B}}_{2,1}{\mathbf{A}}_2 &=&
    \left(\begin{array}{cc} 0&1\\ \end{array}\right)
    \left(\begin{array}{cccccc} 0&0&1&0&0&0\\0&0&0&1&0&0\\ \end{array}\right)
    $$

$$\begin{aligned}
    {\mathbf{B}}_{3,1}{\mathbf{A}}_3 &=&
    \left(\begin{array}{cc} 2&1\\ \end{array}\right)
    \left(\begin{array}{cccccc} 0&0&0&0&1&0\\0&0&0&0&0&1\\ \end{array}\right)
    $$

$$\begin{aligned}
    {\mathbf{B}}_{4,1}{\mathbf{A}}_4 &=&
    \left(\begin{array}{cc} 5&1\\ \end{array}\right)
    \left(\begin{array}{cccccc} 2&0&5&6&1&1\\6&4&3&4&5&0\\ \end{array}\right)
    $$

$$\begin{aligned}
    {\mathbf{B}}_{5,1}{\mathbf{A}}_5 &=&
    \left(\begin{array}{cc} 6&1\\ \end{array}\right)
    \left(\begin{array}{cccccc} 1&4&3&3&4&0\\3&0&3&6&1&2\\ \end{array}\right)
    $$

$$\begin{aligned}
    {\mathbf{A}}_1 &=& {\mathbf{C}}_1
        \left(\begin{array}{c}
            {\mathbf{B}}_{2,1}{\mathbf{A}}_2\\
            {\mathbf{B}}_{3,1}{\mathbf{A}}_3\\
            {\mathbf{B}}_{4,1}{\mathbf{A}}_4\\
            {\mathbf{B}}_{5,1}{\mathbf{A}}_5\\
        \end{array}\right)
        \\
                &=&
        \left(\begin{array}{cccc} 3&0&2&2\\4&4&1&6\\ \end{array}\right)
        \left(\begin{array}{cccccc} 0&0&0&1&0&0\\0&0&0&0&2&1\\2&4&0&6&3&5\\2&3&0&3&4&2\\ \end{array}\right)
        $$


back=example_board-B.Cu.gbr
front=example_board-F.Cu.gbr
outline=example_board-Edge.Cuts.gbr

mill-feed=360 in/min
mill-speed=200rotations/second
voronoi=false
zwork=-0.04inch
drill-feed=30
drill-side=auto
drill-speed=12000
milldrill=true
onedrill=true
zdrill=-1.6mm
cut-feed=100
cut-infeed=0.19mm
cut-side=auto
cut-speed=10000
cutter-diameter=1.5mm
milldrill-diameter=0.8mm
zbridges=-0.6000
zcut=-0.13mm
fill-outline=true
zsafe=0.08
zchange=1.0
zero-start=false
mirror-axis=0

tile-x=3
tile-y=2

al-back=true
al-front=true
al-x=10mm
al-y=10mm
software=custom
al-probefeed=1mm/s
al-probecode=G38.2


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using Telerik.Windows.Controls;
using Telerik.Windows.Media.Imaging.Tools;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace Localization
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            LocalizationManager.Manager = new LocalizationManager()
            {
                ResourceManager = RadImageEditorResources.ResourceManager
            };

            InitializeComponent();

            ImageExampleHelper.LoadSampleImage(this.ImageEditorUI, "RadImageEditor.png");
            this.ImageEditorUI.ImageEditor.ExecuteTool(new ResizeTool());
        }
    }
}


VANCOUVER — When the product’s called Atomic Haze, you might expect a description of its contents to be rather fuzzy — and a team of Canadian scientists has found just that.

“The genetics of cannabis are muddled at this point and we need to spend some time doing research to figure that out,” says Jonathan Page, a University of B.C. botanist who co-wrote a study published Wednesday in the online journal PLOS One. “There’s a lot of confusion and a lot of chaos in the system now.”

The study found only a moderate chance that the strains of marijuana reported as being in 81 samples were supported by analysis of the plants’ genetic code.

“Cannabis breeders and growers often indicate the percentage of sativa or indica in a cannabis strain, but they are not very accurate,” Page explained.

It’s an issue with implications for Canada’s legal medical marijuana and hemp growers, and also illegal shops in Vancouver which offer menus listing marijuana hybrids — and their purported effects — with little scientific evidence to back them.

That knowledge is lacking because it’s a controlled substance not heavily studied by scientists. So suppliers have come up with their own system, he says.

Marijuana menus online or in stores offer poetic descriptions of products’ effects based on the type of plant. Indica-type plants are said to relax or relieve pain — the “body stone” from days of yore; sativa’s effects are more often described as cerebral and euphoric.

“And yet we don’t really have a good idea about what the genetic bases for those differences are and how those differences relate to the properties of marijuana,” says Page. “We’re still trying to figure out the scientific truth behind that.”

Dana Larsen, vice-president of the Canadian Association of Medical Cannabis Dispensaries and a director with Vancouver’s two Medicinal Cannabis Dispensary stores, agrees that the classification system has its shortcomings. But that’s because it’s an illegal business that would improve its standards if it became legal, he says.

“Under prohibition, it’s very very difficult for us to keep track. Strain names are as much an art form rather than a science under current prohibitionist conditions,” says Larsen.

Sean Myles, assistant professor in the department of plant and animal sciences at Dalhousie University in Halifax, co-wrote the study, which also examined 43 hemp samples. Each sample went though a $50 DNA sequencing scan funded by Myles’ research grants and contributions from Page’s start-up biotech company called Anandia Labs based at UBC. The company hopes to develop a process to quickly and efficiently analyze marijuana strains.

Such a test could also be useful to Canada’s thriving hemp industry, says Page. Hemp can legally be grown for fibre and seeds if it has less that 0.3 per cent tetrahydrocannabinol or THC, the intoxicating ingredient found in marijuana.

The study follows Page’s previous work with the National Research Council of Canada which published the first cannabis genome sequence in 2011. He notes that all the research is available from open-access journals that don’t charge for the information.

“We’re putting it out to the broader scientific community to figure out some of these problems. It’s very much a public effort to build a science foundation for Canada as well.”

Philippe Lucas is the vice-president for patient research and services at the federally-sanctioned medical marijuana supplier Tilray in Nanaimo. He says Tilray provides information about ingredients that create the strongest effects in patients, but says the area is ripe for more study.

“The novel findings cited in this article show that despite thousands of years of use for fibre, food, and medicine, our scientific understanding of the hemp and cannabis plant are truly in their infancy,” Lucas said in an e-mail.

Tilray provides information about levels of THC responsible for marijuana’s psychoactive effects and cannabidiol ― abbreviated as CBD ― which produces a physical effect without a high. They are two of the 85 compounds in marijuana called cannabinoids that react with the human body.

The company has also started providing information on terpenes ― an often strong-smelling compound common to evergreens ― which modify the effects of THC and other cannabinoids, he said.

eellis@vancouversun.com

===

Click here to report a typo or visit vancouversun.com/typo.

Is there more to this story? We'd like to hear from you about this or any other stories you think we should know about. CLICK HERE or go to vancouversun.com/moretothestory


Evaluation of hydroxyapatite cement for frontal sinus obliteration after mucocele resection.
To retrospectively evaluate our experience with frontal sinus obliteration using hydroxyapatite cement (BoneSource; Stryker Biotech Europe, Montreux, Switzerland) and compare it with fat obliteration over the approximate same period. Frontal sinus obliteration with hydroxyapatite cement represents a new technique for obliteration of the frontal sinus after mucocele resection. Exploration of the frontal sinus was performed using bicoronal, osteoplastic flaps, with mucosal removal and duct obliteration with tissue glue and muscle or fascia. Flaps were elevated over the periorbita, and Silastic sheeting was used to protect the BoneSource material from exposure as it dried. The frontal table was replaced when appropriate. Sixteen patients underwent frontal sinus obliteration with fat (fat obliteration group), and 38 patients underwent obliteration with BoneSource (BoneSource group). Fat obliteration failed in 2 patients, who underwent subsequent BoneSource obliteration, and none of the patients in the BoneSource group has required removal of material because of recurrent complications. Frontobasal trauma (26 patients [68%] in the BoneSource group and 9 patients [56%] in the fat obliteration group) was the most common history of mucocele formation in both groups. Major complications in the BoneSource group included 1 patient with skin fistula, which was managed conservatively, and 1 patient with recurrent ethmoiditis, which was managed surgically. Both complications were not directly attributed to the use of BoneSource. Contour deficit of the frontal bone occurred in 1 patient in the fat obliteration group and in none in the BoneSource group. Two patients in the fat obliteration group had donor site complications (hematoma and infection). Thirteen patients in the BoneSource group had at least 1 prior attempt at mucocele drainage, and no statistical relation existed between recurrent surgery and preservation of the anterior table. Hydroxyapatite is a safe, effective material to obliterate frontal sinuses infected with mucoceles, with minimal morbidity and excellent postoperative contour.


#region License
// Copyright (c) 2007 James Newton-King
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
#endregion

using System.ComponentModel;

namespace Newtonsoft.Json.Tests.TestObjects
{
    public class JsonPropertyWithHandlingValues
    {
        [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
        [DefaultValue("Default!")]
        public string DefaultValueHandlingIgnoreProperty { get; set; }

        [JsonProperty(DefaultValueHandling = DefaultValueHandling.Include)]
        [DefaultValue("Default!")]
        public string DefaultValueHandlingIncludeProperty { get; set; }

        [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
        [DefaultValue("Default!")]
        public string DefaultValueHandlingPopulateProperty { get; set; }

        [JsonProperty(DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
        [DefaultValue("Default!")]
        public string DefaultValueHandlingIgnoreAndPopulateProperty { get; set; }

        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
        public string NullValueHandlingIgnoreProperty { get; set; }

        [JsonProperty(NullValueHandling = NullValueHandling.Include)]
        public string NullValueHandlingIncludeProperty { get; set; }

        [JsonProperty(ReferenceLoopHandling = ReferenceLoopHandling.Error)]
        public JsonPropertyWithHandlingValues ReferenceLoopHandlingErrorProperty { get; set; }

        [JsonProperty(ReferenceLoopHandling = ReferenceLoopHandling.Ignore)]
        public JsonPropertyWithHandlingValues ReferenceLoopHandlingIgnoreProperty { get; set; }

        [JsonProperty(ReferenceLoopHandling = ReferenceLoopHandling.Serialize)]
        public JsonPropertyWithHandlingValues ReferenceLoopHandlingSerializeProperty { get; set; }
    }
}


Gallery

Listing Agent

Request more information

Thank you for the email, we'll get back to you shortly

Name (required)Email Address (required)Questions/Comments

Description

This beautifully wooded lot within the gated community of Union Harbor Resort and Marina at Pickwick Lake will make a wonderful home site, rental property, weekend getaway or the perfect home-away-from-home. These lots are ready to build with electricity, water and sewer available. Additional lots are available


City commission to discuss health care coverage for employees

LAKE WORTH — The City Commission at tonight’s meeting is scheduled to vote on a program to offer health, vision, dental, life insurance and disability coverage for city employees for fiscal year 2016.

Under the proposal, United Healthcare will provide medical health insurance, MetLife dental and vision insurance, Prudential will offer short and long-term disability. Cobra Management Services will provide COBRA coverage.

With a decrease in cost for the medical plan, the city’s human resources department is recommending the city absorb the cost of employee-only coverage for dental and vision for the upcoming fiscal year.

The city began soliciting bids in the spring of 2014. The city said it had budgeted $4.2 million for fiscal year 2016, which represented a 20 percent increase in cost. Human Resources has since reduced the budget request for fiscal years 2015-2016 to $3.3 million.

The city said there will be no change in employee contribution.

The meeting is scheduled to start at 6 p.m.

Please follow me on Twitter@KevinDThompson1or feel free to call at 561-820-4573 or email me at kthompson@pbpost.comwith story ideas, comments and really nice places to listen to live jazz.


<?php
/**
 * @Author: Leandro Henrique Reis <emtudo@gmail.com>
 * @Date:   2016-05-11 10:32:35
 * @Last Modified by:   Leandro Henrique Reis
 * @Last Modified time: 2016-06-04 19:52:02
 */

namespace Domain\Repositories\Traits;

use App\Exceptions\RepositoryException;
use Exception;

/**
 * Delete trait.
 *
 * @author Leandro Henrique <emtudo@gmail.com>
 */
trait DeleteTrait
{
    /**
     * Destroy item of model by id :id.
     *
     * @param  int    $id
     * @return int
     */
    public function delete($id)
    {
        try {
            return $this->model->destroy($id);
        } catch (Exception $e) {
        }

        throw new RepositoryException('Could not delete the record. You must delete all relationships before proceeding.');
    }

    /**
     * Force destroy item of model by id :id.
     *
     * @param  int    $id
     * @return bool|null
     */
    public function forceDelete($id, $field = 'id')
    {
        try {
            return $this->model->where($field, $id)->forceDelete();
        } catch (Exception $e) {
        }

        throw new RepositoryException('Could not delete the record. You must delete all relationships before proceeding.');
    }
}


Friday, November 21, 2003

Bll O'Reilly is so upset that the Democratic National Committee is promoting Hilary Clinton's new book that his November 7 column makes a truly bizzare charge that slanders plumbers."

"Now the danger is that DNC Chief Terry McAuliffe is using and paying professional hit men to demean and denigrate political opponents. That's exactly what President Nixon did when he used the plumber's union to harass his opponents. " (emphasis added)

But there were no plumbers in Nixon's plumbers unit. The unit was made of lawyers and others assigned by Nixon to punish Daniel Ellsburg who had leaked the Pentagon papers.

Saturday, November 08, 2003

The Politics of the 3/5 Clause

Americans are not so much taught the Constitution as taught to idealize the Constitution. Conservatives ritually invoke the "original intent" of the founders, hoping that we will overlook that the intent including slavery. Even those who learn that the founders counted slaves as 3/5 of a person react primarily with moral condemnation. Often overlooked is the crucial role of the 3/5 clause in augmenting the politcal power of the slaves owners. Congressional seats and electoral votes were dis-proportioned.

Even professional historians exhibit a curious amnesia about the impact of the 3/5 clause as Gary Wills documents in a recent New York Review of Books essay. Without the extra voting power provided by the 3/5 clause, Thomas Jefferson would not have been elected President in 1800. But the subject is barely treated, if at all, in several recent books on Jefferson and his era.

It doesn't stop there Wills writes, "Without the federal ratio as the deciding factor in House votes, slavery would have been excluded from Missouri; Andrew Jackson's policy of removing Indians from territories they occupied in several states would have failed; the 1840 gag rule, protecting slavery in the District of Columbia, would not have been imposed; the Wilmot Proviso would have banned slavery from territories won from Mexico. Moreover, the Kansas and Nebraska bill outlawing slavery in Nebraska territory and allowing it in Kansas would have failed."

Birchers were halfright

The John Birch Society and other far rightists used to insist that the US is "a republic, not a demorcracy." Well, the were half right. The distinction The US Constitution contains many undemocratic provisions. Two writers on the democratic left, Robert Dahl and Daniel Lazare have examined the limitations in recent books. Nathan Newman recently pointed out that GOP protestations about the Demoratic minority filibustering right-wing judicial nominees vanishes into fresh air if the Senators are "weighted" by their states population.

A modest proposal Wouldn't it be wonderful if someone would write a program that would "weight" critical historical and current Senate by population rather than states. Would the League of Nations have been ratified? Would labor reform have passed in the Carter years?


Minister for everything, interview with John Swinney, by David Scott

6 Mar 08

John Swinney has achieved the impossible twice in his first nine months as Scotland's finance secretary. But can the former Scottish National Party leader score a much-needed hat trick? He talked exclusively to David Scott

07 March 2008

John Swinney has achieved the impossible twice in his first nine months as Scotland's finance secretary. But can the former Scottish National Party leader score a much-needed hat trick? He talked exclusively to David Scott

It's hardly surprising that John Swinney is smiling. Scotland's finance and sustainable growth secretary has just managed to do what some of his critics thought was impossible: persuading local authorities of all political persuasions to freeze council tax.

His ability to do this – and to win parliamentary approval for the Scottish National Party's first budget, against the political odds – is the culmination of a highly successful first nine months in one of the top jobs in Holyrood.

Swinney has a formidable range of responsibilities, including the economy, the Scottish budget, public service reform, local government, enterprise, energy, climate change and transport policy. But he has thrived on the challenge.

His first big test was convincing the sceptics that the SNP could implement its manifesto pledge on council tax. He was frequently warned that it was up to individual councils to decide their own tax bills in accordance with their democratic rights, and that his party would find it impossible to guarantee that all councils would co-operate.

'One commentator said that if I could deliver a council tax freeze then I could deliver anything,' he says. And of his success in implementing that pledge, he jokes: 'I'm not contemplating walking on water – yet. The tax freeze was the product of the way this government does business. We created an environment that encouraged local authorities to come with us and deliver a freeze.'

Swinney certainly knows how the SNP ticks. He's been a member since he was 15, and in 1997 gave up his day job with a major insurance company to become MP for Tayside North. Post-devolution he was elected Tayside North MSP and then deputy leader of the SNP, before taking over as leader in 2000. But he was seen by some as lacking the necessary charisma and as failing to galvanise the party into making electoral advances. He stood down in 2004 and former leader Alex Salmond – now first minister – took the reins back. But Swinney has no regrets.

'It was a great privilege to become leader of the SNP. I didn't expect that to happen. This [his present post] is a great deal more fulfilling than the hard graft of being leader. I did enjoy the leadership but I stood down at the right time and I'll not be going back to it.'

Asked if he's enjoying his current job, he responds: 'I think enjoy is an understatement. I am loving it. I'm having the time of my life. I shall never do anything in my life that is more fulfilling than what I do now.'

He believes that when he joined the SNP in 1979 – the year Margaret Thatcher's government came to power – there could not have been a worse time for anyone to become politically active. 'To end up as a government minister in the Scottish Parliament is just an inexplicable and inexpressible pleasure and privilege.'

Swinney's ability to handle such a wide range of responsibilities effectively has impressed people in other parties, in local government and the media. So, too, has his success in pushing through some of the SNP's main election manifesto commitments, although the party has just 47 seats out of 129.

Peter MacMahon, former Scottish government editor of The Scotsman, and now the paper's business editor, describes Swinney as 'one of the stars of the new SNP government'. He says: 'As the “minister for everything”, he has demonstrated that he is the master of his wide-ranging brief. I cannot remember a time when Swinney has been caught out on a point of high policy or small detail.'

MacMahon, who was at one time media adviser to former Labour first minister Henry McLeish, adds: 'Many observers, including me, were sceptical over whether he could persuade councils to freeze their council tax but, with the help of extra money and the ending of most ring-fencing, he did it. And he also played a blinder in getting the minority administration's budget through.'

However, Swinney's handling of the £30bn budget has not been universally praised. Arthur Midwinter, a former adviser to Holyrood's finance committee, says he is 'deeply disappointed' that the minister has signed off a budget manifesto for the election that was 'clearly both under-costed and made promises that couldn't be delivered'.

Midwinter, who is visiting professor at the Institute of Public Sector Accounting Research at Edinburgh University, adds: 'Since becoming finance minister, he's had to revise that position by reducing the spending commitments by more than £1bn.

'I'm also disappointed with his performance in producing what I regard as the most regressive budget since devolution, with its combination of tax cuts and reduced charges mainly for people who can afford to pay these.'

To get his budget through the Parliament, Swinney had to win support from a rival party due to the SNP's lack of an overall political majority. So he reached out to the Conservatives and offered to amend his budget to comply with some of their demands. These included increasing the number of police officers and speeding up a reduction in business rates.

He also managed to get the backing of an independent MSP, Margo MacDonald, formerly a leading member of the SNP. The budget was approved by 64 votes to one, with Labour surprisingly abstaining at the last moment.

Swinney says: 'Many commentators said two things to us. First, the budget would be an impossible hurdle to get across and, secondly, that we would never be able to do it as a minority government. Not only did we get over that hurdle, we got the budget through with only a very minor change. It's a £30bn budget and, effectively, we had to change just £30m of expenditure, equivalent to what the government spends in one morning. We had to reach out to other political parties and I make no apology for that.'

On the eve of the budget, the SNP indulged in some political brinkmanship, with Salmond warning that the administration would resign if it were not approved. 'That was not an idle threat but a statement of fact,' Swinney recalls. He sees the winning of support for the budget as an enormous achievement and as a 'landmark moment in stability and security for the administration'.

Swinney has also developed a positive relationship with councils. Ministers and leaders of the Convention of Scottish Local Authorities signed a concordat that guarantees councils a meaningful place in the governance of Scotland, strips away control such as ring-fencing and introduces outcome agreements aimed at ensuring the policies of the government and councils produce the intended results.

'I think, for the first time, we have an alignment of Scottish government priorities and local authority priorities. We're now focused on the same outcome and we'll try to deliver those outcomes in a different way in different parts of the country,' he says.

Swinney managed to swing the council tax freeze by offering a £70m incentive that even sceptical and non-SNP councils found hard to resist. But the government intended this as an interim measure while they prepared for the introduction of a local income tax. A consultation paper on the LIT was due at the turn of the year, but there is no sign of it yet.

'We're at a very advanced stage in developing the consultation paper and that will be published very soon,' the minister says. When it is suggested that the government seems hesitant about pressing ahead with the change, he admits that it won't be easy to get the required legislation through the Parliament.

'I have to go through these things with my eyes wide open. The parliamentary arithmetic is tight, to say the least. In every respect, we will have to build a consensus round it… we will need to reach out to our colleagues, the Liberal Democrats and others, to secure a parliamentary majority for this issue.'

While a big question remains over the abolition of the council tax, Swinney believes the SNP has already achieved more progress than it thought possible. He praises the civil service for responding to the demands of the new administration.

'I have to say that when we came into office we found a civil service that was, frankly, bored. But with a government coming in with a different and challenging agenda and with a real ambition for Scotland, the civil service just seized the opportunity to develop and deliver that change and I think we have made fantastic progress as an administration.'

While the new government appears to have gained increased public support, opinion polls continue to suggest that the majority of people do not want an independent Scotland. Swinney believes opinions have changed significantly since the government came in and brought a 'refreshing injection of new life and leadership'. He is convinced the momentum will eventually lead to outright independence.

In this, he is encouraged by UK Prime Minister Gordon Brown's recent support for a review of the Parliament's powers, which has been agreed by opposition parties in the Scottish Parliament. Brown was reported as saying he believed there was a 'very strong case' for having a review, a comment that was interpreted as backing for the possibility of more powers – although he also raised the possibility of the return of some powers to Westminster.

'It's a marvellous piece of news that the prime minister has effectively done a complete volte face on this,' Swinney states. 'Back in May he said there wasn't a scintilla of a reason for the Parliament getting more powers. Now he's saying there could be more powers, so all I can say is that it is another achievement of the SNP government that we have motivated the prime minister to take this different view.'

Swinney is fully immersed in his wide-ranging responsibilities and admits that he doesn't have much time to pursue other interests. Neither does he see much prospect of the hectic pace of the past few months easing off.

But he emphasises the importance of spending time with his family. He has two children and lives in rural Perthshire with his wife, Elizabeth Quigley, a BBC Scotland reporter.

Swinney has enjoyed remarkable successes so far as a minister but faces some tough challenges in the future. MacMahon says: 'What will now be a test is whether he can wring real efficiency savings out of the public sector in Scotland and whether he is prepared to take tough decisions like, for example, mutualising Scottish Water.'

But his toughest test of all, in the longer term, is likely to be whether he can convince critics that a local income tax can work and win enough support to get the legislation through the Parliament. If it doesn't go ahead, the SNP will be accused of having been forced to abandon what was regarded as a flagship policy.

John Swinney is Scotland's finance and sustainable growth secretary. He is one of the keynote speakers at the annual CIPFA in Scotland conference, which is being held at Aviemore on March 13—14

2015 Public Finance. Public Finance is published on behalf of the Chartered Institute of Public Finance and Accountancy by Redactive Publishing Ltd. All rights reserved. Reproduction of any part is not allowed without written permission. Redactive, 17-18 Britton Street, London, EC1M 5TP


"Hope, open the door." "I have to pee." "Almost done!" "Mrs. Fabricant." "It's Mark from across the hall." "Remember?" "My Roommate James pulled you out of the snowdrift." "As payback for that, I was wondering if maybe I could use your bathroom." "Is she still in there?" "And now you're second in line." "I need to use it really bad." "I'm selling my place in line for $200." "I was wondering if you had a restroom I could use." "Restroom for customers only." "I buy things here all the time." "What did you buy?" "Gum, soda." "You buy big ticket item, we talk." "Almost done." "104 "The Break-In"" "VO: ¤Aka¤, Do_Ob, pluch," "Ori" "So, James, this is my old Roommate Thom." "It's great to finally meet you, Thom." "Likewise." "All right, so I'll grab a few beers, and, Thom, don't let him get any embarrassing stories out of you." "My lips are sealed." "Okay, get this." "Freshman year, Mark paid $300 to sit in the front row of a Ricky Martin concert." "And Mark had long feathered hair, right?" "So Ricky thought he was a girl, and he called him up on stage to dance "Livin' La Vida Loca" with him." "What?" "Mark, tell me how is it" "Living La Vida Loca?" "Have you seen our new UPS guy?" "He is so fine." "I know." "I'm thinking of sending myself a package, so I can watch him pick it up and drop it off." "I'd like to order the "daddy-daughter hug."" " Daddy." " Princess." "Mr. Daniels." "Katie, are you working at the coffee shop too?" "Well, I wish." "A coffee shop Lots of perks." "What are you doing in town?" "I have a long layover." "I came by to see my baby on her job." "When I paid for four years of Princeton, I thought you had grand plans." "Notgrandeplans." "It's only temporary." "And hope's doing really great here." "They really look up to her." "She's basically the boss." "Toilet's clogged again, Princess." "Time to wave that magic wand." "I see." "Daddy, you can hang out at our place until I get off of work." "Really?" "You trust me alone in your apartment?" "There are no booze or nudie magazines laying around?" " Of course not." " That's too bad." "Kidding, I'm kidding." "Bye, Katie." "See you in a bit, sweetie." "Man, your dad is really on you about this job stuff?" "He's on this whole trip about me being successful." "I mean, he's forgetting I could marry rich." "I missed it." "I always forget to take my phone off vibrate." ""Vibrate"?" " Oh my god." " What?" "I left Mr. Happy on my bed." "Mr. Happy?" "You know." "Oh my god, your dad!" "One time in college, Mark got drunk and slow danced with a man named Shirley." "Now you're just making stuff up." "Am I?" "My dad is on his way up to the apartment, and" "I left something on my bed that I need you to remove." "What is it?" "It's personal." "Like a personal pan pizza?" "It's a..." "Well..." "It rhymes with schmibrator." ""Schmibrator"?" "What ever could that be?" "Fly-brator?" "You know what it is." "Just hide it!" "Okay, tell Hope I said, "you go, girl."" "Look at it." "It reminds me of my two favorite things..." "Women and light sabers." "It's weird..." "Hope uses that thing and yet she's still grouchy." "Her dad's here." "Quick, hide it." "You must be Mr. Daniels." "I'm Mark, Hope's roommate." "Nice to meet you." "Calm down." "I'll put my stuff in Hope's room." "No, no, there's plenty of time for that." "Don't be rude." "I'm James, the polite roommate." "Please, sir, right this way." "Thank you." "What are you doing?" "Come back here!" "Robber!" " Mr. Daniels, what's going on?" " A burglar in my daughter's room!" "He went out the window." "He was waving some sort of purple club." "I told you to just go in there and take it off the bed." " How hard is that?" " I'm sorry I couldn't satisfy you." "Apparently, no man can." "Now my dad thinks there was a burglar." " Where is the schmibrator?" " Schm-I don't know." "You know I think the world of you, and I would never ever judge you." "Of course." "Hope, your life is a joke." "No, it's not." "You got fired from your tv job, you work at a coffee shop, and you just had a robbery." "I'm cutting you off." " Mr. Daniels, please don't do that." " Hope loves shopping." "I won't be able to afford to live in New York." "Now you're getting it." "Move back home." "Go to law school." "What's keeping you in this place?" "Give me one good reason why I let you stay here." "Name one thing." "There's a lot." "Like what?" " Love." " That's it." "Love." "You have a boyfriend?" "And I'm in a very serious relationship with a handsome winner." "That's right." "I guess we'll have to get to know each other a little better." "It's not me." "It's Mark." "We wanted to surprise you!" "Schmile, honey." "You're in love with this guy?" "I mean, James here seems more your type." "Love is crazy." "It's crazy." " What do you do for a living?" " I'm an actor." "Are you a good actor?" "We'll find out soon, won't we?" " He's very successful, dad." " Really?" "What would I have seen you in?" "Mainly commercials." "I like commercials." "Which one?" "He did that one." "Remember?" "For the..." "Foot spray?" "He was a singing bottle..." "of spray." "Sing that song, mark." "Sing it!" "Itchy feet, if you've got itchy feet, spray me on, so you can't feel..." "the heat" "You don't have itchy feet spray me on." "That's the worst commercial I've ever heard." "Let's celebrate this happy occasion with some wine." "We'll celebrate our..." "Whole big relationship." "After that, we'll all go out to dinner." "I'll go change." ""Itchy feet, feel the heat"?" "Stupid-ass song." "I can't lie for you." "Please, go along with this to get my dad off my back." "It's already snowballing." "I'm a singing bottle of foot spray." "It's embarrassing." "Do it for me." " Thanks, Mark." " Thanks." "It will be a challenge acting like I'm in love with Hope." "Like you could ever get me." "While you're in here, do you need to use the sink?" "I just wanted to say thank you so much for going along with this." " Is that you're wearing for dinner?" " Why?" "Nothing." "It's fine." "It's just ugly." "What do you mean ugly?" "I wear it all the time." "And it's ugly all the time." "I never said anything before" " because you weren't my boyfriend." " Pretend boyfriend." "Then pretend you have some taste, and pick out another shirt." "I think I have a new good-luck charm." "That's three in a row." "I'm up to $200." "What is your good-luck charm?" "I can't really show it to you." "It's kind a personal and I'm a gentleman." "My life is boring." "I sit here all day eating jerky." "Show it!" "But you have to promise not to tell anyone." "We sell those in the back." "Big mark up." "Tell pa how you two lovebirds met." "I'm dying to know how she ended up with a guy like you." "Hope pursued me pretty aggressively." "She would not give up." "Once she saw me, she just wouldn't stop." "Call the police." "I have a stalker." "We always taught her to be persistent." "Mark thought she was crazy at first." "But you know what they say the crazy ones are always wild in bed." "Not Hope though." "We share a wall." "I never hear anything." "I'm like, "jeez, mark, make a move already."" "Honey, look." "The asian shrimp in peanut sauce looks great." "You do realize that Hope is allergic to both shrimp and peanuts." "Of course I knew that." "It's just a little joke." "I like to taunt her about her allergies." "Isn't that right, hopey-whopey?" "It is." "It's the thing we do." "You joke about killing her?" "That's the thing you do?" "Your throat will close and you'll die." "Get it?" "Stop it." "You're killing us like you wanna kill Hope." "You're not like any couple I've ever met." "There's something you should know, Mr. Daniels." "Mark and Hope are pretending." "They are pretending to be on their best behavior." "They're very physical." "Normally, Mark is licking her face like it's covered in gravy." "Thank you for not doing that in front of me." "Sorry, sir." "She's irresistible." "Come here, my little gravy boat." "Young love." "It has me vibrating with excitement." "It was good seeing you again." "Let's go." "We don't want you missing your flight." "It's a shame you have to rush off." "I wish you could stay longer, sir." "You know what?" "I don't see why I can't." " Can't what?" " Stay longer." "Stay longer?" "But you're ready to go." "I think I'll stay and get to know Mark a little better." "But doesn't mom want you home?" "Sweetie, we've been married for 30 years." "She does not." "Really?" "Okay." "You can take my room." "And out of respect I will sleep on the couch." "You'll sleep with Hope like you always do, as much as the thought sickens me." "Dad, that's okay." "Mark sleeps on the couch all the time," " like when we fight." " We're probably gonna fight tonight, so I'm headed there anyway." "I live here." "I can almost guarantee it." "It's okay." "You're sleeping with Hope." "Good night." "You two sleeping together?" "Won't your schmibrator get jealous?" ""I wish you could stay longer, sir."" "I think you'd be happy to have such a polite fake boyfriend." " What are you doing?" " I'm going to sleep." "What if my dad comes in?" "If he sees you," " the whole thing's blown." " Fine." " Now what are you doing?" " I don't know." "Why don't you just tell me?" "You're getting into bed wearing clothes." "I thought that was best, since we're not actually a couple." "If my dad comes in, it has to look real." "What do you normally sleep in?" "The nude." "That's a little too real." "What is that?" "Deep breathing." "It relaxes me, so I can go to sleep." " It's annoying." " Do it with me." " Stop it." " Fine." "I have to do something to help myself relax." "Certainly you can relate to that." "Get on the floor." "Do it." "You are the most controlling person I've ever met." " You're not allowed to say that." " Sure, you're only lying to your dad." "You want people to see you exactly the right way all the time." "But you know what?" "It's okay for people to see the flaws." "It's okay to do something not by the book," " something a little spontaneous." " I'm spontaneous." "Please!" "Name one time you were the least bit spontaneous." "I..." "Well, there was the time I..." "The pizza guy brought the wrong pizza and I ate it anyway." "Look out, world." "No telling what crazy Hope will do." "I do wild things all the time." " You don't." "I don't believe you." " Do too!" "I'll prove it." "How?" "Mark's right." "I'm a total control freak." " What?" " It's true." "We were kissing in my room, and it all made sense." "I've been afraid to let go my whole life." " You were kissing Mark?" " But that's not the point." " The point is..." " It's part of the point." " What happened?" " Nothing." "I was proving to him he was wrong about me, and I got carried away." "Is he a good kisser?" "Surprisingly, very good." "He's minty." "It was amazing." "Kissing Mark?" "Flying without a net." "I'm gonna start changing things right now." "Daddy, wake up!" "What is it, princess?" "Is the guy with the purple club back?" "I have to tell you the truth." "Mark's not really my boyfriend." "I'm not in love at all." " What?" " I made the whole thing up so you wouldn't make me move back home." "Thank God." "He's kind of a horse's ass." "I'm in the room." "I assume you're going to listen to me for once and move back?" "I learned something tonight." "The reason I've been lying is that everything feels so out of control." "But by me lying to you about Mark, I realized I need to go without a net." "I'm staying, Dad, and I'm giving you back my credit cards." "I need to do this on my own." "I mean, I can't force you to come home." "I'll buy you a pony." "Thanks, but no." "There we go." "All done." "You okay?" "I mean, the room is spinning, but yes." "Good night." "You know what?" "I'm not gonna take your cards." "Thank God." "I believe in you, honey." "So get out there and kick butt." " I will." " Good night." " Night, Daddy." " Night, Mr. Daniels." "Thank you again for allowing Hope to keep shopping." "So, hot lips..." "I hear you're quite the kisser." "I come from a long line of great kissers." "A good kisser." "That's me." "Any time you wanna practice..." "Making out with Hope to get to Katie?" "Not sure I understand it, but I like it." "Hope's device is my new good luck charm." "Really?" "What do you mean?"


Pages

Thursday, October 4, 2012

Dangerous Embrace by Dana Mason

Today is Launch Day for my friend, fellow SSP author, and Bay Area homegirl, Dana Mason. If you love romance and suspense, then join me in celebrating the release of Dana's debut novel, Dangerous Embrace.

Sarah Jennings wants nothing more than a quiet life—alone. Raised
by an eccentric mother, their life on the road only taught her how to run away
from hard times. But when she finds herself in an abusive relationship, this
lesson serves her well.

Now, back
in her hometown, she's found a place she loves. She’s a first grade teacher,
and with few friends and less family around, she has what she wants, a quiet
life under the radar where she can be free of her past and live quietly.
Finally comfortable in her own skin, she’s settled, and less fearful than she’s
ever been in her life.

But it
only takes one night and one act of violence for everything to change. Injured
and afraid, Sarah wants to run again, but Mark Summors refuses to let her go.

Just when
Sarah thinks she can have Mark and the life he promises, her past comes back to
haunt her.

Mark
Summors was born and raised in Santa
Rosa. He married his high school sweetheart and never
questioned his life, until he found his wife with another man.

Now
divorced, he wants something more. He’s passionate about his job, he wants to
protect people, and he devotes his life to it.

This time he’s protecting more than just another client, he’s protecting his
future; at least, Sarah Jennings will be his future, once he convinces her she
loves him.

Excerpt from Dangerous Embrace:

Sarah pried open her heavy
eyelids and turned, trying to focus on the clock. “Ow, dammit!” She clenched
her teeth and looked down at the sling tied to her arm. The smothering
realization pressed on her chest. When the nausea hit, she flung the covers off
and rushed to the bathroom, fighting to get to the toilet before her stomach
heaved.

When the painful dry heaving
stopped, she lay back on the cold tile floor, exhausted, and waited for the
room to stop spinning. Her ragged breaths roared in her ears and seemed to echo
in the quiet room. When her breathing slowed, the silence ebbed around her in
waves, but when footsteps approached the bathroom door, she tensed again.

A bead of sweat dripped down
her scalp and at the same time someone tapped at the door. Her pulse spiked and
she fought like hell to remember who brought her home from the hospital.

She closed her eyes. “Who’s
there?” The waver in her voice pissed her off. Gawd—please don’t let me be
pathetic in front of whoever this is.

A hesitant and completely
unfamiliar man’s voice said, “Are you all right? Do you need something?”

Sarah sucked in a hard breath.
“Um…” She exhaled slowly. “Who are you?”

“Mark Summors.”

She stiffened and tried to sit
up. “Do I know you?” she asked her voice pitching.

“I can explain if you open the
door.”

She steadied herself against
the bathtub. The sling had slipped up her arm, exposing the trail of bruises.
She swallowed another wave of nausea and tried to put the pieces together. Mark
Summors? She glanced around for something to use as a weapon just in case,
then she wanted to laugh—and cry. Who the hell was she kidding? She rolled her
eyes. Good plan, Sarah, take on a strange guy with a toilet brush.

“Can I come in?” His voice was muffled as if he was resting
his face against the door.

“Go ahead.” She clamped her
mouth closed to suppress a shiver, then said, “It’s unlocked.”

The door eased open and a cup
of water shot out at her.

“Oh, thank you,” she cried out,
relieved to wash the disgusting film out of her mouth. She snatched the cup out
of his hand and gulped it, letting her eyes lift above the rim to see his face.

“Ah.” Sarah choked and inhaled the water. She
set the cup down, almost upending it as she dropped it. “Oh my God!” She would
never forget those intense blue eyes, just like she would never forget the
smell of her attacker’s breath. They were all thrown together in the same horrifying
memory.

Dana Mason started writing to prove to her computer geek
husband and her math & science geek kids that she actually has a brain;
it’s just a right functioning brain instead of a left. She’s lived all over the
country and uses that experience in her writing and character studies. Her
debut novel, Dangerous Embrace, is the first in a contemporary romance series
about a group of friends from Northern California
who learn just how short life can be when you don’t hold on to what’s
important. Second chances don’t come easy…but sometimes love is worth the
risk.

When not writing, Dana specializes in professional
development and training. She’s also a board member on the local Art's Council
and does what she can to support the art community.

As an avid reader and movie watcher, she always requires a
happily ever after ending.

About Me

Mother, wife, author, editor, designer.
I am the author of two dark romantic thrillers, The Mistaken, my debut, and Leverage, the sequel. I'm currently working on my third novel, a psycho-sexual thriller titled Stirred


Q:

How do you split by continuous spaces when some entries have need to be split from a different location

I have the following and I'm trying to split it into Key: Value dictionary where the key is the protocol+version and the value is whether it's supported or not.
['SSLv2      not offered (OK)',
 'SSLv3      not offered (OK)',
 'TLS 1      not offered',
 'TLS 1.1    not offered',
 'TLS 1.2    offered (OK)',
 'TLS 1.3    not offered and downgraded to a weaker protocol',
 'NPN/SPDY   h2, http/1.1 (advertised)',
 'ALPN/HTTP2 h2, http/1.1 (offered)']

My problem is that I can't figure out a neat way to split this, I can't split by tabs since the data uses spaces, and I can't split by space because some protocols have space there as well. Example:
re.split(r'\s+', entries.strip(), 1)
['SSLv2', 'not offered (OK)'], ['SSLv3', 'not offered (OK)'], ['TLS', '1      not offered'], ['TLS', '1.1    not offered'], ['TLS', '1.2    offered (OK)'], ['TLS', '1.3    not offered and downgraded to a weaker protocol'], ['NPN/SPDY', 'h2, http/1.1 (advertised)'], ['ALPN/HTTP2', 'h2, http/1.1 (offered)']]

As you can see they all work mostly ok except for some protocols like: ['ALPN/HTTP2', 'h2, http/1.1 (offered)']
This is what the original data looks like:
SSLv2      not offered (OK)
SSLv3      not offered (OK)
TLS 1      not offered
TLS 1.1    not offered
TLS 1.2    offered (OK)
TLS 1.3    not offered and downgraded to a weaker protocol
NPN/SPDY   h2, http/1.1 (advertised)
ALPN/HTTP2 h2, http/1.1 (offered)

And I want my final output to look like this:
{
    'SSLv2': 'not offered (OK)',
    'SSLv3': 'not offered (OK)',
    'TLS 1': 'not offered',
    'TLS 1.1': 'not offered',
    'TLS 1.2': 'offered (OK)',
    'TLS 1.3': 'not offered and downgraded to a weaker protocol',
    'NPN/SPDY': 'h2, http/1.1 (advertised)',
    'ALPN/HTTP2': 'h2, http/1.1 (offered)'
}

A:

You may use the following regex with re.findall:
^(\S+(?:\s+\d+(?:\.\d+)*)?)\s+(.*)

See the regex demo. Details:

^ - start of string
(\S+(?:\s+\d+(?:\.\d+)*)?) - Group 1:

\S+ - 1+ non-whitespace chars
(?:\s+\d+(?:\.\d+)*)? - an optional non-capturing group matching 1+ whitespaces, 1+ digits and then 0+ occurrences of . and 1+ digits

\s+ - 1+ whitespaces
(.*) - Group 2: the rest of the line/string.

See the Python demo:
import re

entries = ['SSLv2      not offered (OK)', 'SSLv3      not offered (OK)', 'TLS 1      not offered', 'TLS 1.1    not offered', 'TLS 1.2    offered (OK)', 'TLS 1.3    not offered and downgraded to a weaker protocol', 'NPN/SPDY   h2, http/1.1 (advertised)', 'ALPN/HTTP2 h2, http/1.1 (offered)']
for entry in entries:
    print( dict(re.findall(r'^(\S+(?:\s+\d+(?:\.\d+)*)?)\s+(.*)', entry.strip())) )

Output:
{'SSLv2': 'not offered (OK)'}
{'SSLv3': 'not offered (OK)'}
{'TLS 1': 'not offered'}
{'TLS 1.1': 'not offered'}
{'TLS 1.2': 'offered (OK)'}
{'TLS 1.3': 'not offered and downgraded to a weaker protocol'}
{'NPN/SPDY': 'h2, http/1.1 (advertised)'}
{'ALPN/HTTP2': 'h2, http/1.1 (offered)'}


As is the case with most fantasy sports, injuries play perhaps the largest role in creating and diminishing value over the course of the fantasy Premier League season. This is especially true during the winter months, as players who picked up knocks early on in the season often return around this time to play their part for their clubs amid the extremely condensed schedule. Whether a player enters the starting lineup long term because of an injury to a teammate, or simply for a week, the boost in fantasy value is difficult to ignore in the face of the right matchup. In this week's FPL Barometer, we will explore how injuries are currently affecting the value of several recognizable names.

RISING:

Troy Deeney Deeney entered the season with a reputation as a scorer after notching 44 goals over his past two seasons in the Championship, yet he contributed just a pair of assists over his first eight Premier League matches. However, the 27-year-old has come alive with four goals in his last five games after his match-winning strike against Aston Villa last week. Deeney will continue to see scoring opportunities while playing alongside the ever-dangerous Odion Ighalo, and his salary is extremely affordable in most formats. He is primed to continue his productive run of form in this weekend's home match versus Norwich.

Alex Oxlade-Chamberlain Oxlade-Chamberlain's return from a month-long hamstring injury in Matchweek 14 couldn't have come at a better time for Arsenal, as Alexis Sanchez aggravated a hamstring injury in the match, joining the likes of Santi Cazorla (knee), Theo Walcott (calf), Francis Coquelin (calf) and Jack Wilshere (leg) on the training room table. The 22-year-old should get the opportunity to contribute in the busy weeks that lay ahead, and his all-action style of play offers multi-category potential whenever he garners regular playing time. He should be quite inexpensive in most formats and would be an excellent option if he were to break into the starting lineup for this weekend's home match versus Sunderland.

Kieran Richardson Richardson has settled into the starting left-back position since the season-ending injury to Jordan Amavi and he was an impact performer in last week's match versus Watford, when he fired in six crosses and provided his first assist of the season. The 31-year-old is a capable attacker, stemming back to his days as a midfielder for Manchester United, and he is especially attractive in formats that reward action stats while focusing less on clean sheets. Richardson carries a bare minimum price tag in all formats and can be a useful piece to round out a roster.

FALLING:

Adam Lallana Lallana has regularly featured in the Liverpool midfield this season, but he has failed to make an impact on the stat sheet, with just one assist in 10 Premier League appearances. Jordan Henderson's return from injury could spell the end of Lallana's run in manager Jurgen Klopp's three-man midfield, which also regularly features the likes of James Milner and Emre Can. Lallana is also capable of playing as a member of the front three, but he is unlikely to move ahead of Christian Benteke, Daniel Sturridge, Roberto Firmino or Philippe Coutinho on the depth chart anytime soon. The 27-year-old's versatility makes him a valuable squad player at this juncture of the season, but that is of little use to FPL managers.

Yaya Toure Toure has been a force in the middle of the park for Manchester City this season, and he has already topped his Premier League assist total from all of last season, as he had been occupying a more attacking role in the absence of David Silva. Toure has failed to factor into a goal in each of his last three league appearances, however, and Silva's return from injury should shift him back into his more familiar holding midfield position. The Ivorian still carries a hefty price tag in many formats, and offensive statistics will be hard to come by with Silva, Kevin de Bruyne and Raheem Sterling carrying much of the load behind Sergio Aguero (ankle).

Lukasz Fabianski After finishing as one of the top FPL goalkeepers a season ago and getting off to a fine start to the current campaign, Fabianski has endured a poor run of form over the last two months. The Pole has earned just one victory in his last 10 league matches and has allowed multiple goals in four of the last eight. This weekend's match against high-flying Leicester City hardly presents Fabianski with a chance to turn things around.

Join Our Subscriber-Only Soccer Chat

Chat with our writers and other RotoWire Soccer fans for all the pre-game info and in-game banter.

Tate is a soccer writer for RotoWire who focuses primarily on the Barclays Premier League and La Liga. He also contributes to NFL, MLB & NBA coverage. He is a former college soccer player as well as an avid supporter of Arsenal, FC Dallas and America's team: The Dallas Cowboys.


A multiphasic approach for the identification of endophytic bacterial in strawberry fruit and their potential for plant growth promotion.
This study used a multiphasic approach, characterized by the simultaneous use of culture-dependent and culture-independent methods, to investigate endophytic bacterial communities in strawberry (Fragaria ananassa) fruit. A total of 92 bacterial endophytes were isolated and initially grouped by their repetitive extragenic palindromic (rep)-PCR banding pattern and biochemical features. Phylogenetic analysis of the 16S rRNA gene sequences of 45 representatives showed that the isolates belonged to the species Bacillus subtilis (eight isolates), Bacillus sp. (seven isolates), Enterobacter sp. (seven isolates), Enterobacter ludwigii (six isolates), Lactobacillus plantarum (six isolates), Pseudomonas sp. (five isolates), Pantoea punctata (three isolates), and Curtobacterium citreum (three isolates). Nucleic acids were extracted from the strawberry fruit and subjected to 16S rRNA gene directed polymerase chain reaction denaturing gradient gel electrophoresis (16S rRNA PCR-DGGE). The species B. subtilis, Enterobacter sp., and Pseudomonas sp. were detected both by isolation and DGGE. The DGGE fingerprints of total bacterial DNA did not exhibit bands corresponding to several of the representative species isolated in the extinction dilution (L. plantarum, C. citreum, and P. punctata). In contrast, bands in the DGGE profile that were identified as relatives of Arthrobacter sp. and one uncultivable Erythrobacter sp. were not recovered by cultivation techniques. After isolation, the nitrogen fixation ability and the in vitro production of indole-3-acetic acid (IAA) equivalents and siderophores were evaluated. A high percentage of isolates were found to possess the ability to produce siderophores and IAA equivalents; however, only a few isolates belonging to the genera Pseudomonas and Enterobacter showed the ability to fix nitrogen. Plant growth promotion was evaluated under greenhouse conditions and revealed the ability of the Bacillus strains to enhance the number of leaves, shoot length, root dry weight, and shoot dry weight. The activity of the bacterial isolate identified as B. subtilis NA-108 exerted the greatest influence on strawberry growth and showed a 42.8% increase in number of leaves, 15.26% for high shoot, 43.5% increase in root dry weight, and a 77% increase in shoot dry weight when compared with untreated controls.


Google Gooooooooooooooooooal Easter Egg - ashishbharthi
http://gizmodo.com/5558121
======
danielnicollet
This is hardly an "Easter Egg". Just a custom search results set like they
have for so many other searches - examples:
[http://www.google.com/search?sourceid=chrome&ie=UTF-8...](http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=time+paris)
[http://www.google.com/search?hl=en&safe=off&q=whois+...](http://www.google.com/search?hl=en&safe=off&q=whois+ycombinator.com&aq=f&aqi=&aql=&oq=&gs_rfai=)
etc.

Sorry but are just fishing for traffic to your blog?

------
yurisagalov
Apparently this is making more people search for the term "world cup".

[http://www.google.com/trends/hottrends?sa=X&oi=prbx_hot_...](http://www.google.com/trends/hottrends?sa=X&oi=prbx_hot_trends&ct=title&q=world+cup)

Google: secretly shoving football down the US's throat

(and about time too! ;)