The Mantra
Don’t Repeat Yourself
In this lecture we will see advanced ways to abstract code patterns
Outline
- Functors
- Monads
- Writing apps with monads
Recall: HOF
Recall how we used higher-order functions to abstract code patters
Iterating Through Lists
data List a
= []
| (:) a (List a)
Rendering the Values of a List
-- >>> showList [1, 2, 3]
-- ["1", "2", "3"]
showList :: [Int] -> [String]
showList [] = []
showList (n:ns) = show n : showList ns
Squaring the values of a list
-- >>> sqrList [1, 2, 3]
-- 1, 4, 9
sqrList :: [Int] -> [Int]
sqrList [] = []
sqrList (n:ns) = n^2 : sqrList ns
Common Pattern: map
over a list
Refactor iteration into mapList
mapList :: (a -> b) -> [a] -> [b]
mapList f [] = []
mapList f (x:xs) = f x : mapList f xs
Reuse mapList
to implement showList
and sqrList
showList xs = mapList (\n -> show n) xs
sqrList xs = mapList (\n -> n ^ 2) xs
Iterating Trough Trees
data Tree a
= Leaf
| Node a (Tree a) (Tree a)
Rendering the Values of a Tree
-- >>> showTree (Node 2 (Node 1 Leaf Leaf) (Node 3 Leaf Leaf))
-- (Node "2" (Node "1" Leaf Leaf) (Node "3" Leaf Leaf))
showTree :: Tree Int -> Tree String
showTree Leaf = ???
showTree (Node v l r) = ???
showTree :: Tree Int -> Tree String
showTree Leaf = Leaf
showTree (Node v l r) = Node (show v) (showTree l) (showTree r)
Squaring the values of a Tree
-- >>> sqrTree (Node 2 (Node 1 Leaf Leaf) (Node 3 Leaf Leaf))
-- (Node 4 (Node 1 Leaf Leaf) (Node 9 Leaf Leaf))
sqrTree :: Tree Int -> Tree Int
sqrTree Leaf = ???
sqrTree (Node v l r) = ???
sqrTree :: Tree Int -> Tree Int
sqrTree Leaf = Leaf
sqrTree (Node v l r) = Node (v^2) (sqrTree l) (sqrTree r)
QUIZ: Mapping over a Tree
If we refactor iteration into mapTree
, what should its type be?
mapTree :: ???
showTree t = mapTree (\n -> show n) t
sqrTree t = mapTree (\n -> n ^ 2) t
(A) (Int -> Int) -> Tree Int -> Tree Int
(B) (Int -> String) -> Tree Int -> Tree String
(C) (Int -> a) -> Tree Int -> Tree a
(D) (a -> a) -> Tree a -> Tree a
(E) (a -> b) -> Tree a -> Tree b
Answer: E
Mapping over Trees
Let’s write mapTree
:
mapTree :: (a -> b) -> Tree a -> Tree b
mapTree f Leaf = ???
mapTree f (Node v l r) = ???
mapTree :: (a -> b) -> Tree a -> Tree b
mapTree f Leaf = Leaf
mapTree f (Node v l r) = Node (f v) (mapTree f l) (mapTree f r)
Abstracting across Datatypes
Wait, this looks familiar…
type List a = [a]
mapList :: (a -> b) -> List a -> List b -- List
mapTree :: (a -> b) -> Tree a -> Tree b -- Tree
Can I write a generic function?
map :: (a -> b) -> t a -> t b
A Class for Mapping
Not quite! Not all datatypes support mapping over, only some of them do.
So let’s make a typeclass for it!
class Functor t where
fmap :: ???
QUIZ
What type should we give to fmap
?
class Functor t where
fmap :: ???
(A) (b -> a) -> t b -> t a
(B) (a -> a) -> t a -> t a
(C) (a -> b) -> [a] -> [b]
(D) (a -> b) -> t a -> t b
(E) (a -> b) -> Tree a -> Tree b
Reuse Iteration Across Types
instance Functor [] where
fmap = mapList
instance Functor Tree where
fmap = mapTree
And now we can do
-- >>> fmap show [1,2,3]
-- ["1", "2", "3"]
-- >>> fmap (^2) (Node 2 (Node 1 Leaf Leaf) (Node 3 Leaf Leaf))
-- (Node 4 (Node 1 Leaf Leaf) (Node 9 Leaf Leaf))
Exercise
Write a Functor
instance for Result
:
data Result a
= Error String
| Ok a
instance Functor Result where
fmap f (Error msg) = ???
fmap f (Ok val) = ???
When you’re done you should see
-- >>> fmap (^ 2) (Ok 3)
Ok 9
-- >>> fmap (^ 2) (Error "oh no")
Error "oh no"
Outline
- Functors [done]
Monads for
2.1. Error Handling
2.2. Mutable State
Writing apps with monads
Next: A Class for Sequencing
Consider a simplified Expr
datatype
data Expr
= Num Int
| Plus Expr Expr
| Div Expr Expr
deriving (Show)
eval :: Expr -> Int
eval (Num n) = n
eval (Plus e1 e2) = eval e1 + eval e2
eval (Div e1 e2) = eval e1 `div` eval e2
-- >>> eval (Div (Num 6) (Num 2))
-- 3
But what is the result of
-- >>> eval (Div (Num 6) (Num 0))
-- *** Exception: divide by zero
My interpreter crashes!
- What if I’m implementing GHCi?
- I don’t want GHCi to crash every time you enter
div 5 0
- I want it to process the error and move on with its life
How can we achieve this behavior?
Error Handling: Take One
Let’s introduce a new type for evaluation results:
data Result a
= Error String
| Value a
Our eval
will now return Result Int
instead of Int
- If a sub-expression had a divide by zero, return
Error "..."
- If all sub-expressions were safe, then return the actual
Value v
eval :: Expr -> Result Int
eval (Num n) = ???
eval (Plus e1 e2) = ???
eval (Div e1 e2) = ???
eval :: Expr -> Result Int
eval (Num n) = Value n
eval (Plus e1 e2) =
case eval e1 of
Error err1 -> Error err1
Value v1 -> case eval e2 of
Error err2 -> Error err2
Value v1 -> Value (v1 + v2)
eval (Div e1 e2) =
case eval e1 of
Error err1 -> Error err1
Value v1 -> case eval e2 of
Error err2 -> Error err2
Value v1 -> if v2 == 0
then Error ("DBZ: " ++ show e2)
else Value (v1 `div` v2)
The good news: interpreter doesn’t crash, just returns Error msg
:
λ> eval (Div (Num 6) (Num 2))
Value 3
λ> eval (Div (Num 6) (Num 0))
Error "DBZ: Num 0"
λ> eval (Div (Num 6) (Plus (Num 2) (Num (-2))))
Error "DBZ: Plus (Num 2) (Num (-2))"
The bad news: the code is super duper gross
Lets spot a Pattern
The code is gross because we have these cascading blocks
case eval e1 of
Error err1 -> Error err1
Value v1 -> case eval e2 of
Error err2 -> Error err2
Value v1 -> Value (v1 + v2)
But these blocks have a common pattern:
- First do
eval e
and get resultres
- If
res
is anError
, just return that error - If
res
is aValue v
then do further processing onv
case res of
Error err -> Error err
Value v -> process v -- do more stuff with v
Lets bottle that common structure in a function >>=
(pronounced bind):
(>>=) :: Result a -> (a -> Result b) -> Result b
(Error err) >>= _ = Error err
(Value v) >>= process = process v
Notice the >>=
takes two inputs:
Result a
: result of the first evaluationa -> Result b
: in case the first evaluation produced a value, what to do next with that value
QUIZ: Bind 1
With >>=
defined as before:
(>>=) :: Result a -> (a -> Result b) -> Result b
(Error msg) >>= _ = Error msg
(Value v) >>= process = process v
What does the following evaluate to?
λ> eval (Num 5) >>= \v -> Value (v + 1)
(A) Type Error
(B) 5
(C) Value 5
(D) Value 6
(E) Error msg
Answer: D
QUIZ: Bind 2
With >>=
defined as before:
(>>=) :: Result a -> (a -> Result b) -> Result b
(Error msg) >>= _ = Error msg
(Value v) >>= process = process v
What does the following evaluate to?
λ> Error "nope" >>= \v -> Value (v + 1)
(A) Type Error
(B) 5
(C) Value 5
(D) Value 6
(E) Error "nope"
Answer: E
A Cleaned up Evaluator
The magic bottle lets us clean up our eval
:
eval :: Expr -> Result Int
eval (Num n) = Value n
eval (Plus e1 e2) = eval e1 >>= \v1 ->
eval e2 >>= \v2 ->
Value (v1 + v2)
eval (Div e1 e2) = eval e1 >>= \v1 ->
eval e2 >>= \v2 ->
if v2 == 0
then Error ("DBZ: " ++ show e2)
else Value (v1 `div` v2)
The gross pattern matching is all hidden inside >>=
!
NOTE: It is crucial that you understand what the code above is doing, and why it is actually just a “shorter” version of the (gross) nested-case-of eval
.
A Class for bind
Like fmap
or show
or ==
, the >>=
operator turns out to be useful across many types (not just Result
)
Let’s create a typeclass for it!
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b -- bind
return :: a -> m a -- return
return
tells you how to wrap an a
value in the monad
- Useful for writing code that works across multiple monads
Monad instance for Result
Let’s make Result
an instance of Monad
!
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
return :: a -> m a
instance Monad Result where
(>>=) :: Result a -> (a -> Result b) -> Result b
(Error msg) >>= _ = Error msg
(Value v) >>= process = process v
return :: a -> Result a
return v = ??? -- How do we make a `Result a` from an `a`?
instance Monad Result where
(>>=) :: Result a -> (a -> Result b) -> Result b
(Error msg) >>= _ = Error msg
(Value v) >>= process = process v
return :: a -> Result a
return v = Value v
Syntactic Sugar
In fact >>=
is so useful there is special syntax for it!
- It’s called the
do
notation
Instead of writing
e1 >>= \v1 ->
e2 >>= \v2 ->
e3 >>= \v3 ->
e
you can write
do v1 <- e1
v2 <- e2
v3 <- e3
e
Thus, we can further simplify our eval
to:
eval :: Expr -> Result Int
eval (Num n) = return n
eval (Plus e1 e2) = do v1 <- eval e1
v2 <- eval e2
return (v1 + v2)
eval (Div e1 e2) = do v1 <- eval e1
v2 <- eval e2
if v2 == 0
then Error ("DBZ: " ++ show e2)
else return (v1 `div` v2)
The Either Monad
Error handling is a very common task!

