text:
Implementing the Database Resource Manager
You can use the Database Resource Manager to allocate percentages of system resources to classes of users and jobs. For example, you could allocate 75 percent of the available CPU resources to your online users, leaving 25 percent to your batch users. To use the Database Resource Manager, you will need to create resource plans, resource consumer groups, and resource plan directives.
Prior to using the Database Resource Manager commands, you must create a "pending area" for your work. To create a pending area, use the CREATE_PENDING_AREA procedure of the DBMS_RESOURCE_MANAGER package. When you have completed your changes, use the VALIDATE_PENDING_AREA procedure to check the validity of the new set of plans, subplans, and directives. You can then either submit the changes (via SUBMIT_PENDING_AREA) or clear the changes (via CLEAR_PENDING_AREA). The procedures that manage the pending area do not have any input variables, so a sample creation of a pending area uses the following syntax:
execute DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
If the pending area is not created, you will receive an error message when you try to create a resource plan.
To create a resource plan, use the CREATE_PLAN procedure of the DBMS_RESOURCE_ MANAGER package. The syntax for the CREATE_PLAN procedure is shown in the following listing:
(plan IN VARCHAR2,
comment IN VARCHAR2,
cpu_mth IN VARCHAR2 DEFAULT
active_sess_pool_mth IN VARCHAR2 DEFAULT
parallel_degree_limit_mth IN VARCHAR2 DEFAULT
queueing_mth IN VARCHAR2 DEFAULT
When you create a plan, give the plan a name (in the plan variable) and a comment. By default, the CPU allocation method will use the "emphasis" method, allocating CPU resources based on percentage. The following example shows the creation of a plan called DEVELOPERS:
execute DBMS_RESOURCE_MANAGER.CREATE_PLAN – (Plan => 'DEVELOPERS', –
Comment => 'Developers, in Development database');
The hyphen (-) character is a continuation character in SQL*Plus, allowing a single command to span multiple lines.
In order to create and manage resource plans and resource consumer groups, you must have the ADMINISTER_RESOURCE_MANAGER system privilege enabled for your session. DBAs have this privilege with the with admin option. To grant this privilege to non-DBAs, you must execute the GRANT_SYSTEM_PRIVILEGE procedure of the DBMS_RESOURCE_MANAGER_PRIVS package. The following example grants the user MARTHA the ability to manage the Database Resource Manager:
execute DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SYSTEM_
(grantee_name => 'Martha', –
privilege_name => 'ADMINISTER_RESOURCE_MANAGER', –
admin_option => TRUE);
You can revoke MARTHA's privileges via the REVOKE_SYSTEM_PRIVILEGE procedure of the DBMS_RESOURCE_MANAGER package.
With the ADMINISTER_RESOURCE_MANAGER privilege enabled, you can create a resource consumer group using the CREATE_CONSUMER_GROUP procedure within DBMS_RESOURCE_ MANAGER. The syntax for the CREATE_CONSUMER_GROUP procedure is shown in the following listing:
(consumer_group IN VARCHAR2,
comment IN VARCHAR2,
cpu_mth IN VARCHAR2 DEFAULT 'ROUND-ROBIN')
You will be assigning users to resource consumer groups, so give the groups names that are based on the logical divisions of your users. The following example creates two groups—one for online developers and a second for batch developers:
execute DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP –
(Consumer_Group => 'Online_developers', –
Comment => 'Online developers');
execute DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP –
(Consumer_Group => 'Batch_developers', –
Comment => 'Batch developers');
Once the plan and resource consumer groups are established, you need to create resource plan directives and assign users to the resource consumer groups. To assign directives to a plan, use the CREATE_PLAN_DIRECTIVE procedure of the DBMS_RESOURCE_MANAGER package. The syntax for the CREATE_PLAN_DIRECTIVE procedure is shown in the following listing:
(plan IN VARCHAR2,
group_or_subplan IN VARCHAR2,
comment IN VARCHAR2,
cpu_p1 IN NUMBER DEFAULT NULL,
cpu_p2 IN NUMBER DEFAULT NULL,
cpu_p3 IN NUMBER DEFAULT NULL,
cpu_p4 IN NUMBER DEFAULT NULL,
cpu_p5 IN NUMBER DEFAULT NULL,
cpu_p6 IN NUMBER DEFAULT NULL,
cpu_p7 IN NUMBER DEFAULT NULL,
cpu_p8 IN NUMBER DEFAULT NULL,
active_sess_pool_p1 IN NUMBER
queueing_p1 IN NUMBER
parallel_degree_limit_p1 IN NUMBER
switch_group IN VARCHAR2
switch_time IN NUMBER
switch_estimate IN BOOLEAN
max_est_exec_time IN NUMBER
undo_pool IN NUMBER
max_idle_time IN NUMBER
max_idle_time_blocker IN NUMBER
switch_time_in_call IN NUMBER DEFAULT NULL);
The multiple CPU variables in the CREATE_PLAN_DIRECTIVE procedure support the creation of multiple levels of CPU allocation. For example, you could allocate 75 percent of all your CPU resources (level 1) to your online users. Of the remaining CPU resources (level 2), you could allocate 50 percent to a second set of users. You could split the remaining 50 percent of resources available at level 2 to multiple groups at a third level. The CREATE_PLAN_DIRECTIVE procedure supports up to eight levels of CPU allocations.
The following example shows the creation of the plan directives for the Online_developers and Batch_developers resource consumer groups within the DEVELOPERS resource plan:
execute DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE –
(Plan => 'DEVELOPERS', –
Group_or_subplan => 'Online_developers', –
Comment => 'online developers', –
Cpu_p1 => 75, –
Cpu_p2=> 0, –
Parallel_degree_limit_p1 => 12);
execute DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE –
(Plan => 'DEVELOPERS', –
Group_or_subplan => 'Batch_developers', –
Comment => 'Batch developers', –
Cpu_p1 => 25, –
Cpu_p2 => 0, –
Parallel_degree_limit_p1 => 6);
In addition to allocating CPU resources, the plan directives restrict the parallelism of operations performed by members of the resource consumer group. In the preceding example, batch developers are limited to a degree of parallelism of 6, reducing their ability to consume system resources. Online developers are limited to a degree of parallelism of 12.
To assign a user to a resource consumer group, use the SET_INITIAL_ CONSUMER_GROUP procedure of the DBMS_RESOURCE_MANAGER package. The syntax for the SET_INITIAL_ CONSUMER_GROUP procedure is shown in the following listing:
(user IN VARCHAR2,
consumer_group IN VARCHAR2)
If a user has never had an initial consumer group set via the SET_INITIAL_ CONSUMER_ GROUP procedure, the user is automatically enrolled in the resource consumer group named DEFAULT_CONSUMER_GROUP.
To enable the Resource Manager within your database, set the RESOURCE_MANAGER_ PLAN database initialization parameter to the name of the resource plan for the instance. Resource plans can have subplans, so you can create tiers of resource allocations within the instance. If you do not set a value for the RESOURCE_MANAGER_PLAN parameter, resource management is not performed in the instance.
You can dynamically alter the instance to use a different resource allocation plan via the set initial_consumer_group clause of the alter system command. For example, you could create a resource plan for your daytime users (DAYTIME_USERS) and a second for your batch users (BATCH_USERS). You could create a job that each day executes this command at 6:00 A.M.:
alter system set initial_consumer_group = 'DAYTIME_USERS';
Then at a set time in the evening, you could change consumer groups to benefit the batch users:
alter system set initial_consumer_group = 'BATCH_USERS';
The resource allocation plan for the instance will thus be altered without needing to shut down and restart the instance.
When using multiple resource allocation plans in this fashion, you need to make sure you don't accidentally use the wrong plan at the wrong time. For example, if the database is down during a scheduled plan change, your job that changes the plan allocation may not execute. How will that affect your users? If you use multiple resource allocation plans, you need to consider the impact of using the wrong plan at the wrong time. To avoid such problems, you should try to minimize the number of resource allocation plans in use.
In addition to the examples and commands shown in this section, you can update existing resource plans (via the UPDATE_PLAN procedure), delete resource plans (via DELETE_PLAN), and cascade the deletion of a resource plan plus all its subplans and related resource consumer groups (DELETE_PLAN_CASCADE). You can update and delete resource consumer groups via the UPDATE_CONSUMER_GROUP and DELETE_CONSUMER_GROUP procedures, respectively. Resource plan directives may be updated via UPDATE_PLAN_DIRECTIVE and deleted via DELETE_PLAN_DIRECTIVE.
When you are modifying resource plans, resource consumer groups, and resource plan directives, you should test the changes prior to implementing them. To test your changes, create a pending area for your work. To create a pending area, use the CREATE_PENDING_AREA procedure of the DBMS_RESOURCE_MANAGER package. When you have completed your changes, use the VALIDATE_PENDING_AREA procedure to check the validity of the new set of plans, subplans, and directives. You can then either submit the changes (via SUBMIT_PENDING_ AREA) or clear the changes (via CLEAR_PENDING_AREA). The procedures that manage the pending area do not have any input variables, so a sample validation and submission of a pending area uses the following syntax:
execute DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
execute DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
{mospagebreak title=Switching Consumer Groups}
Three of the parameters in the CREATE_PLAN_DIRECTIVE procedure allow sessions to switch consumer groups when resource limits are met. As shown in the previous section, the parameters for CREATE_PLAN_DIRECTIVE include Switch_Group, Switch_Time, and Switch_Estimate.
The Switch_Time value is the time, in seconds, a job can run before it is switched to another consumer group. The default Switch_Time value is NULL (unlimited). You should set the Switch_ Group parameter value to the group the session will be switched to once the switch time limit is reached. By default, Switch_Group is NULL. If you set Switch_Group to the value 'CANCEL_ SQL', the current call will be cancelled when the switch criteria is met. If the Switch_Group value is 'KILL_SESSION', the session will be killed when the switch criteria is met.
You can use the third parameter, Switch_Estimate, to tell the database to switch the consumer group for a database call before the operation even begins to execute. If you set Switch_Estimate to TRUE, Oracle will use its execution time estimate to automatically switch the consumer group for the operation instead of waiting for it to reach the Switch_Time value.
You can use the group-switching features to minimize the impact of long-running jobs within the database. You can configure consumer groups with different levels of access to the system resources and customize them to support fast jobs as well as long-running jobs—the ones that reach the switch limit will be redirected to the appropriate groups before they even execute.
Implementing Stored Outlines
As you migrate from one database to another, the execution paths for your queries may change. Your execution paths may change for several reasons:
- You may have enabled different optimizer features in the different databases.
- The statistics for the queried tables may differ in the databases.
- The frequency with which statistics are gathered may differ among the databases.
- The databases may be running different versions of the Oracle kernel.
The effects of these differences on your execution paths can be dramatic, and they can have a negative impact on your query performance as you migrate or upgrade your application. To minimize the impact of these differences on your query performance, you can use a feature called a stored outline.
A stored outline stores a set of hints for a query. Those hints will be used every time the query is executed. Using the stored hints will increase the likelihood that the query will use the same execution path each time. Hints decrease the impact of database moves on your query performance. You can view the outlines and related hints via the USER_OUTLINES and USER_OUTLINE_HINTS views.
To start creating hints for all queries, create custom categories of outlines and use the category name as a value of the CREATE_STORED_OUTLINES parameter in the database initialization file, as shown here:
CREATE_STORED_OUTLINES = development
In this example, outlines will be stored for queries within the DEVELOPMENT category. You must have the CREATE ANY OUTLINE system privilege in order to create an outline. Use the create outline command to create an outline for a query, as shown in the following listing:
create outline YTD_SALES
for category DEVELOPMENT
select Year_to_Date_Sales
from SALES
where region = 'SOUTH'
and period = 1;
If you do not specify a name for your outline, the outline will be given a system-generated name.
If you have set CREATE_STORED_OUTLINES to a category name in your initialization file, Oracle will create stored outlines for your queries; using the create outline command gives you more control over the outlines that are created.
You can create outlines for DML commands and for create table as select commands.
Once an outline has been created, you can alter it. For example, you may need to alter the outline to reflect significant changes in data volumes and distribution. You can use the rebuild clause of the alter outline command to regenerate the hints used during query execution, as shown next:
alter outline YTD_SALES rebuild;
You can also rename an outline via the rename clause of the alter outline command, as shown here:
alter outline YTD_SALES rename to YTD_SALES_REGION;
You can change the category of an outline via the change category clause, as shown in the following example:
alter outline YTD_SALES_REGION change category to DEFAULT;
To manage stored outlines, use the DBMS_OUTLN package, which gives you the following capabilities:
- Drop outlines that have never been used
- Drop outlines within a specific category
- Move outlines from one category to another
- Create outlines for specific statements
- Update outlines to the current version's signature
Each of these capabilities has a corresponding procedure within DBMS_OUTLN. To drop outlines that have never been used, execute the DROP_UNUSED procedure, as shown in the following example:
execute DBMS_OUTLN.DROP_UNUSED;
You can clear the "used" setting of an outline via the CLEAR_USED procedure. Pass the name of the outline as the input variable to CLEAR_USED:
execute DBMS_OUTLN.CLEAR_USED('YTD_SALES_REGION');
To drop all the outlines within a category, execute the DROP_BY_CAT procedure. The DROP_ BY_CAT procedure has the name of the category as its only input parameter. The following example drops all the outlines within the DEVELOPMENT category:
execute DBMS_OUTLN.DROP_BY_CAT('DEVELOPMENT');
To reassign outlines from an old category to a new category, use the UPDATE_BY_CAT procedure, as shown in the following example:
execute OUTLN_PKG.UPDATE_BY_CAT –
(oldcat => 'DEVELOPMENT', –
newcat => 'TEST');
To drop a specific outline, use the drop outline command.
If you have imported outlines generated in an earlier release, use the UPDATE_SIGNATURES procedure of DBMS_OUTLN to ensure the signatures are compatible with the current release's computation algorithm.
{mospagebreak title=Editing Stored Outlines}
You can use DBMS_OUTLN_EDIT to edit the stored outlines. The procedures within DBMS_ OUTLN_EDIT are detailed in the following table:
Changes the join position for the hint identified by outline name and hint number to the position specified. Inputs are name, hintno, and newpos.
Creates outline editing tables in the user's schema.
Drops the outline editing tables in the user's schema.
Generates a signature for the specified SQL text.
Refreshes the in-memory copy of the outline, synchronizing it with the edits made.
As of Oracle 10g, you no longer need to execute the CREATE_EDIT_ TABLES procedure because the edit tables are available as temporary tables in the SYSTEM schema. The procedure is still available, however, for backward compatibility.
You can use private outlines, which are seen only within your current session. Changes made to a private outline do not affect any other users. To enable private outline editing, set the USE_ PRIVATE_OUTLINES initialization parameter to TRUE. Use the REFRESH_PRIVATE_OUTLINE procedure to have your changes take effect for the in-memory versions of the outlines.
Using SQL Profiles
As of Oracle 10g, you can use SQL profiles to further refine the SQL execution plans chosen by the optimizer. SQL profiles are particularly useful when you are attempting to tune code that you do not have direct access to (for example, within a packaged application). The SQL profile consists of statistics that are specific to the statement, allowing the optimizer to know more about the exact selectivity and cost of the steps in the execution plan.
SQL profiling is part of the automatic tuning capability described in Chapter 8. Once you accept a SQL profile recommendation, it is stored in the data dictionary. As with stored outlines, you can use a category attribute to control its usage. See Chapter 8 for further details on the use of the automatic tools for detection and diagnosis of SQL performance issues.
Sizing Database Objects
Choosing the proper space allocation for database objects is critical. Developers should begin estimating space requirements before the first database objects are created. Afterward, the space requirements can be refined based on the actual usage statistics. In the following sections, you will see the space estimation methods for tables, indexes, and clusters. You'll also see methods for determining the proper settings for pctfree and pctused.
You can enable Automatic Segment Space Management when you create a tablespace; you cannot enable this feature for existing tablespaces. If you are using Automatic Segment Space Management, Oracle manages the pctused, freelists, and freelist groups parameters.
Why Size Objects?
You should size your database objects for three reasons:
- To preallocate space in the database, thereby minimizing the amount of future work required to manage objects' space requirements
- To reduce the amount of space wasted due to overallocation of space
- To improve the likelihood of a dropped free extent being reused by another segment
You can accomplish all these goals by following the sizing methodology shown in the following sections. This methodology is based on Oracle's internal methods for allocating space to database objects. Rather than rely on detailed calculations, the methodology relies on approximations that will dramatically simplify the sizing process while simplifying the long-term maintainability of the database.
{mospagebreak title=The Golden Rule for Space Calculations}
Keep your space calculations simple, generic, and consistent across databases. There are far more productive ways to spend your work time than performing extremely detailed space calculations that Oracle may ignore anyway. Even if you follow the most rigorous sizing calculations, you cannot be sure how Oracle will load the data into the table or index.
In the following section, you'll see how to simplify the space-estimation process, freeing you to perform much more useful DBA functions. These processes should be followed whether you are generating the default storage values for a dictionary managed tablespace or the extent sizes for locally managed tablespaces.
In an Oracle 10g database, you should be using locally managed tablespaces. If you have upgraded from a prior release that used dictionary-managed tablespaces, you should replace them with locally managed tablespaces.
The Ground Rules for Space Calculations
Oracle follows a set of internal rules when allocating space:
- Oracle only allocates whole blocks, not parts of blocks.
- Oracle allocates sets of blocks rather than individual blocks.
- Oracle may allocate larger or smaller sets of blocks depending on the available free space in the tablespace.
Your goal should be to work with Oracle's space-allocation methods instead of against them. If you use consistent extent sizes, you can largely delegate the space allocation to Oracle even in a dictionary-managed tablespace.
The Impact of Extent Size on Performance
There is no direct performance benefit gained by reducing the number of extents in a table. In some situations (such as in Parallel Query environments), having multiple extents in a table can significantly reduce I/O contention and enhance your performance. Regardless of the number of extents in your tables, they need to be properly sized.
Oracle reads data from tables in two ways: by RowID (usually immediately following an index access) and via full table scans. If the data is read via RowID, the number of extents in the table is not a factor in the read performance. Oracle will read each row from its physical location (as specified in the RowID) and retrieve the data.
If the data is read via a full table scan, the size of your extents can impact performance to a very small degree. When reading data via a full table scan, Oracle will read multiple blocks at a time. The number of blocks read at a time is set via the DB_FILE_MULTIBLOCK_READ_COUNT database initialization parameter and is limited by the operating system's I/O buffer size. For example, if your database block size is 8KB and your operating system's I/O buffer size is 128KB, you can read up to 16 blocks per read during a full table scan. In that case, setting DB_FILE_ MULTIBLOCK_READ_COUNT to a value higher than 16 will not change the performance of the full table scans.
Your extent sizes should take advantage of Oracle's ability to perform multiblock reads during full table scans. For example, if your operating system's I/O buffer is 128KB, your extent sizes should be a multiple of 128KB.
Consider a table that has ten extents, each of which is 128KB in size. For this example, the operating system's I/O buffer size is 128KB. To perform a full table scan, Oracle must perform ten reads (because 128KB is the operating system I/O buffer size). If the data is compressed into a single 1280KB extent, Oracle still must perform ten reads to scan the table. Compressing the extents results in no gain in performance.
If the table's extent size is not a multiple of the I/O buffer size, the number of reads required for full table scans may increase. For the same 1280KB table, you could create eight extents that are 160KB each. To read the first extent, Oracle will perform two reads: one for the first 128KB of the extent, and a second read for the last 32KB of the extent (reads cannot span extents). To read the whole table, Oracle must therefore perform two reads per extent, or 16 reads. Reducing the number of extents from ten to eight increases the number of reads by 60 percent.
To avoid paying a performance penalty for your extent sizes, you must choose from one of the following strategies:
- Create extents that are significantly larger than your I/O size. If the extents are very large, very few additional reads will be necessary even if the extent size is not a multiple of the I/O buffer size.
- Set DB_FILE_MULTIBLOCK_READ_COUNT to take full advantage of the I/O buffer size for your operating system. Note that setting this too high may make the optimizer think that full table scans are more efficient than they actually are, resulting in changes to existing execution plans.
- If you must create small extents, choose extent sizes that are a multiple of the I/O buffer size for your operating system.
If the I/O buffer size for your operating system is 128KB, your pool of extent sizes from which to choose are 128KB, 256KB, 512KB, 1MB, and so on. You can further reduce the pool of extent sizes from which to choose.
Use a pool of extent sizes that meets the following criterion: Every extent size will hold an integral multiple of every smaller extent size. The simplest implementation of this rule is to create extent sizes that increase by doubling: 1MB, 2MB, 4MB, 16MB, 32MB. To reduce the number of extent sizes to manage, you can quadruple the values instead of doubling: 1MB, 4MB, 16MB, and so on. Use these values for your locally managed tablespaces or rely on their automatic extent-sizing feature.
{mospagebreak title=Sizing the Objects}
To effectively manage your space, all you need to do is select a set of space values that meet the criteria described in the preceding sections. Once the space allocations are finalized, separate them by tablespace. Here's an example:
create tablespace DATA_1M
datafile '/u01/oracle/VLDB/data_1m.dbf'
size 100M
extent management local uniform size 1M;
create tablespace DATA_MEDIUM
datafile '/u01/oracle/VLDB/data_4m.dbf'
size 400M
extent management local uniform size 4M;
create tablespace DATA_LARGE
datafile '/u01/oracle/VLDB/data_16m.dbf' size 16000M
extent management local uniform size 16M;
In this example, three separate DATA tablespaces are created, with extent sizes of 1MB, 4MB, and 16MB. If you need to create a table 3MB in size, you can either create it with three 1MB extents in DATA_1M or with one 4MB extent in DATA_4M. A table that will grow to 10MB can be placed in DATA_4M.
As your tables grow in size, your default storage clauses will grow in a consistent fashion, following the space rules and your standards for extent sizes. DATA_64M would be next, followed by DATA_256M and DATA_1G. Use the same extent sizes across your databases to ease space management of your entire database environment.
As the extent sizes grow, the distribution of extent sizes across tablespaces will usually result in a separation of table types—small static tables will be isolated in the tablespaces with small extent sizes. Large transaction-processing tables (or their partitions) will be segregated to the large extent size tables, simplifying later management and tuning activities.
In the following sections you will see guidelines for estimations of the space usage for your objects. Because the target sizes (1MB, 4MB, 16MB, and so on) are not close together, the following estimations do not include highly detailed calculations.
You can set the database block size at the tablespace level. You must set the block size during the tablespace creation, and you must have already created a buffer cache for the block size. Be sure the extent sizes you choose account for the largest block size in use in the database. Limiting the usage of nonstandard block sizes in the database will simplify cross-database maintenance and your sizing procedures.
Estimating Space Requirements for Tables
As of Oracle Database 10g, you can use the CREATE_TABLE_COST procedure of the DBMS_ SPACE package to estimate the space required by a table. The procedure determines the space required for a table based on attributes such as the tablespace storage parameters, the tablespace block size, the number of rows, and the average row length. The procedure is valid for both dictionary-managed and locally managed tablespaces.
There are two versions of the CREATE_TABLE_COST procedure (it is overloaded so you can use the same procedure both ways). The first version has four input variables: tablespace_name, avg_row_size, row_count, and pct_free. Its output variables are used_bytes and alloc_bytes. The second version's input variables are tablespace_name, colinfos, row_count, and pct_free; its output variables are used_bytes and alloc_bytes. Descriptions of the variables are provided in the following table:
The tablespace in which the object will be created.
The average length of a row in the table.
The description of the columns.
The anticipated number of rows in the table.
The pctfree setting for the table.
The space used by the table's data. This value includes the overhead due to the pctfree setting and other block features.
The space allocated to the table's data, based on the tablespace characteristics. This value takes the tablespace extent size settings into account.
For example, if you have an existing tablespace named USERS, you can estimate the space required for a new table in that tablespace. In the following example, the CREATE_TABLE_COST procedure is executed with values passed for the average row size, the row count, and the pctfree setting. The used_bytes and alloc_bytes variables are defined and are displayed via the DBMS_ OUTPUT.PUT_LINE procedure:
calc_used_bytes NUMBER;
calc_alloc_bytes NUMBER;
tablespace_name => 'USERS',
avg_row_size => 100,
row_count => 5000,
pct_free => 10,
used_bytes => calc_used_bytes,
alloc_bytes => calc_alloc_bytes
DBMS_OUTPUT.PUT_LINE('Used bytes: '||calc_used_bytes);
DBMS_OUTPUT.PUT_LINE('Allocated bytes: '||calc_alloc_bytes);
The output of this PL/SQL block will display the used and allocated bytes calculated for these variable settings. You can easily calculate the expected space usage for multiple combinations of space settings prior to creating the table.
You must use the set serveroutput on command to enable the script's output to be displayed within a SQL*Plus session.
{mospagebreak title=Estimating Space Requirements for Indexes}
As of Oracle Database 10g, you can use the CREATE_INDEX_COST procedure of the DBMS_ SPACE package to estimate the space required by an index. The procedure determines the space required for a table based on attributes such as the tablespace storage parameters, the tablespace block size, the number of rows, and the average row length. The procedure is valid for both dictionary-managed and locally managed tablespaces.
For index space estimations, the input variables include the DDL commands executed to create the index and the name of the local plan table (if one exists). The index space estimates rely on the statistics for the related table. You should be sure those statistics are correct before starting the space-estimation process; otherwise, the results will be skewed.
The variables for the CREATE_INDEX_COST procedure are described in the following table:
The create index command
The number of bytes used by the index's data
The number of bytes allocated for the index's extents
The plan table to use (the default is NULL)
Because the CREATE_INDEX_COST procedure bases its results on the table's statistics, you cannot use this procedure until the table has been created, loaded, and analyzed. The following example estimates the space required for a new index on the BOOKSHELF table. The tablespace designation is part of the create index command passed to the CREATE_INDEX_COST procedure as part of the ddl variable value.
calc_used_bytes NUMBER;
calc_alloc_bytes NUMBER;
ddl => 'create index BOOK_CAT on BOOKSHELF '||
'(CategoryName) tablespace BOOKS_INDEX',
used_bytes => calc_used_bytes,
alloc_bytes => calc_alloc_bytes
DBMS_OUTPUT.PUT_LINE('Used bytes = '||calc_used_bytes);
DBMS_OUTPUT.PUT_LINE('Allocated bytes = '||calc_alloc_bytes);
The output of the script will show the used and allocated bytes values for the proposed index.
Estimating the Proper pctfree
The pctfree value represents the percentage of each data block that is reserved as free space. This space is used when a row that has already been stored in that data block grows in length, either by updates of previously NULL fields or by updates of existing values to longer values.
There is no single value for pctfree that will be adequate for all tables in all databases. To simplify space management, choose a consistent set of pctfree values:
- For indexes whose key values are rarely changed: 2
- For tables whose rows seldom change: 2
- For tables whose rows frequently change: 10 to 30
Why maintain free space in a table or index even if the rows seldom change? Oracle needs space within blocks to perform block maintenance functions. If there is not enough free space available (for example, to support a large number of transaction headers during concurrent inserts), Oracle will temporarily allocate part of the block's pctfree area. You should choose a pctfree value that supports this allocation of space. To reserve space for transaction headers in insert-intensive tables, set the initrans parameter to a nondefault value. In general, your pctfree area should be large enough to hold several rows of data.
Oracle automatically allows up to 255 concurrent update transactions for any data block, depending on the available space in the block.
Because pctfree is tied to the way in which updates occur in an application, determining the adequacy of its setting is a straightforward process. The pctfree setting controls the number of records that are stored in a block in a table. To see if pctfree has been set correctly, first determine the number of rows in a block. You can use the DBMS_STATS package to gather statistics. If the pctfree setting is too low, the number of chained rows will steadily increase. You can monitor the database's V$SYSSTAT view for increasing values of the "table fetch continued row" action; these indicate the need for the database to access multiple blocks for a single row.
When rows are moved due to inadequate space in the pctfree area, the move is called a row migration. Row migration will impact the performance of your transactions.
For indexes that will support a large number of inserts, pctfree may need to be as high as 50 percent.
Determining the Proper pctused
The pctused value determines when a used block is re-added to the list of blocks into which rows can be inserted. For example, consider a table that has a pctfree value of 20 and a pctused value of 50. When rows are inserted into the table, Oracle will keep 20 percent of each block free (for use by later updates of the inserted records). If you now begin to delete records from the block, Oracle will not automatically reuse the freed space inside the block. New rows will not be inserted into the block until the block's used space falls below its pctused percentage—in this case, 50 percent.
The pctused value, by default, is set to 40. If your application features frequent deletions and you use the default value for pctused, you may have many blocks in your table that are only 40 percent used.
For most systems, you can set pctused so that pctused plus pctfree equals 80. If your pctfree setting is 20 percent, for example, set your pctused value to 60 percent. That way, at least 60 percent of each block will be used, saving 20 percent of the block for updates and row extensions.
When creating tablespaces, you can enable Automatic Segment Space Management, in which case Oracle will manage the freelist dynamically. When Automatic Segment Space Management is enabled, you do not set the pctused setting.
Reverse Key Indexes
In a reverse key index, the values are stored backward—for example, a value of 2201 is stored as 1022. If you use a standard index, consecutive values are stored near each other. In a reverse key index, consecutive values are not stored near each other. If your queries do not commonly perform range scans and you are concerned about I/O contention in your indexes, reverse key indexes may be a tuning solution to consider. When sizing a reverse key index, follow the same method used to size a standard index, as shown in the prior sections of this chapter.
Sizing Bitmap Indexes
If you create a bitmap index, Oracle will dynamically compress the bitmaps generated. The compression of the bitmap may result in substantial storage savings. To estimate the size of a bitmap index, estimate the size of a standard (B*tree) index on the same columns using the methods provided in the preceding sections of this chapter. After calculating the space requirements for the B*tree index, divide that size by 10 to determine the most likely maximum size of a bitmap index for those columns. In general, bitmap indexes will be between 2 and 10 percent of the size of a comparable B*tree index. The size of the bitmap index will depend on the variability and number of distinct values in the indexed columns.
Sizing Index-Organized Tables
An index-organized table is stored sorted by its primary key. The space requirements of an index-organized table closely mirror those of an index on all of the table's columns. The difference in space estimation comes in calculating the space used per row, because an index-organized table does not have RowIDs.
The following listing gives the calculation for the space requirement per row for an index-organized table (note that this storage estimate is for the entire row, including its out-of-line storage):
Row length for sizing = Average row length
+ number of columns
+ number of long columns
+ 2 header bytes
Enter this value as the row length when using the CREATE_TABLE_COST procedure for the index-organized table.
{mospagebreak title=Sizing Tables That Contain Large Objects (LOBs)}
LOB data (in BLOB or CLOB datatypes) is usually stored apart from the main table. You can use the lob clause of the create table command to specify the storage for the LOB data. In the main table, Oracle stores a lob locator value that points to the LOB data. When the LOB data is stored out of line, between 36 and 86 bytes of control data (the lob locator) remain inline in the row piece.
Oracle does not always store the LOB data apart from the main table. In general, the LOB data is not stored apart from the main table until the LOB data and the lob locator value total more than 4000 bytes. Therefore, if you will be storing short LOB values, you need to consider their impact on the storage of your main table. If your LOB values are less than 4000 characters, you may be able to use VARCHAR2 datatypes instead of LOB datatypes for the data storage.
Sizing Partitions
You can create multiple partitions of a table. In a partitioned table, multiple separate physical partitions constitute the table. For example, a SALES table may have four partitions: SALES_ NORTH, SALES_SOUTH, SALES_EAST, and SALES_WEST. You should size each of those partitions using the table-sizing methods described earlier in this chapter. You should size the partition indexes using the index-sizing methods shown earlier in this chapter.
Using Temporary Tables
You can create temporary tables to hold temporary data during your application processing. The table's data can be specific to a transaction or maintained throughout a user's session. When the transaction or session completes, the data is truncated from the table.
To create a temporary table, use the create global temporary table option of the create table command. To delete the rows at the end of the transaction, specify on commit delete rows, as shown here:
create global temporary table MY_TEMP_TABLE (Name VARCHAR2(25),
Street VARCHAR2(25),
City VARCHAR2(25))
on commit delete rows;
You can then insert rows into MY_TEMP_TABLE during your application processing. When you commit, Oracle will truncate MY_TEMP_TABLE. To keep the rows for the duration of your session, specify on commit preserve rows instead.
From the DBA perspective, you need to know if your application developers are using this feature. If they are, you need to account for the space required by their temporary tables during their processing. Temporary tables are commonly used to improve processing speeds of complex transactions, so you may need to balance the performance benefit against the space costs. You can create indexes on temporary tables to further improve processing performance, again at the cost of increased space usage.
Temporary tables and their indexes do not acquire any space until the first insert into them occurs. When they are no longer in use, their space is deallocated.
Supporting Tables Based on Abstract Datatypes
User-defined datatypes, also known as abstract datatypes, are a critical part of object-relational database applications. Every abstract datatype has related constructor methods users execute to manipulate data in tables. Abstract datatypes define the structure of data—for example, an ADDRESS_ TY datatype may contain attributes for address data, along with methods for manipulating that data. When you create the ADDRESS_TY datatype, Oracle will automatically create a constructor method called ADDRESS_TY. The ADDRESS_TY constructor method contains parameters that match the datatype's attributes, facilitating inserts of new values into the datatype's format. In the following sections, you will see how to create tables that use abstract datatypes, along with information on the sizing and security issues associated with that implementation.
You can create tables that use abstract datatypes for their column definitions. For example, you could create an abstract datatype for addresses, as shown here:
create type ADDRESS_TY as object
(Street VARCHAR2(50),
City VARCHAR2(25),
State CHAR(2),
Zip NUMBER);
Once the ADDRESS_TY datatype has been created, you can use it as a datatype when creating your tables, as shown in the following listing:
create table CUSTOMER
(Name VARCHAR2(25),
Address ADDRESS_TY);
When you create an abstract datatype, Oracle creates a constructor method for use during inserts. The constructor method has the same name as the datatype, and its parameters are the attributes of the datatype. When you insert records into the CUSTOMER table, you need to use the ADDRESS_TY datatype's constructor method to insert Address values, as shown here:
insert into CUSTOMER values ('Joe',ADDRESS_TY('My Street', 'Some City', 'ST', 10001));
In this example, the insert command calls the ADDRESS_TY constructor method in order to insert values into the attributes of the ADDRESS_TY datatype.
The use of abstract datatypes increases the space requirements of your tables by 8 bytes for each datatype used. If a datatype contains another datatype, you should add 8 bytes for each of the datatypes.
{mospagebreak title=Using Object Views}
The use of abstract datatypes may increase the complexity of your development environment. When you query the attributes of an abstract datatype, you must use a syntax that is not used against tables that do not contain abstract datatypes. If you do not implement abstract datatypes in all your tables, you will need to use one syntax for some of your tables and a separate syntax for other tables—and you will need to know ahead of time which queries use abstract datatypes.
For example, the CUSTOMER table uses the ADDRESS_TY datatype described in the previous section:
create table CUSTOMER
(Name VARCHAR2(25),
Address ADDRESS_TY);
The ADDRESS_TY datatype, in turn, has four attributes: Street, City, State, and Zip. If you want to select the Street attribute value from the Address column of the CUSTOMER table, you may write the following query:
select Address.Street from CUSTOMER;
However, this query will not work. When you query the attributes of abstract datatypes, you must use correlation variables for the table names. Otherwise, there may be an ambiguity regarding the object being selected. To query the Street attribute, use a correlation variable (in this case, "C") for the CUSTOMER table, as shown in the following example:
select C.Address.Street from CUSTOMER C;
As shown in this example, you need to use correlation variables for queries of abstract datatype attributes even if the query only accesses one table. There are therefore two features of queries against abstract datatype attributes: the notation used to access the attributes and the correlation variables requirement. In order to implement abstract datatypes consistently, you may need to alter your SQL standards to support 100-percent usage of correlation variables. Even if you use correlation variables consistently, the notation required to access attribute values may cause problems as well, because you cannot use a similar notation on tables that do not use abstract datatypes.
Object views provide an effective compromise solution to this inconsistency. The CUSTOMER table created in the previous examples assumes that an ADDRESS_TY datatype already exists. But what if your tables already exist? What if you had previously created a relational database application and are trying to implement object-relational concepts in your application without rebuilding and re-creating the entire application? What you would need is the ability to overlay object-oriented (OO) structures such as abstract datatypes on existing relational tables. Oracle provides object views as a means for defining objects used by existing relational tables.
If the CUSTOMER table already exists, you could create the ADDRESS_TY datatype and use object views to relate it to the CUSTOMER table. In the following listing, the CUSTOMER table is created as a relational table, using only the normally provided datatypes:
create table CUSTOMER
(Name VARCHAR2(25) primary key, Street VARCHAR2(50),
City VARCHAR2(25),
State CHAR(2),
Zip NUMBER);
If you want to create another table or application that stores information about people and addresses, you may choose to create the ADDRESS_TY datatype. However, for consistency, that datatype should be applied to the CUSTOMER table as well. The following examples will use the ADDRESS_TY datatype created in the previous section.
You can create an object view based on the CUSTOMER table, using any datatype you have defined. To create an object view, use the create view command. Within the create view command, specify the query that will form the basis of the view. The code for creating the CUSTOMER_OV object view is shown in the following listing:
create view CUSTOMER_OV (Name, Address) as select Name,
ADDRESS_TY(Street, City, State, Zip)
from CUSTOMER;
The CUSTOMER_OV view will have two columns: the Name and the Address columns (the latter is defined by the ADDRESS_TY datatype). Note that you cannot specify object as an option within the create view command.
Several important syntax issues are presented in this example. When a table is built on existing abstract datatypes, you select column values from the table by referring to the names of the columns (such as Name) instead of their constructor methods. When creating the object view, however, you refer to the names of the constructor methods (such as ADDRESS_TY) instead. Also, you can use where clauses in the query that forms the basis of the object view. You can therefore limit the rows that are accessible via the object view.
If you use object views, you as the DBA will administer relational tables the same way as you did before. You will still need to manage the privileges for the datatypes (see the following section of this chapter for information on security management of abstract datatypes), but the table and index structures will be the same as they were before the creation of the abstract datatypes. Using the relational structures will simplify your administration tasks while allowing developers to access objects via the object views of the tables.
You can also use object views to simulate the references used by row objects. Row objects are rows within an object table. To create an object view that supports row objects, you need to first create a datatype that has the same structure as the table, as shown here:
create or replace type CUSTOMER_TY as object
(Name VARCHAR2(25),
Street VARCHAR2(50),
City VARCHAR2(25),
State CHAR(2),
Zip NUMBER);
Next, create an object view based on the CUSTOMER_TY type while assigning OID (object identifier) values to the records in CUSTOMER:
create view CUSTOMER_OV of CUSTOMER_TY
with object identifier (Name) as
select Name, Street, City, State, Zip
from CUSTOMER;
The first part of this create view command gives the view its name (CUSTOMER_OV) and tells Oracle that the view's structure is based on the CUSTOMER_TY datatype. An object identifier, also known as an OID,identifies the row object. In this object view, the Name column will be used as the OID.
If you have a second table that references CUSTOMER via a foreign key/primary key relationship, you can set up an object view that contains references to CUSTOMER_OV. For example, the CUSTOMER_CALL table contains a foreign key to the CUSTOMER table, as shown here:
create table CUSTOMER_CALL
(Name VARCHAR2(25),
Call_Number NUMBER,
Call_Date DATE,
constraint CUSTOMER_CALL_PK
primary key (Name, Call_Number),
constraint CUSTOMER_CALL_FK foreign key (Name)
references CUSTOMER(Name));
The Name column of CUSTOMER_CALL references the same column in the CUSTOMER table. Because you have simulated OIDs (called pkOIDs) based on the primary key of CUSTOMER, you need to create references to those OIDs. Oracle provides an operator called MAKE_REF that creates the references (called pkREFs). In the following listing, the MAKE_REF operator is used to create references from the object view of CUSTOMER_CALL to the object view of CUSTOMER:
create view CUSTOMER_CALL_OV as
select MAKE_REF(CUSTOMER_OV, Name) Name,
from CUSTOMER_CALL;
Within the CUSTOMER_CALL_OV view, you tell Oracle the name of the view to reference and the columns that constitute the pkREF. You could now query CUSTOMER_OV data from within CUSTOMER_CALL_OV by using the DEREF operator on the Customer_ID column:
select DEREF(CCOV.Name)
from CUSTOMER_CALL_OV CCOV
where Call_Date = TRUNC(SysDate);
You can thus return CUSTOMER data from your query without directly querying the CUSTOMER table. In this example, the Call_Date column is used as a limiting condition for the rows returned by the query.
Whether you use row objects or column objects, you can use object views to shield your tables from the object relationships. The tables are not modified; you administer them the way you always did. The difference is that the users can now access the rows of CUSTOMER as if they are row objects.
From a DBA perspective, object views allow you to continue creating and supporting standard tables and indexes while the application developers implement the advanced object-relational features as a layer above those tables.


text:
The Verge launched yesterday in the early a.m. without a hitch: a sleek tech news site complete with longer analysis, forums, a product database and a Q&A with insanely-popular Apple blogger John Gruber to ensure a nice inaugural traffic boost.
"For me, this was an idea that was forming for a long time," said Josh Topolsky, former Engadget editor and current editor and co-founder of the new site. The editor—Jimmy Fallon's gadget consultant and electronic musician—was getting notes from co-workers as he spoke to Betabeat this morning by phone ("26, 27 editorially-focused employees? Okay, I'm being told it's 29"). Read More

subset: commoncrawl


text:
French Unit May Work With UK UAV Team in Afghanistan
Britain plans to send the Watchkeeper tactical UAV to Afghanistan this year, possibly with a French Army unit working with the British Army team flying the drone, a senior British officer said on April 3.
Britain is pulling troops out of Afghanistan this year and still has 5,000 soldiers in the field. France brought back combat troops in 2012.
Meanwhile, the French Army is full of hope Paris will order the unmanned aerial vehicle, a senior French officer said at a high-level defense conference hosted by the Franco-British Council.
Thales UK builds the Watchkeeper, based on Elbit Systems Hermes 450. The UAV moved closer to deployment in the field after an initial release to service was granted on March 5.
The French Army is testing the Watchkeeper for a potential order of the surveillance system. The 61st artillery regiment attached a team of noncommissioned officers to a British Royal Artillery unit flying the UAV in Wales.
The military on both sides of the Channel might be marching to the same beat, but it is unclear whether the governments will deliver satisfaction to the army high command and industry.
A French decision on acquiring the Watchkeeper has been tied to hopes Britain will order a French infantry fighting vehicle, the Véhicule Blindé de Combat dInfanterie (VBCI) built by state-owned Nexter and Renault Trucks Defense, French media have reported.
A French Army spokesman was not available for comment.
A linking of the two deals would be very important for defense firms, an industry executive said.
A big hurdle for the UK to order the armored vehicle is pressure on the defense budget, a British parliamentarian said.
In London, a Defence Ministry spokeswomen declined to be drawn on whether a final decision had been made to deploy Watchkeeper to Afghanistan.
?The deployment of Watchkeeper to Afghanistan or any location is an operational decision taken at the time to meet the operational requirement, the spokeswoman said.
?The British have used a Thales UK-led intelligence, surveillance, target acquisition and reconnaissance system, based on a by-the-hour payment in Afghanistan, using an Elbit Hermes 450 unmanned aircraft. The service has been used to fill the gap created by delays to the Watchkeeper program.
The 32nd Royal Artillery Regiment, the unit training to operate Watchkeeper, was not among the units recently named by the British for the final deployment to Afghanistan before combat troops depart. That does not mean the unit will not be deployed at some stage during the next few months, military sources said.?
Britain is starting to revive a move toward procurement of a fighting vehicle, after dropping in 2008 a plan to buy the Piranha V vehicle from General Dynamics UK.
In Pariss attempt to sell the VBCI to London, a VBCI was sent over for the Jan. 31 bilateral summit at Brize Norton Royal Air Force base, when President François Hollande met Prime Minister David Cameron.
A new phase was opened by that last summit, said chief executive Antoine Bouvier of European missile maker MBDA.
The announcements of industrial cooperation at that summit was considered a revival of the 2010 Lancaster House bilateral defense treaty, which had stalled as a French election returned a new administration two years later.
The January summit announced plans to sign an order for an anti-ship missile, the anti-navire léger/future air-to-surface guided weapon (ANL/FASGW), along with studies for a future unmanned combat aerial vehicle and an underwater anti-mine drone.
The missile deal shows the need for cutting duplication in the European defense industry and accept a mutual dependence on key technology, Bouvier said.
A resistance to that dependence will mean future weapons wont be affordable, Bouvier said.
For MBDA, one of the lessons learned was the need to take a long term vision, one that took into account the different political timetables on both sides of the Channel, he said.
Without this vision it would have been absolutely impossible to work, he said. Timing is an issue, more than funding.
The Lancaster House treaty is above politics, a senior French politician said. The 50-year accord set a long term vision for planning despite political differences between a conservative-led government in London and a socialist administration in Paris.
Hollande sees defense is important, a French parliamentarian said.
The president reportedly offered Jean-Yves Le Drian the prime ministers job in last weeks government reshuffle, but the defense minister turned down the offer to stay on in the present post.
The annual defense conference held by the Franco-British Council is a high level meeting attended by British and French defense ministers, army chiefs of staff, senior executives and officials.
Source: Andrew Chuter contributed to this report from London, defensenews.com News 5 April 2014
Photo: The French Army officials hope the government will purchase the Watchkeeper UAV. (Photo by UK Ministry of Defence)


text:
How to Use the Context
Inquiry Question
In 1775, British Gen. John Burgoyne identified the Lake Champlain-Hudson River corridor, an historic gateway between Canada and the northern colonies of British North America, as the primary target for British military operations in North America. If the British army could control it from Canada to New York City, they could cut New England off from the rest of the colonies, secure the route for supplies and reinforcements from Canada, and strengthen Indian alliances, thereby crushing the rebellion quickly and decisively.
In 1777, the British planned a two-pronged attack to secure the corridor. Armies under General Burgoyne and Lt. Colonel Barry St. Leger would use the Hudson-Champlain corridor and the Mohawk Valley respectively to fall upon Albany. They would then join forces with their commander Gen. Sir William Howe in New York City, and together they would make a concerted effort to quell the rebellion. On June 17, 1777, Burgoyne led a combined force of 8,000 British, German, Loyalist, and Native American troops from St. Johns (now St. Jean), Canada into New York. Moving southward, Burgoyne took Fort Ticonderoga and brushed aside most of the American rear guard opposing him.
Then, the British plan began to run into problems. St. Leger's force moved up the Mohawk Valley and laid siege to American Fort Schuyler (Fort Stanwix) on August 3, 1777, but retreated after the Battle of Oriskany because of losses and the approach of an American relief force. Howe was at sea, preparing to attack the rebel capital of Philadelphia. He had left only a small force under the command of Sir Henry Clinton in New York City. Burgoyne's army was on its own.
Maj. Gen. Horatio Gates, commander of the Northern Department of the Continental Army, led his 9,000 Americans from the mouth of the Mohawk River to a position 30 miles north of Albany, near Saratoga, overlooking the Hudson River. There they fortified Bemis Heights, where the road to Albany squeezes between hills and river. Gates' soldiers built an extensive fortified line on the heights and on the river flats. Burgoyne was forced to fight the Americans on the ground on which they had chosen to fight. At a small town in the wilderness in northern New York, farmers, merchants, and tradesmen changed the course of world history.


text:
Accessibility tools
Service tools
Language selector
Navigation path
Left navigation
Additional tools
Other available languages: none
European Commission
Brussels, 10 January 2013
Commission welcomes European Parliament rapporteurs' support for strong EU data protection rules
European Parliament rapporteurs today presented two draft reports on the reform of the EU's data protection rules proposed by the European Commission just a year ago (see IP/12/46 and MEMO/12/41). In their reports, Jan-Philipp Albrecht, rapporteur for the proposed Data Protection Regulation for the Civil Liberties, Justice and Home Affairs Committee (LIBE) of the European Parliament, and, Dimitrios Droutsas, rapporteur for the proposed Data Protection Directive for the law enforcement sector, express their full support for a coherent and robust data protection framework with strong end enforceable rights for individuals. They also stress the need for a high level of protection for all data processing activities in the European Union to ensure more legal certainty, clarity and consistency.
"The protection of personal data is a fundamental right for all Europeans. Opinion polls show that individuals do not always feel in full control of their data. Policy makers and companies must therefore do better," said Vice-President Viviane Reding, the EU's Justice Commissioner. "I am glad to see that the European Parliament rapporteurs are supporting the Commission's aim to strengthen Europe's data protection rules which currently date back to 1995 – pre-Internet age. A strong, clear and uniform legal framework will help unleashing the potential of the Digital Single Market and foster economic growth, innovation and job creation in Europe."
In their reports on the Commission's proposals for a general Data Protection Regulation and a Directive for the law enforcement sector the Members of the European Parliament support the proposed package approach. They stress the need to advance negotiations swiftly on both instruments at the same time.
The European Parliament rapporteurs, building on previous reports by the European Parliament such as the Axel Voss report (MEMO/11/489), support the objectives of the reform, which are: to establish a comprehensive approach to data protection, to strengthen online privacy rights and to do away with the current fragmentation of 27 different national data protection laws which are costly and burdensome for businesses operating on Europe's single market.
Some of the amendments which the rapporteurs of the Parliament are proposing in their reports aim at reinforcing individuals' rights, including the right to be forgotten.
Some of the key points of the rapporteurs' reports include:
Next steps: On 18 January the data protection package will be high on the agenda of the informal Justice Council taking place in Dublin.
The European Parliament plenary vote is expected around April.
The European Commission will continue to work very closely with the rapporteurs of the European Parliament and with the Council to support the Parliament and the Irish EU Presidency in their endeavour to achieve a political agreement on the data protection reform by the end of the Irish Presidency.
In the digital age, the collection and storage of personal information are essential. Data is used by all businesses – from insurance firms and banks to social media sites and search engines. In a globalised world, the transfer of data to third countries has become an important factor in daily life. There are no borders online and cloud computing means data may be sent from Berlin to be processed in Boston and stored in Bangalore.
74% of Europeans think that disclosing personal data is increasingly part of modern life, but at the same time, 72% of Internet users are worried that they give away too much personal data. They feel they are not in complete control of their data. Fading trust in online services and tools holds back the growth of the digital economy and Europe's digital single market.
On 25 January 2012 the European Commission proposed a comprehensive reform of the EU's 1995 data protection rules to strengthen online privacy rights and boost Europe's digital economy. The Commission's proposals update and modernise the principles enshrined in the 1995 Data Protection Directive to bring them into the digital age. They include a proposal for a Regulation setting out a general EU framework for data protection and a proposal for a Directive on protecting personal data processed for the purposes of prevention, detection, investigation or prosecution of criminal offences and related judicial activities (IP/12/46).
The Commission proposals follow up on the European Parliament report by Axel Voss (MEMO/11/489) which called on the Commission to reform European data protection rules.
The right to the protection of personal data is explicitly recognised by Article 8 of the EU's Charter of Fundamental Rights and by the Lisbon Treaty. The Treaty provides a legal basis for rules on data protection for all activities within the scope of EU law under Article 16 (Treaty on the Functioning of the European Union).
For more information
European Parliament report on the Data Protection Regulation:
European Parliament report on the Data Protection Directive:
Press pack: data protection reform:
European Commission – data protection:
Homepage of Vice-President Viviane Reding, EU Justice Commissioner:
Justice Directorate General Newsroom:
Follow the Vice-President on Twitter:
Side Bar


text:
inline assembly, gcc attributes, linker scripts … and a kernel macro!
February 25, 2011
Here are some things I learned while reading the Linux kernel source code(some of which took me a couple of hours of googling and searching through documentation, git commit posts, threads on lkml etc etc :P).
1)You cannot write extended toplevel inline assembly, ie when you want to use extended inline assembly to pass the value of some C variables or constants, you can only do it inside a function. And as I found out, someone had filed a bug at the GCC bugzilla. So something like this
static const char foo[] = "Hello, world!"; enum { bar = 17 }; asm(".pushsection baz; .long %c0, %c1, %c2; .popsection" : : "i" (foo), "i" (sizeof(foo)), "i" (bar));
won't work.
2)I didn't search very much the documentation about inline asm, but I couldn't find what's the difference between %c0 and %0. It's used at the example code above, and in a kernel macro I saw. I understood that it had to do with some 'constant casting', but I couldn't find anywhere the exact difference. So I wrote a simple piece of code to clarify that:
main() { asm("movl %0, %%eax; movl %c0, %%eax" :: "i" (0xff) ); }
and after
gcc -S foo.c
I get:
movl $255, %eax movl 255, %eax
So %0 is used when we want an integer constant to be used as an immediate value in instructions like mov, add etc, which means that it should be prefixed with $, while %c0 is used when we want the number itself for instructions like .long, .size etc which demand an absolute expression/value as 'arguments'.
3) When using the section attribute on a variable, in order to change the section it belongs, you cannot change the section's type to nobits, it'll be progbits by default. progbits means that the section will actually get space allocated inside the executable(like text and data sections), in contrast to nobits sections like bss for example.
i.e. you can't do this
static char foo __attribute__(section("bar", nobits));
4)I also found out about the pushsection and popsections asm directives, which manipulate the ELF section stack, and seem to be very useful in certain occasions. pushsection obviously pushes the current section to the section stack, and replace it with the argument passed to the directive, while popsection replaces the current section with the section on top of the section stack.
5)Finally the 'used' attribute, which indicates that the symbol(function in our case) is actually used/called/referenced even if the compiler can't 'see' it(otherwise I think that the compiler optimizations would omit code generation for that function).
And now a kernel macro which includes all of the above:
/* * Reserve space in the brk section. The name must be unique within * the file, and somewhat descriptive. The size is in bytes. Must be * used at file scope. * * (This uses a temp function to wrap the asm so we can pass it the * size parameter; otherwise we wouldn't be able to. We can't use a * "section" attribute on a normal variable because it always ends up * being @progbits, which ends up allocating space in the vmlinux * executable.) */ #define RESERVE_BRK(name,sz) \ static void __section(.discard.text) __used \ __brk_reservation_fn_##name##__(void) { \ asm volatile ( \ ".pushsection .brk_reservation,\"aw\",@nobits;" \ ".brk." #name ":" \ " 1:.skip %c0;" \ " .size .brk." #name ", . - 1b;" \ " .popsection" \ : : "i" (sz)); \ }
And a bit more detailed explanation from the git commit
The C definition of RESERVE_BRK() ends up being more complex than
one would expect to work around a cluster of gcc infelicities:
The first attempt was to simply try putting __section(.brk_reservation)
on a variable. This doesn't work because it ends up making it a
@progbits section, which gets actual space allocated in the vmlinux
The second attempt was to emit the space into a section using asm,
but gcc doesn't allow arguments to be passed to file-level asm()
statements, making it hard to pass in the size.
The final attempt is to wrap the asm() in a function to allow
it to have arguments, and put the function itself into the
.discard section, which vmlinux*.lds drops entirely from the
emitted vmlinux.
Another thing to notice is that the wrapper function is put in the .discard.text section, which according to the vmlinux.lds(the linker script used to generate/link the vmlinux executable) will be discarded and thus not included in the executable.
From scripts/module-common.lds:
/* * Common module linker script, always used when linking a module. * Archs are free to supply their own linker scripts. ld will * combine them automatically. */ SECTIONS { /DISCARD/ : { *(.discard) } }
The purpose of the RESERVE_BRK macro, and the brk-like allocator for very early memory allocations needed during the kernel boot process is an interesting story too(which means another post coming soon)! 😉
3 Responses to "inline assembly, gcc attributes, linker scripts … and a kernel macro!"
March 10, 2011 at 05:04
Thanks, I am a Linux kernel hacker and still get lost with inline assembly. I came across "%c0" and could not remember what it was used for. I figured it had to do something with constants, but wanted to make sure and not just assume. Doing a quick search brought me to this blog. Thanks for the verification!
June 24, 2012 at 21:32
Many thanks! I needed to be able to define mutli-gigabytes objects as "nobits". It's not that you saved me time, I am sure I wouldn't have found a solution.


