Inter-atomic distances for most of the elements in the first half of each rotational group can be calculated directly from equation 14, using the rotational values corresponding to the displacements previously determined for each individual element. Many elements, however, have different rotations which take the place of these normal values under certain conditions. The occurrence of these alternate rotations is largely dependent upon the position of the element within the rotational group and in preparation for the ensuing discussion of this factor it will be advisable for convenient reference to set up a classification according to position.
Within each of the rotational groups the most probable electric displacement for the elements in the first half of the group is in time, while for those in the latter half of the group it is in space. We will distinguish between these two divisions of the group by applying the term electropositive to those elements with probable electric time displacement and the term electronegative to those with probable electric space displacement. It should be understood, however, that this distinction is being drawn on the basis of the most probable situation in the electric dimension considered independently. Because of the conditions prevailing elsewhere in the environment of the atom an electronegative element often acts in an electropositive capacity, but this does not affect the classification as herein described.
There are also important differences between the behavior of the first four members of each series of positive or negative elements and that of the elements with higher rotational displacements. We will therefore divide each series into a lower division and an upper division so that those elements with similar general characteristics can be treated together. The classification will be based on the magnitude of the displacement, the lower division in each case including the elements with displacements from 1 to 4 and the upper division comprising those with displacements of 4 or over. The elements with displacement 4 belong to both divisions as they are capable of acting either as the highest members of the lower divisions or as the lowest members of the upper divisions. It should be recognized that in the electronegative series the members of the lower divisions have the higher net time displacement (higher atomic number).
Another item which needs to be explained before resuming the calculation of inter-atomic distances is the relation between displacement and rotation. It has been shown that the elements constitute a continuous series in which the successive members differ by the equivalent of one unit of electric time displacement. The gravitational force in the time-space region is a function of the total three-dimensional rotation; that is, of the net total rotational time displacement. In the time region, however, the displacements in the electric dimension are opposite in time direction from those in the magnetic dimensions and the inter-atomic force is a function of the rotations in the different dimensions separately, as indicated in the force equations which have been developed.
In the simplest rotational combinations the basic rotating unit is a unit vibrational displacement, and unit rotational displacement applied to this unit vibration results in one unit of rotation. As long as the rotation is based entirely on this unit linear displacement, which for brevity we will call vibration one, the specific rotation, the quantity which enters into the force equations, is equal to the rotational displacement plus one unit (the physical zero value). When the rotation of this single vibrational unit reaches the time region maximum the rotational motion must be extended to vibration two (two units of linear displacement) if further additions of rotational displacement are to be made.
As previously indicated, the maximum time region rotation of a single displacement unit is two linear units or eight units distributed three-dimensionally. The change to vibration two therefore may take place after the first unit of displacement, if the rotational units are disposed linearly, and must take place before the addition of the eighth displacement unit. After the change to vibration two there are two units of vibrational displacement to be rotated and hence each added unit of rotational displacement corresponds to only one-half unit of specific rotation. As in the other time region phenomena which have been discussed, the higher displacement is in addition to and not in lieu of the lower displacement. The succession of rotation values is therefore either 1, 2, 2˝, 3, 3˝, etc., or 1, 2,… 7, 8, 8˝, 9, etc. The lower value is very commonly found where it first becomes possible; that is, displacement 2 normally corresponds to rotation 2˝ rather than 3. The next element may take the intermediate value 3˝ but beyond this point the higher value normally prevails.
The independent rotation of the different vibrational displacements may be visualized by means of a mechanical analogy. Let us consider an object with a translatory motion in some specific direction. If we rotate this object around the line of motion as an axis it is clear that this rotation will not interfere with the translatory motion. Furthermore, if the object is jointed so that it is capable of rotating by parts it is entirely possible for one or more parts to be rotating and the remainder not rotating, while the ensemble moves forward in translation unaffected by the nature of the rotation.
The references which have been made to the rotation of one or two units of vibrational displacement do not imply that these are necessarily the full vibrational displacements of the photons. Each unit of frequency is independent from the standpoint of motion in the opposite space-time component and the first unit of vibrational space displacement can be rotated in time irrespective of the number of additional units of displacement present, just as a single one of the individual parts described in the preceding paragraph can be rotated around the line of motion without regard to the total number of parts which make up the object as a whole. Similarly the second unit of vibrational displacement can be rotated if a second unit exists, no matter how many more of these displacement units may be included in the vibration as a whole. The change to a higher vibration level may affect either the electric or the magnetic rotation or both, since these rotations are not only independent of the total magnitude of the basic vibrational displacement but are also independent of each other, except to the extent that probability considerations are effective.
The general pattern of the magnetic rotational values is the same as that of the electric values but the upper limit for rotation on a vibration one basis is 4 rather than 8, for reasons previously discussed. Rotation 4˝ therefore follows rotation 4 in the regular progression. It is possible to reach rotation 5 in one dimension, however, without bringing the magnetic rotation as a whole up to the 5 level, and a 5-4 rotation therefore occurs in some elements either instead of or in combination with the 4˝-4 rotation.
Combinations of this kind frequently occur where there are alternate rotations of nearly equal probability. In the inter-atomic distance tables the magnetic combinations are indicated by notations such as 5-4, 4˝-4, and the electric combinations by two-figure designations (6-10, etc.). In each case the effective value of t is taken as the geometric mean of the values applicable to the two components.
We may now resume the calculation of inter-atomic distances. Table II lists the values computed for the elements in Division I of all groups except Group 2A, together with the corresponding experimental values. Data for the elements of Group 2A will be presented later as the members of the lower rotational groups have some special characteristics which will need further consideration.
The values calculated for the inter-atomic distance in Table II and the other similar tabulations included herein are those which would prevail in the absence of compression and thermal expansion. Some of the experimental data have been extrapolated to this zero base by the investigators but others are the actual observed values at atmospheric pressure and at different temperatures, depending on the properties of the substances involved, and the latter are not exactly comparable to the calculated figures. In general, however, the expansion and compression up to the temperature and pressure of observation are small and a comparison of the values in the last two columns gives a reasonably good idea of the extent of agreement between the theoretical figures and the experimental results. The effects of compression and thermal expansion will be examined in detail later.
Most of the elements of Division II also assume equilibrium positions on the basis of the same type of force relations as those of Division I but an alternate type of equilibrium can exist in this division and some of the Division II elements form structures of this second variety, either in addition or in preference to the regular electropositive structures. The factor which makes this alternate type of equilibrium possible is the ability of the atom to reorient itself with reference to the space-time zero point. We have already seen that eight units of time or space displacement, when distributed three-dimensionally, constitute a full space-time unit. Applying this to rotation, addition of eight units of displacement completes a full cycle and returns to the starting point. These eight rotational displacement units or any multiple of eight therefore constitute the equivalent of no displacement at all. Any intermediate displacement can be described in either of two ways: as x units in the positive direction from zero, or as 8-x units in the negative direction from the equivalent of zero.
It is possible on this basis to change a positive (time) displacement x to a negative (space) displacement 8-x merely by reorientation with reference to the space-time zero point. This does not involve any alteration in the rotation of the atom. It is simply a change in the relationship between the atomic positions and the space-time units in which they are situated. Consequently an atom may establish an equilibrium on the 8-x basis with one adjoining atom and yet maintain the normal electropositive equilibrium with other atoms in different directions.
For reasons which will be developed later, an equilibrium between two negative 8-x displacements is not possible, and the 8-x displacement, where it occurs in Division II, is in equilibrium with a positive displacement x. Let us consider the nature of this equilibrium. In the inter-atomic relationships previously examined all displacement has been in time. As long as this situation prevails there are no limitations on the combinations. The principles which have been established are valid for unequal as well as equal rotations and any atom with rotational time displacement x can establish equilibrium with any other atom having time displacement y, the resulting effective displacement being the geometric mean (xy)˝. However, if one displacement is in time and the other in space the rotations are no longer concurrent. Being in opposite space-time directions they are additive and the resulting effective displacement is the sum, x + y.
This expression x + y represents x units of space (or time) in association with y units of time (or space). But a ratio of units of space to units of time is a velocity and any velocity, other than a velocity of unity (zero displacement), is obviously incompatible with the establishment of equilibrium. It therefore becomes apparent that there is a rigid limitation on inter-atomic combinations of this character: the displacements x and y must be the same or equal. A displacement x is equal to a displacement -x and a time displacement x can therefore establish equilibrium with a space displacement x. A time displacement x is the same as a space displacement 8n - x if the atom is located in the appropriate position in the space-time unit, and hence a combination of these displacements also meets the equilibrium requirements. Except for a different type of zero point shift which will be discussed in a subsequent section all of the equilibrium relationships between space and time displacements follow one or another of these patterns.
The cohesive force which is exerted between the atoms of a molecule is commonly termed the chemical bond, and the variation in the magnitude of the inter-atomic force under different conditions is ascribed to the existence of several kinds of bonds. From the explanation in the preceding paragraphs it is apparent that the different "bonds" are merely the products of different rotational orientations, but the use of this term has an element of convenience, particularly in view of its general acceptance, and it will therefore be adopted in this work with the understanding that as herein used it refers to the net resultant of a particular orientation of the interacting rotational forces.
The regular bond of the electropositive elements on which the structures listed in Table II are based is a direct combination of two positive displacements. In the Division I elements the two displacements are equal and if we call their magnitude x the resultant relative displacement which, according to the principles previously stated, is the geometric mean of the two displacements, is also x. This we will call the positive bond.
When we turn to Division II, the upper electropositive division, we find that the positive bond is still very common, but since these elements are closer to the midpoint of the group negative rotations are more probable than in Division I and many of these elements form the alternate type of combination in which a positive electric displacement x is in equilibrium with a negative (space) displacement 8-x. As we have found, the resultant displacement is the sum of the two or 8. This is the neutral value, a full rotational cycle which returns to the equivalent of zero, and we will therefore call this the neutral bond. The rotation corresponding to displacement 8 is 10, as the complete space-time unit includes not only an initial time unit at one end but also an initial space unit at the other.
If the magnetic rotation extends to vibration two the specific electric rotation corresponding to displacement 8 may be reduced by one-half, in which case it becomes 5 instead of 10. This is the prevailing rotation in the Division II elements of Group 4A.
Inter-atomic distances based on the neutral bond can be calculated from equation 14 by substituting the relative electric rotation 10 or 5 for the normal rotation values used in evaluating the positive bond distances. The change in bond type does not affect the magnetic rotation since the magnetic displacement is always in time. Values obtained for the inter-atomic distances of both positive and neutral bond structures of Division II elements are listed in Table III.
In the elements which have been discussed thus far the most probable bond in any one individual dimension is applicable to all dimensions and the force system of the atom is isotropic. It follows that any aggregate of atoms of these elements has a structure in which the constituents are arranged in one of the geometrical patterns possible for equal forces: an isometric crystal. All of the electropositive elements crystallize in isometric forms and except for a few which apparently have quite complex structures each of the crystals of these elements belongs to one or another of three types, the face-centered cube, the body-centered cube, or the hexagonal close-packed structure.
We now turn to the other major subdivision of matter, the electronegative elements, those whose normal electric displacement is in space. Here the force system is not necessarily isotropic since the most probable bond in one or two dimensions may be the negative bond, a direct combination of two electric space displacements, but it is not possible to have negative bonds in three dimensions and wherever such bonds exist the atomic forces are anisotropic. The controlling factor in this situation is the necessity for a net rotational displacement in time in order to establish equilibrium in space. Negative orientation in three dimensions is obviously incompatible with this requirement but if the negative displacement is restricted to one dimension we have fixed atomic positions in two dimensions with a fixed average position in the third because of the net electric time displacement of the atom as a whole. This results in a crystalline structure which is difficult to distinguish from one with fixed positions in all dimensions. Such crystals are not usually isometric, however, as the inter-atomic distance in the odd dimension is generally different from that in the other two. Where the distances in all dimensions do happen to coincide we will find on further investigation that the space symmetry is not an indication of force symmetry.
If the negative displacement is very small, as in the lower Division IV elements, it is possible to have negative orientation in two dimensions as long as the positive displacement in the third dimension exceeds the sum of these two negative components so that the net resultant is still positive. Here the relative positions of the atoms are fixed in one dimension only, but the average positions in the other two dimensions are constant by reason of the net three-dimensional time displacement. The aggregate consequently retains most of the external characteristics of a crystal but when the internal structure is examined the atoms appear to be distributed at random rather than in the orderly arrangement of the crystal. In reality there is just as much order as in the crystalline structure but part of the order is in time rather than in space and there are no fixed equilibrium positions in space. This phase of matter we identify as the glassy or vitreous form to distinguish it from the crystalline form.
The term "state" is frequently used in this connection instead of "form" but the physical state of matter has an altogether different meaning based on another kind of differentiation and it seems advisable to confine the use of this term to the one application. Both glasses and crystals are in the solid state, the essential characteristics of which will be discussed in detail later.
In beginning a consideration of the structures of the individual electronegative elements it will be desirable to start with Division III. The possible equilibrium states in this division are analogous to those of Division II. The negative bond is comparable to the positive bond of the electropositive divisions. As in Division II there is an alternate bond in which the negative displacement x combines with the inverse orientation 8-x. While this is just the reverse of the Division II neutral bond in which the normal displacement is positive and the inverse is negative, the net result is exactly the same and this Division III combination will also be considered a neutral bond.
Where two or more alternate structures are possible the actual form which the crystal will take is a matter of probability. Low displacements are, of course, more probable than high displacements. Electric displacement in time is likewise more probable than electric displacement in space since the former conforms to the space-time direction of the rotational motion as a whole. In Division I both of these factors operate in the same direction. The positive bond, which is based entirely on time displacement and hence is inherently more probable than the neutral bond, also has the lower displacement. All structures in this division therefore take the positive bond. In Division II the margin of probability is narrow. Here the positive displacement is higher than the inverse 8-x displacement and this operates against the greater inherent probability of the time displacement. As a result both types of structures are encountered in this division, together with a combination of the two.
In Division III the greater probability of the time displacement is sufficient to keep the borderline elements of Groups 3A and 3B on the Division II basis, the electropositive preference extending as far as copper and silver. The higher Division III elements of Group 4A are beyond the range of positive bond structures and all of these elements crystallize on the basis of the neutral bond. Decreasing negative displacement in each group increases the probability of the negative bond and these bonds make their appearance in the vicinity of displacement 7. In Groups 3A and 3B the remaining elements of this division have the characteristic asymmetric electronegative structures utilizing both negative and neutral bonds. The negative bond is rare in Group 4A and in this group the neutral bond structures continue to predominate throughout Division III. Inter-atomic distances for the Division III elements are listed in Table IV.
As we pass from Division III to Division IV the magnitude of the inverse displacement 8-x increases and neutral bond structures become correspondingly less probable, although still very much in evidence. Negative bonds in crystal structures also become increasingly rare, not because of any decrease in probability but because they are likely to exist in two dimensions if they occur at all in these Division IV structures and this means a glassy or vitreous aggregate rather than a crystal. There is, however, a different type of combination which makes its appearance here where the inherently more probable bonds are excluded for one reason or another. Thus far we have examined the positive and negative bonds, in which one normal displacement is in equilibrium with another normal displacement, and the neutral bond, in which the normal displacement x combines with the inverse displacement 8-x. Now we complete the picture with a bond in which two of the 8-x inverse displacements are combined.
This bond was not encountered previously as it has a very low probability because of its high effective displacement and where more probable structures can be formed the existence of a crystal based on a bond of low probability is precluded. In Division IV the positive bond is impossible and the low probability of the 8-x combination competes only with the neutral bond, the probability of which is likewise low for the displacement values in this division. It was mentioned in the discussion of the Division II structures that a bond based on a direct combination of two 8-x displacements in that division is not possible. The 8-x displacement in Divisions I and II is negative and like the negative bond an 8-x combination would be confined to a subordinate role in one or two dimensions of an asymmetric structure. Such a crystal cannot compete with the high probability of the symmetrical electropositive structures and therefore does not exist. In the electronegative divisions, however, the 8-x displacement is positive and there are no limitations upon it other than those arising from the high effective displacement.
The effective displacement of this secondary positive bond, as we will call it, is even greater than might be expected from the magnitude of the quantity 8-x as the change of zero points for two oppositely directed motions is also oppositely directed and the new zero points are 16 units apart. The resultant displacement is 16 - 2x and the corresponding rotation is 18 - 2x. The numerical values of the latter expression range from 10 to 16 and because of the low probability of such high rotations the secondary positive bond is limited to one or one and one-half dimensions in spite of its positive direction. In the upper elements of Division IV the other dimensions take the neutral bond but the probability of this bond decreases as the value of 8-x approaches its upper limit and in some of the lower elements of the division there is no electric rotational force at all in one or more dimensions; that is, the specific rotation is unity. For example, the crystal of iodine has one dimension based on the secondary positive bond with rotation 16, the inter-atomic distance being 2.68 Å. A second dimension has unit rotation and an inter-atomic distance of 4.46 Å. The third dimension combines these two forces with a resultant distance of 3.46 Å, midway between the other two values. A similar combination bond with unit rotation as one of the components was shown for two of the rare earth elements in Table III.
A special type of structure occurs only in those electronegative elements which have a rotational displacement of four units. This rotation is on the borderline between Divisions III and IV where the neutral bond and the secondary positive bond are about equally probable. Under similar conditions other elements crystallize in hexagonal or tetragonal structures, utilizing the different bonds in different directions. For these displacement 4 elements, however, the two bonds have the same relative rotation: 10. The inter-atomic distance in these crystals is therefore the same in all dimensions and the crystal is isometric, even though the rotational forces are quite different in character. The molecular arrangement in this crystal pattern, the diamond structure, indicates the true nature of the force equilibrium. Outwardly this crystal cannot be distinguished from the isotropic cubic crystals but the analogous body-centered cubic structure has an atom at each corner of the cube as well as one in the center, whereas the diamond structure leaves alternate corners open to accommodate the abnormal projection of forces in the secondary positive dimensions. Inter-atomic distances for the Division IV elements are listed in Table V.
Up to this point no consideration has been given to the elements of atomic number below 10 as the rotational forces of these elements are subject to certain special influences which make it advisable to discuss them separately. One of these causes of deviation from the normal behavior is the small size of the rotational group. In the larger groups the four divisions are distinct and except for some overlapping each has its own characteristic force combinations. In an S-element group, however, the second series of four elements which would normally constitute Division II is actually in the Division IV position. As a result these four elements have to a certain extent the properties of both divisions.
A second influence which affects the crystal structures of the lower group elements is the inactivation of the rotational forces in certain dimensions. It was previously noted that a magnetic rotation of two units produces no effects in the positive direction. The reason for this is revealed by equation 3 which tells us that the rotational force in the time region is ln t. The value of this expression for t = 2 is 0.693, which is less than the space-time force 1.00. The net effective force of rotation 2 is therefore below the minimum value for action in the positive direction. In order to produce an active force the rotation must be high enough to make ln t greater than unity. This is accomplished at rotation 3. In some crystals the effective forces of the higher rotational combinations are also reduced to two dimensions, but this is a geometrical effect resulting from the nature of the force equilibrium and it appears only in the more complex structures, whereas the inactivity of the rotation 2 force is an inherent property.
The normal magnetic rotation of the 1B group, which includes only the two elements hydrogen and helium, and the 2A group of eight elements beginning with lithium is 3-2. Where the rotation value 2 applies to the subordinate rotation one dimension is inactive; where it applies to the principal rotation two dimensions are inactive. This reduces the force exerted by each atom to 2/3 of the normal amount for one inactive dimension and to 1/3 for two inactive dimensions. Inter-atomic distance is proportional to the square root of the product of the two forces involved, which means that the reduction in distance is also 1/3 per inactive dimension.
Since the electric rotation is not a simple motion but a reverse rotation of the magnetic rotational system, the limitations to which the basic rotation is subject are not applicable. The electric rotational displacement merely modifies the magnetic rotation and the low value of the rotation 2 integral makes itself apparent by an inter-atomic distance which is greater than that which would prevail if there were no electric displacement at all (unit rotation). Table VI gives the force constants and the inter-atomic distances for the elements of the lower groups.
In the preceding pages the mathematical relations governing the inter-atomic force systems were developed on a comprehensive basis but the subsequent examination of specific cases dealt only with the forces exerted between like atoms. We are now ready to begin a study of the forces between unlike atoms. The general principles developed in the discussion of the structures of the elements will, of course, apply to this situation as well, but the existence of differences between the components of the system will introduce some new factors into the calculations.
Looking first at combinations of electropositive elements, let us consider an element with electric rotation t1, in equilibrium with an element having electric rotation t2. Here the two forces are identical in character and concurrent, the kind of a force combination that we have called the positive bond. The resultant, according to the principles previously set forth, is ( t1t2 )˝, the geometric mean of the two constituent rotations. If the two elements have different magnetic rotations the resultant in each magnetic dimension is also the geometric mean of the individual rotations, since the magnetic rotations are always in time and they combine in the same manner as the electric time displacements; that is, the magnetic equivalent of the positive bond.
Since the properties of matter are determined by the nature and magnitude of the inter-atomic forces, the properties of a combination of this kind are in general intermediate between the properties of the components. This type of association between elements is called a mixture if the combination is irregular and incomplete or an alloy if it is uniform and fully effective.
There is no inherent limitation on the composition of mixtures or alloys. Any of the electropositive elements can enter into such combinations and they can mix in any proportions, except to the extent that geometrical considerations intervene. Many of the electronegative elements, particularly those of Division III, follow the same pattern to some degree by reorientation on an 8-x basis. When we turn to combinations involving other than positive bonds the situation is considerably different. These other bonds are based on the establishment of equilibrium through the balancing of opposing forces at neutral space-time values and this requires that the components have certain definite relations with respect to each other. Combinations of this kind therefore take place in definite proportions, each atom of one component being associated with a specific number of atoms of the other component or components. Such a combination is called a chemical compound.
In addition to the constant proportions of their components, compounds also differ from mixtures or alloys in that their properties are not necessarily intermediate between those of the components but may be of an altogether different character, since the resultant of a force equilibrium of this kind may differ widely from any of the force arrangements of the individual elements.
The simplest type of bond in chemical compounds is an equilibrium between electropositive and electronegative rotations of the same magnitude. Here the basis of the equilibrium is a space-time ratio of unity, the time displacement of one component being equal to the space displacement of the other. As indicated in the discussion of the structures of the elements, the resultant of a combination of space and time displacements is the sum of the two, in this case 2x. The corresponding rotation is 2 (x + 1), as it includes two initial unites, one of space and one of time.
Because of the fundamental character of this bond and the important part which it plays in the world of chemical compounds we will call it the normal bond. Inter-atomic distances for the normal bond structures can be calculated in the same manner as before, applying the mean magnetic rotation and the effective electric rotation 2(x + 1) to equation 14. If the active dimensions are not the same in both components the full rotational force of the more active component is effective in its excess dimensions. For example, the value of ln t for 3-3 magnetic rotation is 1.099 in three dimensions or 0.7324 in two dimensions. If this two-dimensional rotation is combined with a three-dimensional magnetic rotation x, the resultant is (0.7324 x)˝, the geometric mean of the individual values, in two dimensions, and x in the third. The average value for all three dimensions is (0.7324 x)1/3.
When this bond unites one electropositive atom with each electronegative atom the resulting structure is usually a simple cube with the atoms of each element occupying alternate corners of the cube. This is called the Sodium Chloride structure, after the most familiar member of the family of compounds crystallizing in this form. Table VII gives the inter-atomic distances for the common NaCl type crystals.
From this tabulation it can be seen that the special rotational characteristics which certain of the elements possess in the elemental aggregates carry over into their compounds. The elements of the lower groups have inactive force dimensions in these crystals just as in the structures previously examined. The second element in each group also shows the same preference for vibration two rotation that we encountered in studying the structures of the elements. As in the latter this preference extends to some of the following elements and in such series of compounds as CaO, ScN, TiC, one component keeps the vibration two status throughout the series and the resulting effective rotations are 5˝, 7, 8˝, rather than 6, 8, 10.
Except for certain types of crystals which are essentially interchangeable, the structures of the elements are determined almost entirely by the nature of the bonds. In compounds there is another equally active factor: the relative proportions of the components. Where two atoms of one kind form a normal bond compound with one atom of another, the unequal proportions make the NaCl arrangement impossible and instead we find the Calcium Fluoride structure. Inter-atomic distances for a number of common CaF2 type crystals are listed in Table VIII.
In spite of the difference in structure the inter-atomic distances in the CaF3 crystals are normally identical with the NaCl distances for the same positive component unless there is a secondary combination between the atoms of the two-atom component. Thus Na2S has the same inter-atomic distance as NaCl, CaF2 the same as CaO, and so on. The equilibrium distance is independent of the nature of the negative component because the atom is essentially a time structure and the magnitude of the inter-atomic forces is primarily a function of the net time displacement. Where space displacement enters into the situation it does so only as a modifier or neutralizer of the time displacement. The number of negative atoms that are required in combination with each positive atom to accomplish this result is immaterial from a force standpoint. For this reason the question of combining power or valence does not need to be taken into account in the present discussion and will be given separate consideration later.


