text:
# Fun with Matrices

This post is a little bit contrived.

Since I’ve been playing around with 3D graphics and GPUs, I’ve become fascinated with matrices (and maths in general). On top of that, I’ve been looking for a reason to play with Jupyter Notebooks. I’ve become interested in literate programming as well - it seems like a fantastic teaching tool.

So instead of doing what I was supposed to be doing this lovely Saturday, I decided to try to write a super basic (non compatible) version of Jupyter Notebooks for Javascript posts (I call it Kale). I decided to write a simple post about using Matrices in Javascript to try it out.

When you click the run button on any of the code blocks on this post, the output of one block will be the input to the next block. You’ll need to execute them in order for them to work - if you skip one you’ll get an error.

One last thing - I am not a maths major or anything of the sort. If you’ve found this while doing homework for school, you’re probably better off reading something else. If you’re just a tinkerer / hacker / explorer you might like it.

Ok, lets try out this slightly interactive post…

## Why a Matrix is Useful

I think of matrices as little black boxes that transform a thing (usually a set of numbers) into another thing (usually a set of numbers). I believe the proper term is System of Equations.

Imagine you have a multi-threaded application that can run a set of functions in parallel. You could define all the functions, store them in a table, and then run them all at the same time.

If you wired up a bunch of these, you could make some interesting things - like maybe a GPU or a quantum computer.

It’ll be clearer with some examples.

## Anatomy of a Matrix

For this post I am going to be using a matrix layout that is useful for 2D programming. This was the easiest for me to get started with, and it scales to more dimensions once you have it down.

The first matrix we’ll talk about is the identity matrix. It looks like this:

The identity matrix is like a 1 in standard maths. If you multiply anything by 1, you’ll get that same number back. Same thing with the identity matrix. Anything you multiply by the identity matrix will give you back the original matrix.

Also note that the main feature of a matrix is made up of rows and columns. That’s all that is up there. It’s just an array of numbers layed out in rows and columns - called a 3x3 matrix.

To represent this in some code, let’s make a simple class in Javascript (click run after having a look (you can make the textarea bigger)):

class Matrix {
/** Create a new matrix with the given row and column size */
constructor(row, col, data) {
if (!col || !row) {
throw Error("Need column and row size");
}
this.rc = [row, col];
if (data) {
this.d = data;
} else {
this.d = new Array(row * col);
}
}
}

return Matrix;

## Use a Matrix to Move Stuff Around

On top of the identity matrix, there are a few other commonly used matrices that are used for translation (moving on the x and y axis), rotation, and scale. Here are what those look like:

Where tx and ty are translation on the x and y axis, sx and sy are scale on the x and y axis, and theta is the degree in radians to rotate. The coolest one being rotation.

One thing you can do with these matrices is multiply them together to describe how something should move from one place to another. Using the class we made above, lets build a few matrices to describe a translation and rotation:

const [Matrix, me] = arguments;

// Translate to 30,30
const m1 = new Matrix(3,3,
[
1, 0, 30,
0, 1, 30,
0, 0, 1,
]);

const deg = 270;
const rad = (deg * Math.PI) / 180;

// Rotate by 270 degrees
const m2 = new Matrix(3,3,
[
0, 0, 1,
]);

return [m1, m2];

One of these matrices describe a translation by 30px on the X and Y axis, and the other a rotation by 270 degrees.

Note: if the rotation one seems difficult to understand, refresh yourself (or learn about) the unit circle. However, you don’t have to understand how it works “under the hood” if you don’t want to.

Now we have two matrices that we’re going to multiply together. Multiplying two matrices together is not intuitive at first. What you have to do is multiply the rows of one matrix against the columns of another. So we are going to do the following:

There isn’t a built-in way to do this in Javascript, and this isn’t the fastest way to do it, but here is a, hopefully, straightforward example of multiplying our two matrices together:

const [[m1, m2], me] = arguments;

const ROW = 0;
const COL = 1;

// Make an array big enough to hold our result
const out = new Array(m1.rc[ROW] * m2.rc[COL]);

function mat_mul(m1, m2, out) {
if (m1.rc[COL] != m2.rc[ROW]) {
throw Error("column size of m1 must match row size of m2");
}
const row = new Array(m1.rc[ROW]);
const col = new Array(m2.rc[COL]);

// Loop over each row of the first matrix
for (let i = 0; i < m1.rc[ROW]; i++) {
for (let r = 0; r < m1.rc[COL]; r++) {
row[r] = m1.d[r + i * m1.rc[COL]];
}
// Loop over the columns to use when multiplying
// against the row loaded above
for (let j = 0; j < m2.rc[COL]; j++) {
let v = 0;
for (let c = 0; c < m2.rc[ROW]; c++) {
col[c] = m2.d[j + c * m2.rc[COL]];
v += row[c] * col[c];
}
out[j + i * m1.rc[ROW]] = v;
}
}
}

mat_mul(m1, m2, out);
K.Print(me, out);
return out;

Note: If you’re into it, trying to figure out how to quickly multiply two matrices together is a really fun project. I want to play with a quantum computer :-D.

Ok now that we’ve got this matrix that will move and rotate something, what do we do with it? Let’s use it to move my profile picture up there on the left (if you’re on a desktop computer).

One problem with using a matrix in CSS is that the way CSS uses matrices is… well… special.

Our created matrix looks like this:

But CSS defines the input for it’s matrix transform like this:

Which is neither row nor column order. I guess they decided to split the difference and just make everyone slightly irritated.

So, lets make a quick little function that will make our awesomely cool matrix into the version CSS wants, and apply it to that profile picture over there:

const [out, me] = arguments;

function mat_2d_to_css(a) {
if(a.length < 6) {
throw Error("Array must have at least 6 elements to be formatted");
}
const out3 = [a[0], a[1], a[3], a[4], a[2], a[5]];
return matrix(\${out3.join(",")});
}

const transform = mat_2d_to_css(out);

K.Print(me, transform);

const b = document.querySelector("img");
b.style.transition = "all 3s ease-out";
b.style.transform = transform;

Don’t forget you need to have run all the code fragments for the image to move. Or, you can:

Hopefully that was interesting. Matrices are one of my favourite things to play with. If you’re interested in graphics programming or quantum computing, I highly recommend you dig into them and play around.

## More Kale

Kale can also load 3rd party Javascript and run it. Here it is using d3 to make a simple graph:

await K.Include("https://d3js.org/d3.v4.js");

const me = arguments[1];
const svg = K.GetD3Canvas(me);

const x = d3.scaleLinear().domain([0, 100]).range([0, 400]);

svg.call(d3.axisBottom(x));

svg
.append("circle")
.attr("cx", x(10))
.attr("cy", 100)
.attr("r", 40)
.style("fill", "blue");
svg
.append("circle")
.attr("cx", x(50))
.attr("cy", 100)
.attr("r", 40)
.style("fill", "purple");
svg
.append("circle")
.attr("cx", x(100))
.attr("cy", 100)
.attr("r", 40)
.style("fill", "green");

return x;


text:
DeepAI

# A Probabilistic and Non-Deterministic Call-by-Push-Value Language

There is no known way of giving a domain-theoretic semantics to higher-order probabilistic languages, in such a way that the involved domains are continuous or quasi-continuous - the latter is required to do any serious mathematics. We argue that the problem naturally disappears for languages with two kinds of types, where one kind is interpreted in a Cartesian-closed category of continuous dcpos, and the other is interpreted in a category that is closed under the probabilistic powerdomain functor. Such a setting is provided by Paul B. Levy's call-by-push-value paradigm. Following this insight, we define a call-by-push-value language, with probabilistic choice sitting inside the value types, and where conversion from a value type to a computation type involves demonic non-determinism. We give both a domain-theoretic semantics and an operational semantics for the resulting language, and we show that they are sound and adequate. With the addition of statistical termination testers and parallel if, we show that the language is even fully abstract - and those two primitives are required for that.

11/21/2021

We give a commutative valuations monad Z on the category DCPO of dcpo's ...
01/31/2021

### Commutative Monads for Probabilistic Programming Languages

A long-standing open problem in the semantics of programming languages s...
01/26/2022

### Polarized Subtyping

Polarization of types in call-by-push-value naturally leads to the separ...
09/26/2022

### Focusing on Liquid Refinement Typing

We present a foundation systematizing, in a way that works for any evalu...
06/30/2021

### A Domain-Theoretic Approach to Statistical Programming Languages

We give a domain-theoretic semantics to a statistical programming langua...
11/11/2019

### Recurrence Extraction for Functional Programs through Call-by-Push-Value (Extended Version)

The main way of analyzing the complexity of a program is that of extract...
11/27/2017

### Measurable Cones and Stable, Measurable Functions

We define a notion of stable and measurable map between cones endowed wi...

## 1 Introduction

A central problem of domain theory is the following: is there any full Cartesian-closed subcategory of the category of continuous dcpos that is closed under the probabilistic powerdomain functor [14]? Solving the question in the positive would allow for a simple semantics of probabilistic higher-order languages, where types are interpreted as certain continuous dcpos.

However, we have a conundrum here. The category itself is closed under [13], but is not Cartesian-closed [2, Exercise 3.3.12(11)]. Among the Cartesian-closed categories of continuous domains, none is known to be closed under , and most, such as the category of bc-domains or the category of continuous complete lattices, definitely are not [14].

Instead of solving this problem, one may wonder whether there are other kinds of domain-theoretic semantics that would be free of the issue. Typically, can we imagine having two classes of types? One would be interpreted in a category of continuous dcpos that is closed under for example, although we will prefer the category of pointed coherent continuous dcpos (see below). The other would be interpreted in a Cartesian-closed category of continuous dcpos, and we will use . Such a division in two classes of types is already present in Paul B. Levy’s call-by-push-value [16] (a.k.a. CBPV), and although the division is justified there as to be between value types and computation types, the formal structure will be entirely similar.

#### Outline

We briefly review some related work in Section 2, and give a few basic working definitions in Section 3. We define our probabilistic call-by-push-value languages in Section 4, explaining the design decisions we had to make in the process—notably the extra need for demonic non-determinism. We give domain-theoretic and operational semantics there, too. We establish soundness in Section 5 and adequacy in Section 6, to the effect that for every ground term of the specific type

, the probability

