Thanks for letting us know we're doing a good job!
If you've got a moment, please tell us what we did right so we can do more of it.
Amazon S3 (service prefix:
s3
) provides the following service-specific resources, actions, and condition context
keys for use in IAM permission policies.
References:
Learn how to configure this service .
View a list of the API operations available for this service .
Learn how to secure this service and its resources by using IAM permission policies.
Topics
You can specify the following actions in the
Action
element of an IAM policy statement. Use policies to grant permissions to perform
an operation in AWS. When you use an action in a policy, you usually allow or
deny access to the API operation or CLI command with the same name. However,
in some cases, a single action controls access to more than one operation. Alternatively,
some operations require several different actions.
The
Resource Types
column indicates whether each action supports resource-level permissions. If
there is no value for this column, you must specify all resources ("*") in the
Resource
element of your policy statement. If the column includes a resource type, then
you can specify an ARN of that type in a statement with that action. Required
resources are indicated in the table with an asterisk (*). If you specify a resource-level
permission ARN in a statement using this action, then it must be of this type.
Some actions support multiple resource types. If the resource type is optional (not
indicated as required), then you can choose to use one but not the other.
For details about the columns in the following table, see The Actions Table .
| Actions | Description | Access Level | Resource Types (*required) | Condition Keys | Dependent Actions |
|---|---|---|---|---|---|
| AbortMultipartUpload | Aborts a multipart upload. | Write | |||
| BypassGovernanceRetention | Allows circumvention of governance-mode object retention settings | Permissions management | |||
|
s3:x-amz-server-side-encryption s3:x-amz-server-side-encryption-aws-kms-key-id s3:x-amz-website-redirect-location s3:object-lock-retain-until-date |
|||||
| CreateAccessPoint | Creates a new access point. | Write | |||
| CreateBucket | Creates a new bucket. | Write | |||
| CreateJob | Creates a new Amazon S3 Batch Operations job. | Write | |||
| DeleteAccessPoint | Deletes the access point named in the URI | Write | |||
| DeleteAccessPointPolicy | Delete the policy on a specified access point | Permissions management | |||
| DeleteBucket | Deletes the bucket named in the URI | Write | |||
| DeleteBucketPolicy | Delete the policy on a specified bucket | Permissions management | |||
| DeleteBucketWebsite | Removes the website configuration for a bucket. | Write | |||
| DeleteObject | Removes the null version (if there is one) of an object and inserts a delete marker, which becomes the current version of the object. | Write | |||
| DeleteObjectTagging | This implementation of the DELETE operation uses the tagging subresource to remove the entire tag set from the specified object. | Tagging | |||
| DeleteObjectVersion | To remove a specific version of a object, you must be the bucket owner and you must use the versionId subresource. | Write | |||
| DeleteObjectVersionTagging | DELETE Object tagging (for a Specific Version of the Object) | Tagging | |||
| DescribeJob | Retrieves the configuration parameters and status for an Amazon S3 batch operations job. | Read | |||
| GetAccelerateConfiguration | This implementation of the GET operation uses the accelerate subresource to return the Transfer Acceleration state of a bucket, which is either Enabled or Suspended. | Read | |||
| GetAccessPoint | Retrieve access point metadata | Read | |||
| GetAccessPointPolicy | Return the policy of a specified access point. | Read | |||
| GetAccessPointPolicyStatus | Retrieve the policy status for an specific access point's policy | Read | |||
| GetAccountPublicAccessBlock | Retrieve the PublicAccessBlock configuration for an AWS account | Read | |||
| GetAnalyticsConfiguration | This implementation of the GET operation returns an analytics configuration (identified by the analytics configuration ID) from the bucket. | Read | |||
| GetBucketAcl | Return the access control list (ACL) of a bucket. | Read | |||
| GetBucketCORS | Returns the CORS configuration information set for the bucket. | Read | |||
| GetBucketLocation | Return a bucket's region. | Read | |||
| GetBucketLogging | Return the logging status of a bucket and the permissions users have to view and modify that status. | Read | |||
| GetBucketNotification | Return the notification configuration of a bucket. | Read | |||
| GetBucketObjectLockConfiguration | GET Object Lock configuration for a specific bucket | Read | |||
| GetBucketPolicy | Return the policy of a specified bucket. | Read | |||
| GetBucketPolicyStatus | Retrieve the policy status for an specific S3 bucket, indicating whether the bucket is public. | Read | |||
| GetBucketPublicAccessBlock | Retrieve the PublicAccessBlock configuration for a specific S3 bucket. | Read | |||
| GetBucketRequestPayment | Return the request payment configuration of a bucket. | Read | |||
| GetBucketTagging | Return the tag set associated with the bucket. | Read | |||
| GetBucketVersioning | Return the versioning state of a bucket. | Read | |||
| GetBucketWebsite | Returns the website configuration associated with a bucket. | Read | |||
| GetEncryptionConfiguration | Returns the encryption configuration information set on the bucket. | Read | |||
| GetInventoryConfiguration | This implementation of the GET operation returns an inventory configuration (identified by the inventory configuration ID) from the bucket. | Read | |||
| GetLifecycleConfiguration | Returns the lifecycle configuration information set on the bucket. | Read | |||
| GetMetricsConfiguration | Gets a metrics configuration for the CloudWatch request metrics (specified by the metrics configuration ID) from the bucket. Note that this doesn't include the daily storage metrics. | Read | |||
| GetObject | Retrieves objects from Amazon S3. | Read | |||
| GetObjectAcl | Return the access control list (ACL) of an object. | Read | |||
| GetObjectLegalHold | GET Object Legal Hold for a specific object | Read | |||
| GetObjectRetention | GET Object Legal Hold for a specific object | Read | |||
| GetObjectTagging | This implementation of the GET operation returns the tags associated with an object. You send the GET request against the tagging subresource associated with the object. | Read | |||
| GetObjectTorrent | return torrent files from a bucket. | Read | |||
| GetObjectVersion | To return a different version, use the versionId subresource. | Read | |||
| GetObjectVersionAcl | To return ACL information about a different version, use the versionId subresource. | Read | |||
| GetObjectVersionForReplication | Permission exercised by S3 replication | Read | |||
| GetObjectVersionTagging | GET Object tagging (for a Specific Version of the Object) | Read | |||
| GetObjectVersionTorrent | To return Torrent files about a different version, use the versionId subresource. | Read | |||
| GetReplicationConfiguration | Returns the replication configuration information set on the bucket. | Read | |||
| ListAccessPoints | Lists access points. | Read | |||
| ListAllMyBuckets | Returns a list of all buckets owned by the authenticated sender of the request. | List | |||
| ListBucket | Returns some or all (up to 1000) of the objects in a bucket. | List | |||
| ListBucketMultipartUploads | Lists in-progress multipart uploads. | Read | |||
| ListBucketVersions | Use the versions subresource to list metadata about all of the versions of objects in a bucket. | Read | |||
| ListJobs | Lists current jobs and jobs that have ended recently. | Read | |||
| ListMultipartUploadParts | Lists the parts that have been uploaded for a specific multipart upload. | Read | |||
| ObjectOwnerOverrideToBucketOwner | Permission exercised by S3 replication | Permissions management | |||
| PutAccelerateConfiguration | This implementation of the PUT operation uses the accelerate subresource to set the Transfer Acceleration state of an existing bucket. | Write | |||
| PutAccessPointPolicy | Add to or replace a data policy on a access point. | Permissions management | |||
| PutAccountPublicAccessBlock | Create or modify the PublicAccessBlock configuration for an AWS account. | Permissions management | |||
| PutAnalyticsConfiguration | This implementation of the PUT operation adds an analytics configuration (identified by the analytics ID) to the bucket. You can have up to 1,000 analytics configurations per bucket. | Write | |||
| PutBucketAcl | Set the permissions on an existing bucket using access control lists (ACL). | Permissions management | |||
| PutBucketCORS | Sets the CORS configuration for your bucket. | Write | |||
| PutBucketLogging | Set the logging parameters for a bucket. | Write | |||
| PutBucketNotification | Enables you to receive notifications when certain events happen in your bucket. | Write | |||
| PutBucketObjectLockConfiguration | PUT Object Lock configuration on a specific bucket | Write | |||
| PutBucketPolicy | Add to or replace a policy on a bucket. | Permissions management | |||
| PutBucketPublicAccessBlock | Create or modify the PublicAccessBlock configuration for an specific S3 bucket. | Permissions management | |||
| PutBucketRequestPayment | Set the request payment configuration of a bucket. | Write | |||
| PutBucketTagging | Add a set of tags to an existing bucket. | Tagging | |||
| PutBucketVersioning | Set the versioning state of an existing bucket. | Write | |||
| PutBucketWebsite | Sets the configuration of the website that is specified in the website subresource. | Write | |||
| PutEncryptionConfiguration | Sets the encryption configuration for the bucket. | Write | |||
| PutInventoryConfiguration | This implementation of the PUT operation adds an inventory configuration (identified by the inventory ID) to the bucket. You can have up to 1,000 inventory configurations per bucket. | Write | |||
| PutLifecycleConfiguration | Creates a new lifecycle configuration for the bucket or replaces an existing lifecycle configuration. | Write | |||
| PutMetricsConfiguration | Sets or updates a metrics configuration for the CloudWatch request metrics (specified by the metrics configuration ID) from the bucket. | Write | |||
| PutObject | Adds an object to a bucket. | Write | |||
|
s3:x-amz-server-side-encryption s3:x-amz-server-side-encryption-aws-kms-key-id s3:x-amz-website-redirect-location s3:object-lock-retain-until-date |
|||||
| PutObjectAcl | Set the access control list (ACL) permissions for an object that already exists in a bucket. | Permissions management | |||
| PutObjectLegalHold | PUT Object Legal Hold on a specific object | Write | |||
| PutObjectRetention | PUT Object Retention on a specific object | Write | |||
| PutObjectTagging | This implementation of the PUT operation uses the tagging subresource to add a set of tags to an existing object. | Tagging | |||
| PutObjectVersionAcl | The ACL of an object is set at the object version level. | Permissions management | |||
| PutObjectVersionTagging | PUT Object tagging (for a Specific Version of the Object) | Tagging | |||
| PutReplicationConfiguration | In a versioning-enabled bucket, this operation creates a new replication configuration (or replaces an existing one, if present). | Write | |||
| ReplicateDelete | Permission exercised by S3 replication | Write | |||
| ReplicateObject | Permission exercised by S3 replication | Write | |||
| ReplicateTags | Permission exercised by S3 replication | Tagging | |||
| RestoreObject | Restores a temporary copy of an archived object. | Write | |||
| UpdateJobPriority | Updates an existing job's priority. | Write | |||
| UpdateJobStatus | Updates the status for the specified job. | Write | |||
The following resource types are defined by this service and can be used in the
Resource
element of IAM permission policy statements. Each action in the
Actions table
identifies the resource types that can be specified with that action. A resource
type can also define which condition keys you can include in a policy. These
keys are displayed in the last column of the table. For details about the columns
in the following table, see
The Resource Types Table
.
| Resource Types | ARN | Condition Keys |
|---|---|---|
| accesspoint |
arn:$
{
Partition}:s3:$
{
Region}:$
{
Account}:accesspoint/$
{
AccessPointName}
|
|
| bucket |
arn:$
{
Partition}:s3:::$
{
BucketName}
|
|
| object |
arn:$
{
Partition}:s3:::$
{
BucketName}/$
{
ObjectName}
|
|
| job |
arn:$
{
Partition}:s3:$
{
Region}:$
{
Account}:job/$
{
JobId}
|
Amazon S3 defines the following condition keys that can be used in the
Condition
element of an IAM policy. You can use these keys to further refine the conditions
under which the policy statement applies. For details about the columns in the
following table, see
The Condition Keys Table
.
To view the global condition keys that are available to all services, see Available Global Condition Keys in the IAM Policy Reference .
| Condition Keys | Description | Type |
|---|---|---|
| s3:AccessPointNetworkOrigin | The network type from which traffic may be received by the access point involved in the request | String |
| s3:DataAccessPointAccount | The AWS Account ID of the account that owns the data operations access point involved in the request | String |
| s3:DataAccessPointArn | The ARN of the data operations access point involved in the request | String |
| s3:ExistingJobOperation | String | |
| s3:ExistingJobPriority | Numeric | |
| s3:ExistingObjectTag/<key> | Enables you to verify that an existing object tag has the specific tag key and value. | String |
| s3:JobSuspendedCause | String | |
| s3:LocationConstraint | Enables you to restrict users to creating buckets in only a specific region. | String |
| s3:RequestJobOperation | String | |
| s3:RequestJobPriority | Numeric | |
| s3:RequestObjectTag/<key> | Restrict the tag keys and values that you want to allow on objects. | String |
| s3:RequestObjectTagKeys | restrict the tag keys that you want to allow on objects. | String |
| s3:VersionId | Enables you to limit the permission for the s3:PutObjectVersionTagging action to a specific object version. | String |
| s3:authtype | String | |
| s3:delimiter | Enables you to require the user to specify the delimiter parameter in the GET Bucket Object versions request. | String |
| s3:locationconstraint | Enables you to restrict the user to creating a bucket in only a specific region. | String |
| s3:max-keys | Enables you to limit the number of keys Amazon S3 returns in response to ListBucket requests by requiring the user to specify the max-keys parameter. | Numeric |
| s3:object-lock-legal-hold | Enables enforcement of the specified object legal hold status | String |
| s3:object-lock-mode | Enables enforcement of the specified object retention mode | String |
| s3:object-lock-remaining-retention-days | Enables enforcement of an object relative to the remaining retention days | String |
| s3:object-lock-retain-until-date | Enables enforcement of a specific retain-until-date | String |
| s3:prefix | Enables you to limit the response of the ListBucket API to key names with specific prefix. | String |
| s3:signatureage | Numeric | |
| s3:signatureversion | String | |
| s3:versionid | String | |
| s3:x-amz-acl | Enables you to require specific access permissions when uploading an object. | String |
| s3:x-amz-content-sha256 | String | |
| s3:x-amz-copy-source | Enables you to restrict the copy source to a specific bucket, a specific folder in the bucket, or a specific object in a bucket. | String |
| s3:x-amz-grant-full-control | String | |
| s3:x-amz-grant-read | String | |
| s3:x-amz-grant-read-acp | String | |
| s3:x-amz-grant-write | String | |
| s3:x-amz-grant-write-acp | String | |
| s3:x-amz-metadata-directive | Enables you to enforce certain behavior (COPY vs. REPLACE) when objects are uploaded. | String |
| s3:x-amz-server-side-encryption | Enables you to require the user to specify this header in the request to ensure that objects the user uploads are encrypted when they are saved. | String |
| s3:x-amz-server-side-encryption-aws-kms-key-id | String | |
| s3:x-amz-storage-class | String | |
| s3:x-amz-website-redirect-location | String |