Have questions? Get answers from Brandlee or Yellosa users. Visitors haven't asked any questions yet.
We value people over profits, quality over quantity, and keeping it real. As such, we deliver an unmatched working relationship with our clients. Our team is intentionally small, eclectic and skilled; with our in-house expertise, we provide sharp and precise services. Our wide offering of everything print, branding and design caters to not only the most demanding of deadlines, but also to the smallest and biggest of businesses.
Brandlee - company profile is confirmed by company owner / representative person / directory administrator.


Lagniappe: what is in a name?
1/4 of an inch is hosting a post about how "your blog" name developed. my name evolves from my french cajun heritage. in my profile i state how a little "lagniappe" is loved by everyone. little extras given to us throughout our lives, good friends, wonderful blogging buddies, loving families, strengths we didn't know we had. i could go on and on and i'm sure all of you have your "lagniappe" in life. above is my lagniappe offering for today! that little tendril climbing up the stalk of the agapantha made me smile. it was my little extra for that day!!
I also you harvest. My those are huge. What's the white one? Look like an eggplant. If it is, hmmmm haven't seen a white one.
Love your blog name, Sue and the picture of the little tendril is sweet. Happy to find your blog.
I like this! I am giving you a thumbs up. AND I LOVE CAJUN TEA!
Thanks for the comment. I am new to this so it is soooooo cool to see the different people that come about and read it!
It seems as if anything that is or sounds French always sounds better. Thanks for sharing your story.
I love yours - how very sweet and "round". It is perfect.
But I love the idea of this post. Well done!
Tomorrow for Pink Saturday I'm featuring a slideshow of lovely flowers from my Dad's gardens around his home on the St. Croix River in Wisconsin.
Today I have a post on Slide, an application that lets you have slideshows on your blog, website whatever.
Lovely entry. My daughter came home asking, "What does our last name mean?" I looked it up and I was surprised. I guess there is a lot in a name. Gorgeous photo.


