BGP routing is an important aspect of IP routing, which is the only one exterior gayeway routing protocol. There are two flavors: iBGP and eBGP, depennding on if the beighbors are in the same AS.
Especially EBGP, this is the routing protocol which routes the entire internet, connects between different ISPs, enterprise networks.
BGP routing
The Internet is comprised of two parts: the internal fine-grained portions managed by an IGP such as OSPF, and the interconnections of those autonomous systems (AS) via BGP.
BGP Basics:
The current version of BGP is BGP version 4, based on RFC4271.
BGP is the path-vector protocol that provides routing information for autonomous systems on the Internet via its AS-Path attribute.
BGP is a Layer 4 protocol that sits on top of TCP, using port 179.
BGP establises route by manually forming neighbors/Peers, exchange routing information between neighbors. Use “show ip bgp neighbor” or “show ip bgp summary” to see neighbors. The neighbors are not necessary to be physically connected neighbor, it can be logical neighbor, as long as it is IP reachable, with the help of IGP such as OSPF.
BGP establishes its BGP database after receiving the routing information from neighbors. The database can be examnined by “show ip bgp”.
BGP can insert BGP routes into router’s routing table depending on the weigh of route. By default, EBGP route has weight 20, IBGP route is 200, comparing to OSFP route is 100. These are well designed number, which we will see how important is.
Below is the network topology of two Autonomous Systems 500 and 600. I created the network by running Cisco IOL image.
Some highlights:
Each router has a loopback 0 interface, e.g. R1 has loopback0 with ip address <IP_ADDRESS>; R2 has loopback 0 with ip address <IP_ADDRESS>.
Each router has serial connections as WAN link, and Ethernet interface as LAN. WAN link is not supposed to be seen outside of AS, only LAN network is needed.
OSPF will be used as IGP
Loopback IP address will be used as neighbor address so that we can have redundancy especially in the case between R3 and R5.
IBGP will use full mesh instead of route reflector.
Following shows the IP address of each router.
R1:
R1#show ip interface brief
Interface IP-Address OK? Method Status Protocol
Ethernet0/0 <IP_ADDRESS> YES NVRAM up up
Serial1/0 <IP_ADDRESS> YES NVRAM up up
Serial2/0 <IP_ADDRESS> YES NVRAM up up
Loopback0 <IP_ADDRESS> YES manual up up
R1#
R2:
R2#show ip interface brief
Interface IP-Address OK?    Method Status Protocol
Ethernet0/0 <IP_ADDRESS> YES NVRAM up up
Serial1/0 <IP_ADDRESS> YES NVRAM up up
Serial2/0 <IP_ADDRESS> YES manual up up
Loopback0 <IP_ADDRESS> YES NVRAM up up
R5#
R1:
R1#show run | s ospf
router ospf 100
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
R1#
R1#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
<IP_ADDRESS> 0 FULL/ - 00:00:30 <IP_ADDRESS> Serial1/0
<IP_ADDRESS> 0 FULL/ - 00:00:31 <IP_ADDRESS> Serial2/0
R1#show ip route ospf
Codes: L - local , C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 03:56:15, Serial2/0
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 03:56:15, Serial1/0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 03:56:15, Serial2/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 03:51:47, Serial2/0
O <IP_ADDRESS>/8 [ 110/138] via <IP_ADDRESS>, 03:56:15, Serial1/0
[ 110/138] via <IP_ADDRESS>, 03:56:15, Serial2/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/129] via <IP_ADDRESS>, 03:51:05, Serial1/0
[ 110/129] via <IP_ADDRESS>, 03:51:05, Serial2/0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 03:56:15, Serial1/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 03:50:12, Serial1/0
R1#
R2:
R2#show running-config | s ospf
router ospf 100
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
R2#
R2#show running-config | s ospf
router ospf 100
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
R2#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
<IP_ADDRESS> 0 FULL/ - 00:00:38 <IP_ADDRESS> Serial1/0
<IP_ADDRESS> 0 FULL/ - 00:00:31 <IP_ADDRESS> Serial2/0
R2#show ip route ospf
Codes: L - local , C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 03:59:33, Serial1/0
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 03:59:43, Serial2/0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 03:59:43, Serial2/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 03:55:50, Serial2/0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 03:59:33, Serial1/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 03:54:24, Serial1/0
O <IP_ADDRESS>/8 [ 110/138] via <IP_ADDRESS>, 03:59:33, Serial1/0
[ 110/138] via <IP_ADDRESS>, 03:59:33, Serial2/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/129] via <IP_ADDRESS>, 03:53:31, Serial1/0
[ 110/129] via <IP_ADDRESS>, 03:53:31, Serial2/0
R2#
R3:
R3#show running-config | s ospf
router ospf 100
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
R3#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
<IP_ADDRESS> 0 FULL/ - 00:00:30 <IP_ADDRESS> Serial2/0
<IP_ADDRESS> 0 FULL/ - 00:00:31 <IP_ADDRESS> Serial1/0
R3#show ip route ospf
Codes: L - local , C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 04:00:56, Serial1/0
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 04:00:46, Serial2/0
O <IP_ADDRESS>/8 [ 110/138] via <IP_ADDRESS>, 04:00:46, Serial2/0
[ 110/138] via <IP_ADDRESS>, 04:00:56, Serial1/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/129] via <IP_ADDRESS>, 03:57:04, Serial2/0
[ 110/129] via <IP_ADDRESS>, 03:57:04, Serial1/0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 04:00:56, Serial1/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 03:56:20, Serial1/0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 04:00:46, Serial2/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 03:54:45, Serial2/0
R3#
R4:
R4#show running | se ospf
router ospf 100
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
network <IP_ADDRESS> <IP_ADDRESS> area 0
R4#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
<IP_ADDRESS> 0 FULL/ - 00:00:30 <IP_ADDRESS> Serial2/0
<IP_ADDRESS> 0 FULL/ - 00:00:31 <IP_ADDRESS> Serial1/0
R4#show ip route ospf
Codes: L - local , C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 04:02:06, Serial2/0
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 04:02:16, Serial1/0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 04:02:06, Serial2/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 03:58:25, Serial2/0
O <IP_ADDRESS>/8 [ 110/138] via <IP_ADDRESS>, 04:02:06, Serial2/0
[ 110/138] via <IP_ADDRESS>, 04:02:16, Serial1/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/129] via <IP_ADDRESS>, 03:57:41, Serial2/0
[ 110/129] via <IP_ADDRESS>, 03:57:41, Serial1/0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 04:02:16, Serial1/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 03:56:59, Serial1/0
R4#
With above configuration, we should be able to ping from any router inside AS-500 to ping any interface IP inside AS-500.
If we don’t need to communicate outside, that is good enough. But that is not the internet about. we want to connect anywhere in the world! BGP comes to help for that!
R1: only advertise LAN network, which is <IP_ADDRESS>. No WAN interface exposed.
peer-group “bgp-pgrp1” is created to apply to all three iBGP neighbors R2, R3, R4. we do the similar in R2, R3 and R4.
R1#show running-config | s bgp
router bgp 500
bgp log-neighbor-changes
network <IP_ADDRESS>
neighbor bgp-pgrp1 peer-group
neighbor bgp-pgrp1 remote-as 500
neighbor bgp-pgrp1 update-source Loopback0
neighbor bgp-pgrp1 version 4
neighbor bgp-pgrp1 next-hop-self
neighbor <IP_ADDRESS> peer-group bgp-pgrp1
neighbor <IP_ADDRESS> peer-group bgp-pgrp1
neighbor <IP_ADDRESS> peer-group bgp-pgrp1
R1#
R2: only advertise LAN network, which is <IP_ADDRESS>.
R2#show run | se bgp
router bgp 500
bgp log-neighbor-changes
network <IP_ADDRESS>
neighbor bgp-pgrp1 peer-group
neighbor bgp-pgrp1 remote-as 500
neighbor bgp-pgrp1 update-source Loopback0
neighbor bgp-pgrp1 version 4
neighbor bgp-pgrp1 next-hop-self
neighbor <IP_ADDRESS> peer-group bgp-pgrp1
neighbor <IP_ADDRESS> peer-group bgp-pgrp1
neighbor <IP_ADDRESS> peer-group bgp-pgrp1
R2#
R4: only advertise LAN network, which is <IP_ADDRESS>.
R4#show run | s bgp
router bgp 500
bgp log-neighbor-changes
network <IP_ADDRESS>
neighbor bgp-pgrp1 peer-group
neighbor bgp-pgrp1 remote-as 500
neighbor bgp-pgrp1 update-source Loopback0
neighbor bgp-pgrp1 version 4
neighbor bgp-pgrp1 next-hop-self
neighbor <IP_ADDRESS> peer-group bgp-pgrp1
neighbor <IP_ADDRESS> peer-group bgp-pgrp1
neighbor <IP_ADDRESS> peer-group bgp-pgrp1
R4#
R3:only advertise LAN network, which is <IP_ADDRESS>. Here R% is added as EBGP neighbor
using loopback address <IP_ADDRESS> with remote-as 600. Also we need configure ebgp-multihop=2 as we use lookback interface, it takes two hops to reach R5 from R3.
Another important thing is next-hop-self, which says when it advertise route
(e.g. <IP_ADDRESS>) from R5 to R1, R2, R4, it will use <IP_ADDRESS> as next hop address.
R3#show running-config | s bgp
router bgp 500
bgp log-neighbor-changes
network <IP_ADDRESS>
neighbor bgp-pgrp1 peer-group
neighbor bgp-pgrp1 remote-as 500
neighbor bgp-pgrp1 update-source Loopback0
neighbor bgp-pgrp1 version 4
neighbor bgp-pgrp1 next-hop-self
neighbor <IP_ADDRESS> peer-group bgp-pgrp1
neighbor <IP_ADDRESS> peer-group bgp-pgrp1
neighbor <IP_ADDRESS> peer-group bgp-pgrp1
neighbor <IP_ADDRESS> remote-as 600
neighbor <IP_ADDRESS> ebgp-multihop 2
neighbor <IP_ADDRESS> update-source Loopback0
R3#
R5: only advertise LAN network, which is <IP_ADDRESS>.
R5#show running-config | s bgp
router bgp 600
bgp log-neighbor-changes
network <IP_ADDRESS>
neighbor <IP_ADDRESS> remote-as 500
neighbor <IP_ADDRESS> ebgp-multihop 2
neighbor <IP_ADDRESS> update-source Loopback0
R5#
Check BGP neighor and datebase
R1:
R1#show ip bgp summary
BGP router identifier <IP_ADDRESS>, local AS number 500
BGP table version is 6, main routing table version 6
5 network entries using 700 bytes of memory
5 path entries using 380 bytes of memory
3/3 BGP path/bestpath attribute entries using 408 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 1512 total bytes of memory
BGP activity 24/19 prefixes, 34/29 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
<IP_ADDRESS> 4 500 124 124 6 0 0 01:49:47 1
<IP_ADDRESS> 4 500 125 126 6 0 0 01:50:00 2
<IP_ADDRESS> 4 500 125 125 6 0 0 01:49:51 1
R1#show ip bgp
BGP table version is 6, local router ID is <IP_ADDRESS>
Status codes: s suppressed, d damped, h history , * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
* > <IP_ADDRESS> <IP_ADDRESS> 0 32768 i
r>i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 i
r>i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 i
r>i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 i
* > i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 600 i
R1#
R2:
R2#show ip bgp summary
BGP router identifier <IP_ADDRESS>, local AS number 500
BGP table version is 6, main routing table version 6
5 network entries using 700 bytes of memory
5 path entries using 380 bytes of memory
3/3 BGP path/bestpath attribute entries using 408 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 1512 total bytes of memory
BGP activity 22/17 prefixes, 23/18 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
<IP_ADDRESS> 4 500 125 125 6 0 0 01:50:41 1
<IP_ADDRESS> 4 500 128 126 6 0 0 01:50:41 2
<IP_ADDRESS> 4 500 126 126 6 0 0 01:50:41 1
R2#show ip bgp
BGP table version is 6, local router ID is <IP_ADDRESS>
Status codes: s suppressed, d damped, h history , * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
r>i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 i
* > <IP_ADDRESS> <IP_ADDRESS> 0 32768 i
r>i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 i
r>i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 i
* > i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 600 i
R2#
R3:
R3#show ip bgp summary
BGP router identifier <IP_ADDRESS>, local AS number 500
BGP table version is 6, main routing table version 6
5 network entries using 700 bytes of memory
5 path entries using 380 bytes of memory
3/3 BGP path/bestpath attribute entries using 408 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 1512 total bytes of memory
BGP activity 24/19 prefixes, 35/30 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
<IP_ADDRESS> 4 500 129 127 6 0 0 01:52:06 1
<IP_ADDRESS> 4 500 128 129 6 0 0 01:51:53 1
<IP_ADDRESS> 4 500 126 130 6 0 0 01:51:58 1
<IP_ADDRESS> 4 600 128 126 6 0 0 01:52:09 1
R3#show ip bgp
BGP table version is 6, local router ID is <IP_ADDRESS>
Status codes: s suppressed, d damped, h history , * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
r>i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 i
r>i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 i
* > <IP_ADDRESS> <IP_ADDRESS> 0 32768 i
r>i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 i
* > <IP_ADDRESS> <IP_ADDRESS> 0 0 600 i
R3#
R4:
R4#show ip bgp summary
BGP router identifier <IP_ADDRESS>, local AS number 500
BGP table version is 6, main routing table version 6
5 network entries using 700 bytes of memory
5 path entries using 380 bytes of memory
3/3 BGP path/bestpath attribute entries using 408 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 1512 total bytes of memory
BGP activity 22/17 prefixes, 23/18 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
<IP_ADDRESS> 4 500 128 128 6 0 0 01:52:27 1
<IP_ADDRESS> 4 500 128 128 6 0 0 01:52:22 1
<IP_ADDRESS> 4 500 131 126 6 0 0 01:52:27 2
R4#show ip bgp
BGP table version is 6, local router ID is <IP_ADDRESS>
Status codes: s suppressed, d damped, h history , * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
r>i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 i
r>i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 i
r>i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 i
* > <IP_ADDRESS> <IP_ADDRESS> 0 32768 i
* > i <IP_ADDRESS> <IP_ADDRESS> 0 100 0 600 i
R4#
R5:
R5#show ip bgp summary
BGP router identifier <IP_ADDRESS>, local AS number 600
BGP table version is 14, main routing table version 14
5 network entries using 700 bytes of memory
5 path entries using 380 bytes of memory
3/3 BGP path/bestpath attribute entries using 408 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 1512 total bytes of memory
BGP activity 26/21 prefixes, 33/28 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
<IP_ADDRESS> 4 500 128 129 14 0 0 01:53:17 4
R5#show ip bgp
BGP table version is 14, local router ID is <IP_ADDRESS>
Status codes: s suppressed, d damped, h history , * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
* > <IP_ADDRESS> <IP_ADDRESS> 0 500 i
* > <IP_ADDRESS> <IP_ADDRESS> 0 500 i
* > <IP_ADDRESS> <IP_ADDRESS> 0 0 500 i
* > <IP_ADDRESS> <IP_ADDRESS> 0 500 i
* > <IP_ADDRESS> <IP_ADDRESS> 0 32768 i
R5#
check routing table and veirify
R1:
R1#show ip route
Codes: L - local , C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Serial2/0
L <IP_ADDRESS>/32 is directly connected, Serial2/0
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 04:20:45, Serial2/0
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 04:20:45, Serial1/0
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Serial1/0
L <IP_ADDRESS>/32 is directly connected, Serial1/0
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Ethernet0/0
L <IP_ADDRESS>/32 is directly connected, Ethernet0/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
C <IP_ADDRESS> is directly connected, Loopback0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 04:20:45, Serial2/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 04:16:17, Serial2/0
O <IP_ADDRESS>/8 [ 110/138] via <IP_ADDRESS>, 04:20:45, Serial1/0
[ 110/138] via <IP_ADDRESS>, 04:20:45, Serial2/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/129] via <IP_ADDRESS>, 04:15:35, Serial1/0
[ 110/129] via <IP_ADDRESS>, 04:15:35, Serial2/0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 04:20:45, Serial1/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 04:14:42, Serial1/0
B <IP_ADDRESS>/8 [ 200/0] via <IP_ADDRESS>, 01:53:05
R1#
R1#ping <IP_ADDRESS>
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to <IP_ADDRESS>, timeout is 2 seconds:
.....
Success rate is 0 percent ( 0/5)
R1#ping <IP_ADDRESS> source <IP_ADDRESS>
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to <IP_ADDRESS>, timeout is 2 seconds:
Packet sent with a source address of <IP_ADDRESS>
!!!!!
Success rate is 100 percent ( 5/5) , round-trip min/avg/max = 24/26/32 ms
R1#
R2:
R2#show ip route
Codes: L - local , C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Serial2/0
L <IP_ADDRESS>/32 is directly connected, Serial2/0
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Serial1/0
L <IP_ADDRESS>/32 is directly connected, Serial1/0
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 04:23:05, Serial1/0
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 04:23:15, Serial2/0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 04:23:15, Serial2/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 04:19:22, Serial2/0
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Ethernet0/0
L <IP_ADDRESS>/32 is directly connected, Ethernet0/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
C <IP_ADDRESS> is directly connected, Loopback0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 04:23:05, Serial1/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 04:17:56, Serial1/0
O <IP_ADDRESS>/8 [ 110/138] via <IP_ADDRESS>, 04:23:05, Serial1/0
[ 110/138] via <IP_ADDRESS>, 04:23:05, Serial2/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/129] via <IP_ADDRESS>, 04:17:03, Serial1/0
[ 110/129] via <IP_ADDRESS>, 04:17:03, Serial2/0
B <IP_ADDRESS>/8 [ 200/0] via <IP_ADDRESS>, 01:55:25
R2#
R3:
R3#show ip route
Codes: L - local , C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 04:23:46, Serial1/0
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Serial1/0
L <IP_ADDRESS>/32 is directly connected, Serial1/0
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Serial2/0
L <IP_ADDRESS>/32 is directly connected, Serial2/0
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 04:23:36, Serial2/0
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Serial3/0
L <IP_ADDRESS>/32 is directly connected, Serial3/0
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/24 is directly connected, Serial4/0
L <IP_ADDRESS>/32 is directly connected, Serial4/0
O <IP_ADDRESS>/8 [ 110/138] via <IP_ADDRESS>, 04:23:36, Serial2/0
[ 110/138] via <IP_ADDRESS>, 04:23:46, Serial1/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/129] via <IP_ADDRESS>, 04:19:54, Serial2/0
[ 110/129] via <IP_ADDRESS>, 04:19:54, Serial1/0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 04:23:46, Serial1/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 04:19:10, Serial1/0
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Ethernet0/0
L <IP_ADDRESS>/32 is directly connected, Ethernet0/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
C <IP_ADDRESS> is directly connected, Loopback0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 04:23:36, Serial2/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 04:17:35, Serial2/0
B <IP_ADDRESS>/8 [ 20/0] via <IP_ADDRESS>, 01:56:03
<IP_ADDRESS>/32 is subnetted, 1 subnets
S <IP_ADDRESS> [ 1/0] via <IP_ADDRESS>
R3#
R4:
R4#show ip route
Codes: L - local , C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 04:24:36, Serial2/0
O <IP_ADDRESS>/8 [ 110/128] via <IP_ADDRESS>, 04:24:46, Serial1/0
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Serial1/0
L <IP_ADDRESS>/32 is directly connected, Serial1/0
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Serial2/0
L <IP_ADDRESS>/32 is directly connected, Serial2/0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 04:24:36, Serial2/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 04:20:55, Serial2/0
O <IP_ADDRESS>/8 [ 110/138] via <IP_ADDRESS>, 04:24:36, Serial2/0
[ 110/138] via <IP_ADDRESS>, 04:24:46, Serial1/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/129] via <IP_ADDRESS>, 04:20:11, Serial2/0
[ 110/129] via <IP_ADDRESS>, 04:20:11, Serial1/0
O <IP_ADDRESS>/8 [ 110/74] via <IP_ADDRESS>, 04:24:46, Serial1/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
O <IP_ADDRESS> [ 110/65] via <IP_ADDRESS>, 04:19:29, Serial1/0
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Ethernet0/0
L <IP_ADDRESS>/32 is directly connected, Ethernet0/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
C <IP_ADDRESS> is directly connected, Loopback0
B <IP_ADDRESS>/8 [ 200/0] via <IP_ADDRESS>, 01:56:58
R4#
R5:
R5#show ip route
Codes: L - local , C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Serial1/0
L <IP_ADDRESS>/32 is directly connected, Serial1/0
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/24 is directly connected, Serial2/0
L <IP_ADDRESS>/32 is directly connected, Serial2/0
B <IP_ADDRESS>/8 [ 20/0] via <IP_ADDRESS>, 01:54:11
B <IP_ADDRESS>/8 [ 20/0] via <IP_ADDRESS>, 01:54:11
B <IP_ADDRESS>/8 [ 20/0] via <IP_ADDRESS>, 01:54:42
<IP_ADDRESS>/32 is subnetted, 1 subnets
S <IP_ADDRESS> [ 1/0] via <IP_ADDRESS>
B <IP_ADDRESS>/8 [ 20/0] via <IP_ADDRESS>, 01:54:11
<IP_ADDRESS>/8 is variably subnetted, 2 subnets, 2 masks
C <IP_ADDRESS>/8 is directly connected, Ethernet0/0
L <IP_ADDRESS>/32 is directly connected, Ethernet0/0
<IP_ADDRESS>/32 is subnetted, 1 subnets
C <IP_ADDRESS> is directly connected, Loopback0
R5#
Some highlights:
For R1, R2, R3, R4, with BGP in place, BGP adds a new route for <IP_ADDRESS>/8 network on top of OSPF routes.
The next hop of <IP_ADDRESS> is <IP_ADDRESS>, which is R3 loopback 0 IP, which is very important, as we don’t need to know WAN IP of R5, which is usually not available as it belongs to another AS/organization.
When we try to ping <IP_ADDRESS> from R1, it fails without specify soure IP. This is because the default source IP of packet will be R1 WAN IP which is eith <IP_ADDRESS> or <IP_ADDRESS>, which are not advetized to R5 (outsider), so it couldn’t reply ping packet. Howerver if we specify source IP as LAN (<IP_ADDRESS>) of R1, ping works, because R5 has route to <IP_ADDRESS>, the next hop is <IP_ADDRESS>, which R3. From R3, it surely knows how to get to R1 through OSPF route. Very nice!
BGP is kind of simple but very powerful. It was started for ipv4 only, then later it gets extended to support mutiple protocol like ipv6, L2VPN, L3VPN, called as MP-BGP. It is backward compatible though. One of very popular use is in MPLS VPN network. MP-BGP is configured in PE routers to form iBGP, support vpnv4/vpnv6 address, so that PEs can exchange prefixes info needed by MPLS VPN, e.g. RD, labels etc. A good example can be found here .
Reference: BGP youtube video:
BGP Video By Sikandar Shaik