that must terminate, as defined from the operational semantics, coincides with a similar notion of probability defined from the denotational semantics. In Section 7, we review a few useful consequences of adequacy, among which the coincidence between the applicative preorder and the contextual preorder (both will be defined there), a fact sometimes called Milner’s Context Lemma in the context of PCF (see [19, Theorem 8.1]). We show that, among the languages we have defined, CBPV is not (inequationally) fully abstract in Section 8, and that adding a parallel if operator does not make it fully abstract, but that adding both and a statistical termination tester operator (as in [11]) results in an (inequationally) fully abstract language. The latter is proved in Section 9. We conclude and list a few remaining open questions in Section 10.

#### Acknowledgments

I wish to thank Zhenchao Lyu and Xiaodong Jia, who participated in many discussions on the theme of this paper, and Ohad Kammar, who kindly pointed me to [21].

## 2 Related Work

Call-by-push-value (CBPV) is the creation of Paul B. Levy [16] (see also the book [17]), and is a typed higher-order pure functional language. It was originally meant as a subsuming paradigm, embodying both call-by-value and call-by-name disciplines.

The first probabilistic extension of CBPV was proposed recently by Ehrhard and Tasson [4], and its denotational semantics rests on probabilistic coherence spaces. Their typing discipline is inspired by linear logic, and they also include a treatment of general recursive types, which we will not. In contrast, our extension of CBPV will have first-class types of subprobability distributions , and will also include a type former for demonic non-determinism (a.k.a., must-non-determinism).

Statistical probabilistic programming has attracted quite some attention recently, and quasi-Borel spaces and predomains have recently been used to give adequate semantics to typed and untyped probabilistic programming languages, see [21]. The latter describes another way of circumventing the problem we stated in the introduction. One important point that Vákár, Kammar and Staton achieve is the commutativity of the probabilistic choice monad, at all, even higher-order, types. In standard domain theory, the monad is known to be commutative in full subcategories of only. That would be enough motivation to attempt to solve the problem stated in the introduction, of finding a Cartesian-closed category, closed under [14]. We also implement a commutative monad in a higher-order setting; our way of circumventing the problem is merely different.

There is a large body of literature concerned with the question of full abstraction for PCF-like languages. The first paper on the subject is due to G. Plotkin [18], who defined the language PCF, asked all the important questions (soundness, adequacy, full abstraction, definability), and answered all of them, except for the question of finding a fully abstract denotational model of PCF without parallel if, a question that was solved later, through game semantics notably [12, 1]. Th. Streicher’s book [19] is an excellent reference on the subject.

Probabilistic coherence spaces provide a fully abstract semantics for a version of PCF with probabilistic choice, as shown by Ehrhard, Tasson, and Pagani [5]. The already cited paper of Ehrhard and Tasson [4] gives an analogous result for their probabilistic version of CBPV. Our work is concerned with languages with domain-theoretic semantics instead, and our former work [11] gives soundness, adequacy and full abstraction results for PCF plus angelic non-determinism, and for PCF plus probabilistic choice and angelic non-determinism plus so-called statistical termination testers. We will see that CBPV naturally calls for a form of demonic, rather than angelic, non-determinism.

## 3 Preliminaries

We refer to [8, 2, 10] for material on domain theory and topology. A dcpo is pointed if and only if it has a least element . Dcpos are always equipped with their Scott topology. and are dcpos, with the usual ordering. The way-below relation is written : if and only if for every directed family such that , there is an such that . A dcpo is continuous if and only if every element is the supremum of a directed family of elements way-below it. In that case, the sets form a base of open sets of the Scott topology. In general, a basis of is a set of elements of such that, for every , is directed and has as supremum. A dcpo is continuous if and only if it has a basis. Then the sets , , also form a base of the Scott topology.

We write for the specialization ordering of a topological space. For a dcpo , that is the original ordering on . A subset of a topological space is saturated if and only if it is upwards-closed in , if and only if it is the intersection of its open neighborhoods. A topological space is locally compact if and only if for every , for every open neighborhood of , there is a compact saturated set such that . ( denotes the interior of .) In that case, for every compact saturated subset and every open neighborhood of , there is a compact saturated set such that . A topological space is coherent if and only if the intersection of any two compact saturated subsets is compact. It is well-filtered if and only if for every filtered family of compact saturated sets (filtered meaning directed for reverse inclusion), every open neighborhood of already contains some . In a well-filtered space, the intersection of such a filtered family is compact saturated. A stably compact space is a , well-filtered, locally compact, coherent and compact space . Then the complements of compact saturated sets form another topology on , the cocompact topology, and with the cocompact topology is the de Groot dual of . For every stably compact space, . A pointed, coherent, continuous dcpo is always stably compact.

Given two dcpos and , denotes the dcpo of all Scott-continuous maps from to , ordered pointwise. Directed suprema are also pointwise, namely for every directed family in .

## 4 The Languages CBPV(D,P) and CBPV(D,P)+pifz+◯

The first language we introduce is called CBPV: it is a call-by-push-value language with emonic non-determinism and robabilistic choice. We will explain below why we do not consider just probabilistic choice, but also demonic non-determinism.

### 4.1 Types and their Semantics

We consider the following grammar of types:

 σ,τ,… ::=Uτ––∣unit∣int∣σ×τ∣Vτ σ––,τ––,… ::=Fτ∣σ→τ––.

The types , , …, are the value types, and the types , , …, are the computation types, following Levy [16]. Our types differ from Levy’s: we do not have countable sums in value types or countable products in computation types, we write instead of , and we have a primitive type of integers; the main difference is the construction, denoting the type of subprobability valuations on the space of elements of type .

We have already said in the introduction that computation types will be interpreted in the category of continuous complete lattices. Value types will give rise to pointed, coherent, continuous dcpos :

• for every computation type , we will define as : being a continuous complete lattice, it is in particular pointed, coherent, and a continuous dcpo;

• will be Sierpiński space with ;

• will be , with the ordering that makes least and all integers be pairwise incomparable;

• will be , where denotes the dcpo of all subprobability valuations on the space .

A subprobability valuation on is a map from the lattice of open subsets of to which is strict (), Scott-continuous, and modular (). When is a continuous dcpo, so is [13, Corollary 5.4]. It is pointed, since the zero valuation is least in . If is also coherent, then is stably compact, see below. Hence is indeed a pointed, coherent continuous dcpo.

The fact that is stably compact for every coherent continuous dcpo is folklore. We argue as follows. The lift of , obtained by adding a fresh bottom element to , is stably compact. Then the space of all probability valuations , i.e., such that , is stably compact in the weak upwards topology [3, Theorem 39]. The latter has a subbase of open sets of the form , for every open subset of and . The restriction map is a homeomorphism from onto , both with their weak upwards topology, with inverse . Hence is stably compact in its weak upwards topology. Since is continuous, the latter coincides with the Scott topology, as shown by [15, Satz 8.6], see also [20, Satz 4.10].

It might seem curious that probabilistic non-determinism arises, as , among the value types. I have no philosophical backing for that, but this is somehow forced upon us by the mathematics.

Similarly, computation types will give rise to continuous complete lattices —notably will be the continuous complete lattice of all Scott-continuous maps from to —, but we have to decide on an interpretation of types of the form .

If we had decided to interpret computation types as bc-domains instead of continuous complete lattices, then a natural choice would be to define as Ershov’s bc-hull of [7]. (Bc-domains are, roughly speaking, continuous complete lattices that may lack a top element.) As Ershov notices, “the construction of a bc-hull in the general case is highly nonconstructive (using a Zorn’s lemma)” (ibid., page 13). Fortunately, the bc-hull of a space is a natural subspace of the Smyth powerdomain of , at least when is a coherent algebraic dcpo (ibid., Corollary B), and is easier to work with. Explicitly, is the poset of all non-empty compact saturated subsets of , ordered by reverse inclusion, and is used to interpret demonic non-determinism in denotational semantics. When is well-filtered and locally compact, is also a continuous dcpo, and it is a bc-domain provided is also compact and coherent. We shall see below that , the poset of all (possibly empty) compact saturated subsets of —alternatively, plus an additional top element —, is a continuous complete lattice whenever is a stably compact space, and that would make a good candidate for .

For technical reasons related to adequacy, we will need a certain map below to be strict, i.e., to map to . (Technically, this is needed so that the denotational semantics of the construction , to be introduced below, be strict in that of , in order to validate the fact that loops forever if does.) This will be obtained by defining as instead, where is the lift of , obtained by adding a fresh element below all others.

We recapitulate:

• ;

• .

Let us check that has the required property of being a continuous complete lattice, and let us prove some additional properties that we will need later. We start with the similar properties of . We let map every to .

###### Proposition 4.1

Let be a stably compact space. Then:

1. is a continuous complete lattice, and is way-below if and only if ;

2. For every continuous complete lattice , for every continuous map , there is a Scott-continuous map such that , and it is defined by .

3. , .

Proof. 1. This is well-known, but here is a brief argument. The elements of are exactly the closed subsets in the de Groot dual of , and the closed sets of any topological space always form a complete lattice. Note that the supremum of an arbitrary family in is .

Given any compact saturated subset of , the family of compact saturated neighborhoods of is filtered, and has as intersection. Indeed, since is saturated, it is the intersection of its open neighborhoods; for every open neighborhood of , local compactness implies that there is a compact saturated set such that ; applying this to shows that is non-empty, and given , applying it to , shows that contains an element included in both and .

It follows that, if , then contains an element of , hence in particular an open neighborhood of . Conversely, if where is open, then for every directed family in such that , contains some by well-filteredness, hence . Therefore .

Finally, since every in is the filtered intersection of the elements of , it is the supremum of the directed family , and we have just argued that every element of is way-below , showing that is continuous.

2. We define as . This satisfies , and is monotonic. Note that this is defined even when is empty, in which case is the top element of . In order to show that is Scott-continuous, let be a directed family in , and . We wish to show that ; the converse inclusion is by monotonicity. To this end, we let be an element of way-below . Since for every , every element of is in the open set . Then is included in , so by well-filteredness some is also included in . Then for every , so . Since that holds for every , the desired inequality follows.

3. Easy check. Note that item 2 does not state that is unique; we have just chosen the largest one. A similar construction is well-known for . Proposition 4.1 establishes the essential properties needed to show that defines a monad on the category of stably compact spaces, and that is not only well-known, but we will not require as much.

We turn to . We again write for the function that maps to , this time from to . Below, we again write for the extension of to . This should not cause any confusion with the map of Proposition 4.1, since the two maps coincide on . Note that is now strict.