1. We're here at QCon San Francisco 2014, I am sitting here with Peter Bourgon. So, Peter, who are you?
First, thanks for having me, my name is Peter and I am a software developer at SoundCloud working mostly on our infrastructure, distributed systems, large data systems, this kind of thing. Prior to that, I was working on our search products at SoundCloud, and prior to that I did a number of things in a couple of different industries, I was working on network and telephony protocol stuff, I did large scale search for legal and finance teams and I did some work in embedded and mesh networks coming just out of college. So, I guess I've been in the industry for about 12 years and I've been doing distributed work for most of those years.
2. Maybe you can give us a quick overview of what SoundCloud is and what are the big problems with SoundCloud, whether scaling it, or what are the big challenges?
Sure. So, SoundCloud is a consumer website that is the leading audio platform on the web and that means anything from bedroom DJs uploading their mixes to professional interviewers uploading interviews and podcasts and that kind of things all the way to major labels using SoundCloud as a promotion venue for major artists. So, we grew from very humble roots, very artists- and creators-driven site and luckily the market supported our vision and we grew quite rapidly, I guess over the past six or seven years now, now we are definitely in the hundreds of millions of users scale and our architecture has grown, as I think a lot of companies' architectures have grown, in a very similar path. We started off as a Rails monolithical application and used that to great advantage in the early days so allowing us to iterate very quickly and build new features and all the things everybody says. At some point it starts to break down, when the team size grows, when the scale grows, so we began the process, we were one of the first large companies, I think, who began the process of extracting a monolithic application into multiple services. When we first started it was called SOA- service oriented architecture- and now it's microservices, I think fundamentally it's the same thing. So, now we are well on that journey, we are well down that path, the monolith still remains, but it's getting smaller every day and now it's a shell of what it used to be and all new development is in the microservice style and very clear division of responsibility and very clear division of service hierarchy and that sort of things. So, that's where we are today.
3. Here at QCon you gave a talk on CRDTs, is that one of the hipster data structures that are in today or what are they?
CRDTs are this thing that I would argue came out of the CAP theorem which was first published in 1999 or 2000; they are a distributed data structure similar to a linked list, or it can also include maps or sets and I guess I would argue they were discovered rather than invented, but the CRDTs are really a collection of properties, properties of operations and if your data type or data structure abides by these properties then interesting things fall out of it. I think academically, I am no academic, but I have scanned the literature at least, the official term is that a CRDT is a type of join-semilattice, which is a way to visualize or a way to structure a bunch of information and a bunch of operations on that information in a way that makes it a really nice fit for eventually consistent data systems, so in CAP terms, AP data systems. A lot of times, I mentioned this in my talk, a lot of times organizations and companies where building data systems that kind of danced around the idea of a CRDT and it was only recently, I think in 2009, that CRDTs became reified and a concept that people could talk about concretely and I think the seminal paper was by Shapiro who is a former Microsoft researcher, and that started a blossoming of conversations and concrete implementations and now CRDTs are everywhere which is great, I am a CRDT evangelist myself, you see them in use in data systems like Riak, you see people talking about them in all sorts of applications not just in data systems but in the web in general; you can picture a network of connected devices all with their own view or portal on the world as indeed a large scale CRDT. And maybe another thing people are familiar with is Google Wave for this now-defunct service that allowed you to collaboratively edit documents, this was based on a type of CRDT back also in 2009 or 2010, and I think the legacy of that continues on today in Google Docs, the collaborative editing feature is based on this eventually consistent model.
4. You brought up a scary word in there, lattice, a term from algebra. For some of our audience who are less mathematically inclined, what is a lattice or what does it mean in practice?
So, a CDRT in practical terms is something whose operations abide by certain properties, so if you think of two integers, 1 and 1, and you consider the operation 'add', this operation is for example commutative, meaning 1+2 is the same as 2+1. It's associative meaning you can group additional operations in different ways, but it's not idempotent meaning 1 + 1 is not equal to 1. So, this operation does not satisfy the core requirements of a CRDT, but other operations do, for example a set union operating on two sets does. So, CRDT is a thing, any data type that has operations that satisfy these different three core requirements and the abstractions you can build on top of that data type. There is probably a more heady and academic definition based on semilattices with all sorts of notation that I am totally unqualified to talk about, I'll leave that to our intrepid readers and viewers who want to look up the literature on that topic.
Werner: They can basically use it to build as you said data structures like a table or a list or things like that.
Exactly and the key win for CRDT is that you get to ignore all the problems that are inherent in distributed systems, so network failures, message duplication, out of order arrival, this sort of things. Other systems deal with these problems by building reliability layers on top, like Paxos and other CP systems; CRDTs are, I would argue, the first theoretically sound and robust implementation of an AP system, of an eventually consistent model, that are maybe clear enough for industry to be able to make reasonable implementations of and ship in products and all these good things, so that's why I am excited about them.
5. You brought up the various properties. Why don't you have to lock this data structure if multiple things access it and how do you get the eventual consistency, what is the secret sauce in there?
Each data type achieves it in a slightly different way, but the idea is to track metadata with each element such that the system as a whole only moves in one direction, so you can imagine if you couple an operation with a time stamp, only those operation time stamp pairs which beat the operations that have already been recorded can effectively mutate the data structure or the data system. So, it's kind of like maybe building a house and every brick that gets placed has to be placed on top of a foundation. So, it's a combination of metadata, and it's a combination of structuring your application code at the layer above in a way that can be expressed in these terms, and that is often the hard part, I find, reconfiguring the way you think about your application domain to be able to be expressed in these terms and as I go on a little bit in my talk I think this is one of the harder things to do, but I also think it's one of the more rewarding things to do, we have these really nice theoretical properties, this nice CRDT theory that is provably correct and if you can leverage that, you should. A lot of the work that I did in my project and I think a lot of the work that other people will need to do if they want to use CRDTs is to rethink their application domain in terms of the properties that they can leverage.
6. Is it true that CRDTs are basically append-only data structures, is that true?
It's one way to think about it, the simplest CRDTs might be considered that way, so the common abstraction in CP systems is like an append-only log and CRDT is not quite as simple as that, but in some abstract way that is true and there are techniques in practical real world implementations of CRDTs to accommodate for that unbounded growth, there are ideas of garbage collection of so called tombstones, there are other approaches that you can use to deal with that kind of abstraction. But CRDTs, I think, are pretty conceptual and there is not a single reference implementation at least at this point in history, so implementers are free to explore these little areas, these minutiae, and figure out whatever solution works best for their domain. That's what we did in our implementation at SoundCloud and I think organizations like Basho with products like Riak are really, at least at this stage, opening the doors and allowing you to tune all these knobs and choose whatever implementation makes sense for your specific application.
7. How does your implementation at SoundCloud get around these problems?
We have implemented what is basically a LWW-Element-Set (LWW = last writer win) element set with a form of minimized garbage collection built into it. So, it's a bit technical but the point is that every element that can be in a set, that can be in the data system, it initially will go into the so called visible set, the add set, but when a remove operation comes along, it's not actually deleted, you don't reclaim that space, it's moved to a delete set, so in the worst case if all of your adds are accompanied by deletes or all of your elements are at some point deleted and maybe readded the cost is around 2x storage requirements, but in practice for us our deletes are much less frequent than our adds, so we don't pay that penalty, at least not at that level.
8. So you don't need a garbage collection step at that point?
We do garbage collection in the sense that each of those sets is bounded and we only have a limited view in the history in order to resolve these conflicts, so once the delete queue gets past a certain size then it's truncated, so that's a type of garbage collection, I suppose. But, yes, other systems take other methods, they say, for example, you have threshold latency whereby everything that is older than a certain time window from now which is maybe a second if you are very aggressive or maybe a few minutes if you are not, there is a process which can go through and clear those tombstones away, that's one option that carries an operational cost [which is not to use it], but there are a lot of strategies for this kind of thing. Different sets actually carry different storage requirements, there are some sets which give you a lot of flexibility at the application layer and the cost is they carry additional metadata in each of the elements, so again a lot of dials to tune, it's still very young for practical implementations of CRDTs and there are a lot of things to consider.
9. In which systems do you use these specifics CRDTs ?
The one that used as kind of the trial balloon, so to speak, was a system that I worked on basically an activity system, you can consider it very similar to the tweet stream on Twitter or the Facebook feed or something like this, at its core is time ordered events, time series data, and the two properties that allowed us to use CRDTs for this application is that each event is very small in terms of data size in the order of bytes, because it's only a unique identifier, it doesn't carry too much metadata, and that's indeed the application, the product that we are building the data system for could be very tightly defined and it is always going to be time ordered series of events, so leveraging these properties that are unique and we only have one sort order, we built the system that we built, and that is powering several product features that meet the description right now, currently the stream which the main page you use when you login with the user account, user profiles, user activities, many other things that you can scroll through and listen to things on.
10. Writing the CRDTs yourself, do you think it paid off, I mean the cost of maintaining it, what do you think?
This is a really interesting question. When we got started on these projects, CRDTs were talked about, but there were no good implementations yet, certainly none that were proven in industry or in production, so it was very exciting for me to learn and build a production version of this sort of thing, it was incredibly humbling and also very beneficial to my own knowledge, so in this way it was really great. These days there are production grade implementations in Riak for example and if I did it again starting today I would probably look at that. That said, there is a really interesting tension in our industry between "not invented here" and "off the shelf", these two forces are always in play and I am totally cognizant of the fact that engineers are maybe often overestimating their own abilities and leaning too heavily on building their own solutions when something off the shelf might make a lot more sense. And that's fair, it's always something to consider, but in my personal opinion it seems that as an industry as a whole we've swum too hard in the other direction and we are not performing software craftsmanship with the kind of sense of ownership that we should, I think, and with the kind of excitement about our industry that we should be, I think in a lot of cases we are being reduced to effectively data plumbers, picking data system A with message queue B and just kind of wiring them together without understanding really what is happening in the data system and what are the guarantees and the SLAs of the message system. So, you can make good arguments in either direction, but I think it's good to have something out there which is being run in production, which is vetted and which honestly isn't that big, you mentioned maintenance and operational costs and that sort of things, every line of code that I wrote, excluding tests, sums up to 1500 or 2000, it's readable Go, I don't really think it represents a burden to whoever comes after me and maintain it, and I think that by building it this way and by explaining it to other people in the company I have increased the knowledge, I increased everybody's abilities and pushed concepts out where they didn't exist before and I think that's a net benefit, I think that in some cases it does make sense to build it yourself, sometimes.
11. CRDTs are quite new as a concept, I think the original paper is less than 5 years, 10 years old. Do you see any similar kinds of discoveries in the future or what's on your radar, interesting papers where you maybe say "That is the way to tackle an order of magnitude of growth"?
It's a really interesting question and it's always very difficult to predict trends, of course. What I can say is what I see here at QCon which is what are people excited about and what are people talking about and it seems to be a lot of, obviously, service architecture and platform as a service, but getting a bit deeper I see the cutting edge to be scheduling, and scheduling algorithms, scheduling methods, maybe even taking a step back and thinking about how to not just schedule given a container and a pool of resources, but taking a step back how to schedule at the cluster level, how do you schedule clusters of things on other things, there seems to be a lot of interesting discussions, everybody has read the Omega paper at this point, that's good, but I feel that maybe that is something in that domain is ripe for disruption, if you'll forgive the term of art, that seems to be where a lot of thought is happening right now; data systems is maybe what you meant though, what's next in data systems, and that I can't say, I think we are still a long way away from CRDTs being fully realized and fully explored, so I am looking with excitement at what Basho is doing, I am really curious to see another large organization pick up CRDTs for a mission critical thing and see what production lessons they learn from that experience and see where we stand in another five years maybe.
12. You wrote your CRDT implementation yourself with Go, I think, so why Go?
SoundCloud was and is a company that is polyglot, we run a lot of different languages, when I joined we were very polyglot, I think we ran something like a dozen languages in production, since I've been there we slimmed down a little bit, so it was like a Cambrian explosion of possibility and now we slimmed down to a few core languages. One of the languages in the Cambrian explosion was Go and it's one of the few that survived the shrinking and I think for me Go is one of the nicest things to happen in the field of computer engineering since I entered the industry, at least for the things that I like to work on which are highly concurrent, network based applications, network servers and it's a perfect fit for distributed systems, the concurrency is baked into the language, it focuses on simplicity of philosophy that is really appealing to me, the spec is tiny, you can keep it in your head, there is really no gotchas, they make a point to prevent you from doing monkey-patching in the Ruby world or filling your head with too many ways to do the same thing, so as a result the language is very small, you roll it around in your hand and get a really good sense of it which means that your head is totally free to consider your domain and when you are working in distributed systems and distributed programming there are so many gotchas in the application domain that you can't really devote mental resources to do, for example, manual memory management or playing with the type system or whatever else you might have to do with another language. So it's a perfect fit, it survived at SoundCloud for a long time, we were one of the early adopters, we were using the pre-1.0, actually, and every test we've put it up to it passed with flying colors. It's, I'll go out on a limb now and say, the most performant runtime that we run at SoundCloud by a large margin, like resources per op, it's by far the most efficient and every experience we've had with it has been really positive, so a bright future for Go, for sure.
13. [...] Did you have to relearn how to structure an application in Go, is it different from other languages, what do you think?
Werner's full question: InfoQ has a large Java developer audience; looking at Go, I think it doesn't have classes, which is probably going to freak out our audience right now, how do you write program without classes, I don't know what your background is, but did you have to relearn how to structure an application in Go, is it different from other languages, what do you think?
My background is mostly C++, that's where I am coming from, and indeed you have to rewire your brain a little bit to write Go effectively. Rather than classes, rather than the classical OOP inheritance model, Go prefers a composition model which I guess in Java is modeled as a, what is it, an implicit interface, is that right?
Werner: They have interfaces, yes.
Ok. In C++ would be a virtual class or something.
So, you don't inherit from something, you rather compose the behavior or the thing you want into your struct and this works because Go has this concept of an interface, but not an explicit interface, rather an implicit interface, that means you define the behavior you want in terms of methods and then things satisfy it automatically if you implement those methods. So it's definitely an inversion and if you are used to working the other way around, you have to stop and think about what you are doing and maybe rewire your brain a little bit, but it's not really that difficult to do, I mean you can go through, Go has excellent documentation, take a tour, a lot of things you can do to quickly get up to speed and usually in SoundCloud's experience someone with an open mind who starts looking at Go is making productive commits on production projects on the order of less than a week, so it's definitely a change but there is not enough going on in the language that it's really a big problem, in my opinion.
14. Another interesting concept is of course goroutines, are they your basic tools, you're slinging goroutines left, right and center or are they like threads in other systems where you just express concurrency?
Goroutines are best thought of as CSP-style lightweight threads or green threads, they are very cheap, they are not like a pthread of something like this, we run plenty of services that launch 10,000 goroutines to accomplish some task, which is great, if you have a problem that can be expressed in a concurrent way it allows you to express it that way, without having to worry too much about overhead like physical concrete restraints imposed by your runtime or your framework or whatever, it allows you to express a concurrent problem in its natural language which is really what you, obviously, want in a large class of problems. That said, concurrency is, I think Andrew Gerrand says it's there when you need it and it stays out of the way when you don't, so when you are designing APIs, when you are designing components, typically in Go you design them synchronously without concurrency and then you allow the caller to make them concurrent if they so choose and so that means all of your APIs are blocking more or less and then if you need concurrency at the call site, you can easily stick a 'go' in front of a method invocation or wire up some sort of channel that aggregates all of the things you want and make things concurrent or potentially parallel at that point rather than baking it into your APIs.
15. How does a goroutine influence the design in the sense of if you call a method you get a return value, but if you call a goroutine you get a channel, you just plug channels together or what is the design idea there?
I think the big takeaway from goroutines and the whole concurrency model of Go is that it really can't be bolted on as a library, I guess it's Go's opinion, Go's philosophy is that it has to be baked into the language core because that is the only way you can exploit certain properties of the runtime to make concurrency efficient enough to be able to use them this way. That I think is the major lesson, in terms of how you use it day to day, it depends of course on your problem which I think it's really nice, there is no prescriptive way of using goroutines, but in general, indeed, putting 'go' in front of a function invocation is the same as putting an ampersand after a shell command, basically, and so by itself, the work is accomplished in the background, but if you need to communicate the results of that work or if you need to send information to those workers in an asynchronous way, then indeed you need to wire up some kind of channel of information and most often that takes the form of a Go channel which you either pass to a function explicitly if it has an asynchronous API or which you construct, call the function and then put the results into the channel in your own wrapper layer if the API is asynchronous or non-concurrent. That's generally how it works but that's really an oversimplified view, it's almost always problem domain specific and there are a lot of idioms that work in different domains, many of them are outlined, there is a website called "Go by Example", I think, which describes many of them, I find that is a great resource.
16. One topic that is peculiar, I guess, in Go is error handling, I don't think it has exceptions, is that true?
17. What's the usual way of doing error handling in Go? Do I have to always check my return values, is there another approach that we haven't heard of?
There are these mechanisms that are called panic and recover which to all outward appearances look like an exception control flow, so code that divides by zero or causes an out of memory error would idiomatically issue a panic, but panic isn't an exception which should be caught, it states the state of the program is now undefined and the only logical thing to do really is to crash. There are some exceptions to that rule, as with any rule, the JSON parser is a recursive descent parser that uses this type of control flow to sanely be able to deal with bad input data, but in general when you encounter a panic you should let the program crash and treat it as the bug that it is. This may seem dangerous, but because it is used so rarely it's conventionally never really a problem, I can say in the 3+ years of using Go in production at SoundCloud we've never had a service crash due to an uncaught panic that we didn't first encounter in a unit or integration test, so in practice it's not a problem.
18. So you say the panic bubbles up through the call stack, does that mean in ends at a goroutine or does it go all the way up to the program?
Yes, it will terminate the goroutine if it's in a separate goroutine, if that goroutine is the main goroutine, then it kills the program. Does that make sense?
Werner: Yes. Otherwise it just kills that goroutine, that's it, no harm done.
Exactly. It depends on what the goroutine was doing, I suppose, but yes, you'll get a nice stack trace on your stderr so you can see what happened, but in general the program just marches on, I think that's true, I might be mistaken, it might take the whole program down, but I would have to check.
19. Well, that's some homework for you. So, the obvious question everybody asks, Go is a somewhat new language, a language with a smaller community, where do you get your libraries?
The good news is that the standard library is really quite good in the sense that it gives you a lot of core building blocks, there is a production grade HTTP server which can definitely take internet traffic without having to stick an nginx in front of it or something like this, there are JSON parsers, there is OAuth, there are all these lovely productive things, but they are libraries, they are components and if you want to do something in your business domain, in an application domain, it is on you to stich them together. There are enough of these libraries and enough of these components that I personally never felt wanting, there is a great Redis database driver, there is a great MySQL AMQP library, all these things exist. But it does shift the burden a bit to the application developer and I think that, or in fact I know that is on purpose, it's not the sort of language where you are a data plumber, where you are just picking things off the shelf and wiring their constructors together and then letting your system loose, it forces you to think about what you are doing and what you are building and it forces you to plan ahead and structure your thoughts and your code in a coherent way, it is somehow – I wouldn't even say less productive- it just sort of more deliberate, and that carries costs, but I think it carries benefits and I think the benefits outbalance the costs.
20. When Go first came out it was pitched as a systems language, but then there was this thing that stuck out which was the garbage collector, how can you build a systems language with a garbage collector that every once in a while says hey, stop, I have to clean up here; what's your experience with that?
This was I think a big problem for the Go team back in the early days, I think they since walked this back, I think the Go team mean something very different when they say systems programming language, I think to them they mean system services, like network server or a file system server or something like this, and I suppose and indeed other people have different ideas like a systems language is a language you can write an operating system in, so I think they have since walked this description back and indeed the Go team has noticed that they have attracted a lot more developers from dynamic languages like Python and Ruby than they were expecting and perhaps a lot fewer from languages like C++. I, definitely, their original message resonated with me I think because of the class of applications I was used to writing in C++, network servers, stuff where the low level memory control wasn't that useful to me and the sort of ceremony and pomp and circumstance of dealing with very robust type definitions and all the safety things you had to pay attention to, this was just overhead for me. For me, it is a systems language but I understand that a lot of other people may not think that.
21. You yourself never had any problems with garbage collection pauses or did you?
It's definitely something you have to think about especially as your services do more and more qp/s, there are strategies, I should first say it's continuously getting better with every point release, the garbage collection is getting smarter, I think in 1.4 or 1.5 is going to a fully concurrent model, which is going to be great, there are strategies to create less garbage, obviously, in Go it's a lot easier than it is in Java because idiomatic Go doesn't allocate memory, it's very clear on the page when you see a for loop what is happening, what memory is being put on the stack, what memory is being put on the heap and so it's a lot easier to detect things that are being created and to eliminate when necessary, there are standard library idioms for creating a pool of resources which can be used to circumvent the garbage collector, but yes, it is something you have to pay attention to, luckily in Go it's a lot less complex and a lot easier to get your head around than in Java, for example, where the garbage collector is the specter looming in the background.
Werner: And there is only one garbage collector in Go rather than in Java where there is about a dozen by now.
Pluggable garbage collectors, yes. I don't know if that is going to continue, maybe there will be an option in the future, but certainly nothing on the roadmap now that I am aware of.
22. To wrap up, are there any tools that you use with Go, since we talk about garbage collection, to visualize that, tweak that, or other aspects, logging, tracing?
For sure. I guess it's about using Go in production and operational context and developing Go as someone who is interested in app performance and this sort of thing, the good news here is that Go ships with this incredibly robust and useful tool chain, there is the obvious stuff like the formatter which has strong opinions about how Go code should look and eliminates whole arguments that normally happen, but layering on top of that there are tools like golint and govet which are basically static code analysis with varying degrees of strictness, there is a built in race detector which is incredibly useful, you pass an extra flag to your compile and it will detect when reads and writes are improperly interleaved and warn you on stderr and it prints a really detailed description of what happened, which goroutine was responsible for the write, which one was responsible for the read, this sort of thing, there are bleeding edge tools like oracle, which is a static code analysis you can put into an editor and see what things implement what interfaces, what things call what other things, this is being actively developed, and things on the horizon there is a code tracing tool that Dimitri is working on, I think, where if you instrument your code in the right way you can see a really clear- almost a Zipkin style breakdown- of how all the indications go and where the time is spent. In addition, there are tools that do really good integration with, the Google pprof profiling tools so you got runtime as the program is running, memory dumps, stack and heap analysis, CPU profiling including call graphs, time spent, this whole thing. This is really the innovation of Go, one of the main ones which not just making a better language but making a better language to use and that covers way more than just the grammar, way more than just a feature set, all the ecosystem around it and in this way Go is clearly a language that's been written for and by professional software engineers and large organizations and that really shows through in every dimension, I think.
23. And so to finally wrap up, SoundCloud has a lot of source code on GitHub, is that true?
Yes, yes, that's what we use.
24. A lot of Go and other things?
In the early days there was Ruby on Rails and we had this Cambrian explosion, as I described, so now I guess there is still a lot of Ruby left over a lot of services, microservices are often written in Ruby, our major product-side services are increasingly written in Scala, there are a lot of reasons for that, there is a lot of mindshare behind it, we have pretty mature shared libraries that we use to do common stuff, so that makes a lot of sense to aggregate around that ecosystem, but on the infrastructure side of the organization and still on some product teams there is a ton of Go and it has clearly proved itself and it's not going anywhere, I am probably the main Go evangelist at the company so I would love to see Go shift into the product side of the organization and attack some of the current Scala services, I understand there is probably a lot of barriers to that, but I would love to see Go option increase, definitely.
Werner: I guess our audience can look at GitHub and spy some of your source code.
There are some stuff there, yes.
Werner: Is your CRDT implementation there?
Yes, that's github.com/soundcloud/roshi is that data system; we have a couple of other big open source projects and several other smaller open source projects, so take a look, I would like to think we are pretty good open source citizens.
Werner: Excellent. So, audience, go check this out and thank you, Peter.