Tired of blue’n’gray? Try the original version of this documentation on coderay.rubychan.de :-)
CodeRay is a Ruby library for syntax highlighting.
You put your code in, and you get it back colored; Keywords, strings, floats, comments - all in different colors. And with line numbers.
Syntax Highlighting...
makes code easier to read and maintain
lets you detect syntax errors faster
helps you to understand the syntax of a language
looks nice
is what everybody wants to have on their website
solves all your problems and makes the girls run after you
% gem install coderay
CodeRay needs Ruby 1.8.7+ or 1.9.2+. It also runs on Rubinius and JRuby.
require 'coderay' html = CodeRay.scan("puts 'Hello, world!'", :ruby).div(:line_numbers => :table)
See CodeRay.
licenser (Heinz N. Gies) for ending my QBasic career, inventing the Coder project and the input/output plugin system. CodeRay would not exist without him.
bovi (Daniel Bovensiepen) for helping me out on various occasions.
Caleb Clausen for writing RubyLexer (see rubyforge.org/projects/rubylexer) and lots of very interesting mail traffic
birkenfeld (Georg Brandl) and mitsuhiku (Arnim Ronacher) for PyKleur, now pygments. You guys rock!
Jamis Buck for writing Syntax (see rubyforge.org/projects/syntax) I got some useful ideas from it.
Doug Kearns and everyone else who worked on ruby.vim - it not only helped me coding CodeRay, but also gave me a wonderful target to reach for the Ruby scanner.
everyone who uses CodeBB on www.rubyforen.de and www.python-forum.de
iGEL, magichisoka, manveru, WoNáDo and everyone I forgot from rubyforen.de
Dethix from ruby-mine.de
zickzackw
Dookie (who is no longer with us…) and Leonidas from www.python-forum.de
Andreas Schwarz for finding out that CaseIgnoringWordList was not case ignoring! Such things really make you write tests.
closure for the first version of the Scheme scanner.
Stefan Walk for the first version of the JavaScript and PHP scanners.
Josh Goebel for another version of the JavaScript scanner, a SQL and a Diff scanner.
Jonathan Younger for pointing out the licence confusion caused by wrong LICENSE file.
Jeremy Hinegardner for finding the shebang-on-empty-file bug in FileType.
Charles Oliver Nutter and Yehuda Katz for helping me benchmark CodeRay on JRuby.
Andreas Neuhaus for pointing out a markup bug in coderay/for_redcloth.
0xf30fc7 for the FileType patch concerning Delphi file extensions.
The folks at redmine.org - thank you for using and fixing CodeRay!
Keith Pitt for his SQL scanners
Rob Aldred for the terminal encoder
Trans for pointing out $DEBUG dependencies
Flameeyes for finding that Term::ANSIColor was obsolete
matz and all Ruby gods and gurus
The inventors of: the computer, the internet, the true color display, HTML & CSS, VIM, Ruby, pizza, microwaves, guitars, scouting, programming, anime, manga, coke and green ice tea.
Where would we be without all those people?
Chihiro (my Sony VAIO laptop); Henrietta (my old MacBook); Triella, born Rico (my new MacBook); as well as Seras and Hikari (my PCs)
Firefox, Firebug, Safari, and Thunderbird
TortoiseSVN using Apache via XAMPP
RDoc (though I’m quite unsatisfied with it)
Microsoft Windows (yes, I confess!) and MacOS X
GNUWin32, MinGW and some other tools to make the shell under windows a bit less useless
PLEAC code examples
Github
Travis CI (travis-ci.org/rubychan/github)
Generated with the Darkfish Rdoc Generator 2.


Commands
Purge
!!purge .... will purge something
Kick
!!kick (mention a user) ... will kick a user
Say
!!say ( some text ) ... will have the bot say it
Announce
!!announce ... will send an announcement to the announce channel


WIFI Network
WIFI Password
Owner ID
Hub ID
Console Enabled
MQTT User
MQTT Password
MQTT Server
MQTT Port
Thing Certificate
Thing Private Key


[1]
has lots of dynamic disk support with media gadgets Aero glass better security windows function.
[2]
Apple is please do w/o the switch between windows pinching macs did and setup i 'm prompted to build applications and maintain.


Aloha! You've found my GitHub HTML test site! Please note that this is just for testing and nothing here actually does anything.
You can see my repository here, or you can return to the site's home here.
ACCESS DENIED
We're sorry, but you do not have permission to access this page.


| MPI_FILE_GET_GROUP(fh, group) | |
| IN fh | file handle (handle) |
| OUT group | group which opened the file (handle) |
int MPI_File_get_group(MPI_File fh, MPI_Group *group)
MPI_File_get_group(fh, group, ierror)
TYPE(MPI_File), INTENT(IN) :: fh
TYPE(MPI_Group), INTENT(OUT) :: group
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
MPI_FILE_GET_GROUP(FH, GROUP, IERROR)
INTEGER FH, GROUP, IERROR
MPI_FILE_GET_GROUP returns a duplicate of the group of the communicator used to open the file associated with fh. The group is returned in group. The user is responsible for freeing group.
| MPI_FILE_GET_AMODE(fh, amode) | |
| IN fh | file handle (handle) |
| OUT amode | file access mode used to open the file (integer) |
int MPI_File_get_amode(MPI_File fh, int *amode)
MPI_File_get_amode(fh, amode, ierror)
TYPE(MPI_File), INTENT(IN) :: fh
INTEGER, INTENT(OUT) :: amode
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
MPI_FILE_GET_AMODE(FH, AMODE, IERROR)
INTEGER FH, AMODE, IERROR
MPI_FILE_GET_AMODE returns, in amode, the access mode of the file associated with fh.
Example
In Fortran 77, decoding an amode bit vector will
require a routine such as the following:
SUBROUTINE BIT_QUERY(TEST_BIT, MAX_BIT, AMODE, BIT_FOUND) ! ! TEST IF THE INPUT TEST_BIT IS SET IN THE INPUT AMODE ! IF SET, RETURN 1 IN BIT_FOUND, 0 OTHERWISE ! INTEGER TEST_BIT, AMODE, BIT_FOUND, CP_AMODE, HIFOUND BIT_FOUND = 0 CP_AMODE = AMODE 100 CONTINUE LBIT = 0 HIFOUND = 0 DO 20 L = MAX_BIT, 0, -1 MATCHER = 2**L IF (CP_AMODE .GE. MATCHER .AND. HIFOUND .EQ. 0) THEN HIFOUND = 1 LBIT = MATCHER CP_AMODE = CP_AMODE - MATCHER END IF 20 CONTINUE IF (HIFOUND .EQ. 1 .AND. LBIT .EQ. TEST_BIT) BIT_FOUND = 1 IF (BIT_FOUND .EQ. 0 .AND. HIFOUND .EQ. 1 .AND. & CP_AMODE .GT. 0) GO TO 100 ENDThis routine could be called successively to decode amode, one bit at a time. For example, the following code fragment would check for MPI_MODE_RDONLY.
CALL BIT_QUERY(MPI_MODE_RDONLY, 30, AMODE, BIT_FOUND) IF (BIT_FOUND .EQ. 1) THEN PRINT *, ' FOUND READ-ONLY BIT IN AMODE=', AMODE ELSE PRINT *, ' READ-ONLY BIT NOT FOUND IN AMODE=', AMODE END IF


Movies are free for Students, Faculty, & Staff with university ID. $5 for community members. Thank you to the Harre Union for making these films possible!


