Table of Contents
- Lab Introduction
- Setup
- Section 1: Instant SaaS
- section 2: PDB Exploration
- Section 3: Upgrade from v1 to v2
- Section 4: Containers Queries
- Section 5: Application Root Clones and Compatibility
- Section 6: Expansion Beyond Single CDB and Application Root Replicas
- Section 7: Durable Location Transparency
- Section 8: Data Sharing
- Section 9: Application Patches
- Section 10: DBA Views
- Section 11: Diagnosing, Correcting Problems, and Restarting Sync
- Section 12: Container Map
Lab Introduction
This is a series of 12 hands-on labs designed to familiarize you with the Application Container functionality of Oracle Multitenant. In these labs, we follow the journey of a notional company, Walt’s Malts, as their business expands from a single store to a global powerhouse – “from startup to starship”.
Setup
Lab Assumptions
- Each participant has been provided a username and password to the tenancy c4u03.
- Each participant has completed the Environment Setup lab.
- Each participant has created an OCI compute instance using the database template.
There are two container databases running:
- CDB1 running on port 1523
- CDB2 running on port 1524
Lab Setup
All the scripts for this lab are located in the /home/oracle/labs/multitenant/scripts folder.
-
To access the scripts, secure shell into the OCI compute instance.
-
Change to the ssh directory and ssh into your instance. The public IP address can be found by going to Compute -> Instance.
cd .ssh ssh -i optionskey opc@<your public ip address> oci os object bulk-download -bn Multitenant --download-dir /home/opc sudo mv champion.zip /home/oracle sudo chown oracle:oinstall /home/oracle/champion.zip sudo su - oracle unzip champion.zip cd /home/oracle/labs/multitenant
-
Reset the container databases back to their original ports if they were changed in a previous lab. If any errors about dropping databases appear they can be ignored.
./resetCDB.sh
Section 1: Instant SaaS
This section shows how Multitenant with Application Containers provides an instant SaaS architecture for an application formerly architected for standalone deployment.
The tasks you will accomplish in this lab are:
- Setup Application Root - wmStore_Master
- Install v1 of Application wmStore in Application Root
- Create and sync Application Seed and provision Application PDBs for four franchises: Tulsa, California, Tahoe, NYC
- Populate Application Tenant PDBs with demo data.
- Connect to CDB1.
sqlplus /nolog connect sys/oracle@localhost:1523/cdb1 as sysdba
- Create and open the master application root
conn system/oracle@localhost:1523/cdb1; create pluggable database wmStore_Master as application container admin user wm_admin identified by oracle; alter pluggable database wmStore_Master open;
- Define the application master
conn system/oracle@localhost:1523/wmStore_Master; alter pluggable database application wmStore begin install '1.0'; create tablespace wmStore_TBS datafile size 100M autoextend on next 10M maxsize 200M; create user wmStore_Admin identified by oracle container=all; grant create session, dba to wmStore_Admin; alter user wmStore_Admin default tablespace wmStore_TBS; connect wmStore_Admin/oracle@localhost:1523/wmStore_Master; create table wm_Campaigns -- sharing = data (Row_GUID raw(16) default Sys_GUID() primary key ,Name varchar2(30) not null unique ) ; create table wm_Products -- sharing = extended data (Row_GUID raw(16) default Sys_GUID() primary key ,Name varchar2(30) not null unique ) ; create table wm_Orders -- sharing = metadata (Row_GUID raw(16) default Sys_GUID() primary key ,Order_Number number(16,0) generated always as identity not null unique ,Order_Date date default current_date not null ,Campaign_ID raw(16) ) ; alter table wm_Orders add constraint wm_Orders_F1 foreign key (Campaign_ID) references wm_Campaigns(Row_GUID) disable ; create table wm_Order_Items -- sharing = metadata (Row_GUID raw(16) default Sys_GUID() primary key ,Order_ID raw(16) not null ,Item_Num number(16,0) not null ,Product_ID raw(16) not null ,Order_Qty number(16,0) not null ) ; alter table wm_Order_Items add constraint wm_Order_Items_F1 foreign key (Order_ID) references wm_Orders(Row_GUID) disable ; alter table wm_Order_Items add constraint wm_Order_Items_F2 foreign key (Product_ID) references wm_Products(Row_GUID) disable ; create or replace view wm_Order_Details -- sharing = metadata (Order_Number ,Campaign_Name ,Item_Num ,Product_Name ,Order_Qty ) as select o.Order_Number , c.Name , i.Item_Num , p.Name , i.Order_Qty from wm_Orders o join wm_Order_Items i on i.Order_ID = o.Row_GUID join wm_Products p on i.Product_ID = p.Row_GUID left outer join wm_Campaigns c on o.Campaign_ID = c.Row_GUID ; insert into wm_Campaigns (Row_GUID, Name) values ('01', 'Locals vs Yokels'); insert into wm_Campaigns (Row_GUID, Name) values ('02', 'Black Friday 2016'); insert into wm_Campaigns (Row_GUID, Name) values ('03', 'Christmas 2016'); insert into wm_Products (Row_GUID, Name) values ('01', 'Tornado Twisted'); insert into wm_Products (Row_GUID, Name) values ('02', 'Muskogee Magic'); insert into wm_Products (Row_GUID, Name) values ('03', 'Root 66 Beer Float'); insert into wm_Products (Row_GUID, Name) values ('04', 'Yokie Dokie Okie Eggnog'); commit; alter pluggable database application wmStore end install '1.0';
- Create the application seed
conn system/oracle@localhost:1523/wmStore_Master; create pluggable database as seed admin user wm_admin identified by oracle;
- Open the application seed
connect sys/oracle@localhost:1523/wmStore_Master as SysDBA alter pluggable database wmStore_Master$Seed open;
- Sync the seed with the application wmStore
conn system/oracle@localhost:1523/wmStore_Master$Seed; alter pluggable database application wmStore sync;
- Provision the application databases for the 4 stores
conn system/oracle@localhost:1523/wmStore_Master; create pluggable database Tulsa admin user wm_admin identified by oracle; create pluggable database California admin user wm_admin identified by oracle; create pluggable database Tahoe admin user wm_admin identified by oracle; create pluggable database NYC admin user wm_admin identified by oracle; alter pluggable database all open;
- Create franchise specific data
conn system/oracle@localhost:1523/wmStore_Master; @Franchise_Data_Lab1
Section 2: PDB Exploration
This section will take a brief tour of the newly created SaaS estate.
The tasks you will accomplish in this lab are:
- Look at the PDBs that have been created so far
- Experiment with different classes of User
- Perform queries against different franchises
- Connect to CDB1.
connect system/oracle@localhost:1523/cdb1
- Show PDBs created so far
set linesize 180 column c0 noprint new_value CDB_Name column c1 heading "Con ID" format 99 column c2 heading "PDB Name" format a30 column c3 heading "Con UID" format<PHONE_NUMBER>9 column c4 heading "Restricted?" format a11 column c5 heading "Open Mode" format a10 column c6 heading "Root?" format a5 column c7 heading "App PDB?" format a8 column c8 heading "Seed?" format a5 column c9 heading "Root Clone?" format a11 column c10 heading "Proxy?" format a6 column c11 heading "App Container Name" format a30 set termout off select Sys_Context('Userenv', 'CDB_Name') c0 from dual ; ttitle "PDBs in CDB &CDB_Name" set termout on select P.Con_ID c1 , P.Name c2 , P.CON_UID c3 , P.Restricted c4 , P.Open_Mode c5 , P.Application_Root c6 , P.Application_PDB c7 , P.Application_Seed c8 , P.Application_Root_Clone c9 , P.Proxy_PDB c10 , AC.Name c11 from v$PDBs P left outer join v$PDBs AC on AC.Con_ID = P.Application_Root_Con_ID order by P.Name , nvl(AC.Name,P.Name) , P.Application_Root desc , P.Application_Seed desc , P.Name ;
- You should be able to set your container to Tulsa because
weStore_Admin is an Application Common user but it should fail if you
try to set it to CDB$Root since that container is outside of the
application container.
show user alter session set container=wmStore_Master; connect wmStore_Admin/oracle@localhost:1523/wmStore_Master; alter session set container = Tulsa; alter session set container = CDB$Root;
- You can connect directly as the various local users. Keep in mind
these are local users, it just happens to be that they have the same
password. Notice that the local user for Califorina cannot use the Tulsa
container because it is local to the Califorina container.
connect wm_admin/oracle@localhost:1523/Tulsa; alter session set container = Tulsa; connect wm_admin/oracle@localhost:1523/California; alter session set container = Tulsa;
- When prompted give one of the PDBs that was created (Tulsa,
California, NYC, or Tahoe). You can rerun this script giving a different
store if you want to view the data.
@Lab2_Queries.sql
Section 3: Upgrade from v1 to v2
This section we upgrade Application wmStore from v1 to v2. Despite each franchise having a separate tenant PDB, there is only one master application definition to be upgraded – in Application Root. We run the upgrade script only once, against the Application Root. It is then simply a matter of synchronizing the tenant PDBs for each franchise for them to be upgraded to the new version. Note that this model allows for granular (per tenant/franchise) upgrade schedules.
The tasks you will accomplish in this lab are:
- Upgrade application wmStore to v2
- Synchronize three of four Application Tenant PDBs
-
Create the upgrade of the pluggable databases.
conn system/oracle@localhost:1523/wmStore_Master; alter pluggable database application wmStore begin upgrade '1.0' to '2.0'; connect wmStore_Admin/oracle@localhost:1523/wmStore_Master alter table wm_Products add (Local_Product_YN char(1) default 'Y' not null ) ; alter table wm_Products add constraint Local_Product_Bool check (Local_Product_YN in ('Y','N')) ; create or replace view wm_Order_Details -- sharing = metadata (Order_Number ,Campaign_Name ,Item_Num ,Product_Name ,Local_Product_YN ,Order_Qty ) as select o.Order_Number , c.Name , i.Item_Num , p.Name , p.Local_Product_YN , i.Order_Qty from wm_Orders o join wm_Order_Items i on i.Order_ID = o.Row_GUID join wm_Products p on i.Product_ID = p.Row_GUID left outer join wm_Campaigns c on o.Campaign_ID = c.Row_GUID ; update wm_Products set Local_Product_YN = 'N' where Name in ('Tornado Twisted' ,'Muskogee Magic' ,'Root 66 Beer Float' ,'Yokie Dokie Okie Eggnog' ) ; commit; alter pluggable database application wmStore end upgrade;
-
Apply the upgrade to Tulsa
connect system/oracle@localhost:1523/Tulsa alter pluggable database application wmStore sync;
-
Apply the upgrade to California
connect system/oracle@localhost:1523/California alter pluggable database application wmStore sync;
-
Apply the upgrade to Tahoe
connect system/oracle@localhost:1523/Tahoe alter pluggable database application wmStore sync;
-
Take a look at a pluggable the upgrade was applied to.
column Row_GUID noprint column Name format a30 heading "Product Name" column Local_Product_YN format a14 heading "Local Product?" define Franchise = "Tulsa" ttitle "Products in Franchise &Franchise" set echo on connect wmStore_Admin/oracle@localhost:1523/Tulsa desc wm_Products select * from wm_Products ; set echo off
-
Look at a pluggable that the upgrade was not applied to and look at the table definitions and data compared to one that was upgraded.
define Franchise = "NYC" ttitle "Products in Franchise &Franchise" set echo on connect wmStore_Admin/oracle@localhost:1523/NYC desc wm_Products select * from wm_Products ; set echo off
Section 4: Containers Queries
This section we introduce a very powerful cross-container aggregation capability – containers() queries. Containers() queries allow an application administrator to connect to Application Root and aggregate data with a single query across multiple Application Tenants (Franchises) – or across all of them. This is another example of how Multitenant, with Application Containers, allows you to manage many Application Tenants as one, when needed. Notice values in column Franchise come from Con$Name. Remember that containers() queries are executed in Root and all containers plugged into it.
The tasks you will accomplish in this lab are:
- Run Queries across containers
- Connect to
CDB1
.connect wmStore_Admin/oracle@localhost:1523/wmStore_Master
- Products in Tulsa and NYC
column c1 format a30 heading "Franchise" column c2 format 9999999 heading "Order #" column c3 format a30 heading "Campaign" column c4 format 999999 heading "Item #" column c5 format a30 heading "Product" column c6 format 9,999 heading "Qty" column c7 format 9,999,999 heading "Num Orders" break on c1 on c3 on c5 column c4 noprint ttitle "Products (in Tulsa and NYC)" set echo on select con$name c1 , Name c5 from containers(wm_Products) where con$name in ('TULSA','NYC') order by 1 , 2 ; set echo off
- Order Counts Per Campaign
ttitle "Order Counts Per Campaign (Across All Franchises)" set echo on select con$name c1 , Campaign_Name c3 , count(*) c7 from containers(wm_Order_Details) group by con$name , Campaign_Name order by 1 , 3 desc , 2 ; set echo off
- Order Volume Per Product
ttitle "Order Volume Per Product (Across All Franchises)" set echo on select con$name c1 , Product_Name c5 , count(*) c7 from containers(wm_Order_Details) group by con$name , Product_Name order by 1 , 3 desc , 2 ; set echo off
Section 5: Application Root Clones and Compatibility
This section will explore the PDBs, users and data within the various pluggable databses created in the earlier section.
The tasks you will accomplish in this lab are:
- Create a pluggable database
OE
in the container databaseCDB1
- Create a load against the pluggable database
OE
- Create a hot clone
OE_DEV
in the container databaseCDB2
from the pluggable databaseOE
- Connect to
CDB1
.sqlplus /nolog connect system/oracle@localhost:1523/cdb1
- Review the pluggable databases in the container database
set linesize 180 column c0 noprint new_value CDB_Name column c1 heading "Con ID" format 99 column c2 heading "PDB Name" format a30 column c3 heading "Con UID" format<PHONE_NUMBER>9 column c4 heading "Restricted?" format a11 column c5 heading "Open Mode" format a10 column c6 heading "Root?" format a5 column c7 heading "App PDB?" format a8 column c8 heading "Seed?" format a5 column c9 heading "Root Clone?" format a11 column c10 heading "Proxy?" format a6 column c11 heading "App Container Name" format a30 set termout off select Sys_Context('Userenv', 'CDB_Name') c0 from dual ; ttitle "PDBs in CDB &CDB_Name" set termout on select P.Con_ID c1 , P.Name c2 , P.CON_UID c3 , P.Restricted c4 , P.Open_Mode c5 , P.Application_Root c6 , P.Application_PDB c7 , P.Application_Seed c8 , P.Application_Root_Clone c9 , P.Proxy_PDB c10 , AC.Name c11 from v$PDBs P left outer join v$PDBs AC on AC.Con_ID = P.Application_Root_Con_ID order by P.Name , nvl(AC.Name,P.Name) , P.Application_Root desc , P.Application_Seed desc , P.Name ;
- Connect to the master database and set the compatibility to 2.0.
Notice you will get an error because one of the databases is not
currently at that version.
conn system/oracle@localhost:1523/wmStore_Master; alter pluggable database application wmStore set compatibility version '2.0';
- Run the query below and notice that there are applications that
are not at the current version. If you look at the output from the first
query you can see that the NYC and wmStore_Master$Seed are still at
1.0.
column CON_UID heading "Con UID" format<PHONE_NUMBER>99 column APP_NAME heading "Application Name" format a20 truncate column APP_ID heading "App ID" format 99999 column APP_VERSION heading "Version" format a7 column APP_STATUS heading "Status" format a12 column APP_ID noprint select * from DBA_App_PDB_Status;
-
Connect to NYC and bring that up to the current version.
conn system/oracle@localhost:1523/NYC; alter pluggable database application wmStore sync;
-
Connect ot wmStore_Master$Seed and bring that up to the current version.
conn system/oracle@localhost:1523/wmStore_Master$Seed alter pluggable database application wmStore sync;
-
Connect back to wmStore_Master and set the compatibility to 2.0. This time it should work.
conn system/oracle@localhost:1523/wmStore_Master alter pluggable database application wmStore set compatibility version '2.0';
-
Look back at the list of PDBs now that the upgrades are complete.
conn system/oracle@localhost:1523/cdb1 set linesize 180 column c0 noprint new_value CDB_Name column c1 heading "Con ID" format 99 column c2 heading "PDB Name" format a30 column c3 heading "Con UID" format<PHONE_NUMBER>9 column c4 heading "Restricted?" format a11 column c5 heading "Open Mode" format a10 column c6 heading "Root?" format a5 column c7 heading "App PDB?" format a8 column c8 heading "Seed?" format a5 column c9 heading "Root Clone?" format a11 column c10 heading "Proxy?" format a6 column c11 heading "App Container Name" format a30 set termout off select Sys_Context('Userenv', 'CDB_Name') c0 from dual ; ttitle "PDBs in CDB &CDB_Name" set termout on select P.Con_ID c1 , P.Name c2 , P.CON_UID c3 , P.Restricted c4 , P.Open_Mode c5 , P.Application_Root c6 , P.Application_PDB c7 , P.Application_Seed c8 , P.Application_Root_Clone c9 , P.Proxy_PDB c10 , AC.Name c11 from v$PDBs P left outer join v$PDBs AC on AC.Con_ID = P.Application_Root_Con_ID order by P.Name , nvl(AC.Name,P.Name) , P.Application_Root desc , P.Application_Seed desc , P.Name ;
Section 6: Expansion Beyond Single CDB and Application Root Replicas
This section we follow the global expansion of Walt’s Malts. In order to comply with requirements of data sovereignty and latency Walt’s Malts has had to expand into a second CDB, CDB2. (In reality this would be in a separate server.) It is very important to note that we still only have a single master application definition, despite the application now being deployed across multiple CDBs.
The tasks you will accomplish in this lab are:
- Create and Open Application Root Replicas (ARRs): wmStore_International, wmStore_West
- Create Proxy PDBs for the ARRs
- Synchronize the ARRs via their proxies
- Create App Seeds for the ARRs
- Provision the App PDBs for five new franchises
- Add franchise-specific products for new franchises
- Connect to CDB2.
sqlplus /nolog connect system/oracle@localhost:1524/cdb2
- Create a datbase link to CDB1 to pull the data across
create public database link CDB1_DBLink connect to system identified by oracle using 'localhost:1523/cdb1';
- Create and open the Application Root Replicas (ARRs)
create pluggable database wmStore_International as application container from wmStore_Master@CDB1_DBLink; create pluggable database wmStore_West as application container from wmStore_Master@CDB1_DBLink; alter pluggable database all open;
-
Create the CDB$Root-level DB Link to CDB2
connect system/oracle@localhost:1523/cdb1 create public database link CDB2_DBLink connect to System identified by oracle using 'localhost:1524/cdb2';
-
Create the Application-Root-level DB Links to CDB2
conn system/oracle@localhost:1523/wmStore_Master create public database link CDB2_DBLink connect to system identified by oracle using 'localhost:1524/cdb2';
-
Create and open Proxy PDBs for the Application Root Replicas
create pluggable database wmStore_International_Proxy as proxy from wmStore_International@CDB2_DBLink; create pluggable database wmStore_West_Proxy as proxy from wmStore_West@CDB2_DBLink; alter pluggable database all open;
-
Synchronize the ARRs via their proxies. Notice you need to connect as sys to do this.
conn sys/oracle@localhost:1523/wmStore_International_Proxy as sysdba alter pluggable database application wmStore sync; conn sys/oracle@localhost:1523/wmStore_West_Proxy as sysdba alter pluggable database application wmStore sync;
-
Create and open the Application Seed PDBs for wmStore_International and sync it with Application wmStore
conn system/oracle@localhost:1524/wmStore_International create pluggable database as seed admin user wm_admin identified by oracle; conn sys/oracle@localhost:1524/wmStore_International as SysDBA alter pluggable database wmStore_International$Seed open; connect system/oracle@localhost:1524/wmStore_International$Seed alter pluggable database application wmStore sync;
-
Create and open the Application Seed PDBs for wmStore_West and sync it with Application wmStore
conn system/oracle@localhost:1524/wmStore_West create pluggable database as seed admin user wm_admin identified by oracle; conn sys/oracle@localhost:1524/wmStore_West as SysDBA alter pluggable database wmStore_West$Seed open; connect system/oracle@localhost:1524/wmStore_West$Seed alter pluggable database application wmStore sync;
-
Connect to the wmStore_International Application Root Replica (ARR) and create a database link from that ARR to the CDB of the Master Root
connect system/oracle@localhost:1524/wmStore_International create public database link CDB1_DBLink connect to system identified by oracle using 'localhost:1523/cdb1';
-
Provision Application PDBs for the UK, Denmark and France franchises
create pluggable database UK admin user wm_admin identified by oracle; create pluggable database Denmark admin user wm_admin identified by oracle; create pluggable database France admin user wm_admin identified by oracle;
-
Connect to the wmStore_West Application Root Replica (ARR) and create a database link from that ARR to the CDB of the Master Root
connect system/oracle@localhost:1524/wmStore_West create public database link CDB1_DBLink connect to system identified by oracle using 'localhost:1523/cdb1';
-
Provision Application PDBs for the Sant Monica and Japan franchises
create pluggable database Santa_Monica admin user wm_admin identified by oracle; create pluggable database Japan admin user wm_admin identified by oracle;
-
Switch to the container root and open all of the pluggable databases
alter session set container=CDB$Root; alter pluggable database all open;
- Create franchise-specific data
@Franchise_Data_Lab6
Section 7: Durable Location Transparency
This section demonstrates “durable location transparency”. In the previous section we saw how Proxy PDBs can provide location transparency. The Proxy PDBs for the Application Root Replicas (ARRs) provided local context (in the master Application Root) for the ARRs, which are physically located in a different CDB. This is a good example of location transparency. In this section, we see how these ARR Proxies can provide “durable location transparency”. That is, location transparency that survives the physical reconfiguration of the Application Estate – specifically by relocating an Application PDB for a particular franchise from one CDB to another.
The tasks you will accomplish in this lab are:
- Run a report against wmStore_Master
- Relocate Tahoe to wmStore_West
- Run the report again
-
Connect and run a report against wmStore_Master
sqlplus /nolog connect wmStore_Admin/oracle@localhost:1523/wmStore_Master set verify off define Campaign = "Locals vs Yokels" column c1 format a30 heading "Franchise" column c2 format a10 heading "CDB" column c3 format 9,999,999 heading "Num Orders" ttitle "Business-Wide Count of Orders for Campaign &Campaign" select con$name c1 , cdb$name c2 , count(*) c3 from containers(wm_Orders) o , wm_Campaigns c where o.Campaign_id = c.row_guid and c.Name = '&Campaign' group by con$name , cdb$name order by 3 desc , 1 ;
-
Relocate Tahoe to wmStore_West
connect system/oracle@localhost:1524/wmStore_West create pluggable database Tahoe from Tahoe@CDB1_DBLink relocate availability max; connect sys/oracle@localhost:1524/cdb2 as SysDBA alter pluggable database Tahoe open;
-
Rerun the report and take note of the changes in data based on the relocation.
connect wmStore_Admin/oracle@localhost:1523/wmStore_Master set verify off define Campaign = "Locals vs Yokels" column c1 format a30 heading "Franchise" column c2 format a10 heading "CDB" column c3 format 9,999,999 heading "Num Orders" ttitle "Business-Wide Count of Orders for Campaign &Campaign" select con$name c1 , cdb$name c2 , count(*) c3 from containers(wm_Orders) o , wm_Campaigns c where o.Campaign_id = c.row_guid and c.Name = '&Campaign' group by con$name , cdb$name order by 3 desc , 1 ;
Section 8: Data Sharing
This section we introduce the advanced concept of data sharing. We have already seen how Multitenant, with Application Containers, can provide an instant SaaS architecture for an application previously architected for standalone deployment. Technically this is done by installing a master application definition in an Application Root. Application PDBs for each tenant / franchise are plugged into this Application Root and the metadata for the database components of the Application definition is served from the Application root. However,so far all data, including data which may be considered part of the application definition (“seed data”) has been local. In other words, there’s a replica of this seed data in every Application PDB. In this lab we’ll see how, in addition to metadata, common data may also be shared from Application Root. To do this we’ll upgrade application wmStore to v3.0 and introduce various powerful data sharing capabilities.
The tasks you will accomplish in this lab are:
- Upgrade Application wmStore to v3.0
- Propagate the Upgrade to all franchises
- Query the wm_Products table in a franchise PDB to see the sources of data
-
Create the v3.0 upgrade in wmStore_Master
connect system/oracle@localhost:1523/wmStore_Master alter pluggable database application wmStore begin upgrade '2.0' to '3.0'; connect wmStore_Admin/oracle@localhost:1523/wmStore_Master create table wm_List_Of_Values -- sharing = metadata -- the default sharing = data -- sharing = extended data (Row_GUID raw(16) default Sys_GUID() primary key ,Type_Code varchar2(30) not null ,Value_Code varchar2(30) not null ) ; alter table wm_List_Of_Values add constraint wm_List_Of_Values_U1 unique (Type_Code, Value_Code) ; insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Type', 'Currency'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Currency', 'USD'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Currency', 'GBP'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Currency', 'DKK'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Currency', 'EUR'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Currency', 'JPY'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Type', 'Country'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Country', 'USA'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Country', 'UK'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Country', 'Denmark'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Country', 'France'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Country', 'Japan'); commit; alter table wm_Orders disable constraint wm_Orders_F1; alter table wm_Order_Items disable constraint wm_Order_Items_F2; delete from wm_Campaigns where Row_GUID in ('01','02','03'); delete from wm_Products where Row_GUID in ('01','02','03','04'); insert into wm_Campaigns (Row_GUID, Name) values ('01', 'Locals vs Yokels'); insert into wm_Campaigns (Row_GUID, Name) values ('02', 'Black Friday 2016'); insert into wm_Campaigns (Row_GUID, Name) values ('03', 'Christmas 2016'); insert into wm_Products (Row_GUID, Name) values ('01', 'Tornado Twisted'); insert into wm_Products (Row_GUID, Name) values ('02', 'Muskogee Magic'); insert into wm_Products (Row_GUID, Name) values ('03', 'Root 66 Beer Float'); insert into wm_Products (Row_GUID, Name) values ('04', 'Yokie Dokie Okie Eggnog'); commit; alter pluggable database application wmStore end upgrade;
-
Sync some of the pluggable databases
connect system/oracle@localhost:1523/WMSTORE_MASTER$SEED alter pluggable database application wmStore sync; connect system/oracle@localhost:1523/CALIFORNIA alter pluggable database application wmStore sync; connect system/oracle@localhost:1523/NYC alter pluggable database application wmStore sync; connect system/oracle@localhost:1523/TULSA alter pluggable database application wmStore sync; connect system/oracle@localhost:1524/WMSTORE_INTERNATIONAL$SEED alter pluggable database application wmStore sync; connect system/oracle@localhost:1524/DENMARK alter pluggable database application wmStore sync; connect system/oracle@localhost:1524/FRANCE alter pluggable database application wmStore sync; connect system/oracle@localhost:1524/UK alter pluggable database application wmStore sync; connect system/oracle@localhost:1524/WMSTORE_WEST$SEED alter pluggable database application wmStore sync; connect system/oracle@localhost:1524/JAPAN alter pluggable database application wmStore sync; connect system/oracle@localhost:1524/SANTA_MONICA alter pluggable database application wmStore sync; connect system/oracle@localhost:1524/TAHOE alter pluggable database application wmStore sync;
-
Queries against container CDB1
connect system/oracle@localhost:1523/cdb1 column c01 format 999999 heading "Con_ID" column c02 format a30 heading "Container" ttitle "Containers" select Con_ID c01 , Name c02 from v$containers order by 1;
-
Queries against container wmStore_Master
connect wmStore_Admin/oracle@localhost:1523/wmStore_Master column c03 format a30 heading "Table Name" column c04 format a20 heading "Sharing Type" ttitle "Sharing Modes for Campaigns, Products and Orders" select Object_Name c03 , Sharing c04 from DBA_Objects where Owner = User and Object_Name in ('WM_CAMPAIGNS','WM_PRODUCTS','WM_ORDERS') order by Object_Name ;
-
Queries against container Tulsa
connect wmStore_Admin/oracle@localhost:1523/Tulsa column c1 format a20 heading "Origin Con_ID" column c2 format a30 heading "Product" ttitle "Products Visible in Franchise Tulsa" select Row_GUID c1 , Name c2 from wm_Products ;
Section 9: Application Patches
This section we define an application patch. Patches are comparable to the application upgrades that we’ve seen in previous labs, but there are three important differences.
- The types of operation that are allowed in a patch are more
limited. Essentially operations which are destructive are not allowed,
including:
- Drop a table, column, index, trigger…
- create or replace view, package, procedure…
- Patches do not involve creation of Application Root Clones.
- Patches are not version-specific. This means that a single patch may be applied to multiple application versions.
The tasks you will accomplish in this lab are:
- Define patch 301 for application wmStore
- Propagate the patch to the Application Root Replicas. Then apply it to three franchises (but not to all)
- Create patch 301
connect wmStore_Admin/oracle@localhost:1523/wmStore_Master alter pluggable database application wmStore begin patch 301; alter table wm_Orders add (Financial_Quarter_Code varchar2(30) default 'Q4,FY2017' not null ) ; create index wm_Orders_M1 on wm_Orders(Order_Date); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Type', 'Financial Quarter'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q1,FY2016'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q2,FY2016'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q3,FY2016'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q4,FY2016'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q1,FY2017'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q2,FY2017'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q3,FY2017'); insert into wm_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q4,FY2017'); commit; update wm_Orders set Financial_Quarter_Code = 'Q1,FY2016' where Order_Date >= '01-JAN-16' and Order_Date < '01-APR-16' ; update wm_Orders set Financial_Quarter_Code = 'Q2,FY2016' where Order_Date >= '01-APR-16' and Order_Date < '01-JUL-16' ; update wm_Orders set Financial_Quarter_Code = 'Q3,FY2016' where Order_Date >= '01-JUL-16' and Order_Date < '01-OCT-16' ; update wm_Orders set Financial_Quarter_Code = 'Q4,FY2016' where Order_Date >= '01-OCT-16' and Order_Date < '01-JAN-17' ; update wm_Orders set Financial_Quarter_Code = 'Q1,FY2017' where Order_Date >= '01-JAN-17' and Order_Date < '01-APR-17' ; update wm_Orders set Financial_Quarter_Code = 'Q2,FY2017' where Order_Date >= '01-APR-17' and Order_Date < '01-JUL-17' ; update wm_Orders set Financial_Quarter_Code = 'Q3,FY2017' where Order_Date >= '01-JUL-17' and Order_Date < '01-OCT-17' ; update wm_Orders set Financial_Quarter_Code = 'Q4,FY2017' where Order_Date >= '01-OCT-17' and Order_Date < '01-JAN-18' ; commit; alter pluggable database application wmStore end patch;
-
Apply the patch to some but not all of the databases
connect system/oracle@localhost:1523/Tulsa alter pluggable database application wmStore sync to patch 301; connect system/oracle@localhost:1523/California alter pluggable database application wmStore sync to patch 301; connect system/oracle@localhost:1523/NYC alter pluggable database application wmStore sync to patch 301;
Section 10: DBA Views
This section we introduce some of the DBA Views which are relevant to Application Containers.
The tasks you will accomplish in this lab are:
- Explore various DBA Views
-
DBA_PDBs
connect system/oracle@localhost:1523/cdb1 ttitle off set linesize 180 column c1 heading "Con ID" format 9999 column c2 heading "PDB Name" format a30 column c3 heading "PDB ID" format a10 column c3 noprint column c4 heading "Con UID" format a12 column c5 heading "Status" format a10 column c6 heading "Root?" format a5 column c7 heading "App PDB?" format a8 column c8 heading "Seed?" format a5 column c9 heading "Root Clone?" format a11 column c10 heading "Proxy?" format a6 column c11 heading "App Container Name" format a30 set echo on desc DBA_PDBs set echo off set echo on select P.Con_ID c1 , P.PDB_Name c2 , P.PDB_ID c3 , P.CON_UID c4 , P.Status c5 , P.Application_Root c6 , P.Application_PDB c7 , P.Application_Seed c8 , P.Application_Clone c9 , P.Is_Proxy_PDB c10 , AC.PDB_Name c11 from DBA_PDBs P left outer join DBA_PDBs AC on AC.Con_ID = P.Application_Root_Con_ID order by 6 desc , 9 , 8 desc , 10 desc , 7 desc , 2 , 8 ; set echo off
-
DBA_APPLICATIONS
connect system/oracle@localhost:1523/wmStore_Master column CON_UID heading "Con UID" format<PHONE_NUMBER> column APP_NAME heading "Application Name" format a20 truncate column APP_ID heading "App ID" format 99999 column APP_VERSION heading "Version" format a7 column APP_VERSION_COMMENT heading "Comment" format a50 column APP_STATUS heading "Status" format a12 column APP_IMPLICIT heading "Implicit" format a8 column APP_CAPTURE_SERVICE heading "Capture Svc" format a30 column APP_CAPTURE_MODULE heading "Capture Mod" format a15 column PATCH_NUMBER heading "Patch #" format 999999 column PATCH_MIN_VERSION heading "Min Vers" format a8 column PATCH_STATUS heading "Status" format a10 column PATCH_COMMENT heading "Comment" format a50 column ORIGIN_CON_ID heading "Origin_Con_ID" format<PHONE_NUMBER>99 column STATEMENT_ID heading "Stmt ID" format 999999 column CAPTURE_TIME heading "Capture TS" format a9 column APP_STATEMENT heading "SQL Statement" format a50 truncate column ERRORNUM heading "Error #" format 999999 column ERRORMSG heading "Error Message" format a50 truncate column SYNC_TIME heading "Sync TS" format a9 set echo on desc DBA_Applications select * from DBA_Applications; set echo off
-
DBA_APP_VERSIONS
set echo on desc DBA_App_Versions select * from DBA_App_Versions; set echo off
-
DBA_APP_PATCHES
set echo on desc DBA_App_Patches select * from DBA_App_Patches; set echo off
-
DBA_APP_PDB_STATUS
set echo on desc DBA_App_PDB_Status select * from DBA_App_PDB_Status; set echo off
-
DBA_APP_STATEMENTS
set echo on desc DBA_App_Statements select * from DBA_App_Statements; set echo off
-
DBA_APP_ERRORS
set echo on connect system/oracle@localhost:1523/NYC desc DBA_App_Errors select * from DBA_App_Errors; set echo off
Section 11: Diagnosing, Correcting Problems, and Restarting Sync
This section we explore the restartability of the patching process.
The tasks you will accomplish in this lab are:
- Deliberately make a manual change to NYC that will conflict with applying patch 301
- Attempt to sync NYC to apply the patch – anticipating a failure
- Query relevant DBA views to identify the problem
- Resolve the problem and re-start the sync, which should now succeed
-
Create an index that will break the sync
connect wmStore_Admin/oracle@localhost:1523/NYC create index wm_Orders_M1 on wm_Orders(Order_Date);
-
Try the sync and have it fail
connect system/oracle@localhost:1523/NYC alter pluggable database application wmStore sync;
-
Check for errors
set linesize 180 column APP_NAME heading "Application Name" format a20 truncate column APP_STATEMENT heading "SQL Statement" format a50 truncate column ERRORNUM heading "Error #" format 999999 column ERRORMSG heading "Error Message" format a50 truncate column SYNC_TIME heading "Sync TS" format a9 select * from DBA_App_Errors;
-
Correct the issue and try the sync again.
connect wmStore_Admin/oracle@localhost:1523/NYC drop index wm_Orders_M1; connect system/oracle@localhost:1523/NYC alter pluggable database application wmStore sync;
Section 12: Container Map
This section we explore another location transparency technology: Container Map. Here we follow the expansion of Walt’s Malts through the acquisition of a formerly independent distributor of Walt’s Malts products. This company is named Terminally Chill, and their niche was selling Walt’s Malts produce through a number of small kiosks in various airports globally. The Terminally Chill application has a different design from the original wmStore application. Whereas wmStore was originally designed for standalone deployment, Terminally Chill used a single database to manage data for all kiosks in all airports. The application server tiers are designed to connect directly to a single database, with query predicates to retrieve data for the right airport and kiosk. In this lab, we’ll see how Container Map can help accommodate applications of this design.
The tasks you will accomplish in this lab are:
- Setup Application PDBs for new Airport franchises
- Install v1 of Application “Terminal”
- Sync Application PDBs
- Create franchise-specific demonstration data
- Perform various queries to see how Container Map can deliver location transparency
-
Create the application root
connect system/oracle@localhost:1523/cdb1 create pluggable database Terminal_Master as application container admin user tc_admin identified by oracle; alter pluggable database Terminal_Master open;
-
Create the Application PDBs
connect system/oracle@localhost:1523/Terminal_Master create pluggable database LHR admin user tc_admin identified by oracle; create pluggable database SFO admin user tc_admin identified by oracle; create pluggable database JFK admin user tc_admin identified by oracle; create pluggable database LAX admin user tc_admin identified by oracle; alter session set container=CDB$Root; alter pluggable database all open;
-
Create the 1.0 Terminal Install
connect system/oracle@localhost:1523/Terminal_Master alter pluggable database application Terminal begin install '1.0'; connect system/oracle@localhost:1523/Terminal_Master create table tc_Kiosk_Map (Kiosk varchar2(30) not null ) partition by list (Kiosk) (partition LHR values ('LHR T1','LHR T4','LHR T5') ,partition SFO values ('SFO INTL','SFO T2') ,partition JFK values ('JFK T1','JFK T2','JFK T3') ,partition LAX values ('LAX INTL','LAX 7/8') ) ; alter database set Container_Map = 'SYSTEM.tc_Kiosk_Map'; create tablespace Terminal_TBS datafile size 100M autoextend on next 10M maxsize 200M; create user Terminal_Admin identified by oracle container=all; grant create session, dba to Terminal_Admin; alter user Terminal_Admin default tablespace Terminal_TBS; connect Terminal_Admin/oracle@localhost:1523/Terminal_Master create table tc_Products sharing = extended data (Row_GUID raw(16) default Sys_GUID() primary key ,Name varchar2(30) not null unique ,Local_Product_YN char(1) default 'Y' not null ) ; alter table tc_Products add constraint Local_Product_Bool check (Local_Product_YN in ('Y','N')) ; create table tc_Coupons sharing = data (Row_GUID raw(16) default Sys_GUID() primary key ,Coupon_Number number(16,0) generated always as identity not null unique ,Campaign_Code varchar2(30) ,Expiration_Date date default current_date+14 ) ; create table tc_Orders sharing = metadata (Row_GUID raw(16) default Sys_GUID() primary key ,Order_Number number(16,0) generated always as identity not null unique ,Order_Date date default current_date not null ,Kiosk_Code varchar2(30) not null ,Coupon_ID raw(16) ,Campaign_Code varchar2(30) null ) ; alter table tc_Orders add constraint tc_Orders_F1 foreign key (Coupon_ID) references tc_Coupons(Row_GUID) disable ; create table tc_Order_Items sharing = metadata (Row_GUID raw(16) default Sys_GUID() primary key ,Order_ID raw(16) not null ,Item_Num number(16,0) not null ,Product_ID raw(16) not null ,Order_Qty number(16,0) not null ) ; alter table tc_Order_Items add constraint tc_Order_Items_F1 foreign key (Order_ID) references tc_Orders(Row_GUID) disable ; alter table tc_Order_Items add constraint tc_Order_Items_F2 foreign key (Product_ID) references tc_Products(Row_GUID) disable ; create table tc_List_Of_Values sharing = data (Row_GUID raw(16) default Sys_GUID() primary key ,Type_Code varchar2(30) not null ,Value_Code varchar2(30) not null ) ; alter table tc_List_Of_Values add constraint tc_List_Of_Values_U1 unique (Type_Code, Value_Code) ; insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Type', 'Airport'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Airport','LHR'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Airport','SFO'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Airport','JFK'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Airport','LAX'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Type', 'Kiosk'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Kiosk','LHR T1'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Kiosk','LHR T4'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Kiosk','LHR T5'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Kiosk','SFO INTL'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Kiosk','SFO T2'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Kiosk','JFK T1'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Kiosk','JFK T2'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Kiosk','JFK T3'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Kiosk','LAX INTL'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Kiosk','LAX 7/8'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Type', 'Campaign'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Campaign','Foreign Getaway'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Campaign','Lost Weekend'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Campaign','Road Warrior'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Campaign','World Citizen'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Type', 'Financial Quarter'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q1,FY2016'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q2,FY2016'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q3,FY2016'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q4,FY2016'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q1,FY2017'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q2,FY2017'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q3,FY2017'); insert into tc_List_Of_Values (Type_Code, Value_Code) values ('Financial Quarter', 'Q4,FY2017'); commit; insert into tc_Products (Row_GUID, Name, Local_Product_YN) values ('01', 'Tornado Twisted', 'N'); insert into tc_Products (Row_GUID, Name, Local_Product_YN) values ('02', 'Muskogee Magic', 'N'); insert into tc_Products (Row_GUID, Name, Local_Product_YN) values ('03', 'Root 66 Beer Float', 'N'); insert into tc_Products (Row_GUID, Name, Local_Product_YN) values ('04', 'Yokie Dokie Okie Eggnog', 'N'); commit; alter table tc_Orders enable containers_default; alter table tc_Orders enable container_map; alter pluggable database application Terminal end install '1.0';
-
Sync the Application databases to install 1.0
connect system/oracle@localhost:1523/LHR alter pluggable database application Terminal sync to '1.0'; connect system/oracle@localhost:1523/SFO alter pluggable database application Terminal sync to '1.0'; connect system/oracle@localhost:1523/JFK alter pluggable database application Terminal sync to '1.0'; connect system/oracle@localhost:1523/LAX alter pluggable database application Terminal sync to '1.0';
-
Load the Terminal Data
@Terminal_Data_Lab12
-
Review the Container Map
connect Terminal_Admin/oracle@localhost:1523/Terminal_Master column c1 format a30 heading "Airport" column c2 format a30 heading "Kiosk" column c3 format 999,999 heading "Num Orders" define Kiosk = "LAX INTL" ttitle "Order Count in Kiosk &Kiosk in Past Year" select count(*) from tc_Orders where Order_Date > current_date-365 and Kiosk_Code = '&Kiosk' ; ttitle "Order Count in Subset of Kiosks in Past Year" select o.Kiosk_Code c2 , count(*) c3 from tc_Orders o where o.Kiosk_Code in ('SFO INTL','LHR T5') and o.Campaign_Code = 'Foreign Getaway' and o.Order_Date > current_date-365 group by o.Kiosk_Code ;