text:
The Laguna Plein Air Painters Assn. was founded in 1996 by local artists Ken Auster, Jacobus Bass, Cynthia Britain, Saim Caglayan and John Cosby to restore landscapes to artistic prominence.
It has grown beyond their wildest dreams, with 300 members and the presentation this year of the 14th annual Laguna Beach Plein Air Painting Invitational, in which 40 artists from across the country participated.
"What really pleases me is that one visiting artist said Laguna's invitational is one of the two top plein air events in Northern America," said invitational President Greg Vail.
"Plein air" is a derivation of the French phrase for open air, which is where public events in the weeklong annual invitational were held.
Artists pick their sites in the tradition of the Laguna Beach Art Society, founded in 1918, which established Laguna as an art colony.
The week also featured outdoor demonstrations by artists and paint-outs for children in Heisler Park, students at Laguna College of Art & Design and one sponsored by the Crystal Cove Alliance Art Council.
Paint-outs are groups of artists painting or drawing together in myriad styles.
Other highlights of the week included a fine art lecture by Jean Stern, executive director of the Irvine Museum, and a private tour by the Laguna Canyon Foundation.
Work created during the week were displayed Saturday on the walls of Laguna Art Museum, which evolved from a sales gallery for the Laguna Beach Art Assn., which was founded in 1918 and claims to be the oldest cultural institution in Orange County.
The museum's permanent collection contains works by the early Laguna Beach painters such as plein air luminaries Edgar Payne and Frank Cuprien.
The invitational adds to Laguna's artistic reputation, according to City Councilwoman Elizabeth Pearson, an early and enthusiastic supporter of LPAPA.
"This event brings national recognition to our city," Pearson said.
Pearson was among the guests at the Collectors' Soiree, held Saturday night at the museum that culminated the invitational.
The soiree, which included dinner, was organized by Sarah Strozza and Rosemary Swimm, assisted by committee members Lyn Burke, past museum President Robert Hayden III, Jan Kaplan, Linda Stern, Mary Linda Strotkamp and Vail.
Laguna Art Museum Executive Director Malcolm Warner welcomed guests and expressed his thanks to host families, which included Sande and Richard Schwarzstein, Mary and Joe Ferguson, Bill and Carol Hanke, Katie and Kirk Milette and Nancy Bushnell.
He also said thanks to the artists' sponsors and event sponsors and collaborators, such as Laguna Nursery, which provided the floral centerpieces, 14 Hands for the wine and the St. Regis for the raffle prize.
The Dan Rechard Trio entertained.
The soiree was an opportunity for admirers to peruse the works, buy them and applaud the award winners.
Rick Delanty was the winner of the Surfrider Foundation Award.
Scott Ferguson, Laguna Canyon Foundation Conservation Fund director, presented the group's award to John Burton.
"Laguna Canyon is a favorite site for artists," Ferguson said.
The Outdoorpainter.com Award was presented by Vanessa Rothe, California editor of "Fine Art Connoisseur" to Gavin Brooks.
"This is an amazing event in my own hometown," said Rothe, in praise of the invitational.
Burton picked up the second of his three awards from Plein Air and Fine Art Connoisseur magazine, also presented by Rothe.
Scott Prior was the recipient of Fine Art Connoisseur Award, sponsored by the magazines.
Participating artists selected Josh Clare for the Artists Choice Award, presented by Vail.
The Randy Higbee Gallery Awards went to Burton (his third of the night), Randall Sexton, Peggy Kroll-Roberts and Hiu Lai Chong, who also won the $500 Collectors' Choice Award voted on by collectors at the soiree and presented by Warner.
"She is very popular, and she is good," said artist Thomas Jefferson Kitt.
Laura Davick presented the $500 Crystal Cove Founders Prize to Michael Obermeyer.
Frank Serrano won the $500 Southwestart Best of Quick Draw, sponsored by Southwestart Magazine and presented by Warner.
Laguna College of Art & Design Next Generation Scholarships were presented by Dominic Ietto, LCAD's vice president of development and communication, to Stephen Morrison, Lan Duong and Zoey Frank.
Yvone Boseker and her daughter, Andrea Boone, presented Jim Wodark with the $1,000 Dr. Edward H. Boseker Award.
The $2,500 Laguna Art Museum Award was presented by Warner to Debra Huse. The choice was popular. She had spent all day in a boat painting "Enchanted Kelp."
The final award was the $5,000 Laguna Beach Plein Air Painting Invitational Best in Show, sponsored by the association and presented by Stern, who was joined at the microphone by Vail and Pearson.
"This is the magical moment," said Vail, leading up to Stern's announcement of the winner, Billy O'Donnell, an East Coast artist.
Buyers included Toni and Len Woods, who only had to tote Burton's big canvas of "Laguna Canyon" across Cliff Drive to Indian Territory, the Native American shop and museum they own.
"This view has always been mystical to me, and he painted it," she said.
Stern went home with Chong's stunning "Heisler Nights."
Paintings were still wet, and buyers were advised not to touch the surfaces.
Among the guests at the soiree: Chuck James, past president of LAM. Shortly after James moved from the East Coast to Laguna, he met the Schwarzsteins, who invited him and his late wife, Marcia, to a museum event.
"I got active and the next thing I knew I was on the board," James said.
James recruited Matt and Mary Lawson as museum members.
"And he is still living it down," said Matt Lawson, who was seated with James and the Schwarzsteins at the dinner.
Also: Francine Scinto, Linda Seville, Lynn Vail, Jock Stalker, Cheryl and Laguna Chamber of Commerce President Michael Kinsman, Eric Jessen, Rick Balzar and Harry Bithell, fully recovered from chairing the Rotary's successful Classic Car Show.
OUR LAGUNA is a regular feature of the Laguna Beach Coastline Pilot. Contributions are welcomed. Call (949) 302-1469 or email firstname.lastname@example.com with Attn. Barbara Diamond in the subject line.