current url=ftps://localhost (Modify url parameters in this HTML source code to fit your server-side)
JFileUpload Applet Homepage: http://www.jfileupload.com
This product requires Java™ technology.


The /
The second half of the V refers to the guided learning opportunities that can teach students valuable institutional skills both in and out of the classroom, such as hands-on coursework or field study, as well as professional internships or work experiences.
Unlike with the other areas, my experiential learning at Virginia Tech was lacking; after placing so much focus on my academic success and social activity levels, I began to run out of steam and failed to take full advantage of the professional learning opportunities available to me within the Department of Psychology. For several years I maintained a student job with the Virginia Tech Transportation Institute as a Data Reductionist in which I observed, documented, and codified driver behaviors under naturalistic study settings for nation-wide transportation research projects. This was very rewarding work that gave me valuable knowledge about practical research methods, introduced me to a number of data analysis skills, and significantly helped further develop my computer skills.
However, I relied on this job during school to provide me with all of the opportunities and knowledge that I would need to succeed after graduation, and as a result I did not put reach out to professors in the psychology department, nor did I seek out internships with outside companies. This decision prevented me from getting up-close and personal with ongoing research projects and from developing firsthand knowledge of how upper-level employees operate in the professional setting. This time around will be better utilized with my renewed focus on career development and experience building.
For another student, the second half of the V may involve a work-study program, a particularly hands-on degree program or course, or an internship in your career of interest. Many professional learning opportunities will provide invaluable experiences and knowledge to help you stand out among your peers as a well rounded individual with a host of different perspectives and skillsets to offer.