Posted: Mon Feb 12, 2007 4:09 pm
Karl G. wrote:Don't worry it's coming!
awesome . Can i do DEF456 aswell??
Karl G. wrote:Don't worry it's coming!
kuba wrote:sure, i think vitriol wanted to do a section in the forest but im not sure if he's actively working on it or what, maybe you could pm him?
btw, just an idea for the rogue forest, because it's a "hunting ground" it might be cool to differentiate it from the regular forest, for example using the grass models and bigger trees etc. Here's an example..
anyway thats just an idea, do whatever you like


{% extends "base.html" %} {% load staticfiles %} {% block content %}
Project Manager for SEADS project through UCSC Citrus
TA for Compiler Design
TA for Data Visualization
TA for Algorithms and Abstract Data Types
Deans Honor List
Data Visualization: Visualizing socioeconomic factors impacting global energy usage, usage trends, and building a predictive model for future usage.
Machine Learning
Data Visualization
Android Development
Software Development Methodology
Network Security


More...
|
| | Builder (TTab component) |
| |
| virtual TBuilder | TabID (string tabID) |
| |
| virtual TBuilder | ActionItemID (string actionItemID) |
| | Managed container id. It will be shown when tab is activated More...
|
| |
| virtual TBuilder | ActionItem (AbstractComponent actionItem) |
| | Managed container. It will be shown when tab is activated More...
|
| |
| virtual TBuilder | HideMode (HideMode hideMode) |
| | How the action item. Supported values are 'visibility' (css visibility), 'offsets' (negative offset position) and 'display' (css display). More...
|
| |
| virtual TBuilder | Text (string text) |
| |
| virtual TBuilder | ToolTip (string toolTip) |
| | The tooltip for the button - can be a string to be used as innerHTML (html tags are accepted). More...
|
| |
| virtual TBuilder | Closable (bool closable) |
| | Panels themselves do not directly support being closed, but some Panel subclasses do (like Ext.Window) or a Panel Class within an Ext.TabPanel. Specify true to enable closing in such situations. Defaults to false. More...
|
| |
| virtual TBuilder | Hidden (bool hidden) |
| | Render this component hidden (default is false). If true, the hide method will be called internally. More...
|
| |
| virtual TBuilder | Href (string href) |
| | The URL to open when the tab button is clicked. More...
|
| |
| virtual TBuilder | HrefTarget (string hrefTarget) |
| | The target attribute to use for the underlying anchor. Only used if the href property is specified. Defaults to: "_blank" More...
|
| |
| virtual TBuilder | Disabled (bool disabled) |
| | True to disable the tab. More...
|
| |
| virtual TBuilder | Icon (Icon icon) |
| | The icon to use in the Button. See also, IconCls to set an icon with a custom Css class. More...
|
| |
| virtual TBuilder | IconCls (string iconCls) |
| | A css class which sets a background image to be used as the icon for this button.  More...
|
| |
| virtual TBuilder | CustomConfig (Action< ConfigItemCollection > action) |
| | Collection of custom js config More...
|
| |
- Type Constraints
-
| TTab | : | Tab | |
| TBuilder | : | Builder | |
| TBuilder | : | TTab | |
| TBuilder | : | TBuilder | |
◆ Builder() [1/4]
◆ Builder() [2/4]
◆ Builder() [3/4]
◆ Builder() [4/4]
◆ ActionItem()
Managed container. It will be shown when tab is activated
◆ ActionItemID()
Managed container id. It will be shown when tab is activated
◆ Closable()
Panels themselves do not directly support being closed, but some Panel subclasses do (like Ext.Window) or a Panel Class within an Ext.TabPanel. Specify true to enable closing in such situations. Defaults to false.
◆ Disabled()
◆ Hidden()
Render this component hidden (default is false). If true, the hide method will be called internally.
◆ HideMode()
How the action item. Supported values are 'visibility' (css visibility), 'offsets' (negative offset position) and 'display' (css display).
◆ Href()
The URL to open when the tab button is clicked.
◆ HrefTarget()
The target attribute to use for the underlying anchor. Only used if the href property is specified. Defaults to: "_blank"
◆ Icon()
The icon to use in the Button. See also, IconCls to set an icon with a custom Css class.
◆ IconCls()
A css class which sets a background image to be used as the icon for this button.
◆ operator Builder()
◆ Reorderable()
False to disallow reordering for this Tab.
◆ SetTooltip()
◆ TabID()
◆ Text()
◆ ToolTip()
The tooltip for the button - can be a string to be used as innerHTML (html tags are accepted).
◆ UI()
◆ UIName()
The documentation for this class was generated from the following file:


Wrapper class for the v201003 CampaignTarget service. This class is automatically generated.
| [R] | api | Holds the AdWords::API object to which the wrapper belongs. |
| [R] | module | Holds a shortcut to the parent module. Use this to avoid typing the full class name when creating classes belonging to this service, e.g. service_object.module::ClassName instead of AdWords::V201003::CampaignTargetService::ClassName This will make it easier to migrate your code between API versions. |
Constructor for CampaignTargetServiceWrapper.
Args:
- driver: SOAP::RPC::Driver object with the remote SOAP methods for this service
- api: the AdWords::API object to which the wrapper belongs
Source: show
# File lib/adwords4r/v201003/CampaignTargetServiceWrapper.rb, line 34 def initialize(driver, api) @driver = driver @api = api @module = AdWords::V201003::CampaignTargetService end
Calls the get method of the CampaignTarget service. Check the online documentation for this method.
Args:
Returns:
Raises: Error::ApiError (or a subclass thereof) if a SOAP fault occurs.
Source: show
# File lib/adwords4r/v201003/CampaignTargetServiceWrapper.rb, line 52 def get(selector) begin AdWords::Service.validate_param('selector', selector, AdWords::V201003::CampaignTargetService::CampaignTargetSelector) # Construct request object and make API call obj = AdWords::V201003::CampaignTargetService::Get.new(selector) return @driver.get(obj) rescue SOAP::FaultError => fault raise(AdWords::Error::create_specific_api_error(fault), "get Call Failed: " + fault.faultstring.to_s, caller) end end
Calls the mutate method of the CampaignTarget service. Check the online documentation for this method.
Args:
- operations: SOAP::SOAPArray of AdWords::V201003::CampaignTargetService::CampaignTargetOperation
Returns:
Raises: Error::ApiError (or a subclass thereof) if a SOAP fault occurs.
Source: show
# File lib/adwords4r/v201003/CampaignTargetServiceWrapper.rb, line 77 def mutate(operations) begin AdWords::Service.validate_param('operations', operations, SOAP::SOAPArray) # Construct request object and make API call obj = AdWords::V201003::CampaignTargetService::Mutate.new(operations) return @driver.mutate(obj) rescue SOAP::FaultError => fault raise(AdWords::Error::create_specific_api_error(fault), "mutate Call Failed: " + fault.faultstring.to_s, caller) end end