text:
We all know that the retirement of the baby-boom generation is leaving the construction industry in a lurch. As experienced employees leave the business, construction firms must scramble to recruit qualified replacements. But in addition to a resume and interview, how do you know your candidate's qualifications are the real deal?
Start with a background check, advises Stephen Spain, COO, Industry People Group, a Des Moines, Iowa-based online recruitment and screening agency for the mechanical, electrical, and plumbing fields. Begin with verifying the candidate's driving record, social security number, and criminal history. There are services and search engines that can help you screen potential employees, such as sex-offender registries, criminal databases, and information banks to verify such things as drivers' licenses and employment and educational histories.
But the process shouldn't end there. To be even more thorough, once a candidate passes the initial screening, you'll want to conduct a skills test as part of the interview process. For example, starting next month, Industry People Group's Web site, MEPatwork.com, will offer online testing. If you want to keep the interview in-house, you can ask your experienced employees to come up with scenarios for problem solving. Either way, don't be afraid to ask specific, job-related questions. Remember, you shouldn't believe everything you read on a resume.


text:
Help EAAA Get a New Van!
Eastern Area Agency on Aging needs your help to get a free van, and all you have to do is vote twice, between 10 AM and 11:59 PM today, October 8, 2013. You can do it by voting HERE
Toyota is giving away two cars per day to non profit agencies based upon popular vote. Eastern Area Agency on Aging wants a van to help pick up and deliver pet food to seniors or their loved pets and to help seniors get their pets to the vet..
There is a special bond between senior citizens and their pets. When spouses die and children leave home, the loving and loyal animal remains. It is the daily companion for the elderly person who otherwise would be alone. Sometimes finances force a senior to make difficult decisions such as giving up the animal because they can no longer afford to feed it. EAAA's Furry Friends Food Bank strives to prevent the separation of senior and beloved pet by providing supplemental pet food. Donations of damaged containers of pet food come from big box stores across our 13,000 sq. mile, four county area. If a volunteer is unavailable to collect the food at the store's designated time, we risk losing it which has a devastating impact on the seniors and their pets. A van will ensure consistent and timely pick-ups. We also will transport seniors, who no longer drive, to the veterinarian with their pets to ensure the animal stays healthy. We currently cannot provide this critical service.