###### Proposition 4.2

Let be a stably compact space. Then:

1. is a continuous complete lattice, and is way-below if and only if , or and ;

2. For every continuous complete lattice , for every continuous map , there is a strict Scott-continuous map such that . This is defined by , and for every , .

3. , .

4. For every stably compact space , for every Scott-continuous map , and for every Scott-continuous map from to a continuous complete lattice , .

Proof. 1. The lift of a continuous complete lattice is a continuous complete lattice, and is always way-below every element.

2. Easy.

3. We check the second inequality. That follows from Proposition 4.1, item 3 if . If , then and . Similarly if .

4. Fix . If , then by strictness. Henceforth, we assume that .

If for some , then , so , and , since is strict. Henceforth, we assume that for every .

We claim that is compact. Let be a directed family of open subsets of whose union contains . For every , is compact and included in , so for some . Hence . Since is compact, for some , whence .

is also saturated in , hence an element of , and therefore also of . It follows that this is the infimum of the elements , , hence is equal to . Therefore . Item 4 above is part of the properties needed to check that defines a monad on . We will not expand on that.

### 4.2 Syntax

We define the syntax of our language CBPV inductively as follows, using the notation (or ) to say “ is a term of type ” (resp., ).

• There are countably infinitely many variables , , …of each value type , and they are all terms of type . There is no variable of any computation type, as in Levy’s original CBPV. We will write , , …, when the type is unimportant or clear from context.

• For every term , .

• For all terms and , . (Levy writes as .)

• For every , .

• For every , for every , . In order to comply with the spirit of CBPV, we extend the notation to the case where has an arbitrary computation type , by induction on , by defining where as , where is fresh.

• For every , .

• For every , .

• .

• For every , .

• For all , and .

• For all and (where is any value or computation type), .

• For all and , .

• For every , and .

• For all and , .

• For every , .

• For every and every , .

• For all , .

• For all , .

• . We extend this to for every computation type , by defining as .

• For every , .

The variable is bound in , in , and in , and its scope is in all three cases. We omit the standard definition of -renaming and of capture-avoiding substitution. Although can only be of a value type, we can still define recursive objects of computation types: defining so that and have the same semantics can be done by writing , where is substitution of for the fresh variable in . This kind of trick is typical of CBPV.

Using recursion at value types would allow one to define interesting values. For example, we can define the uniform distribution on

by the term , which operates via a form of rejection sampling.

We will also consider an extension of CBPV called CBPV, obtained by admitting the following additional clauses:

• For every , for every , (statistical termination tester).

• For every , for all , (parallel if). We extend the notation to the case where and have an arbitrary computation type by letting denote when , have type , where is a fresh variable.

The language CBPV is obtained by admitting only the second one as extra clause, while CBPV only admits the first one as extra clause.

### 4.3 Denotational Semantics

The denotational semantics is given by a family of Scott-continuous map , one for each (resp., ), from the dcpo to : see Figure 1, where the bottom two clauses are specific to CBPV, resp. to CBPV, and the two of them together are specific to CBPV. The elements of are called environments and are seen as maps from variables to values. We use the notation to denote the function that maps each to . For every , and every , we write for the environment that maps to and every variable to . The operator maps every Scott-continuous map from a pointed dcpo to itself, to its least fixed point . The Dirac mass at is the probability valuation such that if , otherwise. For every continuous map , is the continuous map from to defined by for every open subset of . For future reference, we note that , and that, for every continuous map ,

 ∫y∈Yh(y)df†(ν)=∫x∈X(∫y∈Yh(y)df(x))dν. (1)

Implicit here is the fact that the map is itself continuous. Also, integration is linear in both the integrated function and the continuous valuation , and Scott-continuous in each. These facts can be found in Jones’ PhD thesis [13].

The fact that the semantics is well-defined and continuous in is standard. Note the use of binary infimum () in the semantics of and of , for which we use the following lemma.

###### Lemma 4.3

Let be a continuous complete lattice.

1. The infimum map is Scott-continuous.

2. For any two continuous maps , where is a any topological space, the infimum is computed pointwise: .

Proof. Item 1 is well-known. Explicitly, one must show that for every directed family with supremum in , for every , : for every , is below and below some , hence below for some .

As for item 2, the composition of with is continuous by item 1, is below and , and is clearly above any lower bound of and .

### 4.4 Operational Semantics

We choose an operational semantics in the style of [11]. It operates on configurations, which are pairs of an evaluation context and a term . The deterministic part of the calculus will be defined by rewrite rules between computations. For the probabilistic and non-deterministic part of the calculus, we will rely on judgments , which state, roughly, that the probability that computation terminates, starting from , is larger than .

The elementary contexts, together with their types (where , are value or computation types) are defined by:

• , for every and every computation type ;

• for every ;

• , for every computation type ;

• ;

• for all , where is any value or computation type;

• for every ;

• and , for all value types and ;

• , for every .

The initial contexts are , and . For every elementary or initial context and every , we write for the result of replacing the unique occurrence of the hole in (after removing the outer square brackets) by . E.g, .

A context (of type ) is a finite list () where is an initial context, , …, are elementary contexts, and , , and . We then write for .

Note that the contexts are defined in exactly the same way for CBPV and for CBPV, CBPV, and CBPV.

The configurations of the operational semantics are pairs where and , for arbitrary value or computation types . The rules of the operational semantics are given in Figure 2. The last row is specific to CBPV, CBPV, or to CBPV. The first rewrite rule—the redex discovery rule —applies provided is an elementary context. The notation denotes capture-avoiding substitution of for in .

The judgments are defined for all terms (where is a value or computation type), contexts , and , and mean that is way-below the probability of termination of (i.e., either or is strictly less than the probability that terminates). Since induces non-deterministic choice, we really mean the probability of must-termination, namely that, in whichever way the non-determinism involved in the use of the operator is resolved (evaluating left, or right), the final probability is larger than .

## 5 Soundness

We write for , where sups are taken in .

We let the rank of a type be for a value type that is not of the form , for types of the form , and for computation types. This will play a key role in our soundness proof, for the following reason: for every elementary or initial context , the rank of is less than or equal to the rank of . Hence if is of type , and is of type , then every has rank between those of and .

We will also need to define the semantics of contexts so that for every and for every environment . is the composition of , , , …, , where:

• maps to ,

• ,

• is the identity map,

• maps to and otherwise adds one,

• maps to and otherwise subtracts one,

• maps to , every non-zero number to and to ,

• maps to , and to ,

• is first projection,

• is second projection,

• ,

• , and

• maps to .

###### Proposition 5.1 (Soundness)

Let , , where is a value or computation type, and let . In CBPV, in CBPV, in CBPV, and in CBPV:

1. For every , if is derivable, then either and , or and for every , .

2. If then , otherwise for every , .

Proof. Item 2 is an easy consequence of item 1, which we prove by induction on the derivation.

In the case of the first rule (), , and . For every , we have , so , and certainly for every .

The case of the second rule is obvious.

The case of the leftmost rule of the next row follows from the observation that if , then . We use the standard substitution lemma in the case of -reduction (: the value of the left-hand side is , and the value of the right-hand side is ). In the case of , we also use the fact that (Proposition 4.2, item 2). In the case of , we use the equality and the substitution lemma.

By our observation on ranks, if , where and for each , then all the types are computation types (rank ). In that case, can only be of one of the two forms , . (Further inspection would reveal that the first case is impossible, but we will not need that yet.) We now observe that in each case, maps top to top: in the case of , this is by Proposition 4.2, item 3. It follows that also maps top to top, whence . As a consequence, , and the claim that for every , is vacuously true: the rule that derives for every is sound.

Similarly, and still assuming , for each , preserves binary infima. When

format: plain


text:
# Intepretation of $dC_1=-\theta(dT_1+\frac{dT_2}{1+r})=0\Longleftrightarrow dT_1=-\frac{dT_2}{1+r}$?

We are studying the Ricardian equivalence in a macro course and we are asked to show that a tax cut today will be matched by a tax hike tomorrow. I believe the above is supposed to be the solution, however I do not quite understand the total differential and even less so the notation. I have three questions:

1. How exactly do I take the total derivative of $$C_1=\theta(V_1+Y^L_1-T_1+\frac{Y^L_2-T_2}{1+r})$$ with respect to $$T_1$$ and $$T_2$$?

2. How would I then get to $$dC_1=-\theta(dT_1+\frac{dT_2}{1+r})$$?

3. What is the interpretation of $$dT_1$$ and $$dT_2$$? Specifically, what is the interpretation of $$dT_1=-\frac{dT_2}{1+r}$$?

• What's $V_1$ and $Y_1^L$ , as in what's their interpretation? Are these constants or they can change if tax changes? What I can interpret is they are fixed or given. – Henam Nov 29 '18 at 3:52
• $V_1$ is initial wealth in period 1 and $Y^L_1$ is income in period 1. They do not change with $T$. – Chisq Nov 29 '18 at 7:44

Basic intro to total differentiation

Suppose we have a function $$f(x_1,x_2,\ldots,x_n).$$ The total derivative is given by $$\frac{\partial f}{\partial x_1}dx_1+\frac{\partial f}{\partial x_2}dx_2+\ldots+\frac{\partial f}{\partial x_n}dx_n,$$ where the $$\partial$$ terms are partial derivatives and the $$dx$$ terms are so-called "differentials".

Conceptually, what is going on is the following: we ask "if I change every variable $$x_i$$ by a small amount $$dx_i$$, what is the effect on the overall value of $$f$$?"

To answer this question, we can think about the variables one-by-one. Start with $$x_1$$. A unit increase in $$x_1$$ causes $$f$$ to change by $$\partial f/\partial x_1$$. We are making a small $$dx_1$$ unit change in $$x_1$$. Thus, the total change in $$f$$ due to the change in $$x_1$$ is $$\frac{\partial f}{\partial x_1}dx_1$$. At the same time, we change $$x_2$$ by $$dx_2$$, resulting in a $$\frac{\partial f}{\partial x_2}dx_2$$ unit change in $$f$$ and so on.

If you want to read more on the topic, I'd recommend the relevant chapter of "Fundamental Methods of Mathematical Economics" by Alpha Chiang.

Aside on why this might be useful (can be skipped without loss)

