| Documentation Contents |
Generates signatures for Java ARchive (JAR) files, and verifies the signatures of signed JAR files.
jarsigner [ options ] jar-file alias jarsigner -verify [ options ] jar-file
The jarsigner tool is used for two purposes:
- to sign Java ARchive (JAR) files, and
- to verify the signatures and integrity of signed JAR files.
The JAR feature enables the packaging of class files, images, sounds, and other digital data in a single file for faster and easier distribution. A tool named jar enables developers to produce JAR files. (Technically, any zip file can also be considered a JAR file, although when created by jar or processed by jarsigner, JAR files also contain a META-INF/MANIFEST.MF file.)
A digital signature is a string of bits that is computed from some data (the data being "signed") and the private key of an entity (a person, company, etc.). Like a handwritten signature, a digital signature has many useful characteristics:
- Its authenticity can be verified, via a computation that uses the public key corresponding to the private key used to generate the signature.
- It cannot be forged, assuming the private key is kept secret.
- It is a function of the data signed and thus can't be claimed to be the signature for other data as well.
- The signed data cannot be changed; if it is, the signature will no longer verify as being authentic.
In order for an entity's signature to be generated for a file, the entity must first have a public/private key pair associated with it, and also one or more certificates authenticating its public key. A certificate is a digitally signed statement from one entity, saying that the public key of some other entity has a particular value.
jarsigner uses key and certificate information from a keystore to generate digital signatures for JAR files. A keystore is a database of private keys and their associated X.509 certificate chains authenticating the corresponding public keys. The keytool utility is used to create and administer keystores.
jarsigner uses an entity's private key to generate a signature. The signed JAR file contains, among other things, a copy of the certificate from the keystore for the public key corresponding to the private key used to sign the file. jarsigner can verify the digital signature of the signed JAR file using the certificate inside it (in its signature block file).
Starting in J2SE 5.0, jarsigner can generate signatures that include a timestamp, thus enabling systems/deployer (including Java Plug-in) to check whether the JAR file was signed while the signing certificate was still valid. In addition, APIs were added in J2SE 5.0 to allow applications to obtain the timestamp information.
At this time, jarsigner can only sign JAR files created by the SDK jar tool or zip files. (JAR files are the same as zip files, except they also have a META-INF/MANIFEST.MF file. Such a file will automatically be created when jarsigner signs a zip file.)
The default jarsigner behavior is to sign a JAR (or zip) file. Use the
-verify
option to instead have it verify a signed JAR file.
The keytool and jarsigner tools completely replace the javakey tool provided in JDK 1.1. These new tools provide more features than javakey, including the ability to protect the keystore and private keys with passwords, and the ability to verify signatures in addition to generating them.
The new keystore architecture replaces the identity database that javakey created and managed. There is no backwards compatibility between the keystore format and the database format used by javakey in 1.1. However,
- It is possible to import the information from an identity database into a keystore, via the keytool
-identitydb
command.- jarsigner can sign JAR files also previously signed using javakey.
- jarsigner can verify JAR files signed using javakey. Thus, it recognizes and can work with signer aliases that are from a JDK 1.1 identity database rather than a Java 2 SDK keystore.
The following table explains how JAR files that were signed in JDK 1.1.x are treated in the Java 2 platform.
JAR File Type
Identity in 1.1 database
Trusted Identity imported into Java 2 Platform keystore from 1.1 database (4)
Policy File grants privileges to Identity/Alias
Privileges Granted
Signed JAR
NO
NO
NO
Default privileges granted to all code.
Unsigned JAR
NO
NO
NO
Default privileges granted to all code.
Signed JAR
NO
YES
NO
Default privileges granted to all code.
Signed JAR
YES/Untrusted
NO
NO
Default privileges granted to all code. (3)
Signed JAR
YES/Untrusted
NO
YES
Default privileges granted to all code. (1,3)
Signed JAR
NO
YES
YES
Default privileges granted to all code plus privileges granted in policy file.
Signed JAR
YES/Trusted
YES
YES
Default privileges granted to all code plus privileges granted in policy file. (2)
Signed JAR
YES/Trusted
NO
NO
All privileges
Signed JAR
YES/Trusted
YES
NO
All privileges (1)
Signed JAR
YES/Trusted
NO
YES
All privileges (1)
Notes:
- If an identity/alias is mentioned in the policy file, it must be imported into the keystore for the policy file to have any effect on privileges granted.
- The policy file/keystore combination has precedence over a trusted identity in the identity database.
- Untrusted identities are ignored in the Java 2 platform.
- Only trusted identities can be imported into Java 2 SDK keystores.
Keystore Aliases
All keystore entities are accessed via unique aliases.
When using jarsigner to sign a JAR file, you must specify the alias for the keystore entry containing the private key needed to generate the signature. For example, the following will sign the JAR file named "MyJARFile.jar", using the private key associated with the alias "duke" in the keystore named "mystore" in the "working" directory. Since no output file is specified, it overwrites MyJARFile.jar with the signed JAR file.
jarsigner -keystore /working/mystore -storepass myspass -keypass dukekeypasswd MyJARFile.jar dukeKeystores are protected with a password, so the store password (in this case "myspass") must be specified. You will be prompted for it if you don't specify it on the command line. Similarly, private keys are protected in a keystore with a password, so the private key's password (in this case "dukekeypasswd") must be specified, and you will be prompted for it if you don't specify it on the command line and it isn't the same as the store password.
Keystore Location
jarsigner has a
-keystore
option for specifying the URL of the keystore to be used. The keystore is by default stored in a file named.keystore
in the user's home directory, as determined by theuser.home
system property. On Solaris systemsuser.home
defaults to the user's home directory.Note that the input stream from the
-keystore
option is passed to theKeyStore.load
method. IfNONE
is specified as the URL, then a null stream is passed to theKeyStore.load
method.NONE
should be specified if theKeyStore
is not file-based, for example, if it resides on a hardware token device.Keystore Implementation
The
KeyStore
class provided in thejava.security
package supplies well-defined interfaces to access and modify the information in a keystore. It is possible for there to be multiple different concrete implementations, where each implementation is that for a particular type of keystore.Currently, there are two command-line tools that make use of keystore implementations (keytool and jarsigner), and also a GUI-based tool named Policy Tool. Since
KeyStore
is publicly available, Java 2 SDK users can write additional security applications that use it.There is a built-in default implementation, provided by Sun Microsystems. It implements the keystore as a file, utilizing a proprietary keystore type (format) named "JKS". It protects each private key with its individual password, and also protects the integrity of the entire keystore with a (possibly different) password.
Keystore implementations are provider-based. More specifically, the application interfaces supplied by
KeyStore
are implemented in terms of a "Service Provider Interface" (SPI). That is, there is a corresponding abstractKeystoreSpi
class, also in thejava.security
package, which defines the Service Provider Interface methods that "providers" must implement. (The term "provider" refers to a package or a set of packages that supply a concrete implementation of a subset of services that can be accessed by the Java Security API.) Thus, to provide a keystore implementation, clients must implement a provider and supply a KeystoreSpi subclass implementation, as described in How to Implement a Provider for the Java Cryptography Architecture.Applications can choose different types of keystore implementations from different providers, using the "getInstance" factory method supplied in the
KeyStore
class. A keystore type defines the storage and data format of the keystore information, and the algorithms used to protect private keys in the keystore and the integrity of the keystore itself. Keystore implementations of different types are not compatible.keytool works on any file-based keystore implementation. (It treats the keytore location that is passed to it at the command line as a filename and converts it to a FileInputStream, from which it loads the keystore information.) The jarsigner and policytool tools, on the other hand, can read a keystore from any location that can be specified using a URL.
For jarsigner and keytool, you can specify a keystore type at the command line, via the -storetype option. For Policy Tool, you can specify a keystore type via the "Change Keystore" command in the Edit menu.
If you don't explicitly specify a keystore type, the tools choose a keystore implementation based simply on the value of the
keystore.type
property specified in the security properties file. The security properties file is called java.security, and it resides in the SDK security properties directory,java.home/lib/security
, where java.home is the runtime environment's directory (the jre directory in the SDK or the top-level directory of the Java 2 Runtime Environment).Each tool gets the
keystore.type
value and then examines all the currently-installed providers until it finds one that implements keystores of that type. It then uses the keystore implementation from that provider.The
KeyStore
class defines a static method namedgetDefaultType
that lets applications and applets retrieve the value of thekeystore.type
property. The following line of code creates an instance of the default keystore type (as specified in thekeystore.type
property):KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());The default keystore type is "jks" (the proprietary type of the keystore implementation provided by Sun). This is specified by the following line in the security properties file:
keystore.type=jksNote: Case doesn't matter in keystore type designations. For example, "JKS" would be considered the same as "jks".
To have the tools utilize a keystore implementation other than the default, change that line to specify a different keystore type. For example, if you have a provider package that supplies a keystore implementation for a keystore type called "pkcs12", change the line to
keystore.type=pkcs12Note that if you us the PKCS#11 provider package, you should refer to the KeyTool and JarSigner section of the Java PKCS#11 Reference Guide for details.
By default, jarsigner signs a JAR file using either
- DSA (Digital Signature Algorithm) with the SHA-1 digest algorithm, or
- the RSA algorithm with the MD5 digest algorithm.
That is, if the signer's public and private keys are DSA keys, jarsigner will sign the JAR file using the "SHA1withDSA" algorithm. If the signer's keys are RSA keys, jarsigner will attempt to sign the JAR file using the "MD5withRSA" algorithm.
These default signature algorithms can be overridden using the -sigalg option.
When jarsigner is used to sign a JAR file, the output signed JAR file is exactly the same as the input JAR file, except that it has two additional files placed in the META-INF directory:
- a signature file, with a .SF extension, and
- a signature block file, with a .DSA extension.
The base file names for these two files come from the value of the
-sigFile
option. For example, if the option appears as-sigFile MKSIGNthe files are named "MKSIGN.SF" and "MKSIGN.DSA".
If no
-sigfile
option appears on the command line, the base file name for the .SF and .DSA files will be the first 8 characters of the alias name specified on the command line, all converted to upper case. If the alias name has fewer than 8 characters, the full alias name is used. If the alias name contains any characters that are not allowed in a signature file name, each such character is converted to an underscore ("_") character in forming the file name. Legal characters include letters, digits, underscores, and hyphens.The Signature (.SF) File
A signature file (the .SF file) looks similar to the manifest file that is always included in a JAR file when jarsigner is used to sign the file. That is, for each source file included in the JAR file, the .SF file has three lines, just as in the manifest file, listing the following:
- the file name,
- the name of the digest algorithm used (SHA), and
- a SHA digest value.
In the manifest file, the SHA digest value for each source file is the digest (hash) of the binary data in the source file. In the .SF file, on the other hand, the digest value for a given source file is the hash of the three lines in the manifest file for the source file.
The signature file also, by default, includes a header containing a hash of the whole manifest file. The presence of the header enables verification optimization, as described in JAR File Verification.
The Signature Block (.DSA) File
The .SF file is signed and the signature is placed in the .DSA file. The .DSA file also contains, encoded inside it, the certificate or certificate chain from the keystore which authenticates the public key corresponding to the private key used for signing.
As of the J2SE 5.0 release, the
jarsigner
tool can now generate and store a signature timestamp when signing a JAR file. In addition,jarsigner
supports alternative signing mechanisms. This behavior is optional and is controlled by the user at the time of signing through these options:Each of these options is detailed in the Options section below.
A successful JAR file verification occurs if the signature(s) are valid, and none of the files that were in the JAR file when the signatures were generated have been changed since then. JAR file verification involves the following steps:
- Verify the signature of the .SF file itself.
That is, the verification ensures that the signature stored in each signature block (.DSA) file was in fact generated using the private key corresponding to the public key whose certificate (or certificate chain) also appears in the .DSA file. It also ensures that the signature is a valid signature of the corresponding signature (.SF) file, and thus the .SF file has not been tampered with.
- Verify the digest listed in each entry in the .SF file with each corresponding section in the manifest.
The .SF file by default includes a header containing a hash of the entire manifest file. When the header is present, then the verification can check to see whether or not the hash in the header indeed matches the hash of the manifest file. If that is the case, verification proceeds to the next step.
If that is not the case, a less optimized verification is required to ensure that the hash in each source file information section in the .SF file equals the hash of its corresponding section in the manifest file (see The Signature (.SF) File).
One reason the hash of the manifest file that is stored in the .SF file header may not equal the hash of the current manifest file would be because one or more files were added to the JAR file (using the
jar
tool) after the signature (and thus the .SF file) was generated. When thejar
tool is used to add files, the manifest file is changed (sections are added to it for the new files), but the .SF file is not. A verification is still considered successful if none of the files that were in the JAR file when the signature was generated have been changed since then, which is the case if the hashes in the non-header sections of the .SF file equal the hashes of the corresponding sections in the manifest file.- Read each file in the JAR file that has an entry in the .SF file. While reading, compute the file's digest, and then compare the result with the digest for this file in the manifest section. The digests should be the same, or verification fails.
If any serious verification failures occur during the verification process, the process is stopped and a security exception is thrown. It is caught and displayed by jarsigner.
A JAR file can be signed by multiple people simply by running the jarsigner tool on the file multiple times, specifying the alias for a different person each time, as in:
jarsigner myBundle.jar susan jarsigner myBundle.jar kevinWhen a JAR file is signed multiple times, there are multiple .SF and .DSA files in the resulting JAR file, one pair for each signature. Thus, in the example above, the output JAR file includes files with the following names:
SUSAN.SF SUSAN.DSA KEVIN.SF KEVIN.DSANote: It is also possible for a JAR file to have mixed signatures, some generated by the JDK 1.1 javakey tool and others by jarsigner. That is, jarsigner can be used to sign JAR files already previously signed using javakey.
The various jarsigner options are listed and described below. Note:
- All option names are preceded by a minus sign (-).
- The options may be provided in any order.
- Items in italics (option values) represent the actual values that must be supplied.
- The
-keystore
,-storepass
,-keypass
,-sigfile
,-sigalg
,-digestalg
, and-signedjar
options are only relevant when signing a JAR file, not when verifying a signed JAR file. Similarly, an alias is only specified on the command line when signing a JAR file.
-keystore
url- Specifies the URL that tells the keystore location. This defaults to the file .keystore in the user's home directory, as determined by the "user.home" system property.
A keystore is required when signing, so you must explicitly specify one if the default keystore does not exist (or you want to use one other than the default).
A keystore is not required when verifying, but if one is specified, or the default exists, and the
-verbose
option was also specified, additional information is output regarding whether or not any of the certificates used to verify the JAR file are contained in that keystore.Note: the
-keystore
argument can actually be a file name (and path) specification rather than a URL, in which case it will be treated the same as a "file:" URL. That is,-keystore filePathAndNameis treated as equivalent to-keystore file:filePathAndNameIf the Sun PKCS#11 provider has been configured in the java.security security properties file (located in the JRE's $JAVA_HOME/lib/security directory), then keytool and jarsigner can operate on the PKCS#11 token by specifying these options:For example, this command lists the contents of the configured PKCS#11 token:
-keystore NONE
-storetype PKCS11
jarsigner -keystore NONE -storetype PKCS11 -list-storetype
storetype- Specifies the type of keystore to be instantiated. The default keystore type is the one that is specified as the value of the "keystore.type" property in the security properties file, which is returned by the static
getDefaultType
method injava.security.KeyStore
.The PIN for a PCKS#11 token can also be specified using the
-storepass
option. If none has been specified, keytool and jarsigner will prompt for the token PIN. If the token has a protected authentication path (such as a dedicated PIN-pad or a biometric reader), then the -protected option must be specified and no password options can be specified.-storepass
password- Specifies the password which is required to access the keystore. This is only needed when signing (not verifying) a JAR file. In that case, if a
-storepass
option is not provided at the command line, the user is prompted for the password.Note: The password shouldn't be specified on the command line or in a script unless it is for testing purposes, or you are on a secure system. Also, when typing in a password at the password prompt, the password is echoed (displayed exactly as typed), so be careful not to type it in front of anyone.
-keypass
password- Specifies the password used to protect the private key of the keystore entry addressed by the alias specified on the command line. The password is required when using jarsigner to sign a JAR file. If no password is provided on the command line, and the required password is different from the store password, the user is prompted for it.
Note: The password shouldn't be specified on the command line or in a script unless it is for testing purposes, or you are on a secure system. Also, when typing in a password at the password prompt, the password is echoed (displayed exactly as typed), so be careful not to type it in front of anyone.
-sigfile
file- Specifies the base file name to be used for the generated .SF and .DSA files. For example, if file is "DUKESIGN", the generated .SF and .DSA files will be named "DUKESIGN.SF" and "DUKESIGN.DSA", and will be placed in the "META-INF" directory of the signed JAR file.
The characters in file must come from the set "a-zA-Z0-9_-". That is, only letters, numbers, underscore, and hyphen characters are allowed. Note: All lowercase characters will be converted to uppercase for the .SF and .DSA file names.
If no
-sigfile
option appears on the command line, the base file name for the .SF and .DSA files will be the first 8 characters of the alias name specified on the command line, all converted to upper case. If the alias name has fewer than 8 characters, the full alias name is used. If the alias name contains any characters that are not legal in a signature file name, each such character is converted to an underscore ("_") character in forming the file name.-sigalg
algorithmSpecifies the name of the signature algorithm to use to sign the JAR file.See Appendix A of the Java Cryptography Architecture for a list of standard signature algorithm names. This algorithm must be compatible with the private key used to sign the JAR file. If this option is not specified, SHA1withDSA or MD5withRSA will be used depending on the type of private key. There must either be a statically installed provider supplying an implementation of the specified algorithm or the user must specify one with the -providerClass option, otherwise the command will not succeed.
-digestalg
algorithmSpecifies the name of the message digest algorithm to use when digesting the entries of a jar file.See Appendix A of the Java Cryptography Architecture for a list of standard message digest algorithm names. If this option is not specified, SHA-1 will be used. There must either be a statically installed provider supplying an implementation of the specified algorithm or the user must specify one with the -providerClass option, otherwise the command will not succeed.
-signedjar
file- Specifies the name to be used for the signed JAR file.
If no name is specified on the command line, the name used is the same as the input JAR file name (the name of the JAR file to be signed); in other words, that file is overwritten with the signed JAR file.
-verify
- If this appears on the command line, the specified JAR file will be verified, not signed. If the verification is successful, "jar verified" will be displayed. If you try to verify an unsigned JAR file, or a JAR file signed with an unsupported algorithm (e.g., RSA when you don't have an RSA provider installed), the following is displayed: "jar is unsigned. (signatures missing or not parsable)"
It is possible to verify JAR files signed using either jarsigner or the JDK 1.1 javakey tool, or both.
For further information on verification, see JAR File Verification.
-certs
- If this appears on the command line, along with the
-verify
and-verbose
options, the output includes certificate information for each signer of the JAR file. This information includes
- the name of the type of certificate (stored in the .DSA file) that certifies the signer's public key
- if the certificate is an X.509 certificate (more specifically, an instance of
java.security.cert.X509Certificate
): the distinguished name of the signerThe keystore is also examined. If no keystore value is specified on the command line, the default keystore file (if any) will be checked. If the public key certificate for a signer matches an entry in the keystore, then the following information will also be displayed:
- in parentheses, the alias name for the keystore entry for that signer. If the signer actually comes from a JDK 1.1 identity database instead of from a keystore, the alias name will appear in brackets instead of parentheses.
-verbose
- If this appears on the command line, it indicates "verbose" mode, which causes jarsigner to output extra information as to the progress of the JAR signing or verification.
-internalsf
- In the past, the .DSA (signature block) file generated when a JAR file was signed used to include a complete encoded copy of the .SF file (signature file) also generated. This behavior has been changed. To reduce the overall size of the output JAR file, the .DSA file by default doesn't contain a copy of the .SF file anymore. But if
-internalsf
appears on the command line, the old behavior is utilized. This option is mainly useful for testing; in practice, it should not be used, since doing so eliminates a useful optimization.-sectionsonly
- If this appears on the command line, the .SF file (signature file) generated when a JAR file is signed does not include a header containing a hash of the whole manifest file. It just contains information and hashes related to each individual source file included in the JAR file, as described in The Signature (.SF) File .
By default, this header is added, as an optimization. When the header is present, then whenever the JAR file is verified, the verification can first check to see whether or not the hash in the header indeed matches the hash of the whole manifest file. If so, verification proceeds to the next step. If not, it is necessary to do a less optimized verification that the hash in each source file information section in the .SF file equals the hash of its corresponding section in the manifest file.
For further information, see JAR File Verification.
This option is mainly useful for testing; in practice, it should not be used, since doing so eliminates a useful optimization.
-protected
- Either
true
orfalse
. This value should be specified astrue
if a password must be given via a protected authentication path such as a dedicated PIN reader.-provider
provider-class-nameUsed to specify the name of cryptographic service provider's master class file when the service provider is not listed in the security properties file, java.security. Used in conjunction with the
-providerArg
ConfigFilePath option, keytool and jarsigner will install the provider dynamically (where ConfigFilePath is the path to the token configuration file). Here's an example of a command to list a PKCS#11 keystore when the Sun PKCS#11 provider has not been configured in the security properties file.jarsigner -keystore NONE -storetype PKCS11 \ -providerClass sun.security.pkcs11.SunPKCS11 \ -providerArg /foo/bar/token.config \ -list-providerName
providerNameIf more than one provider has been configured in the java.security security properties file, you can use the -providerName option to target a specific provider instance. The argument to this option is the name of the provider. For the Sun PKCS#11 provider, providerName is of the form SunPKCS11-TokenName, where TokenName is the name suffix that the provider instance has been configured with, as detailed in the configuration attributes table. For example, the following command lists the contents of the PKCS#11 keystore provider instance with name suffix SmartCard:
jarsigner -keystore NONE -storetype PKCS11 \ -providerName SunPKCS11-SmartCard \ -list-J
javaoptionPasses through the specified javaoption string directly to the Java interpreter. (jarsigner is actually a "wrapper" around the interpreter.) This option should not contain any spaces. It is useful for adjusting the execution environment or memory usage. For a list of possible interpreter options, type java -h
orjava -X
at the command line.-tsa
urlIf "-tsa http://example.tsa.url"
appears on the command line when signing a JAR file then a timestamp is generated for the signature. The URL,http://example.tsa.url
, identifies the location of the Time Stamping Authority (TSA). It overrides any URL found via the-tsacert
option. The-tsa
option does not require the TSA's public key certificate to be present in the keystore.To generate the timestamp,
jarsigner
communicates with the TSA using the Time-Stamp Protocol (TSP) defined in RFC 3161. If successful, the timestamp token returned by the TSA is stored along with the signature in the signature block file.-tsacert
aliasIf "-tsacert alias"
appears on the command line when signing a JAR file then a timestamp is generated for the signature. Thealias
identifies the TSA's public key certificate in the keystore that is currently in effect. The entry's certificate is examined for a Subject Information Access extension that contains a URL identifying the location of the TSA.The TSA's public key certificate must be present in the keystore when using
-tsacert
.-altsigner
classSpecifies that an alternative signing mechanism be used. The fully-qualified class name identifies a class file that extends the com.sun.jarsigner.ContentSigner abstract class
. The path to this class file is defined by the-altsignerpath
option. If the-altsigner
option is used,jarsigner
uses the signing mechanism provided by the specified class. Otherwise,jarsigner
uses its default signing mechanism.For example, to use the signing mechanism provided by a class named
com.sun.sun.jarsigner.AuthSigner
, use thejarsigner
option"-altsigner com.sun.jarsigner.AuthSigner"
-altsignerpath
classpathlistSpecifies the path to the class file (the class file name is specified with the -altsigner
option described above) and any JAR files it depends on. If the class file is in a JAR file, then this specifies the path to that JAR file, as shown in the example below.An absolute path or a path relative to the current directory may be specified. If
classpathlist
contains multiple paths or JAR files, they should be separated with a colon (:
) on Solaris and a semi-colon (;
) on Windows. This option is not necessary if the class is already in the search path.Example of specifying the path to a jar file that contains the class file:
-altsignerpath /home/user/lib/authsigner.jar
Note that the JAR file name is included.
Example of specifying the path to the jar file that contains the class file:
-altsignerpath /home/user/classes/com/sun/tools/jarsigner/
Note that the JAR file name is omitted.
Signing a JAR File
Suppose you have a JAR file named "bundle.jar" and you'd like to sign it using the private key of the user whose keystore alias is "jane" in the keystore named "mystore" in the "working" directory. Suppose the keystore password is "myspass" and the password for jane's private key is "j638klm". You can use the following to sign the JAR file and name the signed JAR file "sbundle.jar":
jarsigner -keystore /working/mystore -storepass myspass -keypass j638klm -signedjar sbundle.jar bundle.jar janeNote that there is no
-sigfile
specified in the command above, so the generated .SF and .DSA files to be placed in the signed JAR file will have default names based on the alias name. That is, they will be namedJANE.SF
andJANE.DSA
.If you want to be prompted for the store password and the private key password, you could shorten the above command to
jarsigner -keystore /working/mystore -signedjar sbundle.jar bundle.jar janeIf the keystore to be used is the default keystore (the one named ".keystore" in your home directory), you don't need to specify a keystore, as in:
jarsigner -signedjar sbundle.jar bundle.jar janeFinally, if you want the signed JAR file to simply overwrite the input JAR file (
bundle.jar
), you don't need to specify a-signedjar
option:jarsigner bundle.jar janeVerifying a Signed JAR File
To verify a signed JAR file, that is, to verify that the signature is valid and the JAR file has not been tampered with, use a command such as the following:
jarsigner -verify sbundle.jarIf the verification is successful,
jar verified.is displayed. Otherwise, an error message appears.
You can get more information if you use the
-verbose
option. A sample use of jarsigner with the-verbose
option is shown below, along with sample output:jarsigner -verify -verbose sbundle.jar 198 Fri Sep 26 16:14:06 PDT 1997 META-INF/MANIFEST.MF 199 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.SF 1013 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.DSA smk 2752 Fri Sep 26 16:12:30 PDT 1997 AclEx.class smk 849 Fri Sep 26 16:12:46 PDT 1997 test.class s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore jar verified.Verification with Certificate Information
If you specify the
-certs
option when verifying, along with the-verify
and-verbose
options, the output includes certificate information for each signer of the JAR file, including the certificate type, the signer distinguished name information (iff it's an X.509 certificate), and, in parentheses, the keystore alias for the signer if the public key certificate in the JAR file matches that in a keystore entry. For example,jarsigner -keystore /working/mystore -verify -verbose -certs myTest.jar 198 Fri Sep 26 16:14:06 PDT 1997 META-INF/MANIFEST.MF 199 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.SF 1013 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.DSA 208 Fri Sep 26 16:23:30 PDT 1997 META-INF/JAVATEST.SF 1087 Fri Sep 26 16:23:30 PDT 1997 META-INF/JAVATEST.DSA smk 2752 Fri Sep 26 16:12:30 PDT 1997 Tst.class X.509, CN=Test Group, OU=Java Software, O=Sun Microsystems, L=CUP, S=CA, C=US (javatest) X.509, CN=Jane Smith, OU=Java Software, O=Sun, L=cup, S=ca, C=us (jane) s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore jar verified.If the certificate for a signer is not an X.509 certificate, there is no distinguished name information. In that case, just the certificate type and the alias are shown. For example, if the certificate is a PGP certificate, and the alias is "bob", you'd get
PGP, (bob)Verification of a JAR File that Includes Identity Database Signers
If a JAR file has been signed using the JDK 1.1 javakey tool, and thus the signer is an alias in an identity database, the verification output includes an "i" symbol. If the JAR file has been signed by both an alias in an identity database and an alias in a keystore, both "k" and "i" appear.
When the
-certs
option is used, any identity database aliases are shown in square brackets rather than the parentheses used for keystore aliases. For example:jarsigner -keystore /working/mystore -verify -verbose -certs writeFile.jar 198 Fri Sep 26 16:14:06 PDT 1997 META-INF/MANIFEST.MF 199 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.SF 1013 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.DSA 199 Fri Sep 27 12:22:30 PDT 1997 META-INF/DUKE.SF 1013 Fri Sep 27 12:22:30 PDT 1997 META-INF/DUKE.DSA smki 2752 Fri Sep 26 16:12:30 PDT 1997 writeFile.html X.509, CN=Jane Smith, OU=Java Software, O=Sun, L=cup, S=ca, C=us (jane) X.509, CN=Duke, OU=Java Software, O=Sun, L=cup, S=ca, C=us [duke] s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore i = at least one certificate was found in identity scope jar verified.Note that the alias "duke" is in brackets to denote that it is an identity database alias, not a keystore alias.
- jar tool documentation
- keytool tool documentation
- the Security trail of the Java Tutorial for examples of the use of the jarsigner tool
Copyright © 1993, 2011, Oracle and/or its affiliates. All rights reserved. Please send comments using this Feedback page. |
Java Technology |


Home
News
Events
Projects
Team
Home
News
Events
Projects
(current)
Team
Netco
Simplifying the college recruitment process
A platform to help connect committees with students and drive their events to success.
Source code
TunePref
Finding tunes to your groove
A Web app which uses Machine Learning to help you find the best music tailored to your listening preferences.
Source code
Salute
Worry-free messaging (W.I.P.)
A safe, secure messaging app that you can use freely without having any privacy-related fears on your mind.
Source code
N.O.W. Website
The very thing you're looking at!
with
by:
Urmil Shroff
Priyansh Ramnani
Mamta Yadav
Nirmit Agrawal
Source code
© 2019 Network for the Open Web, Mumbai.
Privacy Policy


--- layout: post title: What we can learn from the Wall Street Journal style guide to charts date: 2012-06-04 15:29:48.000000000 +05:30 categories: [] tags: [] status: draft type: post published: false meta: _edit_last: '1' author: login: cvlewis email<EMAIL_ADDRESS>display_name: Carl V. Lewis first_name: Carl V. last_name: Lewis excerpt: !ruby/object:Hpricot::Doc options: {} ---
According to the Wall Street Journal Style Guide, a strong visualization includes four primary components: plotting, review, editing,


AUGPARSE
Section: Augeas (1)Updated: 2010-04-19
Index Return to Main Contents
NAME
augparse - execute an Augeas moduleSYNOPSIS
augparse [OPTIONS] MODULEDESCRIPTION
Execute an Augeas module, most commonly to evaluate the tests it contains.OPTIONS
- -I DIR
- Add DIR to the module loadpath. Can be given multiple times. The directories set here are searched before any directories specified in the AUGEAS_LENS_LIB environment variable, and before the default directory /usr/share/augeas/lenses.
- --nostdinc
- Do not search any of the default directories for modules. When this option is set, only directories specified explicitly with -I or specified in AUGEAS_LENS_LIB will be searched for modules.
- --notypecheck
- Do not perform lens type checks. Only use this option during lens development and make sure you typecheck lenses when you are done developing - you should never use a lens that hasn't been typechecked. This option is sometimes useful when you are working on unit tests for a lens to speed up the time it takes to repeatedly run and fix tests.
- --version
- Print version information and exit.
- -h
- Display this help and exit
EXAMPLES
To run the tests in lenses/tests/test_foo.aug and use modules from the directory lenses, run
- augparse -I lenses lenses/tests/test_foo.aug
TESTS
Tests can appear as top-level forms anywhere in a module. Generally, the tests for a module lenses/foo.aug are kept in a separate file, usually in lenses/tests/test_foo.aug.There are two different kinds of tests that Augeas can run: get and put tests. The syntax for get tests is
- test LENS get STRING = RESULT
which applies the get direction of the lens LENS to STRING and compares it with the given RESULT. RESULT can either be a tree literal, the symbol ? to print the result of applying LENS to STRING, or the symbol * to indicate that the test should produce an exception.
The syntax for put tests is
- test LENS put STRING after COMMANDS = RESULT
which first applies the get direction of the lens LENS to STRING, then applies the given COMMANDS to the resulting tree, and finally transforms the modified tree back to a string using the put direction of LENS. The resulting string is then compared to RESULT, which can be a string, the symbol ? to print the result of applying LENS to STRING, or the symbol * to indicate that the test should produce an exception.
SEE ALSO
Augeas project homepage <http://www.augeas.net/>augtool
Index
This document was created by man2html, using the manual pages.
Time: 05:29:01 GMT, December 24, 2015


Ping Pong
A simple javascript example that affects an array of numbers. Coded by Steve Zaske.


JUST IN: Kano Govt reacts to court ruling sacking four new emirs
by Abubakar Ahmadu MaishanuThe Kano State Government has reacted to Thursday’s court ruling dissolving the four new first-class emirates created by the state government and sacking the emirs appointed to head them.
The state’s information commissioner, Muhammad Garba, said: “despite the ruling, the government still recognizes them as First Class Emirs and will continue dealing with them as such.”
PREMIUM TIMES reported how the Kano high court nullified the creation of four new first-class emirates by the state government.
The four new emirates for which Governor Abdullahi Ganduje named first-class emirs in May are Bichi, Rano, Karaye and Gaya.
Justice Usman Na’Abba ruled on Thursday that the law creating the new emirates did not follow due process.
Protests erupted in some of the affected emirates after the ruling.
In his statement, Mr Garba said the Kano government is still studying the ruling.
Read Mr Garba’s full statement below.
KNSG ACTS ON RULING, STILL RECOGNISES EMIRS
Kano State Government says it is studying the ruling of Kano High Court on the creation of four new Emirates in the state with a view to taking immediate appropriate action.
A statement signed by the state Commissioner of Information, Malam Muhammad Garba, regretted that despite the constitutional power and authority conferred on the State Assembly on such progressive and important issue, the court rules otherwise.
Accordingly therefore, the statement adds, the Government will not fold its arms and concedes such constitutional power in the interest of the wellbeing of the people and general development of the state.
Malam Garba says despite the ruling, the government still recognizes them as First Class Emirs and will continue dealing with them as such.
It says the state government therefore advised people to be calm, law abiding and await further action.
Signed:
MALAM MUHAMMAD GARBA
Commissioner of Information


Name
HPL_recv Receive a message.
Synopsis
#include "hpl.h"
int
HPL_recv(
double *
RBUF
,
int
RCOUNT
,
int
SRC
,
int
RTAG
,
MPI_Comm
COMM
);
Description
HPL_recv
is a simple wrapper around MPI_Recv. Its main purpose is
to allow for some experimentation / tuning of this simple routine.
Successful completion is indicated by the returned error code
HPL_SUCCESS. In the case of messages of length less than or equal to
zero, this function returns immediately.
Arguments
RBUF (local output) double *
On entry, RBUF specifies the starting address of buffer to be
received.
RCOUNT (local input) int
On entry, RCOUNT specifies the number of double precision
entries in RBUF. RCOUNT must be at least zero.
SRC (local input) int
On entry, SRC specifies the rank of the sending process in
the communication space defined by COMM.
RTAG (local input) int
On entry, STAG specifies the message tag to be used for this
communication operation.
COMM (local input) MPI_Comm
The MPI communicator identifying the communication space.
See Also
HPL_send,
HPL_sdrv.


When you work with us, you are part of a team of committed collaborators. All aspects of our software development process are intergrated, interactive and agile.
Our approach unifies design,development and product management to create exceptional products.
Then we help translate the into effective and elegant solutions.
Before we sign a contract or white a line of code our team will spend the necessary time needed to understand your product visions.
The outcome of this scoping session is proposed or high level statement of work.
Based on your requirements, we can provide a complete offering or just the pieces you need.
Our design practice offers a full range of services including brand strategy,
and visual design and user experience testing. Throughout your project,
designers create and implement visual design and workflows,
solicit user feedback and work with you to make sure what gets built is what is needed.
All engineers are fluent in the latest enterprise, mobile and web development technologies.
collaborate with your team to write, and improve code on a daily basis,
proven practices such as test-driven development and pair programming.
Planning and development is iterative. Because we are constantly coding and testing,
the products we build are always ready to go live.
This iterative process allows for changes as business requirements evolve.


High school student and freelance developer. Specialize in web development with a passion for the intersection of AI and Accesibility.
Worked on a passion project seeking to promote accessibility in tech, particularly for the visually impaired. Created a chrome extension that uses artificial intelligence (computer vision) to go from image to text, inserting an auto generated alt tag into a site’s html to ensure compatibility with screen readers. Coded in Python and Javascript. Won Special Award.
Work as a web developer for the venture capitalist fund that invests in companies with dominant female founders.
Coded a website in which victims of sexual assault are able to anonymously share their story to a bot which uses NLP to then return what laws were violated in the incident. Seeks to empower victims by informing them of their rights. Frameworks: AngularJS and DialogFlow. Won Social Impact Special Award.
Work as the UX designer and front-end web developer for the e-commerce portion of the website that allows users with disabilities to rate and review hotels, restaurants, and book accessible accommodations. Coding in HTML, CSS, Javascript
Selected to participate in the Microsoft High School Bootcamp in which my team and I created a website that displays the date, time and place for club meetings, sports events, standardized tests, tutorials and more. Coded in Javascript. Won 2nd place.
Attended the three-week long artificial intelligence camp AI4ALL. Created a program that utilized computer vision and sattelite images to track poverty in Uganda. Coded in Python.
Built a service for crowdsourced location reporting in the event of a school shooting. Students and teachers report their location, proximity to threat, and number of occupants in the room using our app. The data is then outputted and livestreamed onto a website accessible to first responders in the form of colored dots on a map. Coded in Java and Javascript. Won Best Application.
Built a startup business model and mockups for a nonprofit that connects high school programmers with businesses that require pro bono technology services. Pitched to a panel of investors and won 2nd place.
Address and advocate teen perspective in the community and promote being a civic contributor of today. Plan events ranging from mental health conferences to triathlons
Serve as Co-President and founder of a student chapter of the human rights group Amnesty International at Skyline. Plan fundraising events, aim to raise awareness about human rights and concerning violations in the community, and talk to politicians regarding reform if necessary.
Lead a team in building components of our robot and train new members to compete in the FIRST Robotics Competition. Also serve as Fundraising Manager for the club, contacting sponsors and completing grants to financially support the club. Coordinate and attend STEM outreach events in our community to represent our club and promote STEM to younger students.
AWARE is a nonprofit seeking to remove stigma against special needs students by educating general education students about special needs and symptoms as well as offering a platform in which general and special needs students can interact on. I was reached out to by them to be their mobile app developer and am currently creating a mobile application in Java to complement their services.
Web developer for my highschool's photgraphy club. Currently designing and coding the club's website and online portfolio in Javascript.
GPA: 3.97
GPA: 4.0
Apart from being a web developer, I have a passion for fitness and am an avid kickboxer. I greatly enjoy the technique and adrenaline that comes with the sport.


are you in need of personal training.mp3
dont just turn around.mp3
i am moving the payload.mp3
i am still in the fight.mp3
i am the strongest woman.mp3
i claim this objective.mp3
i know you can do better.mp3
i was catch that moose.mp3
is that all youve got.mp3
just like in training.mp3
let us stop the payload.mp3
lets keep this moving.mp3
peace through superior.mp3
practice makes perfect.mp3
protect the objective.mp3
that doesnt look so heavy.mp3
the payload is moving.mp3
they are running out of time.mp3
they must have a teleporter.mp3
they must not get past.mp3
theyre moving the payload.mp3
we must work together.mp3
we will return stronger.mp3
were out of time attack.mp3
were taking the objective.mp3


Mohamed Salah sends title warning to Liverpool teammates ahead of Man City clash
Liverpool can go nine points clear by beating Manchester City this weekend but Mohamed Salah is not getting carried away
by Liam Prenderville, http://www.facebook.com/mirrorfootballMohamed Salah insists it is too early for Liverpool to be thinking about winning the Premier League.
Jurgen Klopp's men can go nine points clear of their rivals at the top of the table with victory over Manchester City at Anfield on Sunday.
Liverpool have won 10 of their last 11 matches in the Premier League and have not tasted defeat since their loss to City in January.
But Salah is not getting carried away and warns Liverpool can still be clawed back, even if they pick up victory over the champions this weekend.
"They were talking about that in December last year when we were six or seven points ahead," Salah told Sky Sports.
"It is not over. It is three games.
"If you go through a period of time and lose three games, you are in trouble.
"Even if we win, it is a long way. We are in November, it is too early to talk about the Premier League."
Liverpool boss Klopp and counterpart Pep Guardiola have ramped up the mind games ahead of the clash at Anfield.
Klopp responded to Guardiola's comments on Sadio Mane with a jibe at City for their 'tactical fouls'.
But the Liverpool boss admitted his regret this week, insisting: "If I could do it again, I wouldn’t say it again
"It’s just not necessary, these kind of things. I know there is a lot of respect there.
"I feel that’s how it should be. I feel all the rest will be decided on the pitch."


lib/models/project.js:28
Project
The Project model is tied to your package.json. It is instantiated by giving closestSync the path to your project.
Static Method Summary
| Static Public Methods | |
|---|---|
| public static |
getProjectRoot( ): String
Returns the project root based on the first package.json that is found |
| Static Private Methods | |
|---|---|
| private static |
closestSync(pathName, _ui): Project
Returns a new project based on the first |
| private static |
projectOrnullProject(_ui): Project
Returns a new project based on the first package.json that is found in |
Constructor Summary
| Public Constructors | |
|---|---|
| public |
Project(root, pkg, ui, cli)
The Project model is tied to your package.json. It is instantiated by giving closestSync the path to your project. |
Property Summary
| Public Properties | |
|---|---|
| public |
targets: Unknown
Returns the targets of this project, or the default targets if not present. |
| Private Properties | |
|---|---|
| private |
_watchmanInfo: Unknown
Set when the |
Method Summary
| Public Methods | |
|---|---|
| public |
Loads the configuration for this project and its addons. |
| public |
findAddonByName(name): Addon
Find an addon by its name |
| public |
generateTestFile(moduleName, tests): String
Generate test file contents. |
| public |
Returns whether or not this is an Ember CLI addon. |
| public |
Calls |
| Private Methods | |
|---|---|
| private |
Returns a list of addon paths where blueprints will be looked up. |
| private |
addonCommands( ): Object
Returns what commands are made available by addons by inspecting |
| private |
Returns a list of paths (including addon paths) where blueprints will be looked up. |
| private |
bowerDependencies(bower): Object
Returns the bower dependencies for this project. |
| private |
configPath( ): String
Returns the path to the configuration. |
| private |
configWithoutCache(env): Object
|
| private |
dependencies([pkg=this.pkg], [excludeDevDeps=false]): Object
Returns the dependencies from a package.json |
| private |
Discovers all addons for this project and stores their names and package.json contents in this.addonPackages as key-value pairs. |
| private |
eachAddonCommand(callback)
Execute a given callback for every addon command. Example: |
| private |
getAddonsConfig(env, appConfig): Object
Returns the addons configuration. |
| private |
Returns whether or not the given file name is present in this project. |
| private |
Loads and initializes all addons for this project. |
| private |
Returns whether or not this is an Ember CLI project. This checks whether ember-cli is listed in devDependencies. |
| private |
Path to the blueprints for this project. |
| private |
Returns the name from package.json. |
| private |
reloadAddons( )
Re-initializes addons. |
| private |
Reloads package.json of the project. Clears and reloads the packageInfo and per-bundle addon cache, too. |
| private |
resolveSync(file): String
Resolves the absolute path to a file synchronously |
| private |
Sets the name of the bower directory for this project |
| private |
Provides the list of paths to consult for addons that may be provided internally to this project. Used for middleware addons with built-in support. |
Static Public Methods
lib/models/project.js:729
public static getProjectRoot( ): String
Returns the project root based on the first package.json that is found
Return:
The project root directory
Static Private Methods
lib/models/project.js:654
private static closestSync(pathName, _ui): Project
Returns a new project based on the first package.json
that is found
in pathName
.
If the above package.json
specifies ember-addon.projectRoot
, we load
the project based on the relative path between this directory and the
specified projectRoot
.
Parameters:
| Name | Type | Attribute | Description |
|---|---|---|---|
| pathName | String |
|
Path to your project |
| _ui | UI |
|
The UI instance to provide to the created Project. |
Return:
Project instance
lib/models/project.js:705
private static projectOrnullProject(_ui): Project
Returns a new project based on the first package.json that is found
in pathName
, or the nullProject.
The nullProject signifies no-project, but abides by the null object pattern
Parameters:
| Name | Type | Attribute | Description |
|---|---|---|---|
| _ui | UI |
|
The UI instance to provide to the created Project. |
Return:
Project instance
Public Constructors
lib/models/project.js:28
public Project(root, pkg, ui, cli)
Public Properties
lib/models/project.js:270
public targets: Unknown
Returns the targets of this project, or the default targets if not present.
Private Properties
lib/models/project.js:54
private _watchmanInfo: Unknown
Set when the Watcher.detectWatchman
helper method finishes running,
so that other areas of the system can be aware that watchman is being used.
For example, this information is used in the broccoli build pipeline to know if we can watch additional directories (like bower_components) "cheaply".
Contains enabled
and version
.
Public Methods
lib/models/project.js:232
public config(env): Object
Loads the configuration for this project and its addons.
Parameters:
| Name | Type | Attribute | Description |
|---|---|---|---|
| env | String |
|
Environment name |
Return:
Merged configuration object
lib/models/project.js:616
public findAddonByName(name): Addon
Find an addon by its name
Parameters:
| Name | Type | Attribute | Description |
|---|---|---|---|
| name | String |
|
Addon name as specified in package.json |
Return:
Addon instance
lib/models/project.js:630
public generateTestFile(moduleName, tests): String
Generate test file contents.
This method is supposed to be overwritten by test framework addons
like ember-qunit
and ember-mocha
.
Parameters:
| Name | Type | Attribute | Description |
|---|---|---|---|
| moduleName | String |
|
Name of the test module (e.g. |
| tests | Object[] |
|
Array of tests with |
Return:
The test file content
lib/models/project.js:205
public isEmberCLIAddon( ): Boolean
Returns whether or not this is an Ember CLI addon.
Return:
Whether or not this is an Ember CLI Addon.
lib/models/project.js:346
public require(file): Object
Calls require
on a given module from the context of the project. For
instance, an addon may want to require a class from the root project's
version of ember-cli.
Parameters:
| Name | Type | Attribute | Description |
|---|---|---|---|
| file | String |
|
File path or module name |
Return:
Imported module
Private Methods
lib/models/project.js:558
private addonBlueprintLookupPaths( ): Array
Returns a list of addon paths where blueprints will be looked up.
Return:
List of paths
lib/models/project.js:465
private addonCommands( ): Object
Returns what commands are made available by addons by inspecting
includedCommands
for every addon.
Return:
Addon names and command maps as key-value pairs
lib/models/project.js:540
private blueprintLookupPaths( ): Array
Returns a list of paths (including addon paths) where blueprints will be looked up.
Return:
List of paths
lib/models/project.js:381
private bowerDependencies(bower): Object
Returns the bower dependencies for this project.
Parameters:
| Name | Type | Attribute | Description |
|---|---|---|---|
| bower | String |
|
Path to bower.json |
Return:
Bower dependencies
lib/models/project.js:215
private configPath( ): String
Returns the path to the configuration.
Return:
Configuration path
lib/models/project.js:251
private configWithoutCache(env): Object
Parameters:
| Name | Type | Attribute | Description |
|---|---|---|---|
| env | String |
|
Environment name |
Return:
Merged configuration object
lib/models/project.js:361
private dependencies([pkg=this.pkg], [excludeDevDeps=false]): Object
Returns the dependencies from a package.json
Parameters:
| Name | Type | Attribute | Description |
|---|---|---|---|
| pkg | Object |
|
Package object |
| excludeDevDeps | Boolean |
|
Whether or not development dependencies should be excluded |
Return:
Dependencies
lib/models/project.js:423
private discoverAddons( )
Discovers all addons for this project and stores their names and package.json contents in this.addonPackages as key-value pairs.
Any packageInfos that we find that are marked as not valid are excluded.
lib/models/project.js:506
private eachAddonCommand(callback)
Execute a given callback for every addon command. Example:
project.eachAddonCommand(function(addonName, commands) {
console.log('Addon ' + addonName + ' exported the following commands:' + commands.keys().join(', '));
});
Parameters:
| Name | Type | Attribute | Description |
|---|---|---|---|
| callback | Function |
|
[description] |
lib/models/project.js:297
private getAddonsConfig(env, appConfig): Object
Returns the addons configuration.
Parameters:
| Name | Type | Attribute | Description |
|---|---|---|---|
| env | String |
|
Environment name |
| appConfig | Object |
|
Application configuration |
Return:
Merged configuration of all addons
lib/models/project.js:320
private has(file): Boolean
Returns whether or not the given file name is present in this project.
Parameters:
| Name | Type | Attribute | Description |
|---|---|---|---|
| file | String |
|
File name |
Return:
Whether or not the file is present
lib/models/project.js:445
private initializeAddons( )
Loads and initializes all addons for this project.
lib/models/project.js:193
private isEmberCLIProject( ): Boolean
Returns whether or not this is an Ember CLI project. This checks whether ember-cli is listed in devDependencies.
Return:
Whether this is an Ember CLI project
lib/models/project.js:529
private localBlueprintLookupPath( ): String
Path to the blueprints for this project.
Return:
Path to blueprints
lib/models/project.js:180
private name( ): String
Returns the name from package.json.
Return:
Package name
lib/models/project.js:604
private reloadAddons( )
Re-initializes addons.
lib/models/project.js:581
private reloadPkg( ): Object
Reloads package.json of the project. Clears and reloads the packageInfo and per-bundle addon cache, too.
Return:
Package content
lib/models/project.js:332
private resolveSync(file): String
Resolves the absolute path to a file synchronously
Parameters:
| Name | Type | Attribute | Description |
|---|---|---|---|
| file | String |
|
File to resolve |
Return:
Absolute path to file
lib/models/project.js:107
private setupBowerDirectory( )
Sets the name of the bower directory for this project
lib/models/project.js:397
private supportedInternalAddonPaths( )
Provides the list of paths to consult for addons that may be provided internally to this project. Used for middleware addons with built-in support.


Marcus
Madden
My love for technology and problem solving has been forever.
As a full stack developer, I enjoy creating with my untamed mind
of creativity and my love for problem solving. Programming is my way
of life.
Skills
Education
Weekly Reflections
Resume


Play Roadmap has been published. The major feature will be the support of scala 2.10 version.
By using Play 2.1 we can start profiting with String interpolation
STRING INTERPOLATION: QUICK EXAMPLE ?
val n = 20
"Bob is "+n+" years old"
can be replaced by :
s"Bob is $n years old"
The benefit of using String interpolation are :
PLAY 2.1
On Play framework an sample action can be :
def index = Action {
val version = 2.10
Ok("hello scala "+ version)
}
And by String interpolation we can rewrite it as :
def index = Action {
val version = 2.10
Ok(s"hello scala $version")
}
BETTER !
Let’s do better and remove parenthesizes and ‘s’ characters
First create an implicit class (scala 2.10 features) to wrap a call to Ok object and define an ok object :
implicit class HTTPInterpolation(s: StringContext) {
object ok {
def apply(exprs: Any*) = {
Ok(s.s(exprs: _*))
}
}
}
Now we can use it as
def index = Action {
val version = 2.10
ok"hello scala $version"
}
Short and concise !


We welcome you to experience with us the good and comfortable facilities under our accommodation
We offer one of the best accommodation facilities which are also affordable to anyone wishing to experience them.
Here is a view of our accommodation facilities.
We also offer the best food services in part of our accommodation.We hope that you will enjoy our accommodation facilities.
To know more about our accommodation facilities, contact us via the addresses below
Reach outHere is a link back to our home page
home


We'll be updating the site closer to the day with a lot more details! For now, please let us know if there are any additional details you need that affect making travel plans, etc.
We know that many of you will be traveling to our wedding, which is not cheap! We honestly are just happy to have you celebrate with us and don't expect you to get us a gift (seriously). We know that a few of you will insist on getting us something anyway, so we will update this site with a registry as we get closer to the date.
Kids are welcome!
Dress code is "dressy casual": basically, anything more formal than jeans and a t-shirt is probably fine; no need to wear a full-on suit or floor-length dress, although you are welcome to if that's what you're most comfortable in! The wedding and reception will take place outdoors on grass, so for your own comfort please leave your stiletto heels at home. Also, it is possible it may get chilly at night, so it is probably a good idea to bring a light jacket or coat.


Your First Cup: An Introduction to the Java EE Platform
3.1 Architecture of the Example Applications
The example applications consist of four main components: DukesAgeResource
, a JAX-RS RESTful web service; DukesBirthdayBean
, an enterprise bean; FirstcupUser
, a Java Persistence API entity; and firstcup-war
, a web application created with JavaServer Faces Facelets technology.
Figure 3-1 Architecture of the First Cup Example Applications
Description of "Figure 3-1 Architecture of the First Cup Example Applications"
DukesAgeResource
is a JAX-RS resource that calculates the age of Duke, the Java mascot. Duke was born May 23, 1995, when the first demo of Java technology was publicly released.
DukesBirthdayBean
is a local, no-interface view stateless session bean that calculates the difference between the user's age and Duke's age and stores the user-submitted data in a Java Persistence API entity.
FirstcupUser
is a Java Persistence API entity that represents a particular user's birthday. It is stored in a Java DB database table and managed by DukesBirthdayBean
's business methods.
The firstcup-war
web application is a JavaServer Faces Facelets application that accesses DukesAgeResource
to display Duke's age, reads in a date provided by the user, accesses DukesBirthdayBean
to calculate who is older, and then displays the difference in years between the user and Duke and the average age difference of all users.
The firstcup-war
web application consists of the following:
-
greeting.xhtml
: A Facelets-enabled XHTML page, which is a page that uses the JavaServer Faces Facelets tag libraries. Users can type their birth date in a field and submit it for comparison against Duke's birth date. -
response.xhtml
: A Facelets-enabled XHTML page that tells the user whether he or she is older or younger than Duke, based on the date the user entered in thegreeting.xhtml
page, and displays the average age difference of all users. -
DukesBDay.java
: A CDI managed bean that defines properties to hold the user's birth date, uses the JAX-RS Client API to get Duke's current age from theDukesAgeResource
web service, and calculates the age difference between the user and Duke from the enterprise bean. -
web.xml
: The web application's deployment descriptor, which is used to configure certain aspects of a web application when it is installed. In this case, it is used to provide a mapping to the application'sFacesServlet
instance, which accepts incoming requests, passes them to the life cycle for processing, and initializes resources. It also specifiesgreeting.xhtml
as the welcome file for the application. -
WebMessages.properties
andWebMessages_es.properties
: Java programming language properties files that contain the localized strings used ingreeting.xhtml
andresponse.xhtml
. By default, the English language strings inWebMessages.properties
are used, but Spanish language strings are also provided inWebMessages_es.properties
. -
DukesBirthdayBean.java
: as described above, the enterprise bean packaged within thefirstcup-war
application.DukesBirthdayBean
calculates the difference between the user's birthday and Duke's birthday.
3.1.1 Tiers in the Example Applications
The example applications have a web tier component (the firstcup-war
web client), three business tier components (the DukesAgeResource
web service, the FirstcupUser
entity, and the DukesBirthdayBean
enterprise bean), and an enterprise information system (EIS) tier (the data in the Java DB database table). The user's web browser is the client tier component, as it accesses the rest of the application through the web tier.
3.1.2 Java EE Technologies Used in the Example Applications
The DukesAgeResource
web service is a JAX-RS resource. The DukesBirthdayBean
enterprise bean is a stateless session bean. The FirstcupUser
entity is a Java Persistence API entity. The DukesBDay
CDI managed bean uses the JAX-RS client API to access the DukesAgeResource
web service. The firstcup-war
web client is a JavaServer Faces application that runs in the web container of the Java EE server.


this repo holds all my work for the web design 3 class in spring of 2021 at santa monica collegeﾍ(=^･ω･^= )ﾉ


Genie ... I have confirmed my pool is working with fee, but it eave the fee in the pool address, there are two options to "fix" this:
1) try to calculate the inverse of the amount perfactly down to the sat, and speiify the reward address in the sendmany to send the fee to the reward address
2) make a script that rus on blocknotify that grabs all tx sent from coinbase to the pool address and sends that to the reward address.


Librarybase was a project run from 2015 to 2018 to build a database of bibliographic metadata. For the latest work in this endeavor, see Wikicite.


Builds per day
Average build duration
Latest Builds
{{::build.number}}
{{::build.startTime | fromNow}}
Total Builds
{{buildmView.totalBuildsYesterday}}
Today
{{buildmView.totalBuildsLastWeek}}
Last
7 Days
{{buildmView.totalBuildsLastMonth}}
Last
14 Days


Name:
{{ @applicant['fname'] }} {{ @applicant['lname'] }}, {{ @applicant['pronouns'] }}
Date of Birth:
{{ @applicant['birthdate'] }}
Address:
{{ @applicant['address'] }} {{ @applicant['address2'] }}
{{ @applicant['city'] }}, {{ @applicant['state'] }} {{ @applicant['zip'] }}
Affiliate: {{ @applicant['Affiliate'] }}
NAMI Member:
Is a NAMI member
Is not a NAMI member
Primary Phone:
{{ @applicant['primary_phone'] }}, {{ @applicant['primary_time'] }}
Alternate Phone:
{{ @applicant['alternate_phone'] }}, {{ @applicant['alternate_time'] }}
Best Way to Contact:
{{ @applicant['preference'] }}
Emergency Contact:
{{ @applicant['emergency_name'] }}, {{ @applicant['emergency_phone'] }}


Home
Brands
Contact Us
Register Here
Log In
Sign Up
NEW ARRIVALS!!
NIKE Brands Shoes [MALE | FEMALE]
Stand out this summer in florals, stripes and colors that pop with our favorite new looks.
Summer Looks For Men!
Rebok Bags
Grab Branded Perfumes. Click The Picture Below
FOOTBALL SHOES!
JORDAN BRANDS
Your browser does not support HTML5 video.
Shop Now


--- layout: post excerpt_separator: title: "Baby!" permalink: /baby/post.html ---
Em is growing a human. If this is a surprise to you, welcome to the club.
There will be another human around soon, so I'll have someone else to boss around. I guess that will be all right.
The two of us traded positions on opposite sides of whether to have a kid a couple of times. Now we are both excited to see the world through our future child's eyes.
For Mike, he had a bit of an epiphany when taking his grandma to a doctor's appointment, repeating things to her in his loud grandma voice to make sure she knew what was going on and sitting in waiting rooms with her, and he thought - this is on its face a really annoying thing to do, but somehow, I am not annoyed because I get to be here with my grandma, and I know how important that is to her. So taking care of friends and family seemed exactly like what he should be doing in this next chapter.
We are due April 5. Here's a sonogram from a while back, conveniently annotated by the ultrasound tech.


{{form.controls['$key'].value?"Edit Registration": "Register"}}
clear
Event Name*
This field is mandatory
Organizing Club*
{{club}}
Team Name*
This field is mandatory
Leader PecFestId*
This field is mandatory
Member PecFestIds (INCLUDE LEADER PECFEST ID ALSO)*
This field is mandatory
Submit
Clear


Mail ¶ ↑
Introduction¶ ↑
Mail is an internet library for Ruby that is designed to handle emails generation, parsing and sending in a simple, rubyesque manner.
The purpose of this library is to provide a single point of access to handle all email functions, including sending and receiving emails. All network type actions are done through proxy methods to Net::SMTP, Net::POP3 etc.
Built from my experience with TMail, it is designed to be a pure ruby implementation that makes generating, sending and parsing emails a no brainer.
It is also designed form the ground up to work with the more modern versions of Ruby. This is because Ruby > 1.9 handles text encodings much more wonderfully than Ruby 1.8.x and so these features have been taken full advantage of in this library allowing Mail to handle a lot more messages more cleanly than TMail. Mail does run on Ruby 1.8.x… it’s just not as fun to code.
Finally, Mail has been designed with a very simple object oriented system that really opens up the email messages you are parsing, if you know what you are doing, you can fiddle with every last bit of your email directly.
Donations¶ ↑
Mail has been downloaded millions of times, by people around the world, in fact, it represents more than 1% of all gems downloaded.
It is (like all open source software) a labour of love and something I am doing with my own free time. If you would like to say thanks, please feel free to make a donation and feel free to send me a nice email :)
 alt=‘Click here to lend your support to: mail and make a donation at www.pledgie.com !’ src=‘www.pledgie.com/campaigns/8790.png?skin_name=chrome’ border=‘0’ />