text:
In Play Magazine
All Proceeds Help Pay for Memberships and Programming for Youth in Need
The Detroit Pistons announced today that the 2011 Pistons Care Telethon benefiting all Boys & Girls Clubs in Michigan will take place on Friday, March 18. The team is devoting the entire day leading up to the Pistons game against the New York Knicks, including their in-arena presentation and game broadcasts, to raise money for Boys & Girls Clubs. The telethon begins at 5 a.m. with live radio and television broadcasts at The Palace and runs throughout the day, culminating with the Pistons-Knicks game at 7:30 p.m., broadcast on Fox Sports Detroit and 97.1 The Ticket.
Boys & Girls Clubs will utilize all proceeds from this year's telethon to funding memberships, programs and initiatives to help children enhance their lives in the areas of character and leadership; education and career development; the arts; sports, fitness and recreation; and health and life skills. Many Michigan children struggle with the effects of single-parent households and families dealing with economic struggles, substance abuse, violence and poverty. The team and the entire Palace Sports & Entertainment organization are asking for the support of the Pistons community.
"We are excited to announce the Boys & Girls Clubs of Michigan as the beneficiary of the 2011 Pistons Care Telethon," said Karen Davidson, owner of the Pistons and Palace Sports & Entertainment. "Bill Davidson's legacy of philanthropy lives on through Pistons Care and Pistons-Palace Foundation's community outreach efforts."
Boys & Girls Clubs of Southeastern Michigan reports that its members have a proven track record of excellence both scholastically and professionally with 90% of members graduating from high school and 95% of those members going on to higher education. Furthermore, Club alumni report earning an average household income that is 39% higher than the national average. The cost of an annual membership for a child is only $50, however the actual cost of delivering a year of service is $500 per child. Members can participate in many programs and activities with each receiving the individual attention they need when they visit their Club, which is often the third most frequented location in that child's life besides their home and school. Members are given the opportunity to interact with professional staff that serve as much-needed role models and mentors and encourage them to set goals, build on their strengths and fulfill their potential.
"We have a unique opportunity as a professional sports organization to give back and make a consequential and lasting impact on people's lives," said Alan Ostfield, President & CEO of the Pistons and PS&E. "Boys & Girls Clubs provide a safe and developmental environment for kids when they need it most and The Palace family is dedicated to providing services for youth statewide during the 2011 calendar year."
Donations can be made immediately by visiting www.pistons.com and clicking the "Donate Now" button. Online donations will be accepted until March 18. Donors interested in participating on the day of the telethon will be provided a toll free number to call throughout the day. To learn about other fundraising programs that allow individuals, businesses, schools or churches to get involved, please call the Pistons community relations department at 248-377-0100.
"We would like thank the entire Pistons organization for its commitment and dedication in supporting Boys & Girls Clubs of Southeastern Michigan and Boys & Girls Clubs throughout the state of Michigan as this year's beneficiary of the Pistons Care Telethon. Together, Boys & Girls Clubs across the state serve some 100,000 children annually, ages 6-18, 1st -12th grades," said Len Krichko, President & CEO, Boys & Girls Clubs of Southeastern Michigan.
In 2008, the Pistons became the first professional sports team in Detroit and in the NBA to present an entire home game as a charitable fundraiser and since then has raised more than $1.3 million in pledges through the annual Pistons Care Telethon.