{% extends 'base.html' %} {% block title %}Cart{% endblock %} {% block content %}
Your Cart
Please enter Phone Number to view Cart
Phone:


About Ryan
- Software Engineer on Grails team at OCI (New home to Grails)
- Father of 2 girls under 12
- Co-Chair Austin Groovy and Grails User Group
- Co-Author of Effective Gradle Implementation Video Series on Packt
- I like to modify all the things (cars, home automation, phones, gadgets)
- Into lots of Devops/Linux stuff and AWS
About Lee
- Cloud Architect/Operations Manager at Starmount
- Father of 2 boys under 13
- Past Technology Chair of Agile Austin
- Co-Author of Effective Gradle Implementation Video Series on Packt
- Amateur Chef (His Chicken Cordon Bleu is like crazy good.)
- Master of all things AWS and DevOps
What we will cover
- How do we extend Chatops to TalkOps
-
Live demo using dynamic AWS credentials w/Account Linking
-
Security - How Account Linking Works
-
Useful links to our source
Chatops extended - Talkops?
Live AWS Demo w/Account Linking
- Uses Account Linking
- Uses Java SDK (community), Grails App (w/Alexa Pluin), Spring Security w/OAuth2 Plugin
How Account Linking Works
- Echo app passes your Amazon ID to our App
- Register your user ID in app - add your keys
- We use Spring Security OAuth2 to link your AWS to Web Account
- Run skill via Grails App to talk to AWS
Source Links
- Grails 3 Plugin: http://bit.ly/2a9RQyz or http://bit.ly/2a9RQyz
- Twitter AWS Groovy Lambda App: http://bit.ly/2afiibI
- Twitter Grails 3 App: http://bit.ly/2aAg9d2
- Hero Quiz Groovy Lambda App: http://bit.ly/2aqLqAu
- Run Skills in Browser: http://echosim.io
- Amazon Developer Portal to register Skills: https://developer.amazon.com
Source Links Continued
- Lazybones template to generate Lambda Groovy Skills http://bit.ly/2afiKXE
- Alexa Workshop Labs http://bit.ly/2ajJR4Y
- Lamba Groovy Example from Talk http://bit.ly/2anfNTp
- HelloWorld Grails Account Linking Sample from lab http://bit.ly/2ahQpE1
- Java SDK updated with AudioPlayer support http://bit.ly/2ejX41o
- Groovy Podcast Skill http://bit.ly/2fCAHQN
Special Thanks
- Lee Fox for working on all of this with me
- Bendoit Benoit Hédiard for his awesome Groovy Lamba code sample from GGX
THE END
I hope you have enjoyed the session!
Free free to contact me on twitter or google+ @RyanVanderwerf or email<EMAIL_ADDRESS>Lee Fox on Twitter @FoxInATX or email lee.h.fox@gmail.com


Dualberg's gym
Always availble when Dualberg opens
Dualberg's pool
Open 8 AM through 9 PM. Cleaned after 10 PM
Pizza always made fresh and hot
Game room always open


BLT Wallet
What is BLT wallet?
A web wallet for easy access to Bitcoin and Litecoin testnets. Please bookmark this URL if you want to access the same wallet again.
Fiat
{{ symbol }} {{ code }}
Need some testnet coins?
{{ faucet[0] }}
BLT Wallet
Fiat
{{ symbol }} {{ code }}
Faucets
{{ faucet[0] }}
{{ amount }}
{{ fiat_amount }}
Send
Copy Address
{{ address }}
Transactions
Time
Transaction ID
Amount
{{ tx.txid }}
-{{ tx.vout[0].value }} {{ symbol }}
+{{ getOutputValue(tx.vout) }} {{ symbol }}
Send Coins
Amount (A .001 miner fee is deducted from your balance)
Max Amount
Recipient Address
Send
Cancel
{{ msg.title }}
{{ msg.reason }}


CSS Lab
A series of small interactive CSS labs that demonstrate at least one way of solving a particular problem, for example vertically centering block elements.
| centering | Various ways of centering elements horizontally, vertically, or both. |
| flex | General demonstration of the various flex CSS attributes. |
| fixed width left column | Shows how to set up two columns, the left one with a fixed width and the right one with a dynamic width that changes with the width of the page (browser window). |
| ul and li spacing | Shows the effects of ul and li margin and padding values. Includes a preset to show one way of achieving a pleasing layout. |


Subject: Looks Like War
08-01-09
KIGY
I just took the attached pictures of a train passing by my shop a few minutes ago. We have about 10 trains come by each day, but this was the first one I have seen come by here carrying military vehicles and crates. It caught my attention, so I took a few pictures. There were about 6 large crates, followed by around 150 humvee's, and other military vehicles.
I happen to be on the phone with my dad (40 year gov't retiree) at the time and mentioned it to him. He said that Redstone Arsenal has been bringing in and sending out a whole lot stuff in the past week, and that the word on the base is that they are getting prepared for something. I thought it was a little scarey considering I was just on the computer reading up on the supposed civil war we might be having sometime soon....Time to get ready!!!!
Thought you might find this interesting,
KLASP
Tim
GD TN
CNKKKK


4) External 5V power¶
Optional source of higher current power input which can be used as an alternative to powering from the USB connector on the Teensy (500 mA limit). The slide switch (S2) can be used as an on/off switch for the device when using the external 5V power.
Solder the blue 2-position terminal block onto the board as shown below. Make sure the terminal block is positioned with the connector side facing out.
Solder the switch onto the board as shown below.