{% extends "base.html" %} {% macro render_field(field) -%} {% set with_label = kwargs.pop('no_label', True) %}
{{ field.description|safe }}
{% endif %}Calendarz dynamically generates iCalendar calendars (.ics files) from a compatible data sources. ics files from Calendarz change as the source changes when accessed directly from the link.
Get started by selecting the type of your data, and entering the URL where it can be found.
Try it out using this CSV file. Below, select CSV and paste the link to the file.
calendarz will parse a CSV or JSON file to generate iCalendar (.ics) files which can be imported in to different calendar apps, such as Google Calendar, Outlook, and OSX Calendar. Simply select the type of file which contains your data, and enter its URL above.
Paste the link in to your calendar app, or upload the ics file. By directly using the link in your calendar app, your calendar should automatically update as the source data is updated.
Sorry, but we can't get links back. But a just-as-good calendar can be regenerated above from the same source.
Calendars can be generated from CSV or JSON files. Examples of well-formed files can be found here: CSV JSON.
A brief description of the fields:
All of uid, dtstamp, and dtstart must be specified. No more than one of dtend and duration should be specified.
uid should be an email or URL, and each uid should be unique.
Datetimes: the recommend format of dtstamp, dtstart and dtend is dd-MMM-yy hh:mm +tztz (eg 04-Feb-17 15:30 -0700). The timezone should be represented as an offset from UTC; timezone abbreviations (eg EST) are ignored. Some other formats (including ISO 8601) may work. Only the datetime fields (dtstamp, dtstart and dtend) are parsed; other fields are merely transposed from one file to another.
Nonconforming calendars can be generated.


fun setDirectorsProvided(directorsProvided: Boolean?): Builder
Whether the company’s directors have been provided. Set
this Boolean to true
after creating all the company’s directors with the
Persons API for accounts with a
relationship.director
requirement. This value is not automatically set to
true
after creating directors, so it needs to be updated to indicate all
directors have been provided.


Although the letter "s" identifies both the static (i.e. class), and local
parameter variable (at lines 2 and 5), the variable with the more limited scope, the
local variable, takes precedence.
A majority of
the time that this type of duplication (i.e. shadowing) occurs, it occurs
unintentionally.
In any case, the variable with the limited scope
casts a shadow over the larger scope variable, leaving the static variable
unable to be seen (i.e. hidden).
However, shadowing can be overridden simply by
referring to the shadowed variable using its fully-qualified name.
For example, modifying the parameter variable by writing:
System.out.print
(aCopy.m1(Test.s))
at line 6,
will execute the statement using the static variable "s" (from line 2) instead.