text:
Perry Condos, The
The Perry is a sanctuary of luxury and conscientious design perfectly situated at Avenue and Davenport, Toronto's most sophisticated and vibrant neighbourhood.
The building houses a rare collection of only 45 suites, each a fitting tribute to spaciousness and architectural refinement, with dramatic views of Ramsden Park and the Downtown skyline.
The boutique amenities offered to the building's intimate community include a library, private dining, piano lounge and serenity garden.
Naturally, residents' security and convenience are of utmost importance, with full service concierge available 24 hours a day, 7 days a week.
We invite you to experience The Perry.


text:
Counseling Areas:
Hawaii, Utah
Travel Schedule:
View my travel schedule here.
Hometown: Milwaukie, OR
High School: Gladstone High School (south east of Portland, OR)
University: Whitworth University, Bachelor's degree in Journalism/Spanish, '91
University of Washington, Master's degree in Public Administration, '99
Favorite quote: "It is the mark of an educated mind to be able to entertain an idea without accepting it." Aristotle
Favorite classes at Whitworth: Constitutional Law; God, Good and Evil; Journalism Ethics and 20th Century Spanish Literature
Favorite Spokane restaurant: Scratch
Favorite thing about Whitworth: That it has -- and cultivates in its students -- the courage to explore the most challenging issues of our time, to consider a broad range of perspectives, to engage in robust but civil discourse and to accept at the end of the day that thoughtful Christians may disagree.
One piece of advice for applicants: Consider the entirety of the experience a college has to offer -- academics, residence life, co-curricular opportunities, things to do off-campus, career and graduate school placement.
Free for all: I love to play basketball and watch just about any team sport. I love to travel, to play cards and board games, and to read good, thought-provoking books. And I love to eat good food in good company. I don't love pessimistic, negative people. I don't love heat and humidity. And I don't love people, processes or just about anything that is illogical. Who has time for that? Things people may be interested to know about me include that I was a Rotary foreign exchange student in Buenos Aires, Argentina, for a year in high school and studied in Seville, Spain, for a semester in college. I started my career as a newspaper reporter and once flew with the Blue Angels to cover an air show. And I believe I may have the best job in the world.