Compatibility¶ ↑
Every Mail commit is tested by Travis on the following platforms
-
ruby-1.8.7-p374 [ i686 ]
-
ruby-1.9.2-p320 [ x86_64 ]
-
ruby-1.9.3-p327 [ x86_64 ]
-
ruby-2.0.0-p451 [ x86_64 ]
-
ruby-2.1.2 [ x86_64 ]
-
ruby-head [ x86_64 ]
-
jruby [ x86_64 ]
-
jruby-head [ x86_64 ]
-
rbx-2 [ x86_64 ]
Testing a specific mime type (needed for 1.8.7 for example) can be done manually with:
BUNDLE_GEMFILE=gemfiles/mime_types_1.16.gemfile (bundle check || bundle) && rake
Discussion¶ ↑
If you want to discuss mail with like minded individuals, please subscribe to the Google Group.
Current Capabilities of Mail¶ ↑
-
RFC2822 Support, Reading and Writing
-
RFC2045-2049 Support for multipart emails
-
Support for creating multipart alternate emails
-
Support for reading multipart/report emails & getting details from such
-
Support for multibyte emails - needs quite a lot of work and testing
-
Wrappers for File, Net/POP3, Net/SMTP
-
Auto encoding of non US-ASCII header fields
-
Auto encoding of non US-ASCII bodies
Mail is RFC2822 compliant now, that is, it can parse and generate valid US-ASCII emails. There are a few obsoleted syntax emails that it will have problems with, but it also is quite robust, meaning, if it finds something it doesn't understand it will not crash, instead, it will skip the problem and keep parsing. In the case of a header it doesn't understand, it will initialise the header as an optional unstructured field and continue parsing.
This means Mail won’t (ever) crunch your data (I think).
You can also create MIME emails. There are helper methods for making a multipart/alternate email for text/plain and text/html (the most common pair) and you can manually create any other type of MIME email.
Roadmap¶ ↑
Next TODO:
-
Improve MIME support for character sets in headers, currently works, mostly, needs refinement.
Testing Policy¶ ↑
Basically… we do BDD on Mail. No method gets written in Mail without a corresponding or covering spec. We expect as a minimum 100% coverage measured by RCov. While this is not perfect by any measure, it is pretty good. Additionally, all functional tests from TMail are to be passing before the gem gets released.
It also means you can be sure Mail will behave correctly.
API Policy¶ ↑
No API removals within a single point release. All removals to be deprecated with warnings for at least one MINOR point release before removal.
Also, all private or protected methods to be declared as such - though this is still I/P.
Installation¶ ↑
Installation is fairly simple, I host mail on rubygems, so you can just do:
# gem install mail
Encodings¶ ↑
If you didn’t know, handling encodings in Emails is not as straight forward as you would hope.
I have tried to simplify it some:
-
All objects that can render into an email, have an
#encoded
method. Encoded will return the object as a complete string ready to send in the mail system, that is, it will include the header field and value and CRLF at the end and wrapped as needed. -
All objects that can render into an email, have a
#decoded
method. Decoded will return the object’s “value” only as a string. This means it will not include the header fields (like ‘To:’ or ‘Subject:’). -
By default, calling
#to_s
on a container object will call its encoded method, while#to_s
on a field object will call its decoded method. So calling#to_s
on a Mail object will return the mail, all encoded ready to send, while calling#to_s
on the From field or the body will return the decoded value of the object. The header object of Mail is considered a container. If you are in doubt, call#encoded
, or#decoded
explicitly, this is safer if you are not sure. -
Structured fields that have parameter values that can be encoded (e.g. Content-Type) will provide decoded parameter values when you call the parameter names as methods against the object.
-
Structured fields that have parameter values that can be encoded (e.g. Content-Type) will provide encoded parameter values when you call the parameter names through the
object.parameters['
method call.']
Contributing¶ ↑
Please do! Contributing is easy in Mail. Please read the CONTRIBUTING.md document for more info
Usage¶ ↑
All major mail functions should be able to happen from the Mail module. So, you should be able to just
require 'mail'
to get started.
Making an email¶ ↑
mail = Mail.new do from<EMAIL_ADDRESS>to<EMAIL_ADDRESS>subject 'This is a test email' body File.read('body.txt') end mail.to_s #=> "From<EMAIL_ADDRESS><EMAIL_ADDRESS>Making an email, have it your way:¶ ↑
mail = Mail.new do body File.read('body.txt') end mail['from'] =<EMAIL_ADDRESS>mail[:to] =<EMAIL_ADDRESS>mail.subject = 'This is a test email' mail.header['X-Custom-Header'] = 'custom value' mail.to_s #=> "From<EMAIL_ADDRESS><EMAIL_ADDRESS>Don’t Worry About Message IDs:¶ ↑
mail = Mail.new do to<EMAIL_ADDRESS>body 'Some simple body' end mail.to_s =~ /Message\-ID<EMAIL_ADDRESS>#=> 27
Mail will automatically add a Message-ID field if it is missing and give it a unique, random Message-ID along the lines of:
<EMAIL_ADDRESS>Or do worry about Message-IDs:¶ ↑
mail = Mail.new do to<EMAIL_ADDRESS>message_id<EMAIL_ADDRESS>body 'Some simple body' end mail.to_s =~ /Message\-ID<EMAIL_ADDRESS>#=> 27
Mail will take the message_id you assign to it trusting that you know what you are doing.
Sending an email:¶ ↑
Mail defaults to sending via SMTP to local host port 25. If you have a sendmail or postfix daemon running on on this port, sending email is as easy as:
Mail.deliver do from<EMAIL_ADDRESS>to<EMAIL_ADDRESS>subject 'Here is the image you wanted' body File.read('body.txt') add_file '/full/path/to/somefile.png' end
or
mail = Mail.new do from<EMAIL_ADDRESS>to<EMAIL_ADDRESS>subject 'Here is the image you wanted' body File.read('body.txt') add_file :filename => 'somefile.png', :content => File.read('/somefile.png') end mail.deliver!
Sending via sendmail can be done like so:
mail = Mail.new do from<EMAIL_ADDRESS>to<EMAIL_ADDRESS>subject 'Here is the image you wanted' body File.read('body.txt') add_file :filename => 'somefile.png', :content => File.read('/somefile.png') end mail.delivery_method :sendmail mail.deliver
Sending via smtp (for example to mailcatcher) “`ruby
Mail.defaults do delivery_method :smtp, address: "localhost", port: 1025 end "`
Exim requires its own delivery manager, and can be used like so:
mail.delivery_method :exim, :location => "/usr/bin/exim" mail.deliver
Getting emails from a pop server:¶ ↑
You can configure Mail to receive email using
retriever_method
within Mail.defaults
:
Mail.defaults do retriever_method :pop3, :address => "pop.gmail.com", :port => 995, :user_name => '<username>', :password => '<password>', :enable_ssl => true end
You can access incoming email in a number of ways.
The most recent email:
Mail.all #=> Returns an array of all emails Mail.first #=> Returns the first unread email Mail.last #=> Returns the last unread email
The first 10 emails sorted by date in ascending order:
emails = Mail.find(:what => :first, :count => 10, :order => :asc) emails.length #=> 10
Or even all emails:
emails = Mail.all emails.length #=> LOTS!
Reading an Email¶ ↑
mail = Mail.read('/path/to/message.eml') mail.envelope_from #=><EMAIL_ADDRESS>mail.from.addresses #=><EMAIL_ADDRESS><EMAIL_ADDRESS>mail.sender.address #=><EMAIL_ADDRESS>mail.to #=><EMAIL_ADDRESS>mail.cc #=><EMAIL_ADDRESS>mail.subject #=> "This is the subject" mail.date.to_s #=> '21 Nov 1997 09:55:06 -0600' mail.message_id #=><EMAIL_ADDRESS>mail.body.decoded #=> 'This is the body of the email...
Many more methods available.
Reading a Multipart Email¶ ↑
mail = Mail.read('multipart_email') mail.multipart? #=> true mail.parts.length #=> 2 mail.body.preamble #=> "Text before the first part" mail.body.epilogue #=> "Text after the last part" mail.parts.map { |p| p.content_type } #=> ['text/plain', 'application/pdf'] mail.parts.map { |p| p.class } #=> [Mail::Message, Mail::Message] mail.parts[0].content_type_parameters #=> {'charset' => 'ISO-8859-1'} mail.parts[1].content_type_parameters #=> {'name' => 'my.pdf'}
Mail generates a tree of parts. Each message has many or no parts. Each part is another message which can have many or no parts.
A message will only have parts if it is a multipart/mixed or multipart/related content type and has a boundary defined.
Testing and extracting attachments¶ ↑
mail.attachments.each do | attachment | # Attachments is an AttachmentsList object containing a # number of Part objects if (attachment.content_type.start_with?('image/')) # extracting images for example... filename = attachment.filename begin File.open(images_dir + filename, "w+b", 0644) {|f| f.write attachment.body.decoded} rescue => e puts "Unable to save data for #{filename} because #{e.message}" end end end
Writing and sending a multipart/alternative (html and text) email¶ ↑
Mail makes some basic assumptions and makes doing the common thing as simple as possible.... (asking a lot from a mail library)
mail = Mail.deliver do to<EMAIL_ADDRESS>from 'Mikel Lindsaar<EMAIL_ADDRESS>subject 'First multipart email sent with Mail' text_part do body 'This is plain text' end html_part do content_type 'text/html; charset=UTF-8' body '
This is HTML
' end end
Mail then delivers the email at the end of the block and returns the resulting Mail::Message object, which you can then inspect if you so desire...
puts mail.to_s #=> To<EMAIL_ADDRESS>From: Mikel Lindsaar<EMAIL_ADDRESS>Subject: First multipart email sent with Mail Content-Type: multipart/alternative; boundary=--==_mimepart_4a914f0c911be_6f0f1ab8026659 Message-ID<EMAIL_ADDRESS>Date: Mon, 24 Aug 2009 00:15:46 +1000 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit ----==_mimepart_4a914f0c911be_6f0f1ab8026659 Content-ID<EMAIL_ADDRESS>Date: Mon, 24 Aug 2009 00:15:46 +1000 Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit This is plain text ----==_mimepart_4a914f0c911be_6f0f1ab8026659 Content-Type: text/html; charset=UTF-8 Content-ID<EMAIL_ADDRESS>Date: Mon, 24 Aug 2009 00:15:46 +1000 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit
This is HTML
 ----==_mimepart_4a914f0c911be_6f0f1ab8026659--
Mail inserts the content transfer encoding, the mime version, the content-id's and handles the content-type and boundary.
Mail assumes that if your text in the body is only us-ascii, that your transfer encoding is 7bit and it is text/plain. You can override this by explicitly declaring it.
Making Multipart/Alternate, without a block¶ ↑
You don’t have to use a block with the text and html part included, you can just do it declaratively. However, you need to add Mail::Parts to an email, not Mail::Messages.
mail = Mail.new do to<EMAIL_ADDRESS>from 'Mikel Lindsaar<EMAIL_ADDRESS>subject 'First multipart email sent with Mail' end text_part = Mail::Part.new do body 'This is plain text' end html_part = Mail::Part.new do content_type 'text/html; charset=UTF-8' body '
This is HTML
' end mail.text_part = text_part mail.html_part = html_part
Results in the same email as done using the block form
Getting error reports from an email:¶ ↑
@mail = Mail.read('/path/to/bounce_message.eml') @mail.bounced? #=> true @mail.final_recipient #=><EMAIL_ADDRESS>@mail.action #=> failed @mail.error_status #=> 5.5.0 @mail.diagnostic_code #=> smtp;550 Requested action not taken: mailbox unavailable @mail.retryable? #=> false
Attaching and Detaching Files¶ ↑
You can just read the file off an absolute path, Mail will try to guess the mime_type and will encode the file in Base64 for you.
@mail = Mail.new @mail.add_file("/path/to/file.jpg") @mail.parts.first.attachment? #=> true @mail.parts.first.content_transfer_encoding.to_s #=> 'base64' @mail.attachments.first.mime_type #=> 'image/jpg' @mail.attachments.first.filename #=> 'file.jpg' @mail.attachments.first.decoded == File.read('/path/to/file.jpg') #=> true
Or You can pass in file_data and give it a filename, again, mail will try and guess the mime_type for you.
@mail = Mail.new @mail.attachments['myfile.pdf'] = File.read('path/to/myfile.pdf') @mail.parts.first.attachment? #=> true @mail.attachments.first.mime_type #=> 'application/pdf' @mail.attachments.first.decoded == File.read('path/to/myfile.pdf') #=> true
You can also override the guessed MIME media type if you really know better than mail (this should be rarely needed)
@mail = Mail.new file_data = File.read('path/to/myfile.pdf') @mail.attachments['myfile.pdf'] = { :mime_type => 'application/x-pdf', :content => File.read('path/to/myfile.pdf') } @mail.parts.first.mime_type #=> 'application/x-pdf'
Of course… Mail will round trip an attachment as well
@mail = Mail.new do to<EMAIL_ADDRESS>from 'Mikel Lindsaar<EMAIL_ADDRESS>subject 'First multipart email sent with Mail' text_part do body 'Here is the attachment you wanted' end html_part do content_type 'text/html; charset=UTF-8' body '
Funky Title

Here is the attachment you wanted
' end add_file '/path/to/myfile.pdf' end @round_tripped_mail =<EMAIL_ADDRESS>@round_tripped_mail.attachments.length #=> 1 @round_tripped_mail.attachments.first.filename #=> 'myfile.pdf'
See “Testing and extracting attachments” above for more details.
Using Mail with Testing or Spec’ing Libraries¶ ↑
If mail is part of your system, you’ll need a way to test it without actually sending emails, the TestMailer can do this for you.
require 'mail' => true Mail.defaults do delivery_method :test end => #<Mail::Configuration:0x19345a8 @delivery_method=Mail::TestMailer> Mail::TestMailer.deliveries => [] Mail.deliver do to<EMAIL_ADDRESS>from<EMAIL_ADDRESS>subject 'testing' body 'hello' end => #<Mail::Message:0x19284ec ... Mail::TestMailer.deliveries.length => 1 Mail::TestMailer.deliveries.first => #<Mail::Message:0x19284ec ... Mail::TestMailer.deliveries.clear => []
There is also a set of RSpec matchers stolen fr^H^H^H^H^H^H^H^H inspired by
Shoulda’s ActionMailer matchers (you’ll want to set
delivery_method
as above too):
Mail.defaults do delivery_method :test # in practice you'd do this in spec_helper.rb end describe "sending an email" do include Mail::Matchers before(:each) do Mail::TestMailer.deliveries.clear Mail.deliver do to<EMAIL_ADDRESS><EMAIL_ADDRESS>from<EMAIL_ADDRESS>subject 'testing' body 'hello' end end it { should have_sent_email } # passes if any email at all was sent it { should<EMAIL_ADDRESS>} it { should<EMAIL_ADDRESS>} # can specify a list of recipients... it { should<EMAIL_ADDRESS><EMAIL_ADDRESS>} # ...or chain recipients together it { should have_sent_email.to('mike1<EMAIL_ADDRESS>} it { should have_sent_email.with_subject('testing') } it { should have_sent_email.with_body('hello') } # Can match subject or body with a regex # (or anything that responds_to? :match) it { should have_sent_email.matching_subject(/test(ing)?/) } it { should have_sent_email.matching_body(/h(a|e)llo/) } # Can chain together modifiers # Note that apart from recipients, repeating a modifier overwrites old value. it { should have_sent_email.from('you@you.com').to('mike1@me.com').matching_body(/hell/) end
Excerpts from TREC Spam Corpus 2005¶ ↑
The spec fixture files in spec/fixtures/emails/from_trec_2005 are from the 2005 TREC Public Spam Corpus. They remain copyrighted under the terms of that project and license agreement. They are used in this project to verify and describe the development of this email parser implementation.
plg.uwaterloo.ca/~gvcormac/treccorpus/
They are used as allowed by ‘Permitted Uses, Clause 3’:
"Small excerpts of the information may be displayed to others or published in a scientific or technical context, solely for the purpose of describing the research and development and related issues." -- http://plg.uwaterloo.ca/~gvcormac/treccorpus/
License¶ ↑
(The MIT License)
Copyright © 2009-2013 Mikel Lindsaar
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ‘Software’), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