Let's look at an example of how this could be useful. Suppose we have a game where players $$i=1,2$$ each choose an action $$x_i$$. Player $$i$$'s payoff is

$$u_i=f(x_i,a)+g(x_i,x_j,a)$$

where $$a$$ is a parameter and $$x_j$$ is the other player's action. Thus, a player's best action is given by the first-order condition

$$f_1(x_i,a)+g_1(x_i,x_j,a)=0$$ where $$f_i$$ means the partial derivative of $$f$$ wrt its $$i^{th}$$ argument.

It is hard to know how a change in the parameter $$a$$ will affect $$i$$'s choice of $$x_i$$ because the change in $$a$$ will affect $$x_i$$ not only directly, but also by changing $$x_j$$. When all of these changes have settled back to equilibrium, what happens? It seems like we can't go any further because we need to know the functional form of $$f$$ and $$g$$ to be able to explicitly solve for $$x_i$$ and see how they depend on each other and on $$a$$.

But total differentiation can help us understand the properties of the solution here. Let's totally differentiate the first order condition, allowing all of $$x_i$$, $$x_j$$, and $$a$$ to change at once (I omit the arguments of the functions for brevity):

$$[f_{11}+g_{11}]dx_i+g_{12}dx_j+[f_{12}+g_{13}]da=0.$$

Now I can solve for $$\frac{dx_i}{da}$$:

$$\frac{dx_i}{da}=-\frac{f_{12}+g_{13}}{f_{11}+g_{11}}.$$ So long as I know something about the individual properties of $$f$$ and $$g$$, I can use this equation to tell me what the sign of $$fx_i/da$$ will be!

For notational convenience, I give your function a name ($$f$$):
$$f(C_1,T_1,T_2)\equiv\theta(V_1+Y^L_1-T_1+\frac{Y^L_2-T_2}{1+r})-C_1=0,$$
$$f_1 dC_1+f_2dT_1+f_3dT_2=0.$$
We compute $$f_1=\frac{\partial f}{\partial C_1}=-1$$,$$f_2=\frac{\partial f}{\partial T_1}=-\theta$$, $$f_3=\frac{\partial f}{\partial T_2}=-\theta\frac{1}{1+r}$$. This therefore gives $$dC_1=-\theta\left(dT_1+\frac{dT_2}{1+r}\right).$$
In words, this equation tells us that the change in $$C_1$$ must be equal to $$-\theta\left(dT_1+\frac{dT_2}{1+r}\right)$$, where $$dT_1$$ and $$dT_2$$ are the changes in $$T_1$$ and $$T_2$$. Thus, if we want to say that $$C_1$$ doesn't change then it must be that $$dT_1=-\frac{dT_2}{1+r}$$ so that the changes in $$T_1$$ and $$T_2$$ 'cancel-out'.


text:
MathSciNet bibliographic data MR1216812 (95c:42035) 42C15 (46E30) García-Cuerva, J.; Kazarian, K. S. Spline wavelet bases of weighted $L\sp p$$L\sp p$ spaces, $1\leq p<\infty$$1\leq p<\infty$. Proc. Amer. Math. Soc. 123 (1995), no. 2, 433–439. Article

For users without a MathSciNet license , Relay Station allows linking from MR numbers in online mathematical literature directly to electronic journals and original articles. Subscribers receive the added value of full MathSciNet reviews.


text:
# 9-1 Physics/Solar system

## (A Brief History[1] of our) Solar System

Within our solar system there is one star, the Sun, which eight planets orbit around along with smaller objects called dwarf planets. Satellites orbit around planets, so moons are thought of as being natural satellites. We are a very very (very) small part of the Milky way galaxy.

our Sun was formed by a nebula, cloud of dust and cloud, being pulled together by gravitational attraction. This is the start of a star's life cycle, when as a result of the gravitational attraction, fusion reactions begin in the star which keeps prevents the star completely falling in on itself under gravity. As energy is produced by the fusion reactions, the star expands but is also at the same time collapsing into itself. This creates a beautiful equilibrium that keeps the star, very literally in shape.

## The life cycle of a star

A very detailed life cycle of a star.

Whilst star's aren't actually alive they have, like most objects in the universe, a series of stages, similar to life, which they progress through. The stage of a star's life cycle is determined by the star's size.

All star's start off as a nebula, a cloud of gas and dust, brought together by gravity. Then a protostar, and as the temperature rises to be incredibly high in the protostar due to higher density, hydrogen fusion begins, releasing huge amounts of energy and turning hydrogen into helium (thus star's are very bright and very hot). Eventually the protostar becomes a main sequence star when the equilibrium between expansion and gravity pulling the star down balance, so our sun is currently a main sequence star.

${\displaystyle {\text{Hydrogen}}\rightarrow {\text{Helium}}+{\text{Energy}}}$

Then there is a junction between what happens next as the supply of hydrogen begins to run out. Star's with a size about the same as our sun, fairly small for a star, become a red giant whilst Star's much bigger than our sun become super red giants. Fusion of heavier elements is now used to keep the star burning bright (from helium to Iron). Also the outer surface now becomes red since the outer surface of the star is cooler.