text:
Lakota provides a platform for the amazing Bristol music scene. We work with promoters of all sizes to bring you some of Bristol's most fun nights out.
We're very proud of the variety of renowned international and local artists that have blessed our stage to give you some of the best nights of your life.
Keep up to date, join the Lakota mailing list


text:
Up for sale is a lightly used Uniden BC355C Base/Mobile scanner.
This scanner was used as a mobile installation inside a vehicle.
The scanner receives flawlessly and operates as it should.
Scanner comes included with the original packaging, AC Power Cord, DC Power Cord, Cigarette Lighter / 12V Power Cord, Mounting bracket and hardware, telescopic BNC antenna, glass mount antenna, and instruction manual.
Scanner will ship via USPS Priority Mail upon received payment.
* 300 Private Channels
PM sent
do you still have this radio?


text:
Student Conduct
Staff members in the CSCM meet with students to address issues of student conduct. Depending upon the circumstances of the incident, the issue may be able to be resolved in that initial meeting or it may require an additional meeting, a hearing, or participation in an alternative dispute resolution process.
Disciplinary Process and Policies
A PDF version of the University of Rochester Standards of Student Conduct can be accessed here. Hard copies of the Standards of Student Conduct booklet are available in the Center for Student Conflict Management located in 510 Wilson Commons.
View specific information on the disciplinary policies and procedures regarding the academic honesty policy.
Regardless of the specific process used in individual cases, all students who participate in the disciplinary process at the University of Rochester are treated with fairness, respect and honesty.