HOUSTON - The University of Houston is hosting its 5th Annual Wheelchair Rugby Camp this week. Athletes from across the country are taking part at UH, learning new drills, scrimmaging and making friends.
"I live to play the sport," said Michael Peacock, a 14-year veteran of wheelchair rugby. "It does wonders physically for me. It also helps mentally, being around the other guys."
Aimee Bruder traveled to Houston from Birmingham, Alabama to take part.
"To me, it means we're not fragile," Bruder said. "We're willing to stick our neck out and have fun like anyone else in the world."
Jacob Ross grew up playing baseball, but a car accident four years ago left him paralyzed from the chest down. Now at 25 years old, he's got a new passion.
"After my accident , I just found rugby," Ross said. "It's one thing that's really awesome in my life. It's beyond an addiction, it's super competitive and really fun."
The camp is put on by students in UH's Adaptive Athletics program.


The MVP Team Shelter III is the #1 Selling Fully Customizable Shelter Cover in the USA! Need a custom color we don't carry? We can source it for you! We accept school P.O.'s!
Really want to block out the elements? Try a translucent shield! Soccer bench covers offer even more protection and privacy so your team can stay warm and comfortable while on the bench. Finally don'™t forget the referees! With a referee soccer shelter, every person on the field has a soccer tent they can retreat to if and when necessary. All of our soccer tents are easy to assemble and are easy to move. Order now or reach out to us today if you have any questions!