A super red giant star will then become a supernova (the brightest star's in the Universe) which then either become a neutron star (very dense) or, the biggest of big stars become a black hole.

On the other hand, red giants become white dwarfs which then become black dwarfs, each time they emit less and less energy.

[Diagram of a life cycle of a star]

Fusion processes in star's produce all of the naturally occurring elements. However, elements heavier than iron can only be produced in a supernova. When a massive star such as a supernova explodes, elements are distributed throughout the Universe.

## Orbit

This shows an elliptical orbit, when the satelitte get's closer to the planet, the speed of the object increases , the further out it get's the slower it's orbit.

Gravity provides the force that allows planets and satellites (both natural (such as a moon) and artificial (such as satelitte built by NASA)) to maintain their circular orbits.

Because velocity is a vector (has a magnitude and direction), the velocity of a satelitte in orbit is constantly changing while the speed, a scalar, remains the same. Also, the acceleration is constantly changing and occurring towards the object of mass, under gravity, whilst the instantenous velocity (the velocity at a specific point in time) is pointing where the object is currently traving towards.

For a stable orbit, the radius must change if the speed changes (a longer radius would be slower, a shorter radius would be faster).


text:
## Wednesday, June 26, 2019

### Taxonomic ranks: lots of arbitrary conventions but also some real useful information

Quanta Magazine's Christie Wilcox has talked to comparative biologist Andreas Hejnol and others when she was writing
What’s in a Name? Taxonomy Problems Vex Biologists
In 1735, Carl von Linné (1707-1778) published Systema Naturae where he introduced the clumping of species into groups and subgroups. That was done more than a century before the evolution theory emerged – but Linné has surely noticed some "family relationships" between organisms on Earth which could have allowed him to rediscover Darwin's theory well before others.

The English names of these categories are memorized by the poem
Dear King Phillip Came Over For Great Spaghetti While Queen Elizabeth Always Prefers To Devour the Nuts in the Living Room
OK, the female part was added by your humble correspondent because of affirmative action (but the assertion is more accurate than the proposition about her husband). The categories are
domain, kingdom, phylum, division, class, order, family, genus, species
which is almost exactly copied from Latin:
regio, regnum, phylum, divisio, classis, ordo, familia, genus, species.
Note that a "family" and others are sometimes generalized to "superfamilies" and "subfamilies" or "infrafamilies", groups that are larger or smaller or much smaller than the original ones.

Only the first two ranks in the list above, domain and kingdom, are slightly different in English and Latin. The others are Anglicized versions of the Latin words – in the last cases (genus, species), they are completely identical. The first words related to the empires are a bit different in Latin. English biologists could have picked "region" and "reignerdom" to follow the Latin roots chosen for the kings (yes, Russians use "tsarstvo" for the kingdom, from a Tsar).

While English is a Germanic language, I find it rather amazing that all such elementary words have been taken from from Romance languages – either from Latin or, more directly and recently, from French. That's not how it works in Czech. Our names of these groups are
doména, říše, kmen, oddělení, třída, řád, čeleď, rod, druh. (Click at the hyperlink and the speaker icon to hear the pronunciation.)
Only "doména" is imported from Latin – all the other words are Slavic in origin. "Říše" is an empire outside taxonomy, "kmen" is a tree trunk or tribe or strain, "oddělení" is a department, "třída" is a class, "čeleď" is an archaic name for a bunch of servants in a wealthy person's house, "rod" is a genus or something like a birth (although prefixes are usually added), "druh" is a species or a type.

I believe that the Czech language still has the world's second most complete naming system for the species after Latin – a nice side effect of the Czech National Revival launched (against Germanization) by the patriotic intellectuals some 250 years ago. All names are a noun followed by an adjective (more rarely, two adjectives). This is an unusual, archaic, scientific ordering of the words – which our Polish cousins bizarrely consider normal, modern, and casual, so for example, "hedgehog" is translated as "kaktus pochodowi" (the marching cactus) into Polish. ;-) According to a well-known joke, of course. A joke whose main idea is correct, however.

OK, Wilcox's article says that the grouping into the Linné categories is imperfect, arbitrary, often illogical, and one may raise tons of complaints against them. And I completely agree with these objections. I've realized them as a kid and I was happy and proud about the revelation. In fact, I do think it's rather important to make sure that the people understand why these boxes can't be taken literally as some perfect, canonical categorization that exists in Nature.

You know, the distance or difference between two "families" in one "phylum" isn't necessarily "the same" as the distance or difference between two "families" in another "phylum". In fact, the difference between two families in one phylum may be comparable to the difference between two orders – or, on the contrary, two genera – in another phylum etc.

So the very notion of the "scale" is really dependent on the "location" in the space of possible DNAs. Well, more precisely, you probably can't invent any good enough universal definition of the "distance" that would be relevant and reasonable everywhere – which is why not only the current taxonomy is imperfect but a perfect one cannot exist in principle.

Also, whenever one of the groups is divided to more than two subgroups of a lower size, they're never quite equal (even though the taxonomy indicates that three or more equal subgroups of a larger group are almost omnipresent). Why? Because the splitting has never occurred to several subgroups simultaneously. Some phylum or division or class or... has separated from the common ancestor first, and this split was primary or more important, and then these two subgroups may have separated further. In most cases, one of them tended to be much more conservative while the other wanted to split further, quickly, and repeatedly.

So the more correct classification of the species into groups should really be binary – species 10100101000100111 would indicate whether the ancestors at the important junctions went into the left direction or the right direction – but one must also understand that some of these binary vertices were much deeper than others. There isn't even a canonical way to decide whether the genetic difference between two siblings is large enough to justify the split in the taxonomy.

Once again, it is true and very important to realize that there are lots of imperfections in this classification – and this classification by Linné depends on many arbitrary conventions that prove that it wasn't directly copied from Nature. There is no guarantee whatsoever that biologists from a civilization that has never studied our papers would clump the species in an isomorphic way.

On the other hand, the clumping also carries some tangible and genuine content. Aside from the information that reflects conventions and that is social or unphysical because it fails to be gauge-invariant, there are also some gauge-invariant, physical quantities hiding in the existing taxonomy.

In any "locus" of the possible species, you may be pretty sure that the split to divisions was deeper – and took place before – the corresponding split into classes let alone orders, families, genera, or species. There are millions of species on Earth and you may learn them "at some resolution" by learning all kingdoms or all phyla or all divisions or all classes (it's getting harder). All these categories describe some resolution at which you are looking at the differences between terrestrial organisms. There is no universal quantification of the "degree of differences" between these organisms that would be valid for all of them – the taxonomy is "state-dependent", if I use a metaphor involving quantum gravity – but there's still something that works.

That's why I also completely disagree with the "extremists" mentioned here:
“I’m not as extreme as some who think we should just get rid of them completely,” de Queiroz said. But he does see the traditional ranked system as a “weird, outmoded way of thinking” that emphasizes placement in the hierarchy over biological meaning.
Those who want to get rid of the ranks completely would surely throw the baby out with the bath water. There is a lot of arbitrary social conventions in the hierarchy and the names chosen for it. But there's a lot of real beef, too. If you don't have any viable replacement of the current taxonomy, it means that you want to throw much of the knowledge hiding in the taxonomy if not all of it out of the window. And that's bad because there's a lot of real information in it.

The second part of the quote above says that the hierarchical classification is a "weird, outmoded way of thinking" that emphasizes placement in the hierarchy over biological meaning. That's a new flavor of a complaint and it deserves a discussion, too.

Even with the hierarchies, the taxonomy involves lots of arbitrary words. Clearly, the individual words – and I have mentioned the names for the categories in Latin, English, Czech, and perhaps Russian – are "purely" social constructs and there's nothing in them. However, the information about the clumping of the words already carries some information although the information about the "difference or distance between the groups of various size" can't be taken absolutely.

The groups of organisms differ by some very specific, technical know-how – almost by some ingenious ideas in applied physics, we could say – and the details how this physics know-how works obviously isn't completely encoded in the names. For example, vertebrates are a subphylum – it's weird that such a well-defined group doesn't coincide with one of the basic ranks and it needs a sub- instead. Just to be sure, vertebrates are almost all of the species in the higher Chordata phylum.

Even though most people and almost all university employees are spineless, people generally belong to the subphylum of vertebrates. At some point, mutations in Nature created some backbone and/or notochord and after some time, perhaps earlier than after a few generations, the contest choosing the fittest survivor has seen that the backbones etc. were a rather good idea. So the organisms with this trait were spreading – and then splitting into subgroups.

There's a lot of interesting "physics of the backbones" that you may discuss. Almost none of it is included in the mere word "vertebrates". So of course if you learn just the names, you will know almost nothing about the physics of backbones and similar natural achievements of applied physics. So the "people of the linguistic type" who just love to memorize the names will know almost nothing after they learn the name, as Feynman loved to emphasize on the example of the "names of the birds" (which was another attack on Gell-Mann, a keen birdwatcher, I concluded).

On the other hand, the people who love to memorize the names may also love to know "definitions that are a few words old" – I know some of these bookworms. ;-) So they would probably like to learn the etymology of "vertebrates". "Vertebratus" means "the joint of the spine" in Latin, they would memorize, which already gives them a sketch of the physics of vertebrates. They don't learn much but to say the least, by learning the word "vertebrates", they have created a placeholder that tells them "I should learn some physics of the backbone" at some point. Well, only some of the bookworms understand even the very general concept that there's usually more real knowledge waiting to be learned beyond their 5-word memorized "definitions".

Once again, it's completely right and desirable for students – and the people – to understand why the taxonomy is imperfect and why lots of the information that it conveys is just a collection of rather arbitrarily chosen social conventions that have depended on some random people's decisions in the history. Not all the information included in the categories is "real" and reflecting some objective data on Nature.

On the other hand, the correlation is nonzero. The categorization also conveys some real information. And if your response to the "imperfection" were to ban all of Linné's taxonomy, you would surely harm science – the people's understanding of the natural world. Even if you presented just a proposal to modify the terminology, you should think twice – and others will hopefully think twice – whether the reform is actually an improvement. If the reform were just created to emphasize the general point that the current taxonomy is (or will have been) imperfect and dependent on many conventions, the newly proposed terminology would almost certainly be inferior. It would be an awkward ideological newspeak that would pump the proposition "Linné's terminology was imperfect" into the name of every species or the higher groups if there were any. And theses shouldn't be repeated this often because it's a waste of time. The idea that Linné's system is imperfect is just one deep but simple insight and people shouldn't repeat it thousands of times whenever they talk about a hedgehog.

I also want to say another thing: It would be good for the terminology to faithfully copy the important events in the history of the evolution of species – if it is possible which I doubt. However, the evolution isn't a necessary condition for the taxonomy to have some value. Linné's taxonomy has already had some value a century before the evolution was understood – as a classification of patterns in the landscape of the currently living species on Earth – and it still has a lot of value that is independent of the evolutionary history. One shouldn't always be absolutely obsessed with the history leading to the contemporary species. Knowing what the patterns in the landscape are, regardless of the history, is nontrivial knowledge, too.

The ranks, groups, and subgroups don't describe just objective and state-independent properties of species in Nature. But they make sense and the content of this well-defined framework carries some information about the natural world. And that's the optimum situation that any terminological system designed for a very complex and non-uniform system of objects and knowledge (such as life on Earth) may achieve. I would argue that this conclusion of mine is much more general and people should realize it in many fields, not just in "comparative biology". (Clearly, the political correctness attempting to delegitimize or ban the talk about groups of humans is a major target of mine right here. The discussion about human races or dog breeds – the Czech language uses the term "rasa" for both – is clearly nothing else than a finer-resolution, sub-species continuation of the debate above.)

The human language is a highly imperfect and often arbitrary image of the patterns in Nature (or the society) but it is still useful and correlated with Nature. The elimination of the terminology for categories isn't a good "solution" to the largely unavoidable imperfection of the human language.

And that's the memo.

Bonus: concerning the social conventions and scientific terminology, I must remind you that Planck's constant and other fundamental constants already have precisely known numerical values in the SI system which is great – just known multipliers away from the adult physicists' units with $$1=c=\hbar=\dots$$. On May 20th, 2019, the redefinition of one kilogram and others that I have been proposing for many years (in fact, well before 2012) has come to effect. A small victory of mine (of course, I guess I wasn't the only one, otherwise it couldn't have taken place).


text:
# Math Help - Integrating Factor error

1. ## Integrating Factor error

Hello,
Could someone point out where I'm going wrong here - I'm making a mistake somewhere, and it's not clear to me what I'm doing wrong...

$\frac{dy}{dt}(t) - 3y +2 = 0$

$= \frac {dy}{dt} - \frac {3y}{t} = \frac {-2}{t}$

$I(t)=e^{\int \frac {-3}{t}}$

$=I(t) = e^{-3lnt} = t^{-3}$

$= \frac {dy}{dt}\cdot t^{-3} \frac {-3y}{t}\cdot t^{-3} = \frac {-2}{t} \cdot t^{-3}$

$= \int \frac {d}{dt}t^{-3}y = \int \frac {-2}{t^4}$

$= yt^{-3} = -2 \int t^{-4}$

$= yt^{-3} = -2 \frac {t^{-3}}{-3}+C$

$= yt^{-3} = \frac {2}{3} t^{-3}+C = \frac {2}{3t^3}+C$

$= y = \frac {2}{3} + C$

Now, I end up cancelling the t-value out, which can't be right. What am I doing wrong exactly?

2. ## Re: Integrating Factor error

Originally Posted by astuart
Hello,
Could someone point out where I'm going wrong here - I'm making a mistake somewhere, and it's not clear to me what I'm doing wrong...

$\frac{dy}{dt}(t) - 3y +2 = 0$

$= \frac {dy}{dt} - \frac {3y}{t} = \frac {-2}{t}$

$I(t)=e^{\int \frac {-3}{t}}$

$=I(t) = e^{-3lnt} = t^{-3}$

$= \frac {dy}{dt}\cdot t^{-3} \frac {-3y}{t}\cdot t^{-3} = \frac {-2}{t} \cdot t^{-3}$

$= \int \frac {d}{dt}t^{-3}y = \int \frac {-2}{t^4}$

$= yt^{-3} = -2 \int t^{-4}$

$= yt^{-3} = -2 \frac {t^{-3}}{-3}+C$

$= yt^{-3} = \frac {2}{3} t^{-3}+C = \frac {2}{3t^3}+C$

$= y = \frac {2}{3} + C$

Now, I end up cancelling the t-value out, which can't be right. What am I doing wrong exactly?
Ahh, god, I think I can already see where I went wrong....

$y = \frac {2}{3} + Ct^3$


text:
## Tuesday, December 27, 2005

### I just left project Xdoclet

I just left project Xdoclet. The basic reason for this is that I just lack the time to contribute any more to this. I try to update my JBoss book, write a new book (this is still a secret :-) and I also have to take care some more of my son, who currently is in a somewhat exhausting age. And then I have a day job as well.
In fact I did not contribute anything to the project within the last half year. Also from current employments etc. the need for Xdoclet is somewhat vanishing with with the new Java 5 annotations.
I still think Xdoclet is a very fine thing and it did help me a lot in the past.
So everyone still involved with it: keep up the good work.

## Wednesday, December 21, 2005

### EJB3 proposed final draft is out

The proposed final draft of ejb3 is out.
You can find it at the jcp page

## Thursday, November 24, 2005

### iX-Conference on Better Software is over

I spent the last two days on the iX-conference on better software in cologne.
This conference had a different target audience than W-Jax where I have been last week.
Two highlights definitively have been the keynotes by Tom de Marco and Nilaus Wirth. De Marco was talking about why some companies are faster than others. Reasons are (amongst others) meetings that are held like ceremonies, intra company email spam or presentations that convey no information at all. He also identified the addiction to status reports as one of the retarding factors. All in all a very good presentation.
Niklaus Wirth, who became professor of computer science a year before I was even born, gave a retrospective of that time and about some values that have been lost. He clearly indicated that a (very) good formation is one of the ways to better sofware.

I my self had the luck to talk about tools that can help building better software, why this fails and what you can do about it. My boss was giving a talk about agile quality management and AspectQ.

One of the results of the many presentations is for me that the human factor is getting more and more important.

Nearly all tracks of the conference have been of high quality. Also the catering was good this time as oposed to last week. I am definitively looking forward to the next iX-Conference.

## Wednesday, November 16, 2005

### W-Jax is over

I've been the last two days at W-Jax conference in Munich. I only took a few sessions as I did quite some talking with conference participants. Overall it was quite interesting and I am sure that I will go to one of the next (W-)Jax conferences as well. In fact I just submitted some proposals for sessions on upcoming Jax in May 2006.

The sessions I participated in were

- EJB 3.0 by Oliver Ihns. At least parts of the presentation seemed to be based on the early draft and not of the public review version. So this might be confusing to some listeners.
- News in JBoss 5 (my own presentation)
- a few keynotes. In one of those, given by a tool vendor, there was the comparision between the software industry and the car industry with its assembly lines. 'd say, that this part of the development process has been solved in it as well. It just means putting software on cd and putting the cd into a nice little card box.
- a session on "why developers can't listen and domain guys can't develop" by two OOse gyus. This was a very good presentation about the needed soft skills in projets. Many projects don't fail because of technical reasons but e.g. because the developer is running in short through a bank where everyone is wearing a suit.
- (partially) in model driven software development by Markus Völter. Markus really has a clue about how to give good presentations. Also the content was very interesting. Unfortunately I had to run off to meet a client offsite.
- "How reliably is WS-reliability" by Marcel Tilly of Innoq. Well, this was hard stuff, but nevertheless interesting. The baseline was that if you want to use an upcoming standard in webservices, use it only if it is supported by IBM and/or Microsoft.

In total the atmosphere of the conference was good and there were intersting sessions and good food :-) The only real bad thing was that the hotel where the conference took place was not able to provide enough stuff to drink. And we are not talking about alcoholic beverages, but about soda water and coke etc.