| PERLINTERN(1) | Perl Programmers Reference Guide | PERLINTERN(1) |
Return an entry from the BHK structure. "which" is a preprocessor token indicating which entry to return. If the appropriate flag is not set this will return "NULL". The type of the return value depends on which entry you ask for.
void * BhkENTRY(BHK *hk, which)
Return the BHK's flags.
U32 BhkFLAGS(BHK *hk)
Call all the registered block hooks for type "which". "which" is a preprocessing token; the type of "arg" depends on "which".
void CALL_BLOCK_HOOKS(which, arg)
SV * core_prototype(SV *sv, const char *name, const int code, int * const opnum)
0 is used as continue inside eval,
3 is used for a die caught by an inner eval - continue inner loop
See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must establish a local jmpenv to handle exception traps.
OP* docatch(Perl_ppaddr_t firstpp)
There is a further complication with non-closure anonymous subs (i.e. those that do not refer to any lexicals outside that sub). In this case, the anonymous prototype is shared rather than being cloned. This has the consequence that the parent may be freed while there are still active children, e.g.,
BEGIN { $a = sub { eval '$x' } }
In this case, the BEGIN is freed immediately after execution since there are no active references to it: the anon sub prototype has "CvWEAKOUTSIDE" set since it's not a closure, and $a points to the same CV, so it doesn't contribute to BEGIN's refcount either. When $a is executed, the "eval '$x'" causes the chain of "CvOUTSIDE"s to be followed, and the freed BEGIN is accessed.
To avoid this, whenever a CV and its associated pad is freed, any "&" entries in the pad are explicitly removed from the pad, and if the refcount of the pointed-to anon sub is still positive, then that child's "CvOUTSIDE" is set to point to its grandparent. This will only occur in the single specific case of a non-closure anon prototype having one or more active references (such as $a above).
One other thing to consider is that a CV may be merely undefined rather than freed, eg "undef &foo". In this case, its refcount may not have reached zero, but we still delete its pad and its "CvROOT" etc. Since various children may still have their "CvOUTSIDE" pointing at this undefined CV, we keep its own "CvOUTSIDE" for the time being, so that the chain of lexical scopes is unbroken. For example, the following should print 123:
my $x = 123; sub tmp { sub { eval '$x' } } my $a = tmp(); undef &tmp; print $a->(); bool CvWEAKOUTSIDE(CV *cv)
void cv_dump(CV *cv, const char *title)
void cv_forget_slab(CV *cv)
void do_dump_pad(I32 level, PerlIO *file, PADLIST *padlist, int full)
PADOFFSET pad_alloc_name(PADNAME *name, U32 flags, HV *typestash, HV *ourstash)
void pad_block_start(int full)
* a 'my' in the current scope with the same name; * an 'our' (anywhere in the pad) with the same name and the same stash as 'ourstash'
"is_our" indicates that the name to check is an "our" declaration.
void pad_check_dup(PADNAME *name, U32 flags, const HV *ourstash)
Returns the offset in the bottom pad of the lex or the fake lex. "cv" is the CV in which to start the search, and seq is the current "cop_seq" to match against. If "warn" is true, print appropriate warnings. The "out_"* vars return values, and so are pointers to where the returned values should be stored. "out_capture", if non-null, requests that the innermost instance of the lexical is captured; "out_name" is set to the innermost matched pad name or fake pad name; "out_flags" returns the flags normally associated with the "PARENT_FAKELEX_FLAGS" field of a fake pad name.
Note that "pad_findlex()" is recursive; it recurses up the chain of CVs, then comes back down, adding fake entries as it goes. It has to be this way because fake names in anon protoypes have to store in "xpadn_low" the index into the parent pad.
PADOFFSET pad_findlex(const char *namepv, STRLEN namelen, U32 flags, const CV* cv, U32 seq, int warn, SV** out_capture, PADNAME** out_name, int *out_flags)
void pad_fixup_inner_anons(PADLIST *padlist, CV *old_cv, CV *new_cv)
void pad_free(PADOFFSET po)
void pad_leavemy()
PADLIST * padlist_dup(PADLIST *srcpad, CLONE_PARAMS *param)
PADNAME * padname_dup(PADNAME *src, CLONE_PARAMS *param)
PADNAMELIST * padnamelist_dup(PADNAMELIST *srcpad, CLONE_PARAMS *param)
void pad_push(PADLIST *padlist, int depth)
void pad_reset()
void pad_swipe(PADOFFSET po, bool refadjust)
If the typeglob "gv" can be expressed more succinctly, by having something other than a real GV in its place in the stash, replace it with the optimised form. Basic requirements for this are that "gv" is a real typeglob, is sufficiently ordinary, and is only referenced from its package. This function is meant to be used when a GV has been looked up in part to see what was there, causing upgrading, but based on what was found it turns out that the real GV isn't required after all.
If "gv" is a completely empty typeglob, it is deleted from the stash.
If "gv" is a typeglob containing only a sufficiently-ordinary constant sub, the typeglob is replaced with a scalar-reference placeholder that more compactly represents the same thing.
void gv_try_downgrade(GV* gv)
This is called when a stash is assigned to a new location in the symbol table.
void hv_ename_add(HV *hv, const char *name, U32 len, U32 flags)
This is called when a stash is deleted from the symbol table.
void hv_ename_delete(HV *hv, const char *name, U32 len, U32 flags)
HV * refcounted_he_chain_2hv( const struct refcounted_he *c, U32 flags )
SV * refcounted_he_fetch_pv( const struct refcounted_he *chain, const char *key, U32 hash, U32 flags )
SV * refcounted_he_fetch_pvn( const struct refcounted_he *chain, const char *keypv, STRLEN keylen, U32 hash, U32 flags )
SV * refcounted_he_fetch_pvs( const struct refcounted_he *chain, "literal string" key, U32 flags )
SV * refcounted_he_fetch_sv( const struct refcounted_he *chain, SV *key, U32 hash, U32 flags )
void refcounted_he_free(struct refcounted_he *he)
struct refcounted_he * refcounted_he_inc( struct refcounted_he *he )
struct refcounted_he * refcounted_he_new_pv( struct refcounted_he *parent, const char *key, U32 hash, SV *value, U32 flags )
The new key is specified by "keypv" and "keylen". If "flags" has the "REFCOUNTED_HE_KEY_UTF8" bit set, the key octets are interpreted as UTF-8, otherwise they are interpreted as Latin-1. "hash" is a precomputed hash of the key string, or zero if it has not been precomputed.
"value" is the scalar value to store for this key. "value" is copied by this function, which thus does not take ownership of any reference to it, and later changes to the scalar will not be reflected in the value visible in the "refcounted_he". Complex types of scalar will not be stored with referential integrity, but will be coerced to strings. "value" may be either null or &PL_sv_placeholder to indicate that no value is to be associated with the key; this, as with any non-null value, takes precedence over the existence of a value for the key further along the chain.
"parent" points to the rest of the "refcounted_he" chain to be attached to the new "refcounted_he". This function takes ownership of one reference to "parent", and returns one reference to the new "refcounted_he".
struct refcounted_he * refcounted_he_new_pvn( struct refcounted_he *parent, const char *keypv, STRLEN keylen, U32 hash, SV *value, U32 flags )
struct refcounted_he * refcounted_he_new_pvs( struct refcounted_he *parent, "literal string" key, SV *value, U32 flags )
struct refcounted_he * refcounted_he_new_sv( struct refcounted_he *parent, SV *key, U32 hash, SV *value, U32 flags )
Function called by "do_readline" to spawn a glob (or do the glob inside perl on VMS). This code used to be inline, but now perl uses "File::Glob" this glob starter is only used by miniperl during the build process, or when PERL_EXTERNAL_GLOB is defined. Moving it away shrinks pp_hot.c; shrinking pp_hot.c helps speed perl up.
PerlIO* start_glob(SV *tmpglob, IO *io)
This function performs syntax checking on a prototype, "proto". If "warn" is true, any illegal characters or mismatched brackets will trigger illegalproto warnings, declaring that they were detected in the prototype for "name".
The return value is "true" if this is a valid prototype, and "false" if it is not, regardless of whether "warn" was "true" or "false".
Note that "NULL" is a valid "proto" and will always return "true".
NOTE: the perl_ form of this function is deprecated.
bool validate_proto(SV *name, SV *proto, bool warn, bool curstash)
int magic_clearhint(SV* sv, MAGIC* mg)
int magic_clearhints(SV* sv, MAGIC* mg)
"sv" and "mg" are the tied thingy and the tie magic.
"meth" is the name of the method to call.
"argc" is the number of args (in addition to $self) to pass to the method.
The "flags" can be:
G_DISCARD invoke method with G_DISCARD flag and don't return a value G_UNDEF_FILL fill the stack with argc pointers to PL_sv_undef
The arguments themselves are any values following the "flags" argument.
Returns the SV (if any) returned by the method, or "NULL" on failure.
SV* magic_methcall(SV *sv, const MAGIC *mg, SV *meth, U32 flags, U32 argc, ...)
int magic_sethint(SV* sv, MAGIC* mg)
If "setmagic" is false then no set magic will be called on the new (empty) SV. This typically means that assignment will soon follow (e.g. 'local $x = $y'), and that will handle the magic.
void mg_localize(SV* sv, SV* nsv, bool setmagic)
void free_c_backtrace(Perl_c_backtrace* bt)
Scans the frames back by "depth + skip", then drops the "skip" innermost, returning at most "depth" frames.
Perl_c_backtrace* get_c_backtrace(int max_depth, int skip)
You are responsible for "SvREFCNT_inc()" on the return value if you plan to store it anywhere semi-permanently (otherwise it might be deleted out from under you the next time the cache is invalidated).
AV* mro_get_linear_isa_dfs(HV* stash, U32 level)
void mro_isa_changed_in(HV* stash)
This can also be called with a null first argument to indicate that "oldstash" has been deleted.
This function invalidates isa caches on the old stash, on all subpackages nested inside it, and on the subclasses of all those, including non-existent packages that have corresponding entries in "stash".
It also sets the effective names ("HvENAME") on all the stashes as appropriate.
If the "gv" is present and is not in the symbol table, then this function simply returns. This checked will be skipped if "flags & 1".
void mro_package_moved(HV * const stash, HV * const oldstash, const GV * const gv, U32 flags)
On entry, "pv" points to the beginning of the string; "valptr" points to a UV that will receive the converted value, if found; "endptr" is either NULL or points to a variable that points to one byte beyond the point in "pv" that this routine should examine. If "endptr" is NULL, "pv" is assumed to be NUL-terminated.
Returns FALSE if "pv" doesn't represent a valid unsigned integer value (with no leading zeros). Otherwise it returns TRUE, and sets *valptr to that value.
If you constrain the portion of "pv" that is looked at by this function (by passing a non-NULL "endptr"), and if the intial bytes of that portion form a valid value, it will return TRUE, setting *endptr to the byte following the final digit of the value. But if there is no constraint at what's looked at, all of "pv" must be valid in order for TRUE to be returned.
The only characters this accepts are the decimal digits '0'..'9'.
As opposed to atoi(3) or strtol(3), "grok_atoUV" does NOT allow optional leading whitespace, nor negative inputs. If such features are required, the calling code needs to explicitly implement those.
Note that this function returns FALSE for inputs that would overflow a UV, or have leading zeros. Thus a single 0 is accepted, but not 00 nor 01, 002, etc.
Background: "atoi" has severe problems with illegal inputs, it cannot be used for incremental parsing, and therefore should be avoided "atoi" and "strtol" are also affected by locale settings, which can also be seen as a bug (global state controlled by user environment).
bool grok_atoUV(const char* pv, UV* valptr, const char** endptr)
void finalize_optree(OP* o)
This function is expected to be called in a Perl compilation context, and some aspects of the subroutine are taken from global variables associated with compilation. In particular, "PL_compcv" represents the subroutine that is currently being compiled. It must be non-null when this function is called, and some aspects of the subroutine being constructed are taken from it. The constructed subroutine may actually be a reuse of the "PL_compcv" object, but will not necessarily be so.
If "block" is null then the subroutine will have no body, and for the time being it will be an error to call it. This represents a forward subroutine declaration such as "sub foo ($$);". If "block" is non-null then it provides the Perl code of the subroutine body, which will be executed when the subroutine is called. This body includes any argument unwrapping code resulting from a subroutine signature or similar. The pad use of the code must correspond to the pad attached to "PL_compcv". The code is not expected to include a "leavesub" or "leavesublv" op; this function will add such an op. "block" is consumed by this function and will become part of the constructed subroutine.
"proto" specifies the subroutine's prototype, unless one is supplied as an attribute (see below). If "proto" is null, then the subroutine will not have a prototype. If "proto" is non-null, it must point to a "const" op whose value is a string, and the subroutine will have that string as its prototype. If a prototype is supplied as an attribute, the attribute takes precedence over "proto", but in that case "proto" should preferably be null. In any case, "proto" is consumed by this function.
"attrs" supplies attributes to be applied the subroutine. A handful of attributes take effect by built-in means, being applied to "PL_compcv" immediately when seen. Other attributes are collected up and attached to the subroutine by this route. "attrs" may be null to supply no attributes, or point to a "const" op for a single attribute, or point to a "list" op whose children apart from the "pushmark" are "const" ops for one or more attributes. Each "const" op must be a string, giving the attribute name optionally followed by parenthesised arguments, in the manner in which attributes appear in Perl source. The attributes will be applied to the sub by this function. "attrs" is consumed by this function.
If "o_is_gv" is false and "o" is null, then the subroutine will be anonymous. If "o_is_gv" is false and "o" is non-null, then "o" must point to a "const" op, which will be consumed by this function, and its string value supplies a name for the subroutine. The name may be qualified or unqualified, and if it is unqualified then a default stash will be selected in some manner. If "o_is_gv" is true, then "o" doesn't point to an "OP" at all, but is instead a cast pointer to a "GV" by which the subroutine will be named.
If there is already a subroutine of the specified name, then the new sub will either replace the existing one in the glob or be merged with the existing one. A warning may be generated about redefinition.
If the subroutine has one of a few special names, such as "BEGIN" or "END", then it will be claimed by the appropriate queue for automatic running of phase-related subroutines. In this case the relevant glob will be left not containing any subroutine, even if it did contain one before. In the case of "BEGIN", the subroutine will be executed and the reference to it disposed of before this function returns.
The function returns a pointer to the constructed subroutine. If the sub is anonymous then ownership of one counted reference to the subroutine is transferred to the caller. If the sub is named then the caller does not get ownership of a reference. In most such cases, where the sub has a non-phase name, the sub will be alive at the point it is returned by virtue of being contained in the glob that names it. A phase-named subroutine will usually be alive by virtue of the reference owned by the phase's automatic run queue. But a "BEGIN" subroutine, having already been executed, will quite likely have been destroyed already by the time this function returns, making it erroneous for the caller to make any use of the returned pointer. It is the caller's responsibility to ensure that it knows which of these situations applies.
CV * newATTRSUB_x(I32 floor, OP *o, OP *proto, OP *attrs, OP *block, bool o_is_gv)
The subroutine will have the entry point "subaddr". It will have the prototype specified by the nul-terminated string "proto", or no prototype if "proto" is null. The prototype string is copied; the caller can mutate the supplied string afterwards. If "filename" is non-null, it must be a nul-terminated filename, and the subroutine will have its "CvFILE" set accordingly. By default "CvFILE" is set to point directly to the supplied string, which must be static. If "flags" has the "XS_DYNAMIC_FILENAME" bit set, then a copy of the string will be taken instead.
Other aspects of the subroutine will be left in their default state. If anything else needs to be done to the subroutine for it to function correctly, it is the caller's responsibility to do that after this function has constructed it. However, beware of the subroutine potentially being destroyed before this function returns, as described below.
If "name" is null then the subroutine will be anonymous, with its "CvGV" referring to an "__ANON__" glob. If "name" is non-null then the subroutine will be named accordingly, referenced by the appropriate glob. "name" is a string of length "len" bytes giving a sigilless symbol name, in UTF-8 if "flags" has the "SVf_UTF8" bit set and in Latin-1 otherwise. The name may be either qualified or unqualified, with the stash defaulting in the same manner as for "gv_fetchpvn_flags". "flags" may contain flag bits understood by "gv_fetchpvn_flags" with the same meaning as they have there, such as "GV_ADDWARN". The symbol is always added to the stash if necessary, with "GV_ADDMULTI" semantics.
If there is already a subroutine of the specified name, then the new sub will replace the existing one in the glob. A warning may be generated about the redefinition. If the old subroutine was "CvCONST" then the decision about whether to warn is influenced by an expectation about whether the new subroutine will become a constant of similar value. That expectation is determined by "const_svp". (Note that the call to this function doesn't make the new subroutine "CvCONST" in any case; that is left to the caller.) If "const_svp" is null then it indicates that the new subroutine will not become a constant. If "const_svp" is non-null then it indicates that the new subroutine will become a constant, and it points to an "SV*" that provides the constant value that the subroutine will have.
If the subroutine has one of a few special names, such as "BEGIN" or "END", then it will be claimed by the appropriate queue for automatic running of phase-related subroutines. In this case the relevant glob will be left not containing any subroutine, even if it did contain one before. In the case of "BEGIN", the subroutine will be executed and the reference to it disposed of before this function returns, and also before its prototype is set. If a "BEGIN" subroutine would not be sufficiently constructed by this function to be ready for execution then the caller must prevent this happening by giving the subroutine a different name.
The function returns a pointer to the constructed subroutine. If the sub is anonymous then ownership of one counted reference to the subroutine is transferred to the caller. If the sub is named then the caller does not get ownership of a reference. In most such cases, where the sub has a non-phase name, the sub will be alive at the point it is returned by virtue of being contained in the glob that names it. A phase-named subroutine will usually be alive by virtue of the reference owned by the phase's automatic run queue. But a "BEGIN" subroutine, having already been executed, will quite likely have been destroyed already by the time this function returns, making it erroneous for the caller to make any use of the returned pointer. It is the caller's responsibility to ensure that it knows which of these situations applies.
CV * newXS_len_flags(const char *name, STRLEN len, XSUBADDR_t subaddr, const char *const filename, const char *const proto, SV **const_svp, U32 flags)
void optimize_optree(OP* o)
The initial call must supply the root of the tree as both top and o.
For now it's static, but it may be exposed to the API in the future.
traverse_op_tree;
void CX_CURPAD_SAVE(struct context)
SV * CX_CURPAD_SV(struct context, PADOFFSET po)
SV * PAD_BASE_SV(PADLIST padlist, PADOFFSET po)
void PAD_CLONE_VARS(PerlInterpreter *proto_perl, CLONE_PARAMS* param)
U32 PAD_COMPNAME_FLAGS(PADOFFSET po)
STRLEN PAD_COMPNAME_GEN(PADOFFSET po)
HV * PAD_COMPNAME_OURSTASH(PADOFFSET po)
char * PAD_COMPNAME_PV(PADOFFSET po)
HV * PAD_COMPNAME_TYPE(PADOFFSET po)
bool PadnameIsOUR(PADNAME pn)
bool PadnameIsSTATE(PADNAME pn)
HV * PadnameOURSTASH()
bool PadnameOUTER(PADNAME pn)
HV * PadnameTYPE(PADNAME pn)
void PAD_RESTORE_LOCAL(PAD *opad)
void PAD_SAVE_LOCAL(PAD *opad, PAD *npad)
void PAD_SAVE_SETNULLPAD()
SV * PAD_SETSV(PADOFFSET po, SV* sv)
SAVECOMPPAD(); PAD_SET_CUR_NOSAVE(padlist,n); void PAD_SET_CUR(PADLIST padlist, I32 n)
void PAD_SET_CUR_NOSAVE(PADLIST padlist, I32 n)
SV * PAD_SV(PADOFFSET po)
SV * PAD_SVl(PADOFFSET po)
void SAVECLEARSV(SV **svp)
void SAVECOMPPAD()
XXX DAPM it would make more sense to make the arg a PADOFFSET void SAVEPADSV(PADOFFSET po)
SV * PL_DBsingle
GV * PL_DBsub
SV * PL_DBtrace
U8 PL_dowarn
GV* PL_last_in_gv
GV* PL_ofsgv
SV* PL_rs
djSP;
In all but the most memory-paranoid configurations (ex: PURIFY), heads and bodies are allocated out of arenas, which by default are approximately 4K chunks of memory parcelled up into N heads or bodies. Sv-bodies are allocated by their sv-type, guaranteeing size consistency needed to allocate safely from arrays.
For SV-heads, the first slot in each arena is reserved, and holds a link to the next arena, some flags, and a note of the number of slots. Snaked through each arena chain is a linked list of free items; when this becomes empty, an extra arena is allocated and divided up into N items which are threaded into the free list.
SV-bodies are similar, but they use arena-sets by default, which separate the link and info from the arena itself, and reclaim the 1st slot in the arena. SV-bodies are further described later.
The following global variables are associated with arenas:
PL_sv_arenaroot pointer to list of SV arenas PL_sv_root pointer to list of free SV structures PL_body_arenas head of linked-list of body arenas PL_body_roots[] array of pointers to list of free bodies of svtype arrays are indexed by the svtype needed
A few special SV heads are not allocated from an arena, but are instead directly created in the interpreter structure, eg PL_sv_undef. The size of arenas can be changed from the default by setting PERL_ARENA_SIZE appropriately at compile time.
The SV arena serves the secondary purpose of allowing still-live SVs to be located and destroyed during final cleanup.
 (If debugging with -DD, del_SV() calls the function S_del_sv() to return the SV to the free list with error checking.) new_SV() calls more_sv() / sv_add_arena() to add an extra arena if the free list is empty. SVs in the free list have their SvTYPE field set to all ones.
At the time of very final cleanup, sv_free_arenas() is called from perl_destruct() to physically free all the arenas allocated since the start of the interpreter.
The function visit() scans the SV arenas list, and calls a specified function for each SV it finds which is still live - ie which has an SvTYPE other than all 1's, and a non-zero SvREFCNT. visit() is used by the following functions (specified as [function that calls visit()] / [function called by visit() for each SV]):
sv_report_used() / do_report_used() dump all remaining SVs (debugging aid) sv_clean_objs() / do_clean_objs(),do_clean_named_objs(), do_clean_named_io_objs(),do_curse() Attempt to free all objects pointed to by RVs, try to do the same for all objects indir- ectly referenced by typeglobs too, and then do a final sweep, cursing any objects that remain. Called once from perl_destruct(), prior to calling sv_clean_all() below. sv_clean_all() / do_clean_all() SvREFCNT_dec(sv) each remaining SV, possibly triggering an sv_free(). It also sets the SVf_BREAK flag on the SV to indicate that the refcnt has been artificially lowered, and thus stopping sv_free() from giving spurious warnings about SVs which unexpectedly have a refcnt of zero. called repeatedly from perl_destruct() until there are no SVs left.
Return an SV with the numeric value of the source SV, doing any necessary reference or overload conversion. The caller is expected to have handled get-magic already.
SV* sv_2num(SV *const sv)
void sv_add_arena(char *const ptr, const U32 size, const U32 flags)
I32 sv_clean_all()
void sv_clean_objs()
void sv_free_arenas()
For example, if your scalar is a reference and you want to modify the "SvIVX" slot, you can't just do "SvROK_off", as that will leak the referent.
This is used internally by various sv-modifying functions, such as "sv_setsv", "sv_setiv" and "sv_pvn_force".
One case that this does not handle is a gv without SvFAKE set. After
if (SvTHINKFIRST(gv)) sv_force_normal(gv);
it will still be a gv.
"SvTHINKFIRST" sometimes produces false positives. In those cases "sv_force_normal" does nothing.
U32 SvTHINKFIRST(SV *sv)
Find the name of the undefined variable (if any) that caused the operator to issue a "Use of uninitialized value" warning. If match is true, only return a name if its value matches "uninit_sv". So roughly speaking, if a unary operator (such as "OP_COS") generates a warning, then following the direct child of the op may yield an "OP_PADSV" or "OP_GV" that gives the name of the undefined variable. On the other hand, with "OP_ADD" there are two branches to follow, so we only print the variable name if we get an exact match. "desc_p" points to a string pointer holding the description of the op. This may be updated if needed.
The name is returned as a mortal SV.
Assumes that "PL_op" is the OP that originally triggered the error, and that "PL_comppad"/"PL_curpad" points to the currently executing pad.
SV* find_uninit_var(const OP *const obase, const SV *const uninit_sv, bool match, const char **desc_p)
For example, if all the characters in the sequence are Greek, or Common, or Inherited, this function will return TRUE, provided any decimal digits in it are from the same block of digits in Common. (These are the ASCII digits "0".."9" and additionally a block for full width forms of these, and several others used in mathematical notation.) For scripts (unlike Greek) that have their own digits defined this will accept either digits from that set or from one of the Common digit sets, but not a combination of the two. Some scripts, such as Arabic, have more than one set of digits. All digits must come from the same set for this function to return TRUE.
*ret_script, if "ret_script" is not NULL, will on return of TRUE contain the script found, using the "SCX_enum" typedef. Its value will be "SCX_INVALID" if the function returns FALSE.
If the sequence is empty, TRUE is returned, but *ret_script (if asked for) will be "SCX_INVALID".
If the sequence contains a single code point which is unassigned to a character in the version of Unicode being used, the function will return TRUE, and the script will be "SCX_Unknown". Any other combination of unassigned code points in the input sequence will result in the function treating the input as not being a script run.
The returned script will be "SCX_Inherited" iff all the code points in it are from the Inherited script.
Otherwise, the returned script will be "SCX_Common" iff all the code points in it are from the Inherited or Common scripts.
bool isSCRIPT_RUN(const U8 *s, const U8 *send, const bool utf8_target)
A TRUE return means that at least one code point represented by the sequence either is a wide character not representable as a single byte, or the representation differs depending on whether the sequence is encoded in UTF-8 or not.
See also ""is_utf8_invariant_string" in perlapi", ""is_utf8_string" in perlapi"
bool is_utf8_non_invariant_string(const U8* const s, STRLEN len)
void report_uninit(const SV *uninit_sv)
Unlike most of the other functions that have "utf8" in their name, the input to this function is NOT a UTF-8-encoded string. The function name is slightly odd to emphasize this.
This function is internal to Perl because khw thinks that any XS code that would want this is probably operating too close to the internals. Presenting a valid use case could change that.
See also ""is_utf8_invariant_string" in perlapi" and ""is_utf8_invariant_string_loc" in perlapi",
Size_t variant_under_utf8_count(const U8* const s, const U8* const e)
| 2020-06-21 | perl v5.30.3 |


The Playstation 4, most commonly abbreviated for PS4, is a video game console produced and patented by Sony Interactive Entertainment. It is the fourth part of the “Playstation” series, and is part of the company's eighth generation of consoles.
The popular PS4 was announced in 2013, in that year's edition of the event known as “Playstation Meeting”. The event takes place annually in New York and aims to discuss and present to the public the future of the Playstation line. At this event, details of the new console's hardware were revealed and a discussion was raised about the new features that would be presented at launch.
Also shown were some images of games that, at the time, were in development for the new platform. In addition, there were some technical demonstrations. At E3 of the same year, 2013, Sony gave more information about the console, and also presented the device to the public.
This was Sony's first console that was legally edited and marketed in China since the PS2, when the country's government launched a 14-year ban on video games. Negotiations between Sony and the country's leaders ended in May 2014, and the company was able to resume selling its products in Chinese territory. According to Microsoft executives, China was a potential market. Having the possibility to sell their products in that country would contribute (and, in fact, contributed) significantly to the popularization of the newest Playstation.
The expectation for a PlayStation 5 announcement only increases, but there are still a lot of people in Brazil who haven't even bought the PlayStation 4. And some of those people now have a question: is it still worth buying a PS4 or is it better to wait for the PS5? This answer depends a lot on each person's profile, but My PS4 will try to help.
Before we start to analyze the pros and cons of each option, it is good to remember that there is no confirmation from Sony about the PS5 at the moment. Everything that is said about the console is still in the field of rumors. Always keep that in mind before making your decision. Now, come on!


# File lib/migration.rb, line 136 def say_with_time(message, indent = 2) say(message, indent) result = nil time = Benchmark.measure { result = yield } say("-> %.4fs" % time.real, indent) result end


Visit Soon!
Reach heights up to 311 ft.
Largest trees in the world.
World's Largest Tree
(275 feet tall, 36 feet in diameter)
End of May - Nov. 15
Alway check with Forest Service Office at:
(559) 539-2607 or<PHONE_NUMBER> for latest information.
Trail of a Hundred Giants is located within the Long Meadow Giant Sequoia Grove
The Grove contains 125 giant sequoias over 10 feet in diameter and 143 sequoias under 10 feet in diameter.
About 1.3 miles of paved trail offers several loop options with interpretive signs.
You will view a unique cedar and sequoia tree growing together, and a circle of five sequoias growing together.
It is best to visit in the summer when the road is open, or in the winter by snowmobile.
Hiking Camping Fishing Hunting


Confuse Ray causes the target to become confused. It will fail if the target has a substitute, is already confused, has the Ability Own Tempo or protected by Safeguard.
- Type:
- Category: Status
- Power: --
- Accuracy: 100%
- PP: 10
- Learn at: Lv.19
I know some of them aren't blue. A red Gyarados (despite its usual collor being blue) and an orange Dragonite. Why is Dragonite orange if its previous evolutions are blue, anyway? Haunter is more purple than blue, but it is close enough. Lugia has more white than blue, but, hey, it is the legendary Pokemon of this game!
These are secondary Pokemons I might train during my journey as Champion.
Confuse Ray causes the target to become confused. It will fail if the target has a substitute, is already confused, has the Ability Own Tempo or protected by Safeguard.
Shadow Ball deals damage and has a 20% chance of lowering the target's Special Defense by one stage.
Sludge Bomb inflicts damage and has a 30% chance of poisoning the target.
Thunderbolt does damage and has a 10% chance of paralyzing the target.
Stone Edge deals damage and has an increased critical hit ratio.
Poison Jab inflicts damage and has a 30% chance of poisoning the target.
Earthquake will hit all adjacent Pokémon, including allies.
A recharge turn is required on the turn after damage is done, during which no action may be performed.
Waterfall has a 20% chance of causing the target to flinch.
Outrage inflicts damage for 2-3 turns and can be disrupted by paralysis or hurting itself due to confusion. After Outrage is finished, the user becomes confused, but only if fully executed without being disrupted.
Iron Tail inflicts damage and has a 30% chance of lowering the target's Defense stat by one stage.
Ice Beam inflicts damage and has a 10% chance of freezing the target.
Surf will hit all enemies and allies.
Blizzard does damage and has a 10% chance of freezing the target. Blizzard has 100% accuracy if used while it is hailing. It hits all oponents.
When Hail is used, a hailstorm will begin on the field and lasts for 5 turns. This clears any other type of weather. While Hail is in effect, all Pokémon not of the Ice-type will be damaged for 1/16 of their maximum HP at the end of each turn. Synthesis, Morning Sun and Moonlight will recover only ¼ of the user's maximum HP. Blizzard's accuracy increases to 100% during Hail. Pokémon with the Ice Body Ability recover 1/16 of their maximum HP each round. Pokémon with the Snow Cloak Ability increase their evasion by 20%.
Ice Fang deals damage and has a 10% chance of freezing the opponent. It also has a 10% chance of causing the target to flinch, if the user attacks before the target.
Iron Head inflicts damage and has a 30% chance of causing the target to flinch.
Whirlpool inflicts 1/16 of the target's maximum HP as damage for two to five turns upon use, in addition to the damage dealt when it is used. It also traps the target, preventing switching and escape. If a trapped Pokémon uses Rapid Spin, it will be freed.
On the turn that Fly is selected, the user will fly up high, where it cannot be hit by most moves. Paralysis and self-inflicted damage due to confusion will distrupt fly.
Extrasensory inflicts damage and has a 10% chance of causing the target to flinch.
It has a charging pre-turn, except if holding a Power Herb. Sky Attack has a 30% chance of causing the target to flinch. Sleep, freeze, partial trapping, and flinching will pause but not disrupt the duration of Sky Attack.
Double-Edge inflicts damage and the user receives recoil damage equal to ⅓ of the damage done to the target.
Hydro Cannon inflicts damage and then forces the user to recharge during the next turn, unless this attack misses.
A two-turn move, it charges and raise defense by 1 in the first and damages in the second. If a Power Herb is held by the user, Skull Bash can be executed in one turn. Sleep, freeze, partial trapping, and flinching will pause but not disrupt the duration of Skull Bash.
Water Spout does damage proportionately based on the user's HP. This move's base power reduces as the user's HP reduces. It hits multiple oponents.
Flash Cannon does damage and has a 10% chance of lowering the target's Special Defense by one stage.
Signal Beam deals damage and has a 10% chance of confusing the target.
Steel Wing inflicts damage and has a 10% chance of raising the user's Defense by one stage.
Aura Sphere inflicts damage and is unaffected by modifications to the accuracy stat and evasion stat..
Psychic has a 33.2% chance of lowering the target's Special by one stage.
Flamethrower has a 10% chance of burning the target.
Energy Ball has a 10% chance of lowering the target's Special Defense by one stage.
Ability: Poison Point
Item: None
Location: catch Nidoran F. at Route 35 or 36, evolve at Lv.16 then Moonstone.
Ability: Inner Focus
Item: None
Location: get Dratini at Goldenrod's Game Corner, then evolve at Lv. 30 then Lv.55
Ability: Torrent
Item: None
Location: get Squirtle from Prof. Oak after defeating all 16 Gyms and Red. Evolve at Lv.16 then Lv.36.


See the MediaEval 2021 webpage for information on how to register and participate.
In this task, participants carry out multimedia analysis in order to gain insight into the emotion of players playing video games. The task is called Emotional Mario because it focuses on the iconic video game Super Mario Bros.
Subtask 1: Event Detection: Participants carry out emotional anlaysis on facial videos and biometric data (e.g., heart rate and skin conductivity) collected from players playing the game. The goal is to identify key events (i.e., events of high significance in the gameplay). Such key events include the end of a level, a power-up or extra life for Mario, or Mario’s death.
Subtask 2: Gameplay Summarization (Optional): Participants create a video summary of the best moments of the play. This can include gameplay scenes, facial video, data visualization, and whatever comes to your mind that you find important to tell the game story, the story of what happened during the game.
Subtask 1 is a technical task, and easily approachable. Subtask 2 is an open, creative task, which builds on event detection. Past experience has shown that it is easier to step into the task with a technical subtask, and use that as inspiration for the creative task. The ultimate goal of the Emotional Mario task is to develop new approaches to the creative task of telling the story of a game. Participants are encouraged to make their code public with their submission.
As games are designed to evoke emotions [1], we hypothesize that emotions in the player are reflected in the visuals of the video game. Simple examples are when players are happy after having mastered a particularly complicated challenge, when they are shocked by a jump scare scene in a horror game, or when they are excited after unlocking a new resource. These things can be measured by questionnaires after playing [2], but in the Emotional Mario task, we want to interconnect emotions and gameplay based on data instead of asking the players.
With the rise of deep learning, many large leaps in research have been achieved in recent years such as human-level image recognition, text classification, and even content creation. Games and deep learning also have a rather long history together, specifically in the context of reinforcement learning. However, video games still pose a lot of challenges. Games are understood as engines of experience [1], and as such, they need to invoke human emotions. While emotion recognition has come a far way over the last decade [3], the connection between emotions and video games is still an open and interesting research question. In the Emotional Mario task, we aim to leverage deep learning to move forward our understanding of the role of emotions in video games
The target group for this task is diverse and broad. It includes researchers and practitioners from game design and development, game studies, machine learning, artificial intelligence, and interactive multimedia. We also encourage interdisciplinary research involving people from psychology, game studies, and the humanities discussing the interrelation of biometric data, facial expressions, and gameplay. In any case, regardless of the research background, the submission will help to have a basic understanding of how we can better understand the connection between gameplay and the reaction of the player.
For the EmotionalMario challenge, we focus on the iconic Super Mario Bros. video game and provide a multimodal data set based on a Super Mario Bros. implementation for OpenAI Gym. The data set, called Toadstool [4], contains for a population of ten players their game input, demographics, biomedical sensory input from a medical-grade device (e.g., heart rate and skin conductivity) as well as videos of their faces while playing the game. The data set also contains he gameplay itself, demographics on the players and their scores and times spent in the game.he gameplay itself, demographics on the players and their scores and times spent in the game.
Additionally, we provide ground truth for special events within the gameplay for eight of the study participants. We extracted the data from the gameplay session file. The remaining two serve as data for the runs to be submitted.
The toadstool data is available from https://osf.io/qrkcf/ and the ground truth can be downloaded from [https://www.itec.aau.at/~mlux/files/EmotionalMario2021_Training_Data.zip](https://www.itec.aau.at/~mlux/files/EmotionalMario2021_Training_Data.zip). For a head start we’ve done an analysis with FER of the facial videos. You can find the result here.
Subtask 1: Event Detection: In this subtask, participants identify events in the gameplay by making use of biometric data and videos of facial expressions. These events include player deaths, obtaining power-ups, and completing a level. Ground truth as well as an evaluation script will be provided. We also encourage participants to carry out a failure analysis of their results in order to gain insight in the mistakes that their classifiers make.
Subtask 2: Gameplay Summarization: In this subtask, participants are asked to submit a summary video for a study participant from the Toadstool data. There is no constraint on the modalities of the story, so it can be video, audio, text, images, or a combination thereof. An expert panel with professionals and researchers from the field of game development, game studies, e-sports, and media sciences will then investigate the submissions and judge them for:
[1] Tynan Sylvester. 2013. Designing games: A guide to engineering experiences. O’Reilly Media, Inc.
[2] Abeele, V. V., Spiel, K., Nacke, L., Johnson, D., and Gerling, K. 2020. Development and validation of the player experience inventory: A scale to measure player experiences at the level of functional and psychosocial consequences. International Journal of Human-Computer Studies, 135, 102370.
[3] Saxena, Anvita, Ashish Khanna, and Deepak Gupta. 2020. Emotion recognition and detection methods: A comprehensive survey. Journal of Artificial Intelligence and Systems 2.1 (2020): 53-79.
[4] Henrik Svoren, Vajira Thambawita, Pål Halvorsen, Petter Jakobsen, Enrique Garcia-Ceja, Farzan Majeed Noori, Hugo L. Hammer, Mathias Lux, Michael Alexander Riegler, and Steven Alexander Hicks. 2020. Toadstool: A Dataset for Training Emotional Intelligent Machines Playing Super Mario Bros. In Proceedings of the 11th ACM Multimedia Systems Conference (MMSys ’20). Association for Computing Machinery, New York, NY, USA, 309–314.


{{#cssDeps}} {{/cssDeps}} {{#jsDeps}} {{/jsDeps}}
Your browser doesn't support HTML5 video.
Your browser doesn't support HTML5 audio.


Every month, we have a new box for the first 100 buyers!
Our latest achievements - thanks to you!
subscriptions - and counting!
#BefriendingBoxford Volunteers working on allotments throughout Oxford
Accolades and surprise gifts to ethical businesses in Oxford
#BoxfordBranches of our sustainable coffee shops
Unboxing the magic behind your boxes
What do the students have to say?
Could not be happier! First-class service - a huge shoutout to the team for helping me choose the perfect box.
The feeling of seeing a #BoxfordBox in your pidge is priceless. My favourite part are the personalised, handwritten notes - what a lovely touch!
I've only recently joined the Boxford family but already, as an international student, the boxes really help make Oxford feel like my home away from home.
A variety of boxes to cater for every eventuality
£7.50
£12
£15
£20
We'd love to hear from you
#Boxford
Join the Boxford community!


Just moments ago
Sally Poodle added you as a friend
--- layout : 'default' css : 'feed' title : 'Feed' type : 'UI View' ---
A feed is a collection of events that have occured in series
A standard feed with some optional elements
An event can contain a label
An event can contain additional content explaining the event
A feed can have different sizes


HOME
ABOUT
PROJECTS
CONTACT
CONTACT
US
CONTACT INFO : +254711855010
CANCEL
SEND
inspired by
Matias Nyaga
.content-parent


Hold key "Z" and scroll up/down to change loupe zoom. Hold key "S" and scroll up/down to change loupe size.


Your task in this exercise is to show the behavior for the array-based stack's push operation. In the array displayed below, the "top" position is arr_size .
Push insert_value into the stack.
Click on a value of the stack to highlight it, then click on the "Insert" button to insert insert_value to the highlighted position.
To move the "top" pointer, you should click the label to highlight it, then click the position of the stack that you want to move to.
If the index of "top" is greater than or equal to array size, then the stack is full and nothing can be added. In this case, just click "check answer".
Otherwise, the first step would be to insert a value into the "top" position of the stack.
Finally, increase the "top" index by 1.


Hello, Richard V.Welsh !
Manage Accounts
Change Password
Check Inbox
Sign Out
Richard V.Welsh
Manager
About Candidate
Candidate
Education
Document
Management
Parameter
Intake
Catalog
Year
Semester
Stage
Address
Major
Candidate Type
Admission
Exam Subject
Score Of Exam Subject
Stage Detail
Document
Add
No.
English name
Vietnamese name
Status
Sequence Num
Note
Edit
1
Comfirmation form
Phiếu xác nhận
Inactive
1
Detail
|
Edit
|
Delete
Document Detail
×
English Name
Vietnamese Name
Status
Inactive
Active
Others
Input Type
Checkbox
Text
Others
Sequence Num
Note
Edit Document
×
English Name
Vietnamese Name
Status
Inactive
Active
Others
Input Type
Checkbox
Text
Others
Sequence Num
Note
Delete Document
×
Are you sure delete this Document?
«
1
2
3
»
New Document
×
English Name
Vietnamese Name
Status
Inactive
Active
Others
Input type
Checkbox
Text
Others
Sequence Num
Note


Mayo gardaì respond to social media reports of alleged child abduction
GARDAÌ in Mayo have responded to social media reports of an alleged child abduction in the Castlebar area earlier tonight.
When contacted by The Connaught Telegraph, a spokesperson said the force is aware of the reports.
"We are investigating an incident, but we are not investigating a child abduction," the spokesperson explained.
The garda spokesperson added no further comment is being made on the matter.


Look at Paired Pics with Info
Server
Testing Info
Enter "Confirmed" inside the input before pressing any clear buttons


--- layout: template menu : tutorial title : Hello World JDBC Tutorial ---
This tutorial is the same as the Hello World CSV tutorial except that greetings are read from a database rather than a CSV flat file.
We will process a set of database records containing greetings and and generate greeting messages.
To keep the tutorial simple, we will use an in-memory database having a table named greeting
with the following content:
1,foo
2,bar
Each database record is composed of 2 fields :
For each record, the batch application should print to the console a greeting of the format : Hi foo! Your id is 1 .
Easy Batch development is POJO-based, so we would like to map each database record to an instance of the following Greeting
bean:
public class Greeting {
private int id;
private String name;
// Getters and Setters omitted
public String getGreetingMessage() {
return "Hi " + name + "! Your id is " + id;
}
}
So let's get started!
The goal of Easy Batch is to let you concentrate on your batch processing logic and to take care of the boilerplate code of reading data from the database and mapping records to domain objects.
First, let's implement our batch processing logic by extending the AbstractRecordProcessor
class:
public class GreetingProcessor extends AbstractRecordProcessor<Greeting> {
@Override
public void processRecord(Greeting greeting) throws Exception {
System.out.println(greeting.getGreetingMessage());
}
}
This processor will print the greeting message for each input record as required.
Actually, we have almost finished our batch implementation! We should now configure Easy Batch engine to :
Greeting
beanGreetingProcessor
The following listing provides this configuration:
public class Launcher {
public static void main(String[] args) throws Exception {
// create an embedded hsqldb in-memory database
Connection connection = DriverManager.getConnection("jdbc:hsqldb:mem", "sa", "");
populateEmbeddedDB(connection);
// Build an easy batch engine
EasyBatchEngine easyBatchEngine = new EasyBatchEngineBuilder()
// requirement N°1
.registerRecordReader(new JdbcRecordReader(
connection, // database JDBC connection
"select * from greeting")) // Query string to fetch data
// requirement N°2
.registerRecordMapper(new JdbcRecordMapper(Greeting.class))
// requirement N°3
.registerRecordProcessor(new GreetingProcessor())
.build();
// Run easy batch engine
EasyBatchReport easyBatchReport = easyBatchEngine.call();
// Print the batch execution report
System.out.println(easyBatchReport);
}
}
By default, Easy Batch will use the jdbc result set meta data to map greeting table columns to Greeting
fields with the same name.
That's all, we can now run the batch and see the results.
The complete source code of this tutorial is available here.
To run the tutorial with maven, launch the following command in the easybatch-tutorials
directory :
mvn exec:java -PrunHelloWorldJDBCTutorial
If everything is ok, you should see something like the following output in the console :
INFO: Initializing easy batch engine
INFO: Data source: Connection URL: jdbc:hsqldb:mem | Query string: select * from greeting
INFO: Strict mode: false
INFO: Total records = 2
INFO: easy batch engine is running...
Hi foo! Your id is 1
Hi bar! Your id is 2
INFO: Shutting down easy batch engine
As expected, Easy Batch generated a greeting message for each person.
In this tutorial, you have learned how to process data from a database using Easy Batch.
With Easy Batch, all we have done is :
Easy Batch handled all the boilerplate code of reading, filtering, parsing and mapping database records to
instances of our domain object Greeting
and actually has reduced this boilerplate code from hundred lines to only a very few lines! (listing above)
The following table summarizes what we have done and what Easy Batch has done for us :
| Task | You | Easy Batch |
|---|---|---|
| Provide configuration meta data | ||
| Provide record processing logic | ||
| Handle I/O for database connection | ||
| Read data record by record | ||
| Map records to domain objects | ||
| Apply business processing logic |


Hocus Focus
JOIN CHAT ROOM
REPORT
LOGIN
SIGNUP
ADMIN
LOGOUT
:
00
Start
Pause
Reset
Work Duration
Break Duration
To-Do List


You can add more Kodi hosts in the orange section to the far right along the top.
Click the "Show running data" button in the right of the red section along the top to watch InfoLabels and InfoBooleans, the same data available to skins.
All notifications from the connected Kodi host will show up on the right, and you can explore JSON-RPC methods to the left, then fill out the params and execute it below.
URLs power much of the functionality, which can be bookmarked for quick access.
A details box will show up at the bottom of the column to the right, showing details of certain items as your mouse cursor passes over them. Param details will show up here, as well as the full JSON-RPC request over the title of method "Calling" and "Result" info, and images from image URLs in requests and the "Available art" running data section. Click on the item to pin the details so that your mouse cursor can roam.
See Web PDB for super Python debugging powers.
To use the "View Kodi log" button, add "special://logpath/" as a media source in Kodi (pictures, music, or videos; the file browser won't work). Do note that this can allow HTTP requests to Kodi to read everything in the same folder as the log, including subdirectories. On Windows this includes everything in Kodi's entire data directory.


Once You have Accepted a booking, the customer pays directly to the site.
Once the service is completed, we will pay the money to your account within 48 hours.
The money will be paid as an income to your account, which means it is up to you to report your income to a seat.


Searsia
Bringing search to the fediverse
Inter-Actief Lunch Meeting, 30 May 2017
Web search?
Our approach...
A/B-testing a hypothesis
-
We created an interface designed to encourage people to type longer queries (...)
Our interface design creates a halo around the query text box that varies
in color and size with the length of the query being constructed (...)
Results suggest that our interface manipulation may be effective for eliciting longer queries.
-
Elena Agapie, Gene Golovchinsky, and Pernilla Qvarfordt. 2013.
Leading
people to longer queries. In Proceedings of SIGCHI'13 Conference on Computer–Human Interaction, 3019–3022
The Query Halo Effect at UT Search
Query autocompletion considered harmful
- Lawsuit France: "cnfdi arnaque"
- Lawsuit Italy: "[name] truffatore"
- Lawsuit Germany: "bettina wulff prostitute"
- ... etc.
- "Michele Obama is a man" ??
Autocompletion Stereotypes
Query autocompletions without tracking
Experiment:
Autocompletions from user data
query log by Pass et al. (2006)
Autocompletions from web content
anchor texts from the ClueWeb09 web crawl
G. Pass, A. Chowdhury and C. Torgeson (2006) A Picture of Search. In:
Proceedings of the 1st international conference on Scalable information systems (InfoScale), 1-7
Query autocompletions without tracking
NEXT: Search advertisements without tracking
-
It is a myth that search engines need to track you to make money on Web search. When you type in a search, we can show an ad just based on that search term. For example, if you type in, "car" we show a car ad. That doesn't involve tracking because it is based on the keyword and not the person.
-
DuckDuckGo Advertising and Affiliates
Conclusion
-
Distribution of responsibilities:
More objective — harder to manipulate or censor.
-
Queries via broker:
More private — Search engines cannot track individuals.
-
No web crawling:
Cheaper — easy to maintain.
-
A/B testing:
"Industrial" research for academics!
-
Recommendations without tracking:
Query suggestions and ads based on content, not on user data.
People
- Dolf Trieschnigg, Dong Nguyen, Djoerd Hiemstra, Ke Zhou, Thomas Demeester
(Almer Tigelaar, Rob Stortelder)
Want to develop the fediverse, but don't like search?
- Help set up: mastodon.utwente.nl
Thanks
/


--- title: Violin Plots author: Stefania Ashby date: '2019-12-09' slug: violin-plots categories: [] tags: - data visualization - violin plots - ggplot subtitle: 'Why choose violin plots over density plots?' summary: 'Visual example of why sometimes density plots are difficult to read. Example code for creating violin plots using ggplot2 included. ' authors: [] lastmod: '2019-12-09T23:28:22-08:00' featured: no image: caption: '' focal_point: '' preview_only: no projects: [] markup: blackfriday ---
Violin plots allow us to look at the distribution of our data. But I know what you’re thinking, “Can’t I just use a density plot to do the same thing?”. While it’s true you can use the density plot to show the same information, violin plots are better if you have multiple groups or conditions you need to plot in the same chart.
Let me show you why:
The example data I will use here comes from a manuscript that I am currently preparing for publication. Here I have two conditions that I’m plotting: 1. Categorization accuracy for old items, 2. Categorization accuracy for new items.
pal = wes_palette("Darjeeling1", 2, type = "discrete") # Wes Anderson Palette's are fun! Check them out!
## Build density plot
cat_density1 <- ggplot(cat_plot_data, aes(x = accuracy, fill = condition)) +
geom_density() +
scale_fill_manual(labels = cat_labels, values = pal) +
labs(title = "Categorization",
x = "Accuracy",
y = "Density") +
theme(legend.position = "bottom",
legend.title = element_blank(),
legend.justification = "center",
plot.title = element_text(hjust = .5))
cat_density1
You can see that when we use a density plot, we get a nice look at the distribution of the two groups. However, they are overlapping. This may not be a big deal when we only have two conditions/groups we are comparing. But imagine how much more difficult this would be to visualize our data if we had 3 or more groups.
One thing we could do is use the facet_wrap function to split our distributions into separate but side-by-side charts.
cat_density2 <- ggplot(cat_plot_data, aes(x = accuracy, fill = condition)) +
geom_density() +
scale_fill_manual(labels = cat_labels, values = pal) +
labs(title = "Categorization",
x = "Accuracy",
y = "Density") +
theme(legend.position = "bottom",
legend.title = element_blank(),
legend.justification = "center",
plot.title = element_text(hjust = .5)) +
facet_wrap(~condition, ncol = 1) +
theme(strip.background = element_blank(), #Remove the condition labels since we have a legend
strip.text.x = element_blank())
cat_density2
This looks pretty nice! But, violin plots allow us to look at the same information but with all groups included in the same chart. No duplicate y-axis!
We can plot the same data on a single graph like so:
cat_v_basic <- ggplot(cat_plot_data, aes(x = condition, y = accuracy, fill=condition)) +
geom_violin(trim = FALSE) +
scale_fill_manual(values = pal) +
ylab("Categorization Accuracy (% Correct)") +
theme(legend.position = "none",
axis.title.x = element_blank(),
axis.title.y = element_text(size = 15),
text = element_text(family = "Arial",
size = 25)) +
scale_y_continuous(breaks = c(0,.25, .5, .75, 1)) +
scale_x_discrete(labels= cat_labels)
cat_v_basic
I can also superimpose individual dots for each subject to help visualize individual differences in the data.
cat_l_basic <- ggplot(cat_plot_data, aes(x = condition, y = accuracy, fill=condition)) +
geom_violin(trim = FALSE) +
geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = .75, fill = "black") + #added dots
scale_fill_manual(values = pal) +
ylab("Categorization Accuracy (% Correct)") +
theme(legend.position = "none",
axis.title.x = element_blank(),
axis.title.y = element_text(size = 15),
text = element_text(family = "Arial",
size = 25)) +
scale_y_continuous(breaks = c(0,.25, .5, .75, 1)) +
scale_x_discrete(labels= cat_labels)
cat_l_basic
Want to know the average accuracy? I can also add a marker to denote the mean for each group and a reference line to show where chance performance lies (33% for three categories). I’ll also space the dots further apart from one another so they’re no longer touching.
pal = wes_palette("Darjeeling1", 2, type = "discrete")
## Build plot
cat_v_fancy <- ggplot(cat_plot_data, aes(x = condition, y = accuracy, fill=condition)) +
geom_violin(trim = FALSE, scale = "count") +
geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = .75,stackratio = 1.5, fill = "black") +
stat_summary(fun.y = mean, geom = "point", size = 3, shape = 23, fill = "Gold") + #adding mean marker
scale_fill_manual(values = pal) +
labs(title = "Categorization",
y = "Categorization Accuracy (% Correct)") +
theme(legend.position = "none",
plot.title = element_text(size = 20, hjust = .5),
axis.title.x = element_blank(),
axis.title.y = element_text(size = 15),
text = element_text(family = "Arial",
size = 25)) +
scale_y_continuous(breaks = c(0,.25, .5, .75, 1)) +
scale_x_discrete(labels= cat_labels) +
geom_hline(yintercept = .333, linetype = "dashed", color = "black") #added reference line
cat_v_fancy


Magee clothing firm hit by Brexit fears
Magee, one of the country’s best-known clothing brands, has blamed Brexit for it having closed a distribution facility in Antrim and transferring the operation to Donegal.
The company closed the Ballymena distribution facility which it set up almost 100 years ago ahead of the original October 31 deadline for Britain to leave the EU.
Magee chairman Lynn Temple said the business was closed “due to the definite possibility of a no-deal Brexit and the punitive duties on clothing in and out of Northern Ireland, which would make its own retail outlets to wholesale customers in Ireland impossible to service”.
He said tariffs of 12% would have applied under World Trade Organisation rules in the event of a no-deal Brexit. A spokesman said Magee retained a number of staff who worked at the Ballymena facility but declined to say how many jobs were lost at the site or the number of jobs created at the new distribution facility in Donegal.
Mr Temple also blamed the uncertainties caused by Brexit for a 44% drop in profits to €159,755 at Magee Clothing Ltd last year. Magee generates most of its sales in the UK and Ireland. “Profits were down in 2018 due to Brexit-related uncertainties, additional costs arising from this and the ongoing development costs of on-line sales and start-up costs in own retailing,” said Mr Temple.
“Total revenue is approximately the same for 2018 as for 2017, although affected by exchange rates,” he said.
Magee’s online sales showed “encouraging year-on-year growth”, with sales growing in overseas markets such as the US, he said.


Memory Dishes: Women and African Diasporic Cooking, Brown University 2018-2019
A hyper-local, oral-history based research project on African diasporic cooking practices and foodways and their contemporary manifestations in the lives of six Rhode Island families of African descent. Memory Dishes explores the ways culinary histories are passed intergenerationally between women, acting as sites of cultural retention and transformation through time and migration. This research culminated in the 2019 Center for the Study of Slavery and Justice commencement exhibition Memory Dishes: Women and African Diasporic Cooking.
https://www.memorydishes-cssj.org/
Freedom on the Move, University of Alabama 2015
Research assistant for Dr. Joshua Rothman and the “Freedom on the Move” project, a digital database of North American runaway slave advertisements. Studied micro-slides of The Montgomery Advertiser and digitally captured the content of runaway ads to be added to the larger national digital database
http://freedomonthemove.org/
Runaway Advertisements, Hair, and Colonial Racial Identity in Eighteenth Century America, University of Alabama 2015
Researched the connection between the depiction of slave hair in runaway advertisements and colonial American racial identity. In this project she argues that hair was one of the first features European colonists used to create racial divisions in North America in order to support order through slavery. Typically in these ads slaves with more phenotypically sub-Saharan African features were described as having “kinky”, “coily”, “wool-like” hair. Some slaves with dark skin could be said as having “Indian-hair”, while a slave identified as a mulatto could have the hair “of a white man”. This research on colonial slavery connects to interest in the ways the divisions present in black America have been passed down through slavery, and how these divisions have been rejected, embraced, and transformed by contemporary black Americans.
What Does It Mean to Be Human?, Smithsonian National Museum of Natural History 2015
NSF funded Undergraduate Research Experience at the Smithsonian National Museum of Natural History. Johanna completed museum education research project on visitor responses to the question "What does it mean to be human?" in the Hall of Human Origins. These responses were coded into categories (cognitive, social, biological, emotional, and). The data was used to gage how visitors were engaging with the Hall of Human Origins and its evolutionary explanation of humanity. Its results will be used for future programmatic and exhibit design. Presented Findings at the American Association of Physical Anthropologists.
https://naturalhistory.si.edu/sites/default/files/media/file/2015-obenda-poster.pdf
17th Century Barbados Slave Naming Practices: A Cultural Retention, University of Alabama 2013-2014
Independent undergraduate research under the guidance of University of Alabama’s Dr. Jenny Shaw. This research centered on African cultural retention and adaptation observed through naming practices in slave communities in seventeenth-century Barbados. Explored the idea that the use of African naming practices in slave societies resulted from the need for new cultural bonds that could aid existence inside the structure of forced servitude


Prokka is a tool that facilitates the fast annotation of prokaryotic genomes.
The goals of this tutorial are to:
Download and extract the latest version of prokka:
cd ~/
git clone https://github.com/tseemann/prokka.git
We also will need some dependencies such as bioperl:
sudo apt-get -y install bioperl libdatetime-perl libxml-simple-perl libdigest-md5-perl
This may take a little while.
and we need an XML package from perl
sudo bash
export PERL_MM_USE_DEFAULT=1
export PERL_EXTUTILS_AUTOINSTALL="--defaultdeps"
perl -MCPAN -e 'install "XML::Simple"'
exit
Now, you should be able to add Prokka to your $PATH
and set up the index for the sequence database:
export PATH=$PATH:$HOME/prokka/bin
prokka --setupdb
To make sure the database loaded directly:
prokka --listdb
You should see something like:
tx160085@js-157-212:~$ prokka --listdb
[17:04:15] Looking for databases in: /home/tx160085/prokka/bin/../db
[17:04:15] * Kingdoms: Archaea Bacteria Mitochondria Viruses
[17:04:15] * Genera: Enterococcus Escherichia Staphylococcus
[17:04:15] * HMMs: HAMAP
[17:04:15] * CMs: Bacteria Viruses
Prokka uses a core set of the Uniprot-DB Kingdom sets against which it blasts your samples. It is possible to search in a more specific dataset, e.g. the genus Enterococcus, by adding a few flags to the command.
–usegenus –genus Enterococcus
Question: What do you think you would do for adding to the default databases?
Prokka should be good to go now– you can check to make sure that all is well by typing prokka
. This should print the help screen with all available options. You can find out more about Prokka databases here.
Make a new directory for the annotation:
cd ~/
mkdir annotation
cd annotation
Link the metagenome assembly file into this directory:
ln -fs ~/mapping/subset_assembly.fa .
Now it is time to run Prokka! There are tons of different ways to specialize the running of Prokka. We are going to keep it simple for now, though. It will take a little bit to run.
prokka subset_assembly.fa --outdir prokka_annotation --prefix metagG --metagenome --kingdom Bacteria
Question: Look at the results of the prokka analysis as it prepares your output file. What types of categories are you seeing flash by on the screen?
Don’t worry, the program tends to pause here:
Running: cat prokka_annotation\/sprot\.faa | parallel --gnu --plain -j 6 --block 242000
--recstart '>' --pipe blastp -query --db /home/tx160085/prokka/bin/../db/kingdom/Bacteria/sprot
-evalue 1e-06 -num_threads 1 -num_descriptions 1 -num_alignments 1 -seg no > prokka_annotation\/sprot\.blast 2> /dev/null
This will generate a new folder called prokka_annotation
in which will be a series of files, which are detailed here.
In particular, we will be using the *.ffn
file to assess the relative read coverage within our metagenomes across the predicted genomic regions.
Question: Take a moment and look inside the output files.:
cd ~/annotation/prokka_annotation
less -S *.fsa
less reminders:
*Press space_bar to page down *Press q to exit the less commands
Kraken is a system for assigning taxonomic labels to short DNA sequences, usually obtained through metagenomic studies. Kraken aims to achieve high sensitivity and high speed by utilizing exact alignments of k-mers and a novel classification algorithm. See Kraken Home Page for more information.
Prodigal (Prokaryotic Dynamic Programming Genefinding Algorithm) is a microbial (bacterial and archaeal) gene finding program developed at Oak Ridge National Laboratory and the University of Tennessee. See the Prodigal home page for more info. `Citation<http://denbi-metagenomics-workshop.readthedocs.io/en/latest/geneprediction/index.html>`__
Prodigal is already installed inside the prokka wrapper, but sometimes it is handy to generate a standalone .gff file for annotation.
cd ~
git clone https://github.com/DerrickWood/kraken.git
cd ~/kraken
mkdir ~/kraken/bin
./install_kraken.sh ~/kraken/bin
export PATH=$PATH:$HOME/kraken/bin
mkdir ~/KRAKEN
cd ~/KRAKEN
wget http://ccb.jhu.edu/software/kraken/dl/minikraken.tgz
tar -xvf minikraken.tgz
cd ~/annotation
mkdir kraken_annotation
kraken --db ~/KRAKEN/minikraken_20141208/ --threads 2 --fasta-input subset_assembly.fa --output kraken_annotation/subset_assembly.kraken
kraken-translate --db ~/KRAKEN/minikraken_20141208/ kraken_annotation/subset_assembly.kraken > kraken_annotation/subset_assembly.kraken.labels
Kraken has now provided a taxonomic assignment to all of the clusters.
To generate a summary table:
cd ~/annotation
kraken-report --db ~/KRAKEN/minikraken_20141208 kraken_annotation/subset_assembly.kraken > kraken_annotation/subset_assembly.kraken.report
The top of the file lists all the unclassified sequences, to look at the file and skip over these, do the following:
grep -v ^U ~/annotation/kraken_annotation/subset_assembly.kraken.report | head -n20
The output of kraken-report is tab-delimited, with one line per taxon. The fields of the output, from left-to-right, are as follows:
- Percentage of reads covered by the clade rooted at this taxon
- Number of reads covered by the clade rooted at this taxon
- Number of reads assigned directly to this taxon
- A rank code, indicating (U)nclassified, (D)omain, (K)ingdom, (P)hylum, (C)lass, (O)rder, (F)amily, (G)enus, or (S)pecies. All other ranks are simply ‘-‘.
- NCBI taxonomy ID
- indented scientific name
Example output:
tx160085@js-157-212:~/annotation/kraken_annotation$ grep -v ^U subset_assembly.kraken.report | head -n20
89.60 8311 8311 U 0 unclassified
10.40 965 0 - 1 root
10.40 965 3 - 131567 cellular organisms
10.37 962 43 D 2 Bacteria
6.51 604 0 P 200918 Thermotogae
6.51 604 0 C 188708 Thermotogae
6.51 604 0 O 2419 Thermotogales
6.51 604 8 F 188709 Thermotogaceae
5.11 474 0 G 28236 Petrotoga
5.11 474 0 S 69499 Petrotoga mobilis
5.11 474 474 - 403833 Petrotoga mobilis SJ95
1.22 113 0 G 1184396 Mesotoga
1.22 113 0 S 1184387 Mesotoga prima
1.22 113 113 - 660470 Mesotoga prima MesG1.Ag.4.2
0.04 4 0 G 651456 Kosmotoga
0.04 4 0 S 651457 Kosmotoga olearia
0.04 4 4 - 521045 Kosmotoga olearia TBF 19.5.1
0.02 2 1 G 2335 Thermotoga
0.01 1 0 S 177758 Thermotoga lettingae
0.01 1 1 - 416591 Thermotoga lettingae TMO
Why use Kraken?
For a simulated metagenome of 100 bp reads in its fastest mode of operation, , Kraken processed over 4 million reads per minute on a single core, over 900 times faster than Megablast and over 11 times faster than the abundance estimation program MetaPhlAn. Kraken’s accuracy is comparable with Megablast, with slightly lower sensitivity and very high precision.`Citation<http://denbi-metagenomics-workshop.readthedocs.io/en/latest/classification/kraken.html>`__
However, kraken is only as sensitive as the provided database, so for unusual samples, a custom database needs to be constructed . The accuracy is very sensitive to the quantity of samples in the database.
cd ~
wget https://github.com/hyattpd/Prodigal/releases/download/v2.6.3/prodigal.linux
tar -xvf v2.6.3.tar.gz
chmod 775 ~/prodigal.linux
Using prodigal with the same set of data, we can get a list of predicted genes.
cd ~/annotation
mkdir prodigal_annotation
~/prodigal.linux -p meta -a prodigal_annotation/subset_assembly.faa -d prodigal_annotation/subset_assembly.fna -f gff -o prodigal_annotation/subset_assembly.gff -i subset_assembly.fa