{% extends "pages/base.html" %} {% load static %} {% block title %}HEALTH AI NETWORK - AI in healthcare{% endblock %} {% block header_content %}
{{ company.company_description }}
{{ career.career_location }}


{{ "" | safeHTML }} Call For Speakers We are looking for insightful and practical talks, each lasting around 45 minutes. If you’re passionate about Azure and want to share your expertise with the community then we'd love to hear from you. Submit session
We are looking for insightful and practical talks, each lasting around 45 minutes. If you’re passionate about Azure and want to share your expertise with the community then we'd love to hear from you.
Submit session


--- title: "The Potential Outcomes Framework" type: book weight: 5 output: blogdown:html_page: theme: journal df_print: paged toc: yes toc_float: collapsed: false ---
Let's revisit the example from our slides once again.
Say we are interested in assessing the premise of Allport's hypothesis about interpersonal contact being conducive to reducing intergroup prejudice.
We are studying a set of (\(n=8\)) students assigned to a dorm room with a person from their own ethnic group (contact=0) and from a different group (contact=1).
| Student (i) | Prejudice (C=0) | Prejudice (C=1) |
|---|---|---|
| 1 | 6 | 5 |
| 2 | 4 | 2 |
| 3 | 4 | 4 |
| 4 | 6 | 7 |
| 5 | 3 | 1 |
| 6 | 2 | 2 |
| 7 | 8 | 7 |
| 8 | 4 | 5 |
Today we will work with the prejudice_df
object. The data frame contains the following four variables:
student_id
: numeric student identificationprej_0
: prejudice level under \(Y_{0i}\) (Contact=0)prej_1
: prejudice level under \(Y_{1i}\) (Contact=1)dorm_type
: binary for actual treatment state## # A tibble: 8 x 4
## student_id prej_0 prej_1 dorm_type
## <dbl> <dbl> <dbl> <dbl>
## 1 1 6 5 0
## 2 2 4 2 1
## 3 3 4 4 0
## 4 4 6 7 0
## 5 5 3 1 1
## 6 6 2 2 1
## 7 7 8 7 0
## 8 8 4 5 0
We assume from the potential outcomes framework that each subject has a potential outcome under both treatment states. Let's take the first student in the list as an example.
The figure illustrates the potential outcomes for Student 1.
We see that in a reality where Student 1 is assigned to in-group dorm (contact=0) their levels of prejudice are 6. On the contrary, in a reality where Student 1 is assigned to co-ethnic dorm (contact=1) their levels of prejudice are 5.
From this illustration, we can gather the individual treatment effect (ITE) for student one. The ITE is equal to the values under treatment (contact=1) minus to the values without treatment (contact=0) or \(ITE = y_{1i} - y_{0i}\).
\[ITE = 5 - 6 = -1\]
{{% callout note %}} As it was put in Cunningham's book:
The ITE is a “comparison of two states of the world” (Cunningham, 2021): individuals are exposed to contact, and not exposed to it.
{{% /callout %}}Evidently, each subject can only be observed in one treatment state at any point in time in real life. This is known as the fundamental problem (Holland, 1986) of causal inference. The Individual Treatment Effect (ITE) in reality is unattainable. Still, it provides us with a conceptual foundation for causal estimation.
Exercise: Our data are coming from a world with perfect information. In that sense, we have both potential outcomes prej_0
and prej_1
. Can you think of a way to calculate the ITE for the eight students with one of the dplyr
verbs we learned in the previous section?
Can you think of a way we can use the verb mutate()
#you can employ dplyr::mutate() to create the new variable ite
prejudice_df %>%
dplyr::mutate(ite = prej_1 - prej_0)
| student_id | prej_0 | prej_1 | dorm_type | ite |
|---|---|---|---|---|
| 1 | 6 | 5 | 0 | -1 |
| 2 | 4 | 2 | 1 | -2 |
| 3 | 4 | 4 | 0 | 0 |
| 4 | 6 | 7 | 0 | 1 |
| 5 | 3 | 1 | 1 | -2 |
| 6 | 2 | 2 | 1 | 0 |
| 7 | 8 | 7 | 0 | -1 |
| 8 | 4 | 5 | 0 | 1 |
Normally, we are not interested in the estimates of individual subjects, but rather a population. The Average Treatment Effect (ATE) is the difference in the average potential outcomes of the population.
\[ATE = E(Y_{1i}) - E(Y_{0i})\]
In other words, the ATE is the average ITE of all the subjects in the population. As you can see, the ATE as defined in the formula is also not attainable. Can you think why?
Exercise: Since our data are coming from a world with perfect information. Can you think of a way to calculate the ATE for the eight students based on what we learned last week?
{{% spoiler text="Hint" %}}We have already extracted the ite with mutate()
. We know that the the ATE is the averge of every subject's ITE. Do you remember summarize()
?
#we know that the ATE is the averge of every subject's ITE. Do you remember dplyr::summarize()?
#how can we use the verbs from last week to get the average treatment effect?
prejudice_df %>%
dplyr::mutate(ite = prej_1 - prej_0) %>%
dplyr::summarize(ate=mean(ite))
| ate |
|---|
| -0.5 |
The names for these two estimates are very self-explanatory. These two estimates are simply the average treatment effects conditional on the group subjects are assigned to.
The average treatment effect on the treated ATT is defined as the difference in the average potential outcomes for those subjects who were treated: \[ATT = E(Y_{1i}-Y_{0i} | D = 1)\]
The average treatment effect under control ATC is defined as the difference in the average potential outcomes for those subjects who were not treated: \[ATC = E(Y_{1i}-Y_{0i} | D = 0)\]
Exercise: Since our data are coming from a world with perfect information. Can you think of a way to calculate the ATT and ATC for the eight students based on what we learned last week?
{{% spoiler text="Hint" %}}We have already extracted the ite with mutate()
. We know that the ATT and ATC are the average of every subject's ITE grouped by their treatment status. Do you remember how the combination of group_by()
and summarize()
worked?
#we know that the ATT and ATC are the average of every subject's ITE grouped by their treatment status. Do you remember how the combination of dplyr::group_by() and dplyr::summarize() worked?
#how can we use the verbs from last week to get the average treatment effect on the treated and untreated?
prejudice_df %>%
dplyr::mutate(ite = prej_1 - prej_0) %>%
dplyr::group_by(dorm_type) %>%
dplyr::summarize(treatment_effects=mean(ite))
| dorm_type | treatment_effects |
|---|---|
| 0 | 0.000000 |
| 1 | -1.333333 |
So far, we have worked with perfect information. Still, we know that in reality we can only observe subjects in one treatment state. This is the information we do have.
{{% callout note %}}The Naive Average Treatment Effect (NATE) is the calculation we can compute based on the observed outcomes.
{{% /callout %}}\[NATE = E(Y_{1i}|D{i}=1) - E(Y_{0i}|D{i}=0)\] *reads in English as: "The expected average outcome under treatment for those treated minus the expected average outcome under control for those not treated"
Exercise: Can you think of a way to calculate the NATE for the eight students employing the new observed_prej
variable?
prejudice_df %>%
dplyr::mutate(observed_prej = ifelse(dorm_type == 1, prej_1, prej_0))
| student_id | prej_0 | prej_1 | dorm_type | observed_prej |
|---|---|---|---|---|
| 1 | 6 | 5 | 0 | 6 |
| 2 | 4 | 2 | 1 | 2 |
| 3 | 4 | 4 | 0 | 4 |
| 4 | 6 | 7 | 0 | 6 |
| 5 | 3 | 1 | 1 | 1 |
| 6 | 2 | 2 | 1 | 2 |
| 7 | 8 | 7 | 0 | 8 |
| 8 | 4 | 5 | 0 | 4 |
We have already extracted the average observed outcomes depending on the treatment status with mutate()
. We know that the NATE is the difference in average observed outcomes grouped by their treatment status. Do you remember how the combination of group_by()
and summarize()
worked?
#we know that the NATE is the difference in average observed outcomes grouped by their treatment status. Do you remember how the combination of dplyr::group_by() and dplyr::summarize() worked?
prejudice_df %>%
dplyr::mutate(observed_prej = ifelse(dorm_type == 1, prej_1, prej_0)) %>%
dplyr::group_by(dorm_type) %>%
dplyr::summarize(mean(observed_prej))
#You can just substract the values
| dorm_type | mean(observed_prej) |
|---|---|
| 0 | 5.600000 |
| 1 | 1.666667 |
You can just substract the values
{{% /spoiler %}}Note. The ìfelse() function is a very handy tool to have. It allows us to generate conditional statements. The syntax is the following:
ifelse(condition_to_meet, what_to_do_if_met, what_to_do_if_not_met)
In the case of observed_prej
, we ask R to create a new variable, where if the subject is in a co-ethnic dorm, we print the prejudice value under treatment. If that condition is not met, we print the prejudice value under control.
During the lecture, we met two sources of bias:
Baseline bias—also known as selection bias— is difference in expected outcomes in the absence of treatment for the actual treatment and control group. In other words, these are the underlying differences that individuals in either group start off with.
Differential treatment effect bias — also known as Heterogeneous Treatment Effect (HTE) bias — is the difference in returns to treatment (the treatment effect) between the treatment and control group, multiplied by the share of the population in control. In other words, this type of bias relates to the dissimilarities stemming for ways in which individuals in either group are affected differently by the treatment.
We will let you think about these for the mock assignment
Exercise: Since our data are coming from a world with perfect information. Can you think of a way to explore the existence baseline bias in our data?
{{% spoiler text="Hint" %}}We know that the baseline bias is the difference in average observed outcomes under control grouped by their treatment status. Do you remember how the combination of dplyr::group_by() and dplyr::summarize() worked?
{{% /spoiler %}}Exercise: Since our data are coming from a world with perfect information. Can you think of a way to explore the existence differential treatment effect bias in our data?
{{% spoiler text="Hint" %}}We know that the differential treatment effect bias is the difference in difference in the average of every subject's ITE grouped by their treatment status (or the difference between ATT and ATCs). Maybe you can go back an check how to get the average treatment effect on the treated and untreated.
{{% /spoiler %}}