Claire Lordon Design: Even more useful tools and podcasts!
I have even more useful tools and podcasts I'd like to share with you!
nuSchool - Form to help you price your work.
I have used this tool to help me price my work for clients. I have found it to be accurate and very helpful.
The creators of KidLit411 have taken so many resources about children's books and have put them on one website. It is a great website that covers everything from contests, to tips, to marketing, and social media. Think of it as like a home base for kidlit.
Will Terry is a successful children's book illustrator (he also has worked in other markets). His YouTube channel has some great information for freelance illustrators. He also is a teacher so he explains things very well. I find it a useful tool to listen to while I work. I have learned quite a few things from his videos.
Chris Oatley is a former Disney animation artist. He shares wonderful interviews and tips through his podcast and on his website. He also shares great storytelling advice.


Susquehanna Organ is a full Service Pipe and Digital Organ Shop located in Dallastown, PA. We provide new organ sales, service contracts & free evaluations.
To know if you can live with an organ, you should live with an organ!
Through all of the design and voicing conversations leading to the removal, restoration, and installation, I've learned a lot about organs. You were always within a phone call or email of whatever was on my mind (or the mind of someone here at St. Mark's). The project was not without its challenges, but overall everything is what we expected and, to a large degree, that is because you took the time to clarify and educate along the way, so we knew what we were going to get.
Matt Baldwin maintained the heritage of the craftsmanship of the past while moving the church into the future with modern technology. They expertly assessed the qualities of the pipe organ and brought it back to its former glory.
When Susquehanna Organ installed our beautiful Allen 58-stop Quantum organ, they provided expert advice on placement and superb tonal finishing. We highly recommend them, as we've had difficulty finding a firm that can deliver the highest-quality organ with top-notch customer service.