## Sunday, November 13, 2005

### Review of my JBoss book in c't magazine

German c't magazine has a review of my JBoss-Book in its current issue (24/2005) on page 228.

## Friday, November 11, 2005

### Upcoming speaking engagements

Hi,
I'll give presentations

## Wednesday, October 26, 2005

### JSE 5 and UML

As Java EE 5.0 is upcoming and Java SE 5 even out for quite some while, I was looking into UML-Tools that would help in reverse engineering those new language features as well. Older Tools from the Pre JSE 5 aera just insist that annotations and generics are errors :)
So I came over Omondo EclipseUML This is nicely integrated into Eclipse 3.1 and builds on GEF and EMF.
And best of all: it is able to export UML-Diagrams as SVG! This is something the good old Together6 was able to do and which Rose and XDE were not able to.

So if you 're looking into UML and Java SE 5, you really should have a look at Omondo EclipseUML

## Friday, September 23, 2005

### Introduction to JBoss Seam

JBoss guys - as I understand mostly Gavin King and Thomas Heute have written an Introduction to JBoss Seam. From a first glance at it this is a real neat document.
It looks like JBoss Seam has a good future to become a de facto standard for webapp development.

The funny part about JBoss Seam is that with it, there will be no more seamless development and integration. Nice marketing trick. Hey, who hat the idea to this name?

## Wednesday, September 14, 2005

### iPod dropout killer

Lately after the Stuttgart-Lauf, I started again with jogging. I thought that it might be a good idea to have my iPod with me. I had it in my trouser pocket on the backside, as I don't like carrying things in my hand when jogging. After about half an hour, the iPod had some drop-outs which led it into a state where a soft reset was needed or a soft reset did no help and I had to wait until home to plug it into the power supply to do a hard reset.
Since then I bought a sports wrap to attach the iPod to my upper arm. Since I have the sports wrap, I had no more drop-outs on the iPod.
Of course, the iPod shuffle and iPod nano don't need this as they flash based and do not need to access a hard disk to load the songs into memory.

## Thursday, September 01, 2005

### JBoss rock solid under load

In the last days, I was able to run some syntetical load tests on a Sparc V490 with 4 dual-core cpus, having 16GB or RAM and running Solaris 9. As the target system will be JBoss 3.2.6, we tested against this one.

Tests were conducted with JDK 1.4 and JDK 5.0, having a separate machine firing http requests at the JBoss.

JBoss was rock solid, even when the test app first had an error, not removing stateful session beans, thus passivating thousands of beans.
As expected, garbage collector settings have a huge impact on the overall performance. With bad settings we were only able to saturate two cpus, while with the right ones we kept all 8 cores busy.

Also JDK 5.0 performs a lot better than JDK 1.4 (which was expected anyway).
We also found out, that top on solaris has a bug, only displaying at most 999 lwp, even if a process has much more of them.

For someone usually only having one to two cpus at his hands, this was a nice occasion to play with a "big iron" (yeah, I know that this still is a small box).

## Tuesday, August 23, 2005

### Job opportunities @ syngenio

My employer, syngenio AG, currently has several job openings in it four branch offices.
Most offerings are around J2EE but also around Lotus Notes/Domino.
So if you know Java, EJB, JBoss, Websphere, portals etc. then come and join us.

The offerings are described on the job page.

We also have an offering for a student worker to support us in project KOMPASS. This is a research project around service oriented architectures and webservices.

## Sunday, August 21, 2005

### Webservices in JBoss5

In my book I complained that setting up webservices in JBoss4 (and not only there) is soft of a PITA.

Thomas Diesler recently posted about the new Webservices stack for JBoss.

With JBoss5 from CVS (not yet released as alpha) it really is as simple as Thomas described it. Just put a few JSR-181 annotations in your SessionBean, deploy them and you are done.

Thomas: keep up the good work!

## Wednesday, August 17, 2005

### Next SIG-JBoss meeting

The next SIG-JBoss meeting will take place on 1st september at Alte Scheuer, Stuttgart-Degerloch. The following link lists the aganda:
Java User Group Stuttgart e.V. - Veranstaltungen

## Friday, July 22, 2005

### Two days in Nürnberg

The last two days I have been in Nürnberg, doing JBoss consulting for my employer, syngenio.

I have (besides changeing tracks at the main station) never been in Nürnberg before and I am really impressed by their old city centre. Most of it has been rebuilt after WWII, as 90% of it was destroyed in the last months before the end of the war. At the northern end of the city center sits the old emperor castle on the top of a hill. Parts of it are always opened and from up there one has a splendid view on the city centre.
When rebuilding the city, they luckily did not commit too much sins by deconstructing good substance and replacing it by faceless 70th buildings. This propbably is also the reason that you can see many tourists from all over the world.

On the Hauptmarkt there currently is the big football by André Heller. This ball is a marketing instrument for the upcoming soccer world championchips next year in Germany.
The ball is supposed to be shown in twelve German cities until then.
Unfortunately, I can't tell what is in there, as it is only open from 10am to 6pm - business hours :-/

## Saturday, July 16, 2005

### [svg] Inkscape

Inkscape is another svg drawing program. First impressions are quite good. Actually it is a spin-off from Sodipodi, which tries to be more SVG-centric.
Unfortunately it seems to have the same text placement code as Sodipodi, which results in the same svg as described in an earlier blog entry.

## Friday, July 15, 2005

This press release is probably the first one about myself :-) It has been issued by my new employer, syngenio AG, where I am working on JBoss related things like trainings and consulting. The press release can also be found on the press releases page on the syngenio website.

## Saturday, July 02, 2005

### syngenio summer event

As some already know, I recently joined syngenio AG in Stuttgart after having left Cellent. At syngenio I will work in areas like JBoss training, consulting and support.

This weekend we had a summer event in Imst, Austria, where all syngenio workers came together. Besides eating, drinking, some workshops and talks by members of the board, the main attraction was rafting of the Inn river, which was organized by Lemming Tours.
This raftig tour took about one and a half hours and took us around 14 km by water. This was great fun. On one side the group feeling and on the other side that one safely made it to the finishing point (there was no danger, but I guess everyone was a little bit afraid, as rafting on wild water isn't really a consultants daily job).
So as summary of the summary: great! :-)

## Wednesday, June 29, 2005

### Eclipse 3.1 is out -- and unavailable

Eclipse 3.1 finally has been released. So far for the good news.
The bad news is that the eclipse download page is unavailable (no obvious mirrors). Searching through mirrors like the German one at fht-esslingen do not yet have the complete download as they seem to compete with downloaders around the world for the sparse capacity out of the main eclipse download page.
Perhaps the eclipse foundation should have asked the NetBSD guys how they do it. At NetBSD, when a release is finished, it will be published on the ftp server where only mirrors can pick it up. Later (after a day or two) the directory is opened for the whole public. This worked for years now.
Perhaps with eclipse 3.2 ...

## Friday, June 24, 2005

### 1. JUGS SIG JBoss Meeting

Yesterday was the first meeting of the SIG Eclipse within the Java User Group Stuttgart (JUGS).

Thomas Diesler of JBoss, Webservices lead and the person responsible for J2EE 1.4 certification, gave a presentation about the upcoming EJB3 standard and some JBoss specific additions to it (like e.g. Annotations for MBean definitions). He also talked about the upcoming POJO-container that Adrian is currently working on.
After his presentation, we had Pizza, sponsored by Janine Eastwood of JBoss and a Q & A session afterwards.
Later on we talked about the future of the SIG and the interests of the individual SIG members. Next SIG meetings will be on 1.9.2005 and 3.11.2005 again at the Alte Scheuer in Degerloch.
Last but not least there was a vodka tasting organized by the three russian guys from iMedic.

It was a good first meeting with about 50 attendees.

Of course I had a printed copy of my JBoss book with me for attendees to glance at it.

## Monday, June 20, 2005

### Schumi is our hero.