var c = require("./ttConstants");
var ManualTurn = require("./manual_turn.js");
var Component = require("./component.js");
var inherits = require('util').inherits;
/**
* The Game class
* @constructor
* @extends {Component}
* @param {Player|Array} players - A list of players
* @param {Board} board - The game board
*/
function Game(players, board) {
Component.call(this);
this.players = players,
this.board = board;
this.dice = [];
this.randomizeCurrentPlayer();
this.turnMap = null;
this.moveType = c.moveTypeDice; // manual movement or dicerolls
this.proposedMove = {}; // for c.moveTypeManual
this.moveEvaluationType = c.moveEvaluationTypeLandingAction;
};
inherits(Game, Component);
/**
* Method to set turnMap of the game once it is created
* This is required!
* @param {Turn} turnMap - A turn object to be used by the game
*/
Game.prototype.setTurn = function(turnMap) {
this.turnMap = turnMap;
};
/**
* Method to call from the view to update the game state
* @param {string} message - A string saying which state to transition to
*/
Game.prototype.updateState = function(message) {
this.turnMap.updateState(message, this);
};
/**
* Set the game's state machine
* @param {TurnMap} turnMap - the game's state machine
*/
Game.prototype.setTurnMap = function(turnMap) {
this.turnMap = turnMap;
};
/**
* Set the move type for this game
* @param {string} moveType - The move type. See ttConstants
*/
Game.prototype.setMoveType = function(moveType) {
this.moveType = moveType;
if (moveType == c.moveTypeManual) {
this.proposedMove = {};
}
};
/**
* Callback method from the view when a token is clicked
* To be overridden by the subclass
* @abstract
* @parram {Token} token - The token object that was clicked
*/
Game.prototype.tokenClicked = function(token) {
throw new Error('must be implemented by subclass!');
};
/**
* Callback method from the view when a tile is clicked
* To be overridden by the subclass
* @abstract
* @param {Tile} tile - the tile object that was clicked in the view
*/
Game.prototype.tileClicked = function(tile) {
throw new Error('must be implemented by subclass!');
};
/**
* Check the Game State to see if a player has won the game
* @abstract
* @return {boolean}
*/
Game.prototype.isGameOver = function() {
// TODO - check this method every transition in the state machine
throw new Error('must be implemented by subclass!');
};
/**
* Set the current player to a random player
* Used to decide who goes first at the beginning of the game
*/
Game.prototype.randomizeCurrentPlayer = function() {
this.currentPlayer = Math.floor(Math.random() * this.players.length);
};
/**
* Roll the dice
* Dice are represented as an array of ints stored in the state
* @param {int} numberOfDice - The number of dice to roll
* @param {int} sides - How many sides should be on the dice (defaults to 6)
*/
Game.prototype.rollDice = function(numberOfDice, sides) {
if (!sides) {
sides = 6;
}
this.dice = [];
var message = "You rolled a ";
for (var i = 0; i < numberOfDice; i++) {
var roll = Math.floor(Math.random() * sides) + 1;
this.dice.push(roll);
message = message.concat(roll + ", ");
}
this.sendMessage(message);
};
/**
* Checks to see if the first two dice are the same value
* @returns {Boolean}
*/
Game.prototype.isDoubles = function(dice) {
return dice.length > 1 && dice[0] === dice[1];
};
/**
* Returns the current player
* @returns {Player}
*/
Game.prototype.getCurrentPlayer = function() {
return this.players[this.currentPlayer];
};
/**
* Sets the last moved token for later reference
* @param {Token} token - Last moved token
* @returns {void}
*/
Game.prototype.submitMove = function(token) {
this.lastMovedToken = token;
};
/**
* Switch to the next player
* Override to provide more logic on determining the next player
* @returns {void}
*/
Game.prototype.nextPlayer = function() {
this.currentPlayer = (this.currentPlayer + 1) % this.players.length;
};
/**
* Set the destination for a proposed move
* @param {Tile} tile - the tile to move to
* @returns {void}
*/
Game.prototype.setProposedMoveDestination = function(tile) {
this.proposedMove.destination = tile;
};
/**
* Set the token for a proposed move
* @param {Token} token - the token to move
* @returns {void}
*/
Game.prototype.setProposedMoveToken = function(token) {
this.proposedMove.token = token;
};
/**
* A proposed move exists and it is valid
* @returns {boolean}
*/
Game.prototype.hasValidMove = function() {
if (this.moveType == c.moveTypeManual && (!this.proposedMove.token || !this.proposedMove.destination)) {
return false;
}
else if (this.moveType == c.moveTypePlaceToken && !this.proposedMove.destination) {
return false;
}
var token = this.proposedMove.token;
var tile = token ? token.tile : null;
var destination = this.proposedMove.destination;
return this.isValidMove(token,
tile,
destination);
};
/**
* Determines if it is valid to move the given token to the new tile
* @param {Token} token - token to place or move
* @param {Tile} oldTile - the previous token location (could be null if token not on board yet)
* @param {Tile} newTile - the new token location
* @abstract
* @returns {boolean}
*/
Game.prototype.isValidMove = function(token, oldTile, newTile) {
console.warn("isValidMove should be implemented by the subclass");
return true;
};
/**
* Evaluates the current state of the game and determines if a player won
* @param {Player} player - the current player
* @abstract
* @returns {boolean}
*/
Game.prototype.playerDidWin = function(player) {
console.warn("playerDidWin should be implemented by the subclass");
return false;
};
/**
* Execute the proposed move made by the player
* @param {Player} player - the current player
* @abstract
* @returns {void}
*/
Game.prototype.executeMove = function(player) {
throw new Error('executeMove must be implemented by the subclass!');
};
/**
* Event for when a token is clicked on
* @param {Token} token - the token that was clicked
* @returns {void}
*/
Game.prototype.tokenClicked = function(token) {
if (this.moveType == c.moveTypeManual &&
this.turnMap.getCurrentState() == "waitingForMove") {
this.setProposedMoveToken(token);
}
};
/**
* Event for when a tile is clicked on
* @param {Tile} tile - the tile that was clicked
* @returns {void}
*/
Game.prototype.tileClicked = function(tile) {
/* make sure we're in the right state,
a token has been pressed,
and we're not a tile with a token on it (if we have > 0
children, then this click was meant for a token... */
if (this.moveType == c.moveTypeManual &&
this.turnMap.getCurrentState() == "waitingForMove" &&
this.proposedMove.token &&
this.proposedMove.token.tile != tile) {
this.setProposedMoveDestination(tile);
this.turnMap.updateState("makeMove");
} else if (this.moveType == c.moveTypePlaceToken &&
this.turnMap.getCurrentState() == "waitingForMove") {
this.setProposedMoveDestination(tile);
this.turnMap.updateState("makeMove");
}
};
module.exports = Game;


{% extends "base_generic.html" %} {% load bootstrap4 %} {% block content %} {% block logintext %} Success {% endblock logintext %}
We've emailed you instructions for setting your password. If they haven't arrived in a few minutes, check your spam folder.


{% if report.status == "ready" %}
Loading search results
{% else %}
Search in progress; please wait...
{% endif %}
Searched for people who match::
{{ human_query }}
{% if report.status == "ready" %}
These results were current as of {{ report.cached|date }}
{% if request.PERMISSIONS.search_drop_cache %}
{% endif %}
{% endif %}


WITNESS LIST Pensions & Investments Committee February 17, 2003-9:00A Employees Retirement System of TX On: Beckett, Sheila (ERS) Firefighters' Pension Commission On: Sandefer, Morris (FFPC) Pension Review Board On: Smith, Virginia "Ginger" (PRB) State Securities Board On: Crawford, Denise "Denny" (SSB) Teacher Retirement System of TX On: Dunlap, Charles (TRS) TX County&District Retirement Syste On: Henry, Ray (TCDRS) TX Municipal Retirement System On: Anderson, Gary (TMRS)


--- layout: post title: Testing how far you can go with removing CQRS infrastructure ---
This is an example of something that would be easily converted to CQRS, but without the overhead:


Posts
Finally first release!
Life is far from predictable, and these have been a lot of crazy months. Still here we are! finally with a release, with a version of the game i’m actually confortable with.
I’m truly happy, tired, and very grateful to finally be able to share this with the world, and i can’t wait to see people’s reaction to it!
All the links in the Download section have been updated. From now on this section will be updated each time there’s something new with the project, how often it happes depends on the amount of time i manage to get and the amount of people interested in it.
If anyone has ANY doubt, question, comment or anything, please feel free to contact me to my email or add me on Facebook, i’ll be more than happy to reply.
Mass Effect - The Charon Relay
Made only for the fans of both tabletop RPG and Mass Effect games, this adaptation is based on the Fantasy AGE system by Green Ronin and is used for Dragon Age, Fantasy AGE, Blue Rose and Titansgrave games.
What do i need to play?
I don’t own any license here, except for what i put together, so it’s all free, just make sure to link whoever you send the game to this page c: .
To play, you’ll need the book (in the download section to your right), character and power sheets (both in the end of the book, and also in a separated link in the download section).
Also, you’ll need some dice, three six-sided dice, at last three ten-sided dice (they’re actually optional, but help to make the combat flow a bit faster), and a 20 sided dice (for the critical hits).
A lot of people like playing with figurines and a map, and i really recommend it as it helps visualize the battlefield. There are no rules for this, except that it should be squared. I understand hexagonal grids are great for distances, but they don’t work well when cover is involved.
Games that inspired the adaptation
The most obvious are Fantasy AGE and Mass Effect 1. There are also a few differences between the tabletop Dragon Age RPG and the Fantasy AGE that allowed me to understand better the game mechanics and system.
The combat for the game is based on the XCOM gameplay and Mass Effect 3 mechanics (ME1 and ME3 combat mechanics are very different).
What’s the game about?
The original Fantasy AGE is meant for a less-tactical faster-peaced gameplay in Combat, Exploration and Interpretation encounters, and is set in a little-to-none technology ambientation (except Titansgrave, but it’s still scarce in the world).
This adaptation has completely different classes, talents, specializations and magics/arcana (now called Powers). The gameplay or rather how the game flows is also different, giving a feeling of a more cover-to-cover shooting tactical game (much like XCOM).
Also there are Shield points besides the Health Points for characters and Powers only recharge, they don’t consume anything equivalent to Mana or Magic Points. This is to make the game mechanics reflect more of the Mass Effect world.
There are also Weight mechanics and non-combat related talent points besides regular talent points. These are meant to guide the player towards a more balanced and role-specific character, yet it does not limit the player’s choices on how to build his character.
All these changes and new mechanics and changes do require some more ruling than the original Fantasy AGE, but to keep the original spirit of a fast-paced and easy-to-learn game, most of these new rules are common bonuses or only apply when improving your character.
This is the front cover made by Martin Gust for this adaptation, nothing gives more life to a game than great artwork, thanks a lot man <3
Downloads
Book in PDF and all extra sheets downloads
Core Rulebook (PDF)
Finally the first release of the book! I truly welcome any question and/or feedback you may have, possitive and negative, so contact me on email or facebook c:
Here’s the link to the complete book, it has all the extra sheets and pages showed in this page attached at the end of the PDF, in case someone wants to print it, for personal use only.
Mass Effect-The Charon Relay This link will get updated would anything change.
Disclaimer
Please keep in mind that it’s meant for personal use and it is in no way official or legal, it’s only the work of a fan. All rights belong to Electronics Arts, Bioware (for Mass Effect), Green Roning publishing and their respective owners.
As for the images, i’ve personally asked permission to each and every single artist. They are all credited in the first few pages of the book. If you own any of this images and don’t want your work to be on the book anymore, please send me an email and i’ll fix it right away.
Character Sheets
The character sheet better fits a legal size print. How to better use the sheet is explained in the book.
Extra sheets
The game was meant to be played more like a board game, as there are a lot of things to have in mind, so being able to see all you have or can do is great help.
Power sheet
Made to be printed in a legal sized paper and used side-ways. Holds reference for 9 powers and space to leave a Tech-power recharge dice, Biotic-power recharge dice, how much ammo you got in your weapon and the bleeding/medigel cooldown time.
Keep in mind that only Sentinels use both recharge dices, and that when you’re bleeding you move your recharge dice to the Medigel area.
Reference for powers are meant to be already calculated. For example, if you deal 3D6+ Weapon Damage with a power, don’t write “Weapon Damage”, just put the numbers (so 5D6+4 for example). This does mean you’ll have to update your powers, but that’s only when you level up or obtain a more powerful weapon.
Vertical Power Sheet
As requested i made a vertical power sheet, both letter and legal size.
Playmat
Also meant to be printed in legal sized paper and used side-ways. It’s just to note the HP, ammo clips, medigel and grenades in battle, works wonders if you plastify it and use a whiteboard pen.
Quick reference cards
Meant to be printed like the others. It’s meant to be filled by the GM when creating characters to be NPCs or enemies and keep the most important statistics at hand. There is a large version for specially complex enemies, like Banshees or other bosses.
Combat Resume sheet
Meant to be given one copy to each player and GM, as it holds a resume of most of the game’s combat rules and stunts.
Game Master Screen
I’m very sorry it’s ugly, i’ll try to improve the spacing, but it’s meant to be printed horizontally and has most rules, including every stunt and effect.
It only has the “inside” of a GM Screen because i don’t have any artwork that would fit the panoramic image needed, would anyone have one or wishes to draw one for the screen, please send it to my email and i’ll be very happy to add it and thank you in any way you want.
Change log
A resume with any changes made to the book will be posted here when a new version shows up.
3/19/2017
Frezing Effect now keeps freezed targets for a fixed amount of turns instead of half willpower, as the effect was too complicated.
Shield Recharge passively during combat ruling deleted, because it incited passive gameplay and further extended the already long time of combat encounters. And was too difficult to keep track.
Power Combo now allows for the same target to be primed by more than one Explosion at the same time, because Power Combos are already difficult to make as is and are a Stunt after all, they’re supposed to be game changing.
Minor typos fixed as requested.
Added a vertical print-friendly power sheet in both letter and legal sizes as requested by a fan
Added an ugly, jet small, printable horizontal, letter-sized GM screen as requested by fan.