Welcome to the Chicago Bears Group reservation site!
A block of rooms has been reserved for June 6, 2019 - June 10, 2019. The special room rate will be available until midnight on May 8th or until the group block is sold-out, whichever comes first.
See you at the Hilton Garden Inn Chicago OHare Airport in June! We hope you enjoy your stay!
Rate includes: complimentary parking, internet access, 24 hour shuttle service to and from O'Hare Airport, pre-determined shuttle service will be available to the Donald E Stephens Convention Center.


While I was at Macdonald College, I followed a class called fermentation technology. As a ploy to get the students interested, we brewed a beer which demonstrated the chemical reaction that occurs when wet hay is turned into silage. Needless to say, I can now make great silage here on the farm, but the spark was there for me to go on and brew some great ales and lagers as well.
After getting my hands on as many different beers to taste as possible during my time at McGill, I tried my hand at kit brewing and wound up with decent results. After school was over, I joined a home brewers club in Montreal that meets every month and critics and tastes each other's' beers. By 2003, I built my first all grain homebrew system out of recycled dairy equipment. Gradually this experimentation grew into a passion and I decided to plant hop plants on the farm, and tried my hand at small batches of homegrown malt. My first couple of batches were not so hot, but I learned fast from my mistakes. Slowly the recipes were modified to take into account the new flavors from these homegrown base ingredients.
During 2006, I had finally gotten a recipe that I was able to replicate and that was a great beer. I had entered a few beers during the march in Montreal homebrew contest of 2006. The Pilsner won best of show, a great accomplishment since there were beers being entered from around the country. That year the prize for best in show was to brew the Macallen pils on a commercial system which would be sold in microbrew stores all around the province. Brewing the MacAllen Pils on a commercial scale was very eye opening, and it showed me that it would be possible to brew commercially on the farm when the time was right.
Since 2006, I have been visiting brewhouses in the States and Quebec and occasionally brewing with friends at their brewhouses. I have made a huge number of friends in the industry and around the world, as well as continuing to make plans for a small brewhouse on the family farm.
As of June 2015, I have been very fortunate to be able to brew our farm beer at Loup Rouge in Sorel, Quebec. One of the many friendships that I developed by wandering the beer world. As for the future of MacAllen farm and brewery, we hope to be able to build our brewery here on the farm in the next few years, surrounded by the hill and valleys of Rawdon and amongst our fields of hops and barley, as always brewing and farming the best products possible.