Now we can simply define
type Result a = Either String a
and the eval
above will just work out of the box!
Outline
- Functors [done]
Monads for
2.1. Error Handling [done]
2.2. Mutable State
Writing apps with monads
Expressions with a Counter
Consider implementing expressions with a counter:
data Expr
= Num Int
| Plus Expr Expr
| Next -- counter value
deriving (Show)
Behavior we want:
eval
is given the initial counter value- every time we evaluate
Next
(within the call toeval
), the value of the counter increases:
-- 0
λ> eval 0 Next
0
-- 0 1
λ> eval 0 (Plus Next Next)
1
-- 0 1 2
λ> eval 0 (Plus Next (Plus Next Next))
3
How should we implement eval
?
eval (Num n) cnt = ???
eval Next cnt = ???
eval (Plus e1 e2) cnt = ???
QUIZ: State: Take 1
If we implement eval
like this:
eval (Num n) cnt = n
eval Next cnt = cnt
eval (Plus e1 e2) cnt = eval e1 cnt + eval e2 cnt
What would be the result of the following?
λ> eval (Plus Next Next) 0
(A) Type error
(B) 0
(C) 1
(D) 2
Answer: B
It’s going to be 0
because we never increment the counter!
- We need to increment it every time we do
eval Next
- So
eval
needs to return the new counter
Evaluating Expressions with Counter
type Cnt = Int
eval :: Expr -> Cnt -> (Cnt, Int)
eval (Num n) cnt = (cnt, n)
eval Next cnt = (cnt + 1, cnt)
eval (Plus e1 e2) cnt = let (cnt1, v1) = eval e1 cnt
in
let (cnt2, v2) = eval e2 cnt1
in
(cnt2, v1 + v2)
topEval :: Expr -> Int
topEval e = snd (eval e 0)
The good news: we get the right result:
λ> topEval (Plus Next Next)
1
λ> topEval (Plus Next (Plus Next Next))
3
The bad news: the code is super duper gross.
The Plus
case has to “thread” the counter through the recursive calls:
let (cnt1, v1) = eval e1 cnt
in
let (cnt2, v2) = eval e2 cnt1
in
(cnt2, v1 + v2)
- Easy to make a mistake, e.g. pass
cnt
instead ofcnt1
into the secondeval
! - The logic of addition is obscured by all the counter-passing
So unfair, since Plus
doesn’t even care about the counter!
Is it too much to ask that eval
looks like this?
eval (Num n) = return n
eval (Plus e1 e2) = do v1 <- eval e1
v2 <- eval e2
return (v1 + v2)
...
- Cases that don’t care about the counter (
Num
,Plus
), don’t even have to mention it! - The counter is somehow threaded through automatically behind the scenes
- Looks just like in the error handing evaluator
Lets spot a Pattern
let (cnt1, v1) = eval e1 cnt
in
let (cnt2, v2) = eval e2 cnt1
in
(cnt2, v1 + v2)
These blocks have a common pattern:
- Perform first step (
eval e
) using initial countercnt
- Get a result
(cnt', v)
- Then do further processing on
v
using the new countercnt'
let (cnt', v) = step cnt
in process v cnt' -- do things with v and cnt'
Can we bottle this common pattern as a >>=
?
(>>=) step process cnt = let (cnt', v) = step cnt
in process v cnt'
But what is the type of this >>=
?
(>>=) :: (Cnt -> (Cnt, a))
-> (a -> Cnt -> (Cnt, b))
-> Cnt
-> (Cnt, b)
(>>=) step process cnt = let (cnt', v) = step cnt
in process v cnt'
Wait, but this type signature looks nothing like the Monad
’s bind!
(>>=) :: m a -> (a -> m b) -> m b
… or does it???
type Counting a = Cnt -> (Cnt, a)
(>>=) :: Counting a
-> (a -> Counting b)
-> Counting b
(>>=) step process = \cnt -> let (cnt', v) = step cnt
in process v cnt'
Mind blown.
QUIZ: Return for Counting
How should we define return
for Counting
?
type Counting a = Cnt -> (Cnt, a)
-- | Represent value x as a counting computation,
-- don't actually touch the counter
return :: a -> Counting a
return x = ???
(A) x
(B) (0, x)
(C) \c -> (0, x)
(D) \c -> (c, x)
(E) \c -> (c + 1, x)
Answer: D
Cleaned-up evaluator
eval :: Expr -> Counting Int
eval (Num n) = return n
eval (Plus e1 e2) = eval e1 >>= \v1 ->
eval e2 >>= \v2 ->
return (v1 + v2)
eval Next = \cnt -> (cnt + 1, cnt)
Hooray! We rid the poor Num
and Plus
from the pesky counters!
The Next
case has to deal with counters
- but can we somehow hide the representation of
Counting a
? - and make it look more like we just have mutable state that we can
get
andset
? - i.e. write:
eval Next = get >>= \c ->
set (c + 1) >>= \_ ->
return c
How should we define these?
-- | Computation whose return value is the current counter value
get :: Counting Cnt
get = ???
-- | Computation that updates the counter value to `newCnt`
set :: Cnt -> Counting ()
set newCnt = ???
-- | Computation whose return value is the current counter value
get :: Counting Cnt
get = \cnt -> (cnt, cnt)
-- | Computation that updates the counter value to `newCnt`
set :: Cnt -> Counting ()
set newCnt = \_ -> (newCnt, ())
Monad instance for Counting
Let’s make Counting
an instance of Monad
!
- To do that, we need to make it a new datatype
data Counting a = C (Cnt -> (Cnt, a))
instance Monad Counting where
(>>=) :: Counting a -> (a -> Counting b) -> Counting b
(>>=) (C step) process = C final
where
final cnt = let
(cnt', v) = step cnt
C nextStep = process v
in nextStep cnt'
return :: a -> Result a
return v = C (\cnt -> (cnt, v))
We also need to update get
and set
slightly:
-- | Computation whose return value is the current counter value
get :: Counting Cnt
get = C (\cnt -> (cnt, cnt))
-- | Computation that updates the counter value to `newCnt`
set :: Cnt -> Counting ()
set newCnt = C (\_ -> (newCnt, ()))
Cleaned-up Evaluator
Now we can use the do
notation!
eval :: Expr -> Counting Int
eval (Num n) = return n
eval (Plus e1 e2) = do v1 <- eval e1
v2 <- eval e2
return (v1 + v2)
eval Next = do
cnt <- get
_ <- put (cnt + 1)
return (cnt)
The State Monad
Threading state is a very common task!
Instead of defining your own type Counting a
, you can use State s a
from the Haskell standard library:
data State s a = State (s -> (s, a))
State
is already an instance of Monad
, so no need to define your own >>=
!
Now we can simply define
type Counting a = State Cnt a
and the eval
above will just work out of the box!
Outline
- Functors [done]
Monads for
2.1. Error Handling [done]
2.2. Mutable State [done]
Writing apps with monads
Writing Applications
In most programming classes, they start with a “Hello world!” program.
In 130, we will end with it.
Why is it hard to write a program that prints “Hello world!” in Haskell?
Haskell is pure
Haskell programs don’t do things!
A program is an expression that evaluates to a value (and nothing else happens)
A function of type
Int -> Int
computes a single integer output from a single integer input and does nothing elseMoreover, it always returns the same output given the same input (referential transparency)
Specifically, evaluation must not have any side effects
change a global variable or
print to screen or
read a file or
send an email or
launch a missile.
But… how to write “Hello, world!”
But, we want to …
- print to screen
- read a file
- send an email
A language that only lets you write factorial
and fibonacci
is … not very useful!
Thankfully, you can do all the above via a very clever idea: Recipe
Recipes
This analogy is due to Joachim Brietner
Haskell has a special type called IO
– which you can think of as Recipe
type Recipe a = IO a
A value of type Recipe a
is
a description of a computation
that when executed (possibly) performs side effects and
produces a value of type
a
Recipes are Pure
Baking a cake can have side effects:
make your oven hot
make your floor dirty
set off your fire alarm
But: merely writing down a cake recipe does not cause any side effects
Executing Recipes
When executing a program, Haskell looks for a special value:
main :: Recipe ()
This is a recipe for everything a program should do
- that returns a unit
()
- i.e. does not return any useful value
The value of main
is handed to the runtime system and executed
The Haskell runtime is a master chef who is the only one allowed to produce effects!
Importantly:
A function of type
Int -> Int
still computes a single integer output from a single integer input and does nothing elseA function of type
Int -> Recipe Int
computes anInt
-recipe from a single integer input and does nothing elseOnly if I hand this recipe to
main
will any effects be produced
Writing Apps
To write an app in Haskell, you define your own recipe main
!
Hello World
main :: Recipe ()
main = putStrLn "Hello, world!"
putStrLn :: String -> Recipe ()
The function putStrLn
- takes as input a
String
- returns a
Recipe ()
for printing things to screen
… and we can compile and run it
$ ghc hello.hs
$ ./hello
Hello, world!
This was a one-step recipe
Most interesting recipes have multiple steps
- How do I write those?
QUIZ: Combining Recipes
Assume we had a function combine
that lets us combine recipes like so:
main :: IO ()
main = combine (putStrLn "Hello,") (putStrLn "World!")
-- putStrLn :: String -> Recipe ()
-- combine :: ???
What should the type of combine
be?
(A) () -> () -> ()
(B) Recipe () -> Recipe () -> Recipe ()
(C) Recipe a -> Recipe a -> Recipe a
(D) Recipe a -> Recipe b -> Recipe b
(E) Recipe a -> Recipe b -> Recipe a
Answer: D
Using Intermediate Results
Next, lets write a program that
- Asks for the user’s
name
using
getLine :: Recipe String
- Prints out a greeting with that
name
using
putStrLn :: String -> Recipe ()
Problem: How to pass the output of first recipe into the second recipe?
QUIZ: Using Yolks to Make Batter
Suppose you have two recipes
crack :: Recipe Yolk
eggBatter :: Yolk -> Recipe Batter
and we want to get
mkBatter :: Recipe Batter
mkBatter = crack `combineWithResult` eggBatter
What should the type of combineWithResult
be?
(A) Yolk -> Batter -> Batter
(B) Recipe Yolk -> (Yolk -> Recipe Batter) -> Recipe Batter
(C) Recipe a -> (a -> Recipe a ) -> Recipe a
(D) Recipe a -> (a -> Recipe b ) -> Recipe b
(E) Recipe Yolk -> (Yolk -> Recipe Batter) -> Recipe ()
Answer: D
Recipes are Monads
Wait a bit, the signature:
combineWithResult :: Recipe a -> (a -> Recipe b) -> Recipe b
looks just like:
(>>=) :: m a -> (a -> m b) -> m b
In fact, in the standard library Recipe
is an instance of Monad
!
instance Monad Recipe where
(>>=) = {-... combineWithResult... -}
So we can put this together with putStrLn
to get:
main :: Recipe ()
main = getLine >>= \name -> putStrLn ("Hello, " ++ name ++ "!")
or, using do
notation the above becomes
main :: Recipe ()
main = do name <- getLine
putStrLn ("Hello, " ++ name ++ "!")
Exercise
Experiment with this code at home:
- Compile and run.
- Modify to repeatedly ask for names.
- Extend to print a “prompt” that tells you how many iterations have occurred.
Monads are Amazing
This code stays the same:
eval :: Expr -> Interpreter Int
eval (Plus e1 e2) = do v1 <- eval e1
v2 <- eval e2
return (v1 + v2)
...
We can change the type Interpreter
to implement different effects:
type Interpreter a = Either String a
if we want to handle errorstype Interpreter a = State Int a
if we want to have a countertype Interpreter a = StateT Int (Either String) a
if we want bothtype Interpreter a = [a]
if we want to return multiple results- …
Monads let us decouple two things:
- Application logic: the sequence of actions (implemented in
eval
) - Effects: how actions are sequenced (implemented in
>>=
)
Monads are Influential
Monads have had a revolutionary influence in PL, well beyond Haskell, some recent examples
Big data pipelines e.g. LinQ and TensorFlow
Thats all, folks!


java.lang.Object cz.dhl.ftp.Ftp
Allows connect to FTP server and maintains control connection.
| Field Summary | |
static int |
PORT
Default FTP port number. |
| Constructor Summary | |
Ftp()
Creates a new Ftp instance. |
| Method Summary | |
void |
abort()
Abort connection. |
boolean |
cd(java.lang.String directory)
Change server working directory. |
boolean |
cdup()
Change server directory to parent. |
boolean |
command(java.lang.String commandline)
Enter custom server command. |
boolean |
connect(FtpConnect connect)
Connect & login. |
boolean |
connect(java.lang.String server,
int port)
Connect to server, open control connection. |
void |
disconnect()
Disconnect from server, close control connection. |
FtpContext |
getContext()
Return FtpContext object. |
java.lang.String |
host()
Returns server host name. |
boolean |
chmod(java.lang.String filename,
java.lang.String mode)
Change server file mode. |
boolean |
isConnected()
Tests connection. |
boolean |
login(java.lang.String username,
java.lang.String password)
Log in to server, enter username and password. |
boolean |
mkdir(java.lang.String directory)
Make server working directory. |
boolean |
mv(java.lang.String oldfilename,
java.lang.String newfilename)
Rename server file. |
java.lang.String |
pwd()
Print server working directory. |
boolean |
rm(java.lang.String filename)
Delete server file. |
boolean |
rmdir(java.lang.String directory)
Remove server directory. |
java.lang.String |
syst()
Print server system. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
public static final int PORT
| Constructor Detail |
public Ftp()
| Method Detail |
public void abort()
public boolean cd(java.lang.String directory)
CWD - change working directory.
This command allows the user to work with a different directory or dataset for file storage or retrieval without altering his login or accounting information. Transfer parameters are similarly unchanged. The argument is a pathname specifying a directory or other system dependent file group designator.
directory
- Name of new working directory.
public boolean cdup()
CDUP - change up.
This command is a special case of CWD, and is included to simplify the implementation of programs for transferring directory trees between operating systems having different File Transfer Protocol syntaxes for naming the parent directory.
public boolean command(java.lang.String commandline)
Not all FTP commands are accepted. Exceptions are especially commands for transferring files and altering way data transfer is performed.
public boolean connect(FtpConnect connect) throws java.io.IOException
connect
- Connection details.
java.io.IOException
public boolean connect(java.lang.String server, int port) throws java.io.IOException
server
- Server DNS server name or dot delimited IP address.
java.io.IOException
public void disconnect()
public FtpContext getContext()
FtpContext
public java.lang.String host() throws java.io.IOException
java.io.IOException
public boolean chmod(java.lang.String filename, java.lang.String mode)
filename
- Name of file to change mode.mode
- Mode is UNIX "777" format string.
public boolean isConnected()
public boolean login(java.lang.String username, java.lang.String password) throws java.io.IOException
USER - user name.
The argument field is a Telnet string identifying the user. The user identification is that does require the server for access to its file system. This command will normally be the first command transmitted by the user after the control connections are made (some servers may require this). Additional identification information in the form of a password and/or an account command may also be required by some servers. Servers may allow a new USER command to be entered at any point in order to change the access control and/or accounting information. This has the effect of flushing any user, password, and account information already supplied and beginning the login sequence again. All transfer parameters are unchanged and any file transfer in progress is completed under the old access control parameters.
PASS - password.
The argument field is a Telnet string specifying the user's password. This command must be immediately preceded by the user name command, and, for some sites, completes the user's identification for access control. Since password information is quite sensitive, it is desirable in general to "mask" it or suppress typeout. It appears that the server has no foolproof way to achieve this. It is therefore the responsibility of the user-FTP process to hide the sensitive password information.
username
- Server account username.password
- Server account password.
java.io.IOException
public boolean mkdir(java.lang.String directory)
MKD - make directory.
This command causes the directory specified in the pathname to be created as a directory (if the pathname is absolute) or as a subdirectory of the current working directory (if the pathname is relative).
directory
- Name of newly created directory.
public boolean mv(java.lang.String oldfilename, java.lang.String newfilename)
RNFR - rename from.
This command specifies the old pathname of the file, which is to be renamed. This command must be immediately followed by a "rename to" command specifying the new file pathname.
RNTO - rename to.
This command specifies the new pathname of the file specified in the immediately preceding "rename from" command. Together the two commands cause a file to be renamed.
oldfilename
- Old name of file.newfilename
- New name of file.
public java.lang.String pwd() throws java.io.IOException
PWD - print working directory.
This command causes the name of the current working directory to be returned in the reply.
java.io.IOException
public boolean rm(java.lang.String filename)
DELE - delete.
This command causes the file specified in the pathname to be deleted at the server site. If an extra level of protection is desired (such as the query, "Do you really wish to delete?"), it should be provided by the user-FTP process.
filename
- Name of file to be deleted.
public boolean rmdir(java.lang.String directory)
RMD - remove directory.
This command causes the directory specified in the pathname to be removed as a directory (if the pathname is absolute) or as a subdirectory of the current working directory (if the pathname is relative).
directory
- Name of directory to be removed.
public java.lang.String syst() throws java.io.IOException
SYST - print server system.
This command causes the name name and version of the server system to be returned in the reply.
java.io.IOException


|
Apache log4cxx
Version 0.10.0
|
A LoggerRepository
is used to create and retrieve Loggers
.
More...
Inherits Object.
Inherited by Hierarchy [virtual]
.
Public Member Functions | |
| virtual | ~LoggerRepository () |
| virtual void | addHierarchyEventListener (const HierarchyEventListenerPtr &listener)=0 |
| Add a HierarchyEventListener event to the repository. More... | |
| virtual bool | isDisabled (int level) const =0 |
Is the repository disabled for a given level? The answer depends on the repository threshold and the level parameter. More... | |
| virtual void | setThreshold (const LevelPtr &level)=0 |
| Set the repository-wide threshold. More... | |
| virtual void | setThreshold (const LogString &val)=0 |
Another form of setThreshold accepting a string parameter instead of a Level . More... | |
| virtual void | emitNoAppenderWarning (const LoggerPtr &logger)=0 |
| virtual const LevelPtr & | getThreshold () const =0 |
| Get the repository-wide threshold. More... | |
| virtual LoggerPtr | getLogger (const LogString &name)=0 |
| virtual LoggerPtr | getLogger (const LogString &name, const spi::LoggerFactoryPtr &factory)=0 |
| virtual LoggerPtr | getRootLogger () const =0 |
| virtual LoggerPtr | exists (const LogString &name)=0 |
| virtual void | shutdown ()=0 |
| virtual LoggerList | getCurrentLoggers () const =0 |
| virtual void | fireAddAppenderEvent (const LoggerPtr &logger, const AppenderPtr &appender)=0 |
| virtual void | resetConfiguration ()=0 |
| virtual bool | isConfigured ()=0 |
| virtual void | setConfigured (bool configured)=0 |
| Public Member Functions inherited from Object | |
| virtual const helpers::Class & | getClass () const |
| virtual | ~Object () |
| virtual void | addRef () const =0 |
| virtual void | releaseRef () const =0 |
| virtual bool | instanceof (const Class &clazz) const =0 |
| virtual const void * | cast (const Class &clazz) const =0 |
Additional Inherited Members | |
| Static Public Member Functions inherited from Object | |
| static const helpers::Class & | getStaticClass () |
| static const log4cxx::helpers::ClassRegistration & | registerClass () |
A LoggerRepository
is used to create and retrieve Loggers
.
The relation between loggers in a repository depends on the repository but typically loggers are arranged in a named hierarchy.
In addition to the creational methods, a LoggerRepository
can be queried for existing loggers, can act as a point of registry for events related to loggers.
|
inlinevirtual |
|
pure virtual |
Add a HierarchyEventListener event to the repository.
|
pure virtual |
Implemented in Hierarchy.
|
pure virtual |
Implemented in Hierarchy.
|
pure virtual |
Implemented in Hierarchy.
|
pure virtual |
Implemented in Hierarchy.
|
pure virtual |
|
pure virtual |
Implemented in Hierarchy.
|
pure virtual |
Is the repository disabled for a given level? The answer depends on the repository threshold and the level
parameter.
See also setThreshold method.
Implemented in Hierarchy.
|
pure virtual |
Implemented in Hierarchy.
|
pure virtual |
Implemented in Hierarchy.
|
pure virtual |
Set the repository-wide threshold.
All logging requests below the threshold are immediately dropped. By default, the threshold is set to Level::getAll()
which has the lowest possible rank.
Implemented in Hierarchy.
|
pure virtual |
Another form of setThreshold accepting a string parameter instead of a Level
.
Implemented in Hierarchy.
|
pure virtual |
Implemented in Hierarchy.


TileSpec Struct Reference
Detailed Description
Specification of one tile.This structure can be used to specify a tile with specified width and height, number of such tiles (all with unique values), and a char-array tile showing the tile in row-major order.
Definition at line 53 of file pentominoes.cc.
Public Attributes | |
| int | width |
| int | height |
| int | amount |
| const char * | tile |
Member Data Documentation
| int TileSpec::width |
Definition at line 54 of file pentominoes.cc.
| int TileSpec::height |
Definition at line 54 of file pentominoes.cc.
| int TileSpec::amount |
Definition at line 55 of file pentominoes.cc.
| const char* TileSpec::tile |
Definition at line 56 of file pentominoes.cc.
The documentation for this struct was generated from the following file:
- examples/pentominoes.cc (Revision: 5861)


--- layout: post title: New blog, new year, new whatever date: 2010-01-05 19:53:50.000000000 +01:00 type: post parent_id: '0' published: true password: '' status: publish categories: - General tags: [] meta: _edit_last: '3997956' reddit: a:2:{s:5:"count";i:0;s:4:"time";i:1412789100;} author: login: geaaal email<EMAIL_ADDRESS>display_name: Géal first_name: '' last_name: '' ---
Hello, happy readers and indexing bots! Here is my brand new blog!
The old one was getting messy, alterning french and english posts without any reason, and it had no purpose.
So, I present you with my new blog: a place for me to write about fun code, weird bugs, even weirder opinions, and to share a lot of bad puns.
I host it on Wordpress.com, so that its admins do all the boring work in my place. Thanks, guys!
I will copy my tutorials for VLC media player from my old blog to the VideoLAN wiki, and the other posts still useful (if there are ones) will be posted here (dear Wordpress.com admins, could you add the Dotclear importing plugin here, please?).
That's it, have a good time reading this blog, and happy new year!


Across: 1. By which you may hear someone talking of outdoor nuisance (3) 3. Near 28, where pioneer reported infernal wilderness with nasty leech and trolls (6'1 4) 9. Animal, in large part, turned as centrepiece in Orion's belt (7) 10. Primarily where 28 (or majority) is... not Georgia! (7) 11. Free nose reconstruction expected (8) 12. With a tiny bit of 28, state had flipped between binary values (5) 14. Bearing gun was I? Dear me! (7) 15. Repast rudely limited to pastry (7) 17. Tool record is for everyone (3) 18. Vicar: a vanishing part, often taken by grey nomad? (7) 20. Traveling Wilbury or 28 beast? (7) 22. Interesting ladies, not quite perfect (5) 24. Imagined having ring replaced by actual leader of the country (8) 26. Twister's Rent-a-Party (7) 27. Joe or Hannah perhaps, neighbour to 10 (7) 28. New style loo developed for famous 24 across 25 (11) 29. 28 beast at heart, thanklessly returned (3) Down: 1. Give birth to 28 beast (4) 2. Legacy of Nobel's gift... initially proud new movement (9) 3. A bit of typical derangement, legacy of 19 as at 28 (7) 4. Mysterious mumbler, an outdoor worker who may be good at 8 (9) 5. Man wined extravagantly? (5) 6. Mend, sew, iron, and make whiter (7) 7. She inspired with some unique vitality (5) 8. Sport were many fall and some resign, ill, or go limping back (10) 13. Medical specialty which is confused, pricy and hasty (10) 15. With no extremes of acceleration, was "lento" arrangement representative of initially easy pace? (4 5) 16. Contrasting pairs date differently (9) 19. Love salt? Love Energy drink? This could all come back up in a mountain of hot spewing (7) 21. Scout with camera? (7) 23. One gets twisted, using both hands to get sign up (5) 24. Niche locations with no approvals (5) 25. Quiet refuge? (4)


Thanks for visiting my world of code. You can easily find my past, current and future projects here. Contact me if you have any questions.
Welcome to my page!
Download My ResumeOpen Farm is a community driven web app for the urben farmers. Its leveraging technology to address some basic but necessary issues.
LIRI is a Language Interpretation and Recognition Interface. LIRI will be a command line node app that takes in parameters and gives you back data.
Bamazon is POS (point of sales) and store management application written in NodeJS.
Restaurant App for customers to select burgers and update what they have eaten. Its deployed on Heroku.


{%- extends 'base.html' -%} {% set footer_hidden = True %} {% from "macros.html" import screenshot without context %} {%- block content -%}
Jump to: model information | download | share
{{ model.comment|safe}}
{% else %}( this model has no comment )
{% endif %}| body part | {{ model.body_part }} |
| pose | {{ model.pose }} |
| arangement type | {{ model.arrangement }} |
| excited | {{ model.excited }} |
| created | {{ model.created }} |
| released | {{ model.released }} |
| id | {{ model.model_id }} |
| gender | {{ model.gender }}
{% if model.gender_comment %}
Comment: {{ model.gender_comment }} {% endif %} |
| sex | {{ model.sex }}
{% if model.sex_comment %}
Comment: {{ model.sex_comment }} {% endif %} |
| body type | {{ model.body_type }} |
| given birth | {{ model.given_birth }} |
| body history | {% for event in model.history_list %} {{ event }} {% endfor %} |
| tags | {% for tag in model.tags_list %} {{ tag }} {% endfor %} |
Related links |
{% for link in model.link_list %} {% endfor %} |
For informaton on how to 3D print or order 3D prints of these models, please read our model printing guidelines. To download a model or a surface, select a file below:
| STL file format, ready for 3D printing | {{ downloads['solid'][2] }} | {{ downloads['solid'][0] }} download size |
| STL file format, suited for 3D modeling | {{ downloads['surface'][2] }} | {{ downloads['surface'][0] }} download size |
If you don't have access to a 3D printer or know anyone who does, you can also have these models custom printed and mailed to you. If you'd like to order a print, press the button below to open a new tab to start the order.
Unless you are experienced with 3d printing, we recommend that you read our tips on how to order a print. The cost for simple penis or vulva prints (10cm, PLA) will likely €20-€30 ($25-$35), which isn't bad if you don't have access to a printer. Other models, sizes and materials will increase the cost quite a bit.
Note: We are not affiliated with CraftCloud and we do not earn any money referrring you to them. We just think their prices and their web site are a good match for our users. (And their team was helpful!)


Next: Specialized Arrays, Previous: Array Concepts, Up: Array Concepts
An array contains a set of objects called elements that can be referenced individually according to a rectilinear coordinate system.


website frog
home of ben & james
home of james & ben
quality content:
big fart dog
music blog
nbc pilots
im the baby
more soon, maybe


CodeCrew August 2019-Current
University of Phoenix November 2005-July 2007
SouthEastern Paralegal Institute January 2001-December 2001
Austin Peay State University August 1990-June 1994


Try out our Premium Member services: Virtual Legal Assistant, Query Alert Service and an ad-free experience. Free for one month and pay only if you like it.
IN THE HIGH COURT OF JUDICATURE AT PATNA Civil Writ Jurisdiction Case No.18942 of 2015 ====================================================== Samir Kumar .... .... Petitioner/s Versus The State of Bihar & Ors .... .... Respondent/s ====================================================== Appearance : For the Petitioner/s : Mr. Mrigank Mauli, Adv. Mr. Sanket, Adv. Mr. Prince Kumar Mishra, Adv. For the State : Mr. P.K. Verma, AAG5 For BPCB : Mr. Shivendra Kishore, Sr.Adv. ====================================================== CORAM: HONOURABLE THE ACTING CHIEF JUSTICE and HONOURABLE MR. JUSTICE CHAKRADHARI SHARAN SINGH ORAL ORDER
(Per: HONOURABLE MR. JUSTICE CHAKRADHARI SHARAN SINGH) 8 05-02-2016 Heard Mr. Mrigank Mauli, learned counsel for the petitioner, Mr. P.K.Verma, learned AAG5 and Mr. Shivendra Kishore, learned Senior counsel for the respondent Pollution Board.
By an order dated 18.1.2016 passed by this Court certain specific direction had been issued to the respondents, which were considered essential, so as to keep in control the menace of noise pollution, within the municipal areas of the State of Bihar, being caused by the Loudspeakers, Vehicles and Fire Crackers. The order speaks for itself. We had, inter alia, directed the Principal Secretary, Home Department, Government of Bihar, to ensure publication through the Electronic Media for the purpose of notice Patna High Court CWJC No.18942 of 2015 (8) dt.05-02-2016 2 and general awareness among the people about various directions issued by the authorities, for the purpose of controlling noise pollution. It was specifically indicated that any breach of the order of this Court by any person including those who obstruct or intend to obstruct implementation of this order or fail to carry out the order shall be viewed seriously.
Mr. Mrigank Mauli, learned counsel appearing on behalf of the petitioner, submits that the State respondents have miserably failed to comply with the order and noise pollution is being caused within the municipal areas, with impunity as a result of laches on the part of the respondents.
The submission has not been disputed by the learned counsel appearing on behalf of the respondent State of Bihar and the Bihar Pollution Control Board. There is nothing on record to show that paragraph no.18 of the order, whereby following direction was issued, has been implemented:
"18. We direct the Principal Secretary, Home Department, Government of Bihar, to ensure, publication through Print and Electronic Media in order to make people of Bihar aware about the directions issued by the authorities for controlling noise pollution throughout the State of Bihar from time to time and a composite guidelines be issued, in this regard, to be followed throughout the State."
Patna High Court CWJC No.18942 of 2015 (8) dt.05-02-2016 3
Mr. Shivendra Kishore, Learned Senior counsel appearing on behalf of the Bihar Pollution Control Board, has informed us that so far no prosecution has been initiated against any person causing noise pollution in violation of the provisions of the Air (Prevention and Control of Pollution) Act. 1981. It may be noted here that failure to initiate prosecution for violation of the provisions of the Act and the directions issued by this Court may also lead to prosecution of the persons responsible, in accordance with law.
Mr. Shivendra Kihsore has further submitted that there are certain practical aspects and reasons because of which the officials of the Board have so far not been able to prosecute the persons, violating the provisions of the Act and this order. He will be at liberty to file an affidavit enumerating the reasons, which have so far disabled them from implementing the Court's order or initiating prosecution against the erring persons.
Mr. P.K.Verma, learned Addl. Advocate General, appearing on behalf of the State of Bihar, while admitting the fact that the order of this Court has so far not been implemented, would submit that sincere effort is being taken by the State officials to ensure control of noise pollution. He has drawn our attention to the counter affidavit filed on behalf of respondents no. Patna High Court CWJC No.18942 of 2015 (8) dt.05-02-2016 4
1 and 3.
We have perused the said counter affidavit carefully. The contents of the affidavit are not at all satisfactory. What we gather from the affidavits on record and the submissions made on behalf of the parties that this Court's order dated 18.1.2016 has been followed more in breach than in compliance. We take serious note of such situation. We, accordingly, direct the Principal Secretary, Home Department, Government of Bihar, to file an affidavit within ten days from today stating the steps taken for strict compliance of this Court's order dated 18.1.2016, including the action taken against the violators of law and the order of this Court.
Place this matter under the same heading on 18th February, 2016.
(I.A.Ansari,ACJ) Surendra/-
(Chakradhari Sharan Singh, J) U


This is a test page with a few links to test that the Cucumber framework is nicely controlling Selenium.


Welcome {{user}}
Hey! Feel free to see around, there must be a few apps created by me in the "Apps" section.
The landing page is still pretty empty, haven't decided yet how it should look. You can try other Apps, all the *magic* lies there.
Todo App
Chat App
{% endblock home %}


| DOSE: |
|
oral |
Nutmeg |
(ground / crushed) |
When I began abusing nutmeg I was going through a very rough patch in my life, I was very depressed, and my abuse of this terrible spice only served to make things worse.
Around April of 2002 I learned that nutmeg could be used to get high. I was only 15 at the time, and, quite frankly, all I cared about was getting high. I drank and smoked hash quite frequently.
A week or two after I learned about it, I decided to give it a shot and took a tub of the demon spice from my kitchen one night. I dosed at about 8PM that night, taking about 15g. I was awake until around 11PM and by that time I had decided that nought was going to happen and went to sleep.
I awoke the next morning for school in a complete haze.  I managed somehow. At school I just sat around feeling fantastic. I was on exactly the same high as I'd get from my favourite plant, weed, and I was more stoned that I had ever been. My schoolmates all commented on how out of it I looked but I was unable to respond because the drymouth was so bad that I couldn't form a sentence.
The next day I was a little groggy yet I still felt great. Here I was, having discovered something that was as good as weed - hell, it was better than weed. I could get incredibly stoned for two days straight and all for the low low price of £1.99! I was on top of the world!
And thus it continued - I soon fell into a regular pattern of nutmeg use, as often as three times a week but more usually once every week or two. Sometimes I would drink a bottle of wine while I dosed, so that by the time the wine would wear off I'd be buzzing off the meg, as happy as could be without a care in the world, or I'd smoke a few joints while I was peaking to allow for an even better experience. I spent the entire summer in this pattern.
My method of ingestion was not as bad as how other people seem to do it. Rather than use the pre-powdered nutmeg I would buy a packet of whole ones and crush them up in a mortar and pestle until they became small nutmeg-chunks. Washing these down with water left no horrible taste and none of that nutmeg-clinging-to-back-of-throat feeling.
As for the buzz, this is what it was for me: I just felt incredibly stoned. It was almost exactly the same as a cannabis high, only MORE euphoric. Music was particularly excellent and Pick Floyd and Bob Marley would bring me to a state of ecstasy. I also found it alot easier to get absorbed in anything I was reading.
Having read accounts online I would have expected this to be a little more trippy, but the only hallucination I ever experienced on nutmeg was this - sitting watching TV as I came up one night, the sound from the TV faded away and I was suddenly listening to Micheal Jackson's 'Black or White'. This only lasted for a few seconds and then it was gone.
On that particular night I had been trying out a new brand of nutmeg and I had estimated my dose to be 20g. It was actally less than that, though. (This is something to note - I have found that the potency of nutmeg from different sources varies vastly, and I learned this the hard way that night).
After a few hours of TV, when I had pretty much just come up, I felt extremely sleepy (unusual for me to get so tired so early) and decided to go to bed. And off I went.
I awoke at 5AM, after only 4 hours sleep. At first I didn't realise I was awake. In fact, I didn't even realise who I was. All I knew was that the face that was floating around amidst the stars on the ceiling of my bedroom was awfully close, only inches away. I wondered how the ceiling had gotten so close to my bed. It seemed to be getting closer. I lay there confused for a few seconds.
Something's not right, I think to myself.
What could it be?
Hmm... hang on... is it.. yes, that's it, I'm not breathing, that's what's wrong.
*GAASP*
Okay, we sorted out that problem anyway. Now where'd the face from the ceiling go? He must be around here somewhere..
Wait. There it is again. Why aren't I breathing?
*GAAASP*
This is odd. Normally breathing just happens by itself. Here, did the ceiling just get closer? I think it's trying to kill me. It's trying to suffocate me. Oh, no....
*GAAAASP*
That can't be it. Carbon dioxide, that's what it is. The room's filled up with carbon dioxide and that's why I can't breathe. I've got to move, I've got to get out of here.
I black out. I stop breathing.
*GASP*
What? Where am I? Why is it night time?
Oh, yes, that's it. I'm in bed. but why aren't I breathing?
*gasp*
This is starting to scare me. Why can't I feel my left arm? Why is my heart beating so fast?
*gasp*
What does that guy in the ceiling want? I can't feel my face. What did he do to my face?
*gasp*
I ought to get out of here. It's the carbon dioxide. It has to be. I'll just get up and go get some fresh air and I'll be okay.
*GASP*
OH, NO! IF I GET UP MY HEART WILL EXPLODE! My leg feels swollen and it's all numb! One of my arteries must have burst, and now my leg is filling up with blood.
*GASP*
What do I do? What do I do?  What do I do?
*GASP*
Wait, think about this. How did you get here?
*GASP*
Nutmeg, that was it. I took nutmeg last night. I've OD'd on nutmeg.  I can't feel my face. I can't breathe. I've got to get out of here.
I black out. I stop breathing. I awaken with a gasp, and the cycle begins all over again. Suffice to say I spent a good three hours lying in bed, gasping for breath every so often and occasionally blacking out. I was too terrified to move. I stopped hallucinating but I was delusional - I was convinced that an artery in my leg had burst as a result of extremely high blood pressure. I was absolutely certain that I had given myself severe nerve damage from the nutmeg, and hence the numbness in my face and limbs.
I eventually calmed myself down a little and plucked up the courage to go downstairs and tell my mother of what had happened and that I was certain that I was dying. She called an ambulance. I spent several hours lying in an emergency room bed. I was then moved up to a ward which was filled with old men who had to use catheter tubes. The hospital staff wanted to hook me up to one. Not pleasant. I didn't come down fully until about three days later. One thing lasted, though. The left side of my face and my left arm and leg were still partially numb - I could sense temperature and pain, but not pressure. Strange, huh?
To this day I still don't know for sure if nutmeg actually caused me nerve damage or if it's somehow all in my head, but I remain convinced. While it is not as bad as it was when I first got landed in that hospital, I still can't feel pressure properly. Since this experience with nutmeg, I can no longer smoke hash and enjoy it - I associate the buzz with meg too much. The first few times I smoked up after I was in hospital I freaked out bad because, well, I was so aware of my lack of sensation in my face and limbs. It was exactly like being back in that bed, unable to move. Nowadays when I do smoke(very rarely) I don't usually enjoy myself as I just get slightly depressed, but that's all.
I also went, to put it one way, a little crazy after this experience. In addition to bouts of horrible anxiety lasting for days and loads more depression, my thought patterns just became. odd. Very odd. Sometimes my train of thought would skip from one thing to another without any logical connection etc.
This whole ordeal has been the most unpleasant experience of my life.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Metadata file for microbiome.
Description: Metadata information for Microbiome data submission.
| Property | Description | Data Type |
|---|---|---|
|
protocol identifier
required |
Trial identifier used by lead organization, ie. Center for Experimental Therapeutics Program (CTEP) ID or Industry Sponsored ID. This is usually a short identifier. Example: E4412. | < string > |
|
assay creator
required |
Indicates what site is filling out the assay. |
<
string
>
|
|
batch id
required |
Microbiome batch identification number. | < string > |
|
sequencer platform
required |
Sequencer Model, e.g. HiSeq 2500, NextSeq, NovaSeq. |
<
string
>
|
|
forward fastq
required |
Information about a Gzipped FASTQ file. | fastq gz |
|
forward index
required |
Information about a Gzipped FASTQ file. | fastq gz |
|
reverse fastq
required |
Information about a Gzipped FASTQ file. | fastq gz |
|
reverse index
required |
Information about a Gzipped FASTQ file. | fastq gz |
| otu table | Information about a tab Separated file. | tsv |
| summary file | Information about a Portable Document Format file. |
Samples
| Property | Description | Data Type |
|---|---|---|
|
cimac id
required |
Specimen identifier assigned by the CIMAC-CIDC Network. Formatted as CTTTPPPSS.AA for trial code TTT, participant PPP, sample SS, and aliquot AA. |
<
string
>
as regex ^C[A-Z0-9]{3}[A-Z0-9]{3}[A-Z0-9]{2}.[0-9]{2}$
|
|
library yield ng
required |
Resulting yield (in ng) from library construction. | < number , string > |


|
||||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
AbstractGraphics2D
to translate
Java 2D primitives into the SVG format.
See:
Description
| Interface Summary | |
|---|---|
| CachedImageHandler | Extends the default ImageHandler interface with calls to allow caching of raster images in generated SVG content. |
| ErrorConstants | |
| ErrorHandler | The ErrorHandler interface allows you to specialize
how the error will be set on an SVG Element . |
| ExtensionHandler | The ExtensionHandler interface allows the user to handle Java 2D API extensions that map to SVG concepts (such as custom Paints, Composites or BufferedImageOp filters). |
| GenericImageHandler | Extends the default ImageHandler interface with calls to allow caching of raster images in generated SVG content. |
| ImageHandler | This interface allows the user of the Graphics2D SVG generator to decide how to handle images that it renders. |
| StyleHandler | The StyleHandler interface allows you to specialize
how the style will be set on an SVG Element . |
| SVGConverter | Defines the interface for classes that are able to convert part or all of a GraphicContext. |
| SVGDescriptor | Defines the interface for a set of SVG attributes and related definitions. |
| SVGFilterConverter | Defines the interface for classes that are able to convert a BufferedImageOp filter. |
| SVGSyntax | Contains the definition of the SVG tags and attribute names. |
| Class Summary | |
|---|---|
| AbstractImageHandlerEncoder | This abstract implementation of the ImageHandler interface is intended to be the base class for ImageHandlers that generate image files for all the images they handle. |
| AbstractSVGConverter | Abstract class with common utility methods used by subclasses for specific convertion operations. |
| AbstractSVGFilterConverter | Abstract class with common utility methods used by subclasses for specific convertion operations. |
| CachedImageHandlerBase64Encoder | This subclass of ImageHandlerBase64Encoder implements
functionality specific to the cached version of the image
encoder. |
| CachedImageHandlerJPEGEncoder | GenericImageHandler which caches JPEG images. |
| CachedImageHandlerPNGEncoder | GenericImageHandler which caches PNG images. |
| DefaultCachedImageHandler | This class is a default implementation of the GenericImageHandler for handlers implementing a caching strategy. |
| DefaultErrorHandler | The ErrorHandler interface allows you to specialize
how the error will be set on an SVG Element . |
| DefaultExtensionHandler | This implementation of the ExtensionHandler interface always returns null Nodes. |
| DefaultImageHandler | This class provides a default implementation of the ImageHandler interface simply puts a place holder in the xlink:href attribute and sets the width and height of the element. |
| DefaultStyleHandler | The DefaultStyleHandler class provides the default
way to style an SVG Element . |
| DOMGroupManager | This class is used by the Graphics2D SVG Generator to manage a group of Nodes that can later be added to the SVG DOM Tree managed by the DOMTreeManager. |
| DOMTreeManager | This class is used by the SVGGraphics2D SVG Generator to manage addition of new Nodes to the SVG DOM Tree. |
| ImageCacher | This class implements caching functionality for raster images. |
| ImageCacher.Embedded | Cache implementation for images embedded in the SVG file. |
| ImageCacher.External | Cache implementation for file-based images. |
| ImageHandlerBase64Encoder | This implementation of ImageHandler encodes the input image as a PNG image first, then encodes the PNG image using Base64 encoding and uses the result to encoder the image url using the data protocol. |
| ImageHandlerJPEGEncoder | This implementation of the abstract AbstractImageHandlerEncoder class creates JPEG images in the image directory and sets the url pointing to that file in the xlink:href attributes of the image elements it handles. |
| ImageHandlerPNGEncoder | This implementation of the abstract AbstractImageHandlerEncoder class creates PNG images in the image directory and sets the url pointing to that file in the xlink:href attributes of the image elements it handles. |
| SimpleImageHandler | Implements the GenericImageHandler interface and only uses <image> elements. |
| SVGAlphaComposite | Utility class that converts an AlphaComposite object into a set of SVG properties and definitions. |
| SVGArc | Utility class that converts an Arc2D object into a corresponding SVG element, i.e., a path with an elliptical arc and optionally lines.. |
| SVGAttribute | Represents an SVG attribute and provides convenience methods to determine whether or not the attribute applies to a given element type. |
| SVGAttributeMap | Repository of SVG attribute descriptions, accessible by name. |
| SVGBasicStroke | Utility class that converts a Java BasicStroke object into a set of SVG style attributes |
| SVGBufferedImageOp | Utility class that converts a BufferedImageOp object into an SVG filter. |
| SVGClip | Utility class that converts a Path object into an SVG clip |
| SVGClipDescriptor | Describes an SVG clip |
| SVGColor | Utility class that converts a Color object into a set of corresponding SVG attributes. |
| SVGComposite | Utility class that converts a Composite object into a set of SVG properties and definitions. |
| SVGCompositeDescriptor | Used to represent an SVG Composite. |
| SVGConvolveOp | Utility class that converts a ConvolveOp object into an SVG filter descriptor. |
| SVGCSSStyler | This utility class converts a standard SVG document that uses attribute into one that uses the CSS style attribute instead. |
| SVGCustomBufferedImageOp | Utility class that converts an custom BufferedImageOp object into an equivalent SVG filter. |
| SVGCustomComposite | Utility class that converts an custom Composite object into a set of SVG properties and definitions. |
| SVGCustomPaint | Utility class that converts an custom Paint object into a set of SVG properties and definitions. |
| SVGEllipse | Utility class that converts an Ellipse2D object into a corresponding SVG element, i.e., a circle or an ellipse. |
| SVGFilterDescriptor | Used to represent an SVG Composite. |
| SVGFont | Utility class that converts a Font object into a set of SVG font attributes |
| SVGFontDescriptor | Describes an SVG font |
| SVGGeneratorContext | This class contains all non graphical contextual information that
are needed by the SVGGraphics2D to
generate SVG from Java 2D primitives. |
| SVGGeneratorContext.GraphicContextDefaults | Class to describe the GraphicContext defaults to be used. |
| SVGGraphicContext | Represents the SVG equivalent of a Java 2D API graphic context attribute. |
| SVGGraphicContextConverter | This class performs the task of converting the state of the Java 2D API graphic context into a set of graphic attributes. |
| SVGGraphicObjectConverter | |
| SVGGraphics2D | This implementation of the java.awt.Graphics2D abstract class allows users to generate SVG (Scalable Vector Graphics) content from Java code. |
| SVGHintsDescriptor | Describes a set of SVG hints |
| SVGIDGenerator | Generates id for an arbitrary number of prefix |
| SVGLine | Utility class that converts a Line2D object into a corresponding SVG line element. |
| SVGLinearGradient | Utility class that converts a Java GradientPaint into an SVG linear gradient element |
| SVGLookupOp | Utility class that converts a LookupOp object into an SVG filter descriptor. |
| SVGPaint | Utility class that converts a Paint object into an SVG element. |
| SVGPaintDescriptor | Used to represent an SVG Paint. |
| SVGPath | Utility class that converts a Shape object into an SVG path element. |
| SVGPolygon | Utility class that converts a Polygon object into an SVG element. |
| SVGRectangle | Utility class that converts a Rectangle2D or RoundRectangle2D object into an SVG element. |
| SVGRenderingHints | Utility class that converts a RenderingHints object into a set of SVG properties. |
| SVGRescaleOp | Utility class that converts a RescaleOp object into an SVG filter descriptor. |
| SVGShape | Utility class that converts a Shape object into the corresponding SVG element. |
| SVGStrokeDescriptor | Used to represent an SVG Paint. |
| SVGStylingAttributes | Defines the set of attributes from Exchange SVG that are defined as styling properties in Stylable SVG. |
| SVGTexturePaint | Utility class that converts a TexturePaint object into an SVG pattern element |
| SVGTransform | Utility class that converts a GraphicContext transform stack into an SVG transform attribute. |
| SVGTransformDescriptor | Describes an SVG transform |
| SwingSVGPrettyPrint | This class offers a way to create an SVG document with grouping that reflects the Swing composite structure (container/components). |
| Exception Summary | |
|---|---|
| SVGGraphics2DIOException | Thrown when an SVG Generator method receives an illegal argument in parameter. |
| SVGGraphics2DRuntimeException | Thrown when an SVG Generator method receives an illegal argument in parameter. |
Provides an API on top of the
AbstractGraphics2D
to translate
Java 2D primitives into the SVG format.
|
||||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |


I'm a software developer with 5 years of professional experience. I'm interested in all kinds of visual communication, but my major focus is on developing realtime web apps, with mobile & tablet interfaces. I also have skills in other fields like data analysis and reporting.
University of Oxford | JULY 2010
3 Year Course
King's School Worcester | JUNE 2007
2 Year Course
Mobicow.com | 2014 - CURRENT
Freelance | 2012 - 2014
NHC Institute | 2011 - 2012
Red PR & Marketing | 2010 - 2011
Winston Churchill Pub - Montreal, Canada (2011)
Saffrons - Worcester, UK (2010)
The Royal Oak - Oxford, UK (2008)
Baby Love Bar, Oxford. Ran and performed a profitable student club night.
Javascript
PHP
Wordpress
Bootstrap
HTML / CSS
Sys Admin
<EMAIL_ADDRESS>349 St. Marguerite
Montreal, CANADA
H4C 2W9
+1<PHONE_NUMBER>
Available on Request


WITNESS LIST Redistricting Committee May 4, 2006-8:30A Interim Charge #1 On: Flenniken, Terry (21st and 335th District Court) Harvey, Jay (Texas Trail Lawyers Association) Hobbs, Lisa (Supreme Court) Kepple, Robert (Texas Distrct County Attorneys Association) Peeples, David (4th Administrative Judicial Region) Reynolds, Carl (Office of Court Administration, Texas Judicial Council) Schraub, B.B. (3rd Administrative Judicial Region) Underwood, Olen (2nd Administrative Judicial Region)


Maintaining Nifty¶
Documentation¶
Right now there exists five forms of documentation.
Paper¶
README.rst¶
Manual¶
Nifty’s manual gives a broad overview of how the code functions. It is included as a pdf.
.rst Files in the docs/ directory¶
This file, others like it in the docs/ directory and the README are written in reStructuredText. This markup language integrates well with Python’s automatic documentation builder (read Sphinx) and Github as well as being human readable. You can read more about reStructuredText `here.<http://www.sphinx-doc.org/en/stable/rest.html>`_
Comments and DocStrings in Source Code¶
Nifty uses the Google docstring style. Examples of docstrings can be found `here.<http://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html>`_
Other Python comments use the following convention:
- A # is followed by a space and a capital letter.
- All comments end in a period where possible.
Updates¶
Version Numbers¶
Nifty uses semantic versioning(see http://semver.org/). This means version numbers come in
MAJOR.MINOR.PATCH
In brief, when releasing a version of Nifty that is not backward-compatible with old test recipes, or changes break the public API, it is time to increment the MAJOR version number.
..TODO(nat): maybe make this a little clearer.
Code Conventions¶
Nifty was partly written using `atom.<https://atom.io/>`_ Error messages, warnings and updates were written using templates in the included snippets.cson file.
Where possible, nat used 2D (and higher) dimensional lists to implement error checking flags. These are particularly prominent in sort.
Variables and functions were named using conventions in the `Python Style Guide.<https://www.python.org/dev/peps/pep-0008/#descriptive-naming-styles>`_ Specifically a mix of camelCase and lower_case_with_underscores was used.
Future Work¶
- Update config to use .cfg and a config parser instead of .json files, a la space-telescope


WITNESS LIST State Affairs Committee April 13, 1999-11:00A SB 418 FOR: Barkan, Maxine (League of Women Voters of Texas), Austin Lewis, Fred (Coalition for Electronic Filing), Austin Tillotson, Dolph (TDNA/TPA), Houston ON: Harrison, Tom (Texas Ethics Commission), Austin Registering, but not testifying: For: Woodford, Suzy (Common Cause), Austin Written materials submitted: On: Cook, Harold (Texas Democratic Party), Austin SB 1099 Registering, but not testifying: For: Flores, Henry (Texas Telephone Association), Austin Grundman, Rick (Southern Union Gas), Austin Rice, Rell (Southwestern Bell Telephone Co.), Austin On: Kirby, Richard (Texas Department of Transportation), Austin SB 1127 ON: Schlimper, Paul (General Services Commission), Austin Registering, but not testifying: For: Self, Floyd (University of Texas at Austin), Austin Wise, Andrew (American Electronics Association), Austin Wright, Michelle (Apple Computer), Cupertino, CA On: Hill, Cynthia (General Services Commission), Austin Treadway, Tom (General Services Commission), Austin SB 1260 FOR: Balch, Burke J. (Texas Right To Life Committee), Washington, DC Fine, Dr. Robert L. (Baylor Health Care System), Dallas Hooser, Greg (Texas & New Mexico Hospice Association), Austin Rushing, Linda (Texas Conference of Catholic Health Facilities), Austin ON: Lindell, John (Self), Austin Registering, but not testifying: For: Baumbach, Susan (Texas Health Care Association), Austin Berger, Ed (Seton Healthcare Network), Austin Farrow, Larry A. (Texas & New Mexico Hospice Association), Austin Hillier, King (Texas Association of Public & Non-Profit Hospitals), Austin Kral, Joseph A., IV (Texas Right To Life Committee, Inc.), Houston O'Brien,Sister Michelle (Christus Santa Rosa), San Antonio Sjoberg, Elizabeth (Texas Hospital Association), Austin Stanley, Henry (AARP), Austin Tesmer, David (Texas Health Resources), Irving Willmann, James H. (Texas Nurses Association), Austin SB 1314 Registering, but not testifying: On: Flowerday, Paula C. (Texas Racing Commission), Austin Jackson, Sam (Texas Racing Commission), Austin SB 1382 FOR: Westbrook, Redge (Coalition of Texans with Disabilities), Austin ON: Hill, Cynthia (General Services Commission), Austin Jungmann, Doris (Texas Commission for the Blind), Austin Wright, Michelle (Apple Computer), Cupertino, CA Registering, but not testifying: For: Wise, Andrew (American Electronics Association), Austin On: Brandt, C. J., Jr. (Texas Department of Information Resources), Austin SB 1664 FOR: Ash, Robert (El Paso City Employee's Pension Fund), El Paso Hall, Myles (City of El Paso), El Paso Registering, but not testifying: For: Bailey, Ken (Texas State Association of Fire Fighters), Austin


WEEK 12 SUNDAY
Entrance Antiphon
Cf. Ps 27:8-9
The Lord is the strength of his people, a saving refuge for the one he has anointed. Save your people, Lord, and bless your heritage, and govern them forever.
Collect
Grant, O Lord, that we may always revere and love your holy name, for you never deprive of your guidance those you set firm on the foundation of your love. Through our Lord...
Theme of the Sunday: Persecution. This is the theme that binds together all three readings. The light of God disturbs those who prefer to live in darkness and they inevitably react by opposition. Persecution often troubled the lives of the prophets. The first reading reminds us of the prophet Jeremiah. In the gospel Jesus says that persecution is a kind of cloak that his disciples will have to wear if they are to be firm in their beliefs. The second reading compares Adam with Christ and confirms that in the struggle between good and evil, good will always triumph.
FIRST READING Jeremiah 20:10-13
A reading from the Book of Jeremiah
Jeremiah said: I hear many whispering. Terror is on
every side! "Denounce him! Let us denounce him!" say all my familiar
friends, watching for my fall. "Perhaps he will be deceived, then we can overcome him, and take our revenge on him."
But the LORD is with me as a dread warrior; therefore my persecutors will
stumble, they will not overcome me. They will be greatly shamed, for they will
not succeed. Their eternal dishonour will never be forgotten. O LORD of hosts, who
test the righteous, who see the heart and the mind, let me see your vengeance
upon them, for to you have I committed my cause. Sing
to the LORD; praise the LORD! For he has delivered the life
of the needy from the hand of evildoers.
The word of the Lord
RESPONSORIAL PSALM Psalm 69:7-9.13 and 16.32-34 (R. 13c)
R. In your great love, answer me, O Lord.
 To my own kin I have become an outcast, a stranger to the children of
my mother. Zeal for your house consumes me, and taunts against you fall on me.
R. In your great love, answer me, O Lord.
But I pray to you, O LORD, for a time of your
favour. In your great mercy, answer me, O God, with your salvation that never
fails. LORD, answer, for your mercy is kind; in your great compassion, turn
towards me.
R. In your great love, answer me, O Lord.
The poor when they see it will be glad, and God-seeking hearts will revive; for the LORD
listens to the needy, and does not spurn his own in their chains. Let the
heavens and the earth give him praise, the seas and everything that move sin
them.
R. In your great love, answer me, O Lord.
SECOND READING Romans 5:12-15
A reading from the Letter of Saint Paul to the Romans
Brethren: As sin came into the world through one
man and death through sin, and so death spread to all men because all men
sinned-- sin indeed was in the world before the law was given, but sin is not
counted where there is no law. Yet death reigned from Adam to Moses, even over
those whose sins were not like the transgression of Adam, who was a type of the
one who was to come. But the free gift is not like the trespass. For if many
died through one man's trespass, much more have the grace of God and the free
gift in the grace of that one man Jesus Christ abounded for many.
The word of the Lord
ALLELUIA John 15:26.27
R. Alleluia. The Spirit of truth will bear witness to me, says the Lord; and you also are witnesses. R. Alleluia.
GOSPEL Matthew 10:26-33
A reading from the holy Gospel according to Matthew
At that time: Jesus said to his disciples, "Have
no fear of men; for nothing is covered that will not be revealed,
or hidden that will not be known. What I tell you in the dark, utter in the
light; and what you hear whispered, proclaim upon the housetops.  Are not two sparrows sold for a penny? And
not one of them will fall to the ground without your Father's will.  Fear not, therefore; you are of more
value than many sparrows. So every one who acknowledges me before men, I also
will acknowledge before my Father who is in heaven; but whoever denies me
before men, I also will deny before my Father who is in heaven.
The Gospel of the Lord.
Theme of the Sunday: Jesus Rules the Waves of the Sea.
The first reading is a kind of introduction to the gospel, so that we can understand the symbolic meaning attached to the sea in the culture of the Jewish people. The gospel shows us a Jesus who rules the waves of the sea and so reveals that he has the power of God. Linked to this main symbolic element we have other significant details: the night, the boat, Jesus asleep, the storm, the direction of the boat. All these elements are rich in meaning. The confidence we have from knowing that Christ is always with us is the theme of the second reading.
FIRST READING Job 38:1.8-11
A reading from the Book of Job
The LORD answered Job out of the whirlwind: "Who
shut in the sea with doors, when it burst forth from the womb; when I made
clouds its garment, and thick darkness its swaddling band, and prescribed
bounds for it, and set bars and doors, and said, 'Thus far shall you come, and
no farther, and here shall your proud waves be stayed?
The word of the Lord
RESPONSORIAL PSALM Psalm 107:23-24.25-26.28-29.30-31 (R. 1)
R. O give thanks to the Lord for he is good; for his mercy endures for ever!
Some went down to the sea in ships, to trade on the
mighty waters. These have seen the deeds of the LORD, the wonders he does in
the deep.
R. O give thanks to the Lord for he is good; for his mercy
endures for ever!
For he spoke and raised up the storm-wind,
tossing high the waves of the sea that surged to heaven and dropped to the
depths. Their souls melted away in their distress.
R. O give thanks to the Lord for he is good; for his mercy
endures for ever!
Then they cried to the LORD in their need, and he
rescued them from their distress. He stilled the storm to a whisper,
all the waves of the sea were hushed.
R. O give thanks to the Lord for he is good; for his mercy
endures for ever!
They rejoiced because of the calm, and he lead them to the haven they desired. Let them thank the LORD
for his mercy, his wonders for the children of men.
R. O give thanks to the Lord for he is good; for his mercy
endures for ever!
SECOND READING 2 Corinthians 5:14-17
A reading from the second Letter of Saint Paul to
the Corinthians
Brethren: The love of Christ urges us on, because
we are convinced that one has died for all; therefore all have died.  From now on, therefore, we regard
no one according to the flesh; even though we once regarded Christ according to
the flesh, we regard him thus no longer. Therefore, if any one is in Christ, he
is a new creation; the old has passed away, behold, the new has come.
The word of the Lord
ALLELUIA Luke 7:16
R. Alleluia. A great prophet has arisen among us, and God has visited his people. R. Alleluia.
GOSPEL Mark 4:35-41
A reading from the holy Gospel according to Mark
On that day, when evening had come, Jesus said to his
disciples, "Let us go across to the other side."  And other boats
were with him. And a great storm of wind arose, and the waves beat into the
boat, so that the boat was already filling. But he was in the stern, asleep on
the cushion; and they woke him and said to him, "Teacher, do you not care
if we perish?" And he awoke and rebuked the wind, and said to the sea,
"Peace! Be still!" And the wind ceased, and there was a great calm. He
said to them, "Why are you afraid? Have you no faith?" And they were
filled with awe, and said to one another, "Who then is this, that even
wind and sea obey him?"
The Gospel of the Lord.
Theme of the Sunday: Who Is Jesus?
From the time of the apostles, people have expressed their opinions about Jesus. Who is he really for the people of our time and for our communities: the Messiah or one of the prophets? The question is not out of place because many Christians do not yet understand who he really is. The gospel shows the way of the true messiah. He gives his life for all people. To really believe that Jesus is the Messiah is to follow him along this way of self-giving. The first reading tells us about a man who was killed; only after his death did people realise that he was a just man.  The second reading invites us, through the image of clothes, to put on love.
FIRST READING Zechariah 12:10-11; 13:1
A reading from the Book of the Prophet Zechariah
Thus says the LORD: "I will pour out on the
house of David and the inhabitants of
The word of the Lord
RESPONSORIAL PSALM Psalm 63:1abc.1d-3.4-5.7-8 (R. see 1b)
R. For you my soul is thirsting, O Lord, my God.
O God, you are my God; at dawn I seek you; for you
my soul is thirsting.
R. For you my soul is thirsting, O Lord, my God.
I have come before you in the sanctuary, to behold
your strength and your glory.
R. For you my soul is thirsting, O Lord, my God.
  For you my soul is thirsting, O Lord, my God.
For you have been my strength; in the shadow of
your wings I rejoice. My soul clings fast to you; your right hand upholds me.
R. For you my soul is thirsting, O Lord, my God.
SECOND READING Galatians 3:26-29
A reading from the Book of Isaiah
Brethren: In Christ Jesus you are all sons of God,
through faith. For as many of you as were baptized into Christ have put on
Christ. There is neither Jew nor Greek, there is neither slave nor free, there
is neither male nor female; for you are all one in Christ Jesus. And if you are
Christs, then you are Abraham's offspring, heirs
according to promise.
The word of the Lord
ALLELUIA John 10:27
R. Alleluia. My sheep hear my voice, says the Lord; I know them, and they follow me. R. Alleluia.
GOSPEL Luke 9:18-24
A reading from the holy Gospel according to Luke
It happened that as Jesus was praying alone the
disciples were with him; and he asked them, "Who do the people say that I
am?" And they answered, "John the Baptist; but others say, Elijah;
and others, that one of the old prophets has risen."
And he said to them, "But who do you say that I am?" And Peter
answered, "The Christ of God." But he charged and commanded them to
tell this to no one, saying, "The Son of man must suffer many things, and
be rejected by the elders and chief priests and scribes, and be killed, and on
the third day be raised." And he said to all, "If any man would come
after me, let him deny himself and take up his cross daily and follow me.
Prayer over the Offerings
Receive, O Lord, the sacrifice of conciliation and praise and grant that,
cleansed by its action, we may make offering of a heart pleasing to you. Through Christ our Lord.
Communion Antiphon
Ps 144:15
The eyes of all look to you, Lord, and you give them their food in due season.
Or
Jn 10:11.15
I am the Good Shepherd, and I lay down my life for my sheep, says the Lord.
Prayer after Communion
Renewed and nourished by the Sacred Body and
Precious Blood of your Son, we ask of your mercy, O Lord, that what we celebrate with constant devotion may be our sure pledge of redemption. Through Christ our Lord.


ECE497 IoT Raspberry Pi Server
Image of Raspberry Pi LCD and LEDs - updated following each actuator update.