text:
The Monad.Reader/Issue5/Number Param Types
From HaskellWiki
1 Number-parameterized types
This article is also available in PDF. This Wiki page is not the master file: rather, it is the result of the SXML->Wiki conversion.
2 Abstract
This paper describes practical programming with types parameterized by numbers: e.g., an array type parameterized by the array's size or a modular group type `Zn` parameterized by the modulus. An attempt to add, for example, two integers of different moduli should result in a compile-time error with a clear error message. Number-parameterized types let the programmer capture more invariants through types and eliminate some run-time checks.
We review several encodings of the numeric parameter but concentrate on the phantom type representation of a sequence of decimal digits. The decimal encoding makes programming with number-parameterized types convenient and error messages more comprehensible. We implement arithmetic on decimal number-parameterized types, which lets us statically typecheck operations such as array concatenation.
Overall we demonstrate a practical dependent-type-like system that is just a Haskell library. The basics of the number-parameterized types are written in Haskell98.
2.1 Keywords
Haskell, number-parameterized types, type arithmetic, decimal types, type-directed programming.
3 Contents
4 Introduction
Discussions about types parameterized by values — especially types of arrays or finite groups parameterized by their size — reoccur every couple of months on functional programming languages newsgroups and mailing lists. The often expressed wish is to guarantee that, for example, we never attempt to add two vectors of different lengths. As one poster said, "This [feature] would be helpful in the crypto library where I end up having to either define new length Words all the time or using lists and losing the capability of ensuring I am manipulating lists of the same length." Number-parameterized types as other more expressive types let us tell the typechecker our intentions. The typechecker may then help us write the code correctly. Many errors (which are often trivial) can be detected at compile time. Furthermore, we no longer need to litter the code with array boundary match checks. The code therefore becomes more readable, reliable, and fast. Number-parameterized types when expressed in signatures also provide a better documentation of the code and let the invariants be checked across module boundaries.In this paper, we develop realizations of number-parameterized types in Haskell that indeed have all the above advantages. The numeric parameter is specified in decimal rather than in binary, which makes types smaller and far easier to read. Type error messages also become more comprehensible. The programmer may write or the compiler can infer equality constraints (e.g., two argument vectors of a function must be of the same size), arithmetic constraints (e.g., one vector must be larger by some amount), and inequality constraints (e.g., the size of the argument vector must be at least one). The violations of the constraints are detected at compile time. We can remove run-time tag checks in functions like
Although we come close to the dependent-type programming, we do not extend either a compiler or the language. Our system is a regular Haskell library. In fact, the basic number-parameterized types can be implemented entirely in Haskell98. Advanced operations such as type arithmetic require commonly supported Haskell98 extensions to multi-parameter classes with functional dependencies and higher-ranked types.Our running example is arrays parameterized over their size. The parameter of the vector type is therefore a non-negative integer number. For simplicity, all the vectors in the paper are indexed from zero. In addition to vector constructors and element accessors, we define a
The present paper describes several gradually more sophisticated number-parameterized Haskell libraries. We start by paraphrasing the approach by Chris Okasaki, who represents the size parameter of vectors in a sequence of data constructors. We then switch to the encoding of the size in a sequence of type constructors. The resulting types are phantom and impose no run-time overhead. Section Encoding the number parameter in type constructors describes unary encoding of numerals in type constructors, sections Fixed-precision decimal types and Arbitrary-precision decimal types discuss decimal encodings. Section Fixed-precision decimal types introduces a type representation for fixed-precision decimal numbers. Section Arbitrary-precision decimal types removes the limitation on the maximal size of representable numbers, at a cost of a more complex implementation and of replacing commas with unsightly dollars signs. The decimal encoding is extendible to other bases, e.g., 16 or 64. The latter can be used to develop practical realizations of number-parameterized cryptographically interesting groups.
Section Computations with decimal types describes the first contribution of the paper. We develop addition and subtraction of "decimal types", i.e., of the type constructor applications representing non-negative integers in decimal notation. The implementation is significantly different from that for more common unary numerals. Although decimal numerals are notably difficult to add, they make number-parameterized programming practical. We can now write arithmetic equality and inequality constraints on number-parameterized types.
Section Statically-sized vectors in a dynamic context briefly describes working with number-parameterized types when the numeric parameter, and even its upper bound, are not known until run time. We show one, quite simple technique, which assures a static constraint by a run-time check — witnessing. The witnessing code, which must be trustworthy, is notably compact. The section uses the method of blending of static and dynamic assurances that was first described in stanamic-trees.
Section Related work compares our approach with the phantom type programming in SML by Matthias Blume, with a practical dependent-type system of Hongwei Xi, with statically-sized and generic arrays in Pascal and C, with the shape inference in array-oriented languages, and with C++ template meta-programming. Section Conclusions concludes.
5 Encoding the number parameter in data constructors
The first approach to vectors parameterized by their size encodes the size as a series of data constructors. This approach has been used extensively by Chris Okasaki. For example, in Okasaki99 he describes square matrices whose dimensions can be proved equal at compile time. He digresses briefly to demonstrate vectors of statically known size. A similar technique has been described by McBride. In this section, we develop a more naive encoding of the size through data constructors, for introduction and comparison with the encoding of the size via type constructors in the following sections.
Our representation of vectors of a statically checked size is reminiscent of the familiar representation of lists:
data List a = Nil | Cons a (List a)
module UnaryDS where data VZero a = VZero deriving Show infixr 3 :+: data Vecp tail a = a :+: (tail a) deriving Show
To generically manipulate the family of differently-sized vectors, we define a class of polymorphic functions:
class Vec t where vlength:: t a -> Int vat:: t a -> Int -> a vzipWith:: (a->b->c) -> t a -> t b -> t c
instance Vec VZero where vlength = const 0 vat = error "null array or index out of range" vzipWith f a b = VZero instance (Vec tail) => Vec (Vecp tail) where vlength (_ :+: t) = 1 + vlength t vat (a :+: _) 0 = a vat (_ :+: ta) n = vat ta (n-1) vzipWith f (a :+: ta) (b :+: tb) = (f a b) :+: (vzipWith f ta tb)
That was the complete implementation of the number-parameterized vectors. We can now define a few sample vectors:
v3c = 'a' :+: 'b' :+: 'c' :+: VZero v3i = 1 :+: 2 :+: 3 :+: VZero v4i = 1 :+: 2 :+: 3 :+: 4 :+: VZero
and a few simple tests:
test1 = vlength v3c test2 = [vat v3c 0, vat v3c 1, vat v3c 2]
We can load the code into a Haskell system and run the tests. Incidentally, we can ask the Haskell system to tell us the inferred type of a sample vector:
*UnaryDS> :t v3c Vecp (Vecp (Vecp VZero)) Char
The inferred type indeed encodes the size of the vector as a Peano numeral. We can try more complex tests, of element-wise operations on two vectors:
test3 = vzipWith (\c i -> (toEnum $ fromEnum c + fromIntegral i)::Char) v3c v3i test4 = vzipWith (+) v3i v3i *UnaryDS> test3 'b' :+: ('d' :+: ('f' :+: VZero))
An attempt to add, by mistake, two vectors of different sizes is revealing:
test5 = vzipWith (+) v3i v4i Couldn't match `VZero' against `Vecp VZero' Expected type: Vecp (Vecp (Vecp VZero)) a Inferred type: Vecp (Vecp (Vecp (Vecp VZero))) a1 In the third argument of `vzipWith', namely `v4i' In the definition of `test5': vzipWith (+) v3i v4i
We get a type error, with a clear error message (the quoted message, here and elsewhere in the paper, is by GHCi. The Hugs error message is essentially the same). The typechecker, at the compile time, has detected that the sizes of the vectors to add elementwise do not match. To be more precise, the sizes are off by one.For vectors described in this section, the element access operation,
6 Encoding the number parameter in type constructors, in unary
To improve the efficiency of number-parameterized vectors, we choose a better run-time representation: Haskell arrays. The code in the present section is in Haskell98.
module UnaryT (..elided..) where import Data.Array
First, we need a type structure (an infinite family of types) to encode non-negative numbers. In the present section, we will use an unary encoding in the form of Peano numerals. The unary type encoding of integers belongs to programming folklore. It is also described in Blume01 in the context of a foreign-function interface library of SML.
data Zero = Zero data Succ a = Succ a
class Card c where c2num:: (Num a) => c -> a -- convert to a number cpred::(Succ c) -> c cpred = undefined instance Card Zero where c2num _ = 0 instance (Card c) => Card (Succ c) where c2num x = 1 + c2num (cpred x)
The same correspondence between the types and the terms suggests that the numeral type alone is enough to describe the size of a vector. We do not need to store the value of the numeral. The shape type of our vectors could be phantom (as in Blume01).
newtype Vec size a = Vec (Array Int a) deriving Show
listVec':: (Card size) => size -> [a] -> Vec size a listVec' size elems = Vec $ listArray (0,(c2num size)-1) elems listVec:: (Card size) => size -> [a] -> Vec size a listVec size elems | not (c2num size == length elems) = error "listVec: static/dynamic sizes mismatch" listVec size elems = listVec' size elems vec:: (Card size) => size -> a -> Vec size a vec size elem = listVec' size $ repeat elem
*UnaryT> listVec (Succ (Succ Zero)) [True,False] Vec (array (0,1) [(0,True),(1,False)])
A Haskell interpreter created the requested value, and printed it out. We can confirm that the inferred type of the vector encodes its size:
*UnaryT> :type listVec (Succ (Succ Zero)) [True,False] Vec (Succ (Succ Zero)) Bool
We can now introduce functions to operate on our vectors. The functions are similar to those in the previous section. As before, they are polymorphic in the shape of vectors (i.e., their sizes). This polymorphism is expressed differently however. In the present section we use just the parametric polymorphism rather than typeclasses.
vlength_t:: Vec size a -> size vlength_t _ = undefined vlength:: Vec size a -> Int vlength (Vec arr) = let (0,last) = bounds arr in last+1 velems:: Vec size a -> [a] velems (Vec v) = elems v vat:: Vec size a -> Int -> a vat (Vec arr) i = arr ! i vzipWith:: Card size => (a->b->c) -> Vec size a -> Vec size b -> Vec size c vzipWith f va vb = listVec' (vlength_t va) $ zipWith f (velems va) (velems vb)
infixl 3 &+ data VC size a = VC size [a] vs:: VC Zero a; vs = VC Zero [] (&+):: VC size a -> a -> VC (Succ size) a (&+) (VC size lst) x = VC (Succ size) (x:lst) vc:: (Card size) => VC size a -> Vec size a vc (VC size lst) = listVec' size (reverse lst)
v3c = vc $ vs &+ 'a' &+ 'b' &+ 'c' v3i = vc $ vs &+ 1 &+ 2 &+ 3 v4i = vc $ vs &+ 1 &+ 2 &+ 3 &+ 4 test1 = vlength v3c; test1' = vlength_t v3c test2 = [vat v3c 0, vat v3c 1, vat v3c 2] test3 = vzipWith (\c i -> (toEnum $ fromEnum c + fromIntegral i)::Char) v3c v3i test4 = vzipWith (+) v3i v3i
We can run the tests as follows:
*UnaryT> test3 Vec (array (0,2) [(0,'b'),(1,'d'),(2,'f')]) *UnaryT> :type test3 Vec (Succ (Succ (Succ Zero))) Char
The type of the result bears the clear indication of the size of the vector. If we attempt to perform an element-wise operation on vectors of different sizes, for example:
test5 = vzipWith (+) v3i v4i Couldn't match `Zero' against `Succ Zero' Expected type: Vec (Succ (Succ (Succ Zero))) a Inferred type: Vec (Succ (Succ (Succ (Succ Zero)))) a1 In the third argument of `vzipWith', namely `v4i' In the definition of `test5': vzipWith (+) v3i v4i
we get a message from the typechecker that the sizes are off by one.
7 Fixed-precision decimal types
Peano numerals adequately represent the size of a vector in vector's type. However, they make the notation quite verbose. We want to offer a programmer a familiar, decimal notation for the terms and the types representing non-negative numerals. This turns out possible even in Haskell98. In this section, we describe a fixed-precision notation, assuming that a programmer will never need a vector with more than 999 elements. The limit is not hard and can be readily extended. The next section will eliminate the limit altogether.
We again will be using Haskell arrays as the run-time representation for our vectors. In fact, the implementation of vectors is the same as that in the previous section. The only change is the use of decimal rather than unary types to describe the sizes of our vectors.
module FixedDecT (..export list elided..) where import Data.Array
Since we will be using the decimal notation, we need the terms and the types for all ten digits:
data D0 = D0 data D1 = D1 ... data D9 = D9
class Digit d where -- class of digits d2num:: (Num a) => d -> a -- convert to a number instance Digit D0 where d2num _ = 0 instance Digit D1 where d2num _ = 1 ... instance Digit D9 where d2num _ = 9 class Digit d => NonZeroDigit d instance NonZeroDigit D1 instance NonZeroDigit D2 ... instance NonZeroDigit D9
We define a class of non-negative numerals. We make all single-digit numerals the members of that class:
class Card c where c2num:: (Num a) => c -> a -- convert to a number -- Single-digit numbers are non-negative numbers instance Card D0 where c2num _ = 0 instance Card D1 where c2num _ = 1 ... instance Card D9 where c2num _ = 9
instance (NonZeroDigit d1,Digit d2) => Card (d1,d2) where c2num c = 10*(d2num $ t12 c) + (d2num $ t22 c) instance (NonZeroDigit d1,Digit d2,Digit d3) => Card (d1,d2,d3) where c2num c = 100*(d2num $ t13 c) + 10*(d2num $ t23 c) + (d2num $ t33 c)
*FixedDecT> vec (D0,D1) 'a' <interactive>:1: No instance for (NonZeroDigit D0)
t12::(a,b) -> a; t12 = undefined t22::(a,b) -> b; t22 = undefined ... t33::(a,b,c) -> c; t33 = undefined
The rest of the code is as before, e.g.:
newtype Vec size a = Vec (Array Int a) deriving Show listVec':: Card size => size -> [a] -> Vec size a listVec' size elems = Vec $ listArray (0,(c2num size)-1) elems
v12c = listVec (D1,D2) $ take 12 ['a'..'z'] v12i = listVec (D1,D2) [1..12] v13i = listVec (D1,D3) [1..13]
The decimal notation is so much convenient. We can now define long vectors without pain. As before, the type of our vectors — the size part of the type — looks precisely the same as the corresponding size term expression:
*FixedDecT> :type v12c Vec (D1, D2) Char
We can use the sample vectors in the tests like those of the previous section. If we attempt to elementwise add two vectors of different sizes, we get a type error:
test5 = vzipWith (+) v12i v13i Couldn't match `D2' against `D3' Expected type: Vec (D1, D2) a Inferred type: Vec (D1, D3) a1 In the third argument of `vzipWith', namely `v13i' In the definition of `test5': vzipWith (+) v12i v13i
The error message literally says that 12 is not equal to 13: the typechecker expected a vector of size 12 but found a vector of size 13 instead.
8 Arbitrary-precision decimal types
From the practical point of view, the fixed-precision number-parameterized vectors of the previous section are sufficient. The imposition of a limit on the width of the decimal numerals — however easily extended — is nevertheless intellectually unsatisfying. One may wish for an encoding of arbitrarily large decimal numbers within a framework that has been set up once and for all. Such an SML framework has been introduced in Blume01, to encode the sizes of arrays in their types. It is interesting to ask if such an encoding is possible in Haskell. The present section demonstrates a representation of arbitrary large decimal numbers in Haskell98. We also show that typeclasses in Haskell have made the encoding easier and precise: our decimal types are in bijection with non-negative integers. As before, we use the decimal types as phantom types describing the shape of number-parameterized vectors.
We start by defining the types for the ten digits:
module ArbPrecDecT (..export list elided..) where import Data.Array data D0 a = D0 a data D1 a = D1 a ... data D9 a = D9 a
class Digits ds where ds2num:: (Num a) => ds -> a -> a
data Sz = Sz -- zero size (or the Nil of the sequence) instance Digits Sz where ds2num _ acc = acc
We now inductively define arbitrarily long sequences of digits:
instance (Digits ds) => Digits (D0 ds) where ds2num dds acc = ds2num (t22 dds) (10*acc) instance (Digits ds) => Digits (D1 ds) where ds2num dds acc = ds2num (t22 dds) (10*acc + 1) ... instance (Digits ds) => Digits (D9 ds) where ds2num dds acc = ds2num (t22 dds) (10*acc + 9) t22::(f x) -> x; t22 = undefined
*ArbPrecDecT> :type D1$ D2$ D3$ D4$ D5$ D6$ D7$ D8$ D9$ D0$ D9$ D8$ D7$ D6$ D5$ D4$ D3$ D2$ D1$ Sz D1 (D2 (D3 (D4 (D5 (D6 (D7 (D8 (D9 (D0 (D9 (D8 (D7 (D6 (D5 (D4 (D3 (D2 (D1 Sz)))))))))))))))))) *ArbPrecDecT> ds2num (D1$ D2$ D3$ D4$ D5$ D6$ D7$ D8$ D9$ D0$ D9$ D8$ D7$ D6$ D5$ D4$ D3$ D2$ D1$ Sz) 0 1234567890987654321
*ArbPrecDecT> :type D1 True D1 Bool *ArbPrecDecT> :type (undefined::D1 Bool) D1 Bool
*ArbPrecDecT> ds2num (undefined::D1 Bool) 0 No instance for (Digits Bool) arising from use of `ds2num' at <interactive>:1 In the definition of `it': ds2num (undefined :: D1 Bool) 0
To guarantee the bijection between non-negative numbers and sequences of digits, we need to impose an additional restriction: the first, i.e., the major, digit of a sequence must be non-zero. Expressing such a restriction is surprisingly straightforward in Haskell, even Haskell98.
class (Digits c) => Card c where c2num:: (Num a) => c -> a c2num c = ds2num c 0 instance Card Sz instance (Digits ds) => Card (D1 ds) instance (Digits ds) => Card (D2 ds) ... instance (Digits ds) => Card (D9 ds)
newtype Vec size a = Vec (Array Int a) deriving Show
v12c = listVec (D1 $ D2 Sz) $ take 12 ['a'..'z'] v12i = listVec (D1 $ D2 Sz) [1..12] v13i = listVec (D1 $ D3 Sz) [1..13]
we should note a slight change of notation compared to the corresponding vectors of section Fixed-precision decimal types. The tests are not changed and continue to work as before:
test4 = vzipWith (+) v12i v12i *ArbPrecDecT> :type test4 Vec (D1 (D2 Sz)) Int *ArbPrecDecT> test4 Vec (array (0,11) [(0,2),(1,4),(2,6),...(11,24)])
test5 = vzipWith (+) v12i v13i Couldn't match `D2 Sz' against `D3 Sz' Expected type: Vec (D1 (D2 Sz)) a Inferred type: Vec (D1 (D3 Sz)) a1 In the third argument of `vzipWith', namely `v13i' In the definition of `test5': vzipWith (+) v12i v13i
The typechecker complains that 2 is not equal to 3: it found the vector of size 13 whereas it expected a vector of size 12. The decimal types make the error message very clear.We must again point out a significant difference of our approach from that of Blume01. We were able to state that only those types of digital sequences that start with a non-zero digit correspond to a non-negative number. SML, as acknowledged in Blume01, is unable to express such a restriction directly. The paper, therefore, prevents the user from building invalid decimal sequences by relying on the module system: by exporting carefully-designed value constructors. The latter use an auxiliary phantom type to keep track of "nonzeroness" of the major digit. Our approach does not incur such a complication. Furthermore, by the very inductive construction of the classes
*ArbPrecDecT> vec (D1$ D0$ D0$ True) 0 No instance for (Digits Bool) arising from use of `vec' at <interactive>:1 In the definition of `it': vec (D1 $ (D0 $ (D0 $ True))) 0 *ArbPrecDecT> vec (D0$ D1$ D0 Sz) 0 No instance for (Card (D0 (D1 (D0 Sz)))) arising from use of `vec' at <interactive>:1 In the definition of `it': vec (D0 $ (D1 $ (D0 Sz))) 0
9 Computations with decimal typesThe previous sections gave many examples of functions such as
class DigitsInReverse' df w dr | df w -> dr instance DigitsInReverse' Sz acc acc instance (Digits (d drest), DigitsInReverse' drest (d acc) dr) => DigitsInReverse' (d drest) acc dr
class DigitsInReverse df dr | df -> dr, dr -> df instance (DigitsInReverse' df Sz dr, DigitsInReverse' dr Sz df) => DigitsInReverse df dr
digits_rev:: (Digits ds, Digits dsr, DigitsInReverse ds dsr) => ds -> dsr digits_rev = undefined
It is again a compile-time function specified entirely by its type. Its body is therefore undefined. We can now run a few examples:
*ArbArithmT> :t digits_rev (D1$D2$D3 Sz) D3 (D2 (D1 Sz)) *ArbArithmT> :t (\v -> digits_rev v `asTypeOf` (D1$D2$D3 Sz)) D3 (D2 (D1 Sz)) -> D1 (D2 (D3 Sz))
class NoLeadingZeros d d0 | d -> d0 instance NoLeadingZeros Sz Sz instance (NoLeadingZeros d d') => NoLeadingZeros (D0 d) d' instance NoLeadingZeros (D1 d) (D1 d) ... instance NoLeadingZeros (D9 d) (D9 d)
We are now ready to build the addition machinery. We draw our inspiration from the computer architecture: the adder of an arithmetical-logical unit (ALU) of the CPU is constructed by chaining of so-called full-adders. A full-adder takes two summands and the carry-in and yields the result of the summation and the carry-out. In our case, the summands and the result are decimal rather than binary. Carry is still binary.
class FullAdder d1 d2 cin dr cout | d1 d2 cin -> cout, d1 d2 cin -> dr, d1 dr cin -> cout, d1 dr cin -> d2 where _unused:: (d1 xd1) -> (d2 xd2) -> cin -> (dr xdr) _unused = undefined
data Carry0 data Carry1 instance FullAdder D0 D0 Carry0 D0 Carry0 instance FullAdder D0 D0 Carry1 D1 Carry0 instance FullAdder D0 D1 Carry0 D1 Carry0 ... instance FullAdder D9 D8 Carry1 D8 Carry1 instance FullAdder D9 D9 Carry0 D8 Carry1 instance FullAdder D9 D9 Carry1 D9 Carry1
make_full_adder = mapM_ putStrLn [unwords $ doit d1 d2 cin | d1<-[0..9], d2<-[0..9], cin<-[0..1]] where doit d1 d2 cin = ["instance FullAdder", tod d1, tod d2, toc cin, tod d12, toc cout] where (d12,cout) = let sum = d1 + d2 + cin in if sum >= 10 then (sum-10,1) else (sum,0) tod n | (n >= 0 && 9 >= n) = "D" ++ (show n) toc 0 = "Carry0"; toc 1 = "Carry1"
That function is ready for Template Haskell. Currently we used a low-tech approach of cutting and pasting from an Emacs buffer with GHCi into the Emacs buffer with the code.We use
class DigitsSum ds1 ds2 cin dsr | ds1 ds2 cin -> dsr instance DigitsSum Sz Sz Carry0 Sz instance DigitsSum Sz Sz Carry1 (D1 Sz) instance (DigitsSum (D0 Sz) (d2 d2rest) cin (d12 d12rest)) => DigitsSum Sz (d2 d2rest) cin (d12 d12rest) instance (DigitsSum (d1 d1rest) (D0 Sz) cin (d12 d12rest)) => DigitsSum (d1 d1rest) Sz cin (d12 d12rest) instance (FullAdder d1 d2 cin d12 cout, DigitsSum d1rest d2rest cout d12rest) => DigitsSum (d1 d1rest) (d2 d2rest) cin (d12 d12rest)
class DigitsDif ds1 ds2 cin dsr | ds1 dsr cin -> ds2 instance DigitsDif Sz ds Carry0 ds instance (DigitsDif (D0 Sz) (d2 d2rest) Carry1 (d12 d12rest)) => DigitsDif Sz (d2 d2rest) Carry1 (d12 d12rest) instance (FullAdder d1 d2 cin d12 cout, DigitsDif d1rest d2rest cout d12rest) => DigitsDif (d1 d1rest) (d2 d2rest) cin (d12 d12rest)
class (Card c1, Card c2, Card c12) => CardSum c1 c2 c12 | c1 c2 -> c12, c1 c12 -> c2 instance (Card c1, Card c2, Card c12, DigitsInReverse c1 c1r, DigitsInReverse c2 c2r, DigitsSum c1r c2r Carry0 c12r, DigitsDif c1r c2r' Carry0 c12r, DigitsInReverse c2r' c2', NoLeadingZeros c2' c2, DigitsInReverse c12r c12) => CardSum c1 c2 c12
card_sum:: CardSum c1 c2 c12 => c1 -> c2 -> c12 card_sum = undefined
*ArbArithmT> :t card_sum (D1 Sz) (D9$D9 Sz) D1 (D0 (D0 Sz)) *ArbArithmT> :t \v -> card_sum (D1 Sz) v `asTypeOf` (D1$D0$D0 Sz) D9 (D9 Sz) -> D1 (D0 (D0 Sz)) *ArbArithmT> :t \v -> card_sum (D9$D9 Sz) v `asTypeOf` (D1$D0$D0 Sz) D1 Sz -> D1 (D0 (D0 Sz))
vappend va vb = listVec (card_sum (vlength_t va) (vlength_t vb)) $ (velems va) ++ (velems vb)
*ArbArithmT> :t vappend vappend :: (CardSum size size1 c12) => Vec size a -> Vec size1 a -> Vec c12 a
*ArbArithmT> :t vappend (vec (D2$D5 Sz) 0) (vec (D9$D7$D9 Sz) 0) (Num a) => Vec (D1 (D0 (D0 (D4 Sz)))) a
vhead:: CardSum (D1 Sz) size1 size => Vec size a -> Vec (D1 Sz) a vhead va = listVec (D1 Sz) $ [head (velems va)] vtail:: CardSum (D1 Sz) size1 size => Vec size a -> Vec size1 a vtail va = result where result = listVec (vlength_t result) $ tail (velems va)
We can now run a few examples. We note that the compiler could correctly infer the type of the result, which includes the size of the vector after appending or truncating it.
*ArbArithmT> let v = vappend (vec (D9 Sz) 0) (vec (D1 Sz) 1) *ArbArithmT> :t v Vec (D1 (D0 Sz)) Integer *ArbArithmT> v Vec (array (0,9) [(0,0),(1,0),...,(8,0),(9,1)]) *ArbArithmT> :type vhead v Vec (D1 Sz) Integer *ArbArithmT> :type vtail v Vec (D9 Sz) Integer *ArbArithmT> vtail v Vec (array (0,8) [(0,0),(1,0),...,(7,0),(8,1)]) *ArbArithmT> :type (vappend (vhead v) (vtail v)) Vec (D1 (D0 Sz)) Integer
*ArbArithmT> vtail (vec Sz 0) <interactive>:1:0: No instances for (DigitsInReverse' c2' Sz c2r', DigitsInReverse' c2r' Sz c2', DigitsDif (D1 Sz) c2r' Carry0 Sz, DigitsSum (D1 Sz) c2r Carry0 Sz, DigitsInReverse' c2r Sz size1, DigitsInReverse' size1 Sz c2r) arising from use of `vtail' at <interactive>:1:0-4
testc1 = let va = vec (D1$D2 Sz) 0 vb = vec (D5 Sz) 1 vc = vec (D8 Sz) 2 in vzipWith (+) va (vappend vb (vtail vc)) *ArbArithmT> testc1 Vec (array (0,11) [(0,1),...,(4,1),(5,2),(6,2),...,(11,2)])
Couldn't match `D9 Sz' against `D8 Sz' Expected type: D9 Sz Inferred type: D8 Sz When using functional dependencies to combine DigitsSum (D1 Sz) c2r Carry0 (D9 Sz), arising from use of `vtail' at ArbArithmT.hs:420:34-38 DigitsSum (D1 Sz) c2r Carry0 (D8 Sz), arising from use of `vtail' at ArbArithmT.hs:411:34-38
10 Statically-sized vectors in a dynamic context
In the present version of the paper, we demonstrate the simplest method of handling number-parameterized vectors in the dynamic context. The method involves run-time checks. The successful result of a run-time check is marked with the appropriate static type. Further computations can therefore rely on the result of the check (e.g., that the vector in question definitely has a particular size) and avoid the need to do that test over and over again. The net advantage is the reduction in the number of run-time checks. The complete elimination of the run-time checks is quite difficult (in general, may not even be possible) and ultimately requires a dependent type system.
For our presentation we use an example of dynamically-sized vectors: reversing a vector by the familiar accumulator-passing algorithm. Each iteration splits the source vector into the head and the tail, and prepends the head to the accumulator. The sizes of the vectors change in the course of the computation, to be precise, on each iteration. We treat vectors as if they were lists. Most of the vector processing code does not have such a degree of variation in vector sizes. The code is quite simple:
vreverse v = listVec (vlength_t v) $ reverse $ velems v
whose inferred type is obviously
*ArbArithmT> :t vreverse vreverse :: (Card size) => Vec size a -> Vec size a
testv = let v = vappend (vec (D3 Sz) 1) (vec (D1 Sz) 4) vr = vreverse v in vhead (vtail (vtail vr))
11 Related work
This paper was inspired by Matthias Blume's messages on the newsgroup comp.lang.functional in February 2002. Many ideas of this paper were first developed during the USENET discussion, and posted in a series of three messages at that time. In more detail Matthias Blume described his method in Blume01, although that paper uses binary rather than decimal types of array sizes for clarity. The approaches by Matthias Blume and ours both rely on phantom types to encode additional information about a value (e.g., the size of an array) in a manner suitable for a typechecker. The paper exhibits the most pervasive and thorough use of phantom types: to represent the size of arrays and the constness of imported C values, to encode C structure tag names and C function prototypes.
However, paper was written in the context of SML, whereas we use Haskell. The language has greatly influenced the method of specifying and enforcing complex static constraints, e.g., that digit sequences representing non-negative numbers must not have leading zeros. The SML approach in Blume01 relies on the sophisticated module system of SML to restrict the availability of value constructors so that users cannot build values of outlawed types. Haskell typeclasses on the other hand can directly express the constraint, as we saw in section Arbitrary-precision decimal types. Furthermore, Haskell typeclasses let us specify arithmetic equality and inequality constraints — which, as admitted in Blume01, seems quite unlikely to be possible in SML.Arrays of a statically known size — whose size is a part of their type — are a fairly popular feature in programming languages. Such arrays are present in Fortran, Pascal, C [2]. Pascal has the most complete realization of statically sized arrays. A Pascal compiler can therefore typecheck array functions like our
A different approach to array processing is a so-called shape-invariant programming, which is a key feature of array-oriented languages such as APL or SaC. These languages let a programmer define operations that can be applied to arrays of arbitrary shape/dimensionality. The code becomes shorter and free from explicit iterations, and thus more reusable, easier to read and to write. The exact shape of an array has to be known, eventually. Determining it at run-time is greatly inefficient. Therefore, high-performance array-oriented languages employ shape inference Scholz01, which tries to statically infer the dimensionalities or even exact sizes of all arrays in a program. Shape inference is, in general, undecidable, since arrays may be dynamically allocated. Therefore, one can either restrict the class of acceptable shape-invariant programs to a decidable subset, resort to a dependent-type language like Cayenne, or use "soft typing". The latter approach is described in Scholz01, which introduces a non-unique type system based on a hierarchy of array types: from fully specialized ones with the statically known sizes and dimensionality, to a type of an array with the known dimensionality but not size, to a fully generic array type whose shape can only be determined at run-time. The system remains decidable because at any time the typechecker can throw up hands and give to a value a fully generic array type. Shape inference of SaC is specific to that language, whose type system is otherwise deliberately constrained: SaC lacks parametric polymorphism and higher-order functions. Using shape inference for compilation of shape-invariant array operations into a highly efficient code is presented in Kreye. Their compiler tries to generate as precise shape-specific code as possible. When the shape inference fails to give the exact sizes or dimensionalities, the compiler emits code for a dynamic shape dispatch and generic loops.There is however a great difference in goals and implementation between the shape inference of SaC and our approach. The former aims at accepting more programs than can statically be inferred shape-correct. We strive to express assertions about the array sizes and enforcing the programming style that assures them. We have shown the definitions of functions such as
The approach of the present paper comes close to emulating a dependent type system, of which Cayenne is the epitome. We were particularly influenced by a practical dependent type system of Hongwei Xi Xi98 XiThesis, which is a conservative extension of SML. In Xi98, Hongwei Xi et al. demonstrated an application of their system to the elimination of array bound checking and list tag checking. The related work section of that paper lists a number of other dependent and pseudo-dependent type systems. Using the type system to avoid unnecessary run-time checks is a goal of the present paper too.C++ templates provide parametric polymorphism and indexing of types by true integers. A C++ programmer can therefore define functions like
array code. The type system of C++ however presents innumerable hurdles to the functional style. For example, the result type of a function is not used for the overloading resolution, which significantly restricts the power of the type inference. Templates were introduced in C++ ad hoc, and therefore, are not well integrated with its type system. Violations of static constraints expressed via templates result in error messages so voluminous as to become incomprehensible.McBride gives an extensive survey of the emulation of dependent type systems in Haskell. He also describes number-parameterized arrays that are similar to the ones discussed in section Encoding the number parameter in data constructors. The paper by Fridlender and Indrika shows another example of emulating dependent types within the Hindley-Milner type system: namely, emulating variable-arity functions such as generic
12 Conclusions
Throughout this paper we have demonstrated several realizations of number-parameterized types in Haskell, using arrays parameterized by their size as an example. We have concentrated on techniques that rely on phantom types to encode the size information in the type of the array value. We have built a family of infinite types so that different values of the vector size can have their own distinct type. That type is a decimal encoding of the corresponding integer (rather than the more common unary, Peano-like encoding). The examples throughout the paper illustrate that the decimal notation for the number-parameterized vectors makes our approach practical.We have used the phantom size types to express non-trivial constraints on the sizes of the argument and the result arrays in the type of functions. The constraints include the size equality, e.g., the type of a function of two arguments may indicate that the arguments must be vectors of the same size. More importantly, we can specify arithmetical constraints: e.g., that the size of the vector after concatenation is the sum of the source vector sizes. Furthermore, we can write inequality constraints by means of an implicit existential quantification, e.g., the function
13 References
Augustsson, L. Cayenne — a language with dependent types. Proc. ACM SIGPLAN International Conference on Functional Programming, pp. 239—250, 1998.[1]
Matthias Blume: No-Longer-Foreign: Teaching an ML compiler to speak C "natively." In BABEL'01: First workshop on multi-language infrastructure and interoperability, September 2001, Firenze, Italy. [2]
The complete source code for the article. August 9, 2005. [3]
Daniel Fridlender and Mia Indrika: Do we Need Dependent Types? BRICS Report Series RS-01-10, March 2001. [4]
Oleg Kiselyov: Polyvariadic composition. October 31, 2003. [5]
Oleg Kiselyov: Polymorphic stanamically balanced AVL trees. April 26, 2003. [6]
Dietmar Kreye: A Compilation Scheme for a Hierarchy of Array Types. Proc. 3th International Workshop on Implementation of Functional Languages (IFL'01).
Conor McBride: Faking it — simulating dependent types in Haskell. Journal of Functional Programming, 2002, v.12, pp. 375-392 [7] (Gzipped PS)
Chris Okasaki: From fast exponentiation to square matrices: An adventure in types. Proc. fourth ACM SIGPLAN International Conference on Functional Programming (ICFP '99), Paris, France, September 27-29, pp. 28 - 35, 1999 [8]
Sven-Bodo Scholz: A Type System for Inferring Array Shapes. Proc. 3th International Workshop on Implementation of Functional Languages (IFL'01). [9]
Single-Assignment C homepage. [10]
Dominic Steinitz: Re: Polymorphic Recursion / Rank-2 Confusion. Message posted on the Haskell mailing list on Sep 21 2003. [11]
Todd L. Veldhuizen: Arrays in Blitz++. Proc. 2nd International Scientific Computing in Object-Oriented Parallel Environments (ISCOPE'98). Santa Fe, New Mexico, 1998. [12]
Hongwei Xi, Frank Pfenning: Eliminating Array Bound Checking Through Dependent Types. Proc. ACM SIGPLAN Conference on Programming Language Design and Implementation, pp. 249—257, 1998. [13]
Hongwei Xi: Dependent Types in Practical Programming. Ph.D thesis, Carnegie Mellon University, September 1998. [14]
Cite error:
<ref> tags exist, but no
<references/> tag was found


text:
- Inside Athletics
- Tickets
- Fan Zone
- Media Zone
- Social
- Shop
- Donate Now
MOUNT PLEASANT, Mich. (Dec. 7, 2004) - The East Tennessee State men's basketball team could not hold a first half lead and watched a second-half rally fall short as the Central Michigan Chippewas remained unbeaten at home with an 88-77 win Tuesday night in nonconference action at Rose Arena.
The win upped CMU's record to 4-2 for the season, 4-0 in the friendly confines of Rose Arena. The visiting Buccaneers fall to 2-5.
ETSU led by as many as eight in the first half, but a Central Michigan rally allowed the Chippewas to grab a 36-34 halftime lead. CMU then built a couple of big second half leads only to have ETSU battle back, however, the third time was the charm as CMU pulled away to its third big second-half advantage late in the game for the win.
CMU led by 10 at 51-41 only to have ETSU battle back to five at 51-46. CMU then went ahead 59-49 at 13:05 before the Buccaneers fought back to tie it at 62-62 with 9:27 to go. East Tennessee State never could take the lead in the final half although it did trail 76-73 with 3:52 to play.
In what is becoming a familiary story, the Bucs could not keep their rally sustained late, as the Chippewas went on a 12-4 run to ice the game.
Junior Kevin Nelson led the Chippewas with a game-high 21 points while freshman Giordan Watson chipped in with 19. Senior Steve Harris scored a career-high 13 points followed by senior Tony Bowne and sophomore Eddie Spencer with a dozen apiece.
The 13 points for Spencer were a career high as were his game-high 10 rebounds.
ETSU had three players in double figures, with James Anthony (Tampa, Fla.) coming off the bench to lead the way with a season-high 19. Tim Smith (Newport News, Va.) added 15 and Ben Rhoda (Dayton, Ohio) netted 12.
The difference in the game was CMU's deadly three-point shooting. The Chippewas meshed 13-of-24 threes for 54.2 percent and finished the game with 32-of-67 from the field for 47.8 percent.
The Buccaneers hit 24-of-52 from the field for 46.2 percent.
CMU held a 40-30 edge in rebounding, 17 of the caroms coming on the offensive end.
Next up for the Chippewas is a road game at Minnesota on Saturday while ETSU hosts Tennessee Tech on Friday.

subset: commoncrawl


text:
Dec. 2, 2008
By MIT News Office
CAMBRIDGE, Mass. – Senior fencer Matt Gethers was one of two MIT students selected for the 2009 Rhodes Scholarships to study next year at Oxford University in Britain. He is the second fencer and 13th student-athlete to be tabbed for this honor. Leslie Dirks, the fencing team captain, won this prestigious award in 1958.
Gethers is a two-time Northeast Fencing Conference (NFC) Epee All-Star and has competed at the NCAA Northeast Regional Championship the past two years. The Engineers have captured a pair of New England Championships during his career while he was a runner-up at The Big One Invitational last season.
A biological engineering major and political science concentration, Gethers has been involved in multiple research opportunities during his time at MIT.
Soon after arriving at the Institute, Gethers joined the laboratory of Drew Endy, now an assistant professor of bioengineering at Stanford. While in Endy's lab, he conducted research aimed at enabling engineers to encode memory systems genetically to assist in the study and treatment of diseases.
This past summer, Gethers sought a way to continue research after his mentor left for California, so he approached John Essigmann, the William R. (1956) and Betsy P. Leitch Professor in Residence of Chemistry in the Department of Chemistry and a professor of toxicology in the Department of Biological Engineering, to lead an IROP in Thailand.
"Matt was so enthusiastic to gain international research experience that he raised enough money to bring not only himself and both Drs. Essigmann [Prof. Essigmann and his research scientist wife], but also six other MIT students to conduct research at the Chulabhorn Research Institute in Bangkok," said Linn Hobbs, chair of the Presidential Committee on Distinguished Fellowships and professor of Materials Science & Engineering and Nuclear Science & Engineering. "It is a role that becomes Matt, because he is not only a brilliant young scientist, but also an articulate young man so clearly dedicated to public service."
Gethers has engaged in a variety of public service work throughout his undergraduate career. After successful training by the MIT Emergency Medical Service, Gethers became a third rider for the MIT ambulance, logging more than 50 hours per semester. For four years, he has weekly visited local Cambridge schools to tutor students in a variety of subjects. Simultaneously, he has served as the vice president for the MIT chapter of the National Society of Collegiate Scholars, a group that honors academic success while encouraging students to participate in community service.
Gethers will now travel to Oxford University to read for a degree in the Philosophy, Politics, and Economics Programme.
Kimberly Benard, program advisor for Distinguished Fellowships said, "It seems to us an unexpected but inspired choice for an articulate young scientist who values engagement with his communities." After earning a degree from Oxford, Matt plans to return to the United States to pursue a PhD in biological engineering.


text:
Grae's Rating:
A Flashy Flashdance Flash Mob
Out of all the artistic professions, I have the most trouble understanding why anyone would want to dance. Movies have taught me that no one sees the importance of popping and locking, and as a dancer, you're always being threatened with having your stuff taken away--whether it's the building you dance in, your home, a loved one, or your fancy education. At least 35% of a dancer's time goes to fighting The Man instead of practicing pliés. Step Up Revolution is an exercise in extremes--when the characters aren't busy crying over the same ol', same ol', they're dancing in some of the most unique, exciting setups ever produced that will make your eyes pop out of your head.
It's all up to the opening scene to set the tone for these films. And when SUR begins, the Miami sun is beating down on a street full of perfectly shiny cars filled with beautiful people. One of them (Ryan Guzman) says to his friend (Misha Gabriel), "You know we're going to end up in jail for this." For what, hot shirtless guy? All of a sudden, the code honk is given, and the beautiful people spill out of their cars and into the streets, blocking traffic with their parkour and robo-stilts, while the old people inside their Town Cars look confused. They've been flash-mobbed, and everyone is in on it. The girl carrying a suitcase? Her DJ deck is in there. The ominous-looking fellow carrying clear Plexiglas? Also part of the master plan. And the man pushing a fruit cart is recording it, because these are Dancers with a Plan. Their crew needs to get 10 million hits on Youtube in order to win $100,000. So they may be gyrating on hydraulic cars, y'all, but it's for a purpose.
The plan is to run around Miami filming their intricate flash mobs to keep getting hits, once they've clocked out on their bummer jobs at the resort hotel where they all work. If they get to wear bikinis to staff meetings it can't be that bad, right? Wrong. Peter Gallagher, less like his sad-bastard character in Burlesque and more like John Lithgow in Footloose with a dash of mustache-twirling, rules them all with an iron fist and wants to wipe out their 'hood to build more fancy resorts. This is when the movie, already packed with phenomenal production value, becomes really fun. They begin performing Protest Art. Instead of just dancing on tables in restaurants or infiltrating museum exhibits, they take on corporations--which means they wear suits and smart hats and employ briefcases to illustrate how uptight, sterile, and uncaring corporations can be. All while it rains dollar bills. It's enough to make any of the 99% stand up and salute (and try to grab the floating dollar bills).
The DVD release of Coyote Ugly got it right with one the special features just the dancing scenes all edited together. When you have to choose between Piper Perabo playing the acoustic guitar and Tyra Banks serving whiskey sours while grinding on Bridget Moynahan, there's no contest. SUR will benefit from the same kind of treatment, because the story is pitifully predictable and flat, whereas the production value in the dancing scenes is unparalleled. Each one keeps getting better, all the way to the finish, which includes shipping crates, policemen, harnesses, the (fake) Mayor of Miami's amazing dance moves, and a great cameo for fans of the series. It was so impressive it almost didn't matter that they blew the ending in the last three lines of the film. I still dusted off my dope kicks and bought a plane ticket to Miami anyway.
Movies.com Critic
Read full review |
Comments ()
43 out of 100 Metascore®
Read other critic reviews
Nothing mediocre about this medium.
Can't say "expendable" without "duh"
Valley of the Dolls with Firepower?
Just shy of a landslide.
All Grae Drake's Movie Reviews
Movies.com, the ultimate source for everything movies, is your destination for new movie trailers, reviews, photos, times, tickets + more! Stay in the know with the latest movie news and cast interviews at Movies.com.
Copyright © 2019 FANDANGO MOVIES.


text:
Paint Color Portfolio: Deep Purple Bedrooms
Purple is not an easy color to pull off — a little too much and it begins to look like a five year old designed you space, a lot too much and Prince starts to play in your head. When you get it just right, however, just the right dose of just the right shade, a purple hue can lend drama, sophistication and depth to a room.
Here are a few standout examples, and a few paint colors that will help you strike the perfect balance.
- Marks' Delightful & Delicious West Village Home, from Apartment Therapy
- Irina Graewe's Bedroom, from Design Sponge
- Lara and Craig Wilson's Bedroom, from New England Home.
- Design by Candice Olson, from HGTV
- Design by Iain Halliday, from Elle Decor
- BEHR Premium Plus Plum S-H-670
- Benjamin Moore Purple Rain 1386
- BEHR Berry Syrup S-G-650
- Mythic Paint Iris in the Wind
- Mythic Paint Purple Province
- Sherman Williams Concord Grape 6559
- Pure Home ICS 5-8
- Pure Home ICS 6-8
- Farrow and Ball Pelt No. 254
- Ralph Lauren Academy Purple
(Images: as linked above)
Apartment Therapy supports our readers with carefully chosen product recommendations to improve life at home. You support us through our independently chosen links, many of which earn us a commission.


text:
About Go Asia Travel
Go Asia Travel is one of the best tour operator in Vietnam offering private tours and group joining tours in Vietnam, Cambodia, Myanmar and Laos. Our tours includes sellective day trip, hotel, cruises, transfers and hospitable guides to the best sightseeing spots.
"We care about your trip" in a professional and friendly manner that is recommended by all our valuable guests. We provide the best values for your budget which is satisfaction guaranteed. Always delivering our promises and acting responsibly with the natural environment and local communities.


text:
Owner and Executive Chef of La Thai
Recipes for the season of plenty
Chef and co-owner Anton Schulte serves up crawfish and mascarpone ravioli with wilted leeks and artichoke, oven-dried tomato and brandy browned butter.
... and down the hatch
The reward of the springtime's riches
Chef Sue Zemanick of Gautreau's serves up sweetbreads for spring.
Rich with flavor and history, Bruning's crabmeat-stuffed flounder lives on and lives well
The mild days of spring are the perfect time to do some grilling.
Executive Chef of Restaurant Cotton, Monroe
Try it in different ways.


text:
The eBay Jeepster- Feature RigPosted in Features on February 1, 2013
Buying and selling parts is a huge part of the off-road hobby. Rarely does one have the time or funds to go all-in on a $100K do-it-all wheeler right out of the gate. Over the years eBay (www.ebay.com) has made a name for itself as one of the best places to purchase new and used parts. From 2½-ton Rockwell axles to Holley carburetors, you can find just about any piece, part, or complete vehicle you are looking for on eBay. eBay is very aware of its automotive commerce value and decided to form a friendly competition between four of the top automotive magazines: Four Wheeler, Hot Rod, European Car, and Low Rider.
The idea was for each magazine to purchase a project vehicle that was found on eBay, and over the course of eight weeks, build it using parts sourced exclusively from eBay. Once the vehicles were completed, they would be put up for auction (on eBay of course) with all of the proceeds going to the shop owner's charity of choice. Over the course of the build eBay documented each rigs progression for the "Built from eBay" competition page (www.builtfromebay.com), which allowed viewers to vote on their favorite rig.
For the Four Wheeler build, we started with a '70 Jeepster Commando and hauled the delinquent Jeep to the expert fabricators at Off Road Evolution in Fullerton, California. While we understand that the Jeepster is cherished by many classic Jeep enthusiasts, to us it simply provided a smog-exempt vessel that could be built uninhibited by modern electronic nannies and complex emissions devices. The goal wasn't to rehash the rig with period-correct styling, but rather to create a great example of a no-holds-barred 4x4 that represents Four Wheeler and our industry well. Over the course of eight weeks, Mel Wade and his band of metal magicians cut, bolted, and morphed the classic Jeepster into an extremely well-built and modern 4x4.
Though eight weeks was the official timetable, the crew actually hammered out the build in nine long working days! In the end their hard work paid off as the Jeepster's form matched its function. The true icing on the cake was that the Jeepster beat out the competition by raising the most money on the eBay auction. Raking in over $37,000 for the California Trail Users Coalition (www.ctuc.info), it was a great win for all parties involved. The California Trail Users Coalition is dedicated to keeping California Trails open and provides a forum where off-road enthusiasts can learn and participate in OHV land-use issues affecting California.
When asked why Off Road Evolution owner Mel Wade picked the California Trail Users Coalition he replied "For guys like me, off-roading isn't a hobby; it's a lifestyle. My family spends our weekends and holidays doing this, but more and more trails are closing. Organizations like the California Trail Users Coalition are working to save the trails, making it possible to do what I love." Ultimately, we enjoyed being part of such a great experience and can't say enough about the guys at Off Road Evolution and the great companies that participated with eBay to make the Jeepster become a reality.
At A Glance
Owner: One Lucky eBay Bidder
Stomping grounds: Southern California
Vehicle: 1970 Jeepster Commando
Build time: 8 weeks
Engine: GM Performance Ram Jet 350ci V-8, Hedman Hedders
Transmission: GM TH350, TCI 1,200 rpm stall converter, Flex-a-lite cooler
Transfer case(s): Advance Adapters Atlas II
Low range ratio(s): 3.0:1
Front axle/differential: Dynatrac ProRock 60, disc brakes, Detroit Locker, Dynalock hubs, Sierra Gear 5.13 gears and 1350 yoke
Rear axle/differential: Full-float Dynatrac Pro Series 60, disc brakes, Detroit Locker, Sierra Gear 5.13 gears and 1350 yoke
Front suspension: EVO MFG Double ThrowDown long-arm, King coilovers and triple-bypass shocks
Rear suspension: EVO MFG DD long-arm, EVO-Lever rear with King coilovers and bypass shocks
Steering: EVO MFG custom steering links, PSC hydraulic-assist
Tires: 40x13.50R17 Nitto Mud Grappler
Wheels: 17x9 ATX Slab beadlock
Armor: EVO MFG front bumper and stinger, custom side panels
Cool stuff: '12 Jeep Wrangler Unlimited frame, EVO MFG high-clearance hood and fenders, Optima YellowTop battery, Warn 9.5cti winch, Truck-Lite LED headlights, Al's Liner spray liner, Adart custom graphics, aluminum radiator, Trans-Dapt motor mounts, 20-gal aluminum fuel cell, custom 2-in DOM rollcage, Art Carr shifter, J.E. Reel drivelines, MasterCraft Safety seats and harness


text:
80's Popstar Wig
Shipping Info
FAST UK Mainland Delivery for only £5.00 per order. Delivery/Ready for collection within 24-72 hours. Orders normally dispatched the same day.
If you are unhappy with your purchase, simply return it within 7 days for a full refund.
Price Promise
Find the same item cheaper somewhere else? No problem, we'll happily match their price.
Opening times
Monday 9-6pm Tuesday 9-6pm Wednesday 9-6pm Thursday 9-6.30pm Friday 9-6pm Saturday 9-5.30pm Sunday 9-4.30, Times may be changed for training,holidays & busy periods, please call 01912605900 if you have any queries.
Our 80's Popstar Wig will trasnforn you from an everyday person to a superstar!
Manufacturer: Smiffys


text:
Reviewed By Christopher R (smyrna, GA) Reviewed for a 2008 Volvo XC90 —1/9/2014 4:55 AM
I first installed a less expensive system on my car in order to save $$... big mistake. Cheaper systems are much louder - this one doesn't make a noise at all, and very easy to install! Great purchase!


text:
Follow RFF News on your cell phone. Text follow rff to 40404 you will receive txt messages with RFF News
0 Members and 1 Guest are viewing this topic.
@Squall: Do you mean Michael Skupin, who burned his hands on Australian Outback?
Hey surviviors fan!I'm from Poland and I watched Surviviors Season in Internet.I hope, that Candice or Courtney will come back from woman and Sash or Ryan O. If not in 23th... maybey in 24th?
Sash has got almost the same strategy like Ryan O., but Sash was in final... I'd like to see NaOnka She was so funny, but I guess, that she will be first voted out xD
I think that Coach's tribe will be better in competitions, but Ozzy is good enaugh to fight with better team
Page created in 0.194 seconds with 33 queries.


text:
The Lewis Centre expansion and renovation project is coming along under budget and very close to schedule, according to project manager Blair Pettis.
"We're in good shape on the budget," Pettis told Courtenay council during a report last week. "We're under budget at this point — we're looking at adding a bit of scope to the project to address some of the other issues (with the Lewis Centre)."
Pettis added the project is about a week behind schedule thanks to rainy weather in December.
"The roof structure and roof trusses in this project for the addition are all exposed … so the trusses were fairly sensitive to the rain," he explained.
"So we had a bit of a struggle in December finding three successive days in a row where we could get in with the trusses, lay them on the walls, get the roof decking down and then waterproof the roof decking, because the plywood on the underside is going to be visible so we don't want any water stains on that."
However, he added he expects crews can get the project back on schedule by making up some time during drywall installation in the 11,000-square-foot addition.
The addition is expected to be complete in late May. Renovation work on the original Lewis Centre building will then take off, with September or October the expected completion date for the entire project.
During a site visit, construction manager Wayne Liboiron pointed out stairs going down to the original Lewis Centre building from the addition, noting a 1.3-metre height difference between the elevations of two portions of the building.
Because the addition foundation has been raised 1.3 metres higher than the original building, it meets the City's new requirement for floodplain elevations in the area, said Liboiron.
The addition will feature a new 4,000-square-foot wellness centre, a new multi-purpose room with a sprung floor — making it ideal for fitness activities, new larger and fully accessible change rooms and a universal washroom large enough for scooters.
Renovation features will include: a new multi-purpose room with a kitchen area and storage; accessibility improvements; a seating area; a squash court upgrade and new squash court mezzanine as well as energy-efficient upgrades and improved heating and ventilation. The existing north entrance and hallway are being widened to reduce congestion.
The project is expected to cost $5.4 million, with $1 million coming from gas tax revenue through the federal Community Works Fund, $400,000 from the provincial Community Recreation Program, $200,000 from a City reserve fund and a maximum of $3.8 million to be borrowed by the City.
Courtenay staff are also pursuing other grants and funding opportunities in an effort to keep borrowing down.
For more information, visit www.courtenay.ca.


text:
Favorite Flea Market Resources
No other shopping experience can compare to that of slinging your market bag over your shoulder and setting out, determined to unearth the next great treasure at the flea market. Though some of these thrifting adventures have been hit-or-miss, the thrill of the chase has always kept us pulling off the side of the road whenever we spot those tables and tents, and planning ahead to visit local markets on our vacations. Because some of the best pieces in our homes were discovered by picking through tables of old stuff and haggling for the lowest possible price, we thought we'd give a shout out to our favorite flea market resources from 2011.
• 1 The Brooklyn Flea Moves Outdoors!
• 2 10 US Flea Markets Worth a Trip
• 3 Destination Flea Markets: Five Must-See Markets
• 4 Best Carry-all Bags: For Flea & Farmer's Markets
• 5 Help! How to Get My Paris Flea Market Finds Home?
• 6 How to Shop for the Bohemian Chic Look
• 7 Farmers Market Guide 2011: Coast to Coast
• 8 In Search of the Perfect Market Bag: 12 Sources
• 9 Ultimate Guide to Flea Markets: Where To Go, How To Shop
• 10 The Wellfleet Flea Market
(Images: See linked posts for full image credits)


text:
That's it. The Trek 1200 is getting shelved until I can buy a new wheel. It's done. Not using it anymore. I'm furious. I'm talking about the "drank my last beer" kind of anger.
Last night, I put the finishing touches on the bike to prepare it for a long commute this morning. I took the headlight off and mounted it on my helmet. I put my LED headlight on the handlebars so I have something blinky in front. I got both my rear LED lights charged up. I aired the tires up to 100 PSI. I re-lubed the chain. I packed the extra stuff I'd want for a long haul. I got my gear put in the panniers, and the panniers strapped down to the rack. Life is good, right?
About 20 minutes after I'm done working on it, I'm all the way on the other side of the house. For no reason whatsoever, the tire pops. It sounded like a gun-shot, not like a PFFFFFFFFfffffffffffffffsssssshhhhh like usual. I knew it was my tire, though.
I go out there, unencumber the bike of all its stuff, invert it, and take the wheel off. Upon examination, I have a hole in the inner-tube facing the rim. The hole looks like someone shot a BB through my tire. It's a hole at least 1/8" around and with jagged edges. I replace it with a patched tube, air it up to 100 again, and put it back on my bike. This was a little after midnight.
I went to bed. About 3 something, my wife interrupts my slumber to tell me that my tire popped again. Keep in mind that my bike is still upside-down in the front hallway. This morning, I grabbed my bike computer off of it, gave it a scowl, made a kicking motion at it, and went out the door with my mountain bike.
I'm probably just going to let it rot in the kitchen until after we move. I'm done dealing with it. I officially no longer like my Trek. It's going to take a long time for me to regain trust in my road bike.
The only good things about this morning are that I still carried my coffee press on my way to work and my mountain bike made it to the bus in about 12 or 13 minutes via my usual route, which isn't a lot slower than my Trek carries me, although it was a hammer-fest and my MTB has platforms. I had to work a lot harder to make good time on my Sorrento. I also had to revert to the sweaty backpack again.
I would have taken my hybrid but it hasn't been used but maybe once in the last six weeks. It needs a once-over and a shakedown run before it's ready for duty. I might work on tuning it up tonight.
I am NOT riding my mountain bike all the way to the new apartments. My wife won't let me, and I don't want to do it. She'll come downtown to pick me up.
Friday, June 15, 2007
That's it. The Trek 1200 is getting shelved until I can buy a new wheel. It's done. Not using it anymore. I'm furious. I'm talking about the "drank my last beer" kind of anger.
12 comments:
Hmm. I KNOW the feeling!
- June 15, 2007 7:48 AM
- Apertome said...
OUCH! That really sucks, man. I hope you get this resolved soon. Try to remember that it's just a bad wheel and the rest of the bike is fine. Your feelings are understandable, though.
Do you know how the wheel got messed up? Would it be covered under some kind of warranty?
- June 15, 2007 9:55 AM
- Chuong said...
Probably need to replace your rim tape. It covers up the spoke holes that like to puncture tubes. You can just use black electrical tape, or buy some cloth rim tape from the bike shop. Masking tape works too.
- June 15, 2007 10:18 AM
- Noah said...
I know it's the rim. It's bent from me running over a storm drain. I was boxed in by a motorist and couldn't avoid it. It was a bad, bad drain, I'm lucky I bunny-hopped enough to keep from doing an endo.
Chuong, the rims are double-walled. I've checked them time and time again though. The spoke nipples are recessed several mm away from the tube. The rim has no rough spots, the rim tape is intact, and the tire has nothing that would cause it.
I'm almost wondering if my floor pump's gauge isn't correct and I'm over-inflating the tires at this point.
- June 15, 2007 10:26 AM
- Fritz said...
How badly is the rim bent? Are you talking about just a little wobble or is there a dent in it?
- June 15, 2007 1:32 PM
- Noah said...
It's bad.
Click here if you don't believe me
- June 15, 2007 1:38 PM
- Fritz said...
I can't tell from the photo if your tire is damaged, but you might consider that. If you're getting gunshot blowouts then you're not getting a good set with the bead in the rim. I've had dented rims like you show and rode without problem, thought it's hard to tell in the photo.
You might consider getting wider tires and running lower pressure -- I think your 1200 probably has enough clearance for 28mm and maybe even 32mm.
- June 15, 2007 4:32 PM
- Ed W said...
I have to agree with Fritz on this one. There's a chance the impact that damaged the rim also broke part of the bead in the tire. It will go on just fine and hold air for awhile, but eventually the pressure forces the bead up over the rim edge and BANG it goes. One way to check would be to inflate it, then ride CAREFULLY while watching the tire. If it starts to develop a noticeable high spot, you've found the problem. Replace both the tire and the rim.
- June 15, 2007 8:32 PM
- Mark said...
I had some similar problems on my commuter bike and found that the rim tape was allowing the spokes to poke holes in my tubes. Replaced the rim tape and solved the problem.
Don't give up!
- June 15, 2007 10:10 PM
- Noah said...
Okay, let me clarify how this all went down. First off, This is a double-wall wheel. The spokes won't hit the inner-tube. I can't feel anything that could cause the failure.
A few days after I got my bike, I storm-drained it. I got an instant double pinch flat.
My bike shop looked at the wheel and told me I'd eventually want a replacement. They de-flanged the rim so that brake engagement was smooth. From here on out, I proceeded to ride 500 miles, while only dealing with a "thump" every wheel rotation. Those 500 miles produced no flats.
Last Monday, I suffered 3 flats in 2 miles on a group ride. These were of the hissing variety.
Tuesday after work on my way to the bus, I got another flat.
Tuesday night, The LBS looked at it. Their explanation was that the brake pad was eating a hole in the tire itself, then nicking the inner tube, causing a puncture. They showed me where there were holes in the sidewall, and the holes being made were right there where the flatspot is. That's about 180* from the valve stem.
They gave me a NEW TIRE and new tube, and adjusted the brakes (kind of hackish) so that they don't nick the tire. The tire's brand new. The bead is set. In fact, the first blowout happened after I aired it up, but prior to that, the bike shop was the last to touch it. All I did is inflate it to 100 PSI.
A Post-mortem on the second tire blowout shows the same failure in the same spot. But it's nowhere near the flatspot. It's happening exactly 6 spokes over from the valve stem. Both times. There's nothing poking in that area. The only thing I can think is perhaps the rim tape (which actually juts IN because of the double wall tires) has too much give and is allowing a blister to form. Maybe I just need new, sturdier rim tape.
Anyhow, I'm buying my new wheel tomorrow but I want the shop to figure this out tomorrow too, so I have a spare wheel just in case. 500 miles without a problem is hard to ignore. I don't mind the "thump thump thump" of a slightly out-of-round wheel.
I'll let them sort this out in the morning.
- June 15, 2007 10:53 PM
- martinoffroad said...
"I was boxed in by a motorist and couldn't avoid it."
Try not to allow this to happen by taking the right tire path line which allows for more room from the curb, it also makes the motorist's to move out and around you more which is more of a safety move allowing the car behind the first car to be alert on his movement that someone is on the right side that forced that move.
Replace your vinyl rim strip tape with cloth.
- June 18, 2007 7:55 AM
- Noah said...
Martin, this grate sticks out almost to the left tire rut in the road, and had I been behind a car, I would have had even less warning for the impending doom, and would have likely endoed, then run over by the car behind me. Now that I know it's there, I just ride the left half of the lane, and "F you" to anyone behind me that has a problem with it.
Also, my rim tape is cloth, but if you read a few newer posts, you'll see I determined the problem wasn't the rim at all. And I replaced my tweaked rim with a nice, fresh one :)
- June 18, 2007 8:01 AM
Privacy Policy
By leaving a link or e-mail address in my comments (including your blogger profile or website URL), you acknowledge that the published comment and associated links will be available to the public and that they will likely be clicked on.


text:
Cowboys Extra Points: Bring on the Noise
Defensive stars Jay Ratliff and DeMarcus Ware were named to the All-Pro Team earlier this week. The Associated Press names 12 players to the NFC team. This is Ratliff's first time to be named the honor and Ware's fourth time. Center Andre Gurode was named to the 2nd All-Pro Team.
Cowboys Defensive line coach Todd Grantham has accepted a job as the defensive coordinator for the University of Georgia. The Cowboys have already found their replacement, former assistant coach Paul Pasqualoni. Pasqualoni, who was on the Dallas coaching staff from 2005-2007, was recently let go by the Miami Dolphins and was readily available. Both coaches are expected to travel to Minnesota this weekend.
The Cowboys injured starting running back (knee) Marion Barber practiced Thursday and was expected to practice Friday as well. Coach Phillips was encouraged by Marion's progress and will be monitoring him close up until game time to decide whether he will be effective enough to play in Sunday's game.
Also, Pat Watkins who has been out for a month practiced fully this week and has a good chance to return to the field this week.
The Cowboys practiced in Cowboys Stadium on Thursday due to the weather conditions, and I have to say it was a great idea to blast crowd noise to prepare the players for Minnesota. They overcame the noise in New Orleans and Minnesota will be just as loud, if not worse. I think the Cowboys and fans alike have learned a lot about the effect of crowd noise level this season.
With all the trash talk going on lately, mostly from our opponents I'd like to through this at ya, from Gerald Sensabaugh in response to Favre saying he'd be shocked if Minnesota didn't win:
"We'd have to beat ourselves to lose. The way we're playing right now, I don't think we can be beat."
Personally I liked it better when our 'Boys were keeping their mouths shut until the job was done, but hey we've heard worse things coming from cocky Dallas players in the past… ha ha.
On another note: Is anyone else sick and tired of hearing about Romo facing his childhood hero?


text:
|2010-07-28, 10:27
|Link #581
Join Date: Feb 2006
Location: Location is all relative.
-Its interesting you bring that up, because now that I look back, nobody in Claymore seems to be evil to the core. Let's see a few examples of the worst of the major entities that are around.
Claymores: Ophelia is by far the most "evil" in nature because she went out of her way to manipulate awakenings, just so that she could kill them without it being an act of mercy (she wanted them to die as monsters, not as humans). Priscilla may have been a zealot death machine as a Claymore but its not like she manipulated others just to have an excuse to kill them. But regardless, when karma caught up to Ophelia and bit her in the ass, she showed enough willpower to accept her death.
The Organization: Ok, they unleash yoma (as per Miria's hypothesis), just so that they can breed monster weapons and get paid for the misfortune they create in the first place. They take people's newborns (Alicia and Beth) and have iron-clad rules to keep their Claymores pretty much enslaved. But at the end of the day, they're doing the job assigned to them. Who knows, maybe these Dragon-kin are so frightening and powerful, that it warrants these actions. And to be fair to the Organization, they try their best to protect humans, even if it is just for the money.
Awakened Beings: Ok so they're Claymores that awaken. They eat humans...and that's about it really. They're little more than yoma in that regard, just way more powerful. They show cunning and tactics, but not really something that can be considered evil. Even if we were to consider kidnapping and experimentation that Riful and Dauf performed, they never did so against humans. Instead, they only targeted other Claymores, who are trained soldiers meant for this kind of thing. And even if that was wrong, Riful merely did so to fight against other ABs like herself (namely Isley who was pushing his own forces just so that he could get Priscilla from the North to the South).
So in a way, its just a grand-scale, bloody 3-way war right now. Damage is done to the combatants mostly with the occasional human bystander caught in the crossfire (which is inevitable). I guess the tue villain of the story has yet to make an entrance...
|2010-07-28, 21:55
|Link #583
Claymore #01
Join Date: Apr 2008
Location: Maldives
|2010-07-28, 22:26
|Link #584
Dark Lord of Animesuki
Join Date: Oct 2008
Location: The Kingdom of Orange...you can't beat the Cuse, in basketball or snowfall!
The Destroyer steadily shrinks, with Claire eventually gaining control of the body by mentally gaining control of the Destroyer's thought process. Slowly it shrinks into something the size of a person, and then begins taking shape. After a short while, a female silhouette emerges, then transforms into a form of Claire utterly without either silver eyes or a belly scar. Helen, Deneve, Dietrich, Yuma, and Cynthia stare in shock, with Cynthia filling them in on what is going on.
Priscilla observes this, then is shocked to see Claire's face, "So you're aren't dead after all?!?"
Claire, totally in the nude, grabs the sword Deneve lost to the Destroyer and then sprouts goddess-like "angel's wings".
Then the shit hits the fan so to speak...
Of course then the chapter ends, "To be continued in October..." (as the current issue is a month ahead, right?)
Admittedly my favorite way of ending this chapter would've been for both Galatea and Miria to show up at the very end, both wearing form-fitting, hot black leather outfits. Who's with me on that happening???
|2010-07-29, 22:26
|Link #586
the toeto nomster~!!
Join Date: Apr 2008
Location: here there and everywhere!
i don't know how the next chapter is going to play out. at one point clare gets absorb by the destroyer and is able to get out.. then, possibly ten minutes later.. she gets absorbed by it again. what the heck? lol
i just hope prissy quickly destorys the destroyer, just to get this arc over with. i want to see wat the org and miria are up to.
|2010-07-29, 23:26
|Link #587
The One Eyed King
Join Date: Apr 2009
Location: Lurking Up Ahead
BTW Just read on Baidu that Septembers issue of Jump Square has just been printed (no spoilers yet). So spoilers might be just around the corner, even maybe this weekend. Sadly I'll be out of town in a few hours (but just for a few days), so I won't be able to look for them. So it's up to you guys.
|2010-07-30, 05:16
|Link #588
the toeto nomster~!!
Join Date: Apr 2008
Location: here there and everywhere!
btw if raki gots an awakened flesh in him, does that mean his hair color and eyes will not change as well?
|2010-07-30, 09:15
|Link #589
Thread Hijacker
Join Date: May 2009
Location: In a hole, I just need to dig myself out
Wow, here I was worried that the chapter has already been out all this time, and their aren't even spoilers yet 0_0 .
Malak, let me make an example about the distinction I mentioned; Luciella: she inevitably adapted to the great power she had at her disposal, and wanted it to use it to conquer the lands(Psychology), but it didn't change her love for her sister(Personality).
How people behave/act, and how people truly are: that's the distinction I try to bring up, putting it simply as possible.
|2010-07-30, 09:36
|Link #590
Dark Lord of Animesuki
Join Date: Oct 2008
Location: The Kingdom of Orange...you can't beat the Cuse, in basketball or snowfall!
If you're wondering why the chapter isn't out, look no farther than the legal offices of Jump Square in Japan. Those are the guys more responsible for delays than anyone else. Thankfully for us, and not so thankfully for anyone's intellectual property rights, China has a long tradition of not following the world system.
|2010-07-30, 13:57
|Link #591
Senior Member
Join Date: Apr 2008
Location: Italy
|2010-07-31, 14:23
|Link #593
Thread Hijacker
Join Date: May 2009
Location: In a hole, I just need to dig myself out
|2010-08-01, 17:49
|Link #594
the toeto nomster~!!
Join Date: Apr 2008
Location: here there and everywhere!
|2010-08-02, 12:13
|Link #595
Join Date: Jun 2007
Location: The town where Copernicus was born.
Age: 32
Chapter as good as the previous one, not bad but I would expect more of Yagi. Probably everything I'll write has been discussed before but I'll write it anyway :P.
1) How the heck could Clare talk in a state like that? She should have been dead by now. IMO Yagi over-used god-mode for her with this chapter. And when did she manage to tell Deneve her final words? Priscilla was coming their way real quick and a while earlier Clare said sth else.
2) Again we have annoying Priscilla that acts as if she was some kind of goddess. I wonder though why she didnt kill Deneve or Helen (or both of them) after she found out about Clare. According to her life code everything that stands in her way should be annihilated and they stayed in her way. Unless she couldnt do it after Clare-Raciella started attacking her (which would suggest she's not that godly). She also needed only one of them so she could have killed the other. I dont believe she did it from the kindness of her heart. Whats more she should have suspected that Clare couldnt go far nor cloak her youki so she had to be dead or be very close to it, she didn't need Deneve to tell her what happened to Clare if she used her brain.
3) Priscillas reaction and her question What did I come her for? was one of the stupidest things in the chapter. As if meeting with Clare again or killing her would change anything. Besides, she wasted like 20 minutes not 20 years and she sounded like she was searching for her a long time. Seriously, somebody kill her please.
4) Exposing naked Priscilla from every angle Although I like to look at this and that from time to time Priscilla has become boring. I would prefer someone other than AB with skin that looks like sh*t with veins. Dee, Galatea, Clare or Helen would be so much better.
5) Dee has already paid her debt. In fact Deneve and Helen owe her. Dee said that without risking her life she can't repay them but the thing is H&D never risked their lives for her. The awakened being they helped her to defeat wasn't even a challenge for one of them, let alone two. And Dee not only did deliver their message (and risked her life, she couldn't be sure that she wouldn't be killed by Miria or someone else) but earlier she saved Helen and Deneve by risking her life and rescuing them from ZACS. Now she saved their friends and it's still not enough to her...
6) Cynthias line For some reason it feels like we should see that with our own eyes was also a winner. It wasnt for some reason but because Yagi told you ;P. I would call it not the best script line that Yagi came up with.
7) Yuma that could regenerate better than Cynthia was also a shocker to me. A while back with the rest of her strength she managed to help Cynthia and now she was able to do the same for Deneve (sure, her injury was much less serious but ). If she keeps it up next time she will regenerate Clare from scratch.
8) As always Deneve could deduce a bit too much from the information she got (at least it seemed that way to me). Seriously, how come could she notice that Clare was talking as if she was a part of this pasta? How can you deduce sth like that ? Unless Clare said it outright. I have some possibilities in mind but still it looks a bit far-fetched to me. Whats even funnier a while later she said that she knows nothing even though it was clear that she knew the most out of all people. Yagi should have read what he wrote a page back.
I can always continue to write "1 chapter till Priscilla's downfall left" after 4 months from now pass ;P.
|2010-08-03, 14:37
|Link #596
Join Date: Aug 2010
Location: Poland
Age: 32
Hi, I'm new here, so I'll add my 0,02 PLN.
And she has not said sth else. Clare said to Helen and Deneve that she's sorry and the mentioned part about remaining responsibility was just elided at that page ("I..." indicates that there was than it has been shown). Nothing new from Yagi. I can agree that this monologue of almost dead one doesn't fit into presented rapid course of events.
Priscilla is always shown unbalanced. This the problem of overpowered characters (and mangakas using them) . She has flown to the Riful instantaneously, but has problems with catching a few claymores? And even if she's next to them she's talking calmly, blah blah blah. Priscilla, according to what we've seen, could kill all those pitiful claymores countless times w/o sweating at all and going even with 10% of her power. Oh, I almost forget, she is shrunken now (thanks to Raki), so it's beyond our imagination what she would be w/o 7-year post. OTOH she may die from starvation, no?
Yuma is becoming somehow a second Clare, from 40th nothing to a warrior gaining skills in eyeblink. But Deneve case was a bit different. We've already seen a few times youki flow interference, so this shouldn't be that hard.
But what with promise made to Raki? Clare won't vanish that easily, I am sure of it.
|Thread Tools