text:
Cyber Safe
Cyber Safe Film: Keeping Kids Safe on the Internet
About Keeping Kids Safe on the Internet
Keeping Kids Safe on the Internet is a film retelling the fable of "The Wolf in Sheep's Clothing." The animation teaches children that people online may not be who they seem. Funded by a Merit Grant from The Ferris Foundation, the project is intended to instill behaviors in children that will help prevent them from becoming victims of cyber predators. Students in Assistant Professor of Social Work Elizabeth Post's class wrote the film's script. Members of the Alpha Psi Omega Theater Honor Society provided voiceovers. A team from the Music and Entertainment Business program, led by Assistant Professor Paul Kwant, is providing the film's musical score, and Sports Entertainment Hospitality Management Assistant Professor and university Coalition Against Slavery co-chair Karyn Kiio provided operational assistance. The video animation was produced by Ferris State University 1983 alum Duane Weed from DW Video in Howard City.
Cyber Safe in the News
Protecting the vulnerable

redpajama_set_name: RedPajamaCommonCrawl


Nazea Hasan Sayed, who was last seen in Colors' Phulwa and is currently a part of Zee TV's Punar Vivah Ek Nayi Umeed (Shashi Sumeet Mittal Productions), is, at the moment, on a career high.
Well, the actress will be seen in the sequel of Once Upon A Time In Mumbai. Yes, this pretty looking actress has bagged this Bollywood flick.
Nazea…keep up the good work!!!


about the importance of earth and why we should save our mother earth. We give you warning that this video contains disturbing film and pictures of the Nazi concentration camps, the Nazi Lebensborn project, and the Hitler youth program. Furthermore, there is no person who can even precisely define right behavior down to the smallest detail for all circumstances. This habit should include the consideration of even our smallest behaviors. What you know and are now is never sufficient for the future. Think of your children and their need to regularly and independently consider and examine the justice article 8 de la cedh and virtue of their own character as they live out their lives. When preexisting bad habits are the ground upon which we first meet the extremes of life, disrespect can become murder in the blink of an eye. For those of you who have an elderly parent, pay attention to this important poem: When your mother has grown older, When her dear, faithful eyes No longer see life as they once did, When her feet, grown tired, No longer want to carry her. It focuses on the failure to cultivate reasoning in the masses to the fullest extent possible. Nature gave us all necessary resources to live and prosper. The principles of the examined life are necessary principles for all world views that claim a concern for the task of living well. Yet, in the larger scope of their living as citizens, something went horribly wrong. We should not use the natural resources in wrong ways for just our selfishness and fulfil our destructive wishes. Bickering like children, being rude to one another, lying and inciting violence have become the common offerings of public speech, which have replaced the necessary mutual reasoning we desperately need in order to create real solutions to problems. Even for the hermit, mother nature teaches her that human character will bless her or kill her. We need to maintain the originality of our environment to continue the life on the earth, the only place where life is possible till now in the whole universe. We propose that this belief of Socrates is true in a clear and simple way. If you feel you are unable to watch this video, then continue reading the text below. In this way, article 10 of the ppe directive 89 686 eec we can save many gallons of water per day. When we (the authors) speak of evil, we choose to associate the element of fear as a cause of evil (harmful behaviors). I am referring all my friends to your great website! Instead of examining the issues in detail before the eyes of the public, which is the purpose of the process, the people of the United States were led on by the political parties and the media to spend the vast majority of their time trying.
It is the responsibility of each and every individual living on the earth worldwide. So it is true for a nation. Perhaps you psychology topics for presentation have personally witnessed examples of people who did wrong and seemed to know full well that their behavior was wrong. When Hitler expressed his belief that he alone could bring Germany to greatness. They harmed themselves in ways worse than the harm that fell upon those victims who suffered without doing wrong. Over the last millennia the population on the planet california forest fires articles grew immensely and our needs increase with every year.
Above, the term virtue refers to the skillfulness of human character homelessness essay cause and effect with regard to our successful functioning in private and public life. But under compulsion of starvation, neighbors, the knowledge that is gained through the reasoned examination of ideas was absent. We wrote that Socrates believed the most terribly harmed of all human beings was the tyrant who was able to commit great wrongdoing for many years without being expository writing examples held accountable to justice. In this essay, we achieved great breakthrough in industry and other fields of production. Our objective knowledge is often subordinated to the power of our intuitive personal selfunderstanding.
Like the Nazis, we all have the capacity to be undone by our own ignorance and fear.The persistent effort to develop functionally skillful character is the most important willful act that any individual can perform to make their destiny something worth living.
Bad human activities have given rise to various environmental issues due to release of toxic fumes, chemical wastes and excessive noise.That something is this: In the Nazi Shoah, the most terribly harmed people were the ones who committed the most wrongdoing.
Self interest is persistent.Change your regular bulbs to fluorescent or LED bulbs.Each and every common citizen should involve in the environmental safety programme launched by the government.


Max Strang Architecture is seeking to fill an Intern/Junior Architect Position at our satellite office in Telluride, Colorado. Requirements include extraordinary architectural design, graphic and presentation skills. Strong academic and/or professional references required. Send resume/portfolio to info[@]strangarchitecture.com.
Please note that Telluride, Colorado is a highly unique location. Applicants should be comfortable with a location that has unparalleled alpine scenery, amazing cultural festivals, unmatched snow skiing and abundant outdoor activities.


