The following topics are covered:
SunPKCS11
ProviderSUN
ProviderSunRsaSign
ProviderSunJSSE
ProviderSunJCE
ProviderSunJGSS
ProviderSunSASL
ProviderXMLDSig
ProviderSunPCSC
ProviderSunMSCAPI
ProviderSunEC
ProviderOracleUcrypto
ProviderApple
ProviderNote: The Standard Names Documentation contains more information about the standard names used in this document.
The Java platform defines a set of APIs spanning major security areas, including cryptography, public key infrastructure, authentication, secure communication, and access control. These APIs allow developers to easily integrate security mechanisms into their application code. The Java Cryptography Architecture (JCA) and its Provider Architecture is a core concept of the Java Development Kit (JDK). It is assumed readers have a solid understanding of this architecture.
This document describes the technical details of the providers shipped as part of Oracle's Java Environment.
Reminder: Cryptographic implementations in the JDK are distributed through several different providers ("Sun", "SunJSSE", "SunJCE", "SunRsaSign") for both historical reasons and by the types of services provided. General purpose applications SHOULD NOT request cryptographic services from specific providers. That is:
getInstance("...", "SunJCE"); // not recommended
versus
getInstance("..."); // recommended
Otherwise, applications are tied to specific providers that may not be available on other Java implementations. They also might not be able to take advantage of available optimized providers (for example, hardware accelerators via PKCS11 or native OS implementations such as Microsoft's MSCAPI) that have a higher preference order than the specific requested provider.
By default, an application can use cryptographic algorithms of any strength.
However, due to import regulations in some locations, you may have to limit the
strength of those algorithms. The JDK provides two different sets of jurisdiction
policy files, "limited" and "unlimited", in the directory
<java-home>/jre/lib/security/policy
that determine the strength of cryptographic algorithms. Information about
jurisdiction policy files and how to activate them is available in
Appendix C: Cryptographic Strength Configuration.
Consult your export/import control counsel or attorney to determine the exact requirements for your location.
For the "limited" configuration, the following table lists the maximum key sizes allowed by the "limited" set of jurisdiction policy files:
| Algorithm | Maximum Keysize |
|---|---|
| DES | 64 |
| DESede | * |
| RC2 | 128 |
| RC4 | 128 |
| RC5 | 128 |
| RSA | * |
| all others | 128 |
The javax.crypto.Cipher.getInstance(String
transformation)
factory method generates
Cipher
s using transformations of the form
algorithm/mode/padding. If the mode/padding are
omitted, the SunJCE and SunPKCS11 providers use ECB as the default
mode and PKCS5Padding as the default padding for many symmetric
ciphers.
It is recommended to use transformations that fully specify the algorithm, mode, and padding instead of relying on the defaults.
Note: ECB works well for single blocks of data and can be parallelized, but absolutely should not be used for multiple blocks of data.
The following table lists the default preference order of the
available SecureRandom
implementations.
| OS | Algorithm Name | Provider Name |
|---|---|---|
| Solaris | 1. PKCS11* | SunPKCS11 |
| 2. NativePRNG** | Sun | |
| 3. SHA1PRNG** | Sun | |
| 4. NativePRNGBlocking | Sun | |
| 5. NativePRNGNonBlocking | Sun | |
| Linux | 1. NativePRNG** | Sun |
| 2. SHA1PRNG** | Sun | |
| 3. NativePRNGBlocking | Sun | |
| 4. NativePRNGNonBlocking | Sun | |
| macOS | 1. NativePRNG** | Sun |
| 2. SHA1PRNG** | Sun | |
| 3. NativePRNGBlocking | Sun | |
| 4. NativePRNGNonBlocking | Sun | |
| Windows | 1. SHA1PRNG | Sun |
| 2. Windows-PRNG*** | SunMSCAPI |
* The SunPKCS11
provider is available on all platforms, but is
only enabled by default on Solaris as it is the only OS with a
native PKCS11 implementation automatically installed and
configured. On other platforms, applications or deployers must
specifically install and configure a native PKCS11 library, and
then configure and enable the SunPKCS11
provider to use it.
** On Solaris, Linux, and macOS, if the entropy gathering
device in java.security
is set to
file:/dev/urandom
or file:/dev/random
,
then NativePRNG is preferred to SHA1PRNG. Otherwise, SHA1PRNG is
preferred.
*** There is currently no NativePRNG on Windows. Access to the
equivalent functionality is via the SunMSCAPI
provider.
If there are no SecureRandom
implementations
registered in the JCA framework,
java.security.SecureRandom
will use the hardcoded
SHA1PRNG.
SunPKCS11
ProviderThe Cryptographic Token Interface Standard (PKCS#11) provides native
programming interfaces to cryptographic mechanisms, such as
hardware cryptographic accelerators and Smart Cards. When properly
configured, the SunPKCS11
provider enables
applications to use the standard JCA/JCE APIs to access native
PKCS#11 libraries. The SunPKCS11
provider itself
does not contain cryptographic functionality, it is simply a
conduit between the Java environment and the native PKCS11
providers. The Java PKCS#11 Reference
Guide has a much more detailed treatment of this provider.
SUN
ProviderJDK 1.1 introduced the Provider
architecture. The
first JDK provider was named SUN
, and contained two
types of cryptographic services (MessageDigest
s and
Signature
s). In later releases, other mechanisms were
added (SecureRandom
number generators,
KeyPairGenerator
s, KeyFactory
s, and so
on.).
United States export regulations in effect at the time placed
significant restrictions on the type of cryptographic functionality
that could be made available internationally in the JDK. For this
reason, the SUN
provider has historically contained
cryptographic engines that did not directly encrypt or decrypt
data.
The following algorithms are available in the SUN
provider:
| Engine | Algorithm Names |
|---|---|
AlgorithmParameterGenerator |
DSA |
AlgorithmParameters |
DSA |
CertificateFactory |
X.509 |
CertPathBuilder |
PKIX |
CertPathValidator |
PKIX |
CertStore |
Collection LDAP |
Configuration |
JavaLoginConfig |
KeyFactory |
DSA |
KeyPairGenerator |
DSA |
KeyStore |
JKS DKS |
MessageDigest |
MD2 MD5 SHA-1 SHA-224 SHA-256 SHA-384 SHA-512 |
Policy |
JavaPolicy |
SecureRandom |
SHA1PRNG (Initial seeding is currently done via a combination
of system attributes and the java.security entropy
gathering device)NativePRNG ( nextBytes() uses
/dev/urandom , generateSeed() uses
/dev/random )NativePRNGBlocking ( nextBytes() and
generateSeed() use /dev/random )NativePRNGNonBlocking ( nextBytes() and
generateSeed() use
/dev/urandom ) |
Signature |
NONEwithDSA SHA1withDSA SHA224withDSA SHA256withDSA |
The following table lists OIDs associated with SHA Message Digests:
| SHA Message Digest | OID |
|---|---|
| SHA-224 | 2.16.8<IP_ADDRESS>.4.2.4 |
| SHA-256 | 2.16.8<IP_ADDRESS>.4.2.1 |
| SHA-384 | 2.16.8<IP_ADDRESS>.4.2.2 |
| SHA-512 | 2.16.8<IP_ADDRESS>.4.2.3 |
The following table lists OIDs associated with DSA Signatures:
| DSA Signature | OID |
|---|---|
| SHA1withDSA | 1.2.840.10040.4.3 <IP_ADDRESS>.2.13 <IP_ADDRESS>.2.27 |
| SHA224withDSA | 2.16.8<IP_ADDRESS>.4.3.1 |
| SHA256withDSA | 2.16.8<IP_ADDRESS>.4.3.2 |
The SUN
provider uses the following default
keysizes (in bits) and enforces the following restrictions:
KeyPairGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| DSA | 1024 | Keysize must be a multiple of 64, ranging from 512 to 1024 (inclusive), or 2048. |
AlgorithmParameterGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| DSA | 1024 | Keysize must be a multiple of 64, ranging from 512 to 1024 (inclusive), or 2048. |
CertificateFactory
/CertPathBuilder
/CertPathValidator
/CertStore
ImplementationsAdditional details on the SUN
provider
implementations for CertificateFactory
,
CertPathBuilder
, CertPathValidator
and
CertStore
are documented in Appendix B of the PKI
Programmer's Guide.
SunRsaSign
ProviderThe SunRsaSign
provider was introduced in JDK 1.3
as an enhanced replacement for the RSA signatures in the SunJSSE
provider.
The following algorithms are available in the
SunRsaSign
provider:
| Engine | Algorithm Names |
|---|---|
KeyFactory |
RSA |
KeyPairGenerator |
RSA |
Signature |
MD2withRSA MD5withRSA SHA1withRSA SHA224withRSA SHA256withRSA SHA384withRSA SHA512withRSA |
The SunRsaSign
provider uses the following default
keysize (in bits) and enforces the following restriction:
KeyPairGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| RSA | 2048 | Keysize must range between 512 and 16384 bits. If the key size exceeds 3072, then the public exponent length cannot exceed 64 bits. |
SunJSSE
ProviderThe Java Secure Socket Extension (JSSE) was originally released
as a separate "Optional Package" (also briefly known as a "Standard
Extension"), and was available for JDK 1.2.n and
1.3.n. The SunJSSE
provider was introduced as
part of this release.
In earlier JDK releases, there were no RSA signature providers
available in the JDK, therefore SunJSSE
had to provide
its own RSA implementation in order to use commonly available
RSA-based certificates. JDK 5 introduced the
SunRsaSign
provider, which provides all the
functionality (and more) of the SunJSSE
provider.
Applications targeted at JDK 5.0 and later should request instances
of the SunRsaSign
provider instead. For backward
compatibility, the RSA algorithms are still available through this
provider, but are actually implemented in the
SunRsaSign
provider.
The following algorithms are available in the
SunJSSE
provider:
| Engine | Algorithm Name(s) |
|---|---|
KeyFactory |
RSA |
KeyManagerFactory |
SunX509: A factory for PKIX: A factory for |
KeyPairGenerator |
RSA |
KeyStore |
PKCS12Footnote 1 |
Signature |
MD2withRSA MD5withRSA SHA1withRSA |
SSLContext |
SSLv3 TLSv1 TLSv1.1 TLSv1.2 |
TrustManagerFactory |
SunX509: A factory for PKIX: A factory for |
Footnote 1
The PKCS12 KeyStore
implementation does not support the
KeyBag
type.
The SunJSSE
provider supports the following
protocol
parameters:
| Protocol | Enabled by Default for Client | Enabled by Default for Server |
|---|---|---|
| SSLv3 | No(Unavailable Footnote 2) | No(Unavailable Footnote 2) |
| TLSv1 | Yes | Yes |
| TLSv1.1 | Yes | Yes |
| TLSv1.2 | Yes | Yes |
| SSLv2Hello Footnote 1 | No | Yes |
Footnote 1 - The SSLv3, TLSv1, TLSv1.1 and TLSv1.2 protocols allow you to send SSLv3, TLSv1, TLSv1.1 and TLSv1.2 ClientHellos encapsulated in an SSLv2 format hello by using the SSLv2Hello psuedo-protocol. The following table illustrates which connection combinations are possible when using SSLv2Hellos:
| Client | Server | Connection |
|---|---|---|
| enabled | enabled | Y |
| disabled | enabled | Y (most interoperable: SunJSSE default) |
| enabled | disabled | N |
| disabled | disabled | Y |
Starting with JDK 8u31, the SSLv3 protocol (Secure Socket
Layer) has been deactivated and is not available by default. See
the java.security.Security
property
jdk.tls.disabledAlgorithms
in
<JRE_HOME>/lib/security/java.security
file.
If SSLv3 is absolutely required, the protocol can be
reactivated at JRE level by removing "SSLv3" from the
jdk.tls.disabledAlgorithms
property in the
java.security
file or by dynamically setting this
Security property before JSSE is initialized.
To enable SSLv3 protocol at deploy level, after following
the above steps, edit the
deployment.properties
file and add the
following:
deployment.security.SSLv3=true
SunJSSE
supports a large number of cipher suites.
The two tables that follow show the cipher suites supported by
SunJSSE in preference order and the release in which they were
introduced.
The first table lists the cipher suites that are enable by default. The second table shows cipher suites that are supported by SunJSSE but disabled by default.
| Cipher Suite | J2SE v1.4 | J2SE v1.4.1, v1.4.2 | J2SE 5.0 | JDK 6 | JDK 7 | JDK 8 |
|---|---|---|---|---|---|---|
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 |
XFootnote 1 | X | ||||
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 |
XFootnote 1 | X | ||||
TLS_RSA_WITH_AES_256_CBC_SHA256 |
XFootnote 1 | X | ||||
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 |
XFootnote 1 | X | ||||
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 |
XFootnote 1 | X | ||||
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 |
XFootnote 1 | X | ||||
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 |
XFootnote 1 | X | ||||
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA |
X | X | X | |||
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA |
X | X | X | |||
TLS_RSA_WITH_AES_256_CBC_SHA |
X | X | X | X | X | |
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA |
X | X | X | |||
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA |
X | X | X | |||
TLS_DHE_RSA_WITH_AES_256_CBC_SHA |
X | X | X | X | X | |
TLS_DHE_DSS_WITH_AES_256_CBC_SHA |
X | X | X | X | X | |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 |
XFootnote 1 | X | ||||
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 |
XFootnote 1 | X | ||||
TLS_RSA_WITH_AES_128_CBC_SHA256 |
XFootnote 1 | X | ||||
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 |
XFootnote 1 | X | ||||
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 |
XFootnote 1 | X | ||||
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 |
XFootnote 1 | X | ||||
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 |
XFootnote 1 | X | ||||
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA |
X | X | X | |||
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA |
X | X | X | |||
TLS_RSA_WITH_AES_128_CBC_SHA |
X | X | X | X | X | |
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA |
X | X | X | |||
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA |
X | X | X | |||
TLS_DHE_RSA_WITH_AES_128_CBC_SHA |
X | X | X | X | X | |
TLS_DHE_DSS_WITH_AES_128_CBC_SHA |
X | X | X | X | X | |
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA |
X | X | X | |||
TLS_ECDHE_RSA_WITH_RC4_128_SHA |
X | X | X | |||
SSL_RSA_WITH_RC4_128_SHA |
X | X | X | X | X | X |
TLS_ECDH_ECDSA_WITH_RC4_128_SHA |
X | X | X | |||
TLS_ECDH_RSA_WITH_RC4_128_SHA |
X | X | X | |||
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_RSA_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_RSA_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA |
X | X | X | |||
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA |
X | X | X | |||
SSL_RSA_WITH_3DES_EDE_CBC_SHA |
X | X | X | X | X | X |
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA |
X | X | X | |||
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA |
X | X | X | |||
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA |
X | X | X | X | X | |
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA |
X | X | X | X | X | X |
SSL_RSA_WITH_RC4_128_MD5 |
X | X | X | X | X | X |
TLS_EMPTY_RENEGOTIATION_INFO_SCSV Footnote 2 |
1.4.2u28+ | u26+ | u22+ | X | X |
Footnote 1 Cipher suites with SHA384 and SHA256 are available only for TLS 1.2 or later.
Footnote 2
TLS_EMPTY_RENEGOTIATION_INFO_SCSV
is a new
pseudo-cipher suite to support RFC 5746. See the Transport Layer Security
(TLS) Renegotiation Issue section of the JSEE Reference Guide
for more information.
| Cipher Suite | J2SE v1.4 | J2SE v1.4.1, v1.4.2 | J2SE 5.0 | JDK 6 | JDK 7 | JDK 8 |
|---|---|---|---|---|---|---|
TLS_DH_anon_WITH_AES_256_GCM_SHA384 |
X | |||||
TLS_DH_anon_WITH_AES_128_GCM_SHA256 |
X | |||||
TLS_DH_anon_WITH_AES_256_CBC_SHA256 |
X | X | ||||
TLS_ECDH_anon_WITH_AES_256_CBC_SHA |
X | X | X | |||
TLS_DH_anon_WITH_AES_256_CBC_SHA |
X | X | X | X | X | |
TLS_DH_anon_WITH_AES_128_CBC_SHA256 |
X | X | ||||
TLS_ECDH_anon_WITH_AES_128_CBC_SHA |
X | X | X | |||
TLS_DH_anon_WITH_AES_128_CBC_SHA |
X | X | X | X | X | |
TLS_ECDH_anon_WITH_RC4_128_SHA |
X | X | X | |||
SSL_DH_anon_WITH_RC4_128_MD5 |
X | X | X | X | X | X |
TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA |
X | X | X | |||
SSL_DH_anon_WITH_3DES_EDE_CBC_SHA |
X | X | X | X | X | X |
TLS_RSA_WITH_NULL_SHA256 |
X | X | ||||
TLS_ECDHE_ECDSA_WITH_NULL_SHA |
X | X | X | |||
TLS_ECDHE_RSA_WITH_NULL_SHA |
X | X | X | |||
SSL_RSA_WITH_NULL_SHA |
X | X | X | X | X | X |
TLS_ECDH_ECDSA_WITH_NULL_SHA |
X | X | X | |||
TLS_ECDH_RSA_WITH_NULL_SHA |
X | X | X | |||
TLS_ECDH_anon_WITH_NULL_SHA |
X | X | X | |||
SSL_RSA_WITH_NULL_MD5 |
X | X | X | X | X | X |
SSL_RSA_WITH_DES_CBC_SHA |
X | X | X | X | XFootnote 1 | X |
SSL_DHE_RSA_WITH_DES_CBC_SHA |
X | X | X | XFootnote 1 | X | |
SSL_DHE_DSS_WITH_DES_CBC_SHA |
X | X | X | X | XFootnote 1 | X |
SSL_DH_anon_WITH_DES_CBC_SHA |
X | X | X | X | XFootnote 1 | X |
SSL_RSA_EXPORT_WITH_RC4_40_MD5 |
X | X | X | X | XFootnote 2 | X |
SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 |
X | X | X | X | XFootnote 2 | X |
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA |
X | X | X | XFootnote 2 | X | |
SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA |
X | X | X | XFootnote 2 | X | |
SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA |
X | X | X | X | XFootnote 2 | X |
SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA |
X | X | X | X | XFootnote 2 | X |
TLS_KRB5_WITH_RC4_128_SHA |
X | X | X | X | ||
TLS_KRB5_WITH_RC4_128_MD5 |
X | X | X | X | ||
TLS_KRB5_WITH_3DES_EDE_CBC_SHA |
X | X | X | X | ||
TLS_KRB5_WITH_3DES_EDE_CBC_MD5 |
X | X | X | X | ||
TLS_KRB5_WITH_DES_CBC_SHA |
X | X | XFootnote 1 | X | ||
TLS_KRB5_WITH_DES_CBC_MD5 |
X | X | XFootnote 1 | X | ||
TLS_KRB5_EXPORT_WITH_RC4_40_SHA |
X | X | XFootnote 2 | X | ||
TLS_KRB5_EXPORT_WITH_RC4_40_MD5 |
X | X | XFootnote 2 | X | ||
TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA |
X | X | XFootnote 2 | X | ||
TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 |
X | X | XFootnote 2 | X |
Footnote 1 RFC 5246 TLS 1.2 forbids the use of these suites. These can be used in the SSLv3/TLS1.0/TLS1.1 protocols, but cannot be used in TLS 1.2 and later.
Footnote 2 RFC 4346 TLS 1.1 forbids the use of these suites. These can be used in the SSLv3/TLS1.0 protocols, but cannot be used in TLS 1.1 and later.
Cipher suites that use AES_256 require installation of the JCE Unlimited Strength Jurisdiction Policy Files. See Import Limits on Cryptographic Algorithms.
Cipher suites that use Elliptic Curve Cryptography (ECDSA, ECDH, ECDHE, ECDH_anon) require a JCE cryptographic provider that meets the following requirements:
The provider must implement ECC as defined by the classes and
interfaces in the packages java.security.spec
and
java.security.interfaces
. The
getAlgorithm()
method of elliptic curve key objects
must return the string "EC".
The provider must support the Signature
algorithms
SHA1withECDSA and NONEwithECDSA, the KeyAgreement
algorithm ECDH, and a KeyPairGenerator
and a
KeyFactory
for algorithm EC. If one of these
algorithms is missing, SunJSSE will not allow EC cipher suites to
be used.
The provider must support all the SECG curves referenced in
RFC 4492
specification, section 5.1.1 (see also appendix A). In
certificates, points should be encoded using the uncompressed form
and curves should be encoded using the namedCurve
choice, that is, using an object identifier.
If these requirements are not met, EC cipher suites may not be negotiated correctly.
Prior to the JDK 7 release, the SSL/TLS implementation did not
check the version number in PreMasterSecret, and the SSL/TLS client
did not send the correct version number by default. Unless the
system property com.sun.net.ssl.rsaPreMasterSecretFix
is set to true
, the TLS client sends the active
negotiated version, but not the expected maximum version supported
by the client.
For compatibility, this behavior is preserved for SSL version
3.0 and TLS version 1.0. However, for TLS version 1.1 or later, the
implementation tightens checking the PreMasterSecret version
numbers as required by RFC 5246. Clients always
send the correct version number, and servers check the version
number strictly. The system property,
com.sun.net.ssl.rsaPreMasterSecretFix
, is not used in
TLS 1.1 or later.
SunJCE
ProviderAs described briefly in The
SUN
Provider, US export regulations at the time
restricted the type of cryptographic functionality that could be
made available in the JDK. A separate API and reference
implementation was developed that allowed applications to
encrypt/decrypt data. The Java Cryptographic Extension (JCE) was
released as a separate "Optional Package" (also briefly known as a
"Standard Extension"), and was available for JDK 1.2.x and 1.3.x.
During the development of JDK 1.4, regulations were relaxed enough
that JCE (and SunJSSE) could be bundled as part of the JDK.
The following algorithms are available in the SunJCE provider:
| Engine | Algorithm Names |
|---|---|
AlgorithmParameterGenerator |
DiffieHellman |
AlgorithmParameters |
AES Blowfish DES DESede DiffieHellman OAEP PBE PBES2 PBEWithHmacSHA1AndAES_128 PBEWithHmacSHA224AndAES_128 PBEWithHmacSHA256AndAES_128 PBEWithHmacSHA384AndAES_128 PBEWithHmacSHA512AndAES_128 PBEWithHmacSHA1AndAES_256 PBEWithHmacSHA224AndAES_256 PBEWithHmacSHA256AndAES_256 PBEWithHmacSHA384AndAES_256 PBEWithHmacSHA512AndAES_256 PBEWithMD5AndDES PBEWithMD5AndTripleDES PBEWithSHA1AndDESede PBEWithSHA1AndRC2_40 PBEWithSHA1AndRC2_128 PBEWithSHA1AndRC4_40 PBEWithSHA1AndPC4_128 RC2 |
Cipher |
See the Cipher table. |
KeyAgreement |
DiffieHellman |
KeyFactory |
DiffieHellman |
KeyGenerator |
AES ARCFOUR Blowfish DES DESede HmacMD5 HmacSHA1 HmacSHA224 HmacSHA256 HmacSHA384 HmacSHA512 RC2 |
KeyPairGenerator |
DiffieHellman |
KeyStore |
JCEKS |
Mac |
HmacMD5 HmacSHA1 HmacSHA224 HmacSHA256 HmacSHA384 HmacSHA512 HmacPBESHA1 PBEWithHmacSHA1 PBEWithHmacSHA224 PBEWithHmacSHA256 PBEWithHmacSHA384 PBEWithHmacSHA512 |
SecretKeyFactory |
DES DESede PBEWithMD5AndDES PBEWithMD5AndTripleDES PBEWithSHA1AndDESede PBEWithSHA1AndRC2_40 PBEWithSHA1AndRC2_128 PBEWithSHA1AndRC4_40 PBEWithSHA1AndRC4_128 PBKDF2WithHmacSHA1 PBKDF2WithHmacSHA224 PBKDF2WithHmacSHA256 PBKDF2WithHmacSHA384 PBKDF2WithHmacSHA512 PBEWithHmacSHA1AndAES_128 PBEWithHmacSHA224AndAES_128 PBEWithHmacSHA256AndAES_128 PBEWithHmacSHA384AndAES_128 PBEWithHmacSHA512AndAES_128 PBEWithHmacSHA1AndAES_256 PBEWithHmacSHA224AndAES_256 PBEWithHmacSHA256AndAES_256 PBEWithHmacSHA384AndAES_256 PBEWithHmacSHA512AndAES_256 |
The following table lists
cipher algorithms available in the SunJCE
provider.
| Algorithm Name | Modes | Paddings |
|---|---|---|
| AES | ECB, CBC, PCBC, CTR, CTS, CFB, CFB8..CFB128, OFB, OFB8..OFB128 | NoPadding, PKCS5Padding, ISO10126Padding |
| AES | GCM | NoPadding |
| AESWrap | ECB | NoPadding |
| ARCFOUR | ECB | NoPadding |
| Blowfish, DES, DESede, RC2 | ECB, CBC, PCBC, CTR, CTS, CFB, CFB8..CFB64, OFB, OFB8..OFB64 | NoPadding, PKCS5Padding, ISO10126Padding |
| DESedeWrap | CBC | NoPadding |
| PBEWithMD5AndDES, PBEWithMD5AndTripleDES Footnote 1, PBEWithSHA1AndDESede, PBEWithSHA1AndRC2_40, PBEWithSHA1AndRC2_128, PBEWithSHA1AndRC4_40, PBEWithSHA1AndRC4_128, PBEWithHmacSHA1AndAES_128, PBEWithHmacSHA224AndAES_128, PBEWithHmacSHA256AndAES_128, PBEWithHmacSHA384AndAES_128, PBEWithHmacSHA512AndAES_128, PBEWithHmacSHA1AndAES_256, PBEWithHmacSHA224AndAES_256, PBEWithHmacSHA256AndAES_256, PBEWithHmacSHA384AndAES_256, PBEWithHmacSHA512AndAES_256 |
CBC | PKCS5Padding |
| RSA | ECB | NoPadding, PKCS1Padding, OAEPWithMD5AndMGF1Padding, OAEPWithSHA1AndMGF1Padding, OAEPWithSHA-1AndMGF1Padding, OAEPWithSHA-224AndMGF1Padding, OAEPWithSHA-256AndMGF1Padding, OAEPWithSHA-384AndMGF1Padding, OAEPWithSHA-512AndMGF1Padding |
Footnote 1 PBEWithMD5AndTripleDES is a proprietary algorithm that has not been standardized.
The SunJCE
provider uses the following default keysizes (in
bits) and enforces the following restrictions:
KeyGenerator
| Algorithm Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| AES | 128 | Keysize must be equal to 128, 192, or 256. |
| ARCFOUR (RC4) | 128 | Keysize must range between 40 and 1024 (inclusive). |
| Blowfish | 128 | Keysize must be a multiple of 8, ranging from 32 to 448 (inclusive). |
| DES | 56 | Keysize must be equal to 56. |
| DESede (Triple DES) | 168 | Keysize must be equal to 112 or 168.
A keysize of 112 will generate a Triple DES key with 2 intermediate keys, and a keysize of 168 will generate a Triple DES key with 3 intermediate keys. Due to the "Meet-In-The-Middle" problem, even though 112 or 168 bits of key material are used, the effective keysize is 80 or 112 bits respectively. |
| HmacMD5 | 512 | No keysize restriction. |
| HmacSHA1 | 512 | No keysize restriction. |
| HmacSHA224 | 224 | No keysize restriction. |
| HmacSHA256 | 256 | No keysize restriction. |
| HmacSHA384 | 384 | No keysize restriction. |
| HmacSHA512 | 512 | No keysize restriction. |
| RC2 | 128 | Keysize must range between 40 and 1024 (inclusive). |
NOTE: The various Password-Based Encryption (PBE) algorithms use various algorithms to generate key data, and ultimately depends on the targeted Cipher algorithm. For example, "PBEWithMD5AndDES" will always generate 56-bit keys.
KeyPairGenerator
| Algorithm Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| Diffie-Hellman (DH) | 1024 | Keysize must be a multiple of 64, ranging from 512 to 2048 (inclusive). |
AlgorithmParameterGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| Diffie-Hellman (DH) | 1024 | Keysize must be a multiple of 64, ranging from 512 to 2048 (inclusive). |
SunJGSS
ProviderThe following algorithms are available in the
SunJGSS
provider:
| OID | Name |
|---|---|
1.2.840.1135<IP_ADDRESS> |
Kerberos v5 |
<IP_ADDRESS>.5.5.2 |
SPNEGO |
SunSASL
ProviderThe following algorithms are available in the
SunSASL
provider:
| Engine | Algorithm Names |
|---|---|
SaslClient |
CRAM-MD5 DIGEST-MD5 EXTERNAL GSSAPI PLAIN |
SaslServer |
CRAM-MD5 DIGEST-MD5 GSSAPI |
XMLDSig
ProviderThe following algorithms are available in the
XMLDSig
provider:
| Engine | Algorithm Names |
|---|---|
KeyInfoFactory |
DOM |
TransformService |
http://www.w3.org/TR/2001/REC-xml-c14n-20010315 -
(CanonicalizationMethod.INCLUSIVE )http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments - ( CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS )http://www.w3.org/2001/10/xml-exc-c14n# - ( CanonicalizationMethod.EXCLUSIVE )http://www.w3.org/2001/10/xml-exc-c14n#WithComments - ( CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS )http://www.w3.org/2000/09/xmldsig#base64 - ( Transform.BASE64 )http://www.w3.org/2000/09/xmldsig#enveloped-signature - ( Transform.ENVELOPED )http://www.w3.org/TR/1999/REC-xpath-19991116 - ( Transform.XPATH )http://www.w3.org/2002/06/xmldsig-filter2 - ( Transform.XPATH2 )http://www.w3.org/TR/1999/REC-xslt-19991116 - ( Transform.XSLT ) |
XMLSignatureFactory |
DOM |
SunPCSC
ProviderThe SunPCSC
provider enables applications to use the Java Smart Card I/O
API to interact with the PC/SC Smart Card stack of the
underlying operating system. On some operating systems, it may be
necessary to enable and configure the PC/SC stack before it is
usable. Consult your operating system documentation for
details.
On Solaris and Linux platforms, SunPCSC accesses the PC/SC stack
via the libpcsclite.so
library. It looks for this
library in the directories /usr/$LIBISA
and
/usr/local/$LIBISA
, where $LIBISA
is
expanded to lib
on 32-bit platforms,
lib/64
on 64-bit Solaris platforms, and
lib64
on 64-bit Linux platforms. The system property
sun.security.smartcardio.library
may also be set to
the full filename of an alternate libpcsclite.so
implementation. On Windows platforms, SunPCSC always calls into
winscard.dll
and no Java-level configuration is
necessary or possible.
If PC/SC is available on the host platform, the SunPCSC
implementation can be obtained via
TerminalFactory.getDefault()
and
TerminalFactory.getInstance("PC/SC")
. If PC/SC is not
available or not correctly configured, a getInstance()
call will fail with a NoSuchAlgorithmException
and
getDefault()
will return a JRE built-in implementation
that does not support any terminals.
The following algorithms are available in the
SunPCSC
provider:
| Engine | Algorithm Names |
|---|---|
TerminalFactory |
PC/SC |
SunMSCAPI
ProviderThe SunMSCAPI
provider enables applications to use the standard
JCA/JCE APIs to access the native cryptographic libraries,
certificates stores and key containers on the Microsoft Windows
platform. The SunMSCAPI
provider itself does not contain
cryptographic functionality, it is simply a conduit between the
Java environment and the native cryptographic services on
Windows.
The following algorithms are available in the
SunMSCAPI
provider:
| Engine | Algorithm Names |
|---|---|
Cipher |
RSA RSA/ECB/PKCS1Padding only |
KeyPairGenerator |
RSA |
KeyStore |
Windows-MY The keystore type that identifies the native Microsoft Windows MY keystore. It contains the user's personal certificates and associated private keys. Windows-ROOTThe keystore type that identifies the native Microsoft Windows ROOT keystore. It contains the certificates of Root certificate authorities and other self-signed trusted certificates. |
SecureRandom |
Windows-PRNG
The name of the native pseudo-random number generation (PRNG) algorithm. |
Signature |
MD5withRSA MD2withRSA NONEwithRSA SHA1withRSA SHA256withRSA SHA384withRSA SHA512withRSA |
The SunMSCAPI
provider uses the following default keysizes (in
bits) and enforce the following restrictions:
KeyGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| RSA | 1024 | Keysize ranges from 512 bits to 16,384 bits (depending on the underlying Microsoft Windows cryptographic service provider). |
SunEC
ProviderThe SunEC
provider implements Elliptical Curve Cryptography (ECC). Compared to traditional cryptosystems such as RSA, ECC offers equivalent security with smaller key sizes, which results in faster computations, lower power consumption, and memory and bandwidth savings. Applications can use the standard JCA/JCE APIs to access ECC functionality without the dependency on external ECC libraries (through SunPKCS11).
The following algorithms are available in the SunEC provider:
| Engine | Algorithm Name(s) |
|---|---|
AlgorithmParameters |
EC |
KeyAgreement |
ECDH |
KeyFactory |
EC |
KeyPairGenerator |
EC |
Signature |
NONEwithECDSA SHA1withECDSA SHA224withECDSA SHA256withECDSA SHA384withECDSA SHA512withECDSA |
The SunEC
provider uses the following default keysizes (in bits)
and enforces the following restrictions:
KeyPairGenerator
| Alg. Name | Default Keysize | Restrictions/Comments |
|---|---|---|
| EC | 256 | Keysize must range from 112 to 571 (inclusive). |
The SunEC
provider includes implementations of various elliptic curves for use with the EC, Elliptic-Curve Diffie-Hellman (ECDH), and Elliptic Curve Digital Signature Algorithm (ECDSA) algorithms. Some of these curves have been implemented using modern formulas and techniques that are valuable for preventing side-channel attacks. The others are legacy curves that might be more vulnerable to attacks and should not be used. The tables below list the curves that fall into each of these categories.
In the following tables, the first column, Curve Name, lists the name that SunEC implements. The second column, Object Identifier, specifies the EC name's object identifier. The third column, Additional Names/Aliases, specifies any additional names or aliases for that curve. All strings that appear in one row refer to the same curve. For example, the strings secp256r1
, 1.2.840.10<IP_ADDRESS>
, NIST P-256
, and X9.62 prime256v1
refer to the same curve. You can use the curve names to create parameter specifications for EC parameter generation with the ECGenParameterSpec
class.
The following table lists the elliptic curves that are provided by the SunEC
provider and are implemented using modern formulas and techniques. These curves are recommended and should be preferred over the curves listed in the section Legacy Curves Retained for Compatibility.
| Curve Name | Object Identifier | Additional Names/Aliases |
|---|---|---|
| secp256r1 | 1.2.840.10<IP_ADDRESS> | NIST P-256, X9.62 prime256v1 |
| secp384r1 | <IP_ADDRESS>.34 | NIST P-384 |
| secp521r1 | <IP_ADDRESS>.35 | NIST P-521 |
It is recommended that you migrate to newer curves.
The following table lists elliptic curves that are provided by the SunEC
provider and are not implemented using modern formulas and techniques. These curves remain available for compatibility reasons to afford legacy systems time to migrate to newer curves. These implementations will be removed or replaced in a future version of the JDK.
| Curve Name | Object Identifier | Additional Names/Aliases |
|---|---|---|
| secp112r1 | <IP_ADDRESS>.6 | N/A |
| secp112r2 | <IP_ADDRESS>.7 | N/A |
| secp128r1 | <IP_ADDRESS>.28 | N/A |
| secp128r2 | <IP_ADDRESS>.29 | N/A |
| secp160k1 | <IP_ADDRESS>.9 | N/A |
| secp160r1 | <IP_ADDRESS>.8 | N/A |
| secp160r2 | <IP_ADDRESS>.30 | N/A |
| secp192k1 | <IP_ADDRESS>.31 | N/A |
| secp192r1 | 1.2.840.10<IP_ADDRESS> | NIST P-192, X9.62 prime192v1 |
| secp224k1 | <IP_ADDRESS>.32 | N/A |
| secp224r1 | <IP_ADDRESS>.33 | NIST P-224 |
| secp256k1 | <IP_ADDRESS>.10 | N/A |
| sect113r1 | <IP_ADDRESS>.4 | N/A |
| sect113r2 | <IP_ADDRESS>.5 | N/A |
| sect131r1 | <IP_ADDRESS>.22 | N/A |
| sect131r2 | <IP_ADDRESS>.23 | N/A |
| sect163k1 | <IP_ADDRESS>.1 | NIST K-163 |
| sect163r1 | <IP_ADDRESS>.2 | N/A |
| sect163r2 | <IP_ADDRESS>.15 | NIST B-163 |
| sect193r1 | <IP_ADDRESS>.24 | N/A |
| sect193r2 | <IP_ADDRESS>.25 | N/A |
| sect233k1 | <IP_ADDRESS>.26 | NIST K-233 |
| sect233r1 | <IP_ADDRESS>.27 | NIST B-233 |
| sect239k1 | <IP_ADDRESS>.3 | N/A |
| sect283k1 | <IP_ADDRESS>.16 | NIST K-283 |
| sect283r1 | <IP_ADDRESS>.17 | NIST B-283 |
| sect409k1 | <IP_ADDRESS>.36 | NIST K-409 |
| sect409r1 | <IP_ADDRESS>.37 | NIST B-409 |
| sect571k1 | <IP_ADDRESS>.38 | NIST K-571 |
| sect571r1 | <IP_ADDRESS>.39 | NIST B-571 |
| X9.62 c2tnb191v1 | 1.2.840.10<IP_ADDRESS> | N/A |
| X9.62 c2tnb191v2 | 1.2.840.10<IP_ADDRESS> | N/A |
| X9.62 c2tnb191v3 | 1.2.840.10<IP_ADDRESS> | N/A |
| X9.62 c2tnb239v1 | 1.2.840.10<IP_ADDRESS> | N/A |
| X9.62 c2tnb239v2 | 1.2.840.10<IP_ADDRESS> | N/A |
| X9.62 c2tnb239v3 | 1.2.840.10<IP_ADDRESS> | N/A |
| X9.62 c2tnb359v1 | 1.2.840.10<IP_ADDRESS> | N/A |
| X9.62 c2tnb431r1 | 1.2.840.10<IP_ADDRESS> | N/A |
| X9.62 prime192v2 | 1.2.840.10<IP_ADDRESS> | N/A |
| X9.62 prime192v3 | 1.2.840.10<IP_ADDRESS> | N/A |
| X9.62 prime239v1 | 1.2.840.10<IP_ADDRESS> | N/A |
| X9.62 prime239v2 | 1.2.840.10<IP_ADDRESS> | N/A |
| X9.62 prime239v3 | 1.2.840.10<IP_ADDRESS> | N/A |
OracleUcrypto
ProviderThe Solaris-only security provider OracleUcrypto
leverages the Solaris Ucrypto library to offload and delegate
cryptographic operations supported by the Oracle SPARC T4 based
on-core cryptographic instructions. The OracleUcrypto
provider itself does not contain cryptographic functionality; it is
simply a conduit between the Java environment and the Solaris
Ucrypto library.
If the underlying Solaris Ucrypto library does not support a
particular algorithm, then the OracleUcrypto
provider will not
support it either. Consequently, at runtime, the supported
algorithms consists of the intersection of those that the Solaris
Ucrypto library supports and those that the
OracleUcrypto
provider recognizes.
Note that the OracleUcrypto
provider is included
only in Oracle's JDK. It is not part of OpenJDK.
The following algorithms are available in the
OracleUcrypto
provider:
| Engine | Algorithm Name(s) |
|---|---|
Cipher |
AES RSA AES/ECB/NoPadding AES/ECB/PKCS5Padding AES/CBC/NoPadding AES/CBC/PKCS5Padding AES/CTR/NoPadding AES/GCM/NoPadding AES/CFB128/NoPadding AES/CFB128/PKCS5Padding RSA/ECB/PKCS1Padding RSA/ECB/NoPadding |
Signature |
MD5withRSA SHA1withRSA SHA256withRSA SHA384withRSA SHA512withRSA |
MessageDigest |
MD5 SHA SHA-256 SHA-384 SHA-512 |
The OracleUcrypto
provider does not specify any
default keysizes or keysize restrictions; these are specified by
the underlying Solaris Ucrypto library.
OracleUcrypto
Provider Configuration FileThe OracleUcrypto
provider has a configuration file
named ucrypto-solaris.cfg
that resides in the
$JAVA_HOME/lib/security
directory. Modify this
configuration file to specify which algorithms to disable by
default. For example, the following configuration file disables AES
with CFB128 mode by default:
# # Configuration file for the OracleUcrypto provider # disabledServices = { Cipher.AES/CFB128/PKCS5Padding Cipher.AES/CFB128/NoPadding }
The Apple
provider implements a
java.security.KeyStore
that provides access to the macOS Keychain.
The following algorithms are available in the Apple
provider:
| Engine | Algorithm Name(s) |
|---|---|
KeyStore |
KeychainStore |


Queen Anne Welcomes You
Recent Agenda and Activites
October 1, 2016
Focus: Council Elections
Written: October 3, 2016 by Sean Champagne
On September 21, 2016, QACC held elections for twelve positions on the community council. Incumbent council members that were re-elected: Michael Crow, Don Harper, Marty Kaplan, Robert Kettle, Margaret Okamoto, Jim Smith, and Mike Warren. New council members include: Brittney Bollay, Sean Champagne, Laura Day, Michael Jerrett, and Catherine Wilson. Congratulations to everyone and we will see everyone at our next meeting on October 5, 2016.
September 7, 2016
Focus: Bhy Kracke Park
Written: September 27, 2016 by Sean Champagne
Katie Bang, capital project coordinator, from Seattle Parks and Recreation Department was the guest speaker and highlighted city renovations to Bhy Kracke Park to an approximate meeting of 45 people. The focus of the discussion was on the necessary slope management the city will undertake to reinforce the hillside. Including planning, designing, and construction the total budget is an estimated $261,000 with construction beginning Summer/Fall 2017. The primary construction will specifically increase the width of the main pathway from 5' to 7', destruction and potential reconstruction of the park arbor covered in wysteria, construction of the new wall, and removal of a couple secondary and unsanctioned pathways. Questions from the crowd highlighted a concern of the arbor, but the biggest concern from the crowd appeared to be lack of maintenance by the city officials. A 30 year Queen Anne resident highlighted the last 8 years since the 2008 financial crisis with deep budget cuts the city has shirked responsibility in park maintenance which has allowed invasive species such as Himilayan blackberry and morning glory to completely take over the park and kill off many of the origin vegetation that was maintained by the city. More information can be found below:
#Seattle TweetsSince the 1940s, Queen Anne Community Council has . . .
. . . served the Queen Anne neighborhood in Seattle, Washington. We are a not-for-profit organization of community members that work together with both the local community members and the city of Seattle. When issues face Queen Anne, the QACC galvanizes around issues that affect the community. We are an open organization to all residents and employees of Queen Anne.
Please join the Queen Anne Community Council the first Wednesday of every month at 7:30 p.m. at:
Queen Anne Manor
100 Crockett St.
Seattle, Washington, 98109
Parking is easy to find both on the street and in the private parking lot.
Simply sign in and you will be directed to the meeting room, and we will be there!
Meeting Archives
[Waiting for additional archives to be generated . . . Happy Fall!]
[Waiting for additional archives to be generated . . .]
About Us!
The Queen Anne Community Council is a 501(c)(4) organization whose members are all residents of Queen Anne and businesses located within Queen Anne. The QACC is governed by a Board of Trustees (the QACC). The current QACC President Ellen Monrad has been a stalwart Queen Anne community activist for decades and has a proven track record of community leadership having served more than a decade as Queen Anne Community Council President. The QACC operates several committees, including but not limited to: the Transportation Committee to serve the necessary transportation needs of our community as density quickly increases; the Land Use Review Committee that works with landowners, potential buyers, and the community to ensure that properties in the neighborhood are properly utilized; and the Parks Committee that deals with all things parks related in the Queen Anne community and works with the Seattle Parks and Recreation Department. The Queen Anne Community Council has a long history of grassroots organization and community involvement and continues to enjoy a robust membership.
Contact
If you are a community member or member of an organization in the Queen
Anne community and you would like to address the QACC at a meeting or
otherwise contact us, please feel free to contact us.
Email<EMAIL_ADDRESS>Queen Anne Photo Credit: Bode Champagne


macro-
`Prev `__
M
`Next `__
--------------
**macro-**: pref.
Large. Opposite of `*micro-* `__. In the mainstream and
among other technical cultures (for example, medical people) this
competes with the prefix `*mega-* `__, but hackers tend to
restrict the latter to quantification.
--------------
+--------------------------+----------------------------+------------------------------+
| `Prev `__ | `Up <../M.html>`__ | `Next `__ |
+--------------------------+----------------------------+------------------------------+
| macro | `Home <../index.html>`__ | macrology |
+--------------------------+----------------------------+------------------------------+


Your account, including all data that you have entered and resumes that you have uploaded will be permanently deleted. Your data cannot be retrieved afterward.


time
Annotations (2)
comment
" An OWL Ontology of Time (OWL-Time). "
()
seeAlso
http://www.w3.org/TR/
owl-time
References
Classes
(13)
Object Properties
(24)
Data Properties
(17)
Annotation Properties
(2)
Individuals
(14)
Datatypes
(7)
OWL HTML inside


Feel free to learn whatever you want regardless of level. However be aware that a higher level suggests that you will have a harder time if you lack fundamental knowledge.


Biopython tutorial notes
Description
These notes were taken by hainesm6 and are based on the material provided by the Biopython Tutorial and Cookbook.
Sections to read
Chapter 1 Introduction
1.3 installation
pip install biopython
Chapter 3 Sequence Objects
- Seq objects have different methods compared to strings.
- Sequence objects have an alphabet attribute describing what the sequence string characters mean.
3.1 Sequences and Alphabets
- Biopython available alphabets are defined in the Bio.Alphabet module.
- IUPAC alphabets are commonly used.
- While a default alphabet argument is provided, alphabets are typically specificied as in the following example:
>>> from Bio.Seq import Seq
>>> from Bio.Alphabet import IUPAC
>>> my_seq = Seq("AGTACACTGGT", IUPAC.unambiguous_dna)
>>> my_seq
Seq('AGTACACTGGT', IUPACUnambiguousDNA())
>>> my_seq.alphabet
IUPACUnambiguousDNA()
3.2 Sequences act like strings
- Many string methods are available to Seq even though Seq does not inherit from String (seq_play.py e.g. len(), enumerate(), count().
- Unless converted to MutableSeq, Seq objects are immutable.
3.3 Slicing a sequence
- Slicing is consistent with other python objects e.g. lists.
3.4 Turning Seq objects into strings
- The str() constructor can be used to convert a Seq object into a String object:
>>> str(my_seq)
'GATCGATGGGCCTATATAGGATCGAAAATCGC'
- Feasible to format a string representation of a Seq object using a "%s" placeholder:
>>> fasta_format_string = ">Name\n%s\n" % my_seq
>>> print(fasta_format_string)
>Name
GATCGATGGGCCTATATAGGATCGAAAATCGC
<BLANKLINE>
- It is also possible to format sequences using f strings seq_play.py
3.5 Concatenating or adding sequences
- Seq objects written in the same alphabet can be added together using the + operator.
3.6 Changing case
- upper() and lower() methods change the case of sequences.
- Note lower case sequences are not valid IUPAC:
>>> from Bio.Seq import Seq
>>> from Bio.Alphabet import IUPAC
>>> dna_seq = Seq("ACGT", IUPAC.unambiguous_dna)
>>> dna_seq
Seq('ACGT', IUPACUnambiguousDNA())
>>> dna_seq.lower()
Seq('acgt', DNAAlphabet())
3.7 Nucleotide sequences and (reverse) complements
- complement() and reverse_complement() methods calculate the complement and reverse complement of nucleotide sequences, respectively.
- Seq objects are immutable and as such the result of these methods is not applied by default.
3.11 Comparing Seq objects
- Biopython will compare Seq objects based on characters. As such, nucleotide and protein sequences can be evaluated as equivalent. However, a warning is provided.
3.12 MutableSeq objects
- MutableSeq objects are created from Seq objects using the tomutable() method or by invoking the MutableSeq() constructor:
>>> from Bio.Seq import MutableSeq
>>> from Bio.Alphabet import IUPAC
>>> mutable_seq = MutableSeq("GCCATTGTAATGGGCCGCTGAAAGGGTGCCCGA", IUPAC.unambiguous_dna)
- In addition to Seq methods, insert(), append() and indexing are useful operations which can be performed on MutableSeq objects.
- Like lists, MutableSeq objects are not hashable, they cannot be used as dictionary keys.
- The toseq() method converts MutableSeq objects to Seq objects.
3.13 UnknownSeq objects
- The UnknownSeq class enables unknown sequences of arbitary length to be defined while minimising memory consumption e.g.
>>> from Bio.Seq import UnknownSeq
>>> from Bio.Alphabet import IUPAC
>>> unk_dna = UnknownSeq(20, alphabet=IUPAC.ambiguous_dna)
>>> unk_dna
UnknownSeq(20, alphabet=IUPACAmbiguousDNA(), character='N')
>>> print(unk_dna)
NNNNNNNNNNNNNNNNNNNN
- Unknown sequences are present in GenBank and EMBL files where only continuous overlapping fragments (contigs) may be given.
3.14 Working with strings directly
pass
Chapter 4 Sequence annotation objects
4.1 The SeqRecord object
- The SeqRecord class is defined in the Bio.SeqRecord module.
- The attributes of a SeqRecord instance are sufficient to completely describe genbank entries (Refer to seqrecord_play.py)
4.2 Creating a SeqRecord
4.2.1 SeqRecord objects from scratch
- When creating a SeqRecord object from scratch, a Seq object is required and an id attribute is important if the SeqRecord object will be written to file.
- The following generates a SeqRecord object and assigns an id:
>>> from Bio.Seq import Seq
>>> from Bio.SeqRecord import SeqRecord
>>> simple_seq = Seq("GATC")
>>> simple_seq_r = SeqRecord(simple_seq, id="AC12345")
4.2.2 SeqRecord objects from FASTA files
- SeqRecord objects are generated from FASTA files using the SeqIO module and associated methods Chapter 5.
>>> from Bio import SeqIO
>>> record = SeqIO.read("NC_005816.fna", "fasta")
>>> record
SeqRecord(seq=Seq('TGTAACGAACGGTGCAATAGTGATCCACACCCAACGCCTGAAATCAGATCCAGG...CTG',
SingleLetterAlphabet()), id='gi|45478711|ref|NC_005816.1|', name='gi|45478711|ref|NC_005816.1|',
description='gi|45478711|ref|NC_005816.1| Yersinia pestis biovar Microtus ... sequence',
dbxrefs=[])
- A default alphabet has been used to for the Seq object. If possible, a more specific alphabet should be utilised (refer to SeqIO documentation).
- The first word of the FASTA record’s title line (after removing the greater than symbol) is used for both the id and name attributes.
- The whole title line is used for the record description.
4.2.3 SeqRecord objects from GenBank files
- SeqRecord objects are generated from GenBank files using a similar syntax to that used above for FASTA files.
- An example is given in the seqrecord_play.py script. Of note:
- A more specific alphabet is given.
- The name is derived from the LOCUS, while the id includes the version suffix.
- Most of the information gets stored as annotations in the example_seqrecord.annotations attribute as key, value pairs.
4.3 Feature, location and position objects
4.3.1 SeqFeature objects
-
SeqFeature objects describe Features in SeqRecord objects.
-
Three important attributes belong to the SeqFeature class:
- SeqFeature.type (type = str) which is equivalent to a Feature Key in a GenBank file e.g. CDS.
- SeqFeature.location which is often another object as described in the subsequent section.
- SeqFeature.qualifiers formated as an OrderedDict with values given in lists (below). Note all string values must be given in list objects. This is because multiple keys of the same value are not permitted in Python dicts and yet multiple qualifier values may be necessary (feature table refer to 3.3.2)
qualifiers:
Key: chromosome, Value: ['IX']
Key: db_xref, Value: ['taxon:4932']
Key: mol_type, Value: ['genomic DNA']
Key: organism, Value: ['Saccharomyces cerevisiae']
4.3.2 Positions and locations
- Most commonly a SeqFeature.location attribute will contain a FeatureLocation instance unless discontinuous locations are required. For further information on the FeatureLocation class the following code should be executed:
from Bio.SeqFeature import FeatureLocation
help(FeatureLocation)
- CompoundLocation objects hold multiple FeatureLocation objects, enabling for instance eukaryotic gene locations to be described:
| >>> from Bio.SeqFeature import FeatureLocation, CompoundLocation
| >>> f1 = FeatureLocation(10, 40, strand=+1)
| >>> f2 = FeatureLocation(50, 59, strand=+1)
| >>> f = CompoundLocation([f1, f2])
| >>> len(f) == len(f1) + len(f2) == 39 == len(list(f))
| True
| >>> print(f.operator)
| join
| >>> 5 in f
| False
| >>> 15 in f
| True
| >>> f.strand
| 1
- Passing in int values into start and end FeatureLocation arguments acutally generates ExactPosition objects.
- To allow more abstract defitions of start and end FeatureLocation arguments, four classes are available:
- AfterPosition
- BeforePosition
- BetweenPosition
- UnknownPosition
- As an example:
>>> from Bio import SeqFeature
>>> start_pos = SeqFeature.AfterPosition(5)
>>> end_pos = SeqFeature.BetweenPosition(9, left=8, right=9)
>>> my_location = SeqFeature.FeatureLocation(start_pos, end_pos)
>>> my_location.start
AfterPosition(5)
>>> print(my_location.start)
>5
>>> my_location.end
BetweenPosition(9, left=8, right=9)
>>> print(my_location.end)
(8^9)
- It is possible to search for which SeqFeatures occur at a given position e.g.
>>> from Bio import SeqIO
>>> my_snp = 4350
>>> record = SeqIO.read("NC_005816.gb", "genbank")
>>> for feature in record.features:
... if my_snp in feature:
... print("%s %s" % (feature.type, feature.qualifiers.get("db_xref")))
...
source ['taxon:229193']
gene ['GeneID:2767712']
CDS ['GI:45478716', 'GeneID:2767712']
4.3.3 Sequence described by a feature or location
- To extract the sequence from a SeqFeature object, the extract() method can be applied:
extract(self, parent_sequence)
Extract the feature's sequence from supplied parent sequence.
The parent_sequence can be a Seq like object or a string, and will
generally return an object of the same type. The exception to this is
a MutableSeq as the parent sequence will return a Seq object.
4.4 Comparison
- SeqRecord instances should not be compared directly as is the case for all Python objects. Instead compare attributes of this class between instances.
4.5 References
- The Reference class contains several attributes to describe references associated with SeqRecord and SeqFeature objects:
class Reference(builtins.object)
| Represent a Generic Reference object.
|
| Attributes:
| - location - A list of Location objects specifying regions of
| the sequence that the references correspond to. If no locations are
| specified, the entire sequence is assumed.
| - authors - A big old string, or a list split by author, of authors
| for the reference.
| - title - The title of the reference.
| - journal - Journal the reference was published in.
| - medline_id - A medline reference for the article.
| - pubmed_id - A pubmed reference for the article.
| - comment - A place to stick any comments about the reference.
- The example_seqrecord variable from seqrecord_play.py has several Reference objects stored in a list, accessed via the example_seqrecord.annotations['references'] key.
- An example from this dict value is:
location: [0:5028]
authors: Roemer,T., Madden,K., Chang,J. and Snyder,M.
title: Selection of axial growth sites in yeast requires Axl2p, a novel plasma membrane glycoprotein
journal: Genes Dev. 10 (7), 777-793 (1996)
medline id:
pubmed id: 8846915
comment:
- The format() method of the SeqRecord class requires an "Bio.SeqIO output format" and returns the SeqRecord formatted in this manner.
- This method appears useful for displaying SeqRecords in the terminal.
4.7 Slicing a SeqRecord
- An incredibly useful feature of Biopython is the ability to slice SeqRecord objects returning a new object:
>>> from Bio import SeqIO
>>> record = SeqIO.read("NC_005816.gb", "genbank")
>>> record
SeqRecord(seq=Seq('TGTAACGAACGGTGCAATAGTGATCCACACCCAACGCCTGAAATCAGATCCAGG...CTG',
IUPACAmbiguousDNA()), id='NC_005816.1', name='NC_005816',
description='Yersinia pestis biovar Microtus str. 91001 plasmid pPCP1, complete sequence',
dbxrefs=['Project:58037'])
>>> sub_record = record[4300:4800]
>>> sub_record
SeqRecord(seq=Seq('ATAAATAGATTATTCCAAATAATTTATTTATGTAAGAACAGGATGGGAGGGGGA...TTA',
IUPACAmbiguousDNA()), id='NC_005816.1', name='NC_005816',
description='Yersinia pestis biovar Microtus str. 91001 plasmid pPCP1, complete sequence.',
dbxrefs=[])
- Following slicing SeqFeature.location attributes are updated to reflect their new position.
- However, in the above example sub_record.dbxrefs has been deleted along with any sub_record.annotations key, value pairs. This is to reflect the fact the new sequence is no longer equivalent to the previous.
- To complicate things further, the id, name and description have been preserved in sub_record.
- It is advisable to update general attributes of the new SeqRecord following slicing.
4.8 Adding SeqRecord objects
- SeqRecord objects can be added to generate new SeqRecords using + operator. Note, similar to slicing SeqRecord objects, certain attributes are lost.
4.9 Reverse-complementing SeqRecord objects
- The SeqRecord reverse_complement() method calculates the reverse complement of a SeqRecord preserving SeqFeatures and modifying them accordingly. Again annotations and dxrefs are dropped.
- Additional help on the SeqIO module can be accessed as below or through the wiki etc.
>>> from Bio import SeqIO
>>> help(SeqIO)
...
5.1 Parsing or Reading Sequences
- Majority of time will use the SeqIO.parse() function:
Help on function parse in module Bio.SeqIO:
parse(handle, format, alphabet=None)
Turn a sequence file into an iterator returning SeqRecords.
Arguments:
- handle - handle to the file, or the filename as a string
(note older versions of Biopython only took a handle).
- format - lower case string describing the file format.
- alphabet - optional Alphabet object, useful when the sequence type
cannot be automatically inferred from the file itself
(e.g. format="fasta" or "tab")
- To avoid yielding an iterable, the SeqIO.read() function will yield a single SeqRecord object when only one entry is present in handle.
- Depending on the number and size of the SeqRecord objects associated with handle, it can be desirable to load all SeqRecord objects into a list object simultaneously e.g.
from Bio import SeqIO
records = list(SeqIO.parse("ls_orchid.gbk", "genbank"))
print("Found %i records" % len(records))
Found 94 records
- SeqRecord objects are manipulated as described in Chapter 4.
5.2 Parsing sequences from compressed files
- In addition to strings corresponding with file paths, SeqIO.parse() accepts file objects for handle values e.g.
>>> from Bio import SeqIO
>>> with open("ls_orchid.gbk") as handle:
... print(sum(len(r) for r in SeqIO.parse(handle, "gb")))
67518
- This facilitates the decompressing of compressed files using other 3rd party libraries:
>>> import gzip
>>> from Bio import SeqIO
>>> with gzip.open("ls_orchid.gbk.gz", "rt") as handle:
... print(sum(len(r) for r in SeqIO.parse(handle, "gb")))
...
67518
5.3 Parsing Sequences from the net
5.4 Sequence files as Dictionaries
- Biopython provides 3 functions to convert iterables of SeqRecord objects to dictionary or dictionary-like objects:
- Bio.SeqIO.to_dict()
- Bio.SeqIO.index()
- Bio.SeqIO.index_db()
- An example of SeqIO.to_dict() is:
>>> from Bio import SeqIO
>>> orchid_dict = SeqIO.to_dict(SeqIO.parse("ls_orchid.gbk", "genbank"))
>>> from Bio import SeqIO
>>> orchid_dict = {}
>>> for rec in SeqIO.parse("ls_orchid.gbk", "genbank"):
>>> if not orchid_dict.get(rec.id):
>>> orchid_dict[rec.id] = rec
>>> else:
>>> raise...
- The if/else clause ensures SeqIO.to_dict() fails when multiple SeqRecord objects with the same id are found within the iterable.
- To configure dict keys, an optional 2nd argument is provided that accepts function objects:
Help on function to_dict in module Bio.SeqIO:
to_dict(sequences, key_function=None)
Turn a sequence iterator or list into a dictionary.
Arguments:
- sequences - An iterator that returns SeqRecord objects,
or simply a list of SeqRecord objects.
- key_function - Optional callback function which when given a
SeqRecord should return a unique key for the dictionary.
- The following example illustrates this by assigning SEGUIDs for each SeqRecord in the file handle:
>>> from Bio import SeqIO
>>> from Bio.SeqUtils.CheckSum import seguid
>>> seguid_dict = SeqIO.to_dict(SeqIO.parse("ls_orchid.gbk", "genbank"),
... lambda rec : seguid(rec.seq))
>>> record = seguid_dict["MN/s0q9zDoCVEEc+k/IFwCNF2pY"]
>>> print(record.id)
Z78532.1
>>> record.description
'C.californicum 5.8S rRNA gene and ITS1 and ITS2 DNA'
A key limitation of SeqIO.to_dict() is that all attributes etc. of SeqRecords are held in RAM. This can slow calculations for files containing large numbers of entries.
- An alternative SeqIO.index() which returns a dictionay-like object where not all SeqRecords are in memory. Rather they are called into memory on demand as required. I suspect that for computers with SSD SeqIO.index() will be close to SeqIO.to_dict() in terms of speed.
- A limitation of SeqIO.index() is that handles to files cannot be used, only filenames (below). However, bgz compressed files can be used (see indexing compressed files 5.4.4)
Help on function index in module Bio.SeqIO:
index(filename, format, alphabet=None, key_function=None)
Indexes a sequence file and returns a dictionary like object.
Arguments:
- filename - string giving name of file to be indexed...
- The dictionary-like object returned by the SeqIO.index() function is technically an instance of the _IndexedSeqFileDict class. This class has a get_raw() method which can return an array of bytes. However, it doesn't seem clear what encoding is used by this function.
- If you are working with an incredibly large files, SeqIO.index_db will store record information on disk in an SQLite3 database.
5.5 Writing Sequence Files
- Use the SeqIO.write() function:
Help on function write in module Bio.SeqIO:
write(sequences, handle, format)
Write complete set of sequences to a file.
Arguments:
- sequences - A list (or iterator) of SeqRecord objects, or (if using
Biopython 1.54 or later) a single SeqRecord.
- handle - File handle object to write to, or filename as string
(note older versions of Biopython only took a handle).
- format - lower case string describing the file format to write.
Note if providing a file handle, your code should close the handle
after calling this function (to ensure the data gets flushed to disk).
Returns the number of records written (as an integer).
5.5.1 round trips
- Where a written file is the same as the unaltered parsed version.
- This may not happen, refer to seqrecord_play.py.
- Rather than 1st parsing and then writing, biopython provides the SeqIO.convert() function:
Help on function convert in module Bio.SeqIO:
convert(in_file, in_format, out_file, out_format, alphabet=None)
Convert between two sequence file formats, return number of records.
Arguments:
- in_file - an input handle or filename
- in_format - input file format, lower case string
- out_file - an output handle or filename
- out_format - output file format, lower case string
- alphabet - optional alphabet to assume
5.5.3 converting a file of sequences to their reverse complements
- List and generator comprehensions are powerful tools for batch converting SeqRecords. For instance:
>>> from Bio import SeqIO
>>> records = (rec.reverse_complement(id="rc_"+rec.id, description = "reverse complement") \
... for rec in SeqIO.parse("ls_orchid.fasta", "fasta") if len(rec)<700)
>>> SeqIO.write(records, "rev_comp.fasta", "fasta")
18
- Note in the above example the SeqIO.write() function prints the number of entries when writing from generators.
- A further impressive entry is given in section 20.1.3 where SeqRecords are translated and written to a seperate file.
.6 Low level FASTA and FASTQ parsers
- Alternatives to SeqIO.parse() for FASTA FASTQ files are SimpleFastaParser or FastqGeneralIterator e.g.
>>> from Bio.SeqIO.FastaIO import SimpleFastaParser
Help on function SimpleFastaParser in module Bio.SeqIO.FastaIO:
SimpleFastaParser(handle)
Iterate over Fasta records as string tuples.
For each record a tuple of two strings is returned, the FASTA title
line (without the leading '>' character), and the sequence (with any
whitespace removed). The title line is not divided up into an
identifier (the first word) and comment or description.
-Refer to Chapter 20 in the online tutorial for further information.


This sample is a simple example of how to use an RTCDataChannel to exchange data between two pages. It is taken from Shane Tully's 'as simple as it gets' WebRTC Example, and combined with Mozilla's Simple RTCDataChannel sample.
RTCDataChannel
Messages received:


It’s no good having just a bunch of text files living on your computer. They need to be accessible by developers and users, which you’re most likely going to do by hosting the docs on the internet since it isn’t the 1980s. For training new developers and keeping your documentation living all in the same place, Process Street is a solid choice for software documentation. First, you could create a process for writing your documentation, to make sure you capture all the right details and make it as useful as possible. Then, using the following easy-to-use features, you can write up and store your documentation in one single place:
- Image widgets
- Text widgets
- Video widgets
- File widgetss
- Subtaskss
- Email widgetss
- Embed widgetss
Creating and storing all your recurring software documentation within Process Street means it can be accessed by everyone in the company. You can share it with others, send it for approval, set reminders to review it, and update it easily.
It’s remarkable that Read The Docs is free when you see all that it can do. Similar to GitHub, you can create as much open-source material as you like that gets openly indexed on the site, but it’s going to cost you if you want to make the docs private and internal to your company. For our purposes, it’s likely you’re going to be alright with having the docs readily available for users on the web. The reason Read The Docs is so good is that you can effortlessly import documentation from any version control system including Git, Mercurial, Subversion, and Bazaar. It also supports webhooks so the docs get built automatically whenever you commit code. Check their Getting Started guide to get a feel for how it works and how your docs would behave when hosted there.
If you’re using GitHub to manage version control for your software, you have, at the bare minimum, a README.MD file in the repository. To use GitHub for documenting your software, like millions of others have done in the past, just fill that README in with markdown. A great example is sferik’s t repository, screenshotted here: If you want more than just one sheet of formatted text, you can take advantage of GitHub’s Pages tool (you get one free webpage + hosting with each GitHub account, and you can even route a custom domain to it). Pages even has great looking default themes that make your documentation look professional. Above is atom.io documentation for Electron hosted on GitHub. It’s a smart choice because it automatically works with GitHub’s version control, just like the rest of your software. See the site’s repository here.
For internal software documentation use, Dropbox Paper is an excellent choice. Like its predecessor Hackpad, you can use it to create a private wiki for employees. You can link documents together, insert code blocks, images and page jumps, just as you’d demand from any documentation tool. As you can see from the comments on the right, you can also use it to go through approval processes and collaborate over the creation of documentation. Overall, it’s a great tool for internally developing and creating documentation, perhaps with the view to publicize it later, or just keep it for internal use.
Atlassian’s REST API Browser (RAB) is included in JIRA Server, Confluence Server and Stash instances by default. It’s built for discovering APIs available for use in JIRA/Confluence environments, and also a place to host your documentation. If, of course, your API fits the bill. Document your API using this tool to give your JIRA/Confluence compatible API more exposure. Check here for Atlassian’s documentation on doing that.
Tettra is a kind of knowledge base software where you can document your development, or anything at all.  Day to day, I use Tettra to have a single place where all my processes are documented so that I never forget how one relates to another or how the various automations we’ve built have been set up. Tettra is great if you’re looking to create a library of sorts. This means it’s brilliant for software documentation or even just as an internal wiki for your company. Given that Tettra is specifically designed for knowledge management, it comes with a host of other supporting features too. For example, it can make suggestions as to what extra content or sections you might want to add to give a more complete picture of your org and how things fit together. You can see a little video here for how a dev team might look to use Tettra: How Product & Engineering Teams Use Tettra.
As well as being a place where bees live, Apiary is a dedicated host for API documentation. Write in markdown, add mock API calls and Apiary collates that into something like you see below: Anyone can test the API without having to go into the app or actually program a call, which makes it a super accessible way to share your API, document it in-depth, and boast about what it can do.


Public Member Functions | |
| setup (&$model, $fields=array()) | |
| beforeSave (&$model) |
Copyright 2013 University of Washington, School of Nursing. http://opensource.org/licenses/BSD-3-Clause
SAMPLE USAGE: var $actsAs = array('Null' => array('gender', 'city', 'country')); reference: http://bakery.cakephp.org/articles/view/null-behavior
| NullBehavior::setup | ( | &$ | model, | |
| $ | fields = array() | |||
| ) |
Initializes the fields to which this behavior applies.
| NullBehavior::beforeSave | ( | &$ | model | ) |
For the appropriate fields, convert empty strings to null values before saving the data.


Swanson Sayings
Lessons on government, alcohol, food, life and more from the one and only
Ronald Ulysses Swanson of NBC's
Parks & Rec
Another. Please & Thank You
Based On


Having worked for past 3 years in the field of robotics I have developed skills in robotics development frameworks like ROS and also have good hands-on experience with sensors ranging from IMU to RGBD Cameras.
Other than that I have also spent a considerable amount of my free time developing my machine learning skills and want to further apply that in the same to build robots.
I am adept to code in Python(experience in Keras, Pytorch and other machine learning tools), Java and C++.
Team Management and Photography are some of my non-technical skills I am confident of and you will always find me surrounded by friends or clicking pictures.
In my me time, I love to play games, read fictional books, listen to music or sketch.


Introduction
This simple service uses GitHub webhooks to catch updates of
pull requests (PRs) and update the labels of that PR by matching changes
files with preconfigured patterns. It is mainly homework for MI-PYT
course, but can be actually quite useful although it consists only of
this info page (GET /
) and webhook listener (POST /
).
Labels configuration
- frontend
*/templates/*
static/*
- backend
logic/*
- docs
*.md
LICENSE
docs/*
Service usage
To manage PRs of your repo by this service you need to know configured webhook secret, then just:
- Go to your repository settings at GitHub
- Pick webhooks from left menu
- Press Add webhook
- Create webhook with configuration below and press Add webhook
Webhook configuration
- Payload URL
- http://mareksuchanek.pythonanywhere.com/
- Content type
- application/json
- Secret
- webhook secret (cannot be published)
- Which events would you like to trigger this webhook?
- Let me select individual events: Pull requests
- Active
- Yes


Welcome {{$parent.username}} Login Organizations Competitions Rule sets Users Matches View Settings Version: {{$parent.version}}


jvisualvm(1) jvisualvm(1) Name jvisualvm - Java Virtual Machine Monitoring, Troubleshooting, and Profil‐ ing Tool SYNOPSIS jvisualvm [ options ] PARAMETERS Options, if used, should follow immediately after the command name. Options may be in any order. For a discussion of parameters that apply to a specific option, see OPTIONS below. DESCRIPTION Java VisualVM is an intuitive graphical user interface that provides detailed information about Java technology-based applications (Java applications) while they are running on a given Java Virtual Machine (JVM(*)). The name Java VisualVM comes from the fact that Java VisualVM provides information about the JVM software visually. Java VisualVM combines several monitoring, troubleshooting, and profiling utilities into a single tool. For example, most of the functionality offered by the standalone tools jmap, jinfo, jstat and jstack have been integrated into Java VisualVM. Other functionalities, such as some of those offered by the JConsole tool, can be added as optional plug-ins. OPTIONS The following option is possible when you launch Java VisualVM. -J<jvm_option> Pass this <jvm_option> to the JVM software. USAGE Java VisualVM is useful to Java application developers to troubleshoot applications and to monitor and improve the applications' performance. Java VisualVM can allow developers to generate and analyse heap dumps, track down memory leaks, perform and monitor garbage collection, and per‐ form lightweight memory and CPU profiling. Plug-ins also exist that expand the functionality of Java VisualVM. For example, most of the func‐ tionality of the JConsole tool is available via the MBeans Tab and JCon‐ sole Plug-in Wrapper plug-ins. You can choose from a catalog of standard Java VisualVM plug-ins by selecting 'Tools' | 'Plugins' in the Java Visu‐ alVM menus. Start Java VisualVM with the following command: % jvisualvm <options> SEE ALSO For more details about Java VisualVM see the following pages. o Java VisualVM developers' site @ http://visualvm.java.net o Java VisualVM in Java SE platform documentation @ http://docs.oracle.com/javase/7/docs/technotes/guides/visu‐ alvm/index.html (* The terms "Java Virtual Machine" and "JVM" mean a Virtual Machine for the Java platform.) 16 Mar 2012 jvisualvm(1)


URL Shorter Application
List of Users
List of URLs
Generate Short URL
Welcome
[[${#request.userPrincipal.principal.fullName}]]
List of Urls
ID
Original URL
Short URL
User Id
Delete


The larger the bubble, the more the number of graduates with a degree in that category.
Understand what to expect after choosing a specific category above.
Fields and occupations you can expect to work in/as with a specific degree.
The width of the link is directly proportional to number of graduates working in that line of field.


ACNEFREE CLEAR SKIN TREATMENTS ADVANCED DEEP CLEANSING DUO- benzoyl peroxide
Valeant Pharmaceuticals North America LLC
Disclaimer: Most OTC drugs are not reviewed and approved by FDA, however they may be marketed if they comply with applicable regulations and policies. FDA has not evaluated whether this product complies.
For external use only.
Do not use
Ask a doctor or pharmacist before use
When using this product
Stop use and ask a doctor if excessive irritation occurs.
Use every morning and evening. Apply a dime-size amount to damp skin and gently massage, avoiding the eye area. Rinse well. If bothersome peeling occurs, reduce application use. May also be used on chest or back.
Water, Glycerin, Propylene Glycol, Cocamidopropyl Hydroxysultaine, Sodium C14-16 Olefin Sulfonate, Xanthan Gum, Citric Acid, Potassium Hydroxide, Methyl Methacrylate/Glycol Dimethacrylate Crosspolymer, Sodium Lauroyl Lactylate, Glycolic Acid, Ceramide NP, Ceramide AP, Phytosphingosine, Cholesterol, Carbomer, Ceramide EOP
Installing brush head: Press the brush head onto unit until it locks into position with a click.
Installing batteries: Remove battery cover. Insert 2 AA batteries, aligning +/- symbols. Replace batteries as needed. Do not mix old and new batteries as unit may become damaged.
Use once a day. Dampen skin, rinse brush head and pat dry to remove excess water before attaching to brush unit. Apply any AcneFree cleanser to brush head, spreading a dime-size amount evenly over brush surface; this will avoid product from splattering onto clothing while brush is in motion. (Cleansers with Benzoyl Peroxide may bleach clothing/towels.) Gently massage over face for approximately 60 seconds, concentrating on troubled areas. Avoid the eye and mouth area. Be careful not to press too hard; this will limit the motion of the brush and reduce its effectiveness. Rinse face, remove brush head, and rinse thoroughly. Recommended: For sensitive skin, use 2-3 times a week on low speed. If any slight redness occurs after use, it should fade within half an hour.
To keep your Advanced Cleansing Brush in good condition, do not use abrasive cleansers or chemicals to clean any part of the brush. Do not put any part of the Advanced Cleansing Brush unit in a dishwasher. Do not submerge the Advanced Cleansing Brush in water.
For best results: After use, remove the brush head from handle and rinse with warm soapy water to remove any residue.
Avoid direct contact with eyes and hairline/hair. If skin irritation or redness occurs, reduce frequency of use. As this product increases exfoliation of the skin, it may also increase your skin’s sensitivity to the sun. Keep out of reach of children.
AcneFree®
CLEAR SKIN TREATMENTS
CLEANS 15X BETTER*
Advanced
Deep Cleansing Duo
2-SPEED FACIAL CLEANSING BRUSH + OIL-FREE PURIFYING CLEANSER
CONTAINS: 1 CLEANSING BRUSH, 2 BRUSH HEADS, 2 AA BATTERIES, CLEANSER 4 FL. OZ. (118 mL)
*then leading cleanser alone
|
ACNEFREE CLEAR SKIN TREATMENTS
ADVANCED DEEP CLEANSING DUO benzoyl peroxide kit | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
|
| Labeler - Valeant Pharmaceuticals North America LLC (042230623) |
| Establishment | |||
| Name | Address | ID/FEI | Business Operations |
|---|---|---|---|
| Universal Packaging Systems, Inc. | 790530976 | MANUFACTURE(0187-5012) |


|
|
4 Positions
Response Required
08/09/2015
#RfQSectionDescription#
|
|
3/4 Positions
|
08/09/2015
14,318.59 EUR
Calculated Total
7.64% > Req. Price
|
|
0/4 Positions
|
08/09/2015
15,318.59 EUR
Manual Price
7.64% > Req. Price
|
|
4/4 Positions
|
08/09/2015
17,318.59 EUR
Manual Price
7.64% > Req. Price
|
|
| 1 |
#RfQItemShortDesc#
SO951V1
20 piece/s × 61.25 EUR
08/09/2015
Response Required 1 file
|
|
#SQItemShortDesc#
SO951V1
20 piece/s × 65.93 EUR
|
08/09/2015
1,318.59 EUR
7.64% > Req. Price
|
|
#SQItemShortDesc#
SO951V1
20 piece/s × 49.50 EUR
|
08/09/2015
1,189.98 EUR
3.51% < Req. Price
|
|
#SQItemShortDesc#
SO951V1
20 piece/s × 109.50 EUR
|
08/09/2015
2,189.98 EUR
79% > Req. Price
|
2,189.98 EUR
1,318.59 EUR
1,189.98 EUR
|
| 2 |
#BundledRfQItemShortDesc#
SO951V1
10 piece/s × 32.90 EUR
08/09/2015
|
|
#BundledSQItemShortDesc#
SO951V1
10 piece/s × 32.99 EUR
Offer Awarded
1 file
|
08/09/2015
329.99 EUR
0.30% > Req. Price
|
|
|
|
|
#BundledSQItemShortDesc#
SO951V1
10 piece/s × 38.99 EUR
1 file
|
08/09/2015
389.99 EUR
18% > Req. Price
|
389.99 EUR
359.99 EUR
329.99 EUR
|
|
|
4 Positions
Response Required
08/09/2015
#RfQSectionDescription#
|
|
3/4 Positions
|
08/09/2015
14,318.59 EUR
Calculated Total
7.64% > Req. Price
|
|
0/4 Positions
|
08/09/2015
15,318.59 EUR
Manual Price
7.64% > Req. Price
|
|
4/4 Positions
|
08/09/2015
17,318.59 EUR
Manual Price
7.64% > Req. Price
|
|
|
|
4 Positions
Response Required
08/09/2015
#RfQSectionDescription#
|
|
3/4 Positions
|
08/09/2015
14,318.59 EUR
Calculated Total
7.64% > Req. Price
|
|
0/4 Positions
|
08/09/2015
15,318.59 EUR
Manual Price
7.64% > Req. Price
|
|
4/4 Positions
|
08/09/2015
17,318.59 EUR
Manual Price
7.64% > Req. Price
|
|
| 3 |
#RfQItemShortDesc#
SO951V1
20 piece/s × 61.25 EUR
08/09/2015
1 file
|
|
|
|
|
|
|
Total Requested Price: 12,500.00 EUR
Total Offered Price:
13,589.45 EUR
+3.51% Requested Price
|
Total Requested Price: 12,500.00 EUR
Total Offered Price:
13,589.45 EUR
+3.51% Requested Price
|
Total Requested Price: 12,500.00 EUR
Total Offered Price:
13,589.45 EUR
+3.51% Requested Price
|
18,657.12 EUR
15,986,27 EUR
11,247.99 EUR
|


Hello! 👋🏻 My name is Vraj Patel. I'm pursuing a Computer engineering at ITM Universe Vadodara. I'm a Web Developer, IOS Developer, and more passionate about technology. I enjoy exploring new technology and build creative projects on it. Apart From this, I'm also like to contribute to the communities and Open-source Projects.
But When I'm not hacking on the command line, or drowning in homework assignments, I try to find the time to improve myself and my workflow. I'm a confident, self-reliant, and coder.
Ready to start your next project with me? Give me a call or send me an email and i will get back to you as soon as possible!


Founded by students at Cambridge University from the Indian subcontinent, the Majlis comprised of names which would go on to achieve major significance in South Asian political life.
Our counter-parts founded the Oxford Majlis with whom we held a varsity debate each year and ran a joint publication called "Bharat".
As published in the Cambridge Daily News, "At 8.15pm he attended a meeting at Carpenter Hall [on the site of the Cambridge Unitarian Church, Emmanuel Road], which was crowded to the doors with both English and Indian students. Instead of making a formal speech he answered questions, which were put to him in great number by the audience till nearly 9.15pm. Mr Chowdhury presided as President of the Indian Majlis, and Mr Rajah was the secretary on this occasion"
During the Raj, the Majlis was instrumental to the anti-colonial cause, with pro-independence figures such as poet and philosopher Sri Aurobindo reputed to be a founding member whilst an undergraduate studying for the Indian Civil Service. During the inter-war period, the Majlis hosted a wide range of prominent speakers from both anti-colonial and imperial circles. This included Muhammad Ali Jinnah and Mahatma Gandhi as well as India Secretary Lawrence Dundas and future British Chancellor R.A. Butler. Viewed as potentially subversive by the British authorities, the Majlis was subject to surveillance by Special Branch.
The Majlis hold a congress of friendship with the Soviet government.
Amartya Sen is elected President of the honourable society.
After partition, transnational geopolitical divisions on the subcontinent permeated South-East Asian student communities at Oxbridge. An unfortunate demise in the spirit of collaboration eventually rendered the Majlis dormant at both universities.
A small group of students, with a strong interest in Indian history, politics and cultures, felt that the re-establishment of the Majlis could be an incredible force for inspiring intelligent South Asians at Cambridge to care and think about the region. They proceeded to look for interest and quickly found a strong team that re-founded the society. Sahil Baid, Mahid Qamar, Dhruv Kaushik, Tohin Munshi, Karamvir Kumar and Areesha Saif organised the first debate and established the first committee to debate Indian involvement in the 1971 war.
President
VP
Treasurer
Speakers Officer
Secretary
Speakers Officer
Publicity Officer
Communications and Tech


Camera library header.
More...
|
| int | e_poxxxx_config_cam (unsigned int sensor_x1, unsigned int sensor_y1, unsigned int sensor_width, unsigned int sensor_height, unsigned int zoom_fact_width, unsigned int zoom_fact_height, int color_mode) |
| |
| int | e_poxxxx_init_cam (void) |
| |
| int | e_poxxxx_get_orientation (void) |
| |
| void | e_poxxxx_write_cam_registers (void) |
| |
| void | e_poxxxx_launch_capture (char *buf) |
| |
| int | e_poxxxx_is_img_ready (void) |
| |
| void | e_poxxxx_set_mirror (int vertical, int horizontal) |
| |
| int | e_poxxxx_apply_timer_config (int pixel_row, int pixel_col, int bpp, int pbp, int bbl) |
| |
| void | e_poxxxx_set_awb_ae (int awb, int ae) |
| |
| void | e_poxxxx_set_rgb_gain (unsigned char r, unsigned char g, unsigned char b) |
| |
| void | e_poxxxx_set_exposure (unsigned long exp) |
| |
Camera library header.
- Author
- Philippe Rétornaz
| #define GREY_SCALE_MODE 0 |
If you set this at 0, you save about 168 bytes of memory But you loose all advanced camera functions
| int e_poxxxx_apply_timer_config |
( |
int |
pixel_row, |
|
|
int |
pixel_col, |
|
|
int |
bpp, |
|
|
int |
pbp, |
|
|
int |
bbl |
|
) |
| |
Modify the interrupt configuration
- Warning
- This is an internal function, use e_poxxxx_config_cam
- Parameters
-
| pixel_row | The number of row to take |
| pixel_col | The number of pixel to take each pixel_row |
| bpp | The number of byte per pixel |
| pbp | The number of pixel to ignore between each pixel |
| bbl | The number of row to ignore between each line |
- Returns
- Zero if OK, non-zero if the mode exceed internal data representation
- See also
- e_poxxxx_config_cam
| int e_poxxxx_config_cam |
( |
unsigned int |
sensor_x1, |
|
|
unsigned int |
sensor_y1, |
|
|
unsigned int |
sensor_width, |
|
|
unsigned int |
sensor_height, |
|
|
unsigned int |
zoom_fact_width, |
|
|
unsigned int |
zoom_fact_height, |
|
|
int |
color_mode |
|
) |
| |
| int e_poxxxx_get_orientation |
( |
void |
| ) |
|
Return the camera orientation
- Returns
- 0: vertical 480x640, 1: horizontal 640x480, horizontal inverted, -1: unknown
| int e_poxxxx_init_cam |
( |
void |
| ) |
|
Initalize the camera, return the version in hexa, 0x3030 or 0x6030
| int e_poxxxx_is_img_ready |
( |
void |
| ) |
|
Check if the current capture is finished
- Returns
- Zero if the current capture is in progress, non-zero if the capture is done.
- See also
- e_poxxxx_launch_capture
| void e_poxxxx_launch_capture |
( |
char * |
buf | ) |
|
| void e_poxxxx_set_awb_ae |
( |
int |
awb, |
|
|
int |
ae |
|
) |
| |
Enable/Disable AWB and AE
- Parameters
-
| awb | 1 means AWB enabled, 0 means disabled |
| ae | 1 means AE enabled, 0 means disabled |
| void e_poxxxx_set_exposure |
( |
unsigned long |
exp | ) |
|
Set exposure time
- Parameters
-
| t | Exposure time, LSB is in 1/64 line time |
- Warning
- Only meaningful if AE is disabled
| void e_poxxxx_set_mirror |
( |
int |
vertical, |
|
|
int |
horizontal |
|
) |
| |
| void e_poxxxx_set_rgb_gain |
( |
unsigned char |
r, |
|
|
unsigned char |
g, |
|
|
unsigned char |
b |
|
) |
| |
Set the gains of the camera
- Parameters
-
| red | The red pixels' gain (0..255) |
| green | The green pixels' gain (0..255) |
| blue | The blue pixels' gain (0..255) |
- Warning
- Only meaningful if AWB is disabled
| void e_poxxxx_write_cam_registers |
( |
void |
| ) |
|