Now, as Ferrari no longer dominates Formula 1, they can only win when fourteen other drivers just don't start, as (amongst others) reported by La Times in Grand Prix Is Where Rubber Meets Road.
So Michael Schumacher only had to compete against the underpowered teams like Minardi and he was even able to win then.

Lets celebrate Schumi and his victory!

NOT!

## Sunday, June 19, 2005

### iX-Eclipse-Conference

Tuesday and Wednesday I have been on the iX-Eclipse-Conference in Heidelberg. Besides giving a talk myself on plugin development, I met some nice people, had fun and did learn quite some new things on Eclipse.
Erich Gamma did a keynote presentation on Eclipse 3.1 news. One of the things I remembered, was his description on how the team made sure that Eclipse 3.1 got faster in respect to 3.0. Basically, they set up a series of unit tests, which measured the runtime of some code and compared it to some reference timing (pseudocode):
public void testFoo(){ startTimer(); runSomeCode(); endTimer(); commitTimingResultToDatabase(); assertFaster();}
So this fitted in the framework, one is used to.
More important, they did learn a lesson: It is not enough to measure things, but to have someone (e.g. the community) to kick ass if there is too much red in the results.

## Tuesday, June 07, 2005

### Apple - Intel deal

In addition to my comment at Otaku, Cedric's weblog: What Steve isn't telling us

Universal binaries are available for Mac OS X for the last 10 years. Ok, it was called NeXTStep at that time though :-)
So go and google for 'fat binaries' and 'NeXT' to see what is available.
No one prevents you from supplying an app in three flavours:
- fat
- ppc
- intel

I guess, for Apple this is one of the few ways to survive. With the nice centrino chpisets, even Win* notebooks are not too bad these days. And they are way cheaper anyway.

The porting bit is not too hard if you ever contributed to an OSS like NetBSD. So I beleive that the Mathematica port only took two hours.

I think that Apple just needs some more time to e.g. offer new iBooks that are at least that performant than the average Centrino one, but still consume less energy.

By the way: when do you really need to care about byte ordering anyway? It is mostly only relevant when you want to access hardware directly (i.e. device drivers) or you want to use some assembler code to speed up compilation or when you design a new lower level networking protocol where you want some well known 'on the wire ordering'.
If you just write normal apps in C, Objective C or Java you don't care at all.
And for the other apps it is not that hard as for example NetBSD or mcntp prove.

## Sunday, June 05, 2005

### Stuttgart-Lauf

Like last year I participated in the Stuttgart-Lauf. This time - again without practicing - I was over two minutes faster on the 7,6km run (which lead to hand measured 44:19).
The event again was great fun, so I will try to participate next year again.

## Friday, June 03, 2005

### Eclipse plugin versions

While preparing my presentation for the upcoming iX-Eclipse-Conference, I also tried 3.1rc1 and thought to switch my example plugin to Java 5.
There currently is a problem when one of the plugins uses Java 2, the export wizard of eclipse doesn't work (See my comment on bug 84767).
But worse than this: there is no environment option to tell a user "this plugin needs Java 5" (98269). There are options for the OS or the windowing system used though.
So the recommendation is either to use a custom build with the right environment set or to restrict plugins to Java 2/JDK 1.4.

## Tuesday, May 31, 2005

### Book chapters online

My publisher, dpunkt.verlag has now two chapters of my book online as well as the table of contents. The chapters are

Chapter 2: installation

Chapter 8: AOP

But before checking those out, buy the book and read them there :-)

## Friday, May 13, 2005

### Why do minor versions have to have radical changes?

Lateley I got mail from a reader of my book saying "I did follow all steps, but the example you provided just doesn't work. Whenever I try to add or search it will bomb." The guy appended the stacktrace saying that this is on JBoss 4.0.2 (which was out a few days earlier) and JDK 5. I asked him to try on JBoss 4.0.1(sp1) and he confirmed that it worked there. Actually it worked from 3.2.3 over 4.0.0 to 4.0.1.

In 4.0.2 the classloading defaults of the web container changed from UseJBossWebloader=true to false, which leads to a class cast exception if the war has the stub classes of the enterprise beans in it, which are also in the ejb.jar.

There are good exmplanations for this change. But still this does not follow the principle of least surprise. End users will be pissed, saying that if they have a bigger app, they can't afford chasing those surprises for weeks until migrating an application to a newer version, which even has valuable fixes for them.

A plea (actually to every developer, not only JBoss-ones): if such radical changes are made in the future, not only mention the issue-tracking number in the change log, but also write two or three sentences about it.

## Friday, May 06, 2005

### Book release party (updated)

Next Tuesday (10th) there will be a book release party in Stuttgart with cocktails.
Marc even mentioned it in his newsletter:
JBoss Book Offered in German ? Sacha Labourey, European GM of JBoss, will be present at the book launch of Heiko Rupp's JBoss Server-Handbuch für J2EE-Entwickler und Administratoren, 10 May 2005. To purchase this book, please visit http://www.dpunkt.de/buch/3-89864-318-2.html.

The party is hosted by JUGS, the local Java user group in conjunction with bwcon:

The party is free of charge. If you want to join in, please send a registration email to jboss-party-anmeldung@bsd.de

UPDATE!!
The start time is nom 18:30.
See http://www.jugs.org/veranstaltung-10-05-05.html
for details.

## Monday, May 02, 2005

### Now I am ex-cellent :-)

Friday was my last day at Cellent Finance Solutions. When former Bancotec morphed into Cellent FS, the joke always was that when you leave now, that you are excellent :-)
The former colleagues also provided me a sign of excellence - pictures will follow.

## Wednesday, April 27, 2005

### It is out!

Today I got the first copy of my JBboss book from the publisher. Really neat.
Within the next days the printing plant will supply more copies to the
distributors and stores, so it will be available until around the start
of next week in stores.
The accompanying web site also has the examples plus some errata online. I plan to also publish some additional material there, which is/will not be in the book.

## Monday, April 25, 2005

### Upcoming speaking engagements

iX-Eclipse-conference, Heidelberg, 14.06.2005
Java Forum 2005, Stuttgart, 7,7,2005

## Sunday, April 17, 2005

### 2raumwohnung concert

On saturday we have been in the concert of 2raumwohnung. This probably was the first (non-classic) concert together with Elke and definitively the first one since the birth of Orlando.

## Thursday, April 14, 2005

### iPod, Win XP, USB and Firewire

Recently I moved my iTunes music collection from my business laptop onto my private desktop pc. This pc running XP SP 2 has a USB 2.0 card. The iPod did connect and directly disconnect again. Googling around showed me that a quite some folks had problems, but there was no definite answer to solve the issue.
Yesterday I bought a cheap FireWire card with VIA chipset. Installed it, connected the iPod and it just worked :-)

## Monday, April 04, 2005

### News from my book (updated)

My JBoss-book is currently in the last steps of being typeset. Expected in-store date is 28th of April (Amazon.de will have it a few days later).
We also changed the subtitle from "Konfiguration und Programmierung" to "Serverhandbuch für J2EE-Entwickler und Administratoren".

Unfortunately, the updated cover does not yet show up at the publisher site or at amazon.

[ update ]

The new cover is now online at the publishers site and looks like this:

Do you see the nice little JBoss-logo on the bottom left?
The book has been reviewd by Thomas Diesler and is officially entitled to have the logo on it. The book also has a preface by Marc Fleury :-)

The book is currently on its way to printing plant and thus will be in stores on 28th of April.

### Printserver

Last week I bought a print server (Edimax PS 1205 Um). It has one USB and one ethernet port and fits nicely in my home network. It supports nearly everythign from lpd, over Windows printint to Novell and AppleTalk.
The web based configuration is a bit obscure (I could not figure out how the password fits in all of this), but there is no big need of configuration anyway. As there is a Windows based configuration utility as well, I took the bitter pill of installing this.
The print server can obtain its IP address over bootp, dhcp, rarp and can also server as dhcp server.
From the experience I have with it so far, I can only recommend it.

## Wednesday, March 30, 2005

### Some monitor resolutions

I was just looking through some sales material ...
XGA = 1024 x 768
WXGA = 1280 x 800
SXGA+ = 1400 x 1050
WXGA+ = 1440 x 900
WSXGA+ = 1680 x 1050
WUXGA = 1920 x 1200

Currently I am working with a SXGA+ Laptop - this is so great when you want to have a look at a double-sided PDF or to compare two PDFs next to each other at a reasonable size.
If it isn't for battery runtime, I'd definitively choose at least WXGA for the next laptop...

## Wednesday, March 23, 2005

### The Rasterbator

The Rasterbator is a tool to produce large rasterized images from a source like a jpg. It will return a multipage pdf, that you can print out, assemble it and hang it then on your wall.
The website has an online version and there is a standalone version of it as well - very cool!

## Sunday, March 20, 2005

### XPlanner

At work we currently take an Excel-based approach on development time tracking and for workload estimations. Recently I stumbled over XPlanner, which could be a nice approach to get rid of the Excel sheets and have some centraized statistics and panning help. Looks like this tools needs some follow up.

## Thursday, March 17, 2005

### JBossMQ, Oracle and IO-Exception (updated)

Lately I got a lot of those when trying to send messages via JBossMQ
java.sql.SQLException: E/A-Exception: Connection reset

After quite some searching around I found a posting that another user had other problems and they went away with the 10g driver. I tried this one with success as well.
The driver is 1352918 bytes in size and named ojdbc14.jar.
[update]
This specific problem that I was having was fixed, but other problems arised using the 10g driver in other areas of our JBoss 3.2.3 + CMP + Hibernate 2.1.6 application. We will investigate this.
So make sure to run extensive tests when changing the jdbc driver.

## Tuesday, March 08, 2005

### JBoss: Konfguration und Programmierung: preview at CeBit

The nice folks of German JBoss partner Objectone will exhibit a preview version of my book "JBoss - Konfiguration und Programmierung" at CeBit fair. Their stand is 4 B 58.

[update]
Heise Verlag will also have a copy at their stand (5 D 38).

So be sure not to miss it.

## Friday, March 04, 2005

### Good service example

In the past when shopping at our (best) local hardware dealer Arlt one often had to wait a long time even if one knew what to buy as some f*ckwit was discussing with the clerk if his new computer should be in dark black or real dark black.
Now they have a new service: you can order your stuff at home over internet at their webshop (which is not new) and you can order the stuff to the town local shop. They send you an email when your items are ready and you can go there to pick them up. Now the really good part: they have a separate lane only for those pick ups. This is a real time saver. In the past sometimes you had to wait half an hour for a small cheap item. Now you just go to the counter tell who you are, get the items, pay and your done. Super!