text:
Graduate Programs in Education
Education graduate programs help future and current teachers and educational administrators develop advanced skills and strategies, study education research, and build a solid foundation for a new or expanded career.
Graduate programs in Education are available in a wide range of topics, such as Curriculum and Instruction, Higher Education, TESL/ESL, K-12 Education, Special Education and more. What unites them is a committment to preparing educators to better serve students and build a stronger, more effective educational system.
Education Graduate Programs: Subject Areas & Concentrations
Education graduate programs are often designed to focus on a specific area in the vast education field. This may allow teachers to concentrate on concepts and methods that more closely align with the types of students they wish to serve. Graduate programs in education may also be designed around a specific function or career.
While not every education grad school may offer programs in all these subjects, below are a few common areas of study to consider.
- Adult Education – Learn about needs of adult learners, and prepare to help adults achieve educational goals like language acquisition, earning a GED, developing career skills, and more.
- Curriculum & Instruction – Develop your skills in curriculum and instructional design, to prepare for roles in and out of the classroom and help educational communities become more effective.
- Early Childhood Education – Study the unique needs of children ranging from infancy to third grade, including topics like developmental psychology, social and emotional, development, motor skills, reading, etc.
- Education Leadership & Administration – Develop skills to support your current or potential future leadership positions within a school community, or district, educational policy, and other related roles and responsibilities.
- Education Technology & Online Learning – Learn about how to use technology in educational contexts, to support student engagement, curriculum design and differentiation in the classroom or in online school contexts at a variety of grade and university levels.
- Environmental Education – Prepare yourself for a unique career educating your community about environmental conservation and change, both in and out of the classroom. This might include topics like ecology, earth science, and sustainability.
- Educational & School Psychology – Prepare to conduct psychology research and apply research findings at the institutional level as an educational psychologist or to work with students directly in a school counseling or school psychologist role.
- ESL/TESOL – Learn about strategies to encourage English language acquisition for primary speakers of other languages, at a variety of grade and age levels. Programs may focus on several educational contexts, or even teaching abroad.
- General Education – Develop your general teaching and education skills to support a variety of roles, both in the classroom and in administrative contexts.
- Higher Education – Prepare yourself to help students succeed in post-secondary contexts such as colleges and universities, to be a more effective university professor or assist students in non-teaching roles.
- International Education – Learn more about teaching in an international context. Study topics like multicultural education, educational policy, communication skills, community development, study abroad programs, and more.
- K-12 Education – Study in a program related to your current or future certification level, looking at the needs of certain grade levels, or at subject areas like teaching reading, mathematics, science, technology, foreign languages, etc.
- Literacy and Reading Specialist Studies
- Secondary Education
- Special & Gifted Education – Study to better serve students with unique needs, such as those with learning disabilities, communication disorders, behavioral or emotional disorders, gifted students, or members of underserved populations.
- Teacher Education – Develop your skills as a classroom teacher. Explore instructional strategies, classroom management, strategies for differentiation, unique learning styles, subject and grade or age-specific programs, and more.
Earning Master's Degrees in Education
Education master's programs are typically two year programs which explore advanced concepts in a specific area of education. Some Masters in Education programs may also be designed to prepare teachers for additional credentials or certification exams.
Most programs include core and elective coursework, a practicum and a final project or thesis. Within their masters of education program, students may also be able to choose a specific concentration or specialty area. Concentrations may focus on teaching a specific topic, like Math or English, or on teaching in a particular setting.
Types of Masters in Education Programs
Master's in Education programs might include: Master of Arts in Teaching (M.A.T.), Master's of Education (M.Ed.), and Master of Science in Education programs, among others. You might also consider degree types specific to certain specialties, such as Master of Psychology in Educational & School Psychology programs.
If you're new to education altogether, you may want to look for Masters of Education programs that include some or all of the requirements for certification in your state. These are created for students with little to no professional experience and may not require a bachelors degree in education or a related subject area.
Other education masters programs are designed for experienced teachers and may require a teaching license. They may help teachers prepare to earn additional credentials, explore new subject areas or further develop skills to enhance their teaching practice.
Experienced teachers may also wish to pursue an additional higher distinction on top of a masters degree, such as the Educational Specialist (Ed.S.) or Psychology Specialist (Psy.S.) credential. These types of masters degrees in education are sometimes seen as being a step between the master's and doctoral program levels.
Contact your preferred Masters in Education programs to learn more about requirements, curriculum and areas of focus to determine which might be a great fit for you.
Doctorate in Education Programs & Schools
Similar to education master's programs, education doctoral programs might include a few different degree types, such as Doctor of Education (Ed.D.), Ph.D. in education programs, or even Doctor of Psychology (Psy.D.) programs, depending on your concentration area.
The specific differences between each might vary depending on the school in question and the subject area. They may also be designed to prepare graduates for different roles such as education research, teaching at the university level, or administration and leadership.
However all of these education graduate degrees are considered terminal degrees, meaning they are the highest level of study in the field. They also often include a research component and may require a dissertation.
Read program listings for doctorate in education programs or inquire with your preferred school for more details.
Education Graduate Certificates
Graduate certificate programs in educationare typically shorter programs, and may focus on a narrow topic within your preferred subject area. They may be available at the master's or post-master's level, and provide a brief introduction to a subject area or focus on one specific topic in depth.
Some certificate graduate programs in education may also be designed to help finish requirements for teaching licenses or certifications. However these vary by state or institution to it's best to research each program carefully.
Education Graduate Degree Program Formats
Whatever your preferred subject area or program level may be, education graduate programs might be available in several different formats. That means that you might be able to choose a program whose schedule and design works with your learning style and preferences, and with your life.
Programs might be offered in the following formats.
- Education Graduate Schools – Studying on a local campus may have a number of advantages. In addition to a traditional classroom experience, education grad schools may offer access to campus facilities and resources. Plus faculty may have knowledge of the local educational community.
- Online Graduate Education Programs – Whether you prefer learning independently or need to fit your education into a hectic schedule, online programs may offer the education you want with the flexibility you need. Coursework is typically available 24/7 through an online learning format. Chatrooms, local practicums, video, and digital libraries may also help bring the traditional education grad school experience to you.
- Hybrid Graduate Programs in Education – Sometimes called partially-online or low-residency, hybrid education graduate programs bring together the advantages of classroom learning on a local campus and the flexible nature of an online program. Short campus visits or residencies may augment the online learning format, though every school designs this slightly different.
Find Graduate Schools in Education
Are you ready to begin your search for education graduate programs? Start by browing the many graduate programs and schools in education listed here.
If you're curious about studying a certain subject, or earning a specific degree, select the appropriate menu filters to read more about those programs. You might also search based on program format or campus location.
Sponsored Listings
- Weston, MAWeston, MA
Regis College
Master of Education in Teaching Special Education
In an effort to address the universal need for special education teachers, this program strongly focuses on classroom inclusion. During this one-year accelerated program, students learn the skills to develop innovative methods and sound educationa...
- OnlineOnline
Purdue University
Master of Science in Education in Learning Design and Technology
Purdue University's online Master of Science in Education in Learning Design and Technology gives you vital knowledge and innovative techniques to design and deliver effective instructional materials...
- Online
- Boston, MABoston, MA
Simmons University
Moderate & Severe Disabilities (MSEd)
The philosophy of all Simmons graduate programs in special education is grounded in the principles of inclusion...
- OnlineOnline
George Mason University
Master of Education in Special Education, specializing in Autism Spectrum Disorder
George Mason University's online Master's Degree in Special Education, specializing in Autism Spectrum Disorder (ASD) equips students to identify, address, and overcome complex learning challenges to influence the educational potential for pe...
- Online
- OnlineOnline
Northcentral University
Education Specialist - Global Training and DevelopmentUpcoming Start Date: January 28, 2019
The Education Specialist degree with a specialization in Global Training and Development will prepare you to become a leader in the field of training and performance improvement through a combination of theory, research and practical applicatio...
- Online
- OnlineOnline
Arkansas State University
Master of Science in Education in Educational Leadership
The Master of Science in Education (MSE) in Educational Leadership degree is designed to develop leaders in the educational community.
- Online
- OnlineOnline
Saint Joseph's University
MS in Special Education
The online Master's in Special Education from Saint Joseph's University includes specializations and certifications that are designed to meet the most pressing demands in today's schools.
- Online
- OnlineOnline
American University
Master of Science in Instructional Design and Learning AnalyticsUpcoming Start Date: May 28, 2019
The online Master of Science in Instructional Design and Learning Analytics focuses on the application and adaptation of analytic methodologies to manage learning, instructional design, and talent development projects...
- OnlineOnline
The George Washington University
Education Specialist in Educational Leadership and Administration
The George Washington University's Education Specialist (EdS) in Educational Leadership and Administration is a specialized degree that prepares students to lead and promote high-quality student achievement at a district, sub-district or school-wide level...
- Online
- Fairfield, CTFairfield, CT
Sacred Heart University
Master of Education (M.Ed.)
Sacred Heart University offers a graduate program leading to a Master of Education (M.Ed.). This program is open to those who already have a teacher certification.
- OnlineOnline
Queens University of Charlotte
Master of Arts in Educational Leadership
Queens University of Charlotte's 100% online M.A. in Educational Leadership strives to make it easy for you to step into K – 12 administrator roles with confidence.
- OnlineOnline
Walden University
Doctor of Education (Ed.D.) - Teacher LeadershipUpcoming Start Date: February 25, 2019
"Do you aspire to drive transformative educational change in your institution and community? Designed for practitioners and administrators from P-12 to higher education, Walden University's online Doctor of Education (EdD) program...
- Online
- OnlineOnline
Louisiana State University In Shreveport
Master of Education in Curriculum and Instruction in ESL
At Louisiana State University Shreveport Online, you can earn a respected Master of Education Curriculum and Instruction degree without putting your life on hold.
- Online
- OnlineOnline
Saint Mary's University of Minnesota
Master of Arts in Special Education
Learn the skills you need to improve special students' lives with an online Master of Arts in Special Education degree from Saint Mary's University of Minnesota.
- Online
- Rochester, MN
- Winona, MN
- Minneapolis, MN
- OnlineOnline
Grand Canyon University
M.Ed. in Educational Leadership (NITL)
Master of Education in Educational Administration with an Emphasis in Organizational Leadership (Not Eligible for Institutional Recommendation). This next-level educational degree program is designed for any individual interested in the administration...
- Online
- Louisville, KYLouisville, KY
University of Louisville
Master of Arts in Higher Education Administration
Master of Arts in Higher Education Administration online degree for higher ed administration professionals. Specializations include Teaching & Learning, Policy & Equity, and Administration.
- Online
- Costa Mesa, CACosta Mesa, CA
Vanguard University
Master of Arts in Education
Vanguard offers the training necessary to make you one of Southern California's most sought-after teachers...
- OnlineOnline
Purdue University Global
M.S. in Higher Education - Student Affairs
Explore approaches to developing a comprehensive student services program with an emphasis on current management and legal issues in student affairs. Study to develop expertise in curriculum design and implementation and assessing learning outcomes. Gai...
- Online
- OnlineOnline
Ashford University
Doctor of Philosophy in Organziational Development and Leadership - Training and E-Learning
Lead people to new heights with your Doctor of Philosophy (PhD) in Organizational Development and Leadership from Ashford University. This doctoral degree is the culmination of graduate studies in leadership and organization.
- Online
- Chicago, ILChicago, IL
Loyola University Chicago
Advanced School Mental Health Certificate
As a ASMHPP student you will learn to help School Based Mental Health Practitioners (SBMHP) further assist student clients.
- Chicago, IL
- OnlineOnline
Full Sail University
Master of Science in Instructional Design & Technology
- Pittsburgh, PAPittsburgh, PA
Duquesne University
Secondary Education - Science
The M.S.Ed. Secondary Education - Science is designed to prepare teacher candidates for secondary classrooms in our nation's schools by providing a caring and supportive learning environment that promotes academic excellence.
- Pittsburgh, PA
- Online
- OnlineOnline
Concordia University-Portland
MEd in Curriculum and Instruction - Educational Technology Leadership
Concordia University – Portland's fully online MEd in Curriculum & Instruction: Educational Technology Leadership concentration prepares candidates for leadership roles implementing education technologies in K-12 classrooms and comm...
- Online
- Paxton, MAPaxton, MA
Anna Maria College
Master of Education
The Master of Education program at Anna Maria College includes an approach that combines cutting-edge educational theory and practice.
- Belmont, CABelmont, CA
Notre Dame de Namur University
Special Education
Notre Dame de Namur University's Special Education Program is designed to train teachers to alleviate the increasing shortage of special education teachers in the State of Californi...
- Belmont, CA