text:
Trent, Bath and Loughborough into Championship last eight
by Chris Heal Saturday 24 March 2018
Nottingham Trent have won their last three games
©BUCS
Sarries star Segun praises university rugby
Exeter champions as Northumbria narrowly beaten by Leeds Beckett
Hartpury go fourth but Beckett respond
'That is what is really unique about Edinburgh'
BUCS Rugby, University Rugby, Women's Rugby
Nottingham Trent University, the University of Bath and Loughborough University are through to the quarter-finals of the BUCS Super Rugby Championship.
Trent made it three wins in succession as they shrugged off the challenge of Durham in the last 16 while Bath eased past Cardiff University and Loughborough thumped North A runners-up Newcastle University.
Considering Nottingham Trent lost 14 consecutive BUCS Super Rugby fixtures, their recent turnaround in form has come at the right time in the season and in Loughborough's case, they are just starting to click into gear as they aim for another Twickenham appearance.
As for Bath, they will now be hoping for a strong run in the Championship after an inconsistent season in BUCS Super Rugby.
Below is the latest news from the BUCS Super Rugby Championship as well as results from the Women's Championship, BUCS Big Wednesday and our featured BUCS leagues.
BUCS Men's Super Rugby Championship
Durham University 10-17 Nottingham Trent University
Nottingham Trent University continued their resurgence as they progressed to the quarter-finals of the BUCS Super Rugby Championship following a hard-fought win over Durham.
A try from David Williams plus three points from the boot of Tom Miller helped the away side go into the break on level terms.
Durham had led twice in the first period following Ben Stevenson's early score and a penalty from Tom Catterick, but that was as good as it got for the home side.
MATCH REPORT - DURHAM v NTU https://t.co/UhvPxnueiw#BUCSSuperRugby #BleedPink #NTU #3in3 #UpTheTrent
— NTU Rugby Union (@NTURugbyUnion) March 21, 2018
Trent cranked up the pressure following the restart and just after the hour, they were rewarded as Mike Ozdilli barged his way over to give the Midlands side the lead for the first time in the match.
It was an advantage they never relinquished and despite Durham's best efforts, Trent held on to seal their third win on the spin and their second victory over Durham in as many weeks.
Trent will take on BUCS Super Rugby champions the University of Exeter in the last eight.
Nottingham Trent's Tim Cardall: "I am so pleased for the boys. We put in a lot of work over the past week. We came up to Durham the previous week so I am really chuffed with the win."
University of Bath 58-15 Cardiff University
The University of Bath picked up just their second win in 2018 as they ran in 10 tries against Cardiff University at Infield.
Tom Doughty, Jack Davies and Miles Reid gave Bath a 17-0 lead.
Cardiff hit back either side of a Levi Davis score as Adam Sadbki grabbed a brace before the interval.
But further scores from Doughty, Davies, Beck Cutting, Will Flinn and Chris Barry (2) saw Bath secure a place in the last eight against Northumbria University.
Harry Land crossed for a consolation try for Cardiff, but this was just a taster of what is to come for Alun Wyn Davies' side ahead of their first BUCS Super Rugby season next year.
Loughborough University 79-7 Newcastle University
Loughborough University scored 13 tries as they thrashed Newcastle University to progress to the next round of the BUCS Super Rugby Championship.
Hooker Jamie Cox crossed early before Matt Travers, Callum Watson, Will Kaye and Harry Betts all went over to give the hosts a 34-7 lead at the interval.
Newcastle did dot down before half-time, but a seventh try of the evening for Loughborough opened the floodgates as Gerard Mullen's side ran riot in the second period.
The home side went over on six more occasions to complete the rout and book their place in the quarter-finals where they will face Cardiff Met.
As for Newcastle, it has been a tough couple of weeks but they did bounce back in their Varsity match against Northumbria at St James' Park on Saturday.
BUCS Women's Championship
BUCS Women's Championship holders the University of Edinburgh are out of the competition as they were beaten 35-15 by the University of Exeter in the semi-finals.
Great effort from all the girls today! Thanks for all the support ?? #AlwaysBleedGreen https://t.co/CyUREW5pzc
— Clara Nielson (@clara_nielson) March 21, 2018
It will now be an all-southern affair in the final at Twickenham on April 11th as Premier South champions Hartpury knocked out last season's runners-up, Northumbria University, following a 34-7 victory.
BUCS Men's Vase
Following on from their North A title, Durham 2nds secured the Men's Vase trophy after a hard fought 35-33 win over South A outfit Hartpury 2nds. Ben Woods' side have had a wonderful season, winning 13 of their 17 matches in all competitions.
BUCS Men's Trophy
Also on BUCS Big Wednesday, Northern 1A side the University of Sheffield lifted the Men's trophy following a 21-12 win over Reading University. Sheffield beat Leeds Beckett 2nds in the last four to reach the final at the University of Nottingham and after recently clinching the league title, it is a double success for the men from the Steel City.
Elsewhere across BUCS
In North B, the University of Strathclyde finished in third spot after a 17-12 win over Loughborough 3rds while in Northern 2A, Bangor University picked up their first victory of the campaign in their final game of the season as they beat UCLAN 27-17.
Newcastle 3rds have clinched the Northern 2B title despite losing 12-5 to Northumbria 3rds. Following a walkover result against Sheffield 2nds, the north-east side went into their fixture with Northumbria three points clear at the top, but even though they fell to a defeat, they still secured the championship.
Across our other featured leagues, Liverpool John Moores University ended the Northern 3A season in third place following a 58-45 victory against Edge Hill University while Leeds Beckett 4ths sealed the Northern 3B title as they beat York St John University 52-26. In Midlands 2A, Nottingham 3rds finished in the silver medal spot after they were awarded a walkover result against Oxford Brookes 2nds.
If you would like your University to feature in our round-ups this season, feel free to contact us on Twitter @TalkRugbyUnion.
With #UniRugby you can stay connected 24/7 on Twitter across all BUCS Leagues and Competitions; men's & women's; 15s & 7s.
Rachael Burford Exclusive: Postponement of Women's Six Nations presents window of opportunity
"She is a student of the game who knows it inside out": The refereeing rise of Hollie Davidson
BUCS Super Rugby 2020/21 season cancelled due to 'unpredictable' coronavirus pandemic
World Cup 2021 Squad Selector: Which Red Roses are in the frame?
Jess Breach Exclusive: "Having time on the ball allows me to do what I like to do best
Exeter's dominance and England shine - TRU's 2020 Rugby Review
Thibaud Flament Exclusive: How Loughborough made me a professional rugby player
Harrison and Rowland duel will be key battle in World Cup year


Dosti () full Movie Download, Bollywood Dosti Friends Forever movie free . (Bobby Deol) lives a wealthy yet very lonesome lifestyle with his businessman dad.. Download Businessman Movie - Business Man is an upcoming Telugu action film co-written and directed by Puri Jagannadh, produced by R.R. Venkat and.. Here you can download the freedb database. The complete archives are available as .tar.bz2, the update-archives are available as .tar.bz2 files. If you don't.. If you are not sure what to download, see Using FLAC for instructions and guides on playing FLAC files, ripping CDs to FLAC, etc. This section is for the official.. 26 Feb 2005 . Enjoy! View a list of all the Feature Films sorted by popularity. Do you want to post a feature film? First, figure out if it's in the Public Domain.. Businessman Movie - Business Man is an upcoming Telugu action film co-written and directed by Puri Jagannadh, produced by R.R. Venkat and starring.. Il download di film e serie TV possibile anche su PC Windows 10 (Anniversary Update o versioni successive), usufruendo dell'apposita applicazione di Netflix.. Nov 22, 2018- Businessman (2012) - Businessman (2012) Telugu Movie Watch . Shivam (2015) Hindi Dubbed Full Movie Watch Online HD Free Download.. Amazon.com: BusinessMan Telugu Blu Ray (Tollywood / South Indian /Movie /Cinema / Film): Kajal, Prakash Raj, Nassar, Sayaji Shinde and Brahmaji Mahesh.. 25 Dec 2011 - 33 sec - Uploaded by Nagu230This video was uploaded from an Android phone. . OM 3D Hindi Dubbed Full Movie .. 6 Jul 2018 . The Businessman Movie Free Download In Hindi In Mp4 Tags : Bollywood New Movie Video Songs Download, Hindi New.. 1 Jan 2012 . Watch No.. . his sanity when a serial killer called The Businessman runs amok in his town. . Hate it when people write reviews about movies whom they, or their friends.. . Podcast Podcast. Download the latest documentaries Investigating global developments, issues and affairs. Updated: daily. Episodes available: indefinitely.. Beautiful free stock photos. Download amazing pictures for personal and commercial use. High resolution, no attribution required.. 12 Jun 2018 . The Businessman Part 2 Full Movie Download Mp4 Jumanji: Part 2 movie Download in HD mp4, 3Gp, 720p Blu-ray, HD.. Prakash Raj and Puri Jagannadh in Business Man (2012) Mahesh Babu in . Like i said Mahesh is the only saviour of this film, the script lacks morality so i.. Watch the video Download X-Mirage for Windows . Employees, businessmen just need to prepare presentations on any iPhone or iPad for mirroring to the Mac/PC when needed. . Enjoy photos, movies and more on the bigger screen.. On tvmoviestop, you'll be able to stream tons of movies and shows. There are a lot of . Although you can download movies 720p or 1080p . Youtube is the . Ben Drury, Computer Technician (18yrs), IT Trainer (7yrs), Entrepreneur. Answered.. . his now-dead lover in a hotel room, a young businessman hires a prominent . Thrillers, Crime Thrillers, Mysteries, International Movies, Spanish Movies. Director: Paulo Oriol. GET A FREE MONTH. MORE DETAILS. Available to download.


We here at Tasty Chicago always have a bias towards Chicago-based chains when venturing into the land of fast food. If I want a fast, hearty breakfast, nothing beats the sausage, egg, and cheese breakfast sandwich at Potbelly Sandwich Works. That's right, many of the Potbelly restaurants have breaky (cool-speak for breakfast) and it's a great thing. It's also a huge thing. I would say about twice as big as the sausage and egg McMuffin from that other fine local chain, McDonalds.
Potbelly puts it through the same exacting process that all of their sandwiches go through. The egg, cheese, and sausage patties (2) go on and it makes the famous trip through the Potbelly oven. The bun is that wonderful combo of crispy and soft and it's a joy to eat.
Ahh, I remember you Potbelly, my friend. You were just a little storefront on Lincoln (just south of Fullerton) when I moved here in 1989. You've come a long way baby and I feel like I grew up with you. You're kind of like that good friend from third grade…that I used to hang out with until you got really popular and then made me wait in line just to say hi. Which is not necessarily a compliment, I might add. But I don't hold it against you because you're sandwiches are the unequivocal masters of the hot, gourmet sandwich world.
Posted in food on 2007/04/24 by John.


text:
.tap-act{-webkit-tap-highlight-color: rgba(158,120,55,0.6);}
.page-title{color:#9e7837;border-color:#9e7837;}
#modNav span{background-image:url(img/dot15_white.png);}
@media only screen and (-webkit-device-pixel-ratio : 2),
screen and (min-width: 475px) and (-webkit-device-pixel-ratio : 1.5) {
	#modNav span{background-image:url(img/dot20_white.png);}
}
@media only screen and (-webkit-device-pixel-ratio : 3){
	#modNav span{background-image:url(img/dot30_white.png);}
}

redpajama_set_name: RedPajamaGithub


I have a form on my flash website that needs to be upgraded to PHP4 or 5. I have no idea how this is done. Can anyone help me with this conversion if it's not too much to ask? Here is my present code.
Thank you for your interest in $sitename!
I think I did the code right... but I wonder what the last few lines were for.
I hope that works well. If the post variables don't work, you could go back to $HTTP_POST_VARS if you want.