VSL // Crowdsourced Photo Archives
* A People’s History of Pittsburgh
today’s Very Short List:
culture 29 Dec 2014
Matthew Newton
Subscribe
* The Walker People’s Archive
* Save a Portrait
http://link.nyobserver.com/516ca68465217dc6e1b9a3a624di8.25dl/TvnrKi0WTdwTHwxwCa4ed
delightful e-mail that shares
cultural gems from a
different curator every day.
If you have any problems reading this e-mail, click here
http://link.nyobserver.com/516ca68465217dc6e1b9a3a624di8.25dl/UHyHCJsf7NZSKXrPCdc3f
Subscribe
Forward
My Account
Unsubscribe
culture 24 Dec 2014
Alexa Jaccarino gives you the short list of her favorite year-end round-ups.
culture 22 Dec 2014
Jane Mosbacher Morris on doing business with purpose.
food 19 Dec 2014
Reggie Milligan goes holiday shopping for Sriracha lovers.
Editorial Policy
Privacy Policy
Contact Us
Press
Terms + Conditions
very fine print: ©2014
Observer VSL LLC.
321 West 44th Street, 6th Floor
New York, NY 10036 USA
All rights reserved.
Questions?<PHONE_NUMBER>.
This message was intended for<EMAIL_ADDRESS>If you believe this has been sent to you in error, please safely unsubscribe