### Parcel delivery sometimes sucks

Last Saturday I was expecting a parcel that was posted last Friday and it did not arrive.
You say: hey, that's normal that they don't arrive
But: the parcel was only posted one town away
and: it was posted with express delivery with an additional fee
and: it was posted with "next day delivery" option for an additional fee
and: a parcel from northern Germany posted on Friday did arrive on Saturday
and: this said parcel was even free of charge as the German Post had a "post one parcel for free" day.

The parcel arrived on Monday ...

The reason was that the clerk forgot to select the "also Saturday delivery" option :-(

This just sucks

## Monday, February 14, 2005

### Mutt, pgp and enigmail

Recently I am getting more and more mails from Mozilla/Thunderbird users that use the enigmail plugin to support digital signature / encryption via pgp/gpg.
Unfortunately, mutt does not flag them as being encrypted / signed by default. With the default settings, it does not even recognize them as pgp mails. I used to pipe those mails to gpg, but when replying, this gets ugly with saving into a temp file, editing this one etc.
The following message hook fixes this (partly):

message-hook '!(~g|~G) ~b"^-----BEGIN\ PGP\ (SIGNED\ )?MESSAGE"' "exec check-traditional-pgp"
If you don't want to use this hook, it is still possible by pressing ESC P to flag those mails as being pgp mails. After this manual signing, mutt will also call pgp to display them.

On the other side: engimal users should set their preferences to use pgp/mime, so that outgoing mails get the right headers. Mutt will then be able to signal them as pgp mails even if the above hook is not used.

## Sunday, February 13, 2005

### End of Week end

A good weekend is over. After beeing sick for a week, I feel better again.
My book is now at the copy editor and spell checker, so I am confident that it will be in stores in April latest.
I also started to set up a home page for the book at Begleitseite zum Buch: JBoss - Konfiguration und Programmierung where I will put the source code of the examples and also errata.

## Sunday, February 06, 2005

### The best about Montignac diet

Michel Montignac, a french business man has developed some 20 years ago a new diet basing on just eating the right thing at the right time (this involves knowing the glycemic index of food and of eating the right combinations).
The best thing about that diet is not that it
- actuall works well
- you can eat as much as you want (there is no need to eat less)
- you can even eat chocolate
but
that you can actually go out eating with your colleagues, following the diet rules and nobody will actually find out that you are on a diet. That is much better than those "you are only allowed to eat salad" or "only grapes" diets.

### Ticket application filed

Yesterday I filed my the application to participate in the lottery for FIFA soccer world championship 2006. Even as there are six matches here in Stuttgart, I did not intend to go. But my dad asked me if we want to go together, so I field the application.
Now I am waiting what will happen next ...

### Blogger profile stats bogus

Blogger.com also shows some statistics and last posts on the "view my complete profile page". This has not been updated since October last year. They should probably better remove those statistics if they don't want to update them.

## Wednesday, February 02, 2005

### Heise.de has been ddosed

The probably most popular German speaking IT new site has been mostly offline the last two days. www.heise.de has been victim of a distributed denial of service attack.

### JOnAS - has passed the J2EE 1.4 CTS.

After JBoss in July 2004, the second open source J2EE server has passed the Sun J2EE 1.4 testsuite:

1st February 2005: JOnAS has passed the J2EE 1.4 CTS

The JOnAS open source application server has successfully passed the Sun J2EE 1.4 Certification Test Suite. The official Sun acknowledgement is expected in the coming days. This is the result of a 9 months effort. The corresponding JOnAS version is 4.3.1, which is first provided as candidate release.

It is interesting that two French entities (Marc Fleury and the Objectweb consortium) dominate the open source J2EE market.

## Sunday, January 30, 2005

### RSS 2.0 Specification -- why RFC 822 date?

Harvard has the RSS 2.0 Specification online. Lately I was trying to convert atom feeds from blogger into rss with the help of xslt. Everything is relatively easy except the rfc822 date. While the month is easy to convert via
 <xsl:value-of select='substring("JanFebMarAprMayJunJulAugSepOctNovDec",$num*3-2, 3)'/>  where$num is the number of the month, starting at 1=Jan, this is not so easy with the day of week. Others obviously have/had the same problem. Mostly this is solved by some xslt processor specific external libraries.
Without the day of week name, the date entry is not valid. Luckily do rss readers like FeedDemon still recognice the feed.

## Saturday, January 29, 2005

### NetBSD Online Store -- Help Fund NetBSD | CafePress

Finally, NetBSD items are available at CafePress NetBSD Online Store -- Help Fund NetBSD | CafePress and not only at good will from some NetBSD enthusiasts.

### Amazon.de finally shows the cover art

Amazon.de finally also shows the cover art of my book Amazon.de: Bücher: JBoss.

It doesn't make a big difference, as the book did not change and the comment stays the same etc., but when you look at the book list, it directly makes a better impression when the cover art is shown as well.

## Sunday, January 23, 2005

### The power of perl

The LaTeX-style of my publisher has some special definitions for environements. When starting to write my JBoss book, I started to use just the normal LaTeX figure environement. Today I thought that it is time to convert those about 230 occurences of
 \begin{figure} ... some text \caption{bla} \label{foo} % only sometimes set \end{figure}
into
 \begin{fighere}{always a label}{the caption text} ... some text \end{fighere}
I decided to take perl for the task. Ok, it took me some time to get into perl again after not having it used for years. But at the end the complete task took me 3 hours.

I am sure, doing it by hand, I would sit there the whole week. The pattern matching ability of perl and the associative arrays just make it a pleasure job.

## Monday, January 17, 2005

### How many books / items does Amazon have in their catalogue?

Since my JBoss book is listed @ Amazon.de, I am looking at its sales rank. First there was no rank given. Then I ordered a copy and after a while the rank climbed to around 1.400.000. Then I cancelled the copy again and now there is again no rank given.

Does a rank of 1.400.000 for one copy ordered/sold mean that Amazon has around one and a half million articles in their catalogue? Probably they have more, as not ordered items can be found and there are ~ 1.400.000 items that got sold at least once.

Anyone has a clue?

## Sunday, January 16, 2005

### Finally some time to work on OS again

Now that I am waiting with my JBoss book on an external event, I did not work on it this weekend, but was again able to work on Xdoclet and to help Andy to test the second milestone of JBossMail.
It really feels good to do a little patching here, a little debugging there without someone in your back with a MS project plan tracking your mouse moves.

## Tuesday, January 11, 2005

### Apple store not reachable

The apple online store is no longe reachable after todays keynote from Steve Jobs at MacWorld expo. It seems that everyone ran out of the store do directly order a new Mac mini :-)

## Saturday, January 08, 2005

### JBMail back from stasis

Andy Oliver is now back on JBMail, the mailserver project that he started. The first preview that I got in hands wasn't that useful, as it made some wrong assumptions about DNS servers.

In contrary to the last release, this preview is a binary one, including the whole ant 1.6.1 distribution (30 MB unzipped) :-( That at least explains why the package is now so fat.

But after this, the install runs fine if no TLS is used.

Running the mail service is still a little problem for me, as the name resolution doesn't quite work, but here on my Windows box, I am not able to tell if this is a problem with JBMail or Windows itself.


text:
# Don't end up falling for the nonsense

Hold on just a bit
I need to talk to Lee

About a test for my Iq
That suited me to a T
Somehow I got a 6
When I should have got zt

Now, if your brain's too tiny
I'll give the riddle a curl

When I was just 2
I played for an fc
And won 20 games
By the time I had turned 3

Warning:

When you figure this out, you'll wish you'd heeded my warning

• First line ends with a capital i and lowercase q, yes? Not an L – Raystafarian Feb 26 '16 at 18:22
• @Raystafarian Yes. This is easily visible if you click "edit". – Ian MacDonald Feb 26 '16 at 18:26


text:
# VectorSpaceBasis¶

class dolfin.cpp.la.VectorSpaceBasis(basis)

Bases: object

This class defines a basis for vector spaces, typically used for expressing nullspaces, transpose nullspaces and near nullspaces of singular operators

Constructor

dim()

Number of vectors in the basis

is_orthogonal()

Test if basis is orthogonal

is_orthonormal()

Test if basis is orthonormal

orthogonalize()

Orthogonalize x with respect to basis

orthonormalize()

Apply the Gram-Schmidt process to orthonormalize the basis. Throws an error if a (near) linear dependency is detected. Error is thrown if <x_i, x_i> < tol.

thisown

The membership flag


text:
naginterfaces.library.specfun.ellipint_legendre_3¶

naginterfaces.library.specfun.ellipint_legendre_3(dn, phi, dm)[source]

ellipint_legendre_3 returns a value of the classical (Legendre) form of the incomplete elliptic integral of the third kind.

For full information please refer to the NAG Library document for s21bg

https://www.nag.com/numeric/nl/nagdoc_28.5/flhtml/s/s21bgf.html

Parameters
dnfloat

The arguments , and of the function.

phifloat

The arguments , and of the function.

dmfloat

The arguments , and of the function.

Returns
pfloat

The value of the classical (Legendre) form of the incomplete elliptic integral of the third kind.

Raises
NagValueError
(errno )

On entry, .

Constraint: .

(errno )

On entry, and ; the integral is undefined.

Constraint: .

Warns
NagAlgorithmicWarning
(errno )

On entry, and ; the integral is infinite.

(errno )

On entry, and ; the integral is infinite.

Constraint: .

Notes

ellipint_legendre_3 calculates an approximation to the integral

where , , and may not both equal one, and .

The integral is computed using the symmetrised elliptic integrals of Carlson (Carlson (1979) and Carlson (1988)). The relevant identity is

where , , , is the Carlson symmetrised incomplete elliptic integral of the first kind (see ellipint_symm_1()) and is the Carlson symmetrised incomplete elliptic integral of the third kind (see ellipint_symm_3()).

References

Abramowitz, M and Stegun, I A, 1972, Handbook of Mathematical Functions, (3rd Edition), Dover Publications

Carlson, B C, 1979, Computing elliptic integrals by duplication, Numerische Mathematik (33), 1–16

Carlson, B C, 1988, A table of elliptic integrals of the third kind, Math. Comput. (51), 267–280