├── Beispiele ├── animatedGUI.hs └── staticGUI.hs ├── Folien ├── MeanStd.dump-simpl ├── animated_gui.mp4 ├── eventrate.prof ├── simple_gui.mp4 ├── vorlesung1.pdf ├── vorlesung10.pdf ├── vorlesung11.pdf ├── vorlesung12.pdf ├── vorlesung13.pdf ├── vorlesung14.pdf ├── vorlesung2.pdf ├── vorlesung3.pdf ├── vorlesung4.pdf ├── vorlesung5.pdf ├── vorlesung6.pdf ├── vorlesung7.pdf └── vorlesung8.pdf ├── LICENSE ├── README.md └── Übungen ├── Blatt1.hs ├── Blatt1.lhs ├── Blatt1.md ├── Blatt1.pdf ├── Blatt1.solution.hs ├── Blatt2.hs ├── Blatt2.lhs ├── Blatt2.md ├── Blatt2.pdf ├── Blatt2.solution.hs ├── Blatt3.hs ├── Blatt3.lhs ├── Blatt3.md ├── Blatt3.pdf ├── Blatt3.solution.hs ├── Blatt4.md ├── Blatt4.pdf ├── Blatt4_data ├── CSV_Dummy_hard.csv ├── CSV_Dummy_problematic.csv └── CSV_Dummy_simple.csv ├── Blatt5-solution ├── Blatt5-solution.cabal ├── LICENSE ├── Setup.hs ├── app │ ├── Main-Animated.hs │ └── Main-Static.hs ├── src │ ├── GUI.hs │ ├── Parser.hs │ └── Types.hs ├── stack.yaml ├── test │ └── Spec.hs └── time_ip.csv ├── Blatt5.md ├── Blatt5.pdf ├── Blatt5_data └── time_ip.csv ├── Projekte.md └── Projekte.pdf /Beispiele/animatedGUI.hs: -------------------------------------------------------------------------------- 1 | import Data.Monoid 2 | import Graphics.Gloss 3 | import Graphics.Gloss.Data.Color (makeColor, red) 4 | 5 | main :: IO () 6 | main = animate (InWindow "Spin around" (500,500) (100,100)) 7 | (makeColor 0.9 0.9 0.9 1) 8 | (\time -> 9 | Pictures [ Color red $ ThickCircle 500 1000 10 | , Rotate (time/60*360) 11 | $ Text 12 | $ show (round time) <> " Seconds" 13 | ]) 14 | -------------------------------------------------------------------------------- /Beispiele/staticGUI.hs: -------------------------------------------------------------------------------- 1 | import Graphics.Gloss 2 | import Graphics.Gloss.Data.Color (makeColor, red) 3 | 4 | main :: IO () 5 | main = display (InWindow "Hello World" (500,500) (100,100)) 6 | (makeColor 0.9 0.9 0.9 1) 7 | (Pictures [ Color red (Circle 1000) 8 | , Text "Hello World Text" 9 | ]) 10 | -------------------------------------------------------------------------------- /Folien/MeanStd.dump-simpl: -------------------------------------------------------------------------------- 1 | 2 | ==================== Tidy Core ==================== 3 | 2016-07-08 09:46:52.527923 UTC 4 | 5 | Result size of Tidy Core = {terms: 508, types: 449, coercions: 32} 6 | 7 | $WUT :: Double -> Int -> UnpackedTuple 8 | $WUT = 9 | \ (dt :: Double) (dt :: Int) -> 10 | case dt of _ { D# dt -> case dt of _ { I# dt -> UT dt dt } } 11 | 12 | $WST :: forall a b. a -> b -> StrictTuple a b 13 | $WST = 14 | \ (@ a) (@ b) (dt :: a) (dt :: b) -> 15 | case dt of dt { __DEFAULT -> 16 | case dt of dt { __DEFAULT -> ST dt dt } 17 | } 18 | 19 | a :: Vector Double -> Id Int 20 | a = 21 | \ (x :: Vector Double) -> 22 | case x `cast` ... of _ { Vector ipv ipv1 ipv2 -> 23 | (I# ipv1) `cast` ... 24 | } 25 | 26 | mean1 :: Integer 27 | mean1 = __integer 0 28 | 29 | mean2 :: Integer 30 | mean2 = __integer 1 31 | 32 | $slength :: Vector Double -> Int 33 | $slength = a `cast` ... 34 | 35 | mean06' :: forall a. (Fractional a, Unbox a) => Vector a -> a 36 | mean06' = 37 | \ (@ a2) 38 | ($dFractional :: Fractional a2) 39 | ($dUnbox :: Unbox a2) 40 | (eta :: Vector a2) -> 41 | let { 42 | $dNum :: Num a2 43 | $dNum = $p1Fractional $dFractional } in 44 | / $dFractional 45 | (case eta of v2 { __DEFAULT -> 46 | let { 47 | $dVector :: Vector Vector a2 48 | $dVector = $p1Unbox $dUnbox } in 49 | case basicLength $dVector v2 of _ { I# ipv -> 50 | let { 51 | f :: a2 -> a2 -> a2 52 | f = + $dNum } in 53 | letrec { 54 | $wfoldlM'_loop :: SPEC -> a2 -> Int# -> Id a2 55 | $wfoldlM'_loop = 56 | \ (w :: SPEC) (w1 :: a2) (ww :: Int#) -> 57 | case w of _ { __DEFAULT -> 58 | case w1 of z2 { __DEFAULT -> 59 | case tagToEnum# (>=# ww ipv) of _ { 60 | False -> 61 | case basicUnsafeIndexM $dVector $fMonadBox v2 (I# ww) 62 | of _ { Box x1 -> 63 | $wfoldlM'_loop SPEC (f z2 x1) (+# ww 1) 64 | }; 65 | True -> z2 `cast` ... 66 | } 67 | } 68 | }; } in 69 | ($wfoldlM'_loop SPEC (fromInteger $dNum mean1) 0) `cast` ... 70 | } 71 | }) 72 | (fromInteger 73 | $dNum 74 | (case length ($p1Unbox $dUnbox) eta of _ { I# i -> 75 | smallInteger i 76 | })) 77 | 78 | mean01 :: forall a. Fractional a => [a] -> a 79 | mean01 = 80 | \ (@ a2) ($dFractional :: Fractional a2) (eta :: [a2]) -> 81 | let { 82 | $dNum :: Num a2 83 | $dNum = $p1Fractional $dFractional } in 84 | let { 85 | ds :: (a2, Integer) 86 | ds = 87 | letrec { 88 | $wgo1 :: [a2] -> a2 -> Integer -> (# a2, Integer #) 89 | $wgo1 = 90 | \ (w :: [a2]) (ww :: a2) (ww1 :: Integer) -> 91 | case w of _ { 92 | [] -> (# ww, ww1 #); 93 | : y ys -> $wgo1 ys (+ $dNum ww y) (plusInteger ww1 mean2) 94 | }; } in 95 | case $wgo1 eta (fromInteger $dNum mean1) mean1 96 | of _ { (# ww1, ww2 #) -> 97 | (ww1, ww2) 98 | } } in 99 | / $dFractional 100 | (case ds of _ { (s, l) -> s }) 101 | (fromInteger $dNum (case ds of _ { (s, l) -> l })) 102 | 103 | mean02 :: forall a. Fractional a => [a] -> a 104 | mean02 = 105 | \ (@ a2) ($dFractional :: Fractional a2) (eta :: [a2]) -> 106 | let { 107 | $dNum :: Num a2 108 | $dNum = $p1Fractional $dFractional } in 109 | let { 110 | ds :: (a2, Integer) 111 | ds = 112 | letrec { 113 | $wgo1 :: [a2] -> a2 -> Integer -> (# a2, Integer #) 114 | $wgo1 = 115 | \ (w :: [a2]) (ww :: a2) (ww1 :: Integer) -> 116 | case w of _ { 117 | [] -> (# ww, ww1 #); 118 | : y ys -> $wgo1 ys (+ $dNum ww y) (plusInteger ww1 mean2) 119 | }; } in 120 | case $wgo1 eta (fromInteger $dNum mean1) mean1 121 | of _ { (# ww1, ww2 #) -> 122 | (ww1, ww2) 123 | } } in 124 | / $dFractional 125 | (case ds of _ { (s, l) -> s }) 126 | (fromInteger $dNum (case ds of _ { (s, l) -> l })) 127 | 128 | mean03 :: forall a. Fractional a => [a] -> a 129 | mean03 = 130 | \ (@ a2) ($dFractional :: Fractional a2) (eta :: [a2]) -> 131 | let { 132 | $dNum :: Num a2 133 | $dNum = $p1Fractional $dFractional } in 134 | let { 135 | ds :: (a2, Integer) 136 | ds = 137 | letrec { 138 | $wgo1 :: [a2] -> a2 -> Integer -> (# a2, Integer #) 139 | $wgo1 = 140 | \ (w :: [a2]) (ww :: a2) (ww1 :: Integer) -> 141 | case w of _ { 142 | [] -> (# ww, ww1 #); 143 | : y ys -> 144 | case ww of a3 { __DEFAULT -> 145 | case ww1 of b { __DEFAULT -> 146 | $wgo1 ys (+ $dNum a3 y) (plusInteger b mean2) 147 | } 148 | } 149 | }; } in 150 | case $wgo1 eta (fromInteger $dNum mean1) mean1 151 | of _ { (# ww1, ww2 #) -> 152 | (ww1, ww2) 153 | } } in 154 | / $dFractional 155 | (case ds of _ { (s, l) -> s }) 156 | (fromInteger $dNum (case ds of _ { (s, l) -> l })) 157 | 158 | mean04 :: forall a. Fractional a => [a] -> a 159 | mean04 = 160 | \ (@ a2) ($dFractional :: Fractional a2) (eta :: [a2]) -> 161 | let { 162 | $dNum :: Num a2 163 | $dNum = $p1Fractional $dFractional } in 164 | let { 165 | ds :: StrictTuple a2 Integer 166 | ds = 167 | case fromInteger $dNum mean1 of dt { __DEFAULT -> 168 | letrec { 169 | $wgo1 :: [a2] -> a2 -> Integer -> (# a2, Integer #) 170 | $wgo1 = 171 | \ (w :: [a2]) (ww :: a2) (ww1 :: Integer) -> 172 | case w of _ { 173 | [] -> (# ww, ww1 #); 174 | : y ys -> 175 | case + $dNum ww y of dt1 { __DEFAULT -> 176 | case plusInteger ww1 mean2 of dt2 { __DEFAULT -> $wgo1 ys dt1 dt2 } 177 | } 178 | }; } in 179 | case $wgo1 eta dt mean1 of _ { (# ww1, ww2 #) -> ST ww1 ww2 } 180 | } } in 181 | / $dFractional 182 | (case ds of _ { ST s l -> s }) 183 | (fromInteger $dNum (case ds of _ { ST s l -> l })) 184 | 185 | Rec { 186 | $wgo :: [Double] -> Double# -> Int# -> (# Double#, Int# #) 187 | $wgo = 188 | \ (w :: [Double]) (ww :: Double#) (ww1 :: Int#) -> 189 | case w of _ { 190 | [] -> (# ww, ww1 #); 191 | : y ys -> case y of _ { D# y1 -> $wgo ys (+## ww y1) (+# ww1 1) } 192 | } 193 | end Rec } 194 | 195 | mean05 :: [Double] -> Double 196 | mean05 = 197 | \ (w :: [Double]) -> 198 | case $wgo w 0.0 0 of _ { (# ww1, ww2 #) -> 199 | case /## ww1 (int2Double# ww2) of ww3 { __DEFAULT -> D# ww3 } 200 | } 201 | 202 | mean06 :: forall a. (Fractional a, Unbox a) => Vector a -> a 203 | mean06 = 204 | \ (@ a2) 205 | ($dFractional :: Fractional a2) 206 | ($dUnbox :: Unbox a2) 207 | (eta :: Vector a2) -> 208 | let { 209 | $dNum :: Num a2 210 | $dNum = $p1Fractional $dFractional } in 211 | / $dFractional 212 | (case eta of v2 { __DEFAULT -> 213 | let { 214 | $dVector :: Vector Vector a2 215 | $dVector = $p1Unbox $dUnbox } in 216 | case basicLength $dVector v2 of _ { I# ipv -> 217 | let { 218 | f :: a2 -> a2 -> a2 219 | f = + $dNum } in 220 | letrec { 221 | $wfoldlM'_loop :: SPEC -> a2 -> Int# -> Id a2 222 | $wfoldlM'_loop = 223 | \ (w :: SPEC) (w1 :: a2) (ww :: Int#) -> 224 | case w of _ { __DEFAULT -> 225 | case w1 of z2 { __DEFAULT -> 226 | case tagToEnum# (>=# ww ipv) of _ { 227 | False -> 228 | case basicUnsafeIndexM $dVector $fMonadBox v2 (I# ww) 229 | of _ { Box x1 -> 230 | $wfoldlM'_loop SPEC (f z2 x1) (+# ww 1) 231 | }; 232 | True -> z2 `cast` ... 233 | } 234 | } 235 | }; } in 236 | ($wfoldlM'_loop SPEC (fromInteger $dNum mean1) 0) `cast` ... 237 | } 238 | }) 239 | (fromInteger 240 | $dNum 241 | (case length ($p1Unbox $dUnbox) eta of _ { I# i -> 242 | smallInteger i 243 | })) 244 | 245 | $wmean07 :: Int# -> Int# -> ByteArray# -> Double# 246 | $wmean07 = 247 | \ (ww :: Int#) (ww1 :: Int#) (ww2 :: ByteArray#) -> 248 | letrec { 249 | $wfoldlM'_loop :: SPEC -> Double# -> Int# -> Double# 250 | $wfoldlM'_loop = 251 | \ (w :: SPEC) (ww3 :: Double#) (ww4 :: Int#) -> 252 | case w of _ { __DEFAULT -> 253 | case tagToEnum# (>=# ww4 ww1) of _ { 254 | False -> 255 | case indexDoubleArray# ww2 (+# ww ww4) of wild { __DEFAULT -> 256 | $wfoldlM'_loop SPEC (+## ww3 wild) (+# ww4 1) 257 | }; 258 | True -> ww3 259 | } 260 | }; } in 261 | case $wfoldlM'_loop SPEC 0.0 0 of ww3 { __DEFAULT -> 262 | case $slength ((Vector ww ww1 ww2) `cast` ...) of _ { I# i -> 263 | /## ww3 (int2Double# i) 264 | } 265 | } 266 | 267 | mean07 :: Vector Double -> Double 268 | mean07 = 269 | \ (w :: Vector Double) -> 270 | case w `cast` ... of _ { Vector ww1 ww2 ww3 -> 271 | case $wmean07 ww1 ww2 ww3 of ww4 { __DEFAULT -> D# ww4 } 272 | } 273 | 274 | 275 | ------ Local rules for imported ids -------- 276 | "SPEC/MeanStd length @ Vector @ Double" [ALWAYS] 277 | forall ($dVector :: Vector Vector Double). 278 | length $dVector 279 | = $slength 280 | 281 | -------------------------------------------------------------------------------- /Folien/animated_gui.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/animated_gui.mp4 -------------------------------------------------------------------------------- /Folien/eventrate.prof: -------------------------------------------------------------------------------- 1 | Wed Jun 29 16:33 2016 Time and Allocation Profiling Report (Final) 2 | 3 | eventrate +RTS -s -p -RTS 2016-06-08-atis-trials/vp09-dotstimuli-noflicker-m-nomakeup-glasses/video_td_080616_141855.val 2016-06-08-atis-trials/vp09-dotstimuli-noflicker-m-nomakeup-glasses/rates.csv 4 | 5 | total time = 44.01 secs (44008 ticks @ 1000 us, 1 processor) 6 | total alloc = 55,502,215,128 bytes (excludes profiling overheads) 7 | 8 | COST CENTRE MODULE %time %alloc 9 | 10 | decodeStreamWith System.IO.Streams.Csv.Decode 50.3 77.9 11 | handleToOutputStream.f System.IO.Streams.Handle 18.0 4.1 12 | encodeRates Main 17.3 10.2 13 | eventRate.go.s' EventDriven.Rate 4.3 2.5 14 | eventRate.go EventDriven.Rate 2.4 1.2 15 | contramap System.IO.Streams.Combinators 1.1 0.7 16 | 17 | 18 | individual inherited 19 | COST CENTRE MODULE no. entries %time %alloc %time %alloc 20 | 21 | MAIN MAIN 729 0 0.0 0.0 100.0 100.0 22 | main Main 1459 0 0.1 0.0 100.0 100.0 23 | main.\ Main 1466 0 0.1 0.0 0.1 0.1 24 | main.\.\ Main 1580 0 0.0 0.0 0.1 0.1 25 | encodeRates Main 1581 0 0.0 0.1 0.0 0.1 26 | withFileAsOutput System.IO.Streams.File 1467 1 0.0 0.0 0.0 0.0 27 | withFileAsInput System.IO.Streams.File 1461 0 0.0 0.0 99.8 99.9 28 | withFileAsInputStartingAt System.IO.Streams.File 1462 1 0.0 0.0 99.8 99.9 29 | withFileAsInputStartingAt.go System.IO.Streams.File 1463 1 0.0 0.0 99.8 99.9 30 | main.\ Main 1465 1 0.0 0.0 99.8 99.9 31 | main.\.\ Main 1473 0 0.0 0.0 0.0 0.0 32 | map System.IO.Streams.Combinators 1489 1 0.0 0.0 0.0 0.0 33 | eventRate EventDriven.Rate 1486 1 0.0 0.0 0.0 0.0 34 | eventRate.go EventDriven.Rate 1502 1 0.0 0.0 0.0 0.0 35 | _read System.IO.Streams.Internal 1508 1 0.0 0.0 0.0 0.0 36 | fromGenerator System.IO.Streams.Internal 1487 1 0.0 0.0 0.0 0.0 37 | fromGenerator.go System.IO.Streams.Internal 1488 1 0.0 0.0 0.0 0.0 38 | fixTimestamps EventDriven.FixTimestamps 1478 0 0.0 0.0 0.0 0.0 39 | concatLists System.IO.Streams.List 1483 1 0.0 0.0 0.0 0.0 40 | concatLists.go System.IO.Streams.List 1514 1 0.0 0.0 0.0 0.0 41 | liftIO System.IO.Streams.Internal 1516 1 0.0 0.0 0.0 0.0 42 | fromGenerator System.IO.Streams.Internal 1484 1 0.0 0.0 0.0 0.0 43 | fromGenerator.go System.IO.Streams.Internal 1485 1 0.0 0.0 0.0 0.0 44 | map System.IO.Streams.Combinators 1482 1 0.0 0.0 0.0 0.0 45 | sGroupBy' EventDriven.FixTimestamps 1479 1 0.0 0.0 0.0 0.0 46 | sGroupBy'.go EventDriven.FixTimestamps 1525 1 0.0 0.0 0.0 0.0 47 | _read System.IO.Streams.Internal 1531 1 0.0 0.0 0.0 0.0 48 | fromGenerator System.IO.Streams.Internal 1480 1 0.0 0.0 0.0 0.0 49 | fromGenerator.go System.IO.Streams.Internal 1481 1 0.0 0.0 0.0 0.0 50 | dlmInputStream EventDriven.IO 1474 1 0.0 0.0 0.0 0.0 51 | dlmInputStream.opts EventDriven.IO 1537 1 0.0 0.0 0.0 0.0 52 | onlyValidRecords System.IO.Streams.Csv.Decode 1476 1 0.0 0.0 0.0 0.0 53 | decodeStreamWith System.IO.Streams.Csv.Decode 1475 1 0.0 0.0 0.0 0.0 54 | withFileAsOutput System.IO.Streams.File 1468 0 0.0 0.0 99.8 99.9 55 | withFileAsOutputExt System.IO.Streams.File 1469 1 0.0 0.0 99.8 99.9 56 | withFileAsOutputExt.\ System.IO.Streams.File 1470 1 0.0 0.0 99.8 99.9 57 | main.\.\ Main 1472 1 0.4 0.0 99.8 99.9 58 | _write System.IO.Streams.Internal 1568 1491109 0.1 0.0 0.1 0.0 59 | dlmInputStream EventDriven.IO 1532 0 0.0 0.0 50.7 78.6 60 | decodeStreamWith System.IO.Streams.Csv.Decode 1535 0 50.3 77.9 50.5 78.6 61 | dispatch System.IO.Streams.Csv.Decode 1536 2198575 0.1 0.1 0.2 0.7 62 | dispatch.feed System.IO.Streams.Csv.Decode 1546 3413 0.0 0.0 0.0 0.0 63 | dispatch.more System.IO.Streams.Csv.Decode 1541 3414 0.0 0.4 0.1 0.6 64 | handleToInputStream System.IO.Streams.Handle 1543 0 0.0 0.0 0.1 0.2 65 | handleToInputStream.f System.IO.Streams.Handle 1544 3414 0.1 0.2 0.1 0.2 66 | _read System.IO.Streams.Internal 1542 3414 0.0 0.0 0.0 0.0 67 | onlyValidRecords System.IO.Streams.Csv.Decode 1533 0 0.1 0.1 0.1 0.1 68 | _read System.IO.Streams.Internal 1534 2191748 0.0 0.0 0.0 0.0 69 | fixTimestamps EventDriven.FixTimestamps 1509 0 0.1 0.0 2.9 2.1 70 | cpuTimestamp EventDriven.Types 1548 4383492 0.0 0.0 0.0 0.0 71 | sGroupBy' EventDriven.FixTimestamps 1521 0 0.0 0.2 0.5 0.7 72 | sGroupBy'.go EventDriven.FixTimestamps 1526 2191747 0.2 0.4 0.2 0.4 73 | yield System.IO.Streams.Internal 1549 5 0.0 0.0 0.0 0.0 74 | unG System.IO.Streams.Internal 1547 60907 0.0 0.0 0.0 0.0 75 | fromGenerator System.IO.Streams.Internal 1522 0 0.0 0.0 0.3 0.1 76 | fromGenerator.go System.IO.Streams.Internal 1523 0 0.0 0.0 0.3 0.1 77 | fromGenerator.go.\ System.IO.Streams.Internal 1524 6 0.0 0.0 0.3 0.1 78 | sGroupBy'.go EventDriven.FixTimestamps 1614 0 0.3 0.1 0.3 0.1 79 | unG System.IO.Streams.Internal 1616 2130845 0.0 0.0 0.0 0.0 80 | yield System.IO.Streams.Internal 1615 0 0.0 0.0 0.0 0.0 81 | fromGenerator.go.step System.IO.Streams.Internal 1550 5 0.0 0.0 0.0 0.0 82 | unG System.IO.Streams.Internal 1551 5 0.0 0.0 0.0 0.0 83 | map System.IO.Streams.Combinators 1518 0 0.0 0.0 0.8 0.4 84 | map.g System.IO.Streams.Combinators 1519 6 0.0 0.0 0.8 0.4 85 | fixTimestampGroup EventDriven.FixTimestamps 1554 5 0.5 0.2 0.8 0.4 86 | fixTimestampGroup.endTs EventDriven.FixTimestamps 1559 5 0.0 0.0 0.0 0.0 87 | timestamp EventDriven.Types 1560 5 0.0 0.0 0.0 0.0 88 | fixTimestampGroup.endCPU EventDriven.FixTimestamps 1557 5 0.0 0.0 0.0 0.0 89 | cpuTimestamp EventDriven.Types 1558 5 0.0 0.0 0.0 0.0 90 | fixTimestampGroup.\ EventDriven.FixTimestamps 1556 1491109 0.3 0.2 0.3 0.2 91 | timestamp EventDriven.Types 1561 1491109 0.0 0.0 0.0 0.0 92 | _read System.IO.Streams.Internal 1520 6 0.0 0.0 0.0 0.0 93 | concatLists System.IO.Streams.List 1510 0 0.0 0.0 1.4 0.9 94 | concatLists.go System.IO.Streams.List 1515 0 0.0 0.0 0.4 0.3 95 | concatLists.chunk System.IO.Streams.List 1553 5 0.3 0.3 0.4 0.3 96 | yield System.IO.Streams.Internal 1555 1491109 0.1 0.0 0.1 0.0 97 | unG System.IO.Streams.Internal 1552 5 0.0 0.0 0.0 0.0 98 | _read System.IO.Streams.Internal 1517 6 0.0 0.0 0.0 0.0 99 | fromGenerator System.IO.Streams.Internal 1511 0 0.2 0.0 1.0 0.6 100 | fromGenerator.go System.IO.Streams.Internal 1512 0 0.1 0.0 0.9 0.6 101 | fromGenerator.go.\ System.IO.Streams.Internal 1513 1491110 0.1 0.0 0.8 0.6 102 | concatLists.go System.IO.Streams.List 1600 0 0.0 0.0 0.6 0.5 103 | concatLists.chunk System.IO.Streams.List 1601 0 0.5 0.3 0.6 0.5 104 | unG System.IO.Streams.Internal 1603 1491114 0.0 0.0 0.0 0.0 105 | yield System.IO.Streams.Internal 1602 0 0.0 0.2 0.0 0.2 106 | fromGenerator.go.step System.IO.Streams.Internal 1562 1491109 0.1 0.1 0.1 0.1 107 | unG System.IO.Streams.Internal 1563 1491109 0.0 0.0 0.0 0.0 108 | eventRate EventDriven.Rate 1498 0 0.1 0.0 7.8 4.1 109 | eventRate.go EventDriven.Rate 1504 1491109 0.4 0.2 0.4 0.2 110 | eventRate.go.s' EventDriven.Rate 1587 1 0.0 0.0 0.0 0.0 111 | timestamp EventDriven.Types 1589 1 0.0 0.0 0.0 0.0 112 | eventRate.go.s'.\ EventDriven.Rate 1588 1 0.0 0.0 0.0 0.0 113 | timestamp EventDriven.Types 1590 1 0.0 0.0 0.0 0.0 114 | eventRate.go.rate EventDriven.Rate 1586 1 0.0 0.0 0.0 0.0 115 | timestamp EventDriven.Types 1578 1 0.0 0.0 0.0 0.0 116 | yield System.IO.Streams.Internal 1565 1 0.0 0.0 0.0 0.0 117 | unG System.IO.Streams.Internal 1564 1 0.0 0.0 0.0 0.0 118 | fromGenerator System.IO.Streams.Internal 1499 0 0.1 0.0 7.3 3.9 119 | fromGenerator.go System.IO.Streams.Internal 1500 0 0.1 0.0 7.2 3.9 120 | fromGenerator.go.\ System.IO.Streams.Internal 1501 1491110 0.1 0.0 7.1 3.9 121 | eventRate.go EventDriven.Rate 1595 0 2.0 1.0 7.0 3.8 122 | eventRate.go.s' EventDriven.Rate 1606 1491108 4.3 2.5 4.8 2.6 123 | timestamp EventDriven.Types 1609 1490724 0.2 0.0 0.2 0.0 124 | eventRate.go.s'.\ EventDriven.Rate 1607 2981832 0.3 0.0 0.3 0.0 125 | timestamp EventDriven.Types 1608 1491108 0.0 0.0 0.0 0.0 126 | eventRate.go.rate EventDriven.Rate 1605 1491108 0.1 0.0 0.1 0.0 127 | timestamp EventDriven.Types 1604 1491108 0.0 0.0 0.0 0.0 128 | unG System.IO.Streams.Internal 1599 2982217 0.0 0.0 0.0 0.0 129 | yield System.IO.Streams.Internal 1598 1491108 0.1 0.0 0.1 0.0 130 | fromGenerator.go.step System.IO.Streams.Internal 1566 1491109 0.0 0.1 0.0 0.1 131 | unG System.IO.Streams.Internal 1567 1491109 0.0 0.0 0.0 0.0 132 | map System.IO.Streams.Combinators 1495 0 0.1 0.0 17.9 10.3 133 | map.g System.IO.Streams.Combinators 1496 1491110 0.5 0.1 17.8 10.3 134 | encodeRates Main 1579 1491109 17.2 10.1 17.2 10.1 135 | _read System.IO.Streams.Internal 1497 1491110 0.0 0.0 0.0 0.0 136 | _read System.IO.Streams.Internal 1494 1 0.0 0.0 0.0 0.0 137 | encodeUtf8 System.IO.Streams.Text 1492 0 0.0 0.0 20.0 4.8 138 | contramap System.IO.Streams.Combinators 1493 1 1.1 0.7 20.0 4.8 139 | unlines System.IO.Streams.ByteString 1570 0 0.2 0.0 18.8 4.1 140 | unlines.\ System.IO.Streams.ByteString 1571 1491109 0.3 0.0 18.7 4.1 141 | handleToOutputStream System.IO.Streams.Handle 1573 0 0.3 0.0 18.4 4.1 142 | handleToOutputStream.f System.IO.Streams.Handle 1574 2982218 18.0 4.1 18.0 4.1 143 | _write System.IO.Streams.Internal 1572 1491109 0.0 0.0 0.0 0.0 144 | _write System.IO.Streams.Internal 1569 1491109 0.0 0.0 0.0 0.0 145 | unlines System.IO.Streams.ByteString 1490 1 0.0 0.0 0.0 0.0 146 | unlines.\ System.IO.Streams.ByteString 1591 0 0.0 0.0 0.0 0.0 147 | _write System.IO.Streams.Internal 1592 1 0.0 0.0 0.0 0.0 148 | handleToOutputStream System.IO.Streams.Handle 1471 1 0.0 0.0 0.0 0.0 149 | handleToInputStream System.IO.Streams.Handle 1464 1 0.0 0.0 0.0 0.0 150 | CAF:main1 Main 1456 0 0.0 0.0 0.0 0.0 151 | main Main 1458 1 0.0 0.0 0.0 0.0 152 | CAF:main4 Main 1454 0 0.0 0.0 0.0 0.0 153 | main Main 1582 0 0.0 0.0 0.0 0.0 154 | main.\ Main 1583 0 0.0 0.0 0.0 0.0 155 | main.\.\ Main 1584 0 0.0 0.0 0.0 0.0 156 | encodeRates Main 1585 0 0.0 0.0 0.0 0.0 157 | CAF:$fFromRecordAddressEvent1 EventDriven.Types 1323 0 0.0 0.0 0.0 0.0 158 | CAF:dlmInputStream2 EventDriven.IO 1306 0 0.0 0.0 0.0 0.0 159 | dlmInputStream EventDriven.IO 1538 0 0.0 0.0 0.0 0.0 160 | dlmInputStream.opts EventDriven.IO 1539 0 0.0 0.0 0.0 0.0 161 | CAF:delimiter EventDriven.IO 1305 0 0.0 0.0 0.0 0.0 162 | delimiter EventDriven.IO 1540 1 0.0 0.0 0.0 0.0 163 | CAF:eventRate5 EventDriven.Rate 1303 0 0.0 0.0 0.0 0.0 164 | eventRate EventDriven.Rate 1505 0 0.0 0.0 0.0 0.0 165 | eventRate.go EventDriven.Rate 1506 0 0.0 0.0 0.0 0.0 166 | liftIO System.IO.Streams.Internal 1507 1 0.0 0.0 0.0 0.0 167 | CAF:fixTimestamps1 EventDriven.FixTimestamps 1301 0 0.0 0.0 0.0 0.0 168 | fixTimestamps EventDriven.FixTimestamps 1477 1 0.0 0.0 0.0 0.0 169 | CAF:fixTimestamps2 EventDriven.FixTimestamps 1300 0 0.0 0.0 0.0 0.0 170 | fixTimestamps EventDriven.FixTimestamps 1527 0 0.0 0.0 0.0 0.0 171 | sGroupBy' EventDriven.FixTimestamps 1528 0 0.0 0.0 0.0 0.0 172 | sGroupBy'.go EventDriven.FixTimestamps 1529 0 0.0 0.0 0.0 0.0 173 | liftIO System.IO.Streams.Internal 1530 1 0.0 0.0 0.0 0.0 174 | CAF Data.Csv.Incremental 1293 0 0.0 0.0 0.0 0.0 175 | CAF Data.Csv.Conversion 1291 0 0.0 0.0 0.0 0.0 176 | CAF TextShow.Data.Floating 871 0 0.0 0.0 0.0 0.0 177 | CAF System.IO.Streams.ByteString 865 0 0.0 0.0 0.0 0.0 178 | unlines System.IO.Streams.ByteString 1593 0 0.0 0.0 0.0 0.0 179 | unlines.\ System.IO.Streams.ByteString 1594 0 0.0 0.0 0.0 0.0 180 | CAF System.IO.Streams.File 863 0 0.0 0.0 0.0 0.0 181 | withFileAsInput System.IO.Streams.File 1460 1 0.0 0.0 0.0 0.0 182 | CAF System.IO.Streams.List 862 0 0.0 0.0 0.0 0.0 183 | concatLists System.IO.Streams.List 1610 0 0.0 0.0 0.0 0.0 184 | concatLists.go System.IO.Streams.List 1611 0 0.0 0.0 0.0 0.0 185 | concatLists.chunk System.IO.Streams.List 1612 0 0.0 0.0 0.0 0.0 186 | return System.IO.Streams.Internal 1613 1 0.0 0.0 0.0 0.0 187 | CAF System.IO.Streams.Text 861 0 0.0 0.0 0.0 0.0 188 | encodeUtf8 System.IO.Streams.Text 1491 1 0.0 0.0 0.0 0.0 189 | CAF System.IO.Streams.Internal 860 0 0.0 0.0 0.0 0.0 190 | yield System.IO.Streams.Internal 1596 0 0.0 0.0 0.0 0.0 191 | return System.IO.Streams.Internal 1597 1 0.0 0.0 0.0 0.0 192 | >>= System.IO.Streams.Internal 1503 1 0.0 0.0 0.0 0.0 193 | CAF System.IO.Streams.Handle 859 0 0.0 0.0 0.0 0.0 194 | bUFSIZ System.IO.Streams.Handle 1545 1 0.0 0.0 0.0 0.0 195 | CAF Data.Text.Internal.Builder.Int.Digits 798 0 0.0 0.0 0.0 0.0 196 | CAF GHC.IO.Encoding 780 0 0.0 0.0 0.0 0.0 197 | CAF GHC.IO.Handle.FD 777 0 0.0 0.0 0.0 0.0 198 | CAF GHC.IO.FD 766 0 0.0 0.0 0.0 0.0 199 | CAF GHC.TopHandler 761 0 0.0 0.0 0.0 0.0 200 | CAF GHC.Conc.Signal 755 0 0.0 0.0 0.0 0.0 201 | CAF GHC.IO.Encoding.Iconv 752 0 0.0 0.0 0.0 0.0 202 | -------------------------------------------------------------------------------- /Folien/simple_gui.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/simple_gui.mp4 -------------------------------------------------------------------------------- /Folien/vorlesung1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/vorlesung1.pdf -------------------------------------------------------------------------------- /Folien/vorlesung10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/vorlesung10.pdf -------------------------------------------------------------------------------- /Folien/vorlesung11.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/vorlesung11.pdf -------------------------------------------------------------------------------- /Folien/vorlesung12.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/vorlesung12.pdf -------------------------------------------------------------------------------- /Folien/vorlesung13.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/vorlesung13.pdf -------------------------------------------------------------------------------- /Folien/vorlesung14.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/vorlesung14.pdf -------------------------------------------------------------------------------- /Folien/vorlesung2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/vorlesung2.pdf -------------------------------------------------------------------------------- /Folien/vorlesung3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/vorlesung3.pdf -------------------------------------------------------------------------------- /Folien/vorlesung4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/vorlesung4.pdf -------------------------------------------------------------------------------- /Folien/vorlesung5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/vorlesung5.pdf -------------------------------------------------------------------------------- /Folien/vorlesung6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/vorlesung6.pdf -------------------------------------------------------------------------------- /Folien/vorlesung7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/vorlesung7.pdf -------------------------------------------------------------------------------- /Folien/vorlesung8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Folien/vorlesung8.pdf -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Dieses Werk ist unter einer Creative Commons Lizenz vom Typ Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 4.0 International zugänglich. 2 | 3 | Um eine Kopie dieser Lizenz einzusehen, konsultieren Sie http://creativecommons.org/licenses/by-nc-sa/4.0/ oder wenden Sie sich brieflich an Creative Commons, Postfach 1866, Mountain View, California, 94042, USA. 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vorlesung2016 2 | Folien und Übungsaufgaben für unsere Vorlesung 3 | 4 | Lizenz: CC-BY-NC-SA. Für weitere Informationen siehe LICENSE 5 | -------------------------------------------------------------------------------- /Übungen/Blatt1.hs: -------------------------------------------------------------------------------- 1 | {- 2 | Übungsblatt 1 3 | ============= 4 | 5 | Typtheorie 6 | ---------- 7 | 8 | Schreiben Sie alle **möglichen** Implementationen der folgenden 9 | Funktionen. Wozu könnte `fun2` nützlich sein? 10 | -} 11 | 12 | fun1 :: a -> a 13 | fun1 = _fun1 14 | 15 | fun2 :: a -> b -> a 16 | fun2 = _fun2 17 | 18 | fun3 :: (Eq a) => a -> a -> Bool 19 | fun3 = _fun3 20 | 21 | {- 22 | Wir haben in der Vorlesung parametrisierte Typen kennengelernt. Der 23 | simpelste hiervon ist `Identity`, der nur einen anderen Typen einpackt. 24 | -} 25 | 26 | data Identity a = Identity a 27 | 28 | {- Diese Definition stellt uns automatisch den Konstruktor 29 | `Identity :: a -> Identity a` zur Verfügung, der ein `a` einpackt. 30 | Schreiben Sie die Funktion 31 | -} 32 | 33 | unIdentity :: Identity a -> a 34 | unIdentity = _unIdentity 35 | 36 | {- 37 | welche diesen Vorgang wieder rückgängig macht. 38 | 39 | Angenommen, Sie hätten nun ein Wert vom Typen `Identity a` und eine 40 | Funktion mit dem Typen `a -> b`. Wie wenden Sie diese auf das `a` 41 | "innerhalb" des `Identity` an um ein `Identity b` herzustellen? 42 | Schreiben Sie also eine Funktion 43 | -} 44 | 45 | mapIdentity :: (a -> b) -> Identity a -> Identity b 46 | mapIdentity = _mapIdentity 47 | 48 | {- 49 | **Hinweis:** Es gibt *zwei* prinzipielle Vorgehen dieses zu 50 | implementieren. Kommen Sie auf beide? 51 | 52 | Funktionen sind auch nur Typen 53 | ------------------------------ 54 | 55 | Datentypen können auch Funktionen enthalten. Sehen Sie sich einmal den 56 | Datentypen 57 | -} 58 | 59 | data Pred a = Pred (a -> Bool) 60 | 61 | {- 62 | an. Hier wird ein Prädikat definiert, welches (gegeben einen Datentyp 63 | `a`) eine Funktion gespeichert hat, die `a` in einen `Bool` umwandeln 64 | kann (etwa um irgendwas zu filtern/selektieren/löschen/..., wenn man 65 | dies an eine weitere Funktion übergibt). 66 | 67 | Auch hier können Sie eine Funktion schreiben, die das `Pred a` wieder 68 | "auspackt". Definieren Sie 69 | -} 70 | 71 | unPred :: Pred a -> (a -> Bool) 72 | unPred = _unPred 73 | 74 | {- 75 | Da Haskell-Funktionen aber "gecurried" sind (mehr dazu in der 76 | Vorlesung), können Sie die Klammern hinten in der Signatur auch 77 | weglassen und erhalten `unPred :: Pred a -> a -> Bool`, was man zugleich 78 | als "wende `Pred a` an, wenn du ein `a` bekommst" lesen kann. In der Tat 79 | sind beide Funktionen identisch (wieso?). 80 | 81 | Bonus 82 | 83 | Was für eine Funktion bräuchten Sie um ein `Pred a` in ein `Pred b` 84 | umzuwandeln? Können Sie diese implementieren? 85 | -} 86 | 87 | mapPred :: _fun -> Pred a -> Pred b 88 | mapPred = _mapPred 89 | 90 | {- 91 | Neue Typen erfinden 92 | ------------------- 93 | 94 | In Haskell ist ein zentraler Vorgehenspunkt das Definieren und Verwenden 95 | von eigenen Datentypen. Zur Erinnerung; es gibt zwei Möglichkeiten, die 96 | man miteinander kombinieren kann: `data Prod a b c = Prod a b c` 97 | (Produkttyp) benötigt sowohl `a`, `b` als auch `c` um einen Wert zu 98 | erzeugen, `data Sum a b = Sum1 a | Sum2 b` (Summentyp) braucht entweder 99 | ein `a` um durch den Konstruktor `Sum1` ein `Sum a b` zu erzeugen oder 100 | ein `b` um durch den Konstruktor `Sum2` ein `Sum a b` zu erzeugen. 101 | 102 | Definieren Sie einen Datentypen `Vielleicht a`, der zwei Konstruktoren 103 | besitzt: Einen Konstruktor, mit dem durch ein `a` ein `Vielleicht a` 104 | konstruiert wird und ein zweiter Konstruktor, der keinen Wert nimmt, 105 | sondern die "Abwesenheit eines `a`" symbolisieren soll. 106 | -} 107 | 108 | data Vielleicht a = Exercise 109 | 110 | {- 111 | Können Sie hier eine Funktion schreiben, die das `a` extrahiert? Wenn 112 | ja, implementieren Sie diese; wenn nein, geben Sie eine kurze 113 | Begründung. 114 | 115 | Wie würden Sie mittels einer Funktion `a -> b` ein `Vielleicht a` in ein 116 | `Vielleicht b` wandeln? Implementieren Sie 117 | -} 118 | 119 | mapVielleicht :: (a -> b) -> Vielleicht a -> Vielleicht b 120 | mapVielleicht = _mapVielleicht 121 | 122 | {- 123 | Bonus 124 | 125 | Man kann Typen natürlich auch Schachteln. Worin liegt eigentlich der 126 | Unterschied zwischen einem `Pred (Vielleicht a)` und einem 127 | `Vielleicht (Pred a)`? Oder sind diese identisch? 128 | -} 129 | -------------------------------------------------------------------------------- /Übungen/Blatt1.lhs: -------------------------------------------------------------------------------- 1 | Übungsblatt 1 2 | ============= 3 | 4 | Typtheorie 5 | ---------- 6 | 7 | Schreiben Sie alle **möglichen** Implementationen der folgenden 8 | Funktionen. Wozu könnte `fun2` nützlich sein? 9 | 10 | > fun1 :: a -> a 11 | > fun1 = _fun1 12 | > 13 | > fun2 :: a -> b -> a 14 | > fun2 = _fun2 15 | > 16 | > fun3 :: (Eq a) => a -> a -> Bool 17 | > fun3 = _fun3 18 | 19 | Wir haben in der Vorlesung parametrisierte Typen kennengelernt. Der 20 | simpelste hiervon ist `Identity`, der nur einen anderen Typen einpackt. 21 | 22 | > data Identity a = Identity a 23 | 24 | Diese Definition stellt uns automatisch den Konstruktor 25 | `Identity :: a -> Identity a` zur Verfügung, der ein `a` einpackt. 26 | Schreiben Sie die Funktion 27 | 28 | > unIdentity :: Identity a -> a 29 | > unIdentity = _unIdentity 30 | 31 | welche diesen Vorgang wieder rückgängig macht. 32 | 33 | Angenommen, Sie hätten nun ein Wert vom Typen `Identity a` und eine 34 | Funktion mit dem Typen `a -> b`. Wie wenden Sie diese auf das `a` 35 | "innerhalb" des `Identity` an um ein `Identity b` herzustellen? 36 | Schreiben Sie also eine Funktion 37 | 38 | > mapIdentity :: (a -> b) -> Identity a -> Identity b 39 | > mapIdentity = _mapIdentity 40 | 41 | **Hinweis:** Es gibt *zwei* prinzipielle Vorgehen dieses zu 42 | implementieren. Kommen Sie auf beide? 43 | 44 | Funktionen sind auch nur Typen 45 | ------------------------------ 46 | 47 | Datentypen können auch Funktionen enthalten. Sehen Sie sich einmal den 48 | Datentypen 49 | 50 | > data Pred a = Pred (a -> Bool) 51 | 52 | an. Hier wird ein Prädikat definiert, welches (gegeben einen Datentyp 53 | `a`) eine Funktion gespeichert hat, die `a` in einen `Bool` umwandeln 54 | kann (etwa um irgendwas zu filtern/selektieren/löschen/..., wenn man 55 | dies an eine weitere Funktion übergibt). 56 | 57 | Auch hier können Sie eine Funktion schreiben, die das `Pred a` wieder 58 | "auspackt". Definieren Sie 59 | 60 | > unPred :: Pred a -> (a -> Bool) 61 | > unPred = _unPred 62 | 63 | Da Haskell-Funktionen aber "gecurried" sind (mehr dazu in der 64 | Vorlesung), können Sie die Klammern hinten in der Signatur auch 65 | weglassen und erhalten `unPred :: Pred a -> a -> Bool`, was man zugleich 66 | als "wende `Pred a` an, wenn du ein `a` bekommst" lesen kann. In der Tat 67 | sind beide Funktionen identisch (wieso?). 68 | 69 | Bonus 70 | 71 | Was für eine Funktion bräuchten Sie um ein `Pred a` in ein `Pred b` 72 | umzuwandeln? Können Sie diese implementieren? 73 | 74 | > mapPred :: _fun -> Pred a -> Pred b 75 | > mapPred = _mapPred 76 | 77 | Neue Typen erfinden 78 | ------------------- 79 | 80 | In Haskell ist ein zentraler Vorgehenspunkt das Definieren und Verwenden 81 | von eigenen Datentypen. Zur Erinnerung; es gibt zwei Möglichkeiten, die 82 | man miteinander kombinieren kann: `data Prod a b c = Prod a b c` 83 | (Produkttyp) benötigt sowohl `a`, `b` als auch `c` um einen Wert zu 84 | erzeugen, `data Sum a b = Sum1 a | Sum2 b` (Summentyp) braucht entweder 85 | ein `a` um durch den Konstruktor `Sum1` ein `Sum a b` zu erzeugen oder 86 | ein `b` um durch den Konstruktor `Sum2` ein `Sum a b` zu erzeugen. 87 | 88 | Definieren Sie einen Datentypen `Vielleicht a`, der zwei Konstruktoren 89 | besitzt: Einen Konstruktor, mit dem durch ein `a` ein `Vielleicht a` 90 | konstruiert wird und ein zweiter Konstruktor, der keinen Wert nimmt, 91 | sondern die "Abwesenheit eines `a`" symbolisieren soll. 92 | 93 | > data Vielleicht a = Exercise 94 | 95 | Können Sie hier eine Funktion schreiben, die das `a` extrahiert? Wenn 96 | ja, implementieren Sie diese; wenn nein, geben Sie eine kurze 97 | Begründung. 98 | 99 | Wie würden Sie mittels einer Funktion `a -> b` ein `Vielleicht a` in ein 100 | `Vielleicht b` wandeln? Implementieren Sie 101 | 102 | > mapVielleicht :: (a -> b) -> Vielleicht a -> Vielleicht b 103 | > mapVielleicht = _mapVielleicht 104 | 105 | Bonus 106 | 107 | Man kann Typen natürlich auch Schachteln. Worin liegt eigentlich der 108 | Unterschied zwischen einem `Pred (Vielleicht a)` und einem 109 | `Vielleicht (Pred a)`? Oder sind diese identisch? 110 | -------------------------------------------------------------------------------- /Übungen/Blatt1.md: -------------------------------------------------------------------------------- 1 | -- Übungsblatt 1 2 | -- ============= 3 | -- 4 | -- Typtheorie 5 | -- ---------- 6 | -- 7 | -- Schreiben Sie alle **möglichen** Implementationen der folgenden 8 | -- Funktionen. Wozu könnte `fun2` nützlich sein? 9 | 10 | fun1 :: a -> a 11 | fun1 a = a 12 | 13 | -- id 14 | 15 | fun2 :: a -> b -> a 16 | fun2 a _ = a 17 | 18 | fun3 :: (Eq a) => a -> a -> Bool 19 | fun3 _ _ = True 20 | fun3 _ _ = False 21 | fun3 = (==) 22 | fun3 = (/=) 23 | 24 | -- Wir haben in der Vorlesung parametrisierte Typen kennengelernt. Der 25 | -- simpelste hiervon ist `Identity`, der nur einen anderen Typen einpackt. 26 | 27 | data Identity a = Identity a 28 | 29 | -- Diese Definition stellt uns automatisch den Konstruktor 30 | -- `Identity :: a -> Identity a` zur Verfügung, der ein `a` einpackt. 31 | -- Schreiben Sie die Funktion 32 | 33 | unIdentity :: Identity a -> a 34 | unIdentity (Identity a) = a 35 | 36 | -- welche diesen Vorgang wieder rückgängig macht. 37 | -- 38 | -- Angenommen, Sie hätten nun ein Wert vom Typen `Identity a` und eine 39 | -- Funktion mit dem Typen `a -> b`. Wie wenden Sie diese auf das `a` 40 | -- "innerhalb" des `Identity` an um ein `Identity b` herzustellen? 41 | -- Schreiben Sie also eine Funktion 42 | 43 | mapIdentity :: (a -> b) -> Identity a -> Identity b 44 | mapIdentity f a = Identity . f . unIdentity 45 | 46 | --mapIdentity f (Identity a) = Identity (f a) 47 | 48 | -- **Hinweis:** Es gibt *zwei* prinzipielle Vorgehen dieses zu 49 | -- implementieren. Kommen Sie auf beide? 50 | -- 51 | -- Funktionen sind auch nur Typen 52 | -- ------------------------------ 53 | -- 54 | -- Datentypen können auch Funktionen enthalten. Sehen Sie sich einmal den 55 | -- Datentypen 56 | 57 | data Pred a = Pred (a -> Bool) 58 | 59 | -- an. Hier wird ein Prädikat definiert, welches (gegeben einen Datentyp 60 | -- `a`) eine Funktion gespeichert hat, die `a` in einen `Bool` umwandeln 61 | -- kann (etwa um irgendwas zu filtern/selektieren/löschen/..., wenn man 62 | -- dies an eine weitere Funktion übergibt). 63 | -- 64 | -- Auch hier können Sie eine Funktion schreiben, die das `Pred a` wieder 65 | -- "auspackt". Definieren Sie 66 | 67 | unPred :: Pred a -> a -> Bool 68 | unPred (Pred a) = a 69 | 70 | -- Da Haskell-Funktionen aber "gecurried" sind (mehr dazu in der 71 | -- Vorlesung), können Sie die Klammern hinten in der Signatur auch 72 | -- weglassen und erhalten `unPred :: Pred a -> a -> Bool`, was man zugleich 73 | -- als "wende `Pred a` an, wenn du ein `a` bekommst" lesen kann. In der Tat 74 | -- sind beide Funktionen identisch (wieso?). 75 | -- 76 | -- Bonus 77 | -- 78 | -- Was für eine Funktion bräuchten Sie um ein `Pred a` in ein `Pred b` 79 | -- umzuwandeln? Können Sie diese implementieren? 80 | 81 | mapPred :: _fun -> Pred a -> Pred b 82 | mapPred f (Pred a) = _mapPred 83 | 84 | -- Neue Typen erfinden 85 | -- ------------------- 86 | -- 87 | -- In Haskell ist ein zentraler Vorgehenspunkt das Definieren und Verwenden 88 | -- von eigenen Datentypen. Zur Erinnerung; es gibt zwei Möglichkeiten, die 89 | -- man miteinander kombinieren kann: `data Prod a b c = Prod a b c` 90 | -- (Produkttyp) benötigt sowohl `a`, `b` als auch `c` um einen Wert zu 91 | -- erzeugen, `data Sum a b = Sum1 a | Sum2 b` (Summentyp) braucht entweder 92 | -- ein `a` um durch den Konstruktor `Sum1` ein `Sum a b` zu erzeugen oder 93 | -- ein `b` um durch den Konstruktor `Sum2` ein `Sum a b` zu erzeugen. 94 | -- 95 | -- Definieren Sie einen Datentypen `Vielleicht a`, der zwei Konstruktoren 96 | -- besitzt: Einen Konstruktor, mit dem durch ein `a` ein `Vielleicht a` 97 | -- konstruiert wird und ein zweiter Konstruktor, der keinen Wert nimmt, 98 | -- sondern die "Abwesenheit eines `a`" symbolisieren soll. 99 | 100 | data Vielleicht a = Exercise 101 | 102 | -- Können Sie hier eine Funktion schreiben, die das `a` extrahiert? Wenn 103 | -- ja, implementieren Sie diese; wenn nein, geben Sie eine kurze 104 | -- Begründung. 105 | -- 106 | -- Wie würden Sie mittels einer Funktion `a -> b` ein `Vielleicht a` in ein 107 | -- `Vielleicht b` wandeln? Implementieren Sie 108 | 109 | mapVielleicht :: (a -> b) -> Vielleicht a -> Vielleicht b 110 | mapVielleicht = _mapVielleicht 111 | 112 | -- Bonus 113 | -- 114 | -- Man kann Typen natürlich auch Schachteln. Worin liegt eigentlich der 115 | -- Unterschied zwischen einem `Pred (Vielleicht a)` und einem 116 | -- `Vielleicht (Pred a)`? Oder sind diese identisch? 117 | -------------------------------------------------------------------------------- /Übungen/Blatt1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Übungen/Blatt1.pdf -------------------------------------------------------------------------------- /Übungen/Blatt1.solution.hs: -------------------------------------------------------------------------------- 1 | -- Übungsblatt 1 2 | -- ============= 3 | -- 4 | -- Typtheorie 5 | -- ---------- 6 | -- 7 | -- Schreiben Sie alle **möglichen** Implementationen der folgenden 8 | -- Funktionen. Wozu könnte `fun2` nützlich sein? 9 | 10 | fun1 :: a -> a 11 | fun1 a = a 12 | 13 | -- id 14 | 15 | fun2 :: a -> b -> a 16 | fun2 a _ = a 17 | 18 | fun3 :: (Eq a) => a -> a -> Bool 19 | fun3 _ _ = True 20 | --fun3 _ _ = False 21 | --fun3 = (==) 22 | --fun3 = (/=) 23 | 24 | -- Wir haben in der Vorlesung parametrisierte Typen kennengelernt. Der 25 | -- simpelste hiervon ist `Identity`, der nur einen anderen Typen einpackt. 26 | 27 | data Identity a = Identity a 28 | 29 | -- Diese Definition stellt uns automatisch den Konstruktor 30 | -- `Identity :: a -> Identity a` zur Verfügung, der ein `a` einpackt. 31 | -- Schreiben Sie die Funktion 32 | 33 | unIdentity :: Identity a -> a 34 | unIdentity (Identity a) = a 35 | 36 | -- welche diesen Vorgang wieder rückgängig macht. 37 | -- 38 | -- Angenommen, Sie hätten nun ein Wert vom Typen `Identity a` und eine 39 | -- Funktion mit dem Typen `a -> b`. Wie wenden Sie diese auf das `a` 40 | -- "innerhalb" des `Identity` an um ein `Identity b` herzustellen? 41 | -- Schreiben Sie also eine Funktion 42 | 43 | mapIdentity :: (a -> b) -> Identity a -> Identity b 44 | mapIdentity f = Identity . f . unIdentity 45 | 46 | --mapIdentity f (Identity a) = Identity (f a) 47 | 48 | -- **Hinweis:** Es gibt *zwei* prinzipielle Vorgehen dieses zu 49 | -- implementieren. Kommen Sie auf beide? 50 | -- 51 | -- Funktionen sind auch nur Typen 52 | -- ------------------------------ 53 | -- 54 | -- Datentypen können auch Funktionen enthalten. Sehen Sie sich einmal den 55 | -- Datentypen 56 | 57 | data Pred a = Pred (a -> Bool) 58 | 59 | -- an. Hier wird ein Prädikat definiert, welches (gegeben einen Datentyp 60 | -- `a`) eine Funktion gespeichert hat, die `a` in einen `Bool` umwandeln 61 | -- kann (etwa um irgendwas zu filtern/selektieren/löschen/..., wenn man 62 | -- dies an eine weitere Funktion übergibt). 63 | -- 64 | -- Auch hier können Sie eine Funktion schreiben, die das `Pred a` wieder 65 | -- "auspackt". Definieren Sie 66 | 67 | unPred :: Pred a -> a -> Bool 68 | unPred (Pred a) = a 69 | 70 | -- Da Haskell-Funktionen aber "gecurried" sind (mehr dazu in der 71 | -- Vorlesung), können Sie die Klammern hinten in der Signatur auch 72 | -- weglassen und erhalten `unPred :: Pred a -> a -> Bool`, was man zugleich 73 | -- als "wende `Pred a` an, wenn du ein `a` bekommst" lesen kann. In der Tat 74 | -- sind beide Funktionen identisch (wieso?). 75 | -- 76 | -- Bonus 77 | -- 78 | -- Was für eine Funktion bräuchten Sie um ein `Pred a` in ein `Pred b` 79 | -- umzuwandeln? Können Sie diese implementieren? 80 | 81 | mapPred :: (b -> a) -> Pred a -> Pred b 82 | mapPred f (Pred a) = Pred (a . f) 83 | 84 | -- Neue Typen erfinden 85 | -- ------------------- 86 | -- 87 | -- In Haskell ist ein zentraler Vorgehenspunkt das Definieren und Verwenden 88 | -- von eigenen Datentypen. Zur Erinnerung; es gibt zwei Möglichkeiten, die 89 | -- man miteinander kombinieren kann: `data Prod a b c = Prod a b c` 90 | -- (Produkttyp) benötigt sowohl `a`, `b` als auch `c` um einen Wert zu 91 | -- erzeugen, `data Sum a b = Sum1 a | Sum2 b` (Summentyp) braucht entweder 92 | -- ein `a` um durch den Konstruktor `Sum1` ein `Sum a b` zu erzeugen oder 93 | -- ein `b` um durch den Konstruktor `Sum2` ein `Sum a b` zu erzeugen. 94 | -- 95 | -- Definieren Sie einen Datentypen `Vielleicht a`, der zwei Konstruktoren 96 | -- besitzt: Einen Konstruktor, mit dem durch ein `a` ein `Vielleicht a` 97 | -- konstruiert wird und ein zweiter Konstruktor, der keinen Wert nimmt, 98 | -- sondern die "Abwesenheit eines `a`" symbolisieren soll. 99 | 100 | data Vielleicht a = Etwas a 101 | | Nichts 102 | 103 | -- Können Sie hier eine Funktion schreiben, die das `a` extrahiert? Wenn 104 | -- ja, implementieren Sie diese; wenn nein, geben Sie eine kurze 105 | -- Begründung. 106 | -- 107 | -- Wie würden Sie mittels einer Funktion `a -> b` ein `Vielleicht a` in ein 108 | -- `Vielleicht b` wandeln? Implementieren Sie 109 | 110 | mapVielleicht :: (a -> b) -> Vielleicht a -> Vielleicht b 111 | mapVielleicht f (Etwas a) = Etwas (f a) 112 | mapVielleicht f Nichts = Nichts 113 | 114 | -- Bonus 115 | -- 116 | -- Man kann Typen natürlich auch Schachteln. Worin liegt eigentlich der 117 | -- Unterschied zwischen einem `Pred (Vielleicht a)` und einem 118 | -- `Vielleicht (Pred a)`? Oder sind diese identisch? 119 | 120 | fun4 :: Pred (Vielleicht a) -> x 121 | fun4 (Pred a) = undefined 122 | 123 | fun5 :: Vielleicht (Pred a) -> x 124 | fun5 (Etwas (Pred a)) = undefined 125 | fun5 Nichts = undefined 126 | 127 | 128 | main = putStrLn "compiles" 129 | -------------------------------------------------------------------------------- /Übungen/Blatt2.hs: -------------------------------------------------------------------------------- 1 | -- # Übungsblatt 2 2 | -- 3 | -- ## Throat-Clearing 4 | -- 5 | -- a.k.a. Imports, damit der Code funktioniert. 6 | 7 | import Data.Functor 8 | import Data.Monoid 9 | 10 | -- ## Functor 11 | -- 12 | -- Sie haben in der Vorlesung die Typklasse `Functor` kennengelernt. Zur Erinnerung: 13 | -- 14 | -- class Functor f where 15 | -- fmap :: (a -> b) -> f a -> f b 16 | -- 17 | -- Nehmen sie an, sie hätten folgende Datentypen gegeben, für die alle eine `Functor`-Instanz existiert und eindeutig ist: 18 | 19 | data Identity a = Identity { unIdentity :: a } 20 | 21 | data Vielleicht a = Etwas a 22 | | Nichts 23 | 24 | data EntwederOder b a = Entweder a 25 | | Oder b 26 | 27 | data GameVector b a = V3 a a a 28 | | VStrange [a] 29 | | Neighbours [GameVector b a] 30 | | EntwederOder b (GameVector b a) 31 | 32 | -- Schreiben sie hierzu die jeweiligen `Functor`-Instanzen. 33 | -- 34 | -- ## Besser und allgemeiner 35 | -- 36 | -- Vereinfachen und verallgemeinern sie folgenden Ausdrücke so weit wie möglich und geben die sie dadurch entstehenden Typsignaturen an. 37 | -- Bedenken sie, dass wenn sie auf eine Typklasse abstrahieren, sie die gesamten Gesetze der Typklasse benutzen können. 38 | -- 39 | -- Kann die Funktion nachher mehr als vorher? 40 | -- 41 | -- *Bonus*: Hat sich an der Laufzeit etwas verändert? 42 | 43 | mystery1 :: [[a]] -> [[a]] 44 | mystery1 = map (++[]) 45 | 46 | mystery2 :: (Eq a) => a -> a -> a -> Bool 47 | mystery2 x y z 48 | | x == y || y == z = True 49 | | x == y && y == z = True 50 | | x /= z = False 51 | | y /= z = False 52 | | x == y || y /= z = True 53 | | otherwise = False 54 | 55 | mystery3 :: Eq a => (a -> a) -> a -> [a] -> [a] 56 | mystery3 f a l = post a l' 57 | where 58 | l' = map f l 59 | post a (x:xs) 60 | | a == x = x : post a xs 61 | | otherwise = post a xs 62 | post _ [] = [] 63 | 64 | mystery4 :: (Int -> Bool) 65 | -> Vielleicht (EntwederOder String Int) 66 | -> Vielleicht (EntwederOder String Bool) 67 | mystery4 f (Etwas (Entweder a)) = Etwas . Entweder . f $ a 68 | mystery4 _ (Etwas (Oder b)) = Etwas (Oder b) 69 | mystery4 _ Nichts = Nichts 70 | 71 | -- ## Bonus 72 | -- 73 | -- Es gibt von dem bekannten Spiel 2048 eine Haskell-Implementation für die Kommandozeile in unter 100 Zeilen. Diese ist zu finde unter 74 | -- https://github.com/gregorulm/h2048/blob/master/h2048.hs 75 | -- 76 | -- Sie können diesen Code mit `GHC` kompilieren oder im `ghci` ausführen (`main` ist die Start-Funktion). 77 | -- 78 | -- Was für Prinzipielle Vorgehenspunkte können sie erkennen? 79 | -- Eine kleine Erklärung gibt es im Blog der Erstellers: http://gregorulm.com/2048-in-90-lines-haskell/ 80 | -- 81 | -- Keine Angst, sie müssen dies noch nicht verstehen, aber es soll verdeutlichen, wie viel man mit extrem wenig erreichen kann. Viele der Abgabeprojekte werden in dieser Größenordnung liegen (aber meist noch so etwas wie ein GUI o.ä. benötigen). Versuchen sie einfach den Code kaputtzuspielen (z.b. Tasten ändern, Siegbedingung ändern, Cheats einbauen, ...). 82 | -- 83 | -- Viel Spass beim Spielen! :) 84 | -------------------------------------------------------------------------------- /Übungen/Blatt2.lhs: -------------------------------------------------------------------------------- 1 | Übungsblatt 2 2 | ============= 3 | 4 | Throat-Clearing 5 | --------------- 6 | 7 | a.k.a. Imports, damit der Code funktioniert. 8 | 9 | > import Data.Functor 10 | > import Data.Monoid 11 | 12 | Functor 13 | ------- 14 | 15 | Sie haben in der Vorlesung die Typklasse `Functor` kennengelernt. Zur 16 | Erinnerung: 17 | 18 | class Functor f where 19 | fmap :: (a -> b) -> f a -> f b 20 | 21 | Nehmen sie an, sie hätten folgende Datentypen gegeben, für die alle eine 22 | `Functor`-Instanz existiert und eindeutig ist: 23 | 24 | > data Identity a = Identity { unIdentity :: a } 25 | > 26 | > data Vielleicht a = Etwas a 27 | > | Nichts 28 | > 29 | > data EntwederOder b a = Entweder a 30 | > | Oder b 31 | > 32 | > data GameVector b a = V3 a a a 33 | > | VStrange [a] 34 | > | Neighbours [GameVector b a] 35 | > | EntwederOder b (GameVector b a) 36 | 37 | Schreiben sie hierzu die jeweiligen `Functor`-Instanzen. 38 | 39 | Besser und allgemeiner 40 | ---------------------- 41 | 42 | Vereinfachen und verallgemeinern sie folgenden Ausdrücke so weit wie 43 | möglich und geben die sie dadurch entstehenden Typsignaturen an. 44 | Bedenken sie, dass wenn sie auf eine Typklasse abstrahieren, sie die 45 | gesamten Gesetze der Typklasse benutzen können. 46 | 47 | Kann die Funktion nachher mehr als vorher? 48 | 49 | *Bonus*: Hat sich an der Laufzeit etwas verändert? 50 | 51 | > mystery1 :: [[a]] -> [[a]] 52 | > mystery1 = map (++[]) 53 | > 54 | > mystery2 :: (Eq a) => a -> a -> a -> Bool 55 | > mystery2 x y z 56 | > | x == y || y == z = True 57 | > | x == y && y == z = True 58 | > | x /= z = False 59 | > | y /= z = False 60 | > | x == y || y /= z = True 61 | > | otherwise = False 62 | > 63 | > mystery3 :: Eq a => (a -> a) -> a -> [a] -> [a] 64 | > mystery3 f a l = post a l' 65 | > where 66 | > l' = map f l 67 | > post a (x:xs) 68 | > | a == x = x : post a xs 69 | > | otherwise = post a xs 70 | > post _ [] = [] 71 | > 72 | > mystery4 :: (Int -> Bool) 73 | > -> Vielleicht (EntwederOder String Int) 74 | > -> Vielleicht (EntwederOder String Bool) 75 | > mystery4 f (Etwas (Entweder a)) = Etwas . Entweder . f $ a 76 | > mystery4 _ (Etwas (Oder b)) = Etwas (Oder b) 77 | > mystery4 _ Nichts = Nichts 78 | 79 | Bonus 80 | ----- 81 | 82 | Es gibt von dem bekannten Spiel 2048 eine Haskell-Implementation für die 83 | Kommandozeile in unter 100 Zeilen. Diese ist zu finde unter 84 | https://github.com/gregorulm/h2048/blob/master/h2048.hs 85 | 86 | Sie können diesen Code mit `GHC` kompilieren oder im `ghci` ausführen 87 | (`main` ist die Start-Funktion). 88 | 89 | Was für Prinzipielle Vorgehenspunkte können sie erkennen? Eine kleine 90 | Erklärung gibt es im Blog der Erstellers: 91 | http://gregorulm.com/2048-in-90-lines-haskell/ 92 | 93 | Keine Angst, sie müssen dies noch nicht verstehen, aber es soll 94 | verdeutlichen, wie viel man mit extrem wenig erreichen kann. Viele der 95 | Abgabeprojekte werden in dieser Größenordnung liegen (aber meist noch so 96 | etwas wie ein GUI o.ä. benötigen). Versuchen sie einfach den Code 97 | kaputtzuspielen (z.b. Tasten ändern, Siegbedingung ändern, Cheats 98 | einbauen, ...). 99 | 100 | Viel Spass beim Spielen! :) 101 | -------------------------------------------------------------------------------- /Übungen/Blatt2.md: -------------------------------------------------------------------------------- 1 | # Übungsblatt 2 2 | 3 | ## Throat-Clearing 4 | 5 | a.k.a. Imports, damit der Code funktioniert. 6 | 7 | ```haskell 8 | import Data.Functor 9 | import Data.Monoid 10 | ``` 11 | 12 | ## Functor 13 | 14 | Sie haben in der Vorlesung die Typklasse `Functor` kennengelernt. Zur Erinnerung: 15 | 16 | class Functor f where 17 | fmap :: (a -> b) -> f a -> f b 18 | 19 | Nehmen sie an, sie hätten folgende Datentypen gegeben, für die alle eine `Functor`-Instanz existiert und eindeutig ist: 20 | 21 | ```haskell 22 | data Identity a = Identity { unIdentity :: a } 23 | 24 | data Vielleicht a = Etwas a 25 | | Nichts 26 | 27 | data EntwederOder b a = Entweder a 28 | | Oder b 29 | 30 | data GameVector b a = V3 a a a 31 | | VStrange [a] 32 | | Neighbours [GameVector b a] 33 | | EntwederOder b (GameVector b a) 34 | ``` 35 | 36 | Schreiben sie hierzu die jeweiligen `Functor`-Instanzen. 37 | 38 | ## Besser und allgemeiner 39 | 40 | Vereinfachen und verallgemeinern sie folgenden Ausdrücke so weit wie möglich und geben die sie dadurch entstehenden Typsignaturen an. 41 | Bedenken sie, dass wenn sie auf eine Typklasse abstrahieren, sie die gesamten Gesetze der Typklasse benutzen können. 42 | 43 | Kann die Funktion nachher mehr als vorher? 44 | 45 | *Bonus*: Hat sich an der Laufzeit etwas verändert? 46 | 47 | ```haskell 48 | mystery1 :: [[a]] -> [[a]] 49 | mystery1 = map (++[]) 50 | 51 | mystery2 :: (Eq a) => a -> a -> a -> Bool 52 | mystery2 x y z 53 | | x == y || y == z = True 54 | | x == y && y == z = True 55 | | x /= z = False 56 | | y /= z = False 57 | | x == y || y /= z = True 58 | | otherwise = False 59 | 60 | mystery3 :: Eq a => (a -> a) -> a -> [a] -> [a] 61 | mystery3 f a l = post a l' 62 | where 63 | l' = map f l 64 | post a (x:xs) 65 | | a == x = x : post a xs 66 | | otherwise = post a xs 67 | post _ [] = [] 68 | 69 | mystery4 :: (Int -> Bool) 70 | -> Vielleicht (EntwederOder String Int) 71 | -> Vielleicht (EntwederOder String Bool) 72 | mystery4 f (Etwas (Entweder a)) = Etwas . Entweder . f $ a 73 | mystery4 _ (Etwas (Oder b)) = Etwas (Oder b) 74 | mystery4 _ Nichts = Nichts 75 | ``` 76 | 77 | 78 | ## Bonus 79 | 80 | Es gibt von dem bekannten Spiel 2048 eine Haskell-Implementation für die Kommandozeile in unter 100 Zeilen. Diese ist zu finde unter 81 | https://github.com/gregorulm/h2048/blob/master/h2048.hs 82 | 83 | Sie können diesen Code mit `GHC` kompilieren oder im `ghci` ausführen (`main` ist die Start-Funktion). 84 | 85 | Was für Prinzipielle Vorgehenspunkte können sie erkennen? 86 | Eine kleine Erklärung gibt es im Blog der Erstellers: http://gregorulm.com/2048-in-90-lines-haskell/ 87 | 88 | Keine Angst, sie müssen dies noch nicht verstehen, aber es soll verdeutlichen, wie viel man mit extrem wenig erreichen kann. Viele der Abgabeprojekte werden in dieser Größenordnung liegen (aber meist noch so etwas wie ein GUI o.ä. benötigen). Versuchen sie einfach den Code kaputtzuspielen (z.b. Tasten ändern, Siegbedingung ändern, Cheats einbauen, ...). 89 | 90 | Viel Spass beim Spielen! :) 91 | -------------------------------------------------------------------------------- /Übungen/Blatt2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Übungen/Blatt2.pdf -------------------------------------------------------------------------------- /Übungen/Blatt2.solution.hs: -------------------------------------------------------------------------------- 1 | -- # Übungsblatt 2 2 | -- 3 | -- ## Throat-Clearing 4 | -- 5 | -- a.k.a. Imports, damit der Code funktioniert. 6 | 7 | import Control.Monad 8 | import Data.Functor 9 | import Data.Monoid 10 | 11 | -- ## Functor 12 | -- 13 | -- Sie haben in der Vorlesung die Typklasse `Functor` kennengelernt. Zur Erinnerung: 14 | -- 15 | -- class Functor f where 16 | -- fmap :: (a -> b) -> f a -> f b 17 | -- 18 | -- Nehmen sie an, sie hätten folgende Datentypen gegeben, für die alle eine `Functor`-Instanz existiert und eindeutig ist: 19 | 20 | data Identity a = Identity { unIdentity :: a } 21 | 22 | instance Functor Identity where 23 | fmap f (Identity a) = Identity (f a) 24 | 25 | data Vielleicht a = Etwas a 26 | | Nichts 27 | 28 | instance Functor Vielleicht where 29 | fmap f (Etwas a) = Etwas (f a) 30 | fmap f Nichts = Nichts 31 | 32 | data EntwederOder b a = Entweder a 33 | | Oder b 34 | 35 | instance Functor (EntwederOder c) where 36 | fmap f (Entweder a) = Entweder (f a) 37 | fmap _ (Oder b) = Oder b 38 | 39 | data GameVector b a = V3 a a a 40 | | VStrange [a] 41 | | Neighbours [GameVector b a] 42 | | EntwederOder b (GameVector b a) 43 | 44 | instance Functor (GameVector c) where 45 | fmap f (V3 x y z) = V3 (f x) (f y) (f z) 46 | fmap f (VStrange l) = VStrange (f <$> l) 47 | fmap f (Neighbours l) = Neighbours (fmap f <$> l) 48 | fmap f (EntwederOder b v) = EntwederOder b (f <$> v) 49 | 50 | -- Schreiben sie hierzu die jeweiligen `Functor`-Instanzen. 51 | -- 52 | -- ## Besser und allgemeiner 53 | -- 54 | -- Vereinfachen und verallgemeinern sie folgenden Ausdrücke so weit wie möglich und geben die sie dadurch entstehenden Typsignaturen an. 55 | -- Bedenken sie, dass wenn sie auf eine Typklasse abstrahieren, sie die gesamten Gesetze der Typklasse benutzen können. 56 | -- 57 | -- Kann die Funktion nachher mehr als vorher? 58 | -- 59 | -- *Bonus*: Hat sich an der Laufzeit etwas verändert? 60 | 61 | mystery1 :: [[a]] -> [[a]] 62 | mystery1 = map (++[]) 63 | 64 | -- List is Functor => fmap instead of map 65 | mystery1' :: Functor f => f [a] -> f [a] 66 | mystery1' = fmap (++[]) 67 | 68 | -- List is a Monoid => ++ == <> && [] == mempty 69 | mystery1'' :: (Functor f, Monoid m) => f m -> f m 70 | mystery1'' = fmap (<> mempty) 71 | 72 | -- Monoid-Law: (<> mempty) == id 73 | mystery1''' :: Functor f => f a -> f a 74 | mystery1''' = fmap id 75 | 76 | -- Functor-Law: fmap id == id 77 | mystery1'''' :: a -> a 78 | mystery1'''' = id 79 | 80 | mystery2 :: (Eq a) => a -> a -> a -> Bool 81 | mystery2 x y z 82 | | x == y || y == z = True 83 | | otherwise = False 84 | 85 | mystery3 :: (MonadPlus f, Eq a) => (a -> a) -> a -> f a -> f a 86 | mystery3 f a l = mfilter (==a) (f <$> l) 87 | 88 | mystery3' :: Eq a => (a -> a) -> a -> [a] -> [a] 89 | mystery3' f a l = filter (==a) (f <$> l) 90 | -- post a l' 91 | -- where 92 | -- l' = map f l 93 | -- post a (x:xs) 94 | -- | a == x = x : post a xs 95 | -- | otherwise = post a xs 96 | -- post _ [] = [] 97 | 98 | mystery4 :: (Int -> Bool) 99 | -> Vielleicht (EntwederOder String Int) 100 | -> Vielleicht (EntwederOder String Bool) 101 | mystery4 f (Etwas (Entweder a)) = Etwas . Entweder . f $ a 102 | mystery4 _ (Etwas (Oder b)) = Etwas (Oder b) 103 | mystery4 _ Nichts = Nichts 104 | 105 | mystery4'' :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b) 106 | mystery4'' f ve = fmap (fmap f) ve 107 | 108 | mystery4' :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b) 109 | mystery4' = fmap . fmap 110 | 111 | -- ## Bonus 112 | -- 113 | -- Es gibt von dem bekannten Spiel 2048 eine Haskell-Implementation für die Kommandozeile in unter 100 Zeilen. Diese ist zu finde unter 114 | -- https://github.com/gregorulm/h2048/blob/master/h2048.hs 115 | -- 116 | -- Sie können diesen Code mit `GHC` kompilieren oder im `ghci` ausführen (`main` ist die Start-Funktion). 117 | -- 118 | -- Was für Prinzipielle Vorgehenspunkte können sie erkennen? 119 | -- Eine kleine Erklärung gibt es im Blog der Erstellers: http://gregorulm.com/2048-in-90-lines-haskell/ 120 | -- 121 | -- Keine Angst, sie müssen dies noch nicht verstehen, aber es soll verdeutlichen, wie viel man mit extrem wenig erreichen kann. Viele der Abgabeprojekte werden in dieser Größenordnung liegen (aber meist noch so etwas wie ein GUI o.ä. benötigen). Versuchen sie einfach den Code kaputtzuspielen (z.b. Tasten ändern, Siegbedingung ändern, Cheats einbauen, ...). 122 | -- 123 | -- Viel Spass beim Spielen! :) 124 | 125 | main = putStrLn "compiles" 126 | -------------------------------------------------------------------------------- /Übungen/Blatt3.hs: -------------------------------------------------------------------------------- 1 | -- Übungsblatt 3 2 | -- ============= 3 | -- 4 | -- Throat-Clearing 5 | -- --------------- 6 | -- 7 | -- a.k.a. Imports, damit der Code funktioniert. 8 | 9 | module MonadExercise where 10 | import Control.Applicative 11 | import Control.Monad 12 | import Data.Monoid 13 | 14 | -- Vorwort 15 | -- ------- 16 | -- 17 | -- Die Typklassen, die auf diesem Zettel implementiert werden sollen sind 18 | -- teilweise nicht eindeutig. Ein gutes *Indiz* für eine falsche 19 | -- implementation kann sein, dass Informationen "weggeschmissen" werden - 20 | -- allerdings muss man bei anderen Implementationen genau dies machen. 21 | -- 22 | -- Applicative 23 | -- ----------- 24 | -- 25 | -- Nachdem wir uns letzte Woche ausführlich mit der Typklasse `Functor` 26 | -- beschäftigt haben, bauen wir nun darauf auf und definieren die 27 | -- Applicative-Instanz. Zur Erinnerung: 28 | -- 29 | -- class Functor f => Applicative f where 30 | -- pure :: a -> f a 31 | -- <*> :: f (a -> b) -> f a -> f b 32 | -- 33 | -- Nehmen sie an, sie hätten folgende Datentypen mit ihren 34 | -- `Functor`-Instanzen gegeben. Schreiben sie jeweils die 35 | -- Applicative-Instanz: 36 | 37 | data Identity a = Identity { unIdentity :: a } 38 | deriving (Show, Eq) 39 | 40 | instance Functor Identity where 41 | fmap f (Identity a) = Identity (f a) 42 | 43 | data Vielleicht a = Etwas a 44 | | Nichts 45 | deriving (Show, Eq) 46 | 47 | instance Functor Vielleicht where 48 | fmap f (Etwas a) = Etwas (f a) 49 | fmap _ Nichts = Nichts 50 | 51 | data EntwederOder b a = Entweder a 52 | | Oder b 53 | deriving (Show, Eq) 54 | 55 | instance Functor (EntwederOder b) where 56 | fmap f (Entweder a) = Entweder (f a) 57 | fmap _ (Oder b) = Oder b 58 | 59 | data List a = Cons a (List a) 60 | | Nil 61 | deriving (Show, Eq) 62 | 63 | instance Functor List where 64 | fmap f (Cons a r) = Cons (f a) (fmap f r) 65 | fmap _ Nil = Nil 66 | 67 | instance Monoid (List a) where 68 | mempty = Nil 69 | mappend Nil bs = bs 70 | mappend (Cons a as) bs = Cons a (mappend as bs) 71 | 72 | data V3 a = V3 a a a 73 | 74 | instance Functor V3 where 75 | fmap f (V3 x y z) = V3 (f x) (f y) (f z) 76 | 77 | -- Monad 78 | -- ----- 79 | -- 80 | -- Zu welchen der oben aufgeführten Typen gibt es eine Monaden-Instanz? Wie 81 | -- sieht diese aus? Schreiben sie diese (falls möglich). 82 | -- 83 | -- Bonus 84 | -- ----- 85 | 86 | data Account = Account 87 | data Inbox = Inbox 88 | data Mail = Mail 89 | 90 | -- Seien folgende Funktionen gegeben: 91 | 92 | login :: Maybe Account 93 | login = undefined 94 | 95 | getInbox :: Account -> Maybe Inbox 96 | getInbox = undefined 97 | 98 | getMails :: Inbox -> [Mail] 99 | getMails = undefined 100 | 101 | safeHead :: [a] -> Maybe a 102 | safeHead = undefined 103 | 104 | -- Schreiben sie eine Funktion: 105 | 106 | getFirstMail :: Maybe Mail 107 | getFirstMail = undefined 108 | 109 | -- welche die oben genannten 4 Funktionen nutzt um die erste Mail aus dem 110 | -- gegebenen Account zurückzuliefern, sofern alles erfolgreich war. 111 | -- 112 | -- Können sie beide Varianten (einmal mittels `do`-notation und einmal mit 113 | -- `>>=`) schreiben? 114 | -------------------------------------------------------------------------------- /Übungen/Blatt3.lhs: -------------------------------------------------------------------------------- 1 | Übungsblatt 3 2 | ============= 3 | 4 | Throat-Clearing 5 | --------------- 6 | 7 | a.k.a. Imports, damit der Code funktioniert. 8 | 9 | > module MonadExercise where 10 | > import Control.Applicative 11 | > import Control.Monad 12 | > import Data.Monoid 13 | 14 | Vorwort 15 | ------- 16 | 17 | Die Typklassen, die auf diesem Zettel implementiert werden sollen sind 18 | teilweise nicht eindeutig. Ein gutes *Indiz* für eine falsche 19 | implementation kann sein, dass Informationen "weggeschmissen" werden - 20 | allerdings muss man bei anderen Implementationen genau dies machen. 21 | 22 | Applicative 23 | ----------- 24 | 25 | Nachdem wir uns letzte Woche ausführlich mit der Typklasse `Functor` 26 | beschäftigt haben, bauen wir nun darauf auf und definieren die 27 | Applicative-Instanz. Zur Erinnerung: 28 | 29 | class Functor f => Applicative f where 30 | pure :: a -> f a 31 | <*> :: f (a -> b) -> f a -> f b 32 | 33 | Nehmen sie an, sie hätten folgende Datentypen mit ihren 34 | `Functor`-Instanzen gegeben. Schreiben sie jeweils die 35 | Applicative-Instanz: 36 | 37 | > data Identity a = Identity { unIdentity :: a } 38 | > deriving (Show, Eq) 39 | > 40 | > instance Functor Identity where 41 | > fmap f (Identity a) = Identity (f a) 42 | > 43 | > data Vielleicht a = Etwas a 44 | > | Nichts 45 | > deriving (Show, Eq) 46 | > 47 | > instance Functor Vielleicht where 48 | > fmap f (Etwas a) = Etwas (f a) 49 | > fmap _ Nichts = Nichts 50 | > 51 | > data EntwederOder b a = Entweder a 52 | > | Oder b 53 | > deriving (Show, Eq) 54 | > 55 | > instance Functor (EntwederOder b) where 56 | > fmap f (Entweder a) = Entweder (f a) 57 | > fmap _ (Oder b) = Oder b 58 | > 59 | > data List a = Cons a (List a) 60 | > | Nil 61 | > deriving (Show, Eq) 62 | > 63 | > instance Functor List where 64 | > fmap f (Cons a r) = Cons (f a) (fmap f r) 65 | > fmap _ Nil = Nil 66 | > 67 | > instance Monoid (List a) where 68 | > mempty = Nil 69 | > mappend Nil bs = bs 70 | > mappend (Cons a as) bs = Cons a (mappend as bs) 71 | > 72 | > data V3 a = V3 a a a 73 | > 74 | > instance Functor V3 where 75 | > fmap f (V3 x y z) = V3 (f x) (f y) (f z) 76 | 77 | Monad 78 | ----- 79 | 80 | Zu welchen der oben aufgeführten Typen gibt es eine Monaden-Instanz? Wie 81 | sieht diese aus? Schreiben sie diese (falls möglich). 82 | 83 | Bonus 84 | ----- 85 | 86 | > data Account = Account 87 | > data Inbox = Inbox 88 | > data Mail = Mail 89 | 90 | Seien folgende Funktionen gegeben: 91 | 92 | > login :: Maybe Account 93 | > login = undefined 94 | > 95 | > getInbox :: Account -> Maybe Inbox 96 | > getInbox = undefined 97 | > 98 | > getMails :: Inbox -> [Mail] 99 | > getMails = undefined 100 | > 101 | > safeHead :: [a] -> Maybe a 102 | > safeHead = undefined 103 | 104 | Schreiben sie eine Funktion: 105 | 106 | > getFirstMail :: Maybe Mail 107 | > getFirstMail = undefined 108 | 109 | welche die oben genannten 4 Funktionen nutzt um die erste Mail aus dem 110 | gegebenen Account zurückzuliefern, sofern alles erfolgreich war. 111 | 112 | Können sie beide Varianten (einmal mittels `do`-notation und einmal mit 113 | `>>=`) schreiben? 114 | -------------------------------------------------------------------------------- /Übungen/Blatt3.md: -------------------------------------------------------------------------------- 1 | # Übungsblatt 3 2 | 3 | ## Throat-Clearing 4 | 5 | a.k.a. Imports, damit der Code funktioniert. 6 | 7 | ```haskell 8 | import Control.Applicative 9 | import Control.Monad 10 | import Data.Monoid 11 | ``` 12 | 13 | ## Vorwort 14 | 15 | Die Typklassen, die auf diesem Zettel implementiert werden sollen sind teilweise nicht eindeutig. Ein gutes *Indiz* für eine falsche implementation kann sein, dass Informationen "weggeschmissen" werden - allerdings muss man bei anderen Implementationen genau dies machen. 16 | 17 | ## Applicative 18 | 19 | Nachdem wir uns letzte Woche ausführlich mit der Typklasse `Functor` beschäftigt haben, bauen wir nun darauf auf und definieren die Applicative-Instanz. 20 | Zur Erinnerung: 21 | 22 | class Functor f => Applicative f where 23 | pure :: a -> f a 24 | <*> :: f (a -> b) -> f a -> f b 25 | 26 | Nehmen sie an, sie hätten folgende Datentypen mit ihren `Functor`-Instanzen gegeben. Schreiben sie jeweils die Applicative-Instanz: 27 | 28 | ```haskell 29 | data Identity a = Identity { unIdentity :: a } 30 | deriving (Show, Eq) 31 | 32 | instance Functor Identity where 33 | fmap f (Identity a) = Identity (f a) 34 | 35 | data Vielleicht a = Etwas a 36 | | Nichts 37 | deriving (Show, Eq) 38 | 39 | instance Functor Vielleicht where 40 | fmap f (Etwas a) = Etwas (f a) 41 | fmap _ Nichts = Nichts 42 | 43 | data EntwederOder b a = Entweder a 44 | | Oder b 45 | deriving (Show, Eq) 46 | 47 | instance Functor (EntwederOder b) where 48 | fmap f (Entweder a) = Entweder (f a) 49 | fmap _ (Oder b) = Oder b 50 | 51 | data List a = Cons a (List a) 52 | | Nil 53 | deriving (Show, Eq) 54 | 55 | instance Functor List where 56 | fmap f (Cons a r) = Cons (f a) (fmap f r) 57 | fmap _ Nil = Nil 58 | 59 | instance Monoid List where 60 | mempty = Nil 61 | mappend Nil bs = bs 62 | mappend (Cons a as) bs = Cons a (mappend as bs) 63 | 64 | data V3 a = V3 a a a 65 | 66 | instance Functor V3 where 67 | fmap f (V3 x y z) = V3 (f x) (f y) (f z) 68 | ``` 69 | 70 | ## Monad 71 | 72 | Zu welchen der oben aufgeführten Typen gibt es eine Monaden-Instanz? Wie sieht diese aus? Schreiben sie diese (falls möglich). 73 | 74 | 75 | ## Bonus 76 | 77 | Seien folgende Funktionen gegeben: 78 | 79 | ```haskell 80 | login :: Maybe Account 81 | login = undefined 82 | 83 | getInbox :: Account -> Maybe Inbox 84 | getInbox = undefined 85 | 86 | getMails :: Inbox -> [Mail] 87 | getMails = undefined 88 | 89 | safeHead :: [a] -> Maybe a 90 | safeHead = undefined 91 | ``` 92 | 93 | Schreiben sie eine Funktion: 94 | 95 | ```haskell 96 | getFirstMail :: Maybe Mail 97 | ``` 98 | 99 | welche die oben genannten 4 Funktionen nutzt um die erste Mail aus dem gegebenen Account zurückzuliefern, sofern alles erfolgreich war. 100 | 101 | Können sie beide Varianten (einmal mittels `do`-notation und einmal mit `>>=`) schreiben? 102 | -------------------------------------------------------------------------------- /Übungen/Blatt3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Übungen/Blatt3.pdf -------------------------------------------------------------------------------- /Übungen/Blatt3.solution.hs: -------------------------------------------------------------------------------- 1 | -- Übungsblatt 3 2 | -- ============= 3 | -- 4 | -- Throat-Clearing 5 | -- --------------- 6 | -- 7 | -- a.k.a. Imports, damit der Code funktioniert. 8 | 9 | module MonadExercise where 10 | import Control.Applicative() 11 | import Control.Monad() 12 | import Data.Monoid 13 | 14 | -- Vorwort 15 | -- ------- 16 | -- 17 | -- Die Typklassen, die auf diesem Zettel implementiert werden sollen sind 18 | -- teilweise nicht eindeutig. Ein gutes *Indiz* für eine falsche 19 | -- implementation kann sein, dass Informationen "weggeschmissen" werden - 20 | -- allerdings muss man bei anderen Implementationen genau dies machen. 21 | -- 22 | -- Applicative 23 | -- ----------- 24 | -- 25 | -- Nachdem wir uns letzte Woche ausführlich mit der Typklasse `Functor` 26 | -- beschäftigt haben, bauen wir nun darauf auf und definieren die 27 | -- Applicative-Instanz. Zur Erinnerung: 28 | -- 29 | -- class Functor f => Applicative f where 30 | -- pure :: a -> f a 31 | -- <*> :: f (a -> b) -> f a -> f b 32 | -- 33 | -- Nehmen sie an, sie hätten folgende Datentypen mit ihren 34 | -- `Functor`-Instanzen gegeben. Schreiben sie jeweils die 35 | -- Applicative-Instanz: 36 | 37 | data Identity a = Identity { unIdentity :: a } 38 | deriving (Show, Eq) 39 | 40 | instance Functor Identity where 41 | fmap f (Identity a) = Identity (f a) 42 | 43 | 44 | instance Applicative Identity where 45 | pure = Identity 46 | (Identity f) <*> (Identity x) = Identity (f x) 47 | 48 | instance Monad Identity where 49 | return = pure 50 | (Identity x) >>= f = f x 51 | 52 | 53 | data Vielleicht a = Etwas a 54 | | Nichts 55 | deriving (Show, Eq) 56 | 57 | instance Functor Vielleicht where 58 | fmap f (Etwas a) = Etwas (f a) 59 | fmap _ Nichts = Nichts 60 | 61 | instance Applicative Vielleicht where 62 | pure = Etwas 63 | (Etwas f) <*> x = f <$> x 64 | Nichts <*> _ = Nichts 65 | 66 | instance Monad Vielleicht where 67 | return = pure 68 | (Etwas a) >>= f = f a 69 | Nichts >>= _ = Nichts 70 | 71 | data EntwederOder b a = Entweder a 72 | | Oder b 73 | deriving (Show, Eq) 74 | 75 | instance Functor (EntwederOder b) where 76 | fmap f (Entweder a) = Entweder (f a) 77 | fmap _ (Oder b) = Oder b 78 | 79 | instance Applicative (EntwederOder b) where 80 | pure = Entweder 81 | (Entweder f) <*> x = f <$> x 82 | (Oder e) <*> _ = Oder e 83 | 84 | instance Monad (EntwederOder b) where 85 | return = pure 86 | (Entweder x) >>= f = f x 87 | (Oder e) >>= _ = Oder e 88 | 89 | data List a = Cons a (List a) 90 | | Nil 91 | deriving (Show, Eq) 92 | 93 | instance Functor List where 94 | fmap f (Cons a r) = Cons (f a) (fmap f r) 95 | fmap _ Nil = Nil 96 | 97 | instance Monoid (List a) where 98 | mempty = Nil 99 | mappend Nil bs = bs 100 | mappend (Cons a as) bs = Cons a (mappend as bs) 101 | 102 | instance Applicative List where 103 | pure a = Cons a Nil 104 | Nil <*> _ = Nil 105 | (Cons f fs) <*> x = (f <$> x) <> (fs <*> x) 106 | 107 | instance Monad List where 108 | return = pure 109 | Nil >>= _ = Nil 110 | (Cons x xs) >>= f = f x <> (xs >>= f) 111 | 112 | data V3 a = V3 a a a 113 | 114 | instance Functor V3 where 115 | fmap f (V3 x y z) = V3 (f x) (f y) (f z) 116 | 117 | instance Applicative V3 where 118 | pure a = V3 a a a 119 | (V3 f g h) <*> (V3 x y z) = V3 (f x) (g y) (h z) 120 | 121 | instance Monad V3 where 122 | return = pure 123 | (V3 x y z) >>= f = V3 a b c 124 | where 125 | (V3 a _ _) = f x 126 | (V3 _ b _) = f y 127 | (V3 _ _ c) = f z 128 | 129 | -- Monad 130 | -- ----- 131 | -- 132 | -- Zu welchen der oben aufgeführten Typen gibt es eine Monaden-Instanz? Wie 133 | -- sieht diese aus? Schreiben sie diese (falls möglich). 134 | -- 135 | -- Bonus 136 | -- ----- 137 | 138 | data Account = Account 139 | data Inbox = Inbox 140 | data Mail = Mail 141 | 142 | -- Seien folgende Funktionen gegeben: 143 | 144 | login :: Maybe Account 145 | login = undefined 146 | 147 | getInbox :: Account -> Maybe Inbox 148 | getInbox = undefined 149 | 150 | getMails :: Inbox -> [Mail] 151 | getMails = undefined 152 | 153 | safeHead :: [a] -> Maybe a 154 | safeHead = undefined 155 | 156 | -- Schreiben sie eine Funktion: 157 | 158 | getFirstMail :: Maybe Mail 159 | getFirstMail = do 160 | a <- login 161 | i <- getInbox a 162 | safeHead $ getMails i 163 | 164 | getFirstMail' :: Maybe Mail 165 | getFirstMail' = login >>= getInbox >>= safeHead . getMails 166 | 167 | -- welche die oben genannten 4 Funktionen nutzt um die erste Mail aus dem 168 | -- gegebenen Account zurückzuliefern, sofern alles erfolgreich war. 169 | -- 170 | -- Können sie beide Varianten (einmal mittels `do`-notation und einmal mit 171 | -- `>>=`) schreiben? 172 | -------------------------------------------------------------------------------- /Übungen/Blatt4.md: -------------------------------------------------------------------------------- 1 | # Übungsblatt 4 2 | 3 | ## Vorwort 4 | 5 | Wir haben uns in der vergangenen Vorlesung Parser näher angeschaut. In den praktischen Übungen soll es weniger um das "erfinden" eines neuen Parser-Kombinators gehen, als um die Anwendung. 6 | 7 | ## Set-Up 8 | 9 | Da wir nun zum ersten mal mit externen dependencies arbeiten, müssen wir diese zunächst installieren. Dies ist ein sehr wichtiger Schritt, da nahezu alle weiteren Übungszettel dieses Vorgehen voraussetzen. 10 | 11 | Als erstes sollten Sie die Quellen von `stack` mit einem `stack update` aktualisieren. Anschließend erstellen sie ein neues Stack-Projekt mittels `stack new `. Sie erhalten ein Verzeichnis mit dem Projektnamen, in dem ein kleines "Hello World" liegt. Als erstes sollte man immer über die `projektname.cabal` drüber schauen. Hier werden nachher auch alle dependencies eingetragen. 12 | 13 | Bei mir sieht das z.B. so aus (Projekt heisst "parser"): 14 | 15 | ``` 16 | name: parser 17 | version: 0.1.0.0 18 | synopsis: Initial project template from stack 19 | description: Please see README.md 20 | homepage: https://github.com/githubuser/parser#readme 21 | license: BSD3 22 | license-file: LICENSE 23 | author: Author name here 24 | maintainer: example@example.com 25 | copyright: 2016 Author name here 26 | category: Web 27 | build-type: Simple 28 | -- extra-source-files: 29 | cabal-version: >=1.10 30 | 31 | library 32 | hs-source-dirs: src 33 | exposed-modules: Lib 34 | build-depends: base >= 4.7 && < 5 35 | default-language: Haskell2010 36 | 37 | executable parser-exe 38 | hs-source-dirs: app 39 | main-is: Main.hs 40 | ghc-options: -threaded -rtsopts -with-rtsopts=-N 41 | build-depends: base 42 | , parser 43 | default-language: Haskell2010 44 | 45 | test-suite parser-test 46 | type: exitcode-stdio-1.0 47 | hs-source-dirs: test 48 | main-is: Spec.hs 49 | build-depends: base 50 | , parser 51 | ghc-options: -threaded -rtsopts -with-rtsopts=-N 52 | default-language: Haskell2010 53 | 54 | source-repository head 55 | type: git 56 | location: https://github.com/githubuser/parser 57 | ``` 58 | 59 | Generell sollte man hier ordentliche Angaben machen, da viele tools dieses automatisch lesen und überall eintragen. Insbesondere sollte man nicht seine private Email-Adresse nehmen, sondern z.b. die Techfak-Adresse, die Studiumsbezogen ist. 60 | 61 | Wir haben hier 3 Bereiche: `library`, `parsers-exe` und `test-suite`. Library ist das, was wir meistens schreiben - eine Sammlung von Funktionen, die das eigentlich tun. Dann haben wir die executable; diese enthält die `main` und ruft meist in wenig Code unsere library auf, nachdem sie z.b. Parameter/Dateien/... gelesen hat und kümmert sich um die Ausgabe. Somit können wir für spätere Zwecke (Projekte) die Library 1:1 wiederverwenden. 62 | Die test-suite ignorieren wir für den Moment. Wir kommen in einer separaten Vorlesung noch einmal auf Tests zu sprechen. 63 | 64 | Eine editierte Variante könnte etwa so aussehen: 65 | 66 | ``` 67 | name: parser 68 | version: 0.1.0.0 69 | synopsis: A little parser for generic CSV-Files 70 | description: Please see README.md 71 | homepage: https://github.com/Drezil/FFPiHaskell_parser#readme 72 | license: BSD3 73 | license-file: LICENSE 74 | author: Stefan Dresselhaus 75 | maintainer: sdressel@techfak.uni-bielefeld.de 76 | copyright: 2016 Stefan Dresselhaus 77 | category: Tool 78 | build-type: Simple 79 | -- extra-source-files: 80 | cabal-version: >=1.10 81 | 82 | library 83 | hs-source-dirs: src 84 | exposed-modules: Lib 85 | build-depends: base >= 4.7 && < 5 86 | , attoparsec 87 | default-language: Haskell2010 88 | 89 | executable parser-exe 90 | hs-source-dirs: app 91 | main-is: Main.hs 92 | ghc-options: -threaded -rtsopts -with-rtsopts=-N 93 | build-depends: base 94 | , parser 95 | default-language: Haskell2010 96 | 97 | test-suite parser-test 98 | type: exitcode-stdio-1.0 99 | hs-source-dirs: test 100 | main-is: Spec.hs 101 | build-depends: base 102 | , parser 103 | ghc-options: -threaded -rtsopts -with-rtsopts=-N 104 | default-language: Haskell2010 105 | 106 | source-repository head 107 | type: git 108 | location: https://github.com/Drezil/FFPiHaskell_parser 109 | ``` 110 | 111 | Änderungen die gemacht wurden: 112 | 113 | - Daten ausgefüllt 114 | - attoparsec als dependency der library hinzugefügt 115 | - github-links angepasst (sofern man github verwendet) 116 | 117 | Nachdem man das ganze nun gespeichert hat, reicht ein `stack build` um alle dependencies herunterzuladen, kompilieren und installieren. Anschließend kann man mit `stack exec parser-exe` das Programm ausführen. 118 | 119 | ## Ein simpler CSV-Parser 120 | 121 | Sie sollten aus ihrem Studium bereits die EBNF kennen. Eine (simple) CSV-Datei besitzt folgende EBNF: 122 | 123 | ``` 124 | csv-file = { row } 125 | row = field-list, eol 126 | field-list = field, [ ",", field-list ] 127 | field = [ whitespace ], field-value, [ whitespace ] 128 | field-value = quoted-string | bare-string 129 | quoted-string = '"', quoted-content, '"' 130 | quoted-content = { quoted-char } 131 | quoted-char = (any char except '"' or eol) 132 | bare-string = { bare-char } 133 | bare-char = (any char except ',' or eol without whitespace at beginning/end) 134 | whitespace = space-char, { space-char } 135 | space-char = " " | "\t" 136 | eol = "\n" 137 | ``` 138 | 139 | Kurzes recap: `{ .. }` bedeutet 1 oder mehr, `[ .. ]` sind optional, `A | B` heißt, entweder A oder B, `A, B, C` bedeutet zunächst A, dann B, dann C. 140 | 141 | ### Datenstrukturen 142 | 143 | Überlegen sie sich zunächst, wie eine Datenstruktur aussehen könnte und definieren sie diese. Inhalt sind vorerst nur Strings. Sie brauchen keine Zahlen/Daten/... zu erkennen. 144 | 145 | ### Parser 146 | 147 | Schreiben sie einen Parser, der einen CSV-String in diese Datenstruktur parsed und geben sie diese aus (`deriving Show` auf der Datenstruktur reicht). Ein paar Testbeispiele für CSV-Dateien finden sie auf github/im Lernraum. 148 | 149 | ### Bonus 150 | 151 | Natürlich ist das nur ein simpler CSV-Parser. Folgende Features wären für einen echten Einsatz noch Wünschenswert: 152 | 153 | - sicherstellen, dass alle "rows" gleich lang sind und ggf. mit Fehlermeldung abbrechen 154 | - einen "Header" mit einlesen, der die einzelnen Spalten beschreibt 155 | - Quotation nicht nur als "blabla'bla", sondern auch als 'blabla"bla' zulassen, "bla \" bla" auch entsprechend parsen. 156 | -------------------------------------------------------------------------------- /Übungen/Blatt4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Übungen/Blatt4.pdf -------------------------------------------------------------------------------- /Übungen/Blatt4_data/CSV_Dummy_hard.csv: -------------------------------------------------------------------------------- 1 | id first_name last_name email ip_address ip6_address 2 | 1 Jerry Marshall jmarshall0@walmart.com 19.178.200.141 3 | 2 Anthony Kelley akelley1@a8.net 198.253.124.0 4 | 3 Todd Murphy tmurphy2@pcworld.com 9.225.210.110 5 | 4 Bonnie Larson blarson3@pbs.org 2.189.215.10 c36c:31a3:3c55:740d:b657:7bed:15da:fe87 6 | 5 Lawrence Richardson lrichardson4@surveymonkey.com 28.64.96.0 1fb3:f74e:3b1a:5335:b7e:8560:9300:8309 7 | 6 Adam Russell arussell5@arizona.edu 168.213.163.243 8 | 7 Gloria Burton gburton6@123-reg.co.uk 230.119.224.190 f37e:1ca5:ac68:62ea:a3e:c51d:5594:8329 9 | 8 Julie Hall jhall7@biglobe.ne.jp 114.81.10.0 10 | 9 Marilyn Robinson mrobinson8@soundcloud.com 118.144.79.167 f909:f9d3:ebd6:95fa:1a25:831a:30d7:86b9 11 | 10 Ruth Chavez rchavez9@themeforest.net 227.118.203.75 12 | 11 Barbara Roberts brobertsa@comcast.net 102.39.3.216 13 | 12 Paula Coleman pcolemanb@oaic.gov.au 94.80.182.108 d4a9:9fd8:5196:fff7:3df9:5ee8:a68e:7ff8 14 | 13 Adam Watson awatsonc@bloomberg.com 54.109.73.133 e5ad:f006:c8b7:4c10:5cc8:e0c2:4fe1:5af3 15 | 14 Christina Hart chartd@examiner.com 212.62.131.243 16 | 15 Robin Medina rmedinae@walmart.com 189.169.24.195 8239:6126:aebf:3a4:a1e0:2ecb:e316:3b98 17 | 16 Ann Reynolds areynoldsf@shinystat.com 190.162.153.159 18 | 17 Norma Murray nmurrayg@yellowbook.com 124.187.60.197 674d:460e:bc9e:9c22:eab3:767a:4d31:873e 19 | 18 Emily Rice ericeh@yellowpages.com 244.227.213.95 20 | 19 Ruby Cook rcooki@buzzfeed.com 24.136.90.48 21 | 20 Lawrence Carr lcarrj@posterous.com 179.65.16.95 ba6e:81a5:d81d:b700:6795:2f1a:68ea:fbd8 22 | 21 Paula Porter pporterk@parallels.com 156.63.40.195 23 | 22 Richard Bell rbelll@mail.ru 68.37.224.5 24 | 23 Paul Parker pparkerm@smh.com.au 52.239.221.105 c206:c18d:97a1:e8f5:fefd:4cf2:22b2:3472 25 | 24 Martha Thompson mthompsonn@paginegialle.it 204.235.82.113 26 | 25 Margaret Andrews mandrewso@cnn.com 225.222.246.248 27 | 26 Shawn Hernandez shernandezp@miitbeian.gov.cn 69.202.41.81 28 | 27 Wanda Lopez wlopezq@comsenz.com 146.153.117.198 29 | 28 Roger Cook rcookr@cdc.gov 123.89.255.174 30 | 29 Louis Payne lpaynes@seattletimes.com 204.17.65.250 ce0a:d247:4b31:1055:68fa:b72c:5285:f113 31 | 30 Virginia Wagner vwagnert@github.com 147.160.93.213 344d:d9dd:55b7:6d99:47d8:d116:439c:f6e7 32 | 31 Ruby Olson rolsonu@dailymotion.com 213.192.124.230 c102:46b4:3826:7e7f:84a9:825f:e696:368b 33 | 32 Walter Lynch wlynchv@tiny.cc 156.40.17.137 34 | 33 Barbara Reynolds breynoldsw@huffingtonpost.com 244.175.141.193 35 | 34 Willie Hughes whughesx@wix.com 32.26.11.167 36 | 35 Jacqueline Torres jtorresy@comcast.net 195.116.99.146 7e64:9658:625c:5a5f:a441:3136:3ce2:20af 37 | 36 Marie Kelley mkelleyz@vk.com 107.87.216.81 38 | 37 Paula Wells pwells10@cmu.edu 219.245.242.47 39 | 38 Denise Meyer dmeyer11@comcast.net 186.219.63.174 40 | 39 Sharon Kennedy skennedy12@weibo.com 250.253.108.248 41 | 40 Annie Jacobs ajacobs13@creativecommons.org 142.255.165.5 7156:6c5e:90a2:785b:acec:1ebf:1335:6296 42 | 41 Diane Crawford dcrawford14@wikia.com 78.231.74.118 d621:6c22:6ff9:e44a:58dc:16e0:b7d3:8fa7 43 | 42 Gloria Holmes gholmes15@naver.com 100.215.131.202 796e:8813:fbf2:fdb2:ece2:2887:d268:b0f7 44 | 43 Bobby Lewis blewis16@icio.us 1.12.56.3 be10:9e01:32cf:671:75f0:56c1:9910:2f2b 45 | 44 Sarah Larson slarson17@ehow.com 187.202.120.189 46 | 45 Alice Johnson ajohnson18@facebook.com 165.157.133.37 52ed:cc4f:813e:bd2d:2f57:4c08:d318:93ec 47 | 46 Martin Martin mmartin19@columbia.edu 38.158.97.112 59e9:b45:34e:5c0d:d358:224b:122b:626b 48 | 47 Christopher Baker cbaker1a@reverbnation.com 218.96.4.153 9ee0:1fcc:e75b:4c93:d5b3:8927:19dc:e5e2 49 | 48 Susan Ford sford1b@homestead.com 13.208.235.30 c7db:37fe:3d61:ecef:a30d:e8a4:5775:9b38 50 | 49 Annie Perry aperry1c@example.com 193.6.19.138 51 | 50 Julia Ramos jramos1d@taobao.com 239.54.195.230 7155:2a42:8ef5:55cc:c8c2:d72e:472e:4ce2 52 | 51 Charles Lopez clopez1e@dmoz.org 156.201.162.49 53 | 52 Ashley Hayes ahayes1f@sfgate.com 28.68.186.74 54 | 53 Daniel Alvarez dalvarez1g@fc2.com 198.62.37.80 55 | 54 Henry Bailey hbailey1h@google.com.hk 89.10.82.87 56 | 55 Anna Smith asmith1i@ovh.net 149.221.208.182 108c:66fd:638b:601b:c138:104c:dabf:e04a 57 | 56 Jane Cunningham jcunningham1j@princeton.edu 109.171.131.228 58 | 57 Jeffrey George jgeorge1k@unesco.org 35.69.93.67 b76f:e2df:adf:775b:2cc2:4a72:1024:c7d4 59 | 58 Janice Richardson jrichardson1l@odnoklassniki.ru 97.65.238.183 e8be:fe73:7959:dea8:361a:8a60:ddd6:5ee9 60 | 59 Deborah Roberts droberts1m@tripadvisor.com 26.54.11.187 61 | 60 Maria Frazier mfrazier1n@skype.com 137.222.112.50 62 | 61 Kathryn Cruz kcruz1o@marketwatch.com 120.160.173.87 63 | 62 Carolyn Wallace cwallace1p@vinaora.com 191.84.178.20 8054:8f10:94ea:f1d3:d201:784c:c9d0:4aae 64 | 63 Lisa Roberts lroberts1q@berkeley.edu 78.156.145.59 65 | 64 Carolyn Harris charris1r@ow.ly 207.20.207.160 66 | 65 Annie Lane alane1s@biglobe.ne.jp 16.57.116.100 67 | 66 Adam Torres atorres1t@odnoklassniki.ru 223.83.93.98 3882:2a58:6a2:890a:ff87:7c8a:4f64:22ad 68 | 67 Amy Carr acarr1u@booking.com 91.69.66.104 8f32:1a61:f744:4ec4:d568:c3ad:e37b:9bf8 69 | 68 Marilyn Sanders msanders1v@un.org 177.221.72.77 70 | 69 Lori Robinson lrobinson1w@tumblr.com 8.88.69.156 1f78:ad86:87cd:6d00:4ff5:b182:91f1:1678 71 | 70 Susan Thompson sthompson1x@sitemeter.com 91.216.158.212 72 | 71 Richard Bennett rbennett1y@hao123.com 231.198.31.138 42ae:5779:b0fb:8798:df7c:5a7:abb1:6c5f 73 | 72 Sean Fields sfields1z@artisteer.com 170.246.156.157 3f48:88c9:1633:4bf9:e8da:ff56:d553:ac9f 74 | 73 Phillip Patterson ppatterson20@tinyurl.com 62.211.102.19 75 | 74 Martha Brown mbrown21@vkontakte.ru 181.113.96.170 acd3:ff82:a0a6:5eba:d991:d63b:528a:c37b 76 | 75 Judith Boyd jboyd22@dailymail.co.uk 150.142.231.124 18fc:39b8:a506:ebbf:a6ce:78dd:9a0e:2483 77 | 76 Paula Butler pbutler23@nytimes.com 156.206.79.185 78 | 77 Lawrence Long llong24@odnoklassniki.ru 48.155.68.107 3432:2bb3:17d3:bc32:c396:2d94:9c65:85e8 79 | 78 Christine Moreno cmoreno25@tripod.com 103.24.38.142 38e1:6068:c7ec:25e5:72d:5332:b194:51c3 80 | 79 Lillian Mills lmills26@usnews.com 233.148.175.43 7b00:228b:7d8a:a5d:f4c7:6d82:f95e:8a5c 81 | 80 Aaron Welch awelch27@gravatar.com 245.220.207.16 36b9:9b14:5272:d208:dcfd:d1cf:d316:216a 82 | 81 Bruce Evans bevans28@sfgate.com 164.86.191.60 83 | 82 Marie Wheeler mwheeler29@nasa.gov 244.202.190.106 8a25:a18e:a34d:44ff:5182:a63a:409a:99f0 84 | 83 Marilyn Watson mwatson2a@hao123.com 190.87.118.45 85 | 84 Judith Edwards jedwards2b@bigcartel.com 170.171.222.142 86 | 85 Juan Mason jmason2c@miibeian.gov.cn 139.66.20.232 87 | 86 Walter Porter wporter2d@aboutads.info 16.166.80.53 88 | 87 Martha Crawford mcrawford2e@sun.com 33.225.221.155 89 | 88 Douglas Brown dbrown2f@cnet.com 101.247.220.221 f263:5dd7:629:672:1949:3782:ef29:fbc4 90 | 89 Joseph Nelson jnelson2g@creativecommons.org 149.255.111.169 91 | 90 Henry Lee hlee2h@elpais.com 11.69.111.68 688e:9928:513f:7e5c:9e61:3207:a99c:74 92 | 91 Marilyn Cooper mcooper2i@myspace.com 203.64.40.25 9382:d845:6336:a3a0:9d9e:d9dd:74e1:91f8 93 | 92 Emily Ruiz eruiz2j@chicagotribune.com 115.48.133.248 ea45:e3be:f10d:5501:2040:4319:c6dc:f221 94 | 93 Douglas Jenkins djenkins2k@yellowbook.com 71.62.143.17 95 | 94 Amy Jenkins ajenkins2l@paypal.com 19.141.195.150 476d:bd8e:2fd2:37cb:462e:db39:8db8:32df 96 | 95 Jane Porter jporter2m@springer.com 209.17.93.33 97 | 96 Jeremy Hudson jhudson2n@youtube.com 40.201.50.130 96b8:247d:7ede:822e:565a:9fd3:cdde:18b8 98 | 97 Jane Anderson janderson2o@sun.com 142.45.1.102 99 | 98 Lawrence Lewis llewis2p@bloomberg.com 200.44.0.69 ea01:4b6b:b93a:4490:8f78:af5e:c3b2:bbf6 100 | 99 Wayne Garcia wgarcia2q@facebook.com 118.54.126.123 daf5:6db2:1d6e:bcd5:1e89:86db:b3a7:5bbc 101 | 100 Steve Howard showard2r@mail.ru 39.40.181.215 102 | 101 Stephanie Dean sdean2s@nifty.com 152.89.250.250 d136:6282:b453:45a2:da64:7394:d55a:c2 103 | 102 Marilyn Robertson mrobertson2t@twitter.com 95.195.109.181 104 | 103 Emily Wells ewells2u@acquirethisname.com 50.238.244.223 5ddd:6c89:345a:c0d0:70be:ded1:c1fe:7151 105 | 104 Jerry Richards jrichards2v@hostgator.com 217.19.255.218 67df:4d3a:acb5:6c24:cfe6:eb9f:3545:2c0e 106 | 105 Howard Richards hrichards2w@google.com.br 218.122.237.228 ce32:9a93:f99f:ce27:31b2:9139:aee4:bb3d 107 | 106 Jack Henderson jhenderson2x@utexas.edu 130.39.86.249 5dd0:75e0:7246:118f:e5e1:8dce:5632:3dfd 108 | 107 Henry Pierce hpierce2y@netscape.com 164.31.64.93 109 | 108 Sharon Reid sreid2z@jalbum.net 14.49.211.214 110 | 109 Elizabeth Turner eturner30@e-recht24.de 44.31.186.94 111 | 110 Shirley Russell srussell31@fotki.com 173.226.123.4 c30f:8785:4ea7:c37:c1a2:9e14:d940:ee1 112 | 111 Bruce Ortiz bortiz32@wikispaces.com 7.231.157.73 cf33:9be6:940d:e9b4:b6ad:7514:4808:6dbb 113 | 112 Charles Howard choward33@sourceforge.net 159.40.194.224 114 | 113 Carol Dunn cdunn34@nsw.gov.au 241.145.64.103 115 | 114 Sarah Smith ssmith35@spiegel.de 69.79.191.234 116 | 115 Lisa Grant lgrant36@purevolume.com 249.171.115.18 d052:acaa:72c8:213d:6807:718b:73c9:f70 117 | 116 Linda Howard lhoward37@cdbaby.com 200.123.162.40 bbe9:aeb7:8dd5:66da:d9fb:3e51:f2c7:edb1 118 | 117 Philip Rice price38@mashable.com 195.84.44.216 119 | 118 Roy Larson rlarson39@ask.com 146.40.214.26 120 | 119 Louise Chavez lchavez3a@pen.io 80.79.127.49 6568:b20d:cbb1:420d:fa5c:16:ba78:19aa 121 | 120 Nicole Rivera nrivera3b@patch.com 50.54.90.252 5c35:66a:b8ba:2736:650d:566a:1e84:a5e8 122 | 121 Nicholas Fuller nfuller3c@cnn.com 6.239.230.133 31f3:cf1e:9037:48f2:c9f3:8de:8b19:e53 123 | 122 Alan Berry aberry3d@vinaora.com 186.9.244.92 52dd:fbb9:78fa:6040:3af1:23bf:69d8:a156 124 | 123 Nicole Owens nowens3e@cbsnews.com 78.206.0.164 125 | 124 Wayne Alexander walexander3f@flavors.me 235.14.156.183 126 | 125 Joyce Rice jrice3g@house.gov 189.3.130.137 11fb:f52e:ca12:7743:c73c:3586:fda5:8543 127 | 126 Sandra Elliott selliott3h@bbc.co.uk 203.140.137.142 128 | 127 Eric West ewest3i@360.cn 65.195.54.174 d901:33b:b7ed:eb3a:f677:b2a1:f5f1:4b3e 129 | 128 Phyllis Marshall pmarshall3j@alexa.com 37.134.180.109 6e47:e953:5e0a:3759:77f9:bfd6:a98d:2e66 130 | 129 Paula Griffin pgriffin3k@lycos.com 154.194.62.116 6844:47cf:12b9:4967:4bfb:47f4:fdbb:85a2 131 | 130 Christopher Bradley cbradley3l@huffingtonpost.com 137.68.29.204 132 | 131 Jose Fox jfox3m@apache.org 190.195.80.60 8153:b014:df99:df49:66ec:40b5:1932:78a9 133 | 132 Benjamin Willis bwillis3n@npr.org 228.71.178.3 6d26:5446:583b:ab10:6fe4:8797:421a:b808 134 | 133 Anthony Cole acole3o@storify.com 29.164.81.252 748e:c358:1ca0:a8fa:ef32:1c4:a1a5:65f6 135 | 134 Rachel Butler rbutler3p@mysql.com 157.120.159.242 136 | 135 Debra Day dday3q@vistaprint.com 145.169.189.118 4ce:a3d5:5cb9:a53:60ba:e1b4:d755:50c5 137 | 136 Betty Young byoung3r@google.com.au 111.82.63.189 a28e:a40b:1a00:e603:6ea6:dd8b:e833:f588 138 | 137 Frances Edwards fedwards3s@engadget.com 252.104.120.109 c2a1:8f5d:7792:5e46:b1a0:fdba:dadb:f820 139 | 138 John Lewis jlewis3t@vimeo.com 253.236.117.72 7094:a8c6:8362:fb16:ee68:dd11:810c:cf7 140 | 139 Nancy Mendoza nmendoza3u@berkeley.edu 234.73.92.166 141 | 140 Irene Jacobs ijacobs3v@dmoz.org 62.133.142.113 142 | 141 Charles Ross cross3w@alexa.com 68.242.94.193 2e62:e28:7ce4:e048:a064:11c6:d508:e0dd 143 | 142 Emily Reed ereed3x@g.co 23.126.76.237 144 | 143 Anne Burton aburton3y@nhs.uk 235.207.4.132 c460:65e8:1e6e:7c38:cdd5:c7a:ab:63fa 145 | 144 Ruth Weaver rweaver3z@friendfeed.com 229.201.19.240 711:67af:3d7f:b728:e6a:b837:5ceb:c909 146 | 145 Diane Lewis dlewis40@sogou.com 68.99.213.59 f48b:190d:9b68:a57f:bd2b:d770:d8a0:82cd 147 | 146 Julie Meyer jmeyer41@ehow.com 192.183.136.79 148 | 147 Craig Hughes chughes42@un.org 95.34.213.75 bd27:c0f7:8ff9:82aa:b643:1c31:8e90:b354 149 | 148 Raymond Chavez rchavez43@marriott.com 163.226.140.46 4f1b:38b5:7dfc:488d:cdb1:59c1:581e:9e8e 150 | 149 Andrew Hicks ahicks44@livejournal.com 218.8.214.173 151 | 150 Gloria Mitchell gmitchell45@unesco.org 238.58.250.189 ab6:fa8a:6a81:330f:300:9cad:4366:5f7a 152 | 151 David Holmes dholmes46@unicef.org 92.189.43.2 244b:5968:dc42:2bf1:f3e9:e30f:1aca:7ce1 153 | 152 Theresa Day tday47@noaa.gov 163.57.51.62 154 | 153 Jonathan Mendoza jmendoza48@phoca.cz 141.192.35.125 ca3:d952:ffea:1980:fe43:94c9:975b:5c86 155 | 154 Katherine Howell khowell49@jigsy.com 38.146.32.122 156 | 155 Cheryl Fisher cfisher4a@umich.edu 152.234.107.143 157 | 156 Steven Hamilton shamilton4b@bizjournals.com 39.72.33.184 158 | 157 Roger Bishop rbishop4c@timesonline.co.uk 191.186.210.1 159 | 158 Kathryn Garza kgarza4d@about.me 179.12.38.154 e7e6:d11b:6618:31c:8143:70a5:1fbd:cf99 160 | 159 Joe Bell jbell4e@moonfruit.com 56.188.221.187 161 | 160 Tina Thomas tthomas4f@telegraph.co.uk 246.159.7.176 162 | 161 Virginia Adams vadams4g@blogspot.com 38.134.49.14 478d:a70e:3f40:4a35:b22f:a6ad:dc83:e734 163 | 162 Andrea Allen aallen4h@nifty.com 20.244.121.0 80d4:105b:c358:1349:b799:fc5b:d9ab:a5bc 164 | 163 Kathryn Berry kberry4i@simplemachines.org 158.185.125.159 9f8b:4693:c037:653b:beb2:b5df:c5ef:9c42 165 | 164 Scott Bradley sbradley4j@list-manage.com 174.109.82.199 3803:d128:d0e1:8a1e:4127:f83b:73bb:808e 166 | 165 Timothy Mendoza tmendoza4k@yahoo.com 152.30.89.21 167 | 166 Angela Lewis alewis4l@google.ca 111.202.220.123 168 | 167 Philip Day pday4m@ocn.ne.jp 187.157.40.18 156b:acb:2aa2:b561:bfdd:e45:9a77:49c1 169 | 168 Jack Stevens jstevens4n@tinyurl.com 130.165.254.77 170 | 169 Phyllis Price pprice4o@who.int 142.97.45.132 171 | 170 Albert Jackson ajackson4p@sitemeter.com 169.20.87.221 172 | 171 Gary Wright gwright4q@goodreads.com 67.5.251.227 aba:6b6f:2143:eca7:9405:eae6:6c4b:10f7 173 | 172 Wanda Rodriguez wrodriguez4r@buzzfeed.com 60.29.242.120 174 | 173 Albert Wells awells4s@pagesperso-orange.fr 157.245.207.136 175 | 174 Robin Bishop rbishop4t@prlog.org 204.75.168.82 5ca6:e687:3c92:f011:8bef:356e:9cd6:361 176 | 175 Janet Carr jcarr4u@qq.com 150.243.60.60 177 | 176 Walter Robertson wrobertson4v@fastcompany.com 247.110.127.143 178 | 177 Doris Jacobs djacobs4w@tmall.com 39.228.26.209 bff7:4d2c:c99f:e414:3996:11b8:c4c0:6769 179 | 178 Joyce Wells jwells4x@ezinearticles.com 177.211.91.87 1dd3:10ab:5c4a:9319:460b:6aa3:2bff:888f 180 | 179 Mildred Stephens mstephens4y@tinyurl.com 22.198.235.165 c0e7:b9a3:26aa:7366:64ea:bf0c:4135:acfd 181 | 180 Timothy Jackson tjackson4z@etsy.com 11.188.104.237 8bc0:a678:8639:a1e:90fd:61bc:e504:4c45 182 | 181 Norma Allen nallen50@ibm.com 93.241.7.110 8ebf:6665:59c2:3fe4:bde5:1c8:1029:a3d2 183 | 182 Maria Kelley mkelley51@ucla.edu 70.193.32.208 a125:8242:4526:db9f:b3e9:2ea8:54dd:266b 184 | 183 Jane Bryant jbryant52@uiuc.edu 19.29.115.28 185 | 184 Margaret Hawkins mhawkins53@plala.or.jp 222.65.84.78 3193:af3c:1104:78bb:8e4b:c52:e3b0:cea2 186 | 185 Lawrence Perkins lperkins54@ehow.com 236.189.253.193 187 | 186 Tina Brown tbrown55@newsvine.com 103.188.5.100 38c1:f440:f681:a652:75d5:38e5:d446:6db5 188 | 187 Ronald Price rprice56@geocities.jp 180.67.134.49 189 | 188 Tammy Duncan tduncan57@miitbeian.gov.cn 206.9.88.171 2428:92ee:fcbb:7c9c:b73b:1016:8c53:aca7 190 | 189 Annie Stevens astevens58@blogs.com 9.10.85.66 ff89:c8fd:2933:27ae:a8d6:24c9:f23b:7ff5 191 | 190 Stephen Gonzalez sgonzalez59@blinklist.com 158.94.221.34 192 | 191 Ralph Ruiz rruiz5a@fema.gov 115.222.184.91 b445:2a0f:5ce1:adfe:a645:9e28:1bb0:2a6a 193 | 192 Louise Ramos lramos5b@wordpress.org 131.36.117.191 ee70:91e:7ebd:cb33:486f:c8ee:7682:6b01 194 | 193 Randy Bryant rbryant5c@cbc.ca 249.111.227.95 b45f:60ca:51c9:2b2e:5e2e:31a:afec:9a10 195 | 194 Ryan Lane rlane5d@opensource.org 252.158.176.25 1769:3924:1467:9879:466a:75f:a442:ff2 196 | 195 Jesse Nguyen jnguyen5e@taobao.com 20.24.157.155 197 | 196 Henry Williams hwilliams5f@about.me 36.57.228.16 319f:87a5:4250:3361:1db1:8fe9:a90b:2631 198 | 197 Kathryn Jones kjones5g@mtv.com 213.207.184.188 21e:ed77:5c6b:6ff6:6d3d:70f4:def0:2c26 199 | 198 Elizabeth Long elong5h@rambler.ru 33.183.31.41 46f1:5aa6:bfb8:3276:be69:50b9:ddaf:35fc 200 | 199 Maria Fox mfox5i@imgur.com 165.195.193.197 3f10:50ad:5f7c:7f94:4060:9d54:4873:ab0a 201 | 200 Alice Arnold aarnold5j@cafepress.com 90.22.61.218 ef7d:d681:891:3299:6be:555b:e4eb:3f6e 202 | 201 Clarence Lynch clynch5k@java.com 11.48.245.171 5f59:2c8b:16fc:b560:a86b:45ea:66f:4bf6 203 | 202 Nicholas Walker nwalker5l@github.io 226.147.87.237 204 | 203 Virginia Pierce vpierce5m@artisteer.com 157.127.195.97 de82:8e92:8475:2656:9254:4df2:9eb9:ab8c 205 | 204 Ryan Stone rstone5n@moonfruit.com 10.177.16.20 5bb5:5829:3524:3da0:f14:4854:3fd2:2988 206 | 205 Dorothy Sullivan dsullivan5o@networkadvertising.org 190.5.86.71 9d5d:90b6:7c2d:5e0a:df4c:a5a6:86f0:c1dc 207 | 206 George Pierce gpierce5p@twitter.com 112.133.89.110 208 | 207 Barbara White bwhite5q@cam.ac.uk 54.60.177.242 2cf3:9294:7cad:5741:3954:2aa8:20e5:e56 209 | 208 Philip Fisher pfisher5r@mediafire.com 180.4.249.84 210 | 209 Jean Medina jmedina5s@vk.com 194.118.188.12 211 | 210 Carlos Fowler cfowler5t@cnbc.com 24.242.95.237 e43e:d6e7:5373:4144:9424:727f:d7a3:f86d 212 | 211 Donald Sanchez dsanchez5u@yale.edu 53.11.180.26 21bd:32e6:6b58:d74:3565:100d:ca16:7aa1 213 | 212 Maria Bryant mbryant5v@patch.com 227.76.238.112 214 | 213 Kelly Roberts kroberts5w@nifty.com 146.135.173.236 215 | 214 Peter Russell prussell5x@home.pl 253.48.187.169 66bc:f5ce:9e78:12cc:393a:1a13:ce0:cf2f 216 | 215 Jennifer Bradley jbradley5y@bandcamp.com 145.23.147.139 914c:e897:cb25:b959:f2e6:2e49:ac36:8b2a 217 | 216 Thomas Johnson tjohnson5z@blogs.com 51.130.26.88 218 | 217 Donna Griffin dgriffin60@about.me 123.202.108.175 219 | 218 Joyce Gonzales jgonzales61@aol.com 16.6.95.38 220 | 219 Diana Dixon ddixon62@irs.gov 50.105.74.187 b125:873f:a5ef:aabc:beeb:1c33:e3a9:2567 221 | 220 Judy Wilson jwilson63@dmoz.org 229.156.223.12 222 | 221 Marie Torres mtorres64@sfgate.com 39.76.19.7 2beb:6b7a:8c2:98d5:cd61:e30a:eade:1dca 223 | 222 Joyce Howard jhoward65@networksolutions.com 59.34.73.14 b6b5:fda:9f4:3009:433d:6526:eac8:d9bb 224 | 223 Eugene Hansen ehansen66@deviantart.com 182.63.226.30 225 | 224 Anne Franklin afranklin67@1688.com 70.236.171.72 acb4:14ca:f424:2224:5057:9fd2:c2c8:4fa6 226 | 225 Carlos Martinez cmartinez68@tinyurl.com 253.206.153.116 fd4:368c:2ca5:56d7:b9b:4188:d57f:36c 227 | 226 Dorothy Williams dwilliams69@webs.com 197.107.45.57 bf73:c1b2:621:6309:cda8:aa9a:2ea6:dbb9 228 | 227 Randy Taylor rtaylor6a@cbsnews.com 95.61.234.131 229 | 228 Christine Gonzales cgonzales6b@time.com 184.239.177.162 1d60:683c:ecba:6b08:280a:78a5:dd7d:727e 230 | 229 Clarence Rogers crogers6c@pcworld.com 72.62.137.58 231 | 230 Richard Edwards redwards6d@pcworld.com 166.119.80.222 1d1d:140a:b88:b932:dc65:aa44:dca3:85be 232 | 231 Eugene Spencer espencer6e@studiopress.com 192.171.123.151 e7ac:a502:e66f:ed46:3b0a:a3ac:cb54:2426 233 | 232 Janet Nguyen jnguyen6f@ihg.com 8.83.124.208 82e:605a:1c5b:1ea5:138a:7d4c:fb1b:c845 234 | 233 Susan Graham sgraham6g@china.com.cn 137.98.170.167 bd54:6ebe:d9b3:9cf0:66e5:8fd7:68ff:a5c 235 | 234 Jeffrey Mccoy jmccoy6h@purevolume.com 11.35.240.142 236 | 235 Earl Foster efoster6i@uiuc.edu 228.98.208.124 237 | 236 Jesse Diaz jdiaz6j@shareasale.com 64.44.230.202 e648:613d:cefd:a692:2a40:172a:a944:e48a 238 | 237 Joan Johnston jjohnston6k@marketwatch.com 29.174.241.37 239 | 238 Randy Spencer rspencer6l@epa.gov 150.163.30.64 240 | 239 Nancy Roberts nroberts6m@psu.edu 89.146.126.203 f44c:c542:74c5:ae7e:618b:36c3:6825:1ab6 241 | 240 Steve Baker sbaker6n@google.ca 72.172.33.91 4e46:a2db:51a:63e9:d2dd:e27a:3e78:5268 242 | 241 John Marshall jmarshall6o@virginia.edu 172.192.26.90 5ede:6789:976f:2761:aba4:ff33:2504:a1d1 243 | 242 Henry Rogers hrogers6p@example.com 94.201.48.191 244 | 243 Gerald Cole gcole6q@multiply.com 102.139.54.107 245 | 244 Keith Fox kfox6r@va.gov 164.53.171.154 246 | 245 Lori Hicks lhicks6s@google.pl 250.92.219.50 247 | 246 Jason Bowman jbowman6t@geocities.com 166.15.83.14 9294:9fb6:302:7b3:5d42:87aa:f91e:63a 248 | 247 Joan Jordan jjordan6u@telegraph.co.uk 156.208.133.115 ffc9:31b7:4f85:4358:9dd9:68b4:33d:273c 249 | 248 Laura Hunter lhunter6v@timesonline.co.uk 218.171.120.199 250 | 249 Emily Morgan emorgan6w@technorati.com 139.34.233.54 9d4a:2d:6be6:763:1035:b954:202d:958f 251 | 250 Steve Nelson snelson6x@cdbaby.com 253.163.72.101 56b0:5c7d:f916:ec14:3330:ccd2:606d:c870 252 | 251 Barbara Stephens bstephens6y@tripadvisor.com 35.44.255.239 d756:7009:e4a5:e34f:7b6d:8039:4ab8:f4c7 253 | 252 Judy Banks jbanks6z@blogspot.com 56.15.49.219 d784:f36:246b:ff02:7860:5f1d:eb48:8f78 254 | 253 Sean Rose srose70@wordpress.org 176.58.22.13 255 | 254 Melissa Phillips mphillips71@dedecms.com 50.113.66.252 256 | 255 Thomas Hunter thunter72@oakley.com 19.133.92.100 7ffd:f9d7:b7b7:8677:ce13:f6b6:968a:7879 257 | 256 Dorothy Hart dhart73@independent.co.uk 53.175.25.121 258 | 257 Carol Baker cbaker74@pen.io 154.157.48.63 29c1:27d4:83c:9158:b576:3254:46c1:b2ee 259 | 258 Evelyn Ward eward75@nymag.com 205.111.155.123 1180:d6a9:9ccb:6f4e:10f3:10da:870f:49ef 260 | 259 Frances Myers fmyers76@jalbum.net 79.139.28.198 1b16:9adc:7392:bbd2:29d0:baab:fdc:1a72 261 | 260 Annie Armstrong aarmstrong77@deviantart.com 88.3.226.81 8b24:d936:854b:6601:ee05:72b1:9297:78b 262 | 261 Helen Cunningham hcunningham78@livejournal.com 127.167.48.22 263 | 262 Anna Grant agrant79@foxnews.com 93.32.39.168 264 | 263 Donald Collins dcollins7a@forbes.com 66.91.59.140 c15e:c6ce:9f1a:80f7:213a:fd64:18a4:9b48 265 | 264 Lori Warren lwarren7b@technorati.com 29.103.207.45 bec6:6213:125b:2025:dc89:51b2:be3c:6f34 266 | 265 Willie Collins wcollins7c@dot.gov 37.218.10.83 267 | 266 Sandra Gray sgray7d@thetimes.co.uk 237.95.194.91 8a8c:b9c9:d46e:bdd9:1276:b064:2c44:feb 268 | 267 Bruce Russell brussell7e@theatlantic.com 34.24.189.214 6830:258b:5aec:de42:85c:29c4:dfa1:950b 269 | 268 Gregory Graham ggraham7f@jimdo.com 69.175.203.177 6095:e893:fd75:4526:c82a:5c2:c401:65a9 270 | 269 Joe Ryan jryan7g@csmonitor.com 147.185.145.177 ca48:3c9a:9807:22b2:f2c2:43c4:ec9a:d540 271 | 270 Donna Holmes dholmes7h@addtoany.com 61.228.11.185 e09e:6a83:dcf1:969a:e3d8:4d06:73a8:66b2 272 | 271 Jessica Peterson jpeterson7i@kickstarter.com 154.166.238.16 273 | 272 Ruby Reyes rreyes7j@skype.com 213.25.174.163 a7a4:ab2c:7591:1190:147:250e:e6b2:a38e 274 | 273 Carlos Lopez clopez7k@edublogs.org 53.96.184.235 275 | 274 David Moreno dmoreno7l@canalblog.com 79.82.27.145 32bd:9a0c:e11f:8a55:a6d0:20bd:dc5a:1f20 276 | 275 Christine Stevens cstevens7m@phpbb.com 196.130.49.59 791b:8738:ec0c:6142:5bd0:909:e44a:32b5 277 | 276 Gary Gibson ggibson7n@nifty.com 206.159.176.205 70ae:a95c:f8e5:f17c:d102:e58b:1c3:c996 278 | 277 Amy Collins acollins7o@nasa.gov 187.114.24.133 7355:3c16:9ed0:3130:6b46:2d1c:a5b0:49c7 279 | 278 Judy Brooks jbrooks7p@washingtonpost.com 200.105.7.161 280 | 279 Daniel Harrison dharrison7q@amazon.co.uk 245.237.105.112 281 | 280 Stephen Cook scook7r@washingtonpost.com 221.85.118.254 282 | 281 Albert Howell ahowell7s@newsvine.com 214.32.154.185 1448:ba35:761d:31d2:6117:26be:6e0c:ecb8 283 | 282 Louise Torres ltorres7t@bloglines.com 58.125.83.149 284 | 283 Lori Weaver lweaver7u@mashable.com 78.205.54.16 285 | 284 Deborah Kennedy dkennedy7v@narod.ru 9.181.187.127 e0f7:6deb:4f5c:6a3f:ba71:352:f74c:31d1 286 | 285 Tammy Howard thoward7w@e-recht24.de 169.6.0.217 287 | 286 Justin Arnold jarnold7x@chronoengine.com 149.145.100.142 288 | 287 Dorothy Cox dcox7y@slashdot.org 189.38.38.18 289 | 288 Jimmy Ramirez jramirez7z@unblog.fr 235.28.238.32 290 | 289 Benjamin Alvarez balvarez80@narod.ru 125.249.198.98 291 | 290 Wayne James wjames81@chicagotribune.com 99.251.18.214 292 | 291 Paul Long plong82@go.com 134.255.33.189 293 | 292 Julie Phillips jphillips83@wisc.edu 253.221.234.26 c23f:3924:cd7c:7dbd:8286:6536:7c5a:5c4e 294 | 293 Norma Gardner ngardner84@tumblr.com 10.181.61.185 f28e:3364:94d8:9cf:54e8:5332:b89a:b1fd 295 | 294 Carol Johnson cjohnson85@tuttocitta.it 116.246.202.230 f927:8915:4584:e28c:504b:7d25:49b8:d7fa 296 | 295 Earl Armstrong earmstrong86@woothemes.com 194.9.244.235 297 | 296 Jennifer Kelly jkelly87@house.gov 209.240.163.107 e11a:f5e3:c439:5865:789:570e:a537:387b 298 | 297 Martha Armstrong marmstrong88@smugmug.com 11.71.149.30 299 | 298 Wayne Martin wmartin89@delicious.com 41.72.54.122 cb45:42e9:7882:9c93:ab4b:7a24:228f:9fe5 300 | 299 Antonio Franklin afranklin8a@oracle.com 172.131.34.127 301 | 300 Angela Cunningham acunningham8b@posterous.com 250.160.247.162 302 | 301 Lois Gonzales lgonzales8c@usatoday.com 175.246.223.217 303 | 302 Ralph Fisher rfisher8d@virginia.edu 43.189.107.135 304 | 303 William Harris wharris8e@go.com 158.64.202.171 ec63:bae5:ae91:1a56:95cd:8b14:3beb:a2ca 305 | 304 Jennifer Reyes jreyes8f@homestead.com 227.3.19.224 1b83:7ab9:299e:9ac5:7076:9f00:11c7:2e7 306 | 305 Harold Brown hbrown8g@gov.uk 229.28.65.209 307 | 306 Kathleen Jackson kjackson8h@de.vu 5.88.12.120 d9ee:9107:d4e9:9acd:984b:423c:a86a:63e6 308 | 307 Marilyn Garcia mgarcia8i@aol.com 58.118.148.238 fdeb:6995:d738:b668:720f:68e0:517e:478b 309 | 308 Michael Carpenter mcarpenter8j@google.com.br 176.128.223.58 dd80:2729:ae9f:af41:83e6:709a:d741:1088 310 | 309 Keith Perkins kperkins8k@opera.com 214.137.130.73 5e89:f23f:cd00:389f:9b2b:777c:1378:7c56 311 | 310 Ashley Diaz adiaz8l@boston.com 79.185.114.183 96b:16d7:4fa3:955f:73e2:eaa:4fb9:6fd2 312 | 311 Clarence Richardson crichardson8m@tuttocitta.it 44.93.87.172 313 | 312 Paul Lopez plopez8n@wiley.com 58.3.236.166 baca:c5d0:c40:9198:c0c7:358c:cc8d:637f 314 | 313 Willie Sanders wsanders8o@goo.gl 193.97.171.34 e6a8:8f0e:1ab1:c8d1:13da:5352:9f02:2911 315 | 314 Frances Myers fmyers8p@youtu.be 251.239.236.219 316 | 315 Kathryn Smith ksmith8q@mtv.com 15.36.213.134 c64c:8e84:f47c:bbbc:2780:ddd8:dccd:3876 317 | 316 William Palmer wpalmer8r@redcross.org 95.239.23.29 318 | 317 Jeremy Henderson jhenderson8s@weibo.com 205.58.199.229 e064:ab05:b802:988f:7f95:725b:244b:31f5 319 | 318 Adam Daniels adaniels8t@zdnet.com 223.146.161.44 a7da:f984:4cd:dfa4:ea32:87b0:36ea:c274 320 | 319 Angela Barnes abarnes8u@amazon.co.jp 225.171.187.103 321 | 320 Elizabeth Banks ebanks8v@youtu.be 192.98.249.145 7c6c:6de6:5a2b:bbc3:f1c0:c3ea:50b6:3145 322 | 321 Paula Willis pwillis8w@typepad.com 39.43.112.236 323 | 322 Carlos Morrison cmorrison8x@seesaa.net 118.40.25.206 9246:f12a:2c32:5ae5:2250:650b:e2bb:7162 324 | 323 Billy Reed breed8y@nps.gov 67.72.231.254 493b:4b01:ce9d:8786:66d0:c0fe:ad1e:4f75 325 | 324 Charles Robertson crobertson8z@liveinternet.ru 249.215.106.30 326 | 325 Martin Campbell mcampbell90@tinypic.com 55.63.216.128 1c2f:5891:aeb1:f167:1e70:2b00:935c:63ce 327 | 326 Paul Rice price91@psu.edu 82.227.242.13 328 | 327 Susan Moreno smoreno92@webeden.co.uk 157.190.156.149 decf:d7e1:50b8:e6dc:bbac:822a:a8ae:be07 329 | 328 Matthew Richardson mrichardson93@marketwatch.com 138.243.3.227 5eba:dbef:d2ff:5be5:264c:a0aa:3329:ce68 330 | 329 Philip Boyd pboyd94@nymag.com 125.183.81.39 6e5:fd5a:46e3:8d60:d2c5:3ba6:2c2c:1590 331 | 330 Judith Wheeler jwheeler95@nsw.gov.au 144.238.96.241 93a4:aa9b:c116:8bb0:af3c:2049:6053:3c05 332 | 331 Sean Romero sromero96@imdb.com 36.151.105.229 333 | 332 Brenda Olson bolson97@comsenz.com 1.113.39.48 1fea:ec81:dd4c:2fe1:a4be:6e2c:d929:64d6 334 | 333 Rebecca Wood rwood98@boston.com 166.78.14.248 335 | 334 Alice Barnes abarnes99@nih.gov 55.181.6.1 aac9:ca9b:6b9b:87e2:4272:32cd:abc1:c32f 336 | 335 Martin Harvey mharvey9a@google.cn 219.111.67.64 337 | 336 Bruce Cooper bcooper9b@usatoday.com 61.98.37.167 3106:8651:4373:817e:ebfa:c428:260e:2bf7 338 | 337 Donna Peterson dpeterson9c@paypal.com 94.103.108.180 339 | 338 Phyllis Cox pcox9d@independent.co.uk 9.184.183.239 340 | 339 Susan Bowman sbowman9e@surveymonkey.com 15.81.60.93 341 | 340 Kevin Kelly kkelly9f@goo.ne.jp 208.140.115.67 5497:de4d:6ed2:ab28:1dce:a8d7:19bb:a752 342 | 341 Katherine Cook kcook9g@blinklist.com 84.223.176.29 d215:35f9:cf5:94d0:5947:7fb0:613c:11e2 343 | 342 Louis Jackson ljackson9h@example.com 145.21.238.2 7fd0:38ed:6736:65ee:765:d18:f212:2e40 344 | 343 Sharon Fields sfields9i@scientificamerican.com 246.132.214.138 345 | 344 Steven Perkins sperkins9j@icq.com 220.96.117.68 5fff:48e1:daf:2cdb:360:ba13:972b:ebc5 346 | 345 Michael Wheeler mwheeler9k@google.pl 205.183.212.47 347 | 346 Jessica Crawford jcrawford9l@wikipedia.org 154.220.48.241 348 | 347 Peter Robinson probinson9m@chron.com 60.91.142.118 306e:1657:863:8744:60b7:7e46:61e9:3ce2 349 | 348 Ashley Austin aaustin9n@histats.com 62.88.191.189 350 | 349 Margaret Williamson mwilliamson9o@wisc.edu 125.252.109.16 351 | 350 Amanda Dunn adunn9p@wikimedia.org 69.208.29.191 42e:7a99:bd31:b79f:485d:9f3e:7fe4:16c1 352 | 351 Deborah Barnes dbarnes9q@si.edu 88.12.223.113 353 | 352 Ernest Bishop ebishop9r@technorati.com 191.49.30.141 354 | 353 Lois Sanchez lsanchez9s@who.int 47.187.247.79 852e:e23f:99f9:6816:65c7:b0db:684f:7f18 355 | 354 Alan Elliott aelliott9t@fda.gov 225.18.29.18 3dec:8a16:c95b:51ba:aa59:9263:6295:52b6 356 | 355 Marilyn Weaver mweaver9u@seesaa.net 251.220.53.209 b5f0:5d68:822:f486:2bc1:df3:8f11:71f6 357 | 356 Margaret Crawford mcrawford9v@chron.com 218.31.100.177 358 | 357 Diane Bailey dbailey9w@boston.com 105.152.130.94 e4cc:62da:a4f7:1502:7fff:ef12:d74:830f 359 | 358 Jack Chapman jchapman9x@shareasale.com 80.3.46.130 ecca:372c:d771:383d:e133:8a0:c358:840f 360 | 359 Bonnie Bradley bbradley9y@vk.com 94.204.126.198 361 | 360 Stephanie Reid sreid9z@csmonitor.com 142.4.149.102 2bda:8e2c:3348:c9b:2d:f8:8c00:d332 362 | 361 Aaron Howard ahowarda0@opensource.org 10.222.200.83 363 | 362 Howard Nelson hnelsona1@rakuten.co.jp 196.134.1.230 364 | 363 Frank Adams fadamsa2@vimeo.com 186.42.43.48 365 | 364 Joe Freeman jfreemana3@howstuffworks.com 154.109.118.145 366 | 365 Earl Roberts erobertsa4@bloglovin.com 82.94.113.235 367 | 366 Daniel Dixon ddixona5@cnbc.com 112.19.98.107 368 | 367 Theresa Arnold tarnolda6@cnbc.com 230.12.95.94 2aff:ea97:8d8f:766e:49d8:925a:9d9f:34d4 369 | 368 Sharon Ward swarda7@360.cn 229.229.210.230 4e23:c5bb:79c4:fe32:f68:d770:db2c:5585 370 | 369 Michael Elliott melliotta8@howstuffworks.com 12.120.154.47 f561:2638:564f:e712:3b59:18c8:78eb:65e5 371 | 370 Maria Griffin mgriffina9@merriam-webster.com 28.60.55.38 e364:be6a:6052:c475:a697:1f05:a4fb:83d1 372 | 371 Bruce Carpenter bcarpenteraa@networksolutions.com 16.31.200.202 323e:df30:f3f0:e0e0:c1cf:1faa:a4dc:66fb 373 | 372 Beverly Fields bfieldsab@bluehost.com 44.18.35.222 fa56:b13e:7a58:66e:dda:8e41:cecb:b914 374 | 373 Julia Ferguson jfergusonac@about.me 245.87.130.88 aa1c:9603:1250:3ed6:251d:4709:dbc2:c971 375 | 374 Aaron Rose arosead@dell.com 81.144.213.86 64f8:508b:ea91:8d29:9385:c9a9:ea86:e95 376 | 375 Tammy Adams tadamsae@technorati.com 45.2.183.222 5067:5497:a5c7:9072:196a:392f:696c:afd7 377 | 376 Russell Pierce rpierceaf@t.co 11.240.42.124 378 | 377 Justin Jackson jjacksonag@mozilla.com 80.120.53.84 379 | 378 Roger Clark rclarkah@github.com 154.188.134.7 380 | 379 Jacqueline Butler jbutlerai@state.tx.us 211.110.51.255 381 | 380 Ernest Nelson enelsonaj@independent.co.uk 91.47.198.53 382 | 381 Gary Flores gfloresak@comsenz.com 47.144.137.109 8ec2:c3e:e2b4:7e62:7783:6cd8:a99b:71bf 383 | 382 Scott Martin smartinal@networksolutions.com 26.184.135.197 fd4d:d28e:cbde:ba3a:8bb9:e5f5:e574:b45 384 | 383 Irene Flores ifloresam@walmart.com 204.219.94.228 e1fd:4cff:a46:b100:ef94:3a7d:4be2:b3de 385 | 384 Beverly Morrison bmorrisonan@so-net.ne.jp 56.103.91.103 386 | 385 Jessica Day jdayao@xrea.com 1.17.124.241 7055:a991:5f78:233a:dab9:a64b:2745:ff57 387 | 386 Mildred Burns mburnsap@bbb.org 156.150.141.126 96e0:e787:ce93:1dc8:8629:d968:3783:95a7 388 | 387 Dennis Hansen dhansenaq@mysql.com 28.162.72.20 389 | 388 Marie Wood mwoodar@engadget.com 60.188.227.60 970f:97d0:2168:302b:1a34:42e9:1a4a:f128 390 | 389 Doris Gardner dgardneras@hibu.com 183.131.131.157 391 | 390 Bruce Hayes bhayesat@hud.gov 142.208.79.175 392 | 391 Jessica Schmidt jschmidtau@ucla.edu 172.114.169.99 393 | 392 Craig Patterson cpattersonav@nhs.uk 108.190.182.26 d69c:192a:dd7d:976:6081:4e4a:4727:74b8 394 | 393 Alan Berry aberryaw@foxnews.com 178.234.178.21 395 | 394 Joseph Robertson jrobertsonax@imgur.com 113.252.49.120 e704:82ca:c8d0:6ab1:44dc:c728:cdcc:563b 396 | 395 Albert Grant agrantay@umn.edu 53.158.219.48 397 | 396 Timothy Gardner tgardneraz@elegantthemes.com 141.115.16.77 3540:39fe:3f2d:8628:f559:53:b1da:5a31 398 | 397 Kevin Lee kleeb0@sakura.ne.jp 16.129.150.246 33a4:4874:75fb:2034:970b:6d88:68e5:861a 399 | 398 Annie Edwards aedwardsb1@deliciousdays.com 53.159.181.84 400 | 399 Laura Bryant lbryantb2@wsj.com 153.38.17.222 f301:5cb3:4f6c:50f4:3629:bd18:7d61:c801 401 | 400 Theresa Mcdonald tmcdonaldb3@yelp.com 59.54.114.158 402 | 401 Rachel Payne rpayneb4@opera.com 20.236.105.172 403 | 402 Scott Morris smorrisb5@hud.gov 153.7.113.219 404 | 403 Diane Medina dmedinab6@topsy.com 178.175.173.102 405 | 404 Justin Hamilton jhamiltonb7@github.io 72.191.93.147 c771:d7f7:47ce:db18:25ce:ca99:8136:2248 406 | 405 Jack Woods jwoodsb8@cbc.ca 146.229.231.118 407 | 406 Phyllis Austin paustinb9@wikimedia.org 112.147.232.28 e5d:45b2:5d9f:8d00:9963:cbaf:83d0:9135 408 | 407 Ernest Sanders esandersba@altervista.org 240.30.188.241 409 | 408 Stephanie Lane slanebb@addtoany.com 14.184.146.230 410 | 409 Kenneth Romero kromerobc@slate.com 195.67.53.235 6094:ca7b:b643:6adf:9a0:3f03:c25f:817b 411 | 410 Janice Berry jberrybd@webs.com 182.14.205.230 412 | 411 Harry Hall hhallbe@eepurl.com 214.116.176.128 af70:ed4b:fa69:97e7:82f:9185:1bd4:1942 413 | 412 Andrea Garrett agarrettbf@tmall.com 143.193.167.160 414 | 413 Frances Watson fwatsonbg@alexa.com 76.164.160.13 415 | 414 Maria Dixon mdixonbh@paginegialle.it 212.176.139.95 416 | 415 Patrick Duncan pduncanbi@artisteer.com 197.78.116.227 417 | 416 Donna Arnold darnoldbj@about.com 20.188.76.93 418 | 417 Andrew Wright awrightbk@xing.com 166.209.177.30 306b:5a95:3dc0:83c8:d6e0:f5e3:e711:dc57 419 | 418 Joshua Gardner jgardnerbl@eepurl.com 156.119.215.64 420 | 419 Douglas Patterson dpattersonbm@unblog.fr 193.124.39.12 8f29:f205:dae:abd:2fe:56a5:ddff:a941 421 | 420 Margaret Weaver mweaverbn@imageshack.us 207.20.20.150 a296:c59f:1ab2:aa10:a2e7:17b1:bfca:5cfb 422 | 421 Cheryl Moreno cmorenobo@hubpages.com 178.194.224.143 f8d5:1e69:e636:3f47:6500:2194:b639:8ac6 423 | 422 Timothy Robertson trobertsonbp@icio.us 55.34.217.27 4f01:b261:e8b8:fda:aab:3305:a482:a00c 424 | 423 Martha Gordon mgordonbq@ca.gov 95.69.162.77 425 | 424 Ernest Baker ebakerbr@time.com 27.77.219.211 5560:48a6:7508:4789:ac5:635c:ac94:60e 426 | 425 Theresa Gomez tgomezbs@google.de 25.115.175.23 427 | 426 Louis Griffin lgriffinbt@marriott.com 245.55.8.38 a96c:9a02:ab1a:634e:921:cd3e:bcd7:eb73 428 | 427 Jeremy Henderson jhendersonbu@jalbum.net 59.24.245.37 4b34:5d71:26b7:17ac:8351:280e:cd92:d863 429 | 428 Timothy Porter tporterbv@umich.edu 22.238.207.238 430 | 429 Denise Ruiz druizbw@youku.com 36.230.136.226 f5b0:3ad2:91df:c64c:fd35:98c1:275d:7fe8 431 | 430 Julie Green jgreenbx@huffingtonpost.com 119.50.84.192 3159:c0c5:786:73c8:2c5f:c779:17b5:dbaf 432 | 431 Laura Clark lclarkby@pen.io 36.70.83.107 433 | 432 Beverly Larson blarsonbz@thetimes.co.uk 255.13.108.27 2001:f142:b48b:d6ab:97a6:cbd2:8076:6dcd 434 | 433 Jessica Thompson jthompsonc0@pinterest.com 72.64.117.133 fc14:1ba:c8c7:5539:780:120b:804a:5496 435 | 434 Clarence Bradley cbradleyc1@joomla.org 147.246.228.94 436 | 435 Virginia Ryan vryanc2@google.de 173.245.55.212 a5e2:8298:3c35:20d5:9cee:6f5a:fe52:df2f 437 | 436 Gerald Morrison gmorrisonc3@ehow.com 35.243.71.81 438 | 437 Virginia Lopez vlopezc4@washingtonpost.com 175.175.185.45 439 | 438 Donald Cook dcookc5@twitpic.com 241.218.81.160 440 | 439 Jeremy Wheeler jwheelerc6@theatlantic.com 142.220.251.128 441 | 440 Joyce Harris jharrisc7@e-recht24.de 67.114.16.219 442 | 441 Gregory Dunn gdunnc8@discovery.com 86.254.140.220 443 | 442 Frank Ford ffordc9@google.com.hk 90.5.146.64 444 | 443 Susan Fisher sfisherca@smh.com.au 190.11.238.98 445 | 444 Bruce Ramirez bramirezcb@cbslocal.com 50.94.184.157 446 | 445 Terry Wood twoodcc@who.int 115.54.156.148 447 | 446 Jacqueline Wells jwellscd@slate.com 68.73.92.228 c5ee:4666:f1fa:8b91:33f6:36ab:be4d:fe12 448 | 447 Willie Dunn wdunnce@japanpost.jp 133.87.120.97 449 | 448 Jessica Mendoza jmendozacf@bloomberg.com 16.215.234.60 450 | 449 Sharon Banks sbankscg@berkeley.edu 185.113.209.114 86d6:1837:7b35:9857:baf1:445b:83f0:efbc 451 | 450 Jonathan Mcdonald jmcdonaldch@netlog.com 31.112.242.163 2b1:97f0:a097:ed37:a9fc:d5d5:6738:f593 452 | 451 Craig Campbell ccampbellci@flavors.me 95.199.142.63 7f5f:2679:e5c3:e6f4:e1e3:213e:70f5:1028 453 | 452 Evelyn Hall ehallcj@cbsnews.com 109.40.68.161 454 | 453 Ashley Young ayoungck@twitter.com 204.29.17.159 5815:eb1d:8924:6642:1d52:e257:613b:fa5f 455 | 454 Judith Watkins jwatkinscl@ustream.tv 97.38.142.40 a312:24da:451d:a2df:6830:a73e:59ae:fea8 456 | 455 Craig Owens cowenscm@mtv.com 158.122.119.5 6366:d6ea:ecc1:79ee:351b:dd89:d6a:a6a 457 | 456 Gregory Watkins gwatkinscn@usgs.gov 107.93.34.29 458 | 457 Larry Morris lmorrisco@ucoz.com 191.135.217.92 a0f6:93a0:55e0:175e:b151:4d31:9187:541f 459 | 458 Kathleen Ramirez kramirezcp@discovery.com 77.15.96.86 817b:7eb:fdbc:3429:a534:78a0:a41:f303 460 | 459 Carlos Ramos cramoscq@washington.edu 195.246.112.52 716:98f:6884:8311:3bd5:e1e2:c595:6a6e 461 | 460 Ernest Pierce epiercecr@icio.us 5.135.109.83 51dd:a1c3:2d2d:df7f:5359:ed83:c6b0:2294 462 | 461 Louise Bryant lbryantcs@yelp.com 80.254.208.171 6f8a:8c51:9516:c618:90e0:fcf2:8003:407e 463 | 462 Linda James ljamesct@cdc.gov 46.0.251.86 464 | 463 Carol Ramos cramoscu@google.it 33.35.46.207 4ebd:bc4d:e62c:b38:ab31:917a:225d:2271 465 | 464 Kathleen Austin kaustincv@drupal.org 105.94.121.243 466 | 465 Amy Mcdonald amcdonaldcw@mac.com 104.252.83.53 fe3d:f7bc:5ce3:567d:c4d1:87d2:9b06:7bc4 467 | 466 Katherine Gordon kgordoncx@nytimes.com 113.148.243.7 7479:7435:b386:d7ab:293d:3015:cfeb:cb8a 468 | 467 Paul Greene pgreenecy@ezinearticles.com 201.246.170.105 469 | 468 Russell Gordon rgordoncz@squarespace.com 15.139.11.146 db40:aaaa:5be0:f6ed:8dc8:3c13:ed4:e65 470 | 469 Phyllis Reynolds preynoldsd0@ask.com 185.59.207.212 471 | 470 Billy Russell brusselld1@wisc.edu 120.13.33.89 4bd4:8da2:ddca:1bc9:b1b6:27:a8b7:f39b 472 | 471 Joshua Gonzalez jgonzalezd2@boston.com 35.238.76.236 473 | 472 Jerry Day jdayd3@unblog.fr 245.141.190.132 81ef:53f5:70fa:23a0:fcc7:ff6b:85e8:fab4 474 | 473 Carol Peterson cpetersond4@wordpress.com 203.3.50.54 475 | 474 Marie Washington mwashingtond5@va.gov 13.89.200.63 476 | 475 Stephen Adams sadamsd6@gmpg.org 11.140.134.36 8cfc:7fcd:1cde:8446:70e0:a30d:1116:6f95 477 | 476 Paul Holmes pholmesd7@paginegialle.it 237.8.69.94 478 | 477 Dorothy Woods dwoodsd8@kickstarter.com 154.22.160.185 479 | 478 Louis Kelly lkellyd9@ycombinator.com 61.213.61.253 ae0c:8b57:b17c:97e3:a250:f760:5fc9:6f9a 480 | 479 Janice Reed jreedda@bandcamp.com 3.77.3.160 481 | 480 Frances Sanchez fsanchezdb@lulu.com 17.248.83.149 1c91:e772:d8a7:177f:a85d:9dc3:471:acc9 482 | 481 Joan Davis jdavisdc@theglobeandmail.com 10.67.11.10 483 | 482 Randy Cole rcoledd@amazon.de 39.202.221.106 12b6:68d6:c1aa:7bb0:f341:d31a:de96:ba13 484 | 483 Denise Taylor dtaylorde@webs.com 34.124.180.101 7ac3:340:f179:fc67:ca88:1f0f:4c76:2314 485 | 484 Jose Lawrence jlawrencedf@clickbank.net 172.126.6.86 19c:f761:f92a:ef79:90c7:6081:3ffc:bcfe 486 | 485 Robin Hernandez rhernandezdg@latimes.com 189.144.63.207 487 | 486 Larry Fernandez lfernandezdh@samsung.com 234.125.205.178 7df4:9af1:e1c7:ce62:ab4a:bb59:671d:fac4 488 | 487 Joe Evans jevansdi@acquirethisname.com 179.14.36.38 c2c1:9741:7613:7aa7:2859:7a31:3388:f2ac 489 | 488 Rebecca Clark rclarkdj@sbwire.com 181.15.73.105 490 | 489 Deborah Wells dwellsdk@ebay.com 254.36.253.213 6420:8523:2fe7:fc74:6707:e18f:b25c:8d2d 491 | 490 Kevin Fields kfieldsdl@nytimes.com 68.180.45.19 492 | 491 Evelyn Miller emillerdm@mac.com 138.215.210.2 ac96:179c:4a57:5a71:8dd9:716:fa85:1261 493 | 492 Timothy Ramirez tramirezdn@sogou.com 134.31.0.154 494 | 493 Sharon Nelson snelsondo@intel.com 114.221.205.27 dfac:4630:2e14:24c1:e958:9f9c:16fc:33ef 495 | 494 Chris Burns cburnsdp@utexas.edu 249.93.83.12 496 | 495 Edward Austin eaustindq@tumblr.com 195.85.103.120 497 | 496 Tina Lewis tlewisdr@usatoday.com 56.194.1.50 e656:9b3a:8d11:902d:ce82:a4ce:417c:455f 498 | 497 Timothy Bowman tbowmands@hp.com 125.113.61.77 499 | 498 Rose West rwestdt@netlog.com 111.226.172.157 500 | 499 Amy Ramos aramosdu@bloglines.com 135.68.106.9 501 | 500 Arthur Foster afosterdv@businesswire.com 36.136.232.35 502 | 501 Anthony Day adaydw@newsvine.com 65.57.213.208 503 | 502 Dorothy Holmes dholmesdx@amazon.co.jp 18.246.111.43 504 | 503 Aaron Spencer aspencerdy@wikia.com 226.218.162.20 505 | 504 Wayne Alexander walexanderdz@omniture.com 101.134.192.83 506 | 505 Anna Griffin agriffine0@cargocollective.com 88.70.104.78 507 | 506 Christina Lawson clawsone1@stanford.edu 128.206.119.85 508 | 507 Julia Davis jdavise2@rakuten.co.jp 88.116.24.209 388a:cb72:9af8:2637:da69:c336:2d5:4a8d 509 | 508 Andrea Sanders asanderse3@comcast.net 238.33.15.85 f0a4:3084:5954:2a6e:7406:3c40:b8b1:3942 510 | 509 Christopher Sanchez csancheze4@oaic.gov.au 109.116.212.251 548d:47b6:973:eda0:fe6b:a68d:3ff2:6554 511 | 510 Paula Perkins pperkinse5@va.gov 183.34.136.130 3a9:689:64b1:2b63:5a94:ef76:db74:f352 512 | 511 Emily Morrison emorrisone6@businessweek.com 205.200.249.120 513 | 512 Marie Reed mreede7@diigo.com 162.150.27.53 514 | 513 Ashley White awhitee8@icio.us 229.193.48.53 895d:d8f3:126c:c953:4917:e792:9669:b750 515 | 514 David Chavez dchaveze9@hud.gov 182.200.105.188 516 | 515 Roy Hughes rhughesea@foxnews.com 212.144.30.183 efa4:21dd:abd5:84c4:6a37:62b2:9617:fc13 517 | 516 Carl Garrett cgarretteb@statcounter.com 12.70.141.78 7da5:936d:4676:2bf6:19f8:9d70:159e:c174 518 | 517 Jason Fox jfoxec@hatena.ne.jp 13.141.112.156 519 | 518 Mark Simpson msimpsoned@theguardian.com 66.105.40.218 520 | 519 Heather Stanley hstanleyee@tamu.edu 161.195.201.71 521 | 520 Howard Stephens hstephensef@vinaora.com 11.158.192.133 9be4:be37:685d:bf26:dbae:ae86:fade:f720 522 | 521 Shawn Ramos sramoseg@shop-pro.jp 236.144.202.229 523 | 522 Elizabeth Stanley estanleyeh@behance.net 109.184.26.166 524 | 523 Justin Graham jgrahamei@smh.com.au 175.62.253.246 8a88:3022:5306:6ccc:39ad:99ec:7cb1:1a8f 525 | 524 George Vasquez gvasquezej@samsung.com 84.253.82.254 690d:da66:8019:ac4e:2564:ab84:453f:c5c0 526 | 525 Samuel Brown sbrownek@slideshare.net 12.56.14.212 527 | 526 Earl Carpenter ecarpenterel@amazon.de 65.132.127.155 528 | 527 Ronald Torres rtorresem@adobe.com 157.124.165.139 529 | 528 Jason Griffin jgriffinen@xing.com 55.11.106.32 530 | 529 Heather Mitchell hmitchelleo@wiley.com 69.130.189.253 531 | 530 Aaron Shaw ashawep@prnewswire.com 87.26.239.19 532 | 531 Brandon Owens bowenseq@stumbleupon.com 255.70.58.251 533 | 532 Karen Taylor ktaylorer@1688.com 151.255.75.91 534 | 533 Daniel White dwhitees@moonfruit.com 102.219.24.155 df96:c24:866b:3f64:2f1b:1f00:ea7:6f76 535 | 534 Donna Gonzalez dgonzalezet@feedburner.com 3.36.187.2 536 | 535 Billy Watkins bwatkinseu@deliciousdays.com 110.54.190.249 3147:382b:11ea:a376:ce4a:f20e:8130:6b2b 537 | 536 Roger Hart rhartev@hhs.gov 206.181.133.25 a8c9:9552:a3b6:db64:a6ff:ab13:6009:5c87 538 | 537 George Parker gparkerew@ifeng.com 94.245.112.135 539 | 538 Judy Sanders jsandersex@mlb.com 156.34.60.171 fa2b:b3ec:11d4:4c46:dbc0:9e05:e97b:31f9 540 | 539 Cynthia Mcdonald cmcdonaldey@nydailynews.com 138.243.102.248 541 | 540 Melissa Harris mharrisez@irs.gov 47.160.47.64 f6fa:537c:a798:80e:65cd:172:3a33:3477 542 | 541 Michael Stone mstonef0@canalblog.com 121.220.169.5 543 | 542 Doris Nichols dnicholsf1@usgs.gov 54.9.243.0 544 | 543 Katherine Parker kparkerf2@army.mil 146.249.127.9 545 | 544 Shirley Griffin sgriffinf3@ustream.tv 119.176.43.174 546 | 545 Aaron Nguyen anguyenf4@cdbaby.com 221.3.223.42 98a9:6c5d:2ddf:9e03:92ea:9e7:1d8a:f41d 547 | 546 Shawn Brooks sbrooksf5@tinypic.com 231.174.25.9 548 | 547 Ruth Reed rreedf6@google.fr 82.33.238.188 549 | 548 Joe Webb jwebbf7@webeden.co.uk 123.197.95.197 550 | 549 Anne Harvey aharveyf8@vistaprint.com 100.222.172.49 551 | 550 Jennifer Franklin jfranklinf9@wikia.com 159.239.193.99 fe57:5816:304d:b990:33de:6ce8:8d58:9d75 552 | 551 Shirley Parker sparkerfa@unesco.org 116.121.102.65 553 | 552 Roy Young ryoungfb@spotify.com 238.8.177.192 7acf:3caf:3fb1:37f6:abba:fef8:818e:c341 554 | 553 Anthony Porter aporterfc@ca.gov 34.83.31.33 555 | 554 Larry Palmer lpalmerfd@nbcnews.com 223.135.237.22 556 | 555 Diane Carter dcarterfe@devhub.com 26.118.85.232 557 | 556 Martin Reed mreedff@tripadvisor.com 229.252.136.172 af53:a198:d883:ed68:cab2:9ce7:498d:9c3d 558 | 557 Ryan Rose rrosefg@illinois.edu 168.12.58.243 559 | 558 Martha Richardson mrichardsonfh@foxnews.com 49.184.35.44 560 | 559 Catherine Gordon cgordonfi@latimes.com 202.201.201.156 820b:d74b:4a94:758a:be13:1554:d8ec:2843 561 | 560 Earl Carroll ecarrollfj@unc.edu 55.192.121.226 562 | 561 David Rivera driverafk@bravesites.com 99.32.89.228 563 | 562 Jacqueline Wells jwellsfl@google.ru 2.15.131.119 564 | 563 Bonnie Wheeler bwheelerfm@si.edu 133.182.90.123 b817:c8e5:e3b5:5ccf:160:9080:a8ca:909a 565 | 564 Jessica Hunt jhuntfn@1688.com 214.84.23.139 2b7d:45ec:12bd:ef74:611e:28bc:8c7d:80c2 566 | 565 Carolyn Lewis clewisfo@google.ru 246.43.225.118 567 | 566 Wanda Jenkins wjenkinsfp@networkadvertising.org 82.102.165.26 568 | 567 Elizabeth Crawford ecrawfordfq@youtube.com 67.245.33.129 569 | 568 Howard Richards hrichardsfr@yellowbook.com 57.19.114.149 af82:1efe:bfb4:f552:b50f:211f:f5f:d326 570 | 569 Harry Campbell hcampbellfs@newyorker.com 62.178.200.229 571 | 570 Mark Lee mleeft@ebay.co.uk 80.25.94.200 e5bf:9f52:f0a0:1b6c:79e0:802a:bc6e:8eef 572 | 571 Ruth Jordan rjordanfu@whitehouse.gov 241.99.180.64 3573:d593:2ded:8db9:1ddd:7b29:87f2:b9e 573 | 572 Kathryn Grant kgrantfv@nature.com 83.175.9.167 b51f:965e:4b07:f642:c4d6:7d3d:6e65:30d 574 | 573 Angela Campbell acampbellfw@comsenz.com 191.254.69.192 575 | 574 Kevin Lewis klewisfx@adobe.com 86.187.0.228 576 | 575 Joyce Carter jcarterfy@sitemeter.com 90.162.54.20 56bf:686c:79c6:f2cf:e9af:6fc4:7aae:d041 577 | 576 Jesse Hart jhartfz@skype.com 37.23.127.237 541f:5dee:b296:d229:e652:ca4f:5608:4663 578 | 577 Heather Brooks hbrooksg0@e-recht24.de 12.240.226.102 579 | 578 Bobby Peters bpetersg1@indiatimes.com 103.242.114.216 580 | 579 Andrew Murray amurrayg2@census.gov 59.53.134.194 b9b3:6f94:9c05:f4a0:59fb:c422:e682:c3ce 581 | 580 Jacqueline Williams jwilliamsg3@toplist.cz 82.181.243.249 b334:f42a:1d80:190e:463a:2abd:35d3:98f5 582 | 581 Sara Phillips sphillipsg4@sourceforge.net 169.164.247.145 583 | 582 Virginia Baker vbakerg5@earthlink.net 105.163.95.142 5c26:134f:1f38:9b83:4359:635a:2e80:d5d7 584 | 583 Willie Harris wharrisg6@surveymonkey.com 234.254.170.243 585 | 584 Robert Ramirez rramirezg7@mapy.cz 81.176.93.189 586 | 585 Billy Howard bhowardg8@bizjournals.com 60.11.217.31 587 | 586 Harry Vasquez hvasquezg9@hao123.com 235.195.69.245 d8e0:ef7e:30d9:4396:3887:53b0:f66d:3f07 588 | 587 Albert Patterson apattersonga@unc.edu 144.97.50.200 589 | 588 Cheryl Fowler cfowlergb@redcross.org 73.221.125.11 e78:1d5f:6d55:8c4b:8c27:3a6e:74e1:2db7 590 | 589 Bobby Murphy bmurphygc@usatoday.com 247.129.240.152 bd33:7bed:3aa0:de7e:b8ae:c6ed:e2e6:ccd6 591 | 590 Linda Graham lgrahamgd@cafepress.com 161.97.94.252 592 | 591 Raymond Fuller rfullerge@yolasite.com 207.238.124.218 44d8:2212:35f8:597f:4439:bdfc:a064:53a3 593 | 592 Joshua Harrison jharrisongf@icio.us 29.231.82.75 594 | 593 Elizabeth Harris eharrisgg@cbslocal.com 86.213.184.121 595 | 594 Eugene Garrett egarrettgh@zimbio.com 24.115.68.23 3638:8554:e783:d32e:5a86:8127:9622:222e 596 | 595 George Morales gmoralesgi@cdbaby.com 196.168.87.137 5bd6:1aba:4412:9456:b96c:5fb1:f0b0:ed85 597 | 596 Jeremy Hicks jhicksgj@webmd.com 152.155.162.82 7ed9:a5a9:a9aa:53f4:8b90:20dc:49c4:7485 598 | 597 Anne Kim akimgk@sciencedaily.com 83.111.104.5 45eb:a4c8:d2f6:611d:f891:875:4cb2:ec97 599 | 598 Philip Holmes pholmesgl@yahoo.co.jp 155.62.105.96 600 | 599 Maria Mills mmillsgm@china.com.cn 218.244.173.3 775d:ff33:6943:10c:bef8:dd53:d8b1:2960 601 | 600 Eugene Andrews eandrewsgn@ehow.com 223.91.182.66 602 | 601 Peter Ross prossgo@google.pl 78.168.230.104 603 | 602 Victor Simmons vsimmonsgp@sitemeter.com 255.180.182.162 30f2:a58:a607:a285:fc6b:ab1d:c48e:9fc3 604 | 603 Carolyn Hunt chuntgq@google.co.jp 181.21.7.61 b5dd:9923:ac12:f0f:96da:c340:c79d:dd7e 605 | 604 Dennis Hill dhillgr@jalbum.net 159.146.129.251 9a15:2413:a3dd:343b:1f65:7f8d:4468:3a 606 | 605 Nancy Shaw nshawgs@hubpages.com 213.163.253.156 535e:825b:ff14:f05f:c70f:2171:c489:f3c3 607 | 606 Kimberly Burns kburnsgt@usatoday.com 11.112.129.88 2c0b:b184:d7c9:66a5:7544:ad17:8bed:49da 608 | 607 Karen Wood kwoodgu@deliciousdays.com 189.69.243.224 d639:c30a:882:a88e:df01:98fd:c10a:fa98 609 | 608 Jimmy Fernandez jfernandezgv@wikia.com 201.105.52.61 1f2:cc3a:f945:d751:515:fa6:7651:2513 610 | 609 Eric Moreno emorenogw@epa.gov 192.167.16.36 611 | 610 Adam Foster afostergx@army.mil 232.39.194.209 32fa:64e1:9a94:f195:f4f8:1110:44db:3bca 612 | 611 Walter White wwhitegy@odnoklassniki.ru 146.59.27.252 613 | 612 Nancy Johnson njohnsongz@chicagotribune.com 74.164.65.108 614 | 613 Lori Garza lgarzah0@tuttocitta.it 72.95.156.176 dbdf:120f:3372:8cc:515c:fa2a:848e:ec28 615 | 614 Justin Jones jjonesh1@artisteer.com 7.167.138.191 616 | 615 Kathleen Bailey kbaileyh2@reddit.com 98.56.145.203 b39:1382:8b29:a460:c106:3ec:643d:38a 617 | 616 Melissa Gomez mgomezh3@state.tx.us 222.127.96.128 5cd2:e191:23c:d1f7:a5bf:38dc:b574:a190 618 | 617 Norma Wallace nwallaceh4@pbs.org 74.92.109.114 1591:2034:d2da:a746:14ac:2e82:c60c:c609 619 | 618 Margaret Franklin mfranklinh5@bigcartel.com 224.150.240.30 620 | 619 Anthony Armstrong aarmstrongh6@yelp.com 114.229.140.159 4d26:e46c:a0d8:bf21:4e8:41d:4c01:1a6b 621 | 620 Donna Stephens dstephensh7@telegraph.co.uk 198.197.206.194 622 | 621 Patricia Harrison pharrisonh8@house.gov 148.254.7.192 27c:ab93:ab0c:ea3:ce41:8bf9:d51b:1850 623 | 622 Adam Perez aperezh9@netscape.com 193.161.39.101 624 | 623 Willie Morgan wmorganha@zdnet.com 175.108.136.153 625 | 624 Alan Phillips aphillipshb@mac.com 241.1.136.217 626 | 625 Joe Day jdayhc@theguardian.com 119.213.137.96 627 | 626 Louis Kelly lkellyhd@apache.org 162.26.83.6 19e2:dc69:6ead:5c37:61f6:7c99:a36d:2124 628 | 627 Christine Hughes chugheshe@weibo.com 179.146.237.90 c52a:9a27:908f:98c3:cec8:9f1a:3771:15e1 629 | 628 Kathleen Mcdonald kmcdonaldhf@microsoft.com 109.235.113.108 1bc7:3935:df39:aed:869a:28f6:a8d:92ea 630 | 629 Katherine Olson kolsonhg@google.es 59.213.144.49 c746:1e2d:ed7c:d115:4eec:346a:bc9c:feaf 631 | 630 Angela Tucker atuckerhh@wisc.edu 164.162.144.80 632 | 631 Deborah Young dyounghi@go.com 208.134.176.125 633 | 632 Sandra Bailey sbaileyhj@live.com 99.94.61.21 634 | 633 Randy Spencer rspencerhk@bizjournals.com 75.55.5.148 72ea:48ba:34aa:eb9d:9b64:e012:8d79:a84d 635 | 634 Sarah Mitchell smitchellhl@wufoo.com 189.229.96.11 dff4:b45b:fa63:8aff:c659:f7cc:14e5:3a3b 636 | 635 Joe Hart jharthm@microsoft.com 128.130.121.246 bb4:4560:d7c9:a0c0:ea0f:3969:419e:4561 637 | 636 Shawn Gonzales sgonzaleshn@ucla.edu 47.18.139.158 834a:97ce:e8c:9b77:3378:e7d:986b:68bf 638 | 637 Teresa Robertson trobertsonho@thetimes.co.uk 214.204.254.19 639 | 638 Rose Martinez rmartinezhp@digg.com 13.186.52.255 6d40:31fe:a1bd:f23c:5d0b:5e6e:3ee8:ba1d 640 | 639 Catherine Olson colsonhq@bigcartel.com 55.54.53.128 641 | 640 Ronald Cole rcolehr@behance.net 190.176.84.72 2947:e3e5:689:eb99:4203:8b2f:a389:336b 642 | 641 Marilyn Robertson mrobertsonhs@google.ca 8.45.56.88 16c5:bbb6:fa62:6a4e:650c:d6e6:311f:d50f 643 | 642 Carolyn Coleman ccolemanht@admin.ch 13.11.75.242 644 | 643 Christina Carr ccarrhu@comsenz.com 47.121.57.19 645 | 644 Carl Porter cporterhv@google.it 173.255.153.121 646 | 645 Elizabeth Perez eperezhw@engadget.com 192.94.46.47 fa3c:2be6:6d27:2664:c9a1:b15b:43cd:bec8 647 | 646 Robert Chavez rchavezhx@studiopress.com 38.53.162.143 648 | 647 Lori Martin lmartinhy@xrea.com 210.255.152.155 649 | 648 Donald Miller dmillerhz@soup.io 137.43.71.231 cf77:2f4c:de9a:a092:ce4f:46e2:6235:a615 650 | 649 Paul Little plittlei0@squidoo.com 81.64.37.216 c9f1:178c:a732:db1a:fa89:a407:1dd:7978 651 | 650 Judy Rodriguez jrodriguezi1@symantec.com 219.29.231.162 68:64bc:bcd1:805c:5ff1:a2c:2765:fca7 652 | 651 Lisa Mitchell lmitchelli2@cpanel.net 209.121.228.239 a123:8efb:f418:8d9c:a680:e6eb:2b22:8468 653 | 652 Philip Ruiz pruizi3@sfgate.com 119.26.220.158 654 | 653 Ralph Woods rwoodsi4@bigcartel.com 53.244.11.150 655 | 654 Amanda Coleman acolemani5@cloudflare.com 253.139.240.242 656 | 655 Debra Romero dromeroi6@spiegel.de 87.153.39.224 f8de:b95e:a29f:d410:95f9:3c85:61f0:aa97 657 | 656 Gloria Harper gharperi7@i2i.jp 235.127.128.114 658 | 657 Sarah Cole scolei8@dion.ne.jp 173.168.120.154 1da:759b:8991:3d12:dd5a:8ea9:8944:d37b 659 | 658 Benjamin Spencer bspenceri9@oracle.com 225.217.110.129 660 | 659 Lois Harris lharrisia@mapquest.com 33.246.142.60 fb7a:be5d:fcd5:3998:a5bf:a7d6:402f:9dba 661 | 660 Barbara Cruz bcruzib@webeden.co.uk 25.124.144.135 fca2:3b9f:4839:c154:a807:4416:a102:6432 662 | 661 Carolyn Gutierrez cgutierrezic@wsj.com 242.178.130.227 663 | 662 Marilyn Wright mwrightid@csmonitor.com 3.51.193.254 664 | 663 Billy Coleman bcolemanie@cmu.edu 94.197.185.158 930a:2726:fc1c:b4aa:5338:57b:294a:2c22 665 | 664 Phyllis Warren pwarrenif@forbes.com 139.94.22.77 9906:c62a:853e:1735:b8dd:74a7:1644:6548 666 | 665 Roy Ramos rramosig@altervista.org 196.16.190.175 667 | 666 Mark Duncan mduncanih@lycos.com 235.30.5.245 668 | 667 Sean Weaver sweaverii@blogtalkradio.com 28.86.182.55 669 | 668 Roy White rwhiteij@bizjournals.com 106.25.166.74 3b40:b119:92fd:867c:82ca:82be:ff21:a078 670 | 669 Anthony Howell ahowellik@utexas.edu 182.103.59.39 52e:2b4a:350e:2a99:6a47:b9b7:a621:6ff8 671 | 670 Ralph Spencer rspenceril@va.gov 187.236.16.142 672 | 671 Howard Bailey hbaileyim@tamu.edu 29.72.3.49 673 | 672 Jonathan Larson jlarsonin@xrea.com 69.29.50.29 674 | 673 Fred Lawson flawsonio@sina.com.cn 121.188.36.150 8696:eb48:f2e1:77a2:a10a:7114:7570:2026 675 | 674 Marilyn Thomas mthomasip@naver.com 133.167.124.65 676 | 675 Arthur Fisher afisheriq@google.com.au 93.62.178.40 3c51:88f:e37c:d22:b622:62a5:c3c7:83f4 677 | 676 Lisa Simpson lsimpsonir@yelp.com 159.7.1.32 5c07:e54c:ada4:9923:9061:9b8:9bcf:98ab 678 | 677 Jennifer Cunningham jcunninghamis@bbc.co.uk 152.250.226.153 c958:7a32:51f8:3303:40ac:56c2:7d6f:e59e 679 | 678 Johnny Adams jadamsit@furl.net 209.40.212.1 680 | 679 Andrea Woods awoodsiu@google.pl 120.108.156.215 b2a7:6ea2:b72f:e1bb:4df0:e976:d397:ea8e 681 | 680 Henry Frazier hfrazieriv@freewebs.com 156.244.140.141 2a52:fdd7:aa1b:ae75:a9f4:6324:9dc2:fb84 682 | 681 Anna Clark aclarkiw@sina.com.cn 168.237.214.240 683 | 682 Martha Romero mromeroix@upenn.edu 157.11.14.114 684 | 683 David Fernandez dfernandeziy@ustream.tv 40.84.66.5 cf1:e6c7:cb25:5639:c7f6:affe:7ae7:3ba8 685 | 684 Gregory Powell gpowelliz@fc2.com 133.113.237.45 686 | 685 Alice Martin amartinj0@booking.com 193.193.21.189 cc6:db9c:5f9d:9ee7:fccb:3213:769c:1ed4 687 | 686 Laura Cunningham lcunninghamj1@yandex.ru 238.186.251.53 688 | 687 Chris Bryant cbryantj2@ibm.com 1.148.164.39 218a:4380:5d1f:f70e:a415:8c01:473d:2167 689 | 688 Julie Alexander jalexanderj3@scientificamerican.com 137.165.40.222 690 | 689 Jessica Andrews jandrewsj4@google.cn 195.159.10.151 34fc:f931:c8b3:b5ff:d6e:7e86:4d29:26d3 691 | 690 Lillian Lewis llewisj5@hatena.ne.jp 143.206.237.12 b47e:a1c9:7a52:148c:9389:5744:a2da:98af 692 | 691 Bobby Kim bkimj6@arstechnica.com 76.245.100.251 693 | 692 Theresa Romero tromeroj7@dedecms.com 64.98.149.45 694 | 693 Mary Ferguson mfergusonj8@tamu.edu 141.146.111.10 695 | 694 Kathleen Patterson kpattersonj9@symantec.com 122.53.236.87 79ea:3082:4b59:94e9:538e:e00f:63ee:ab63 696 | 695 Ryan Payne rpayneja@squidoo.com 113.28.147.219 6707:96ba:c372:7487:46bc:d11c:da9b:1f14 697 | 696 Peter Myers pmyersjb@springer.com 75.63.57.189 75c9:87f5:44cd:634d:40fc:f856:3d97:3b0f 698 | 697 Terry James tjamesjc@ucla.edu 18.135.219.71 699 | 698 Randy Castillo rcastillojd@bluehost.com 82.45.192.107 597f:fd6b:2cfa:45b1:b449:e2aa:a259:9c93 700 | 699 Benjamin Carpenter bcarpenterje@smugmug.com 243.254.153.182 2135:17e1:3019:ea1:38c:e4e:34af:d39c 701 | 700 Lori Edwards ledwardsjf@51.la 83.255.158.119 702 | 701 Christopher Dean cdeanjg@seesaa.net 218.85.89.113 8335:f1a6:951e:756a:6028:6441:1133:4b9d 703 | 702 Lawrence Gonzales lgonzalesjh@bravesites.com 227.229.149.70 c8f4:6da1:b184:7f07:78fd:1278:d7ba:7286 704 | 703 Harry Ford hfordji@wix.com 174.184.82.111 705 | 704 Victor Bryant vbryantjj@noaa.gov 96.9.137.89 370b:3962:8d30:b705:f0ea:24fa:aa9c:7212 706 | 705 Stephen Knight sknightjk@deviantart.com 90.248.108.142 707 | 706 Phillip Ryan pryanjl@businessweek.com 49.140.200.50 b6aa:1a5:7a75:814b:9201:3995:b118:6031 708 | 707 Louise Harris lharrisjm@digg.com 224.182.191.139 709 | 708 Jonathan Nichols jnicholsjn@tuttocitta.it 136.5.94.250 710 | 709 Phillip Wood pwoodjo@paypal.com 64.110.170.2 711 | 710 Julia Franklin jfranklinjp@artisteer.com 196.146.83.86 712 | 711 Steven Elliott selliottjq@oaic.gov.au 40.52.43.75 3e71:3c2:dc8f:fc5:d6aa:a261:936b:d81f 713 | 712 Ernest Duncan eduncanjr@merriam-webster.com 215.71.93.45 714 | 713 Judy Gordon jgordonjs@spotify.com 102.236.0.39 1ffc:382c:4ecb:f021:f2f9:6c44:8071:6e05 715 | 714 Jason Dean jdeanjt@bluehost.com 164.158.93.15 e7ed:13a7:8272:a85a:124a:803c:2ffa:2c15 716 | 715 Lisa Graham lgrahamju@php.net 128.243.138.35 717 | 716 Linda Baker lbakerjv@ustream.tv 93.201.70.205 9e5b:59ed:b41e:ce13:68f0:b595:e0d9:71c5 718 | 717 Carol Larson clarsonjw@ed.gov 180.85.49.129 d768:8d22:c6f9:a4fd:fd4f:c6bf:9be6:339 719 | 718 Mildred Kennedy mkennedyjx@tumblr.com 30.17.147.230 22be:ab20:f04b:5b11:2895:af61:6634:4a6a 720 | 719 Todd Ross trossjy@cdc.gov 145.120.212.68 721 | 720 Howard Hunter hhunterjz@mac.com 6.91.137.80 722 | 721 Earl Sullivan esullivank0@yahoo.com 60.108.230.138 723 | 722 Terry Bailey tbaileyk1@upenn.edu 24.201.145.204 724 | 723 Robin Jones rjonesk2@drupal.org 84.127.124.138 56eb:af92:d770:ae9a:2aa6:fda5:8925:a060 725 | 724 Ralph Jones rjonesk3@newyorker.com 225.67.31.221 726 | 725 Jonathan Price jpricek4@wix.com 116.66.88.34 727 | 726 Craig Walker cwalkerk5@seattletimes.com 220.89.148.153 3290:27b4:9c4:eed1:f8ed:6ca2:cfaf:1cf8 728 | 727 Martin Green mgreenk6@de.vu 99.32.32.225 e469:e8a0:9680:d4d2:17fc:7269:f005:4a8 729 | 728 Jeremy Greene jgreenek7@is.gd 164.152.251.0 d438:8679:9cef:3f6:d78d:5ef4:75c4:6c1d 730 | 729 Russell Russell rrussellk8@blogs.com 123.35.122.73 731 | 730 Marie Walker mwalkerk9@free.fr 69.67.3.12 afa1:aa20:91f8:c614:a8d:7c1c:8fe0:4fe 732 | 731 Donna Jordan djordanka@icio.us 90.196.167.6 733 | 732 Johnny Hanson jhansonkb@biglobe.ne.jp 253.127.151.187 734 | 733 Alan Sullivan asullivankc@state.tx.us 36.139.75.219 735 | 734 Joe Gonzalez jgonzalezkd@pbs.org 22.2.80.143 f61a:4f30:ad29:7aa6:ce20:1f1a:1cb0:4283 736 | 735 Dorothy Brooks dbrookske@ucoz.com 95.65.62.135 f69f:1666:c708:d830:c51e:384a:3e2a:51aa 737 | 736 Diana Romero dromerokf@google.co.uk 82.9.72.80 3570:badc:7ea2:bb8a:750e:2684:d38a:a8a8 738 | 737 Melissa Stanley mstanleykg@plala.or.jp 23.35.26.198 df8a:9347:ccf0:91d8:cf45:308c:dd23:5ab2 739 | 738 Jennifer Henderson jhendersonkh@cnbc.com 79.147.64.219 740 | 739 Sean George sgeorgeki@cocolog-nifty.com 81.49.144.28 36a1:3694:b73b:fb99:661c:3edc:a46:c660 741 | 740 Steve Thomas sthomaskj@yelp.com 48.129.107.23 742 | 741 Emily Peters epeterskk@t-online.de 246.249.232.67 743 | 742 Gregory Montgomery gmontgomerykl@sciencedirect.com 114.70.221.121 245e:5823:e2b5:ba3e:b3e1:573d:6a50:47f8 744 | 743 Susan Willis swilliskm@flavors.me 45.3.53.156 88f4:8165:1a73:170c:e403:9c0f:e14:f03d 745 | 744 Amy Tucker atuckerkn@1688.com 71.237.150.232 746 | 745 Linda Stewart lstewartko@flavors.me 220.0.78.198 747 | 746 Kenneth Brown kbrownkp@bloomberg.com 215.72.35.202 b8d8:928:ec1c:6f23:c3fc:ec44:77df:e96 748 | 747 Evelyn Chapman echapmankq@eepurl.com 10.175.75.50 749 | 748 Janet Campbell jcampbellkr@smugmug.com 90.106.109.62 3b3e:f59f:3406:91db:76d2:e55a:e24d:1cd6 750 | 749 Nancy Reyes nreyesks@aboutads.info 213.191.60.248 751 | 750 Clarence Carter ccarterkt@netlog.com 160.120.56.76 752 | 751 Jerry Andrews jandrewsku@ning.com 45.172.31.36 53c5:3c37:da19:fabf:d4d7:cdcd:8226:3951 753 | 752 John Bowman jbowmankv@joomla.org 3.173.37.185 6e99:7118:2220:88c1:cbf:c635:a789:cb42 754 | 753 Douglas Fowler dfowlerkw@icq.com 253.178.28.244 755 | 754 Steve Carter scarterkx@alexa.com 71.251.129.215 73e8:a7fa:eb78:7920:1187:9433:5a41:fb15 756 | 755 Shawn Butler sbutlerky@baidu.com 104.232.164.230 757 | 756 Teresa Castillo tcastillokz@unblog.fr 171.25.251.224 758 | 757 Martin Hawkins mhawkinsl0@i2i.jp 112.241.158.154 759 | 758 Frank Kelley fkelleyl1@moonfruit.com 16.163.254.11 760 | 759 Louise Cox lcoxl2@histats.com 151.69.122.100 ded0:2e1f:d4f1:17c8:4358:cefa:d39a:7e79 761 | 760 Patricia Adams padamsl3@sun.com 100.67.193.41 6d01:4d78:f981:1453:b456:2562:5234:99d1 762 | 761 Robert Scott rscottl4@jigsy.com 70.162.38.133 b8b1:dc1c:ec7d:b260:dd1e:298b:781c:3346 763 | 762 Jane Weaver jweaverl5@edublogs.org 115.139.241.234 1605:3947:b3e:2a76:9e33:24fb:f9b3:f3c8 764 | 763 Tina Armstrong tarmstrongl6@home.pl 181.205.239.75 9380:316d:90d6:cbe6:945b:51e7:38c0:436 765 | 764 Carolyn Dunn cdunnl7@is.gd 253.9.174.11 88c2:8d77:ec9c:d93:6233:4296:ec3e:919f 766 | 765 Patrick Jones pjonesl8@csmonitor.com 80.40.108.105 bb1d:22f1:3ac3:eb6b:7a3a:1bf4:6ddc:fa8a 767 | 766 Ernest Robinson erobinsonl9@addthis.com 93.104.229.229 ccd1:1bf4:8ed5:f467:7662:c2df:1522:1c51 768 | 767 Jason Peterson jpetersonla@bbc.co.uk 173.0.231.135 769 | 768 Harold King hkinglb@cbsnews.com 112.187.128.190 84d9:9f2e:e9e8:9e0c:bf8a:7350:ea5:f418 770 | 769 Christine Ferguson cfergusonlc@illinois.edu 255.168.108.38 d272:eb4a:68e6:d506:ccc8:204c:3816:feec 771 | 770 Gloria Cook gcookld@vinaora.com 60.159.178.131 88ea:1cfe:2696:1e09:4cc7:ab9f:a6f2:981a 772 | 771 Cheryl Ramirez cramirezle@xrea.com 189.108.93.97 8e1b:2a3b:e5a0:322a:9aff:6060:551e:7573 773 | 772 Todd Shaw tshawlf@irs.gov 183.144.211.210 774 | 773 Judy Wood jwoodlg@google.de 27.8.253.171 775 | 774 Aaron Watkins awatkinslh@constantcontact.com 16.26.103.6 776 | 775 Pamela Garza pgarzali@geocities.com 52.203.197.95 4269:5253:23fe:b8dd:2164:e361:6d9b:1dd0 777 | 776 Ryan Harper rharperlj@go.com 139.19.62.93 778 | 777 Eugene Burton eburtonlk@geocities.jp 234.45.235.229 779 | 778 Craig Ryan cryanll@goo.gl 136.203.48.63 780 | 779 Tina Austin taustinlm@dot.gov 180.226.89.128 781 | 780 Nicole Wilson nwilsonln@shop-pro.jp 2.187.142.129 c0d:f19a:b893:b4eb:79b7:edf4:be06:d46a 782 | 781 Carol Nelson cnelsonlo@acquirethisname.com 191.214.173.196 a065:353c:c02a:ca9:e3fa:e9b:f434:2917 783 | 782 Emily Stevens estevenslp@fema.gov 1.24.54.249 9aaa:eb76:d8c5:e743:1e87:c070:bdf3:1da3 784 | 783 Annie Willis awillislq@guardian.co.uk 96.101.192.153 79bc:d5ff:7d0d:d53a:8db0:f18b:594a:90b0 785 | 784 Phyllis Dean pdeanlr@stanford.edu 137.252.84.165 786 | 785 Annie Hill ahillls@behance.net 208.179.130.19 787 | 786 Shirley Ward swardlt@odnoklassniki.ru 120.33.195.232 9a34:671c:c0ed:4f44:6977:b2b1:8906:7a85 788 | 787 Roy Price rpricelu@aol.com 169.254.21.107 789 | 788 Anne Moore amoorelv@digg.com 124.124.206.250 16a:791f:f075:d38:b143:e4b8:f386:14cc 790 | 789 Kimberly Jackson kjacksonlw@flavors.me 95.243.90.180 791 | 790 Harold Mcdonald hmcdonaldlx@usda.gov 3.188.155.199 792 | 791 Carlos Greene cgreenely@chicagotribune.com 142.137.35.90 b6c3:c885:eec9:e350:86e8:4a6f:db90:facf 793 | 792 Tammy Taylor ttaylorlz@youtu.be 115.10.217.61 794 | 793 Carolyn Jackson cjacksonm0@wp.com 211.27.125.124 1614:f22c:128b:58e2:9551:3f5a:ebaf:546a 795 | 794 Ruby Price rpricem1@qq.com 88.47.231.2 b063:d55a:c052:a76f:62ef:1ebd:495c:5cac 796 | 795 Christopher Cooper ccooperm2@tripod.com 102.85.193.92 797 | 796 Jack Ray jraym3@java.com 205.197.247.10 6a01:4a93:f6fa:414b:32b8:a7cb:9a99:1b06 798 | 797 Carol Perry cperrym4@nasa.gov 85.208.254.185 c682:36ea:a1a3:8a76:1eeb:cc67:5b34:b420 799 | 798 Denise Reed dreedm5@usatoday.com 210.44.14.13 b0eb:cb5:53c:b672:68e6:d957:3bfe:c52b 800 | 799 Rose Fisher rfisherm6@unesco.org 60.241.44.99 801 | 800 Marie Carpenter mcarpenterm7@addtoany.com 35.48.44.55 1379:e28b:b7b2:8349:82aa:98eb:6e56:8606 802 | 801 Marilyn Washington mwashingtonm8@sbwire.com 153.241.245.93 803 | 802 Eugene Bowman ebowmanm9@cbslocal.com 48.8.43.221 804 | 803 Margaret Griffin mgriffinma@bloglines.com 184.192.250.168 6363:95b1:b8f:6c7d:2cd4:c2fc:a7da:21bf 805 | 804 Lillian Flores lfloresmb@apache.org 192.100.109.80 5689:a0b:e652:15b3:4065:437:603:cb70 806 | 805 Janice Richardson jrichardsonmc@ameblo.jp 142.109.208.233 807 | 806 Douglas Howell dhowellmd@artisteer.com 17.154.9.90 1b25:ec5b:5669:5662:42c2:a998:c8b:5d4d 808 | 807 Albert Campbell acampbellme@pagesperso-orange.fr 45.17.215.220 fa86:da07:53af:f1d1:5057:ed49:8726:b7d8 809 | 808 Lois Sanders lsandersmf@eventbrite.com 3.121.198.36 6cb1:1888:a819:5b0d:a299:b596:8ea5:af5 810 | 809 Barbara Ward bwardmg@51.la 65.34.32.2 811 | 810 Virginia Chapman vchapmanmh@dedecms.com 87.69.26.218 812 | 811 Billy Black bblackmi@businesswire.com 238.242.249.141 813 | 812 Albert Scott ascottmj@engadget.com 61.161.25.187 814 | 813 Willie Cox wcoxmk@oakley.com 168.12.68.215 815 | 814 Antonio Watson awatsonml@csmonitor.com 218.91.172.230 816 | 815 Ashley Burke aburkemm@senate.gov 133.130.224.6 376a:bde5:78b8:eb86:2174:20:9228:9a8 817 | 816 Paula Myers pmyersmn@vkontakte.ru 153.44.111.35 818 | 817 Bobby Evans bevansmo@godaddy.com 75.252.195.218 1efe:4e57:c1f1:2ac5:1f67:5d6c:901e:5615 819 | 818 Julie Daniels jdanielsmp@joomla.org 147.122.251.37 490e:7845:e1cc:2e5e:c2a3:b914:756c:1d98 820 | 819 Craig Morales cmoralesmq@foxnews.com 233.75.121.252 db1a:5a64:2bc7:aacd:5184:9354:3eee:cf5c 821 | 820 Michelle Patterson mpattersonmr@kickstarter.com 232.211.181.42 7726:5803:2772:9475:883b:44ff:a3da:4990 822 | 821 Kelly Cook kcookms@unesco.org 125.11.255.160 823 | 822 Terry Reed treedmt@redcross.org 61.132.168.254 824 | 823 Katherine Clark kclarkmu@earthlink.net 36.241.184.74 6704:e7d:aa5d:78d:4879:6b89:db47:a0bf 825 | 824 Sara Kelley skelleymv@miitbeian.gov.cn 251.206.185.40 d0ac:ba8d:be39:1b0e:8b3c:45aa:6958:94a2 826 | 825 Alice Dean adeanmw@ft.com 25.174.90.106 827 | 826 Gregory Lane glanemx@51.la 180.78.36.174 cb29:824f:1b17:37e7:3c8b:f878:5bdb:ff05 828 | 827 Sandra Rice sricemy@psu.edu 69.47.207.28 d414:b14b:ce5c:7e35:45b3:6ce1:db82:b65 829 | 828 Irene Rivera iriveramz@bloomberg.com 128.156.65.159 830 | 829 Wanda Williams wwilliamsn0@vistaprint.com 194.77.147.179 f290:ca0f:ec1:ba37:18c0:e391:96b7:a784 831 | 830 Stephanie Gordon sgordonn1@wufoo.com 251.188.222.50 832 | 831 Emily Stewart estewartn2@cisco.com 109.111.57.216 833 | 832 Dorothy Smith dsmithn3@nsw.gov.au 235.145.47.98 384b:76c1:7beb:382d:eb19:5ebe:2272:99a1 834 | 833 Nicole Davis ndavisn4@dot.gov 76.155.235.8 bfba:ee43:d843:b38b:a349:5fbf:163c:3f0f 835 | 834 Ruby Duncan rduncann5@walmart.com 17.35.111.200 836 | 835 Robin Collins rcollinsn6@printfriendly.com 199.9.17.252 fd2d:ed65:cb80:9a7e:9535:a047:6ebb:a77c 837 | 836 Emily Fowler efowlern7@slashdot.org 236.79.61.207 838 | 837 Bobby Robertson brobertsonn8@smugmug.com 210.241.58.22 839 | 838 Keith Collins kcollinsn9@pcworld.com 91.241.252.123 840 | 839 Janice Wallace jwallacena@sbwire.com 4.192.6.18 841 | 840 Alice Rice aricenb@topsy.com 189.89.134.21 842 | 841 Judy Johnson jjohnsonnc@wix.com 30.243.39.252 843 | 842 Patricia Ellis pellisnd@yolasite.com 4.177.163.47 9c4f:6c0d:6016:7273:2eea:6cbb:6e99:39b9 844 | 843 Andrew Adams aadamsne@cisco.com 13.52.148.155 837:ad07:eb8a:86d7:48b7:38c0:571d:95c2 845 | 844 Kathryn Williams kwilliamsnf@state.tx.us 226.248.77.231 a8b3:f920:43e9:27a3:677c:3aec:f1bb:112d 846 | 845 Roger Williamson rwilliamsonng@rambler.ru 163.0.104.155 4785:95bc:c67:68cb:1794:e9a2:42bf:7fa0 847 | 846 Margaret Wheeler mwheelernh@umich.edu 173.36.186.224 5007:59ea:498c:cebe:faac:7e96:77:5986 848 | 847 Jane Brown jbrownni@odnoklassniki.ru 138.252.203.44 849 | 848 Charles Tucker ctuckernj@is.gd 176.174.138.8 a469:22e3:6903:2ab1:dee2:7f01:a3f5:ff93 850 | 849 Cynthia Rogers crogersnk@state.gov 127.201.162.252 851 | 850 Juan Lewis jlewisnl@example.com 140.73.213.14 73f:dbc3:ba7e:2319:9944:c48b:6c06:7088 852 | 851 Alice Harper aharpernm@zimbio.com 0.111.31.178 b7b3:f2a3:707a:468f:43f9:33e5:a141:13be 853 | 852 Jennifer Lawrence jlawrencenn@t.co 131.209.70.98 5b63:ef62:5a92:40b4:b0f9:92db:c0f:cba9 854 | 853 Alice Grant agrantno@wikipedia.org 131.209.189.50 855 | 854 Ann Wheeler awheelernp@nps.gov 13.201.58.75 749c:4b11:c75c:7425:d01b:1bc7:1c07:39ad 856 | 855 Shawn Green sgreennq@hostgator.com 22.147.69.114 857 | 856 David Dean ddeannr@studiopress.com 40.154.133.73 f501:2a17:9613:58b3:b9cb:bc96:d54f:354b 858 | 857 Dorothy Gordon dgordonns@dropbox.com 11.243.34.119 859 | 858 Kenneth Cole kcolent@jigsy.com 239.195.101.232 ad88:f6be:bdb8:b827:6c9e:679:1604:d842 860 | 859 Nicole Perry nperrynu@ameblo.jp 40.131.219.118 861 | 860 Debra Wagner dwagnernv@squidoo.com 129.121.207.27 2363:abca:7b89:3350:c7b1:89b9:d70d:c0b4 862 | 861 Daniel Hernandez dhernandeznw@examiner.com 245.105.191.142 97a0:c02b:6018:5cb1:e03b:765f:559e:be2e 863 | 862 William Bradley wbradleynx@delicious.com 72.123.144.120 864 | 863 Michelle Mills mmillsny@nationalgeographic.com 96.49.230.235 68e8:7336:586b:41c2:76a9:eef1:59fe:ea84 865 | 864 Mary Griffin mgriffinnz@hexun.com 159.214.238.232 866 | 865 Ann Young ayoungo0@macromedia.com 152.255.231.255 8b30:c7f8:4344:4bec:e7a4:f54f:5031:1827 867 | 866 Samuel Ray srayo1@spotify.com 223.125.241.129 868 | 867 Jacqueline Murphy jmurphyo2@i2i.jp 161.230.150.104 8c5f:7cdc:ad3c:b935:920d:376d:2e91:707d 869 | 868 Richard Jacobs rjacobso3@japanpost.jp 66.58.251.208 70a8:7d25:1383:dc67:b901:ee8d:b1bf:389a 870 | 869 Sharon Perry sperryo4@nationalgeographic.com 231.112.175.90 c9ac:abf1:2e41:d865:6494:3ed:250b:36ca 871 | 870 Sara Carter scartero5@gizmodo.com 175.50.180.188 87fd:bef3:4d1:dae2:c16a:c245:eacc:838d 872 | 871 Nicole Roberts nrobertso6@stumbleupon.com 217.189.160.18 a2a3:88fe:3ce6:d130:adec:2d3a:c841:5472 873 | 872 Marie Dixon mdixono7@skype.com 147.212.118.178 874 | 873 Lillian Bell lbello8@google.pl 102.0.46.233 5c23:d82f:1f6f:93e3:57cd:1045:5a37:4260 875 | 874 Roy Wood rwoodo9@nsw.gov.au 60.59.93.38 b676:99e4:3a4f:2811:956f:7501:bb56:ca1 876 | 875 Robin Jackson rjacksonoa@hexun.com 17.16.14.3 877 | 876 Christine Lawson clawsonob@columbia.edu 77.240.201.137 9f4:c158:c51:f4c9:9907:2c6c:b3b1:bdb6 878 | 877 Heather Bradley hbradleyoc@godaddy.com 157.126.217.107 879 | 878 Pamela Mills pmillsod@aboutads.info 185.116.111.91 3554:99cc:177d:c362:99c4:d8db:866c:fb52 880 | 879 Paul Ryan pryanoe@ted.com 233.249.149.104 10ac:8234:3ce2:ccd:c6de:d23b:859d:3421 881 | 880 Tina Stewart tstewartof@booking.com 17.19.50.18 4328:2d1a:4f59:308:bbc7:d454:2527:ff5d 882 | 881 Dennis Rose droseog@yandex.ru 14.242.94.13 883 | 882 Susan Burke sburkeoh@mail.ru 242.132.65.4 2119:b0af:98a3:d326:bf99:75d1:1de3:6481 884 | 883 Doris Coleman dcolemanoi@walmart.com 44.236.77.237 160c:9234:e73b:ba33:a00a:a66c:43ea:ab31 885 | 884 Amanda Rose aroseoj@ameblo.jp 79.130.95.244 886 | 885 Edward Carroll ecarrollok@linkedin.com 197.31.71.18 c5ed:5ea3:99dc:1c1b:c020:442d:27ea:479 887 | 886 Arthur Duncan aduncanol@clickbank.net 156.174.101.95 888 | 887 Norma Gonzales ngonzalesom@geocities.jp 210.254.35.158 5a37:f721:54f3:ac30:bade:8045:9740:cda0 889 | 888 Anna Lane alaneon@twitter.com 67.49.135.127 890 | 889 Melissa Ford mfordoo@businesswire.com 2.167.218.110 891 | 890 Ralph Ramirez rramirezop@arizona.edu 93.240.144.13 892 | 891 Robin Arnold rarnoldoq@examiner.com 3.223.3.170 893 | 892 Angela Larson alarsonor@shareasale.com 135.27.11.85 894 | 893 Nancy Warren nwarrenos@geocities.com 79.98.109.4 895 | 894 Cheryl Romero cromeroot@home.pl 52.86.11.167 7dbb:1887:634e:d3c3:8da8:ff5d:9085:679b 896 | 895 Doris Kelly dkellyou@weebly.com 229.96.67.204 1fb3:6a21:a0f7:a510:d47d:4f51:ee77:4e5f 897 | 896 Walter Long wlongov@domainmarket.com 196.61.188.92 882d:5b87:e47:722d:529e:c034:cf03:c0b7 898 | 897 Laura Berry lberryow@adobe.com 16.180.74.221 899 | 898 Edward Edwards eedwardsox@wiley.com 113.219.112.72 2830:e8de:1f85:c30a:b869:73c0:82e2:e9b0 900 | 899 Nicole Cooper ncooperoy@google.com 82.22.28.128 901 | 900 Clarence Kennedy ckennedyoz@163.com 220.111.157.242 ce85:fa8:4595:2e4:3e79:7d7:4ea3:b447 902 | 901 William Hayes whayesp0@oaic.gov.au 5.86.3.114 a699:64a8:ba68:729c:5755:20da:a5a5:c827 903 | 902 Timothy Russell trussellp1@wordpress.org 114.132.106.180 546a:b44b:142d:1050:e816:483c:ef8c:6ba7 904 | 903 Alice Johnson ajohnsonp2@springer.com 54.136.210.228 905 | 904 Mildred Rose mrosep3@ning.com 109.55.127.108 906 | 905 Clarence Miller cmillerp4@usnews.com 174.192.243.3 1bfb:8793:b41b:c787:38d5:cf:12b4:6fe 907 | 906 Paul Carpenter pcarpenterp5@storify.com 21.161.200.13 908 | 907 Rose Gibson rgibsonp6@drupal.org 176.209.58.74 e0e3:1f0e:c04b:f0d:9a3:49cb:4614:3f22 909 | 908 Lawrence White lwhitep7@wisc.edu 141.36.109.59 6530:827c:9bcf:133e:43d8:be98:28ec:f250 910 | 909 Rose Hawkins rhawkinsp8@alibaba.com 36.218.226.119 911 | 910 Ann Wood awoodp9@vkontakte.ru 37.3.76.131 912 | 911 Justin Parker jparkerpa@prnewswire.com 75.207.32.214 285b:f22a:9f10:299:8dac:4a36:d0f2:f7d7 913 | 912 Keith Watson kwatsonpb@amazon.com 58.80.190.248 914 | 913 Laura Montgomery lmontgomerypc@addthis.com 17.250.1.173 10ca:431d:978d:9e29:b6c8:bab2:292a:effb 915 | 914 Jane Parker jparkerpd@unesco.org 115.46.175.229 4442:29d:258a:9ce0:9ab1:2bc4:ed68:4988 916 | 915 Jeffrey Phillips jphillipspe@nydailynews.com 62.251.224.165 917 | 916 Jose Ramos jramospf@dedecms.com 96.171.134.230 40d6:228e:e45d:676d:f039:9c97:9834:8127 918 | 917 Debra Simmons dsimmonspg@cisco.com 134.70.85.30 a805:7140:6ca4:116d:5b88:a4c2:c3ff:32b6 919 | 918 Carlos Taylor ctaylorph@wordpress.org 14.148.40.143 920 | 919 Dorothy Sanders dsanderspi@miitbeian.gov.cn 216.238.221.59 93af:d813:3d90:7ab8:56d6:59c5:fb0b:dce7 921 | 920 Sharon West swestpj@tripadvisor.com 85.206.226.96 a4e:ebb:b768:a0f:c09a:61dc:1743:9271 922 | 921 Frances George fgeorgepk@bloglovin.com 232.14.172.13 1f39:a9f4:305:482:ffc9:9305:9c72:8961 923 | 922 Christopher Murray cmurraypl@multiply.com 185.49.113.129 4024:b4d8:b9dd:6503:5c78:9db6:6f80:c3bf 924 | 923 Gerald Graham ggrahampm@princeton.edu 42.245.128.52 fbf0:55b0:1395:c8d3:c801:161c:7ecd:7422 925 | 924 Judith Reyes jreyespn@sciencedirect.com 84.211.178.207 926 | 925 Louise Peters lpeterspo@google.com.hk 206.22.139.243 4724:20c5:b4fa:1f6c:6a5c:af30:d840:70c0 927 | 926 Shirley Williamson swilliamsonpp@360.cn 131.19.81.124 928 | 927 Brandon Wallace bwallacepq@cnet.com 110.4.202.56 929 | 928 Marilyn Sanchez msanchezpr@bbb.org 216.194.254.87 930 | 929 Howard Olson holsonps@craigslist.org 146.4.91.174 9305:d0c6:2de5:3011:c47c:fc16:f877:36fe 931 | 930 Matthew Fox mfoxpt@joomla.org 187.177.29.34 932 | 931 Arthur Bryant abryantpu@nationalgeographic.com 30.38.151.230 933 | 932 Debra Cunningham dcunninghampv@pagesperso-orange.fr 88.240.55.241 934 | 933 Linda Kim lkimpw@acquirethisname.com 180.85.57.115 3a61:a58f:4f25:b5ea:56d2:3c0f:9489:927f 935 | 934 Kathleen Powell kpowellpx@cargocollective.com 247.82.234.99 70e8:bbcc:a8d1:9ecc:9de5:3b6a:c10c:8446 936 | 935 Lisa Parker lparkerpy@livejournal.com 106.154.151.97 7777:aca:1b69:18c4:3300:edfd:c67:2b10 937 | 936 Albert Richardson arichardsonpz@usatoday.com 91.215.173.36 b6aa:760f:2189:e3d7:9c89:1bab:3baa:554 938 | 937 Gregory Day gdayq0@cloudflare.com 110.96.100.196 939 | 938 Steve Ford sfordq1@sciencedaily.com 205.42.210.109 940 | 939 Ann Ferguson afergusonq2@liveinternet.ru 142.121.36.244 941 | 940 Roger Butler rbutlerq3@china.com.cn 171.201.4.214 bb65:6d96:de05:45e4:cef2:2c8c:e2c7:cb08 942 | 941 Charles Thomas cthomasq4@columbia.edu 154.251.197.217 943 | 942 Debra Gonzales dgonzalesq5@ftc.gov 215.28.232.29 ebe9:ad15:2305:735b:ca66:925e:d916:c07a 944 | 943 Judith Knight jknightq6@nationalgeographic.com 242.126.202.122 7d63:6e68:33b1:da1d:47ef:11a3:710e:5651 945 | 944 Douglas Hughes dhughesq7@so-net.ne.jp 135.56.8.140 946 | 945 Richard Carroll rcarrollq8@answers.com 153.14.135.21 b547:5039:4a17:e22a:a766:d3ea:c430:55 947 | 946 Walter Johnson wjohnsonq9@sitemeter.com 235.204.65.101 21e0:8ba9:29f0:24db:b14a:4601:712d:b003 948 | 947 Kathy Alvarez kalvarezqa@adobe.com 195.124.62.203 cb4e:5978:6ec2:14bf:119a:534:b393:3282 949 | 948 Jonathan Tucker jtuckerqb@tripod.com 131.71.157.135 950 | 949 Ann Campbell acampbellqc@blogspot.com 222.55.216.141 d7a:2ed5:6336:2981:995f:fe46:6a39:55ce 951 | 950 Sean Reynolds sreynoldsqd@buzzfeed.com 164.18.18.75 f2ff:4fe1:5a81:f5b8:685d:429b:b3c8:911a 952 | 951 Melissa Hicks mhicksqe@weibo.com 36.7.122.100 953 | 952 Amanda Brown abrownqf@stumbleupon.com 0.151.244.117 50e4:7583:4692:26a0:e245:3f2e:e003:4e07 954 | 953 Clarence Gordon cgordonqg@nba.com 212.188.215.180 955 | 954 Irene Gonzales igonzalesqh@godaddy.com 211.16.91.193 7439:7edf:799:dfec:7b05:c88c:a289:831c 956 | 955 Matthew Romero mromeroqi@va.gov 248.196.255.144 957 | 956 Donna Moore dmooreqj@digg.com 247.41.164.92 958 | 957 Carolyn Peterson cpetersonqk@wp.com 12.253.245.19 35a8:d16:4037:fc8b:4587:b117:3e51:a681 959 | 958 Rose Lewis rlewisql@usda.gov 186.39.89.112 960 | 959 Thomas Reyes treyesqm@163.com 70.210.168.64 6d43:43c5:37a3:3a69:e17d:7c87:9328:b956 961 | 960 Carl Howard chowardqn@netlog.com 240.40.158.146 962 | 961 Steven Young syoungqo@histats.com 49.244.0.50 d554:da3c:f183:196b:7429:8128:6bf1:145f 963 | 962 Janice Henderson jhendersonqp@storify.com 108.191.85.6 964 | 963 Jerry Watson jwatsonqq@cbslocal.com 228.76.74.84 965 | 964 Marilyn Marshall mmarshallqr@infoseek.co.jp 11.75.196.24 3e6b:28b7:e903:b64d:3ec3:22e5:4341:9854 966 | 965 Charles Myers cmyersqs@histats.com 33.129.147.76 d771:b77c:5171:7e9f:950:2778:cd9d:9e3f 967 | 966 Mark Wood mwoodqt@fda.gov 197.166.192.235 968 | 967 Janet Williams jwilliamsqu@webs.com 172.238.146.124 b32:c8fe:7190:b0cc:2dad:632e:dce8:ea27 969 | 968 Kelly Banks kbanksqv@patch.com 22.43.197.111 970 | 969 Mildred Alvarez malvarezqw@drupal.org 186.180.110.232 971 | 970 Jeremy Morris jmorrisqx@yahoo.com 240.94.51.101 4ec2:158e:9cde:f0e9:8e9b:1f82:5acb:4d51 972 | 971 Donna Robinson drobinsonqy@hatena.ne.jp 87.105.152.221 a5aa:3ac1:f8c0:4ceb:7ee8:32f4:9ce2:ccd4 973 | 972 Walter Johnston wjohnstonqz@adobe.com 55.20.89.236 974 | 973 Carol Wilson cwilsonr0@nymag.com 22.138.183.135 975 | 974 Ruth Alexander ralexanderr1@shareasale.com 250.56.55.88 8745:fff2:ff76:12d3:60ee:9269:47:6878 976 | 975 Alan Fields afieldsr2@imageshack.us 81.146.133.200 977 | 976 Nicholas Cole ncoler3@newsvine.com 85.197.22.199 84fa:37f:50c8:bf40:89fe:1b07:a5bd:d1c3 978 | 977 Jeremy Roberts jrobertsr4@sitemeter.com 220.16.70.138 979 | 978 Joyce Henry jhenryr5@fastcompany.com 238.182.47.218 980 | 979 Joyce Perry jperryr6@smh.com.au 81.110.216.64 e7e7:c8f2:ef58:b0cc:38f7:69e1:bdf0:97da 981 | 980 Nicole Porter nporterr7@berkeley.edu 224.232.91.189 c33a:7367:cd40:c2e7:edff:3382:daaf:fbb1 982 | 981 Roy Flores rfloresr8@wordpress.com 4.82.203.203 4046:ee14:7575:46eb:e9d0:7246:f674:d725 983 | 982 Evelyn Scott escottr9@github.com 158.55.140.209 984 | 983 Lillian Hart lhartra@amazon.co.uk 111.21.188.196 985 | 984 Janice Lee jleerb@constantcontact.com 194.73.97.106 986 | 985 Christopher Robertson crobertsonrc@nydailynews.com 7.70.146.147 987 | 986 Lillian Owens lowensrd@telegraph.co.uk 101.52.92.123 988 | 987 Chris Knight cknightre@mlb.com 205.74.160.116 ff13:8c92:1ff7:a997:9795:80ce:e91c:d813 989 | 988 Jose Kennedy jkennedyrf@technorati.com 119.183.29.163 990 | 989 Henry Washington hwashingtonrg@nba.com 119.229.0.33 991 | 990 Mary Oliver moliverrh@sun.com 70.83.12.86 992 | 991 Amanda Morrison amorrisonri@cocolog-nifty.com 20.250.15.81 993 | 992 Ralph Tucker rtuckerrj@vkontakte.ru 251.112.76.237 994 | 993 Sarah Crawford scrawfordrk@eventbrite.com 15.88.165.50 995 | 994 Randy Oliver roliverrl@ovh.net 117.59.252.157 cf56:b11c:38d4:148a:9ca4:5c01:a8db:725f 996 | 995 James Arnold jarnoldrm@uol.com.br 207.34.247.174 997 | 996 Sharon Alvarez salvarezrn@usatoday.com 224.77.150.38 bfb7:a73b:b7ea:4aa4:a82e:a336:1b88:a356 998 | 997 Gregory White gwhitero@freewebs.com 198.15.75.87 3993:acff:1207:a76c:b5ce:6d08:dde7:7bfe 999 | 998 Michael Gonzales mgonzalesrp@printfriendly.com 86.253.219.150 1000 | 999 Frank Long flongrq@webs.com 219.105.204.208 1001 | 1000 Denise Myers dmyersrr@omniture.com 86.155.197.184 1002 | -------------------------------------------------------------------------------- /Übungen/Blatt4_data/CSV_Dummy_problematic.csv: -------------------------------------------------------------------------------- 1 | first_name,last_name,saying 2 | Phillip,Bennett,1 3 | Dorothy,Roberts,"<>?:""{}|_+" 4 | Walter,Cook,-1.00 5 | William,Moreno,̦H̬̤̗̤͝e͜ ̜̥̝̻͍̟́w̕h̖̯͓o̝͙̖͎̱̮ ҉̺̙̞̟͈W̷̼̭a̺̪͍į͈͕̭͙̯̜t̶̼̮s̘͙͖̕ ̠̫̠B̻͍͙͉̳ͅe̵h̵̬͇̫͙i̹͓̳̳̮͎̫̕n͟d̴̪̜̖ ̰͉̩͇͙̲͞ͅT͖̼͓̪͢h͏͓̮̻e̬̝̟ͅ ̤̹̝W͙̞̝͔͇͝ͅa͏͓͔̹̼̣l̴͔̰̤̟͔ḽ̫.͕ 6 | Helen,Burke,1 7 | Carol,Daniels,⁰⁴⁵ 8 | Anna,Richards,  9 | Wanda,Fox,"""""" 10 | Anne,Kelley,(。◕ ∀ ◕。) 11 | Craig,Armstrong,' 12 | -------------------------------------------------------------------------------- /Übungen/Blatt4_data/CSV_Dummy_simple.csv: -------------------------------------------------------------------------------- 1 | first_name,last_name,email,grade 2 | Fred,Rivera,frivera0@amazon.co.uk,2.9 3 | Wayne,Hansen,whansen1@ucoz.com,1.3 4 | Carlos,Edwards,cedwards2@ucla.edu,3.8 5 | Benjamin,Reid,breid3@mozilla.com,1.8 6 | Susan,Alexander,salexander4@addtoany.com,3.4 7 | Philip,Hansen,phansen5@123-reg.co.uk,2.4 8 | Jack,Riley,jriley6@gravatar.com,2.6 9 | Cynthia,Grant,cgrant7@tmall.com,3.0 10 | Patrick,Jenkins,pjenkins8@dagondesign.com,2.4 11 | Lori,Davis,ldavis9@patch.com,2.4 12 | -------------------------------------------------------------------------------- /Übungen/Blatt5-solution/Blatt5-solution.cabal: -------------------------------------------------------------------------------- 1 | name: Blatt5-solution 2 | version: 0.1.0.0 3 | synopsis: Solution for Sheet 5 of our course FFPiHaskell (2016) 4 | description: Please see README.md 5 | homepage: https://github.com/ffpihaskell/Vorlesung2016 6 | license: BSD3 7 | license-file: LICENSE 8 | author: Stefan Dresselhaus 9 | maintainer: sdressel@techfak.uni-bielefeld.de 10 | copyright: 2016 Stefan Dresselhaus 11 | category: GUI 12 | build-type: Simple 13 | -- extra-source-files: 14 | cabal-version: >=1.10 15 | 16 | library 17 | hs-source-dirs: src 18 | exposed-modules: Parser 19 | , GUI 20 | , Types 21 | build-depends: base >= 4.7 && < 5 22 | , attoparsec 23 | , bytestring 24 | , gloss 25 | , time 26 | , array 27 | default-language: Haskell2010 28 | 29 | executable Blatt5-static 30 | hs-source-dirs: app 31 | main-is: Main-Static.hs 32 | ghc-options: -threaded -rtsopts -with-rtsopts=-N 33 | build-depends: base 34 | , Blatt5-solution 35 | , gloss 36 | , bytestring 37 | , array 38 | , time 39 | default-language: Haskell2010 40 | 41 | executable Blatt5-animated 42 | hs-source-dirs: app 43 | main-is: Main-Animated.hs 44 | ghc-options: -threaded -rtsopts -with-rtsopts=-N 45 | build-depends: base 46 | , Blatt5-solution 47 | , gloss 48 | , bytestring 49 | , array 50 | , time 51 | default-language: Haskell2010 52 | 53 | test-suite Blatt5-solution-test 54 | type: exitcode-stdio-1.0 55 | hs-source-dirs: test 56 | main-is: Spec.hs 57 | build-depends: base 58 | , Blatt5-solution 59 | ghc-options: -threaded -rtsopts -with-rtsopts=-N 60 | default-language: Haskell2010 61 | 62 | source-repository head 63 | type: git 64 | location: https://github.com/ffpihaskell/Vorlesung2016 65 | -------------------------------------------------------------------------------- /Übungen/Blatt5-solution/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Author name here (c) 2016 2 | 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | * Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | 11 | * Redistributions in binary form must reproduce the above 12 | copyright notice, this list of conditions and the following 13 | disclaimer in the documentation and/or other materials provided 14 | with the distribution. 15 | 16 | * Neither the name of Author name here nor the names of other 17 | contributors may be used to endorse or promote products derived 18 | from this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /Übungen/Blatt5-solution/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /Übungen/Blatt5-solution/app/Main-Animated.hs: -------------------------------------------------------------------------------- 1 | module Main where 2 | 3 | import Parser 4 | import GUI 5 | import Types 6 | import Data.ByteString as BS 7 | import Data.Array 8 | import Data.Time 9 | import Data.Word 10 | import Graphics.Gloss 11 | import Data.Monoid 12 | 13 | datafile :: String 14 | datafile = "time_ip.csv" 15 | 16 | mainAnimate :: IO () 17 | mainAnimate = do 18 | df <- BS.readFile datafile 19 | let pd = ipBuckets <$> parseData df 20 | case pd of 21 | Right pd' -> animate (InWindow "Animation" (800,600) (100,200)) white (animateGrid 240 200 pd') 22 | Left err -> print $ "parsing Error:" <> err 23 | 24 | main :: IO () 25 | main = mainAnimate 26 | 27 | ipBuckets :: [Data] -> Array (Word8,Word8,Int) Int 28 | ipBuckets d = accumArray (+) 0 ((0,0,0),(15,15,23)) (f <$> d) 29 | where 30 | f (Data _ (TimeOfDay h m _) (IPv4 a _ _ _)) = ((a `div` 16, a `mod` 16, h), 1) 31 | -------------------------------------------------------------------------------- /Übungen/Blatt5-solution/app/Main-Static.hs: -------------------------------------------------------------------------------- 1 | module Main where 2 | 3 | import Parser 4 | import GUI 5 | import Types 6 | import Data.ByteString as BS 7 | import Data.Array 8 | import Data.Time 9 | import Data.Word 10 | import Graphics.Gloss 11 | import Data.Monoid 12 | 13 | datafile :: String 14 | datafile = "time_ip.csv" 15 | 16 | mainStatic :: IO () 17 | mainStatic = do 18 | df <- BS.readFile datafile 19 | let pd = hourBuckets <$> parseData df 20 | case pd of 21 | Right pd' -> display (InWindow "Bar Chart" (800,600) (100,200)) white (drawBar 240 200 pd') 22 | Left err -> print $ "parsing Error:" <> err 23 | 24 | main :: IO () 25 | main = mainStatic 26 | 27 | hourBuckets :: [Data] -> Array Int Int 28 | hourBuckets d = accumArray (+) 0 (0,23) (f <$> d) 29 | where 30 | f (Data _ (TimeOfDay h _ _) _) = (h,1) 31 | -------------------------------------------------------------------------------- /Übungen/Blatt5-solution/src/GUI.hs: -------------------------------------------------------------------------------- 1 | module GUI where 2 | 3 | import Data.Array 4 | import Graphics.Gloss 5 | import Data.Word 6 | 7 | type Height = Int 8 | type Width = Int 9 | 10 | drawBar :: Width -> Height -> Array Int Int -> Picture 11 | drawBar w h a = Pictures $ draw <$> [0..num] 12 | where 13 | num = u - l 14 | (l, u) = bounds a 15 | w' :: Float 16 | w' = fromIntegral w / fromIntegral num 17 | h' :: Float 18 | h' = fromIntegral h / fromIntegral (maximum $ elems a) 19 | draw :: Int -> Picture 20 | draw i = Translate (w'*i') 0 $ -- translate the whole bar 21 | Pictures [ Color blue $ Polygon [(0,0), (0, h''), (w', h''), (w', 0)] -- draw bar 22 | , Translate 0 (-10) $ Scale 0.05 0.05 $ Text (show i) -- draw caption 23 | ] 24 | where 25 | i' = fromIntegral i 26 | h'' = fromIntegral (a!i) * h' 27 | 28 | animateGrid :: Width -> Height -> Array (Word8, Word8, Int) Int -> Float -> Picture 29 | animateGrid w h d f = Pictures $ draw <$> [0..l1] <*> [0..l2] 30 | where 31 | (_, (l1, l2, t)) = bounds d 32 | maxVal :: Float 33 | maxVal = fromIntegral . maximum . elems $ d 34 | draw :: Word8 -> Word8 -> Picture 35 | draw x y = Translate (w'*fromIntegral x) (h'*fromIntegral y) $ 36 | Pictures [ Color (mixColors val (maxVal-val) red green) $ rectangleSolid w' h' 37 | , Scale 0.05 0.05 . Text . show . round $ val 38 | ] 39 | where 40 | val = fromIntegral $ d!(x,y,f') 41 | w' :: Float 42 | w' = fromIntegral w / fromIntegral l1 43 | h' :: Float 44 | h' = fromIntegral h / fromIntegral l2 45 | f' = floor f `mod` t 46 | 47 | -------------------------------------------------------------------------------- /Übungen/Blatt5-solution/src/Parser.hs: -------------------------------------------------------------------------------- 1 | module Parser 2 | 3 | (parseData) 4 | 5 | where 6 | 7 | import qualified Data.ByteString as BS 8 | import Data.Attoparsec.ByteString 9 | import Data.Attoparsec.ByteString.Char8 (isHorizontalSpace, char, endOfLine, decimal, digit) 10 | import Data.Time (Day(..), TimeOfDay(..), makeTimeOfDayValid, fromGregorianValid) 11 | import Types 12 | 13 | 14 | parseData :: BS.ByteString -> Either String [Data] 15 | parseData = parseOnly parserData 16 | 17 | parserData :: Parser [Data] 18 | parserData = many' parseDatapoint 19 | 20 | 21 | parseDatapoint :: Parser Data 22 | parseDatapoint = do 23 | skipWhile isHorizontalSpace 24 | d <- parseDay 25 | char 'T' 26 | t <- parseTime 27 | char 'Z' 28 | skipWhile isHorizontalSpace 29 | char ',' 30 | skipWhile isHorizontalSpace 31 | ip <- parseIP 32 | skipWhile isHorizontalSpace 33 | endOfLine 34 | return $ Data d t ip 35 | 36 | parseDay :: Parser Day 37 | parseDay = do 38 | y <- count 4 digit 39 | char '-' 40 | m <- count 2 digit 41 | char '-' 42 | d <- count 2 digit 43 | case fromGregorianValid (read y) (read m) (read d) of 44 | (Just d) -> return d 45 | Nothing -> fail "Incorrect Date" 46 | 47 | 48 | parseTime :: Parser TimeOfDay 49 | parseTime = do 50 | h <- count 2 digit 51 | char ':' 52 | m <- count 2 digit 53 | char ':' 54 | s <- count 2 digit 55 | case makeTimeOfDayValid (read h) (read m) (read s) of 56 | (Just t) -> return t 57 | Nothing -> fail "Incorrect Time" 58 | 59 | parseIP :: Parser IPv4 60 | parseIP = do 61 | a <- decimal 62 | char '.' 63 | b <- decimal 64 | char '.' 65 | c <- decimal 66 | char '.' 67 | d <- decimal 68 | return $ IPv4 a b c d 69 | 70 | -------------------------------------------------------------------------------- /Übungen/Blatt5-solution/src/Types.hs: -------------------------------------------------------------------------------- 1 | module Types where 2 | 3 | import Data.Word 4 | import Data.Time 5 | 6 | data Data = Data 7 | { date :: Day 8 | , time :: TimeOfDay 9 | , ip :: IPv4 10 | } 11 | deriving (Show, Eq) 12 | 13 | data IPv4 = IPv4 Word8 Word8 Word8 Word8 14 | deriving (Show, Eq) 15 | -------------------------------------------------------------------------------- /Übungen/Blatt5-solution/stack.yaml: -------------------------------------------------------------------------------- 1 | # For more information, see: https://github.com/commercialhaskell/stack/blob/release/doc/yaml_configuration.md 2 | 3 | # Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2) 4 | resolver: lts-5.13 5 | 6 | # Local packages, usually specified by relative directory name 7 | packages: 8 | - '.' 9 | 10 | # Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3) 11 | extra-deps: [ gloss-1.10.1.1 12 | , gloss-rendering-1.10.1.1 13 | ] 14 | 15 | # Override default flag values for local packages and extra-deps 16 | flags: {} 17 | 18 | # Extra package databases containing global packages 19 | extra-package-dbs: [] 20 | 21 | # Control whether we use the GHC we find on the path 22 | # system-ghc: true 23 | 24 | # Require a specific version of stack, using version ranges 25 | # require-stack-version: -any # Default 26 | # require-stack-version: >= 1.0.0 27 | 28 | # Override the architecture used by stack, especially useful on Windows 29 | # arch: i386 30 | # arch: x86_64 31 | 32 | # Extra directories used by stack for building 33 | # extra-include-dirs: [/path/to/dir] 34 | # extra-lib-dirs: [/path/to/dir] 35 | -------------------------------------------------------------------------------- /Übungen/Blatt5-solution/test/Spec.hs: -------------------------------------------------------------------------------- 1 | main :: IO () 2 | main = putStrLn "Test suite not yet implemented" 3 | -------------------------------------------------------------------------------- /Übungen/Blatt5.md: -------------------------------------------------------------------------------- 1 | # Übungsblatt 5 2 | 3 | ## Vorwort 4 | 5 | Dieses mal wollen wir ausgehend von unserem Parser (selbstgeschrieben oder von der Tutoren zur Verfügung gestellt) eine Visualisierung schreiben. 6 | 7 | ## Set-Up 8 | 9 | Wir legen zunächst wieder ein `stack`-Projekt an und tragen dort die benötigten Dependencies ein: 10 | 11 | * `attoparsec`, falls wir den Parser selbst schreiben wollen 12 | * `text`, weil aus den Parsern nur "Text" und nicht "String" herausfällt 13 | * `gloss` zur Visualisierung. 14 | 15 | Sie können zunächst einmal den in der Vorlesung besprochenen Code ausführen und so nachvollziehen, ob alles richtig installiert ist: 16 | 17 | ```haskell 18 | import Graphics.Gloss 19 | import Graphics.Gloss.Data.Color (makeColor, red) 20 | main :: IO () 21 | main = display (InWindow "Hello World" (500,500) (100,100)) 22 | (makeColor 0.9 0.9 0.9 1) 23 | (Pictures [ Color red (Circle 1000) 24 | , Text "Hello World Text" 25 | ]) 26 | ``` 27 | 28 | ## Aufgabe 1 29 | 30 | Parsen sie die mitgegebene Datei "data.csv" in einen geeigneten Datentypen, den sie definieren. Der CSV-Parser liefert meist nur `[[Text]]`, sie sollen aber so etwas wie `[DataRow]` daraus erstellen (für ein passend Definiertes `DataRow`). 31 | Geben sie dies mittels `print` auf der Konsole aus 32 | 33 | ## Aufgabe 2 34 | 35 | Wir möchten wissen, wie viele Zugriffe in welcher Stunde auf unserer Website es gab. Sortieren sie die Daten in 24 Buckets ein und stellen sie dies mittels `display` als einfaches Balkendiagramm dar. 36 | 37 | ## Aufgabe 3 38 | 39 | Wir möchten gerne eine Animation der Zugriffe über Zeit haben. Teilen sie hierzu den Datensatz in 5-Minuten-Buckets ein und erzeugen sie für jeden Bucket ein Bild aus 16x16 Kacheln, deren Farbe von Weiss nach Rot geht - je nachdem, wie viele Zugriffe in einer "Kachel" waren. 40 | Ein Zugriff auf eine Kachel ist definiert über die erste Zahl in der angegebenen IP (0-255). Die Kachel oben links entspricht der 0, oben rechts der 15, unten links der 240, unten rechts der 255. `ip ``div`` 16` gibt ihnen also die Zeile und `ip ``mod`` 16` die entsprechende Spalte. 41 | 42 | Skalieren sie die Zeit so, dass 1h aus dem Log 10 Sekunden in der Animation entspricht. 43 | 44 | ## Aufgabe 4 45 | 46 | Denken sie sich weitere Visualisierungen des Datensatzes aus. Evtl. können sie z.b. mittels `play` den Datensatz interaktiv erkundbar machen. 47 | 48 | # Alternative aufgaben für gloss (ohne Parser) 49 | 50 | ## Aufgabe 1 51 | 52 | Zeichne mit GLOSS die folgenden Formen: 53 | 54 | * Kreis 55 | * Rechteck 56 | * gefüllter Kreis (Farbe der Füllung: Rot) 57 | * Linie 58 | 59 | Die Hintergrundfarbe soll hierbei weiß sein, und das Bild eine Auflösung von 600x600px besitzen. Die Position des Fensters soll (300,100) betragen. 60 | 61 | ## Aufgabe 2 62 | 63 | ```haskell 64 | module Main where 65 | 66 | import Graphics.Gloss 67 | 68 | data Ball = BallData { ball :: Float -> Picture 69 | , ballRadius :: Float 70 | , ballColor :: Color 71 | , ballposition :: (Float, Float) 72 | , ballTempo :: (Float, Float) 73 | } 74 | initialData :: Ball 75 | initialData = BallData { ball = circleSolid 76 | , ballRadius = 100 77 | , ballColor = red 78 | , ballposition = (150, 150) 79 | , ballTempo = (40, 40) 80 | } 81 | 82 | window :: Display 83 | window = InWindow "Main Window" (600, 600) (300, 100) 84 | 85 | background :: Color 86 | background = black 87 | 88 | -- AUFGABE: Implementiere die Funktion render 89 | render :: Ball -> Picture 90 | render = undefined 91 | 92 | -- AUFGABE: Implementiere die Funktion moveBall, sodass der Ball sich bewegt. 93 | moveBall :: Ball -> Float -> Ball 94 | moveBall = undefined 95 | 96 | main :: IO () 97 | main = animate window background frame 98 | where 99 | frame :: Float -> Picture 100 | frame = render . moveBall initialData 101 | ``` 102 | 103 | ## Aufgabe 3 104 | 105 | ```haskell 106 | module Main where 107 | 108 | import Graphics.Gloss 109 | import Graphics.Gloss.Data.ViewPort 110 | 111 | type Punkt = (Float, Float) 112 | type Radius = Float 113 | 114 | (width, height) = (600, 600) 115 | 116 | 117 | data Ball = BallData { ball :: Float -> Picture 118 | , ballRadius :: Float 119 | , ballColor :: Color 120 | , ballposition :: (Float, Float) 121 | , ballTempo :: (Float, Float) 122 | } 123 | initialData :: Ball 124 | initialData = BallData { ball = circleSolid 125 | , ballRadius = 100 126 | , ballColor = red 127 | , ballposition = (20, 0) 128 | , ballTempo = (140, 140) 129 | } 130 | 131 | window :: Display 132 | window = InWindow "Main Window" (600, 600) (300, 100) 133 | 134 | background :: Color 135 | background = black 136 | 137 | fps :: Int 138 | fps = 120 139 | 140 | -- render Funktion aus der zweiten Aufgabe 141 | render :: Ball -> Picture 142 | render = undefined 143 | 144 | -- moveBall Funktion aus der zweiten Aufgabe 145 | moveBall :: Float -> Ball -> Ball 146 | moveBall = undefined 147 | 148 | -- -- AUFGABE: Implementiere die Funktion touchHori, sodass der Ball vom Oben und Unten zurueck kommt 149 | touchHori :: Punkt -> Radius -> Bool 150 | touchHori = undefined 151 | 152 | -- AUFGABE: Implementiere die Funktion touchVert, sodass der Ball von Rechts und Links zurueck kommt 153 | touchVert :: Punkt -> Radius -> Bool 154 | touchVert = undefined 155 | 156 | -- AUFGABE: Implementiere mithilfe der Funktionen touchHori und touchVert die Funktion checkTouchWall 157 | checkTouchWall :: Ball -> Ball 158 | checkTouchWall = undefined 159 | 160 | update :: ViewPort -> Float -> Ball -> Ball 161 | update _ s = checkTouchWall . moveBall s 162 | 163 | main :: IO () 164 | main = simulate window background fps initialData render update 165 | ``` 166 | -------------------------------------------------------------------------------- /Übungen/Blatt5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Übungen/Blatt5.pdf -------------------------------------------------------------------------------- /Übungen/Projekte.md: -------------------------------------------------------------------------------- 1 | # Projekte der Veranstaltung "Fortgeschrittene funktionale Programmierung in Haskell" 2 | 3 | __ACHTUNG ÄNDERUNGEN:__ 4 | 5 | - *70* Punkte reichen zum Bestehen, mindestens *40* müssen in einem Projekt sein. 6 | - Abgabefrist wird verlängert auf den 18.9.2016 7 | - DisCaptive wurde um 10 Punkte für die Spiellogik erweitert, da diese erheblich schwerer als in Snake ist 8 | - DisCaptive erhielt alt optionales Feature eine Undo/Redo-Funktion im Wert von 5 Punkten 9 | - DisCaptive, Snake und das Webprojekt erlauben nun ein Bestehen ohne zweites Projekt. 10 | 11 | ## Bestehenskriterien 12 | 13 | Zum Bestehen reicht es, wenn Projekte/Aufgaben/Teilaufgaben im Wert von *70* Punkten zufriedenstellend abgegeben wurden. Mindestens ein Projekt muss dabei *40* Punkte oder mehr ausmachen. 14 | 15 | Die Punkte sind unterteilt in Kategorien, aus denen nicht mehr als die angegebene Anzahl berücksichtigt wird: 16 | 17 | - Parser: 30 Punkte 18 | - div. Libraries: 40 Punkte 19 | - "Core"-Haskell: 50 Punkte ("Core"-Haskell umfasst die Libraries `lens`,`mtl` bzw. `transformers`,`attoparsec` oder andere Parser,`gloss` oder andere GUI) 20 | - Visualisierung: 50 Punkte 21 | - Parallelism/Concurrency: 30 Punkte 22 | - Binärparsing: 20 Punkte 23 | 24 | Dies dient dazu, dass man sich nicht nur auf eine Sache konzentriert, sondern verschiedene Aspekte und deren Zusammenspiel verstanden haben muss. 25 | 26 | Ebenfalls sind diese Projekte alle offen gehalten. Wenn ihnen eine sinnvolle Erweiterung einfällt, sprechen sie die Tutoren an und diese Erweiterung wird in dieses Dokument aufgenommen und eine Bepunktung hierfür festgelegt. 27 | 28 | ## Projekte 29 | 30 | Von den Projekten "DisCaptive" und "Snake" darf nur eines gewählt werden. 31 | 32 | ### DisCaptive (Summe: 95 Punkte) 33 | 34 | OPJ-Spiel "DisCaptive" 35 | 36 | Anforderungen an das Ergebnis analog zu OPJ. Interne Struktur, verwendete Bibliotheken etc. sind allerdings freigestellt. 37 | 38 | #### Bepunktung 39 | 40 | - Visualisierung: 10 Punkte (Visualisierung) 41 | - Level-Parser: 10 Punkte (Parser) 42 | - Benutzung von State: 15 Punkte (Core) 43 | - Implementation Spiellogik: 10 Punkte (Core) 44 | 45 | Optionale Zusätze: 46 | 47 | - Verwendung von Lens: 5 Punkte (Core) 48 | - Einlesen/Anzeigen von Bildern mittels Library: 5 Punkte (div. Libraries) 49 | - Binärparser für Bitmaps und anzeigen: 15 Punkte (Binärparsing) 50 | - Kraftfelder/Türen: 2 Punkte (Core) + 3 Punkte (Visualisierung) 51 | - Vereister Boden: 2 Punkte (Core) + 3 Punkte (Visualisierung) 52 | - Sensor: 2 Punkte (Core) + 3 Punkte (Visualisierung) 53 | - Schwere Kisten: 2 Punkte (Core) + 3 Punkte (Visualisierung) 54 | - Undo/Redo: 5 Punkte (Core) 55 | 56 | ### Snake (Summe: 95) 57 | 58 | Snake mit verschiedenen Level programmieren. 59 | 60 | Das Level muss hierzu eingelesen und dargestellt werden. 61 | 62 | Ablauf: Wenn kein Essen auf dem Spielfeld zu sehen ist, dann erscheint auf einem freien Feld etwas zu Essen. Die Schlange kann gesteuert werden, läuft aber automatisch nach vorn, wenn keine Taste gedrückt wurde. Wenn der Kopf der Schlange Essen aufnimmt, dann verschwindet es und die Schlange beginnt zu wachsen. 63 | Ziel des Spiel ist es möglichst viele Punkte zu sammeln, bevor die Schlange vor die Wand oder sich selbst läuft. 64 | 65 | Wenn ein Level an der Außenseite keine Wand hat, dann kommt die Schlange auf der anderen Seite des Levels wieder herein. 66 | 67 | Multiplayer-Ablauf: Jeder Spieler steuert eine Schlange. Tote Schlangen verschwinden vom Spielfeld. Wer zuletzt überlebt, hat gewonnen. 68 | 69 | #### Bepunktung 70 | 71 | - Visualisierung: 10 Punkte (Visualisierung) 72 | - Level-Parser: 5 Punkte (Parser) 73 | 74 | Optionale Zusätze: 75 | 76 | - Benutzung von State: 15 Punkte (Core) 77 | - Verwendung von Lens: 5 Punkte (Core) 78 | - Einlesen/Anzeigen von Bildern mittels Library: 5 Punkte (div. Libraries) 79 | - Binärparser für Bitmaps und anzeigen: 15 Punkte (Binärparsing) 80 | - Multiplayer an einem PC: 5 Punkte (Core) 81 | - Multiplayer über Netzwerk: 5 Punkte (Concurrency) + 5 Punkte (Binärparsing) + 10 Punkte (Core) 82 | - Dedizierter Multiplayer-Server: 15 Punkte (Concurrency) 83 | 84 | ### Datamining (Summe: 50 Punkte) 85 | 86 | Es wird ihnen eine CSV-Datei des Haushaltsplanes der Landesregierung NRW von 2015 gegeben. Lesen die Datei ein und visualisieren sie diese in einer geeigneten Weise. Für eine optionale interagierbare Visualisierung gibt es die 20 optionalen Visualisierungspunkte. 87 | 88 | #### Bepunktung 89 | 90 | - Parsing von CSV-Daten mit `,` und `\n`: 3 Punkte (Parser) 91 | - Verifikation der Daten: 2 Punkte (Parser) 92 | - Erstellung der Visualisierung: 15 Punkte (Visualisierung) 93 | 94 | Optionale Zusätze: 95 | 96 | - Erkennen/Angeben von Feldtrennern und Zeilentrennern: 5 Punkte (Parser) 97 | - Sinnvolle interaktive Visualisierung: 20 Punkte (Visualisierung) - z.b. wie https://haushalt.piratenfraktion-nrw.de/ 98 | - Daten im JSON-Format annehmen: 5 Punkte (Parser) bei selbst-schreiben, 5 Punkte (div. Libraries) bei Nutzung von externen Libs. 99 | 100 | ### Verteiltes Rechnen (Summe: 68 Punkte) 101 | 102 | Dieses Projekt entspricht dem Betriebssysteme-Projekt des rechnenden Servers. Ihr Programm soll einen Port öffnen und dort Verbindungen akzeptieren. Diese schicken "Aufträge" (simple Arithmetik mit `+-*/`) an den Server, der einige Zeit brauchen soll, diese zu bearbeiten (2-30 Sekunden). Man kann mehrere "Jobs" starten, sich nach ihrem Zustand erkundigen, die Ergebnisse abholen oder auf Ergebnisse warten. 103 | 104 | #### Bepunktung 105 | 106 | - Minimal-Server: 15 Punkte (Parallelism/Concurrency) 107 | 108 | Optionale Zusätze: 109 | 110 | - Parsing der Eingaben mittels Parser: 3 Punkte (Parser) 111 | - Verwendung von Lenses: 5 Punkte (Core) 112 | - Verteiltes Rechnen: 15 Punkte (Parallelism/Concurrency) + 30 Punkte (div. Libraries) bei Verwendung von CloudHaskell - man rechnet nicht auf einem Server, sondern auf einer Cloud 113 | 114 | ### Jabber-Bot (Summe: 60 Punkte) 115 | 116 | Das XMPP-Protokoll (auch Jabber genannt) int eine offene Schnittstelle. Über die Techfak bekommen sie einen eigenen Jabber-Account (username@techfak.de). Schreiben sie einen Bot, der einfache Aufgaben in einem Jabber-Chat (oder Konferenz) übernimmt. 117 | 118 | #### Aufgaben: 119 | 120 | - Remember-me: Der Bot reagiert auf ein Kommando der Form "remind me at 13:45: go eat in Mensa" und um 13:45 schreibt der Bot den Absender mit der Nachricht "go eat in Mensa" an. 121 | - Wikipedia-suche: Der Bot reagiert auf ein Kommando der Form "wiki universität bielefeld" und sucht auf Wikipedia nach "universität bielefeld", nimmt den ersten Treffer und antwortet mit dem ersten Absatz des Artikels 122 | - Kalender-Plugin: Das ekVV stellt den persönlichen Kalender im caldav-Format zur Verfügung. Laden sie diesen zum Start/auf Wunsch ein und senden sie vor jedem Event eine Nachricht an den jeweiligen User. 123 | - Verteiltes-Rechnen-Plugin: Wenn sie das Projekt "verteiltes Rechnen" gemacht haben, dann sollen sie auch in der Lage sein über ihren Bot mit dem jeweiligen Server zu reden (und so Aufträge absenden, abholen etc.). 124 | - Webprojekt-Plugin: Wenn das Webprojekt ebenfalls gemacht wurde, dann soll dieser Bot in der Lage sein private Nachrichten an den jeweiligen User weiterzuleiten. 125 | 126 | #### Bepunktung 127 | 128 | - Aufsetzen des Bots: 15 Punkte (div. Libraries) 129 | - Remember-Me-Aufgabe: 5 Punkte (Core) 130 | 131 | Optionale Zusätze: 132 | 133 | - Wikipedia-Suche-Aufgabe: 10 Punkte (Core) + 5 Punkte (div. Libraries) bei Verwendung von hexpat-lens zum Antwort-Parsen 134 | - Kalender-Plugin: 135 | - Parser für ekvv-Kalender: 10 Punkte (Parser) oder 10 Punkte (div. Libraries) 136 | - Implementation Erinnerungsfunktion: 5 Punkte (Core) 137 | - Verteiltes Rechnen-Plugin: 138 | - Bot baut eine Verbindung zum Projekt "Verteiltes Rechnen" auf und leitet Inzut/Output durch: 5 Punkte (Parser) + 5 Punkte (Core) 139 | - "Webprojekt"-Plugin: 140 | - Notifications vom Forum per Jabber verstehen und an den angegeben User weiterleiten: 5 Punkte (Core) 141 | 142 | 143 | ### Webprojekt (Summe: 75 Punkte) 144 | 145 | Erstellen sie ein simples Forum. Die Registrierung kann entweder über Email/Passwort oder auch per Plugins, wie "OAuth" (Google, Facebook, Github, Twitter, Twitch, ...) ermöglicht werden. 146 | 147 | Das Admin-Panel soll umfassen: 148 | - Hinzufügen/Entfernen von Foren 149 | - Moderations-Fähigkeiten 150 | - Rechteverwaltung (Benennen von "Moderatoren", einschränken der Rechte auf Unterforen) 151 | 152 | #### Bepunktung 153 | 154 | - Minimal-Forum: 25 Punkte (div. Libraries) + 5 Punkte (Core) 155 | - Registrierung: 2 Punkte (div. Libraries) 156 | 157 | Optionale Zusätze: 158 | 159 | - Gute responsive Visualisierung mittels Bootstrap (o.ä.): 20 Punkte (Visualisierung) 160 | - Upload von Avataren und deren Darstellung: 3 Punkte (div. Libraries) 161 | - Admin-Panel: 10 Punkte (Core) 162 | - Notifications per E-Mail: 5 Punkte (Core) 163 | - Notifications per Jabber: 5 Punkte (div. Libraries) 164 | 165 | 166 | # Abgabedatum: 18.9.2016 167 | 168 | Projekte werden vorzugsweise als Projekt auf Github oder über euer __[Remote-Folder](https://techfak.net/dienste/remote/files#git)__ abgegeben. Wir helfen in den Tutorien auch bei der Benutzung von git bzw. bei der Rechtevergabe im Remote-Verzeichnis. Bitte vermeidet es temporäre Dateien (insb. das `.stack-work`-Verzeichnis) in euer git hinzuzufügen. Legt eine [`.gitignore`](https://git-scm.com/docs/gitignore) an, damit sowas nicht zufällig passiert. 169 | -------------------------------------------------------------------------------- /Übungen/Projekte.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FFPiHaskell/Vorlesung2016/22e9095cf9fc27b0c04b8f4ca636a72004452376/Übungen/Projekte.pdf --------------------------------------------------------------------------------