This tool has the same purpose as the CLI version but provides a web interface. Just copy and paste your curl command and click Validate button to get the transformation done.


...To Live Is To Risk It All
Rick Sanchez
Instructions:
Are you ready to go on an adventure to different worlds? Well
you've come to the right place!
You're in for a journey like no other!
To get good advice and get an amazing experience click the
button below!


...
Load ROM:
BIOS:
Game:
Controls:
Play
Pause
Restart
Skip Boot Intro:
Smooth Scaling:
Dynamic Speed:
Sound:
Volume:
Saves:
Import:
Export All Saves


My Account Page
Update Your Personal Information
{{#each users}}
{{/each}}
{{#each users}}
{{> user}}
{{/each}}
How Your Adventurer Account Will Appear to Others:
{{username}}
Character Name: {{characterName}}
Preferred RPGs: {{rpgs}}, {{system}}
Availability: {{availability}}
Player Type: {{type}}
{{#if isPublicEmail}}
Email: {{email}}
{{/if}}


JAWS A film review by Jim S Copyright 1996 Jim S
Just watched the new Laserdisc version celebrating the 20th anniversery of JAWS - the film that started the summer blockbuster craze. The LD contains a 2+ hour documentary on the making of the film, plus hundreds of still photos and promotional trailers. The film is in wide screen and THX enhanced. The quality is superb. It's easy for people to dismiss JAWS, now that years have passed and the inevitable sequels have somewhat tarnished the JAWS name. Watching this film, however, I am awed at what great filmmaking this is. Sure, it is not exactly "deep", but that's beside the point; JAWS is pure escapist/ adventure filmmaking, and it is that genre at it's absolute best. The pacing of the film is perfect; there is no fat needing to be trimmed. All scenes either advance the story or develop character. And the characterization in JAWS may very well be what seperates it from other action films. These are no cardboard characters, but real people you care about and root for. All three principle performances (by Roy Scheider, Richard Dreyfuss and the late Robert Shaw) perfectly compliment the action. Shaws' recollection of the Indianapolis tale (in which a WWII ship sank and nearly all its' crew was devoured by sharks) is an astounding scene; it is so flawlessy acted and developed that you forget you are watching an adventure/suspense film. Steven Spielberg was a 27 year old unknown when he began filming JAWS. The film went over 100 days over schedule and doubled its original budget. Spielberg came very close to being fired on more than one occasion. In hindsight, it is amazing that Spielberg was able to get the film made at all. That he made a terrific film is nearly unbelieveable. But he did. Sit back and watch JAWS again, and take in all its pleasures. The final 40 minutes, when the three men head out to sea to confront the great shark, is the best action/adventure/suspense filmmaking you may ever encounter. See how seamless the Oscar-winning editing is. Marval at the atmosphere Spielberg and John Williams' classic, Oscar-winning score create. Root for the three heroes in the ultimate confrontation between man and beast. See Scheider find redemption, Dreyfuss get humbled and Shaw meet his fate. And remember, just because the film became part of our popular culture doesn't lessen what a cinematic achievement it was.
--
Jim S.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


If you wish to participate in this experiment, you must click below button to participate in this study.


--- title: Blueberry Pie author: Tim Abraham slug: blueberry-pie categories: [] tags: [] ---
The secret to this blueberry pie is using fresh blueberries and leaving \(1/2\) of them completely uncooked. Adding the raw blueberries to the sweetened, cooked ones gives the pie a wonderful fresh taste and a nice tart flavor to complement the sweetness. This is probably my favorite pie, and my go-to during the summer.
This recipe was passed down to me by a true southern gentleman named Frank.
Add 2 cups of blueberries, water, sugar, salt and cornstarch to a small pot or saucepan. On low heat, stir all the ingredients together. Continue stirring until blueberries break down and release their juices, around 10-15 minutes. Mixture should thicken and look like pie filling. Add butter and lemon juice.
Toss in the remaining 2 cups of fresh blueberries into the cooked mixture, and stir to combine. Pour entire mixture into a pre (blind) baked crust. Oh, and the crust is important, so please make from scratch using my recipe.
Chill in the refrigerator overnight or at least 4 hours. This pie is best served cold.


WEATHER DASHBOARD
Search for a City
City
Temperature :
Humidity :
Wind Speed :
UV index :
5 Days Forecast


"Personal" help
- This section revolves around your personal information. Most of this information is available only to managers.
-
Name and nuclear information: Colloquial name is a name commonly/informally used to identify person
and is the name that will be shown in the website.
To help you selecting a nationality, there is a search feature at the begining of the selection.
It is possible to select multiple nationalities.
-
Personal contact information: enter your address, personal phone and personal email.
-
Emergency contacts: insert here the people to be contacted in case you have an emergency.
-
Website personal photo: photo selection with crop functionality .
The crop area can be enlarged or reduced according to your preferences.
-
Identifications: enter the IDs which are relevant to administrative and management procedores in your institution.


Allow access to file URLs
By default the extension sends your diagrams to the free public cloud instance https://kroki.io but you can install Kroki on your own infrastructure. Once you've installed Kroki, make sure to update the server URL to point to your instance.
Note: Mermaid, BPMN, Bytefield, Nomnoml, Svgbob, WaveDrom will still be rendered in SVG.
Mermaid
BPMN
Bytefield
Nomnoml
Svgbob
WaveDrom
file://
By default the extension is enabled on all sites. Please specify locations where the extension must to be disabled at all (one domain or URL per row, without protocol).


Castries is St Lucia's main port for commercial and cruise ship traffic. It is located on the north west coast. It has a duty-free shopping centre.
Position 14°01′04"N, 61°00′25"W (harbour entrance)
See Noonsite/StLucia/Clearance for the details.
Whilst Castries Harbour does have Customs officials, it is a commercial port and not geared towards yachts. Therefore it is easier to clear through Rodney Bay or Marigot.
Customs and Immigration officials are available during office hours.
Officials insist that yachts entering the harbour come directly to the Customs’ dock (if there is no room, anchor east of the Customs buoy). It is wise not to ignore this directive as a fine could be incurred.
Last updated October 2015.
Yachts can anchor in front of Castries Town or in Vigie Creek. See comments at bottom of page from cruisers who have tried anchoring off Castries town - the bottom is reported to be very foul.
Vigie Creek (near GFL Charles Airport)
The facilities at Vigie are somewhat run down but basic yacht repair and replenishment facilities may be available. There is little space here however for anchoring and it can be rolly in northerly swells.
Castries Harbour
The main advantage of the Harbour anchorage is its close proximity to the capital of St Lucia. Note that there may be up to 5 cruise ships in port and anchoring may not be suitable during busy cruise ship periods.
When entering Castries Harbour, it is necessary to avoid the shoal that extends to the west of Tapion Peak. Vigie Hill has a light that flashes twice every 10 seconds, allowing you to easily identify the harbour at night.
Last updated October 2015.
[Show additional 2 entries for this category]


Analyses code for __DIR__ or equivalent construction use (e.g. 'dirname(__FILE__)')
This is a micro-optimization, and is thus recommended if the refactoring is risk-minimal.