Sensor Overview |
||||||||||||||||||||||||||||||||||||
|
This sensor detects Volatile Organic Compounds (VOC's) and Hydrogen Sulphide (Sewer Gas).
It is not specific enough to determine which gas is which, so some deduction will be required.
It is worth the effort to determine the source of high readings in this sensor since anything
it responds to would not be positive for good health long-term.
The most common source of VOC's in a home would be that produced by Mold. Mold produces VOC's during its digestive processes and that would be an indicator of actively growing mold. It should also be noted that basically everything this sensor can detect will be detected by an average nose, but it can be useful to view the concentrations on the graphs so you can see how changes within the house affect levels (for example when opening windows and doors can give an indication of the source of the pollutant). |
||||||||||||||||||||||||||||||||||||
Mold Sources in the home |
||||||||||||||||||||||||||||||||||||
Mold can grow anywhere in the home where there is a source of moisture.
Examples :
|
||||||||||||||||||||||||||||||||||||
Sewer Gas Sources in the home |
||||||||||||||||||||||||||||||||||||
| Sewer Gas can enter a home through a floor drain, from a leaking or blocked plumbing roof vent, or (if the gases are in soil adjacent to the house) through cracks in foundations. | ||||||||||||||||||||||||||||||||||||
Symptoms |
||||||||||||||||||||||||||||||||||||
You can see that there are similar and overlapping symptoms.
|


{% extends "base.html" %} {% load i18n %} {% block content %}
{% trans "Whether there are applications we want to build in Go, or there are libraries we want to patch, none of us writes as much Go code as we'd like to." %}
{% trans "This October, we're encouraging developers of all skill levels to try and work on your pet project(s) in Go just a little each day. Whether you're an experienced Gopher or a Go newbie, it's a great excuse to contribute to the communities you follow, or even dive into the language for the first time!" %}
{% trans "What you do during GOctober is ultimately up to you. Go hog gopher wild." %}
{% trans "We recommend you work on something open, perhaps on GitHub or Bitbucket, so that others can see your progress. Then add a webhook for your repository, and we'll track your progress next to everyone else!" %}
{% trans "Okay, just one rule." %}
{% trans "The project(s) must be open source." %}
{% trans "Fame and fortune! The goal is that you either learn something new or meet someone who is also interested in similar tools. If you share your repository or your commits with us, we will tally up points for each commit or new project you work on." %}
{% trans "Yes! But you will only get 'credit' for commits within the month of October. You should consider forking an existing project if you are not the owner and register that fork." %}
{% trans "We encourage everyone to team up, our goal is to have meetups organically created in cites across the country. There should be participants meeting in a coffee shop or bar near you. We'll have a way to post a meeting and location and you can search for something close by." %}
{% trans "So you think your city has the most committed programmers? Be sure to sign up to have your commits go toward your home town. We will see which cities are the most committed." %}
{% trans "Already work on some fancy web framework? Be sure to fork the project and add a webhook. At the end we will add up all the points and award them to the parent project, then we'll see how well each project ranks against others. A dance-off will decide the winners in the event of a tie." %}
Video for my talk "Go for Statistical Programming" is now available
— John Doe (@chimeracoder) September 5, 2013


Folders
<parent>
File
File
File
File
File
File
File
File
File
File
153_Find_...y.java
162_Find_...t.java
33_Search...y.java
4_Median_...s.java
69_Sqrt(x).java
704_Binar...h.java
744_Find_...t.java
74_Search...x.java
81_Search...I.java
852_Peak_...y.java
154_Find_...I.java
240_Searc...I.java
34_Find_F...y.java
540_Singl...y.java
Folders: 1
Files: 14
Size of all files: 0.009 MG


Choose a city:
Learning how to pain like Picasso
City:
Wrocław
Status:
The group began to meet on April 1 2019
Interests:
Culture, Art
-
+1
Upcoming meetings
We paint the still life
17 July 2019
We paint the still life
17 July 2019
Follow that
Learning how to pain like Picasso
City:
Wrocław
Status:
The group began to meet on April 1 2019
Interests:
Culture, Art
-
+1
Upcoming meetings
We paint the still life
17 July 2019
We paint the still life
17 July 2019
Follow that
Learning how to pain like Picasso
City:
Wrocław
Status:
The group began to meet on April 1 2019
Interests:
Culture, Art
-
+1
Upcoming meetings
We paint the still life
17 July 2019
We paint the still life
17 July 2019
Follow job offer
We are looking for cook in a Chinese restaurant
added: 20/05/2019


04/18/14 - Object-Oriented Programming vs. Functional Programming
Object-Oriented Programming (OOP)
Ruby is an example of an OO language. In OOP, also called imperative programming, we rely on classes which consist mainly of a collection of method definitions. The purpose of a class is to create new objects which are called instances of a class. The instances of a class have their individual state and behaviour. OOP mimics the real world in which the objects' state can be modified by different behaviour. Lets say the state of an instance of a class Person is as follows:
Example:
@mood = 'good'
@weight = weight
An instance has its possible behaviours defined in the instance methods of its class, in our case class Person.
Example:
#instance method
def eat
@weight + 5
unless @weight > 60 # kg
@mood
end
@mood = "bad"
end
As we see, depending on the instance's behaviour (#eat), it can change its state: mood and weight.
Functional programming (FP)
In contrast to OOP, FP relies on functions rather than objects and their state. FP emphasises mathematical functions that produce results that depend only on their inputs. i.e. we can say: In FP, same input means always same output.
FP is implemented in languages like Haskell but also the good old in Excel is based on it. FP uses expressions, i.e. something that has a value. This can be an integer (4), a string ('hello') or a boolean (true). An expression is not stored in a variable like in OOP, but given to a function directly. In FP, a function (f) now works with these expressions (x) that are explicitly given to it but:
In FP, the function (f) does something with the input (x), and that is exactly what we define in the function (f), but the state of the input (x) will never be changed while the function is been executed.
In other words: the state of the expression x in f(x) will never change as expressions are not mutable in FP.


Athirappilly Falls is situated 1000 ft above sea level on the Chalakudy river, at the entrance to the Sholayar ranges of the Western Ghats, Athirappalli is a scenic combination of forests and little streams. Falling from a height of 80 feet, this is one of the largest waterfalls in the state.
POPULAR
kumarakom lake resort
₹25,000
4 days
3 nights
4 star
The rooms, villas and suites at Kumarakom Lake Resort are a perfect blend of Kerala's traditional architectural charm with luxurious, modern comforts. Each is a careful reconstruction of manas, the 16th century traditional homesteads of Kerala with many such manas having been transplanted from their original locations and reassembled painstakingly by hand, plank by plank, tile by tile, to create the luxurious abodes at Kumarakom Lake Resort..
POPULAR
Munnar resorts
₹15,000
3 days
2 nights
>=3 star
Leave the mundane strife of the madding world far behind. Welcome to the invigorating lap of tranquil nature. Be the guest of winds, mist, hills and lake. At Ragamaya Resorts and Spa, at View Point, Kallimali , Rajakkad, near Munnar. As you leave the main road and take the rough winding hill track which runs along a silent village, you'll find weariness melting away.
POPULAR
Athirapally waterfalls
₹25,000
4 days
3 nights
4 star
Athirappilly Falls is situated 1000 ft above sea level on the Chalakudy river, at the entrance to the Sholayar ranges of the Western Ghats, Athirappalli is a scenic combination of forests and little streams. Falling from a height of 80 feet, this is one of the largest waterfalls in the state.
POPULAR
kumarakom lake resort
₹25,000
4 days
3 nights
4 star
The rooms, villas and suites at Kumarakom Lake Resort are a perfect blend of Kerala's traditional architectural charm with luxurious, modern comforts. Each is a careful reconstruction of manas, the 16th century traditional homesteads of Kerala with many such manas having been transplanted from their original locations and reassembled painstakingly by hand, plank by plank, tile by tile, to create the luxurious abodes at Kumarakom Lake Resort..
POPULAR
Munnar resorts
₹15,000
3 days
2 nights
>=3 star
Leave the mundane strife of the madding world far behind. Welcome to the invigorating lap of tranquil nature. Be the guest of winds, mist, hills and lake. At Ragamaya Resorts and Spa, at View Point, Kallimali , Rajakkad, near Munnar. As you leave the main road and take the rough winding hill track which runs along a silent village, you'll find weariness melting away.
About Kerala Holidays
Kerala offers the most graceful beauty of hill stations, backwaters, beaches and waterfalls. The enchanting charm of Kerala tourism destinations attracts lakhs of tourist to Kerala every year. If you plan to visit Kerala you need to book your Kerala tour package well in advance. Kerala is regarded as God’s Own Country for the naturally charm destinations. Kerala have unique tourism destinations in India that offers a relaxing vacation for tourist spending their holidays in God’s Own Country.
Kerala tourism offers variety of travel options like weekend tour, family tour, honeymoon package, adventure trip, pilgrimage visit, Ayurveda treatment and backwater holidays. Tourist from across the world visit Kerala for its natural charm. The tourism department of Kerala is aggressive in promoting tourist destinations in the state.
The major tourist destinations in Kerala are Munnar, Kovalam, Alleppey, Thekkady and Kumarakom. The state has won numerous awards for its tourism initiatives. Munnar have attracted more tourists to Kerala and have overcome Taj Mahal to become the most sought after tourist destination in India.
Kerala holidays have a team of holiday consultant experienced in helping you plan your next Kerala tour. Kerala holidays team of tour consultants have more than two decades experience in planning Kerala tours and travels. The company owns its own fleet of vehicles and tie up with all hotels and resorts in Kerala. Kerala holidays offers variety of travel options to every traveller. The tour options are tailor-made for family, groups, honeymooners and individual travellers. The quality of tour services offered to tourist visiting Kerala flourishes the name of Kerala holidays. Kerala holidays with its huge clientele of satisfied guests bear testimony to the fact that Kerala holidays is rated as the most preferred tour operator in Kerala. If you are looking to plan your Kerala tour don’t hesitate just plan your tour to Kerala through Kerala holidays the leading tour operator in Kerala.


Previous: The Origin Tag
Smudge: The Switch Tag
Switch applies only to CheckBoxes and
RadioButtons. It allows the buttons to control the enabling of
Frames and Boxes with a pre-existing name, given by the Frame or Box id. Switch takes two parameters,
the name of the Frame or Box and true or false. If the second paramter is set true, then the Frame is only
enabled when the RadioButton or CheckBox is checked, with the opposite behaviour for false. The
form of the tag is
< Switch> Name true/false < /Switch>
Next: The Checked Tag
Back to Smudge Contents
Last modified: Fri Jan 25 14:41:54 GMT 2002


Required
Max length is 32, please shorten it.
E-Mail seems invalid.
E-Mail is already taken.
Please use a password of at least 6 characters.
Please use a password shorter than 32 characters.
Passwords do not match.


| Home | Newsletter | My Articles | My Account | Help |
|
Browse Main Topics:
BusinessComputers & Electronics Education & Reference Entertainment & Leisure Family & Home Finance & Investment Health Internet Pets & Animals Science & Technology Society, Politics & Culture Sports & Recreation |
Privacy PolicyHot Hot Neuron LLC respects your privacy and we have drafted this document to try to address any concerns that you may have about the information we collect and how it is used on MagPortal.com. Hot Neuron LLC may revise this Privacy Policy at any time without notice. It is your responsibility to check this policy periodically.Last revised: $Date: 2009/03/14 03:44:03 $
What personally identifiable information is collected?
What are cookies and how are they used on MagPortal.com? MagPortal.com makes use of cookies so that it can provide you with personalized services such as My Articles. We may also use cookies to help us monitor your use of MagPortal.com for the purpose of generating aggregated statistics and targeted advertising and content on our site in order to increase its usefulness to you. Please be aware that our advertisers and service providers may use cookies of their own which we do not control (more information is given below). If you do not wish to have MagPortal.com use cookies to identify you, you can turn off cookies in your browser. Disabling cookies will make some personalization features of MagPortal.com unusable.
How are IP addresses used? The MagPortal.com site records the IP addresses of people using the site. This information may be used for monitoring the use of the site or reporting aggregated statistics. This information may also be used when we feel it is necessary to protect our site, enforce our Terms of Use, or enforce the law.
Advertisers and Third Parties Google, as a third party vendor, uses cookies to serve ads on MagPortal.com. Google's use of the DART cookie enables it to serve ads to you based on your visit to MagPortal.com and other sites on the Internet. You may opt out of the use of the DART cookie by visiting the Google ad and content network privacy policy. Hot Neuron LLC does not provide personally identifying information (e.g. your name, email address, etc.) that we collect from you (for example from feedback which you email to us or your subscription to our mailing lists) to third parties unless it is with your explicit consent (generally for the purpose of providing an additional contracted or co-branded service) or if we believe in good faith that it is necessary for the enforcement of the law or our Terms of Use agreement. We do not rent or sell your personal information. We may provide aggregated statistics about the users of MagPortal.com to third parties.
Security Information Please be aware that whenever data is transmitted or stored there is always some risk of theft or misuse.
|
| Help Home Site Map Privacy Policy Terms of Use About Us Contact Us | |
|
Copyright © 2000-2016 Hot Neuron LLC. All Rights Reserved. MagPortal.com and Hot Neuron are registered service marks of Hot Neuron LLC. |


Please select the type of query you wish to make:
----------
Display Event ID and Cause Code for affected IMSI.
Display other information.
Proceed to manipulate this information. A new line of text has been added.


Samsung Shop
For demo purposes only.
0
Samsung Galaxy Note8
$929.99
Gear S3 Frontier
$299.99
Gear S3 Classic
$299.99
Gear 360 Camera
$299.99
Gear VR 2
$99.99
Gear VR
$39.99
Wireless Charger
$39.99
Gear S2
$299.99
S3 Wireless Charger
$39.99
Bluetooth Headphone
$249.99
X
ADD TO CART
BUY NOW


A 150-year-old idea could hinder Suez Canal invasions
by Ohad Peleg & Tamar Guy-HaimYour collection marking 150 years of Nature (go.nature.com/3481arj) makes no mention of a contribution to your first issue concerning the Suez Canal, which also celebrates its 150th anniversary this month. A letter to the editor suggested that the canal developers could have flooded Egypt’s Lake Timsah, through which the canal passes, with fresh water from the Nile to render the desert fertile (see T. Login Nature 1, 24; 1869).
The Suez Canal is one of the world’s greatest vectors for invasive marine species, conveying them from the Red Sea to the Mediterranean Sea in a process known as Lessepsian migration (named after the canal’s chief developer, Ferdinand de Lesseps). This damage to the Mediterranean’s ecology has affected human health and economy (see B. S. Galil et al. Biol. Invasions 17, 973–976; 2015).
Login’s idea, which preceded the concept of biological invasion, has since been largely forgotten. In our view, it would be worth revisiting and adapting to prevent further introductions as the canal expands, for example by forming freshwater and/or hypersaline barriers. The latter could be recreated using brine from Egypt’s new desalination plants to increase the salinity of the Bitter Lakes that lie farther south along the canal.
Nature 575, 287 (2019)
doi: 10.1038/d41586-019-03476-6


This page hosts the artifact for our POPL 2020 submission, Visualization By Example (draft).
Our artifact contains the following materials:
artifact
directory) in Python3. This is our implementation used in the paper evaluation.falx-new
directory). See Extra: Play with the Tool to learn about this new implementation.Our experiments run in Docker, instructions to install Docker can be found here.
After the docker is install, run the following command to create and enter the Docker container that would be used for artifat evaluation. This command will download the docker image (this step takes around 20 minutes), build the docker container, and finally enter the docker container.
sh ./init_docker.sh
Once in the docker, run the following commands to install dependencies. These commands install python dependencies of our tool as well as setting the tool as a Python library itself.
cd /falx-popl-snapshot/artifact pip3 install -r requirements.txt pip3 install -e .
How to start over? In an event that your docker building process get broken or you want to destroy your docker container and start over, you can delete the docker container using command docker rm falx-artifact
, and then start over from the first step using sh ./init_docker.sh
. This process won't take too long since you only need to re-install python dependencies.
Make sure you re-run scripts to re-install all dependencies again after you rebuild the docker container.
cd /falx-popl-snapshot/artifact pip3 install -r requirements.txt pip3 install -e .
In an extremely rare event that that you want to destroy the docker image and strat over: use command docker rmi falx-artifact-img
and then start again using sh ./init_docker.sh
. However, we do not recommend this since re-dowloading the docker image would take quite a while to finish since it needs to recreate R enviroments.
Our implementation of the visualization synthesizer includes three main modules: (1) the implementation of the visualization language interpreter that interprets a Vega-Lite script into visualization trace (link), (2) an R table transformation language interpreter built on top of R tydiverse library (link), and (3) a bidirectional synthesizer that synthesizes visualization scripts from input data and partial visual trace, which is built on top of the Z3 SMT solver. We also include implementations of the baseline in our artifact to reproduce results in the paper.
In the following, we first present benchmarks we used in our evaluation, then show instructions to reproduce our experiments described in the paper (Section 6), and finally how to use our the tool to solve new visualization tasks.
In our AutoVis benchmarks, each visual sketch comes with an input data. Given the input data and the visual sketch, the goal is to create a visualization of the input data such that all visual traces in the sketch are contained by the output visualization. We have created a separate benchmarks page for navigating our benchmarks. Note that in our evaluation, we use visual traces randomly sampled from the full visual trace as the input (visual sketch) to the synthesizer as discussed in Section 6.2 in the paper. In the benchmark viewer, for each bechmark, we present one visual sketch sampled from the full trace.
The first set of experiments (Section 6.2) involve running our synthesis algorithm with different sizes of visual sketch to evaluate (1) the number of benchmarks can be sovled at different timeout and (2) the impact of visual sketch size on the ranking. In the following, we show instructions to produce the result in Table 1 and Table 2 of our paper.
To run the visualization by example experiment, first make sure you have a directory named output
under the folder falx-popl-snapshot
to store evaluation logs (it should come with the artifact). Then, run the evaluation script as follows:
cd /falx-popl-snapshot/artifact/falx bash full_eval.sh ALGORITHM NUM_SAMPLES TIMEOUT
The evaluation script requires you to provide (1) the synthesis algorithm name, (2) the number of samples in visual sketch, and (3) timeout. It will then run the corresponding algorithm under the given condition for each benchmark in our benchmark collection, and then create a new folder named exp_ALGORITHM_NUM_SAMPLES_DATETIME
under the folder /falx-popl-snapshot/artifact/output
(one output for each file). On average, each run of the evaluation script takes around 3-10 hours (for all 83 benchmarks), depending on choice of the algorithm (baselines take longer time to finish) and the environment.
As mentioned in the begining of this section, we first run a set of experiments for the falx
synthesis algorithm (our new bidirectional synthesis algorithm) with different visual sketch sample sizes (i.e., NUM_SAMPLES=4, 6, 8
) under 600 seconds timeout. To do so, we will run the following set of commands:
cd /falx-popl-snapshot/artifact/falx bash full_eval.sh falx 4 600
cd /falx-popl-snapshot/artifact/falx bash full_eval.sh falx 6 600
cd /falx-popl-snapshot/artifact/falx bash full_eval.sh falx 8 600
When all of the three experiments finish, we are expected to see 3 new folders in the output directory /falx-popl-snapshot/artifact/output
:
exp_falx_4_new
exp_falx_6_new
exp_falx_8_new
Each log file in a log folder corresponds to one benchmark in our dataset, and it stores the following information: the input table, the sample visual sketch, whether the task completes, the synthesized table program / visualization script, and the time spent in finishing the synthesis task. A log file may contain some error messages -- they are often errors encountered during executions of wrong synthesized programs, you can directly scroll to the bottom of the file to check the synthesis status.
After obtaining evaluation logs, we can run the analysis script to obtain the evaluation results reported in the paper (Table 1 and Table 2 in Section 6). Use the following command to run the analysis script:
cd /falx-popl-snapshot/artifact/output python plot_script_1.py exp_falx_4_new python plot_script_1.py exp_falx_6_new python plot_script_1.py exp_falx_8_new
For each execution log, the analysis script will perform the following two analysis tasks:
LOG_DIR # cases solved solved within top 1: X1 # cases solved solved within top 5: X2 # cases solved solved within top 10: X3 # cases solved within time limit: X4 --- # caes solved within 1 second(s): Y1 # caes solved within 10 second(s): Y2 # caes solved within 60 second(s): Y3 # caes solved within 600 second(s): Y4
LOG_DIR is the experiment log folder name and X1 / X2 / X3 / X4 / Y1 / Y2 / Y3 / Y4 should be numbers that are consistent with Table 1 and Table 2 in the paper:
python plot_script_1.py exp_falx_4_new
python plot_script_1.py exp_falx_4_new;python plot_script_1.py exp_falx_6_new; python plot_script_1.py exp_falx_8_new;
) Note that our experiment in the paper was run on a 2.7 GHz Quad-Core Intel Core i7 processor with 16G memory. The exact numbers in the result table may be different from ones reported in the paper due to the running platform difference. However, the number of benchmarks solved within each time limit should be consistent with those reported in the paper. If there are several benchmarks not solvable within 600 seconds timeout, you can increase the time limit a bit to retry on failed benchmarks. (We also observe this difference when running on different platforms, since several slow cases take around 300-500 seconds to finish, which may fail to finish within 600 seconds if the running environment is different.)
We also provide raw logs produced by our experiment run for paper submission in the output
directory (namely, exp_falx_4
, exp_falx_6
, exp_falx_8
). We can run the following analysis script to obtain the tables in the paper:
cd /falx-popl-snapshot/artifact/output python plot_script_1.py exp_falx_4 python plot_script_1.py exp_falx_6 python plot_script_1.py exp_falx_8
This will reproduce the result in Table 1 and Table 2 in the paper.
The second and the third experiments (Section 6.3, Section 6.4) are abalation studies of our synthesis algorithm. Experiment 2 (Section 6.3) compares the the falx synthesis algorithm with and without decomposition. Experiment 3 (Section 6.4) compares the pruning power of the bidirectional synthsis algorithm against the Morpheus algorithm for the table transformation task. The instructions of running these two experiments also follow the general running instructions in the last section.
We will run a set of experiments for the standard falx algorithm that we have already run in Experiment 1, and a variation of the falx algorithm without synthesis decomposition (by setting ALGORITHM to none
). Both experiments use SAMPLE_SIZE=4
and TIMEOUT=600
(seconds). Since we already have the result of runnig falx algorithhm with SAMPLE_SIZE=4
and TIMEOUT=600
, we only need to run one extra experiment using the following command:
cd /falx-popl-snapshot/artifact/falx bash full_eval.sh none 4 600
When the experiment finish, one new folder will appear in the output directory /falx-popl-snapshot/artifact/output
, namely exp_none_4_new
, where new
is the timestamp of the experiment.
What to do if the computer get stuck on one benchmark? Sometimes, the timeout command may not successfully terminate the program after the timeout is hit. In this event, you can terminate the current evaluation run manually and re-run the evaluation script. Note that our script is made in the way such that finished benchmarks (i.e., if the corresponding log file already exists in the output directory) won't be re-run. So, you can feel free to interrupt the script in the running process if one benchmark takes too long (longer than the timeout) and re-run the script. You can even destroy the docker container and start over, it won't waste time on finished benchmarks (but it will spend extra time in building the container and setting up dependencies).
We will run a set of experiments for the standard falx algorithm that we have already run in Experiment 1, and a modified falx synthesizer with the table synthesis algorithm replaced by the morepheus algorithm (by setting ALGORITHM to morpheus
). Both cases use SAMPLE_SIZE=4
and TIMEOUT=600
seconds. Since we already have the result of runnig falx algorithhm with SAMPLE_SIZE=4
and TIMEOUT=600
, we only need to run one extra experiment using the following command:
cd /falx-popl-snapshot/artifact/falx bash full_eval.sh morpheus 4 600
When the experiment finish, one new folder will appear in the output directory /falx-popl-snapshot/artifact/output
, namely exp_morpheus_4_new
, where new
is the timestamp of the experiment.
First check that the three folders exp_falx_4_new
, exp_none_4_new
and exp_morpheus_4_new
are under the output directory /falx-popl-snapshot/artifact/output
. If so, we are ready to use the following analysis scripts to reproduce the charts in Figure 14 in our paper.
cd /falx-popl-snapshot/artifact/output python plot_script_2.py exp_falx_4_new exp_none_4_new
Note that the output of analysis script will be a long one line string (that will be unreadable), to create the visualization, copy the output string to Vega-Lite online editor and view the visualization. The result of this experiment should be consistent with Figure 14(a) in the paper.
Similarly, use the following sript to get the comparison result between falx and the morpheus variant:
cd /falx-popl-snapshot/artifact/output python plot_script_2.py exp_falx_4_new exp_morpheus_4_new
Copy the output string to Vega-Lite online editor and view the visualization. The result of this experiment should be consistent with Figure 14(b) in the paper.
Note that our experiment in the paper was run on a 2.7 GHz Quad-Core Intel Core i7 processor with 16G memory. If running on a different processor, the absolute time spent in solving each benchmark may vary. However, the relative solving time should be consistent with Figure 14, even when running on a different processer.
We also provide raw logs generated during our evaluation in the output
directory. We can run the analysis script to obtain Table 14 in the paper using the following commands:
cd /falx-popl-snapshot/artifact/output python plot_script_2.py exp_falx_4 exp_none_4_all
cd /falx-popl-snapshot/artifact/output python plot_script_2.py exp_falx_4 exp_morpheus_4
Copy output (one at a time) to Vega-Lite online editor to reproduce the two charts in Figure 14.
Last, we will play with the tool to experiment with solving new benchmarks outside of our evaluation dataset. In this section, we will use our newest version of the synthesis tool (falx-artifact/falx-new) to solve visualization by example tasks. Unlike the previous tool we used in reproducing evaluation result, this tool won't try to sample visual sketch from the full visual trace, but instead ask the user to directly provide both input table and the visual trace to the interface. Also, this new implementation is more up-to-date than the popl snapshot version, with some improvement in the synthesis algorithm implementation.
To use the tool, create a json file containing the input table and the visual sketch similar to the following example:
{ "input_data": [ { "Bucket": "Bucket E", "Budgeted": 100, "Actual": 115 }, { "Bucket": "Bucket D", "Budgeted": 100, "Actual": 90 }, { "Bucket": "Bucket C", "Budgeted": 125, "Actual": 115 }, { "Bucket": "Bucket B", "Budgeted": 125, "Actual": 140 }, { "Bucket": "Bucket A", "Budgeted": 140, "Actual": 150 } ], "raw_trace": [ {"type": "bar", "props": { "x": "Actual", "y": 115, "color": "Actual", "column": "Bucket E"}}, {"type": "bar", "props": { "x": "Actual", "y": 90,"color": "Actual", "column": "Bucket D"}}, {"type": "bar", "props": { "x": "Budgeted","y": 100, "color": "Budgeted", "column": "Bucket D"}} ] }
In this example, the input table is a json-dict representation of an input table, where each tuple in the list represent a row in the table. Each key-value map indicates the value for the corresponding column (e.g., "Bucket": "Bucket E"
indicates that the value of column Bucket
in the first row is Bucket E
). The visual sketch is a list of trace elements specifying what elements will appear on the canvas. You can refer to benchmarks page to check supported grammar for the visual trace (note that some properties may not be available for some element types).
Besides the example above, we have created multiple basic visualization examples in the examples folder.
In order to run the example, we will first need to setup the tool using the follow command:
cd /falx-popl-snapshot/falx-new pip3 install -e .
This command will install the current tool to the system path. Note that if you would like to switch back to the popl snapshot version for reproducing paper experiments, you will need to run the following commands to set up the popl implementation again: cd /falx-popl-snapshot/artifact;pip3 install -e .;
.
Once this is correctly set up, use the following command to run the synthesizer:
cd /falx-popl-snapshot/falx-new/falx python run.py --input_file=INPUT_FILE --output_file=OUTPUT_FILE
The INPUT_FILE
should be the input json file containing input table and visual sketch (e.g., the file /falx-popl-snapshot/falx-new/examples/example-1.json
), and the OUTPUT_FILE
is the output visualization script.
To visualize the synthesized visualization, copy the content in the output visualization script and paste it into Vega-Lite online editor. It should render the visualization for you.
Example Below we show the example command to run example-1.json
:
cd /falx-popl-snapshot/falx-new pip3 install -e . cd /falx-popl-snapshot/falx-new/falx python run.py --input_file=/falx-popl-snapshot/falx-new/examples/example-1.json \ --output_file=/falx-popl-snapshot/falx-new/examples/example-1-output.json
You can then copy the content in /falx-popl-snapshot/falx-new/examples/example-1-output.json
to Vega-Lite online editor to view the synthesized visualization.
Go ahead and try other examples in the examples directory as well.
We would like to receive suggestions from you about further improving the artifact. Feel free to drop us a line.