text:
Lťon Genonceaux
Atlas Anti-Classics 19
Had The Tutu appeared when it was written in 1891 it would have been one of the defining works of late nineteenth-century French literature. Juan Goytisolo is among its admirers, and noted that: ďThe Tutu has been described as the most mysterious novel of the nineteenth century, it is probably one of the strangest, and certainly one of the most fascinating… We find in it a clear presentiment (one cannot say influence, since no one read this book) of the audacities of Jarry, Roussel, Breton, Ionesco and Queneau…Ē
Its author, the publisher Lťon Genonceaux (1856Ė?), is as much of an enigma as the two legendary enfants terribles whom he was the first to publish: Arthur Rimbaud and the Comte de Lautrťamont. When he brought out The Tutu he was already in trouble with the police for ďimmoral publishingĒ, and realised that sending it to bookstores would certainly land him in jail. The book disappeared for nearly 100 years, and its author likewise — after 1905 nothing is known of him. Finally republished in the 1990s, The Tutu was hailed by reviewers as the bastard child of J.-K. Huysmans and Antonin Artaud.
Genonceaux appears to have been intent on outraging just about everyone, and The Tutu is gleefully Nietzschean in its dismemberment of contemporary morality. It is simultaneously a sort of ultimate ďdecadent novelĒ and outlandishly modern; it is also repellent, infantile and deeply cynical. Yet despite all its absurdities and extravagances, in the end it somehow manages to appear compassionate, poetic, funny… and even — most absurdly of all — rational.
Site contents Copyright © Atlas Press 1999-2019
BCM Atlas Press, 27 Old Gloucester Street, London WC1N 3XX, UK