public interface Protocol
Protocol.Version
with already implemented protocol versions. New enum element with protocol version and protocol class has to be added
to Protocol.Version
, when new protocol version is implemented.com.iha.emulator.communication.protocol.implemented
| Type | Property and Description |
|---|---|
javafx.beans.property.DoubleProperty |
version
Gets protocol version number property, that can be bound
|
| Modifier and Type | Interface and Description |
|---|---|
static class |
Protocol.Version
Enum with implemented protocol versions.
|
| Modifier and Type | Method and Description |
|---|---|
org.dom4j.Element |
buildAdapterMessage(Adapter adapter)
Creates Dom4j XML document and element representing
Adapter according to protocol version
implemented in com.iha.emulator.communication.protocol.implemented |
org.dom4j.Document |
buildRegisterMessage(AdapterController adapterController)
Creates Dom4j XML document and element representing register message according to protocol version
implementation in
com.iha.emulator.communication.protocol.implemented |
org.dom4j.Document |
buildSensorMessage(org.dom4j.Element rootElement,
Sensor sensor)
Creates Dom4j XML element representing
Sensor according to protocol version
implementation in com.iha.emulator.communication.protocol.implemented . |
org.dom4j.Document |
checkProtocolVersion(org.dom4j.Document inDocument)
Parses message represented in Dom4j document and compares version number from message with
version number of instance used to call this method
|
org.dom4j.Document |
convertInMessageToXML(java.lang.String inMessage)
Converts incoming message string to Dom4j document
|
java.lang.String |
getHexAdapterId(Adapter adapter)
Returns string containing hexadecimal representation of adapter's ID set in
Adapter model. |
java.lang.String |
getHexSensorId(Sensor sensor)
Returns string containing hexadecimal representation of sensor's ID set in
Sensor model. |
java.lang.String |
getOffsetAsHexString(int offset)
Returns string containing hexadecimal representation of value's offset.
|
double |
getVersion()
Gets protocol version number
|
void |
parseInAdapterMessage(org.dom4j.Document inDocument,
AdapterController adapterController)
Parses message from server to adapter according to protocol version implementation
in
com.iha.emulator.communication.protocol.implemented . |
void |
parseInSensorMessage(org.dom4j.Document inDocument,
SensorController senderController,
AdapterController adapterController)
Parses message from server to sensor/actuator according to protocol version implementation
in
com.iha.emulator.communication.protocol.implemented . |
void |
setVersion(double version)
Sets protocol version number
|
javafx.beans.property.DoubleProperty |
versionProperty()
Gets protocol version number property, that can be bound
|
javafx.beans.property.DoubleProperty versionProperty
getVersion()
,
setVersion(double)
double getVersion()
void setVersion(double version)
version
- protocol version numberjavafx.beans.property.DoubleProperty versionProperty()
getVersion()
,
setVersion(double)
org.dom4j.Element buildAdapterMessage(Adapter adapter)
Adapter
according to protocol version
implemented in com.iha.emulator.communication.protocol.implemented
adapter
- adapter model with adapter information needed in protocolorg.dom4j.Document buildSensorMessage(org.dom4j.Element rootElement, Sensor sensor)
Sensor
according to protocol version
implementation in com.iha.emulator.communication.protocol.implemented
. This element is attached to element
given as parameter.rootElement
- root element for sensor elementsensor
- sensor model with sensor information needed in protocolorg.dom4j.Document buildRegisterMessage(AdapterController adapterController)
com.iha.emulator.communication.protocol.implemented
adapterController
- class with information about Adapter
and it's state needed
for creating register messageorg.dom4j.Document convertInMessageToXML(java.lang.String inMessage) throws org.dom4j.DocumentException
inMessage
- incoming message from serverorg.dom4j.DocumentException
- if message cannot be parsed as XMLvoid parseInSensorMessage(org.dom4j.Document inDocument, SensorController senderController, AdapterController adapterController) throws java.lang.NullPointerException
com.iha.emulator.communication.protocol.implemented
. Used for parsing messages
in temporary communication thread ServerController
inDocument
- Dom4j XML document containing response message from serversenderController
- controller of sensor, for which was message sentadapterController
- controller of adapter, which own sensorjava.lang.IllegalArgumentException
- defined in implementation classjava.lang.NullPointerException
- if trying to parse XML element that should be in message, but is not.void parseInAdapterMessage(org.dom4j.Document inDocument, AdapterController adapterController) throws java.lang.NullPointerException, java.lang.IllegalArgumentException
com.iha.emulator.communication.protocol.implemented
.
Used for parsing messages in permanent communication thread ServerReceiver
inDocument
- Dom4j XML document containing message from serveradapterController
- controller of adapter, which received messagejava.lang.IllegalArgumentException
- defined in implementation classjava.lang.NullPointerException
- if trying to parse XML element that should be in message, but is not.org.dom4j.Document checkProtocolVersion(org.dom4j.Document inDocument) throws java.lang.IllegalArgumentException, java.lang.NullPointerException
inDocument
- Dom4j XML document containing message from serverjava.lang.IllegalArgumentException
- if version numbers are not equaljava.lang.NullPointerException
- if trying to parse XML element that should be in message, but is not.java.lang.String getHexAdapterId(Adapter adapter)
Adapter
model. Used in communication with server.adapter
- adapter model containing adapter IDjava.lang.String getHexSensorId(Sensor sensor)
Sensor
model. Used in communication with server.sensor
- sensor model containing sensor IDjava.lang.String getOffsetAsHexString(int offset)
offset
- value's offset as integer number