Users
First Name
Last Name
Group
Last Login
I can not be edited!
Jones
Administrators
01/01/2015 09:00:00
Edit
Delete
Foo
Bar
Users
01/01/2015 09:00:00
Edit
Delete
Fred
Bob
User
01/01/2015 09:00:00
Edit
Delete


A command is a single action performed by the robot. Commands usually require at least one subsystem which they act with. After being started, a command runs for a period of time until either it is finished performing its task or it is interrupted. Interruptions can occur either when a command is canceled or when another command that requires the same command is run.
A TimedCommand runs until it times out
Commands can require a subsystem using the requires() method of commands. When a command requires a subsystem, it claims exclusive control over that subsystem and will interrupt any other command that requires the same subsystem. This only works if all your commands properly require the subsystems that they use.


Lithostratigraphic column for the lava pile on the left with closure temperatures determined for all the samples in this study (red dots) and previously 16 (blue open circles). Thermal evolution over time for each layer of the Theo’s Flow lava pile. The peridotite and pyroxenite emplacements are approximately coeval and they are followed by the gabbro – pyroxenite emplacement 10 years later.


Talks
The presentation will describe the basic principles of machine learning:
features, cross-validation and powerful, but simple algorithm - Random
Forest.
The participants will learn basic pipeline for solving a simple pattern
recognition problem, tools and libraries which are nowadays used by data
scientists worldwide and they will also learn how to deploy their
trained prediction module as a Flask web-service.
About the author:
Aleksei Tiulpin is working as a research scientist at the University of
Oulu. His research is focused mostly on with Image Analysis and Machine
Learning. In addition to that he has experience in software development
for research purposes.
Recent advances in Machine Learning, specifically in Deep Learning have
led to a popularization of this discipline beyond research and even into
mainstream media. Approaches using Deep Learning and the so-called area of
Representation Learning are now being applied to various areas of science
and engineering and an active open source developer community has evolved
around them pushing the limits of these algorithms and making them widely
available and applicable for everyone.
In this talk we will look at some of the latest developments using these
techniques in the context of Natural Language Processing, in particular
looking at the problem of text classification. A special emphasis will be
placed on open source tools and libraries in Python that allow cutting
edge research while allowing for fast, iterative and explorative research.
About the author: Clemens Westrup
recently wrote his Master's Thesis on Machine Learning for Natural
Language Processing in Aalto University's Machine Learning and
Data Mining programme. Originally just visiting Finland for an
exchange year from Germany he fell in love with the place and the
people when finding fellow musicians and falling in love with the
amazing Aalto Design Factory where he studied and later taught
Product Development and Design Thinking. He now works as a Data
Scientist at Sanoma in Helsinki.
The Internet is full of data but it's not always easily obtainable in
a format that is analyzable or presented in an optimal way. Data scraping
- pulling data from websites - gives you access to a whole new world of
working with data.
In my talk I'll go through the basics of data scraping in Python using a
popular BeautifulSoup library.
About the author:Juha-Matti Santala is a full-stack
web developer, community manager and education enthusiast who has worked
as a developer in startups both in Silicon Valley and in Helsinki. Now he
works as a community manager in Boost Turku helping young entrepreneurs
with their ventures.
When web applications are created with development frameworks, UI
element id tags are also generated. Id tags are widely considered the
best way to refer to element but these new tags do not show purpose of
the element. Because tags are generated, they can change without
warning. That can ruin test automation business case due to laborious
maintenance.
I will show how to write understandable and maintainable test
automation scripts by finding elements based on their labels or
captions. I will also tell how web applications UI should be designed
to support this method.
About the author:Pekka Kiviniemi is a test automation
quality consultant at Qentinel. In his recent projects he has developed
test automation for web applications using Selenium and Robot Framework.
Python may be one of the simplest and most flexible programming languages
out there, but it is still a programming language. It still has syntax,
datatypes, and some occasional dark corners. Python ""warts"" are things
for which people have criticised Python, typically aspects of the language
or mechanisms of its implementation, because such aspects either
expose certain surprising inconsistencies, are regarded as omissions,
or cause irritation for parts of the community in some sense.
This talk will be about common pitfalls (termed warts/landmines) that
people face using Python programming language.
About the author:Manoj Pandey is a rising CS junior, who
speaks Python primarily and worked with SquadRun's Engineering Team this
summer. Before this he was a Data Analytics Intern at Inspiration Edge and
Zouk Fellow at ZoukLoans.
He is an avid FOSS enthusiast and Pythonista, almost all of his projects
are open-sourced on Github (manojpandey).
Every day, millions of people use social media like Twitter or
Facebook, to catch up on news and engage in discussions with other users.
Our research group at Aalto University analyzes such discussions and
studies how people interact on social media. Towards this end,
visualization can be a very useful tool.
In this talk, we use networkx, a python library, to process and visualize
user interactions on Twitter. We introduce networkx with simple examples
and continue with the visualization of twitter data. During the talk,
we’ll see that discussions about polarized topics (e.g., elections) look
quite different than non-polarised ones."
About the authors:
Kiran Garimella is a PhD student at the Department of Computer Science, Aalto University. For his PhD, Kiran studies controversy and polarization on social media. Earlier in his career, he worked as Research Engineer at Yahoo! Research and the Qatar Computing Research Institute, and Machine Learning / Data Science intern at LinkedIn and Amazon.
Michael Mathioudakis is a postdoctoral researcher at the Department of Computer Science, Aalto University. His research focuses on social media, social networks, and urban computing. Earlier, Michael did a PhD at the University of Toronto, and worked as Research Intern at Microsoft and Yahoo! Research. He is also currently working as a Data Scientist at Sometrik.
ZODB is a mature and well maintained object-oriented database for
transparently and persistently storing Python object trees (objects and
their references). In other words, ZODB stores Python objects as they are
– no object-relational mapping required. In addition to Python objects,
ZODB can also store binary blobs (like images) attached to those objects.
I give a small tutorial on getting started with ZODB with a simple
command-line app written in Python 3. I cover the basic ZODB usage,
testing and maintenance. Finally, I give a short overview of the ZODB
ecosystem and demo of SubstanceD – a ZODB embracing web app framework.
About the author:Asko Soukka is a system designer
at University of Jyväskylä and a core contributor for Plone - an open
source CMS written in Python. He has have over 10 years of experience in
using ZODB in CMS context with databases up to 100 GB.
Writing unit tests for algorithms and data processing pipelines poses
challenges distinct from those in the web or desktop application
domain. A key reason for poor unit test coverage is that writing tests
is hard and laborious.
In this talk, I'll show some real-life unit test scenarios from Eniram
along with tools we have developed to ease writing good tests. Many of
the presented techniques also apply in other domains besides data
processing.
Topics will include some or all of:
- short overview of NumPy and Pandas testing tools
- Eniram's testing tools for
- asserting vector data
- enhanced parametrized tests
- two-dimensional parametrized tests
- asserting mixed values and exceptions
- readable diffs for text block assertions
- discovery of configurations and input data for running
data processing tests
About the author:Antti Kaihola is a Python
developer working in the Infrastructure team at Eniram. He's been with
Python for 17 years, first for web development and scripting before
moving into data processing.
Building a platform for data processing using great Open Source
components keeps Antti and his colleagues busy at work. At home, he
occasionally spices family life with a microcontroller here and some
MicroPython there, or encourages his kids to experiment with
programming and robotics.
How EFF's Let's Encrypt client Certbot is addressing the issues with skill
and effort needed in effective, secure TLS adoption and the sysadmin
overhead of keeping the certificates and configuration up to date.
In this talk I'll be going over the philosophy behind Certbot client, it's
role in the progression of web technologies in paraller with Let's Encrypt
project (and possibly upcoming ACME protocol support by other CAs).
It's centered around Certbot internals, while touching subjects like
configuration management using Python (Apache / Nginx), ACME protocol
integration, release management from security perspective - leveraging
PyPI, pip version pinning, and hash checking mode.
The talk is going to have multiple demos, showing various aspects and uses
for Certbot client.
About the author: Joona Hoikkala is a Certbot
development team member who has been involved with the project from the
early stages.
Functional programming is a quite popular paradigm nowadays, but it
suffers from a lot of myths and misunderstandings around it. And one of
them is that functional programming can be applied only in few special
languages, which is wrong. This paradigm is just a language agnostic way
of thinking about your code. We will discuss pros and cons of applying it
in case of Python:
- Why do anyone need this at all?
- Since Python is a multi-paradigm language, what it already can
provide
- for FP?
- Third-party libraries for FP in Python
About the author:Dmitry Dolgov is a Passionate Python
developer at Mindojo, PhD student, with interest in Haskell and experience
in PostgreSQL development.
There is much more to serialization than just JSON and Pickle!
During the course of this talk, beginners will learn what serialization is
about and how to use it. More advanced users will learn new serialization
techniques including how to work with complex object graphs.
I will go over several serializers including JSON, msgpack, CBOR and Pickle
and tell about their strengths and weaknesses.
About the author:Alex Grönholm 36 is a software
engineer who works as an independent contractor. He started using Python
in 2008 and is the author of the Asphalt framework, APScheduler,
sqlacodegen and many other public projects.


rotten > Library > Biographies > Entertainers > Actors > Brett Butler
Brett Butler
Timeline
| 30 Jan 1958 |
Brett Butler born, Montgomery AL. |
| 1981 |
Arrested for drunk driving, Marietta GA. "I hit two trees and a mailbox...  I was put in jail overnight. I could have killed somebody." Fined $250. |
| Oct 1996 |
Admits a dependency to painkillers. |
| Aug 1997 |
Enters rehab to treat an addiction to painkillers. |
| 1998 |
Enters rehab, again. |
Pornopolis |
Rotten |
Faces of Death |
Famous Nudes
|


Toggle navigation
MatchWear
Search
Shop Men
Shop Women
Look Book
About
Contact
Questionnaire
Women's Preppy SET 1
$149.99
Buy Now
Buy individual items!