text:
Heroine Make is a classic Japanese mascara; the range itself is known for it's excellent eyeliners and their Impact Frame mascara is excellent. However, the other mascara's in their range is the Volume and Curl and Long and Curl range which is very popular.
In the new packaging (the old one was a dark burgundy with gold lettering):
I chose Volume and Curl to try – I was getting fed up of using mascara that didn't hold curl.
This mascara promises a few things;
Volume, Curly Lashes and Durability,
Here is the brush, which is different to the previous incarnation of this mascara – this is sort of diamond shaped with hard short bristles. I find the brush just ok to use; I like that the bristles are short as it works well for short lashes, but the shape didn't make application any easier and I had to work quite hard to get the product on evenly without clumping as it tends to gather, especially around the tip.
I found the durability of this mascara excellent, as always with Heroine Make but it is a real pain in the backside to remove. It comes with a make up remover in some sets and the Heroine Make eye make up remover is excellent too.
Volume wise, it was just average, and the Impact Frame mascara is far superior for that.
It does hold curl, however, not extraordinarily well. It kept my lashes quite curled but I didn't feel like it gave them as much oomph as it could've.
As this mascara dries quite hard (perhaps why it holds curl so well) it can feel a bit crunchy and uncomfortable on the lashes, especially it you apply it too close to the root.
From another view:
Whilst this is a decent mascara it is not as amazing as I had hoped a Heroine Mascara would be. Everything was just ok – my lashes look enhanced but nothing spectacular. If you have short straight Asian lashes but want quite a natural finish, this is a good choice but I think there are better curl holding mascaras than this.
I purchased this for £10 and it came with a free mascara remover!


text:
The Originalites' show calendar is not only booked on the band's website, but also in members' minds.
"We already know which shows we're going to play, so that's money already made," said drummer Peter Fontes, 22.
Booking as many shows as possible is part of the Originalites' method to make it in the music business.
The Originalites started in 2008 when Fontes, bassist Tim Frankeny, 22, and guitarist/vocalist Daniel Tello, 22, were told by their friend Eric Scoralle that they should start a ska band. Shortly thereafter, at their first gig at African Corner in Fountain Valley, they met Mike Belk, who would become the band's saxophonist.
Scoralle died last year, and the Originalites continue to play in his memory.
"When I get really tired while playing, and I need strength to keep going, I usually call on Eric to give me some strength," Fontes said. "He usually comes through."
Since its formation, the Originalites have put music in front of everything else, including school and jobs. But according to the Huntington Beach band, they don't need jobs because music is their paid profession.
"[All the band members] had a choice between going to school, and having to cancel booked shows and not make any money or get our music out there," Fontes said. "We're so lucky and blessed because we figured out how to make money off of music. People always say it's not about the money. But if it's not about the money, then you're going to have to get a job and you won't be able to play music."
Despite ska not being the mainstream, Fontes said because it is relative enough to popular music today, it may make a comeback.
"I think ska is making a comeback because it has the most popular beat right now," he said. "It has the electronic dance music beat. That, I think, is partially why we chose to play ska because we're playing dance music, but we're doing it old and new school. We want to bring the musicianship back to music."
The Originalites have performed with popular ska bands like the English Beat, Fishbone, Tribal Seeds and the Toasters.
"The English Beat is my parents' favorite band," Fontes said. "So, if I'm playing with their favorite band, that means that I've accomplished something more than I may have accomplished if I had gone to college."
Fontes said the Originalites regularly play with the English Beat whenever they come to Southern California.
"[The English Beat] were stoked after our first show with them, and told us they would play with us any time," he said. "We find out when they're playing in SoCal and just hit up the venue and tell them to ask the English Beat if the Originalites can get on the bill. And the English Beat always says yes."
While the band plays ska, the members said they didn't grow up listening to it.
"I actually hate a lot of ska," Frankeny said. "I don't like all the happy, poppy third-wave [music]. To me, I'm into more of the heavier minor key music. It has more feeling than an 'everything's OK' message."
Instead of ska, the members of the Originalites said they draw a lot of influence from classic rock, jazz and punk bands. That versatility shows in the Originalites' music, which blends smooth jazz beats with faster punk and reggae.
The Originalites hold a weekly Monday residency at Gallaghers Pub and Grill, 300 Pacific Coast Hwy., in downtown Huntington Beach, and are also prepping for a fall tour, including in Arizona, Texas, Florida, Utah and Las Vegas.
"This is the first tour we've done around the country," Belk said. "I'm excited. You have to start somewhere. We have new CDs, a new van and new merchandise for the tour."
For more information, visit theoriginalites.com.
Twitter: @HBIndependent