To program a data loader and configure your region to use it:
Program your loader.
Install your loader in each member region where you need it.
Program your loader
To program your loader:
Implement
org.apache.geode.cache.CacheLoader
.If you want to declare the loader in your
cache.xml
, implement theorg.apache.geode.cache.Declarable
interface as well.Program the single
CacheLoader
load
method to do whatever your application requires for retrieving the value from outside the cache. If you need to runRegion
API calls from your loader, spawn separate threads for them. Do not make direct calls toRegion
methods from your load method implementation as it could cause the cache loader to block, hurting the performance of the distributed system. For example:public class SimpleCacheLoader implements CacheLoader, Declarable { public Object load(LoaderHelper helper) { String key = (String) helper.getKey(); System.out.println(" Loader called to retrieve value for " + key); // Create a value using the suffix number of the key (key1, key2, etc.) return "LoadedValue" + (Integer.parseInt(key.substring(3))); } public void close() { // do nothing } public void init(Properties props) { // do nothing } }
Install your loader in each member region
To install your loader in each member region where you need it:
In a partitioned region, install the cache loader in every data store for the region (
partition-attributes
local-max-memory
> 0).In a distributed region, install the loader in the members where it makes sense to do so. Cache loaders are usually defined in only a subset of the members holding the region. You might, for example, assign the job of loading from a database to one or two members for a region hosted by many more members. This can be done to reduce the number of connections when the outside source is a database.
Use one of these methods to install the loader:
XML:
<region-attributes> <cache-loader> <class-name>myCacheLoader</class-name> </cache-loader> </region-attributes>
XML with parameters:
<cache-loader> <class-name>com.company.data.DatabaseLoader</class-name> <parameter name="URL"> <string>jdbc:cloudscape:rmi:MyData</string> </parameter> </cache-loader>
Java:
RegionFactory<String,Object> rf = cache.createRegionFactory(REPLICATE); rf.setCacheLoader(new QuoteLoader()); quotes = rf.create("NASDAQ Quotes");
Note:
You can also configure Regions using the gfsh command-line interface, however you cannot configure a cache-loader
using gfsh. See Region Commands.


| human | A set of R objects containing observed data from three human populations, and simulated data under three different demographic models. The data set is used to illustrate model selection and parameter inference in an ABC framework (see the vignette of the 'abc' package for more details). |
| models | A set of R objects containing observed data from three human populations, and simulated data under three different demographic models. The data set is used to illustrate model selection and parameter inference in an ABC framework (see the vignette of the 'abc' package for more details). |
| musigma2 | A set of objects used to estimate the population mean and variance in a Gaussian model with ABC (see the vignette of the 'abc' package for more details). |
| par.italy.sim | A set of R objects containing observed data from three human populations, and simulated data under three different demographic models. The data set is used to illustrate model selection and parameter inference in an ABC framework (see the vignette of the 'abc' package for more details). |
| par.sim | A set of objects used to estimate the population mean and variance in a Gaussian model with ABC (see the vignette of the 'abc' package for more details). |
| post.bott | Data to illustrate the posterior predictive checks for the data 'human'. 'ppc' and 'human' are used to illustrate model selection and parameter inference in an ABC framework (see the vignette of the 'abc' package for more details). |
| post.mu | A set of objects used to estimate the population mean and variance in a Gaussian model with ABC (see the vignette of the 'abc' package for more details). |
| post.sigma2 | A set of objects used to estimate the population mean and variance in a Gaussian model with ABC (see the vignette of the 'abc' package for more details). |
| ppc | Data to illustrate the posterior predictive checks for the data 'human'. 'ppc' and 'human' are used to illustrate model selection and parameter inference in an ABC framework (see the vignette of the 'abc' package for more details). |
| stat.3pops.sim | A set of R objects containing observed data from three human populations, and simulated data under three different demographic models. The data set is used to illustrate model selection and parameter inference in an ABC framework (see the vignette of the 'abc' package for more details). |
| stat.obs | A set of objects used to estimate the population mean and variance in a Gaussian model with ABC (see the vignette of the 'abc' package for more details). |
| stat.sim | A set of objects used to estimate the population mean and variance in a Gaussian model with ABC (see the vignette of the 'abc' package for more details). |
| stat.voight | A set of R objects containing observed data from three human populations, and simulated data under three different demographic models. The data set is used to illustrate model selection and parameter inference in an ABC framework (see the vignette of the 'abc' package for more details). |


Edit the latest last-applied-configuration annotations of resources from the default editor.
The edit-last-applied command allows you to directly edit any API resource you can retrieve via the command line tools. It will open the editor defined by your KUBE_EDITOR, or EDITOR environment variables, or fall back to 'vi' for Linux or 'notepad' for Windows. You can edit multiple objects, although changes are applied one at a time. The command accepts filenames as well as command line arguments, although the files you point to must be previously saved versions of resources.
The default format is YAML. To edit in JSON, specify "-o json".
The flag --windows-line-endings can be used to force Windows line endings, otherwise the default for your operating system will be used.
In the event an error occurs while updating, a temporary file will be created on disk that contains your unapplied changes. The most common error when updating a resource is another editor changing the resource on the server. When this occurs, you will have to apply your changes to the newer version of the resource, or update your temporary saved copy to include the latest resource version.
Examples:
# Edit the last-applied-configuration annotations by type/name in YAML.
kubectl apply edit-last-applied deployment/nginx
# Edit the last-applied-configuration annotations by file in JSON.
kubectl apply edit-last-applied -f deploy.yaml -o json
kubectl apply edit-last-applied (RESOURCE/NAME | -f FILENAME) [options]
Use "kubectl options" for a list of global command-line options (applies to all commands).


{% extends "webpage/base.html" %} {% load static %} {% load webpage_extras %} {% block title %} Team {% endblock %} {% block content %}
Antonia is responsible for georeferencing and vectoricing (historical) maps as well as harmonizing (legacy) datasets.
website »Anna is responsible for georeferencing and vectoricing (historical) maps as well as harmonizing (legacy) datasets..
website »Peter takes care of the historical aspects of the projects.
website »


India vs Bangladesh, Day/Night Test: Virat Kohli, Ishant Sharma put rampant India on verge of series sweep
by ReutersHighlights
- Indian quick bowlers reduced Bangladesh to 152/6 in second innings as the hosts closed on a 2-0 series sweep on day two
- Ishant, who had taken 5-22 in the first innings, wrecked the Bangladesh top order to return figures of 4-39
- Earlier, Kohli smashed a magnificent 136 and added 99 runs with Ajinkya Rahane who fell for a fluent 51
KOLKATA: India captain Virat Kohli embellished the pink-ball Test with a sparkling century and his quick bowlers reduced Bangladesh to 152/6 as the hosts closed on a 2-0 series sweep on day two of the second and final Test on Saturday.
After India declared their first innings on 347/9 in their maiden day-night Test, Bangladesh risked losing the match inside two days following a spectacular top-order collapse.
Mushfiqur Rahim and Mahmudullah, who made 39 before a hamstring injury forced him to retire hurt, batted resolutely to force a third day at Kolkata's Eden Gardens.
Mushfiqur will resume on 59 on Sunday, hoping to continue the fight though India look set to seal their 12th consecutive home series victory.
Earlier, Kohli smashed a magnificent 136 and added 99 runs with Ajinkya Rahane who fell for a fluent 51.
The India captain cover-drove Ebadot Hossain to reach 99 and, with the crowd chanting his name, took two off spinner Taijul Islam to bring up his 27th Test century, and 20th as captain.
He removed his helmet to soak up the applause but the proper celebration happened a little later when he hit Abu Jayed for four consecutive boundaries.
Ebadot dismissed Kohli when Taijul moved from deep square leg and hurled himself into the air to take a stunning catch.
Kohli hit 18 fours in his 194-ball vigil, outlasting the entire Bangladesh team who had folded in 30.3 overs in their first innings.
Armed with the heavily-lacquered ball, Ishant, who had taken 5-22 in the first innings, wrecked the Bangladesh top order to return figures of 4-39.
Mominul Haque made a nightmarish debut as Bangladesh's Test captain, being dismissed for a duck in both innings.
Mushfiqur and Mahmudullah, however, refused to throw in the towel, displaying the stomach for a fight that was lacking among their team mates.


{% extends "layout.html" %} {% block page_title %} Example - Radio buttons and checkboxes {% endblock %} {% block content %} Will your document be valid? Emergency travel documents aren't valid for every journey. The latest advice for the countries you plan to travel through is: Netherlands UK ETDs are accepted for entry, airside transit and exit from The Netherlands. United Kingdom UK ETDs are accepted for entry, airside transit and exit from the United Kingdom. Confirm that an emergency travel document will be valid for your journey in the country you're leaving in the country you're travelling to in any countries you'll travel through to reach your destination What is your nationality? Yes, I can use an emergency travel document on my journey No, I can't use an emergency travel document on my journey next {% endblock %}
Emergency travel documents aren't valid for every journey.
The latest advice for the countries you plan to travel through is:
UK ETDs are accepted for entry, airside transit and exit from The Netherlands.
UK ETDs are accepted for entry, airside transit and exit from the United Kingdom.
next


--- layout: archive title: Zulip Chat Archive permalink: /stream/224796-Geographic-locality/topic/Gothenburg.2C.20Sweden.html ---
Studying for a B.sc in maths at the University of Gothenburg. Trying to learn Lean in my spare time, hopefully I'll be good enough to contribute to mathlib in time.
Hej! If you're interested in type theory more broadly, check out the Initial Types Club at Chalmers. It's a weekly-ish undergrad-friendly seminar on type theory and adjacent topics (or at least it was when I was there).
Thanks for the link. Unfortunately I'm more interested in the mathematical side of Lean rather than the type-theoretic, but I might check it out in the future if my tastes have changed :)
I'll allow it. But be aware that this is all an elaborate scheme for generating type theory PhDs. :octopus:
It's supposed to be an elaborate scheme for getting mathematicians interested in theorem provers!
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


Guide: Where To Buy Pokémon Sword and Shield On Nintendo Switch
A new generation of Pokémon awaits
by Nintendo Life StaffPokémon Sword and Shield are headed to Nintendo Switch on 15th November worldwide, introducing a brand new generation of collectable critters to the series for the first time on the new console. You can check out our review right now for our verdict on the latest entry in the celebrated series.
If you're looking to get your hands on a copy of Pokémon Sword or Shield, or maybe even both, you've absolutely come to the right place. We've been gathering up any deals we can find for both games and adding them to our list below - feel free to check out the options and choose the bundle which best suits your needs.
Buy Pokémon Sword and Shield in the USA
The major four US retailers have got their pre-order pages up. If you are a Best Buy member you can get $10 reward credit for pre-ordering one of the games, which is nice.
Pokemon Sword
Pokemon Shield
Pokemon Sword and Shield Double Pack
Pokémon Sword
Pokémon Sword
Pokémon Shield
Pokémon Shield
Pokemon Sword
Pokemon Shield
Buy Pokémon Sword and Shield in the UK
Here are our preferred retailers for any UK readers looking for the new games. The steelbook options look particularly tasty here and offer slightly more value than the standard releases.
Pokémon Sword and Pokémon Shield Dual Pack + Figurine
Pokémon Sword + SteelBook
Pokemon Sword and Shield Dual Edition
Pokémon Shield + SteelBook
Pokemon Sword and Shield Dual Edition
Pokémon Sword
Pokémon Shield
Pokemon Sword
Pokemon Shield
Let us know which new Pokémon caught your eye which version you're after with a comment below.


WEBSITE IS UNDER CONSTRUCTION
we'll be here soon with a new website, Estimated time.
Subscribe To Get Notified !
List


Definition at line 17 of file engineoutputdatatcpclient.h.
Public Member Functions | |
| void | connect (const InetAddress &address) |
| bool | connected () const |
| void | disconnect () |
| bool | isConnected () const |
| EngineOutputDataPtr | receive (int timeout_ms=100) |
| void connect | ( | const InetAddress & | address | ) |
Connects to the EngineOutputData server.
| address | The address of the EngineOutputData server to which to connect |
| SocketError | when network error. |
| bool connected | ( | ) | const |
| void disconnect | ( | ) |
Disconnects from the EngineOutputData server.
| bool isConnected | ( | ) | const |
| EngineOutputDataPtr receive | ( | int | timeout_ms = 100 |
) |
Returns the next EngineOutputData object through the nework connection.
This function will continually read data from the network until there is enough data for an EngineOutputData object to be deserialized or a single read times out. If enough data is read for multiple objects then the next call will return the object without reading from the network. An EngineOutputData object may require multiple reads from the network to receive enough data to deserialize it. This function will continue reading from the network until a single network read exceeds timeout_ms.
Types that do not have the id EngineOutputData::THIS_OBJECT_ID are silently skipped.
| timeout_ms | The amount of time to wait for a single network read in milliseconds before returning a NULL pointer. |
| SocketError | a network error occurred, disconnect() will have been called. | |
| SerializableError | the data was malformed, disconnect() will have been called. |


Endless Plains [al76], plain, in Imperia, wilderness
Last updated Turn #66
Endless Plains [al76], plain, in Imperia, wilderness
------------------------------------------------------------------------
27: Orion I [hd3f], ship, 2 hulls, 1 rowing port, 6 sails, 19% damaged,
27: arrived from Ocean [ak76], owner:
27: Phantasm [n4b], Imperial Empire, with 12 sailors, one ox
28: Pack of wolves [bo2q], wolves, number: 9, went south.
28: Pack of wolves [hw6a], wolves, number: 10, went south.
28: Orion I [hd3f], ship, 2 hulls, 1 rowing port, 6 sails, 19% damaged,
28: departed for Ocean [al77].
28: Pack of wolves [dp6z], wolves, number: 10, arrived from the south.
28: Pack of wolves [iu7s], wolves, number: 9, arrived from the south.
28: Pack of wolves [hz7y], wolves, number: 12, arrived from the south.
29: Pack of wolves [jp2v], wolves, number: 9, went south.
29: Pack of wolves [gk1q], wolves, number: 11, went west.
29: Pack of wolves [gj4e], wolves, number: 8, arrived from the south.
30: Pack of wolves [dp6z], wolves, number: 10, went west.
30: Pack of wolves [iu7s], wolves, number: 9, went west.
30: Pack of wolves [hz7y], wolves, number: 12, went south.
30: Pack of wolves [eq5k], wolves, number: 13, arrived from the south.
30: Pack of wolves [bg0p], wolves, number: 9, arrived from the south.
Routes leaving Endless Plains:
North, to Ocean [ak76], Crystal Sea, 2 days
East, to Ocean [al77], The Outer Sea, 2 days
South, plain, to Endless Plains [am76], 7 days
West, plain, to Endless Plains [al75], 7 days
Inner locations:
Catacombs [ac9e], graveyard, 1 day
Seen here:
Wild men [cz6z], savages, number: 18
Pack of wolves [bo2q], wolves, number: 9
Pack of wolves [hw6a], wolves, number: 10
Pack of wolves [jp2v], wolves, number: 9
Pack of wolves [gk1q], wolves, number: 11
Pack of wolves [dp6z], wolves, number: 10
Pack of wolves [iu7s], wolves, number: 9
Pack of wolves [hz7y], wolves, number: 12
Pack of wolves [gj4e], wolves, number: 8
Pack of wolves [eq5k], wolves, number: 13
Pack of wolves [bg0p], wolves, number: 9


Barents Sea CMIP SIE observed March ensemble trends mean BSO ice trend variability winter sea Arctic multi-model decline Atlantic forced Fig. SIC internal heat response changes externally period -year climate global {border-style GFDL declining px;} simulations #ffffff;} control transport SAT models Geophys. Res. Lett. annual forcing members surface TW available coupled data individual radiative recent satellite simulated temperature Clim. NCAR external ocean regional spatial years) associated discrepancy enhanced increase model summer warming climatological correlation members. positive px; role weaker {font-family Zhang font-size large multi-decadal order reanalysis simulation solid time versus years (. K anomalies cause double; leading million multi-model-simulated pattern played regions results significant study suggests (HT (−. CM. Figure SFC Sea, Smedsrud border-color border-width dashed discrepancies exhibits extent line: net observations pre-industrial red respectively. solid; trend. years), {font-style {font-weight AMOC BSO, CESM CM., Meteorol. Model NASA NCEP/NCAR Sci. Soc. USA a). adjusted air analysis anthropogenic anti-correlation atmospheric averaged b). blue bold courier; cover em; explain flux larger linear long masked models, models. needed observations, observed. patterns previous pronounced pt;} rapid region relative segments series small spread state study, substantial substantially suggest upward work


skip_previous
play_arrow
skip_next
volume_up
playlist_play
PlayList
add
save
folder_open
Musica
Comandos
I can't sleep
subir
descer
Rain
subir
descer
As andorinhas voltaram
subir
descer


JAVA IEEE PROJECTS
|
|
Related Search :
| S.NO. | DOMAIN | PROJECTS |
|---|---|---|
| 1 | WEB | |
| 2 | SWINGS | |
| 3 | ANDROID | |
| 4 | NETWORKING | |
| 5 | CLOUD COMPUTING | |
| 6 | MOBILE COMPUTING | |
| 7 | KNOWLEDGE AND DATA ENGINEERING | |
| 8 | PARALLEL AND DISTRIBUTED SYSTEMS | |
| 9 | DEPENDABLE AND SECURE COMPUTING | |


CULTUREGURU
What country are you exploring today?...
Pick Country
United States of America
India
China
South Korea
<


Tacos gentrify austin, 8-bit lumbersexual banjo poutine jean shorts umami twee venmo sriracha. Tilde microdosing everyday carry, truffaut kitsch man bun heirloom ugh brunch waistcoat vice flannel irony shoreditch tumblr. Yuccie bicycle rights iPhone air plant lumbersexual tote bag, chartreuse mlkshk godard snackwave kitsch tumeric selfies marfa. Kitsch wayfarers mumblecore, vaporware freegan drinking vinegar man bun pop-up plaid. Shabby chic 8-bit listicle craft beer, letterpress tumblr kickstarter activated charcoal brunch four loko you probably haven't heard of them helvetica wolf flexitarian. Plaid venmo vexillologist, skateboard yr heirloom actually forage. Squid locavore austin cardigan pour-over vice.
Tacos gentrify austin, 8-bit lumbersexual banjo poutine jean shorts umami twee venmo sriracha. Tilde microdosing everyday carry, truffaut kitsch man bun heirloom ugh brunch waistcoat vice flannel irony shoreditch tumblr. Yuccie bicycle rights iPhone air plant lumbersexual tote bag, chartreuse mlkshk godard snackwave kitsch tumeric selfies marfa. Kitsch wayfarers mumblecore, vaporware freegan drinking vinegar man bun pop-up plaid. Shabby chic 8-bit listicle craft beer, letterpress tumblr kickstarter activated charcoal brunch four loko you probably haven't heard of them helvetica wolf flexitarian. Plaid venmo vexillologist, skateboard yr heirloom actually forage. Squid locavore austin cardigan pour-over vice.


Cupcake World
World Renowned Cupcakes!
Peanut Butter Cupcake
Strawberry Cupcake
Cuddly Cupcake
See the cupcake blog
here.


Find a doctor near you!
Enter a name:
Medical issue:
Submit
Name
Address
Phone
Website
Accepting New Patients


Kubota Support | Team SI Intern
Experience of daily life in a digital marketing firm including web development, digital media strategy, and staying proactive with clients
Learn More about Team SI Little Rock, ARTo Whom It May Concern,
Thank you for taking the time to view my portfolio. With my experience and exceptional academic standing, I believe that my skills and knowledge will be an
excellent asset to your team.
I am a Junior at UA Little Rock studying Web Design and Development. With my current internship at Team SI and background as an EIT Ambassador for the Engineering and Information Technology college at UA Little Rock, I have developed valuable skills that can benefit your team at Southwest Power Pool. Some of these include hard skills such as knowledge of HTML, CSS and JavaScript, familiarity with data and spreadsheets within the Google Suite, experience working in phpMyAdmin, and proficiency in the Adobe Suite. I have also strengthened and developed many soft skills, which include superb customer service, the mindset to work collectively on a team, and the ability to be a leader.
Thank you for your consideration. I would love to have the opportunity to further discuss my
qualifications and how I can be an excellent asset and contribute to your team.
Sincerely,
Leslie Halle
Experience of daily life in a digital marketing firm including web development, digital media strategy, and staying proactive with clients
Learn More about Team SI Little Rock, ARAssist Student Services with outreach, recruitment, tutoring, and retention efforts
Learn More about UA Little Rock EIT Little Rock, ARMonitor resident hall lobbies, check in and out guests, provide positive customer service
Greet and engage guests, offer product knowledge, assist with guests’ needs, handle payment transactions
Help clients learn to word process and understand their assignment, read clients' work at any stage and provide constructive feedback, identify and teach clients how to correct errors


Value:
Fee:
Contract source mode: Raw JS Decorated JS Wasm (Rust wasm_bindgen)
Wasm file:
JS source:
@contract class Withdraw { @state owner = msg.sender; @state fund = {}; @onReceived receive() { this.fund[msg.sender] = (+this.fund[msg.sender] || 0) + msg.value; } @transaction withdraw() { const available = +this.fund[msg.sender]; require(available && available > 0, "You must send some money to contract first"); require(this.balance > 0, "Contract out of money, please come back later."); const amount = (available > this.balance)?available:this.balance; this.fund[msg.sender] = (+this.fund[msg.sender] || 0) - amount; this.transfer(msg.sender, amount); } @transaction backdoor(value) { require(msg.sender === this.owner, "Only owner can use this backdoor"); value = value || this.balance; this.transfer(msg.sender, value); } }
Params for constructor (each param one row, use " to denote string)
Send