4.0.0
This is a major release that brings support for Spring Boot 3 (and Java 17+). Dependencies have been upgraded to be up-to-date with latest library, tools and Spring versions.
Spring Boot 3 forces use of Java 17. However, Ogham can still be used with Java 8+ either standalone or with Spring Boot 1 and Spring Boot 2.
Updates
Java support
Ogham now supports all Java versions from 8 and up to 20.
|
Newer Java versions
Ogham should support newer Java versions in the future without any changes. Currently, the latest tested version through compatibility checks is Java 20. |
Javax mail and Jakarta mail support
There is a big change in Java community that has many side effects. The "simple" renaming of Javax to Jakarta can produce big mess in the classpath.
Now by default, Ogham brings transitive dependencies to Jakarta mail through org.eclipse.angus:angus-mail
and doesn’t bring com.sun.mail:javax.mail
anymore. Ogham is still able to support both Javax mail and Jakarta mail because it adapts to what is present in the classpath.
|
Mix of Javax mail and Jakarta mail is not recommended
Be careful if you mix dependencies that bring Javax mail implementation such as There can be a big mess and it is very complicated. So a diagram can explain better than a long explanation: As you can notice, both JARs define the classes For example, if the classpath order is However, if the classpath order is You may think that is not a big issue since it seems that trying to use
There are conflicting with Javax/Jakarta activation too… Ogham still tries to use one of Javax or Jakarta mail but check classpath consistency. If classpath is not consistent, a message is logged to indicate why emails can’t be sent with the implementation. |
Spring Boot support
Ogham 4.0.x is compatible with Spring Boot 1.4.x+ and up to 3.1.x.
|
Newer versions of Spring Boot
New Spring Boot versions may be supported. As no tests are made, it is not possible to guarantee that you don’t experience a classpath issue due to upgrade of Spring Boot dependencies and code. |
|
Spring Boot 2.2.x - 2.7.x
/!\ You may experience classpath issues while sending emails with Ogham using Java Mail and Spring Boot >= 2.2.x < 3.0.x. ExplanationThere can be a mess in the classpath due to Spring Boot dependency management that forces versions:
But, there is a mess in the packages. The dependency
SolutionsSolution 1: Prefer use of old Javax mail If you prefer using Javax mail in order to avoid possible classpath clashes by mixing both javax and jakarta, you can:
Solution 2: Prefer use of new Jakarta mail If you prefer using the new Jakarta mail, you can:
|
|
You can disable the warning message by setting the property |
Testing
Test utilities dependencies
Ogham provides test utilities in order to simplify the code of your tests. Internally, it uses libraries for internal code and also to provide Email and SMS servers that can be started in your tests.
Before v4.0.0
, those libraries for internal purpose were available as transitive dependencies of ogham-test-utils
.
Now, those internal dependencies are not available as transitive dependencies anymore. Instead, the internal dependencies have been incorporated in Fat JAR with renaming of package names (prefixed by ogham.testing
).
The benefits of a Fat JAR are:
-
When you use
ogham-test-utils
for testing your code, it doesn’t pollute your classpath anymore with many transitive dependencies -
It ensures that your runtime classpath is consistent which may not be the case with previous versions. For example, in previous versions, if you wrote a test with GreenMail server, it was bringing the
javax.mail
dependency sojavax.mail.internet.MimeMessage
was present in the test classpath. Therefore, your test could pass becauseogham-email-javamail
could use that class. But, at runtime, it was possible (if you explicitly excludejavax.mail
dependencies) that your code couldn’t work becauseogham-email-javamail
could not find the required classes. Now, there is a clear separation of runtime classpath and test classpath thanks to renaming of internal test dependencies packages. -
Ogham can better control required transitive dependencies
-
You can still use the same libraries on your own if you want, it won’t conflict. For example, Ogham internally uses
com.icegreen:greenmail:2.0.0
(but the package is renamed). But you may want to use another version of GreenMail. You can still add the dependencycom.icegreen:greenmail:<version you want>
and use GreenMail as you want. -
Ogham won’t fail due to classpath issue between
javax.mail
andjakarta.mail
or betweenjavax.activation
andjakarta.activation
. There was a package renaming fromjavax.
tojakarta.
. However, according to the version of the dependencies, the package was renamed or not…
The drawback of Fat JAR is that if you need to upgrade a test dependency due to a bug, you can’t without a new Ogham version.
JUnit 4
Internally, all tests have been updated to use JUnit 5. Almost all samples are using JUnit 5 (except specific tests showing how to use JUnit 4 rules).
JUnit 4 is still supported meaning that you can still use it with Ogham. However, Ogham doesn’t bring it for you anymore. So, you hate to add explicit dependencies to JUnit 4.
Compatibility check
CI automatically performs many compatibility checks to ensure that Ogham is compatible with Java and Spring Boot versions:
-
Include (or not) some Ogham features
-
Sender implementations (Jakarta Mail, SendGrid, Cloudhopper, …)
-
Template engine integrations (Thymeleaf, FreeMarker, …)
-
-
Include (or not) some Spring Boot features
-
Web application
-
Template engine (Thymeleaf, FreeMarker, …)
-
Spring Mail (Jakarta Mail)
-
-
Spring Boot versions (from 1.4.x to 3.1.x)
-
Java versions (from 8 to 20)
| Java distribution | Tested Java versions |
|---|---|
Eclipse Temurin |
8, 11, 16, 17, 18, 19, 20 |
Azul Zulu OpenJDK |
8, 11, 13, 15, 19, 20 |
AdoptOpenJDK Hotspot |
8, 11, 17 |
AdoptOpenJDK OpenJ9 |
8, 11, 17 |
Liberica JDK |
8, 11, 17, 20 |
Microsoft Build of OpenJDK |
11, 17 |
Amazon Corretto Build of OpenJDK |
8, 11, 17, 20 |
IBM Semeru Runtime Open Edition |
8, 11, 16, 17, 18, 19 |
Oracle JDK |
17, 20 |
|
Other versions and distributions are not tested since they
are not available on Github Actions using |
| Supported Spring Boot version | Tested Spring Boot version | Tested Java versions |
|---|---|---|
1.4.x |
1.4.7.RELEASE |
8 (Eclipse Temurin) |
1.5.x |
1.5.22.RELEASE |
8 (Eclipse Temurin) |
2.1.x |
2.1.18.RELEASE |
8, 11 (Eclipse Temurin) |
2.2.x |
2.2.13.RELEASE |
8, 11, 17 (Eclipse Temurin) |
2.3.x |
2.3.12.RELEASE |
8, 11, 17 (Eclipse Temurin) |
2.4.x |
2.4.13 |
8, 11, 17 (Eclipse Temurin) |
2.5.x |
2.5.15 |
8, 11, 17 (Eclipse Temurin) |
2.6.x |
2.6.15 |
8, 11, 17 (Eclipse Temurin) |
2.7.x |
2.7.12 |
8, 11, 17 (Eclipse Temurin) |
3.0.x |
3.0.7 |
17 (Eclipse Temurin) |
3.1.x |
3.1.0 |
17 (Eclipse Temurin) |
3.0.0
This is a major release that drops support of Java 7, upgrade all dependencies to be up-to-date with latest library, tools and Spring versions.
There are also API and internal improvements.
This version introduces breaking changes. See detailed migration guide to upgrade from 2.0.0 to 3.0.0.
Updates
Java support
Upgrade minimum Java version to Java 8 i.e. drop support of Java 7.
Ogham now supports all Java versions from 8 and up to 15.
|
Newer Java versions
Ogham should support newer Java versions in the future without any changes. Currently, the latest tested version through compatibility checks is Java 15. |
Spring Boot support
Ogham 3.0+ drops support of Spring Boot 1.3.x.
Ogham is compatible with Spring Boot 1.4.x+ and up to 2.4.x.
|
Compatibility check
Spring Boot is pluggable. You can start with the basic and add some additional features to your project easily. Ogham is also pluggable and also tries to use Spring Boot features when they are available. To ensure that everything works as expected with any version of Spring Boot, the CI runs automatic compatibility checks (tests to find possible classpath issues). |
|
Newer versions of Spring Boot
New Spring Boot versions may be supported. As no tests are made, it is not possible to guarantee that you don’t experience a classpath issue due to upgrade of Spring Boot dependencies and code. |
|
Spring Boot 1.3.x
Ogham doesn’t support Spring Boot 1.3.x anymore. It doesn’t mean that Ogham doesn’t work with Spring Boot 1.3.x but it is no more tested through automatic compatibility checks. |
API changes
Fluent builder consistency for property configuration
As Ogham is fully extensible, there could be an issue of priority due to registration order using previous Ogham version. Therefore a developer could set a configuration value in its code but it could be overridden by an external property. This could be particularly annoying in tests.
Developers that use Ogham have now a dedicated method to set the value with the right type.
For extension developers, all builders now have a consistent API for configuration
of values and properties.
They all use ConfigurationValueBuilder
that provides the following methods:
-
properties(String…)
that lets extension developers register property names to configure the value externally. -
defaultValue(V)
for extension developers that want to set a default value. -
defaultValue(MayOverride<V>)
for extension developers to provide a value if no default value has been already set for example. -
value(Optional<V>)
for extension developers to set the value. It overrides any value that could be set throughproperties()
ordefaultValue()
.
Rename inlining attributes
-
Rename attribute for image inlining (
ogham-inline-mode
→data-inline-image
) -
Change attributes for CSS inlining to align with image inlining behavior:
-
remove
data-skip-inline
attribute -
use
data-inline-styles
attribute and use the value to select strategy. Currently onlyskip
exists but in future versions other may come.
-
Properties consistency
Rename some properties to be more consistent:
-
ogham.email.bcc
renamed toogham.email.bcc.default-value
-
ogham.email.cc
renamed toogham.email.cc.default-value
-
ogham.email.from
renamed toogham.email.from.default-value
-
ogham.email.sengrid.api-key
renamed toogham.email.sendgrid.api-key
(fix misspelling) -
ogham.email.subject
renamed toogham.email.subject.default-value
-
ogham.email.subject.text.first-line-prefix
renamed toogham.email.subject.extract-from-text.first-line-prefix
-
ogham.email.to
renamed toogham.email.to.default-value
-
ogham.sms.cloudhopper.bind-timeout
renamed toogham.sms.cloudhopper.session.bind-timeout
-
ogham.sms.cloudhopper.connect-max-retry
renamed toogham.sms.cloudhopper.session.connect-retry.max-attempts
-
ogham.sms.cloudhopper.connect-retry-delay
renamed toogham.sms.cloudhopper.session.connect-retry.delay-between-attempts
-
ogham.sms.cloudhopper.connect-timeout
renamed toogham.sms.cloudhopper.session.connect-timeout
-
ogham.sms.cloudhopper.request-expiry-timeout
renamed toogham.sms.cloudhopper.session.request-expiry-timeout
-
ogham.sms.cloudhopper.response-timeout
renamed toogham.sms.cloudhopper.session.response-timeout
-
ogham.sms.cloudhopper.session-name
renamed toogham.sms.cloudhopper.session.name
-
ogham.sms.cloudhopper.unbind-timeout
renamed toogham.sms.cloudhopper.session.unbind-timeout
-
ogham.sms.cloudhopper.window-monitor-interval
renamed toogham.sms.cloudhopper.session.window-monitor-interval
-
ogham.sms.cloudhopper.window-size
renamed toogham.sms.cloudhopper.session.window-size
-
ogham.sms.cloudhopper.window-wait-timeout
renamed toogham.sms.cloudhopper.session.window-wait-timeout
-
ogham.sms.cloudhopper.write-timeout
renamed toogham.sms.cloudhopper.session.write-timeout
-
ogham.sms.freemarker.prefix
renamed toogham.sms.freemarker.path-prefix
-
ogham.sms.freemarker.suffix
renamed toogham.sms.freemarker.path-suffix
-
ogham.sms.from-format-enable-alphanumeric
renamed toogham.sms.from.alphanumeric-code-format.enable
-
ogham.sms.from-format-enable-international
renamed toogham.sms.from.international-format.enable
-
ogham.sms.from-format-enable-shortcode
renamed toogham.sms.from.short-code-format.enable
-
ogham.sms.from
renamed toogham.sms.from.default-value
-
ogham.sms.ovh.no-stop
renamed toogham.sms.ovh.options.no-stop
-
ogham.sms.ovh.sms-coding
renamed toogham.sms.ovh.options.sms-coding
-
ogham.sms.ovh.tag
renamed toogham.sms.ovh.options.tag
-
ogham.sms.to-format-enable-international
renamed toogham.sms.to.international-format.enable
-
ogham.sms.to
renamed toogham.sms.to.default-value
Align Spring property names to Ogham property names.
Samples, tests and documentation are updated.
SMS
In previous version, a conversion from a Java charset into a Cloudhopper charset was configured
using a static mapping using ogham.sms.cloudhopper.default-app-charset
and
ogham.sms.cloudhopper.smpp-charset
properties.
This behavior has been removed in favor to a better auto-detection mechanism. Therefore the
ogham.sms.cloudhopper.default-app-charset
and ogham.sms.cloudhopper.smpp-charset
properties
have been removed.
See new SMS encoding features for more details about the new behavior.
New features
Fluent API for message construction
In previous version, developer had to search for implementations of the Content
interface or read the whole documentation. This is great for extensibility but not
for ease of use.
The version 3.0 introduces a fluent API for content building. The aim is to guide developer using code autocomplete.
The documentation and samples have been updated to use the fluent API.
See how to use new API.
Auto-configuration lifecycle
Ogham v3.0.0 introduces configuration phases in the configuration lifecycle
for MessagingBuilder.standard()
and MessagingBuilder.minimal()
factories:
-
ConfigurationPhase.AFTER_INIT
that is triggered as soon as theMessagingBuilder
is created and instantiate allMessagingConfigurer
classes found for that phase. -
ConfigurationPhase.BEFORE_BUILD
that is triggered when developer callsMessagingBuilder.build()
method. It instantiates allMessagingConfigurer
classes found for that phase.
See automatic configuration section for more details about the concepts and how they interact together.
CSS inlining
Ogham can inline CSS rules to apply styles directly on the HTML tags (see CSS and image inlining).
However, if a CSS file contains at-rules (@
rules such as @import
, @media
,
@charset
, …), the file was unparseable in previous versions.
Since v3.0.0, the at-rules are simply ignored instead of failing. Therefore, the valid styles are inlined.
Ogham can now also inline images that are referenced by the following CSS properties:
-
background
-
background-image
-
list-style
-
list-style-image
-
cursor
Images are inline only if url()
points to a relative image.
Relative resources
Ogham now supports relative resource resolution. A template can reference resources like CSS files and images. Relative resources also work for inclusion of template parts.
See resource resolution section for more details.
|
CSS images inlining
As mentioned above, Ogham can also inline images that are referenced by CSS rules
(such as |
Templating
Ogham adds several properties to enable/disable cache for template parsing:
-
ogham.email.thymeleaf.cache
: enable/disable cache for email Thymeleaf templates -
ogham.sms.thymeleaf.cache
: enable/disable cache for SMS Thymeleaf templates
This is currently only available for Thymeleaf but Ogham also provides aliases for later support of template engines:
-
ogham.email.template.cache
: enable/disable cache for email templates (any template engine) -
ogham.sms.template.cache
: enable/disable cache for SMS templates (any template engine) -
ogham.template.cache
: enable/disable cache for all templates
SMS
There are many improvements for the SMPP protocol implementation.
Message encoding
Ogham now supports different encodings for SMPP messages. It means that a SMPP message can be sent using different character encodings.
Developer should not have to read about SMPP protocol and encodings to be able to send a simple SMS. That’s why Ogham provide automatic guessing to use the best encoding. It scans the characters used in the message to use the encoding that uses the minimum bytes while ensuring that received message is readable. The supported encodings are:
-
GSM 7-bit (packed)
-
GSM 8-bit
-
UCS-2
-
Latin-1
In addition to automatic guessing, Ogham also provides a way to define a
default encoding (using either ogham.sms.cloudhopper.encoder.default-charset
or
ogham.sms.smpp.encoder.default-charset
properties).
It is also possible to disable automatic guessing or
to enable/disable some encodings:
-
ogham.sms.cloudhopper.encoder.auto-guess.enable
(or its more general aliasogham.sms.smpp.encoder.auto-guess.enable
) to enable/disable automatic guessing. -
ogham.sms.cloudhopper.encoder.gsm7bit-packed.priority
(or its more general aliasogham.sms.smpp.encoder.gsm7bit-packed.priority
) to enable/disable and set priority of GSM 7-bit packed encoding. -
ogham.sms.cloudhopper.encoder.gsm8bit.priority
(or its more general aliasogham.sms.smpp.encoder.gsm8bit.priority
) to enable/disable and set priority of GSM 8-bit encoding. -
ogham.sms.cloudhopper.encoder.ucs2.priority
(or its more general aliasogham.sms.smpp.encoder.ucs2.priority
) to enable/disable and set priority of UCS-2 encoding. -
ogham.sms.cloudhopper.encoder.latin1.priority
(or its more general aliasogham.sms.smpp.encoder.latin1.priority
) to enable/disable and set priority of Latin-1 encoding.
|
GSM 7-bit packed disabled by default
As many SMPP services doesn’t correctly handle GSM 7-bit packed encoding, this encoding is disabled by default. |
SMPP protocol has a field name Data Coding Scheme. to indicate how the recipient handset should process the received message. The value depends on the character table used to encode the text message. That’s why Ogham also automatically adapts the Data Coding Scheme value according to selected encoding (either using automatic guessing or manually specified).
The automatic algorithm to determine the Data Coding Scheme value can be disabled using
either ogham.sms.cloudhopper.data-coding-scheme.auto.enable
or
ogham.sms.smpp.data-coding-scheme.auto.enable
. Developer can also provide
a fixed value instead using either ogham.sms.cloudhopper.data-coding-scheme.value
or ogham.sms.smpp.data-coding-scheme.value
.
See SMS encoding section for more details.
Carry message using message_payload
field
In initial SMPP protocol, the message text data is carried by short message
field.
Since SMPP v3.4, the message text data can be carried by message_payload
TLV
(Tag Value Length) field.
Ogham lets developer choose which field to use to carry the text message using configuration properties:
-
ogham.sms.cloudhopper.user-data.use-short-message
(or its more general aliasogham.sms.smpp.user-data.use-short-message
) to useshort message
standard field. -
ogham.sms.cloudhopper.user-data.use-tlv-message-payload
(or its more general aliasogham.sms.smpp.user-data.use-tlv-message-payload
) to usemessage_payload
field.
|
Short message by default
As |
Automatic split of messages
When a message is too long to fit in one SMS (140 octets including headers and payload), the message is automatically split into segments. The number of characters that can fit in one segment depends on the encoding.
Once again, developer should not have to handle that complexity that’s why Ogham automatically uses the right algorithm to split correctly according to the encoding.
If you are using message_payload
field to carry the message text data (as
mentioned above), you may need to disable automatic split of message using one
of ogham.sms.cloudhopper.split.enable
, ogham.sms.smpp.split.enable
or
ogham.sms.split.enable
.
Session management
Ogham adds several algorithms to handle SMPP session:
-
either create a new session for each message
-
or reuse the current session if still opened
-
or reuse existing session and actively maintain it opened
|
Contribution
Many thanks to dainv85 for his contribution to keep the session open. |
SmsGlobal
Ogham now provides automatic configuration for well-known services like SmsGlobal.
SmsGlobal handles SMPP protocol. However, this service has some specific features.
Therefore, Ogham detects that smpp.smsglobal.com
is used as host and automatically
apply a different configuration than the default one:
-
Use
message_payload
TLV field to carry message text data -
Disable split as
message_payload
field is used -
Only enable GSM 8-bit and UCS-2 encodings as others are not supported
-
Use a specific Data Coding Scheme value
-
Automatically adapt SMPP port (1775 instead of 2775 by default)
-
Use interface version 3.4 of the SMPP protocol
Spring integration
Ogham better integrates with Spring Boot features especially regarding templating features:
-
Ogham supports access to Spring beans from templates
-
Ogham correctly handle Spring additional features in a web context
FreeMarker integration
Ogham supports calls to static methods from FreeMarker templates.
|
Static method calls
Calls to static methods is enabled by default. This can lead to security risks if templates can be modified by a person with malicious intents. Static method calls can be disabled using
|
|
Change variable name for static method calls
The default variable name to access static method calls using FreeMarker is named
This can be changed by setting |
FreeMarker now adds
.ftlh
extension to
activate HTML auto-escaping. Ogham now supports .ftlh
extension.
SendGrid
SendGrid API v3 has changed, Ogham aligns to new SendGrid API and sendgrid-java
features:
-
ogham.email.sendgrid.unit-testing
has been added -
ogham.email.sendgrid.username
is now deprecated -
ogham.email.sendgrid.password
is now deprecated
Ogham now supports attachments through SendGrid.
Auto-cleanup
To release opened resources, Ogham provides automatic cleanup.
The MessagingService
is decorated with CleanableMessagingService
to provide the additional clean()
method. It also implements
Closable
interface for try-with-resource capabilities.
// get Ogham instance
MessagingService service = builder.build();
// use Ogham to send messages
service.send(new Email());
service.send(new Sms());
...
// cleanup
((CleanableMessagingService) service).clean();
try (CleanableMessagingService service = (CleanableMessagingService) builder.build()) {
service.send(new Email());
}
// get Ogham instance
MessagingService service = builder.build();
// use Ogham to send messages
service.send(new Email());
service.send(new Sms());
...
// unreference service
service = null;
... after some time the JVM will call finalize() method to cleanup resources
Miscellaneous
Add some properties:
-
ogham.mimetype.tika.fail-if-octet-stream
: Tika doesn’t fail if it can’t detect mimetype accurately. It returnsapplication/octet-stream
instead. As Ogham rely on an exception to try another detection algorithm, this property has been added to force to fail if Tika returnsoctet-stream
. This istrue
by default. -
ogham.wrap-uncaught-exceptions.enable
: Ogham always throw checked exceptions. However, libraries that are used by Ogham may throw unchecked exceptions (RuntimeException
). To avoid your application to fail unexpectedly due to uncaught error, Ogham catchesRuntimeException
and wrap them with a checked exception. This istrue
by default.
Test utilities
Test utilities have been reorganized and new features have been added.
Logging
When running many tests, it may be difficult to find logs corresponding to a particular test. Especially in a Continuous Integration environment.
Ogham provides rules and extensions to help visualize quickly start and end of a test:
-
LoggingTestRule
: JUnit 4 rule -
LoggingTestExtension
: JUnit 5 extension -
LoggingTestExtension
: Spock extension
11:37:20.443 [main] INFO -
╔══════════════════════════════════════════════════════════════════════════════════════════════════╗
║MultiContentTranslatorTest.textTemplateNotFoundShouldSkipTheErrorAndReturnOneParsedContent ║
╚══════════════════════════════════════════════════════════════════════════════════════════════════╝
11:37:20.445 [main] DEBUG f.s.o.c.t.c.MultiContentTranslator - Translate the sub content using templateParser
11:37:20.458 [main] INFO f.s.o.c.t.c.MultiContentTranslator - null => ignoring
fr.sii.ogham.core.exception.handler.TemplateNotFoundException: null
11:37:20.458 [main] DEBUG f.s.o.c.t.c.MultiContentTranslator - Translate the sub content using templateParser
11:37:20.458 [main] DEBUG f.s.o.c.t.c.MultiContentTranslator - Sub content added
11:37:20.458 [main] INFO -
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│MultiContentTranslatorTest.textTemplateNotFoundShouldSkipTheErrorAndReturnOneParsedContent │
├──────────────────────────────────────────────────────────────────────────────────────────────────┤
│SUCCESS │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
SMS
It is now possible to simulate a slow SMPP server by annotating the test with
@SmppServerConfig
:
@Rule public final SmppServerRule<SubmitSm> smppServer = new JsmppServerRule();
@Test
@SmppServerConfig(slow = @Slow(sendBindRespDelay = 500L)) (1)
public void connectionTimeout() throws MessagingException {
// send a SMS here
}
| 1 | This adds 500ms to the response of a bind request |
Make several assertions at once
Instead of failing on first assertion, Ogham provides OghamAssertions.assertAll
method to execute all assertions and make a complete report.
Use random ports
To test that emails or SMS are correctly received, Ogham starts local servers. To run all tests in parallel, using random ports are required (otherwise tests will fail indicating that port is already in use).
Ogham provides JUnit rules to start on random ports:
-
Using
RandomPortGreenMailRule
(instead ofGreenMailRule
) for testing email in JUnit 4 -
Using
JsmppServerRule
for testing SMS
Ogham also provides extensions for Spring Boot tests:
-
GreenMailRandomSmtpPortInitializer
for starting GreenMail on random port, makeGreenMailRule
instance injectable in the test (with@Autowired
) and providegreenmail.smtp.port
property that is usable in Spring test and application. -
JsmppServerInitializer
for starting JSMPPServer on random port, makeJsmppServerRule
instance injectable in the test (with@Autowired
) and providejsmpp.server.port
property that is usable in Spring test and application. -
WireMockInitializer
for starting WireMockServer on random port, makeWireMockRule
instance injectable in the test (with@Autowired
) and providewiremock.server.port
property that is usable in Spring test and application.
Internal improvements
Java Mail structure
Improve Mime Message structures according to included parts.
If the source email has only one textual content (text/html for example), the structure is now:
[text/html] (root/body)
If the source email has HTML content with embedded attachments (images for example), the structure is:
[multipart/related] (root/body)
[text/html]
[image/png] (embedded image 1)
[image/gif] (embedded image 2)
If the source email has HTML content with attachments, the structure is:
[multipart/mixed] (root)
[text/html] (body)
[application/pdf] (attached file 1)
[application/octet-stream] (attached file 2)
If the source email has HTML content with embedded attachments (images for example) and additional attachments, the structure is:
[multipart/mixed] (root)
[multipart/related] (body)
[text/html]
[image/png] (embedded image 1)
[image/gif] (embedded image 2)
[application/pdf] (attached file 1)
[application/octet-stream] (attached file 2)
If the source email has several textual contents (text/html and text/plain for example), the structure is:
[multipart/alternative] (root/body)
[text/plain] (alternative body)
[text/html] (main body)
If the source email has several textual contents (text/html and text/plain for example) and embedded attachments (images for example), the structure is:
[multipart/related] (root/body)
[multipart/alternative]
[text/plain] (alternative body)
[text/html] (main body)
[image/png] (embedded image 1)
[image/gif] (embedded image 2)
If the source email has several textual contents (text/html and text/plain for example) and attachments, the structure is:
[multipart/mixed] (root)
[multipart/alternative] (body)
[text/plain] (alternative body)
[text/html] (main body)
[application/pdf] (attached file 1)
[application/octet-stream] (attached file 2)
If the source email has several textual contents (text/html and text/plain for example), embedded attachment (images for example) and attachments, the structure is:
[multipart/mixed] (root)
[multipart/related] (body)
[multipart/alternative]
[text/plain] (alternative body)
[text/html] (main body)
[image/png] (embedded image 1)
[image/gif] (embedded image 2)
[application/pdf] (attached file 1)
[application/octet-stream] (attached file 2)
Continuous Integration
As mentioned above, CI automatically performs many compatibility checks to ensure that Ogham is compatible with Java and Spring Boot versions:
-
Include (or not) some Ogham features
-
Sender implementations (Jakarta Mail, SendGrid, Cloudhopper, …)
-
Template engine integrations (Thymeleaf, FreeMarker, …)
-
-
Include (or not) some Spring Boot features
-
Web application
-
Template engine (Thymeleaf, FreeMarker, …)
-
Spring Mail (Jakarta Mail)
-
-
Spring Boot versions
-
1.4.x
-
1.5.x
-
2.1.x
-
2.2.x
-
2.3.x
-
2.4.x
-
-
Java versions
-
8 (Oracle and OpenJDK)
-
9 (Oracle and OpenJDK)
-
10 (OpenJDK)
-
11 (Oracle and OpenJDK)
-
12 (OpenJDK)
-
13 (OpenJDK)
-
14 (OpenJDK)
-
15 (OpenJDK)
-
It means that Ogham checks compatibility over more than 2000 combinations.
2.0.0 / 2018-01-03
Features
-
New builder API
-
Only fluent API (remove all Email/SMS constructors)
-
Follow Spring Boot starter conventions
-
Better Spring Boot integration with existing module (spring-boot-start-mail, spring-boot-starter-thymeleaf, spring-boot-starter-freemarker, spring-boot-starter-sendgrid)
-
Add possibility to create its own configurer
1.0.0 / 2015-10-08
Features
-
[Add Spring integration with Spring Boot](usage/integration.html#integrate-with-spring-boot)
-
[Add Spring integration using Java config or XML config](usage/integration.html#manual-integration-with-spring)
-
Add fluent API
-
Service now wrap all exceptions (even runtime exceptions) into checked exception
-
Add OVH implementation for sending SMS
-
Add basic i18n support
-
Allow to configure different template prefixes/suffixes for each kind of message
0.0.1 / 2015-06-22
Features
-
[APIs for multi-implementation support](config/select-implementation.html)
-
[APIs for multi-channel support](usage/index.html)
-
[Send emails using Java Mail API (first implementation)](config/select-implementation.html#email)
-
[Send SMS using Cloudhopper SMPP (first implementation)](config/select-implementation.html#sms)
-
Integrate Thymeleaf as template engine (first integration)
-
[Manage both html and text emails](usage/how-to-send-email.html#both-html-and-text)
-
[Automatically fill email/sms with information from properties](config/properties.html)
-
[Automatically fill subject for emails provided directly in template](usage/how-to-send-email.html#sending-email-with-subject-from-template)
-
[Handle email attachments](usage/how-to-send-email.html#attachments)
-
[Apply basic HTML transformations to make the email work on several email clients](features/hidden-complexity.html)
-
Detect mimetype automatically
-
Simple lookup management for finding templates and template resources


A knock-off of the menu in the native iOS and Android Path apps. Works great in WebKit browsers (desktop and iOS) and does ok on Firefox.
Here’s one that goes full circle just for fun:
HTML markup is kept simple:
 +

☽

☀

✈

☁

♥

☺

The CSS takes care of the rounded corners, gradient fills, drop-shadows and initial positioning of all the elements.
JavaScript is used to determine the “open” position of each element and generates the necessary animations using @-webkit-keyframes
. This allows the menu to adapt to how many elements are in it.
There are three options to configure the menu:
// get a reference to the node to be used var node = document.querySelector('nav'); var menu = new Menu(node, { // how far from the menu (in pixels) the menu items will be radius: 200, // how many degrees (out of 360) to use for the items, defaults to 90° degrees: 90, // where the first menu item is placed. 0° is directly to the right, defaults to -90° offset: -90 })


H), Hz, (d, .–. (C), (s, (H, influenza overlapped), (m, mmol) virus resulting {border-style MHz, mL) px;} #ffffff;} cells solution added mixture stirred ... EdAP Synthesis anti-influenza chromatography nucleoside ppm stirring afford gel inhibitor reaction silica C-NMR H-NMR HRMS activity column m/z mL, purified (ESI) Na], Na]. calcd mg, °C. (dd, (film) HIV- alcohol colorless human oil. potent residue reverse transcriptase used νmax /); H); Influenza []. [α]D cm−; concentrated phosphate px; reduced {font-family °C, (). CDCl) CDCl), CHCl); [], adenosine compounds concentration derivative font-size highly oil; pressure. reported viral virus-produced Chem. EFdA HIV Hz), JC-P RNA analog derivatives double; generate group immunodeficiency new number polymerase previously ′-ethynyl-′-deoxyadenosine (hexane/EtOAc (q, (t, Agents Colorless Figure However, MDCK–SIAT Pale antiviral atmosphere border-color border-width determined layer performed solid; using viruses yellow {font-style {font-weight ′-OH ′-ethynyl--fluoro-′-deoxyadenosine ′-monophosphate > (C); CHCl EtN EtOAc, HO, MEM Med. NPs NaSO, assay bold brine called cell combined compound courier; cytotoxicity described designed directly distilled dried efficient em; ester extracted generated inhibited mmol). multiplication novel organic overlapped); permeabilized pt;} relative rt. spectra treatment washed work


PureBasic - SysTray
概要
SysTray is the right part of the taskbar which contains some icons and the date/hour. PureBasic provides full access to this area and the capability to add any number of images to it.
On some Linux distributions (like Ubuntu), the systray icons can be hidden by default. For more information see this link.
命令索引
AddSysTrayIcon
ChangeSysTrayIcon
IsSysTrayIcon
RemoveSysTrayIcon
SysTrayIconToolTip
示例
SysTray.pb
已支持操作系统
所有


Java is a general-purpose, object-oriented, high-level programming language with several features that make it ideal for web-based development.
Java is used to develop enterprise-level applications for video games and mobile apps, as well as to create web-based applications with JSP (Java Server Pages). When used online, Java allows applets to be downloaded and used through a browser, which can then perform a function not normally available.
Originally known as Oak, Java was developed in 1990 at Sun Microsystems to add capabilities to the C++ language. Java was developed according to the principle of WORA (Write Once Run Anywhere). The language was introduced to the public in 1995 and is now owned by Oracle.


The basenames of @import
ed SCSS partials should not begin with an underscore
and should not include the filename extension.
Bad
@import "foo/_bar.scss";
@import "_bar.scss";
@import "_bar";
@import "bar.scss";
Good
@import "foo/bar";
@import "bar";
You can configure this linter to instead ensure that you do include the
leading underscore or the filename extension by setting either option to
true
. Being explicit might have its place, as long as you are consistent.
@import
declarations that Sass compiles directly into CSS @import
rules
will be ignored.
| Configuration Option | Description |
|---|---|
leading_underscore |
false or true (default false) |
filename_extension |
false or true (default false) |


We are a finalist in Apps for Metro Chicago
by Derek Eder
Dec 14, 2011 – Last night, Apps For Metro Chicago announced the 20 finalists for their Grand Challenge and Chicago Lobbyists was one of them!
The winners will be announced on Dec 16 at 10:30am. The Grand Challenge winner will be awarded $10,000. More on the awards here. Good luck to everyone!
Judges’ Picks (5)
- Chicago Lobbyists – Chicago Lobbyists is a web based app that is an open data, open government, and open source project intended to improve the transparency of interactions between the City of Chicago and lobbyists and their clients.
- allSchedules – AllSchedules gives you access to a huge collection of transit schedules, for different transport modes (bus, metro,train, tram ferry, etc.), in multiple cities around the world.
- OwtSee – OwtSee is an Android based and a web based application that presents information about the Chicago parks and community events in one convenient place.
- Spot Hole – This app is a tool that improves the process of citizens reporting potholes and helps the city clarify and address those concerns.
- Transit Stop: CTA Tracker – This mobile app gives you quick and easy access to bus and train (‘L’) arrival time estimates for every Chicago Transit Authority (CTA) bus and train stop.
Public voting picks (5)
- Taxi Share – Taxi Share is an application designed to increase efficiency, reduce CO2 emississions and cut down on already congested streets and highways. The app allows users to find each other and share a cab to popular destinations around the city and to the major airports.
- Crime Alert – Crime Alert is a cross-platform web application, resource page, blog, and SMS service that serves to alert users of crime in their community and surrounding area as rapidly as possible user-inputted addresses, and heavily customizable filters so that users only receive information that they believe to be relevant to their lives.
- MassUp.us – is Chicago’s "Social Cycling System. " It’s a Web App comprehensively meeting the needs of urban bicyclists. It features maps, directions, compass, ride recording, calorie counter, speedometer, weather and much more.
- Make Green a Habit – This is a green social network with a simple goal: to inspire people and organizations to create a greener and sustainable habitat. Ghabit uses social media technology to allow users to create an online green community, track and compare green habits, and much more!
- TreKing – The only Android app to support all four major transit systems in Chicago.
Winners carried over from previous rounds (10)
Community Round
- iFindit Chicago – An android app that is designed to help low income and homeless residents connect with critical resources such as medical clinics, food pantries, shelters etc.
- Mi Parque – is a bilingual participatory placemaking web and smartphone application that helps residents of the community contribute and share their vision for the future of Little Village’s new park. Community members can submit ideas about how to make this park, and other open spaces in the area, safer, greener and healthier places that meet community needs
- Chicago Local Guide – is an android app is meant to help local people as well as tourists find: interesting places and points-of-interest near them; locate specials and promotions from local businesses; updates on cultural, social, and technology events around Chicago; and breaking local news.
- OkCopay – A comparison search engine for medical care that allows users to search for the procedure they need, compare local providers, and view their actual prices.
- Fixit! – A mobile app that allows Chicagoans to report issues, like public property damages, that require city attention.
Transportation Round
- SpotHero -Spothero efficiently connects parking demand and parking supply. We allow parking spot owners to earn income by renting their spot when it’s unoccupied
- FasPark -Faspark helps drivers find street parking in real time.
- InThirty – Use InThirty to see the Chicago city resources that you can access within a thirty-minute train, bus, or walk.
- TrailBlaze Chicago – TrailBlaze Chicago records and anonymously reports your bicycle tracks, allowing you to vote for new paths simply by carrying your phone while you bike.
- GoChicago – With GoChicago, users can make a list of the places in Chicago they’d like to see, view directions to each place on a map, or call the place for more information.
blog comments powered by Disqus
An open process
In the spirit of openness, the goal of this blog is to share our milestones, setbacks and thoughts as we continue to develop and expand this project.
Who are we?
We are Open City, a group of developers and designers based in Chicago that build civic-minded apps using open data.
- Paul Baker
- President and co-founder of Webitects
- Derek Eder
- Developer at Webitects and organizer for OpenGov Chicago
- Chad W Pry
- Engineer at Groupon, Code Academy mentor, and all around charming fellow
- Nick Rougeux
- Designer and CSS wiz at Webitects


HTML document structure
HTML tags
Element/Tag Attribute
Special characters
Comments
Advanced Text Formatting
Validation
What are listed above are some of the common HTML tags I came across during my study
Here is a complete list of
HTML Standard


The {@link oaj.microservice.Microservice.Builder#manifest(Object)} method can be used to specify the contents or location of of the main
manifest file of the executable jar.
If you do not specify the location/contents of the manifest file, the microservice will attempt to resolve it through the following methods:
-
Looking on the file system for a file at "META-INF/MANIFEST.MF".
This is primarily to allow for running microservices from within eclipse workspaces where the manifest file
is located in the project root.
-
Using the class loader for this class to find the file at the URL "META-INF/MANIFEST.MF".
If you do manually specify the manifest file, you can pass in any of the following types:
- {@link oaj.utils.ManifestFile} - A pre-parsed manifest file.
- {@link java.util.jar.Manifest} - A pre-parsed manifest file.
- {@link java.io.Reader} - Containing the raw contents of the manifest.
- {@link java.io.InputStream} - Containing the raw contents of the manifest.
- {@link java.io.File} - File containing the raw contents of the manifest.
- {@link java.lang.String} - Path to file containing the raw contents of the manifest.
- {@link java.lang.Class} - Finds and loads the manifest file of the jar file that the specified class is contained within.
The manifest file can be retrieved using the the {@link oaj.microservice.Microservice#getManifest()} method which
provides an API for accessing manifest file entries.
This method returns an instance of {@link oaj.utils.ManifestFile} which extends from {@link oaj.collections.JsonMap} allowing
you to retrieve entries as any data types supported by that class.
| ManifestFile manifestFile = Microservice.getInstance().getManifest();
|
| String mainClass = manifestFile.getString("Main-Class");
| int myInt = manifestFile.getInt("My-Int", 123);
| boolean myBoolean = manifestFile.getBoolean("My-Boolean");
The manifest is also used for the {@link oaj.svl.vars.ManifestFileVar $MF} SVL variable.
| // $MF used in variable resolver.
| VarResolver var = Microservice.getInstance().getVarResolver();
| System.out.println(vr.resolve("The main class is $MF{Main-Class}"));
| // $MF used in annotation.
| @Rest(
| title="$MF{Application-Title}",
| ...
| )


ESRI, and DTIS, 20040101, Bay Area General Outline.Online Links:
- Server=tisent20; Service=port:5151; User=sfgis; Version=SDE.DEFAULT
This is a Vector data set. It contains the following vector data types (SDTS terminology):
The map projection used is Lambert Conformal Conic.
Planar coordinates are encoded using coordinate pair
Abscissae (x-coordinates) are specified to the nearest 0.001024
Ordinates (y-coordinates) are specified to the nearest 0.001024
Planar coordinates are specified in survey feet
The horizontal datum used is North American Datum of 1983.
The ellipsoid used is Geodetic Reference System 80.
The semi-major axis of the ellipsoid used is 6378137.000000.
The flattening of the ellipsoid used is 1/298.257222.
Sequential unique whole numbers that are automatically generated.
| Value | Definition |
|---|---|
| SAN FRANCISCO | |
| BAY AND OCEAN | |
| OTHER |
Coordinates defining the features.
ESRI, DTIS
415-554-0800 (voice)
415-554-0886 (FAX)
<EMAIL_ADDRESS>For use as background in web applications.
Are there legal restrictions on access or use of the data?
- Access_Constraints: None.
- Use_Constraints: None.
415-554-0800 (voice)
415-554-0886 (FAX)
<EMAIL_ADDRESS>Downloadable Data
415-554-0800 (voice)
415-554-0886 (FAX)
gis@sfgov.org


sog-helper
The library of helpers.
This library offers a lot of different useful helpers.
Navigation
Installation and Usage
The library can be loaded as a standalone script.
Install the library with npm install sog-helper
<script type="text/javascript" src="build/output/sog-helper.min.js"></script>
<script type="text/javascript">
sogh.blurry('div#container-id table tbody td:nth-child(6) a');
// Or
sogh.blurry([
'div#container-id table tbody td:nth-child(6) a',
'div#container-id table tbody td:nth-child(7)'
]);
</script>
Available Helpers
Below is a list of all available helpers:
Helpers
Blurry
This helper makes blurry hidden text. For instance it is necessary to hide all email address on the page.
example:
sogh.blurry('div#container-id table tbody td:nth-child(6) a');
// Or
sogh.blurry([
'div#container-id table tbody td:nth-child(6) a',
'div#container-id table tbody td:nth-child(7)'
]);
Camel Case
Convert any string to camelcase string.
example:
sogh.camelCase('user_name_and_email'); // return UserNameAndEmail
Sluggable
Convert any string to sluggable string.
example:
sogh.sluggable('user name and email'); // return user-name-and-email
Words
Convert string to words.
example:
sogh.words('user_name_and_email'); // return ['user', 'name', 'and', 'email']
License (MIT)
Copyright (c) 2020 Slave of God<EMAIL_ADDRESS>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.


Loading...
Transparency leads to trust
Vindow the marketplace where hotels and buyers create value
RFP Creation
Contract Management
Data Intelligence
Start My Trial
Hotels
Corporations, Non Profit & Associations
Event Planners
Government
Third Party Sourcing Agents
Start My Trial


FrameSequenceSource
to display Gfycat
's.GfycatPlayer
, instantiate actual player via MainPlayerFactory
class.GfycatPlayerFactory
.GfycatPlayer
is no longer needed in order to release resources and avoid memory leak.GfycatPlayerFactory
class.


Hello all,
I'm in the process of looking into wiring up all my lines to OpenEnergyMonitor. I noticed that the board on Git has 4 inputs (+the voltage input), as I have 30 lines I'm looking into hooking up more sensors per atmega. The Atmega328P has 8 ADC's, wouldn't it be possible to hookup 8 sensors?
Thanks!
Re: 8 sensors per board
It would. Are you looking to manufacture your own PCB?
Re: 8 sensors per board
Yeah, probably I'll use the one from here as a reference and post the results. I'm doubting how I should handle the transfer of data, it will be all wired so maybe I2C or SPI directly to a Rpi.
If I can connect 8 per atmega I'll have a max of 32 sensors, I counted again and saw I have 27 lines now, but I'll add 2-3 soon for the basement.. Then 30 sensors + 1 voltage reference would be perfect.
Re: 8 sensors per board
The Atmega328P has 8 ADC's
If only that were true! Alas, it has an 8-pin wide MUX on front of its single ADC. So while it's true you can sample 8 different signals, you can only do so at 1/8th of the sample rate at which you could sample a single signal. Whether or not that matters depends on the signals you're sampling, and how accurate you want to be.
Re: 8 sensors per board
Well, it has to be fast enough for OpenEnergyMonitor :P I studied the source yet, so I'm not sure what the minimum sample rate should be (for 60Hz lines).
Re: 8 sensors per board
Your minimum sample rate will be dictated by Nyquist and the highest harmonic that you consider significant, e.g. if you consider the 5th harmonic to be the limit beyond which the energy contribution is not significant, then you need a minimum of 10 samples per cycle. You might just be able to measure one voltage and 7 currents per cycle at that rate.
That is on the basis that the default sketch as pre-loaded in the emonTx V3 records a little over 50 sample pairs (voltage & current) per cycle, which will equate to around 42 at your faster mains frequency. That includes the conversion time and the per-sample processing, it does not include the final maths to calculate the averages nor sending the data. The PLL sketches go somewhat faster.
Re: 8 sensors per board
I see, might be a challenge. I'll be easier off just buying a few more 328's to create the default setup.
Re: 8 sensors per board
And you usually want to sample a whole lot faster than that to leave head room for the anti-aliasing filter. All ADCs require that you filter out anything higher than half your sampling frequency in order to avoid aliasing. Even if you can legislate away higher frequencies in the primary current signal, by the time the signal arrives at your ADC it's likely to have picked up some high frequency noise, that will cause aliasing if left unchecked.
If you want to use a simple first order filter, then half your sampling rate needs to be way higher than your highest frequency of interest, otherwise the filter will also be attenuating the stuff you do want to measure. The only way you can get away with sampling at just twice the rate of the highest frequency of interest is to come up with a brick-wall filter, that filters everything just above your frequency of interest and nothing at or below it.
Re: 8 sensors per board
Am I missing something, or (unless you need to measure all currents simultaneously for some reason) couldn't you just sample a subset of the current inputs at one time, and then do another subset next time around?
Also - yesman - if you're looking at possibly producing your own board, then did you consider the ATmega32U4? 12 Analogue inputs, and a better ADC too (plus simpler analogue circuitry as per http://openenergymonitor.org/emon/node/2542 ) ?
Cheers,
Tim.
Re: 8 sensors per board
yesman85
does this site help you?
http://boredomprojects.net/index.php/projects/home-energy-monitor
Re: 8 sensors per board
I did see that one yeah, I was thinking about using a mega, but cost wise hooking up 30 lines I would be better off with a few cheaper atmega's instead of ARM's.
Re: 8 sensors per board
Tim:
"Am I missing something,..." No, but I thought that was too obvious to need to be mentioned, but maybe not.
Re: 8 sensors per board
I haven't gone very deep in it yet, was contemplating of using a 16bit ADC but they are pricy and almost non existent on easy to prototype chips.
I'm not very much into the analog circuits but why would the 32U4 have a better ADC than a simple 328?
Re: 8 sensors per board
> why would the 32U4 have a better ADC than a simple 328
Err, because Atmel decided they wanted it to?
http://openenergymonitor.org/emon/node/2542
Re: 8 sensors per board
I'm not very much into the analog circuits but why would the 32U4 have a better ADC than a simple 328?
The actual ADC is identical in all the AVR based devices... 10 bits, same clocking options/constraints, so it's a bit misleading to say it's a better ADC. Where they do differ is in all the stuff they stick around them. The only differences I know of are:
Then you just need to check the "features" list on the front page of datasheet to see which of those options any particular device has.
If you really want a better ADC, then move to the SAM (ARM rather than AVR CPU architecture) based devices. They're 12-bit resolution and 2 orders of magnitude faster... roughly 1usec conversions Vs 100usec conversion. Plus most of them have two ADCs, each with their own input MUX, so you can genuinely have two conversions taking place at once. If you're building your own board, I think the SAM based devices are actually cheaper than the AVR devices these days.
Re: 8 sensors per board
> it's a bit misleading to say it's a better ADC
Yep, fair enough, strike my last comment then (which is being held for moderation cos it has a link in it).
So hopefully it would be correct to say that vs the 328, the 32U4 offers more inputs, and more helpful onboard analogue circuitry which should result in better performance (e.g. sensitivity) whilst retaining a simple PCB layout, and also losing one of the calibration steps.
Re: 8 sensors per board
the 32U4 offers more inputs
Yep.
more helpful onboard analogue circuitry which should result in better performance (e.g. sensitivity)
Are you referring to the programmable gain op-amp, or the extra bandgap voltage (2.56V). Presumably anything you can do with the 2.56V you can do with the 1.1V. When you're using either of those, if you hang anything other than a cap off AREF, you'll get lousy results. The programmable gain op-amp opens up a world of auto-ranging possibilities, as well as a mine field of calibration issues.
losing one of the calibration steps
Not sure what you're referring to there? Which step?
Re: 8 sensors per board
But increasing the amount of inputs would only result in a slower reading per channel right, the 32U4 is still only 16Mhz so processing would be at the same rate.
Re: 8 sensors per board
You need to compare the clock Vs Vcc graph in the datasheets, but a quick look suggests:
At 5V, the 32U4 can run at 16MHz while the 328 can run at 20MHz.
At 3.3V the 32U4 can run at 10.66MHz and the 328 can run at 13.33MHz
so the 32U4 is actually slower. All that is CPU speed, not ADC speed.
The ADC likes a clock anywhere between 50KHz and 200KHz, and you can even exceed that if you're feeling adventurous. There's a divider that lets you divide the system clock by a power of 2 to generate the ADC clock. So a typical 16MHz Arduino uses a divider of 128, which gives the ADC a 125K clock. Because I run my ATMega2560 at 3.3V, I can only clock it at 8MHz, so I use an ADC divider of 64. So my CPU instructions run at half the speed of a 16MHz Arduino, but my ADC conversions run at the same rate. With the most common config, an ADC conversion takes 13 clocks, which at 125K is 104usecs.
Re: 8 sensors per board
So actually the 32U4 won't be a good choice because there won't be enough time for emon to process all inputs in a fashionable time right?
Re: 8 sensors per board
You can trade off sampling rate with accuracy. As TimSmall said above "couldn't you just sample a subset of the current inputs at one time, and then do another subset next time around". With that approach there's pretty much no upper limit to how many circuits you can monitor, but the more of that you do, the less accurate each will be.
"Good, fast, cheap... pick any two" as they say.
Re: 8 sensors per board
> You can trade off sampling rate with accuracy. [...] there's pretty
> much no upper limit to how many circuits you can monitor, but
> the more of that you do, the less accurate each will be
Sorry, I'm having some trouble getting my head around this - could you expand on that a bit? Currently the OEM Atmel code seems to do this in a loop:
1. Sample inputs
2. Calc and output
3. Go to sleep
Where the duration of step 3. is circa 10 times the duration of step 1. and step 2.
If you changed that to:
1. Sample current transformers group A
2. Calc and output current transformers group A
3. Sample current transformers group B
4. Calc and output current transformers group B
5. Go to sleep
... then why would you lose accuracy by doing the measurements sequentially?
I can see that if you're doing something like 3 phase power, you want to sample all 3 phases at the same time, but other than that?
Cheers,
Tim.
Re: 8 sensors per board
Yes, fair point, I guess I was talking more generally. Unless you're trying to conserve batteries, I'm of the belief that you should always be sampling continuously, and in that case the more inputs you're trying to sample, the less frequently you'll be sampling them.
If you're already sleeping rather than sampling, then you've got nothing to lose (except maybe battery power?).
Re: 8 sensors per board
This has already been discussed a few times. If you consider loads with a high enough switching frequency (oven plates, flatting irons, ON/OFF or PWM regulated heaters in general) your measuring results can get awfully wrong.
Re: 8 sensors per board
Can multiple ADS1015's be added via i2c so that more sampling could be done? The 1015 has a pretty high sample rate.
Re: 8 sensors per board
The 1015 is quite expensive and only has 4 inputs, I'm experimenting now with an external MCP3208, 12 bits and 100k samples.
Re: 8 sensors per board
I have ben using that as a piggy-back on an EmonTx since more than a year. Works very nicely, sampling time is ~8us per channel. But you will still have the problem of lacking processing power with more than ~10 inputs at a reasonable sampling rate.
Re: 8 sensors per board
I can see that instantaneous readings will be inaccurate, if the power isn't continuous sampled.
Over a 24 hour period has anyone done any experiments to see what the accuracy loss is (e.g. for a house) if sampling every 10 seconds vs continuously?
If I had to hazard a guess, I'd have thought it's not likely to be out by more than a couple of % for my house.
Re: 8 sensors per board
Does it take much of the CPU load off if you measure current only?
(Thinking to myself about sampling RMS voltage once a min, or maybe only once an hour? Enough systems use a fixed 240/120 that it can't be that bad.)
Re: 8 sensors per board
If you use rms voltage, you'll only have apparent power (VA), not real power (which is what you get charged for), and you will have errors if the system voltage fluctuates. Long-term, the errors will even out and can be taken care of with careful calibration against your supplier's meter. In the short term, they might get significant depending of course on your loads and the supply.
Re: 8 sensors per board
Yesman, I am interested in this same project. I have a standard US 200A service and would like to monitor all of my branch circuits to figure out where my power usage is coming from. I have done a lot of research and the MCP3208 seems like a great option. If you have anything to share, it would be great!
I have found this board:
https://shop.smartenergygroups.com/store/show/segmeter_v25
It seems like a well thought out design, but does not take voltage into consideration...it uses a fixed constant for voltage. I'm considering using that design and using one of the 8 channels for voltage readings...that would give 7 CTs and 1 voltage per board...I'll probably need 3 or 4 of them to measure all of my circuits, but I'm OK with that.
Anyways...interested to hear of any progress you have made.


Registration Form
Name :
Last Name
Events
Select
IOT
Machine Learning
App Development
Pro shows
Dance Workshop
Block Chain
Robotics
Email Address
Institute
Phone no:
Address
Agreed to terms and conditions


Table of Contents - Locuser
Pages
Classes and Modules
- Locuser
- Locuser::AddressFormatter
- Locuser::AddressedLocation
- Locuser::City
- Locuser::Configuration
- Locuser::Country
- Locuser::County
- Locuser::Engine
- Locuser::Locality
- Locuser::Location
- Locuser::State
- Locuser::StreetAddress
Methods
- ::config — Locuser::Configuration
- ::configure — Locuser::Configuration
- ::new — Locuser::AddressFormatter
- ::new — Locuser::Configuration
- ::primary_key — Locuser::Locality
- ::reset — Locuser::Configuration
- #address — Locuser::StreetAddress
- #city — Locuser::StreetAddress
- #city= — Locuser::StreetAddress
- #contains? — Locuser::City
- #contains? — Locuser::Country
- #contains? — Locuser::Locality
- #contains? — Locuser::State
- #country — Locuser::StreetAddress
- #country= — Locuser::StreetAddress
- #county — Locuser::StreetAddress
- #county= — Locuser::StreetAddress
- #do_initialize — Locuser::StreetAddress
- #format — Locuser::AddressFormatter
- #full_address — Locuser::StreetAddress
- #get_entity_type — Locuser::AddressedLocation
- #get_entity_type — Locuser::City
- #get_entity_type — Locuser::Country
- #get_entity_type — Locuser::County
- #get_entity_type — Locuser::Locality
- #get_entity_type — Locuser::State
- #includetypeinname? — Locuser::County
- #includetypeinname? — Locuser::Locality
- #latitude — Locuser::Location
- #longitude — Locuser::Location
- #set_address — Locuser::StreetAddress
- #state — Locuser::StreetAddress
- #state= — Locuser::StreetAddress
- #street1 — Locuser::StreetAddress
- #street1= — Locuser::StreetAddress
- #street2 — Locuser::StreetAddress
- #street2= — Locuser::StreetAddress
- #typeifiedname — Locuser::Locality
- #use_country — Locuser::AddressFormatter
- #use_country= — Locuser::AddressFormatter
- #valid_parent_types — Locuser::AddressedLocation
- #valid_parent_types — Locuser::City
- #valid_parent_types — Locuser::Country
- #valid_parent_types — Locuser::County
- #valid_parent_types — Locuser::State
- #zip — Locuser::StreetAddress
- #zip= — Locuser::StreetAddress


More Recipes
Home
Recipes
About
Signup
Signin
Home
Recipes
About
Signup
Signin
menu
Signin
account_circle
Username or Email
lock
Password
or
Signup


I'm a full stack web developer with a team mentality. I love tackling new challenges and finding efficient solutions. I believe programming is a great way to use my creative and analytic skills to solve meaningful problems. My previous experience as an EMT has helped shaped the way I approach problems especially in stressful situations.


WITNESS LIST Pensions & Investments Committee March 17, 2005-8:00A HB 1579 For: Floyd, Beaman (Texas Association of School Adminisitrators) Lee, Tim (Texas Retired Teachers Association) Olney, Pat (Self) Sander, Charles (Self) Against: Kelly, Jack (Texas State Teachers Association) On: Fickel, Ann (TX Classroom Teachers Association) Jung, Ronnie G. (Teacher Retirement System of Texas) Quinzi, Patty (Association TX Professional Educators) Raab, Ted Melina (Texas Federation of Teachers) Registering, but not testifying: For: Bosse, Milton (Self) Hise, Zora Mae (Self) Rogers, Tom (TRTA) Sayers, DeEtta L. (Self) Sayers, Russell E. (Self) Scholtz, Annie B. (Self) Sweat, Flossie (Self) Wallace, Margaret (Self) Wiley, Novella (Self) HB 1594 For: Miller, Ted (Retired State Employees Assn.) Morales, Johnnie (Self and Retired State Employees Association (RSEA)) White, John R. (Retired State Employees Assoc) Against: O'Connor, Caroline (Texas State Employees Union)


menu
Your Files
home
Home
assignment
Your Todos
note
Your Notes
event
Your Events
backup
File Upload
calculate
Calculator
alarm
Clock
brightness_6
Switch Theme
Upload File
{% for file in files %}
{{ file.file_name }}
Download
Delete
{% endfor %}
Upload File
×


Ceperunt in ea Manus
ABOUT
LOGIN
NGO LOGIN
x
Login
Don't have an account?
Register
x
NGO Login
Don't have an account?
Register
THE FOUR STOOGES
EVERYONE HAS A SECOND CHANCE
SIGN UP
Submit
Previous
Next


Preparation time
30 mins to 1 hour
Cooking time
30 mins to 1 hour
Serves
Serves 4
Dietary
For the ratatouille tarts, roll the puff pastry out on a lightly floured work surface until it is 3mm thick. Line four 10cm/4in wide, 2.5cm/1in deep fluted loose-bottomed tart tins with the pastry, pressing gently into the edges.
Prick the base of the pastry several times with a fork. Place the tart cases in the fridge to rest for at least 30 minutes.
Preheat the oven to 190C/375F/Gas 5.
When the tart cases have rested, line each with baking parchment and fill with ceramic baking beans. Place the tart cases on a baking sheet and bake in the preheated oven for 15 minutes. Remove the parchment and baking beans and return the cases to the oven for another ten minutes. Gently press the pastry down if it rises in the centre.
Bake the tart cases until the pastry is cooked through and golden-brown. Remove the tart cases from the oven and allow to cool slightly before carefully removing them from the tins.
For the ratatouille, heat a pan until hot, then add the olive oil, onion and peppers and fry for 2-3 minutes.
Add the garlic, aubergine and courgette and fry for a further 2-3 minutes, stirring occasionally. Add the tomatoes and cook for a further minute. Add the basil leaves and season, to taste, with salt and freshly ground black pepper.
For the basil hollandaise, heat the butter in a heavy-based saucepan until foaming. Heat the lemon juice and vinegar in a separate small non-reactive pan until just boiling.
Place the egg yolks into a food processor with the salt and blend. With the motor running, add the hot lemon and vinegar mixture. Slowly, with the motor still running, add the melted butter in a thin, steady stream, until it is all incorporated and the sauce has thickened.
Place the sauce into a bowl, add the basil and season with a little salt, if needed, and the freshly ground black pepper.
For the poached eggs, crack an egg each into a small bowl. Heat a small pan of water over a medium het until just simmering. Swirl the water with a wooden spoon to create a vortex, then carefully drop the eggs in, two at a time.
Cook gently for 2-3 minutes, or until cooked to your liking. Carefully remove with a slotted spoon and drain onto kitchen paper.
To serve, place a tart shell into the centre of each plate. Divide the ratatouille equally among the tart cases. Top each with a poached egg and a spoon over the basil hollandaise.


Major rail disruption
There's still delays and disruption on rail services between Wolverhampton and Birmingham due to overhead line problems at Dudley Port. BBC Travel has more details.
Live Reporting Birmingham & Black Country
Today
Major rail disruption
There's still delays and disruption on rail services between Wolverhampton and Birmingham due to overhead line problems at Dudley Port. BBC Travel has more details.
Malala: Shot for going to school
Pakistani schoolgirl Malala Yousafzai first came to public attention in 2009.
Three years later, in October 2012, she was shot in the head by a Taliban gunman because of her campaign for girls' education. By then she had become well known in Pakistan, but that one shocking act catapulted her to international fame.
Swimming baths theft
Can you help West Midlands Police identity this man following the theft of £200 at Stechford Swimming Baths?
CCTV video footage shows a man rifling through a purse after its owner had accidentally left it in a faulty locker when transferring her belongings to another one on 4 September.
3 new articles


Post Office identity documents
You must take these 3 documents (originals, not photocopies) to the Post Office after you have completed the rest of your application:
You must take these 3 documents (originals, not photocopies) to the Post Office after you have completed the rest of your application:


|
ECS160Android
FortNitta Android platform team
|
Mode that shows who won. More...
Public Member Functions | |
| CGameOverMode (int winner_id) | |
| void | Enter (CGame game) |
| Layouts the message and sets up the message rendering. More... | |
| void | Leave (CGame game) |
| Cleans up the message rendering. More... | |
| void | Update (CGame game) |
| Moves back to main menu if main player clicks. More... | |
| void | Draw (CGame game) |
| Draws the 3D map and the message. More... | |
| Public Member Functions inherited from game.modes.CMapMode | |
| void | dispose () |
| void | Update (CGame game) |
| Same as base class. More... | |
| void | Draw (CGame game) |
| Draws animations and cannonballs. More... | |
| Public Member Functions inherited from game.modes.CGameMode | |
| void | Enter (CGame game) |
| Resets the timer. More... | |
| void | Update (CGame game) |
| Updates the players, cannonballs, animations, and timer. More... | |
| void | Draw (CGame game) |
| Draws the timer. More... | |
| void | Leave (CGame game) |
| Does nothing. More... | |
| void | WillEnter (CGame game) |
| Does nothing. More... | |
Protected Member Functions | |
| final void | CacheMessage (CGame game) |
| Stores the winner from multiplayer mode /* protected int DWinnerID;. More... | |
| final void | DrawMessage (CGame game) |
| Draws the message. More... | |
| Protected Member Functions inherited from game.modes.CMapMode | |
| final void | Draw2D (CGame game) |
| Draws the terrain and construction maps in 2D. More... | |
| final void | Draw3D (CGame game) |
| Draws the terrain and construction maps in 3D. More... | |
| Protected Member Functions inherited from game.modes.CGameMode | |
| final void | DrawAnimations (CGame game, Vector2 position) |
| Draws the animations. More... | |
| final void | DrawCannonballs (CGame game, Vector2 position) |
| Draws the cannonballs. More... | |
| final void | DrawTextBackgroundFrame (CGame game, Vector2 size) |
| Draws the floor tiles of main player to cover the specified area. More... | |
| final void | DrawBrickFrame (CGame game, Vector2 position, Vector2 size) |
| Draws the brick border for text. More... | |
| final void | DrawMortar (CGame game, Vector2 position, Vector2 size) |
| Draws the mortar for text. More... | |
| final void | DrawBrickOutline (CGame game, Vector2 position, Vector2 size) |
| Draws the outline on the brick for border. More... | |
| final void | DrawTargetCursors (CGame game) |
| Draws the player cursors using the target tileset. More... | |
Protected Attributes | |
| CUIElement | DRootElement |
| Makes a new game over mode and sets up UI. More... | |
| CStackElement | DStackElement |
| The element used to stack the labels for the message. | |
| int | DWinnerID |
| Stores the winner from multiplayer mode. More... | |
| boolean | DIsMultiplayer |
| Whether this is a multiplayer game over. More... | |
Mode that shows who won.
|
protected |
Stores the winner from multiplayer mode /* protected int DWinnerID;.
/** Caches the message into the message pixmap
| game | The game to cache for |
| void game.modes.CGameOverMode.Draw | ( | CGame | game | ) |
Draws the 3D map and the message.
| game | The game drawing |
|
protected |
Draws the message.
| game | The game drawing |
| void game.modes.CGameOverMode.Enter | ( | CGame | game | ) |
Layouts the message and sets up the message rendering.
| game | The game entering |
| void game.modes.CGameOverMode.Leave | ( | CGame | game | ) |
Cleans up the message rendering.
| game | The game leaving |
| void game.modes.CGameOverMode.Update | ( | CGame | game | ) |
Moves back to main menu if main player clicks.
| game | The game updating |
|
protected |
Whether this is a multiplayer game over.
|
protected |
Makes a new game over mode and sets up UI.
The root UI element used to draw message
|
protected |
Stores the winner from multiplayer mode.


Resume
Objective
To obtain an internship in Computer Science or Software Engineering for the Summer of 2007.
Education
B.S. Science Computer Science and Software Engineering May ’08, Major GPA:3.35
- Rose-Hulman Institute of Technology, Terre Haute, IN
- Double Major Computer Science / Software Engineering
- Study Abroad at Fachhochschule Ulm – Ulm, Germany – Spring Term 2006
Related Courses:
- Design and Analysis of Algorithms
- Aspect Oriented Programming
- Database Systems
- Discrete and Combinatorial Algebra I, II
Applicable Project Work:
- Team leader in Database Systems, Software Requirements and Specifications, and others
- Independent Study creating XSLT extensions for an XML-based CMS
- Current project integrating Amazon s3 services into SiteMason CMS
Skills
- Programming Languages (ordered by experience):
- Java, C#, SQL, AspectJ, PHP, Ruby
- Web-based Languages:
- XML, XSL, (X)HTML, CSS, JavaScript
- Operating Systems:
- Linux (Gentoo), Windows
- Software:
- Photoshop, Eclipse, MS Visual Studio 2005, MS Office Suite, SVN
Selected Experience
-
Rose-Hulman Ventures,
Winter 2006 - Present
Quality Assurance Team Leader – DesAcc Project,
Terre Haute, Indiana
- Lead a five member team in testing and documenting the DesAcc Dicom Access ExplorerTM Photoshop and Acrobat plugins
-
ACM SIGCSE/ItiCSE,
Winter 2005- Winter 2006
ACM SIGCSE/ ItiCSE Registration Team,
Terre Haute, Indiana
- Implemented printing capability for all badges, tickets, and receipts within a stand-alone C# application
- Development of a PHP based conference registration system
- Assisted in the production and distribution of conference registration materials on location at the SIGCSE conference
-
SiteMason,
Summer 2005
Intern,
Nashville, TN
- Made XSLT extension functions and stylesheets for use with the SiteMason CMS
- Debugged existing XSL stylesheets
- Provided developer technical support
-
Rose-Hulman Institute of Technology, CSSE Department,
Fall 2004 – present
Teaching Assistant,
Terre Haute, IN
- Assisted in class for Database Systems, and Software Development I, II, II honors, and III
- Administered lab hours for various software development courses
- Graded assignments and assessed projects written in Java
-
CentreSource,
Summer 2004
Intern,
Nashville, TN
- Developed XSLT templates
- Converted and maintained websites on the SiteMason CMS
- Updated XSL stylesheets and provided CMS support for Trevecca Nazarene University
Activities & Honors
- Dean’s List - Fall Term ’04, Fall Term ‘06
- Member Alpha Omicron Pi – Delta Xi Chapter
- Member Society of Women Engineers 2004-present
- Member IEEE, 2004-present
- Attended InWIC 2006 and MidWIC 2006
- Member ACM SIGGRAPH & ACM SIGCS, 2005-present
- Student volunteer at SIGGRAPH 2005 and 2006
- Secretary of Rose-Hulman Computing Society, 2005-6


How characters change. A series of perfect timed gifs in which characters walk through different scenes
High fashion and nature come together in what I think should be the next eye-catching beauty campaign
tumblr blog dedicated to gifs and graphics on which original posts have garnered 2 million reblogs and likes


This text should be bold because it's inside <b> tags
And this text should be italic because it's inside <i> tags
What ? Wait or is it the opposite ?
Teacher !? This doesn't work !


Crypto Price Analysis & Overview: Bitcoin, Ethereum, Ripple, DogeCoin, Fusion
by Jonathan BergerBitcoin
This week the trend is clearly bearish. Bitcoin price lost support at $8,500 and it corrected to the area around $8,000. If support here fails, the price could continue going down to $7,450. The attempts to break up from the downward trend should also be considered. The resistance is at $8,200. Previously, the support line that we marked in October was broken and it was quite sharp. The targets are based on previous breakouts of this trend.
Ethereum
Against the USD, ETH lost support at $180 and is pulling down to $170. It’s hard to tell if that’s the support compared to the dip that we saw in October when the price dropped all the way down to $153. These levels must be taken into account. The resistance is at $180 around the 50MA.
Against Bitcoin, the price behaves differently and the trend is maintained and it climbs steadily. It kept the support above the 50MA levels and has found resistance around 0.022BTC. If it breaks out, it will be interesting to see how the market responds but it is too early to predict and 0.023BTC should break quickly as well.
Ripple
Against the USD, the trend is bearish and all support levels broke down easily. Currently, the support is at 24 cents and resistance is at 25 cents. The trend is downward and we might check the support from September at 22 cents. Usually, the behavior of the market is to reaffirm support and it’s not necessary to go all the way down there but it should be considered. This is how most of the markets behave if resistance levels are not broken.
Against BTC, the price during the week hovers around 3000SAT which is the support in this range. Whenever there is an attempt to pump up the returns, it happens within this range. The resistance remains around the 200MA line in the bigger picture. In shorter-terms, the resistance is at 3250SAT around the 50MA.
DogeCoin
Most of the trading happens against Bitcoin and it’s easier for us to analyze and understand the chart.
Technically, things are looking interesting. The weekly graph sees support at 27SAT from where the price is trying to break up. The RSI continues its positive trend but the price is no longer rushing to break through as we’ve seen it before. If the resistance around 34SAT breaks down, there is no resistance all the way up to 50SAT. If we look at the history on the chart, it appears that the price has lost its momentum quickly.
Fusion
Against the USD, the price has increased by 300%, making it the best performing altcoin since the beginning of October. The resistance is at $1.80. The support maintained the last correction at $1.10 but the trend is too sharp and the further it goes, the more volatility we get.
Against BTC, the trend is also quite sharp and the price is climbing. The resistance at 0.00018BTC was breached in the last day and now this area is turning into support in the range. Another thing that should probably be considered is a correction to the 0.618 Fibonacci levels that come at around 0.00010BTC. It might look a bit scary but that’s the technical landscape that’s shaping up after the sharp increase. The short-term resistance is at 0.00022BTC.
Against Ethereum, which is where most of the trading takes place, the price peaked. However, analysis is difficult to find in TradingView. Trading began on decentralized exchanges and that’s why we attached the chart from CoinMarketCap to get a clearer picture of what’s happening with the cryptocurrency.
The orange color line is against Ethereum.
Click here to start trading on BitMEX exchange and receive 10% discount on fees for 6 months.
Disclaimer: Information found on CryptoPotato is those of writers quoted. It does not represent the opinions of CryptoPotato on whether to buy, sell, or hold any investments. You are advised to conduct your own research before making any investment decisions. Use provided information at your own risk. See Disclaimer for more information.
Cryptocurrency charts by TradingView.
Technical analysis tools by Coinigy.


XHY
XHY
Back to Home
Work
About
Contact
01
www.xhy.im
02
www.osbabyroom.cn
03
elite.ioslide.com
See project
See project
See project


Reports ternary conditional expressions that are nested inside other conditional expressions. Such nested conditionals may be very confusing. "Elvis" expressions are counted as conditionals for purpose of this inspection.


| Methods' Summary |
| getDisplayString |
Returns a string (number or name to display) matching the
given code constant.
|
| Methods' Details |
getDisplayString
| string |
| getDisplayString( |
[in] long |
nCalendarDisplayCode, |
| [in] short |
nNativeNumberMode ); |
- Description
- Returns a string (number or name to display) matching the
given code constant.
Note that the string returned depends completely on the
locale's calendar. It is not predictable if the string will be
numeric or a name, or if in case it retuns a numeric string
how many digits that will have. For example, a short year
display string will normally be two digits with a Gregorian
calendar, but with a Jewish calendar it will have three
digits.
- Parameter nCalendarDisplayCode
- One of CalendarDisplayCode
- Parameter nNativeNumberMode
- One of NativeNumberMode.
This argument designates the basic transliteration mode as
if specified for the year representation. However, depending
on the locale, different conversions for year and month, for
example, may be chosen internally. This is beyond the user's
control and depends on locale specific conventions of how a
date is assembled.
|
|
Top of Page
Copyright © 2013, The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache, the Apache feather logo, Apache OpenOffice and OpenOffice.org are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.


{{! "Wormholes" tab -------------------------------------------------------------------------------------------- }}
|
Leads to |
Size |
|
Mass total |
Mass individual |
Mass regeneration |
|
Sig strength |
{{#wormholes}}
| {{name}} |
{{security}} |
{{#size}}{{size.label}}{{/size}} |
{{#formatStatic}}{{static}}{{/formatStatic}} |
{{#massValue}}{{massTotal}}{{/massValue}} |
{{#massValue}}{{massIndividual}}{{/massValue}} |
{{#massValue}}{{massRegeneration}}{{/massValue}} |
{{#formatTime}}{{maxStableTime}}{{/formatTime}} |
{{#sigStrengthValue}}{{signatureStrength}}{{/sigStrengthValue}}
|
{{/wormholes}}
{{! "Statics" tab ---------------------------------------------------------------------------------------------- }}
{{#staticsMatrixHead}}
{{#.}}
| {{.}} |
{{/.}}
{{/staticsMatrixHead}}
{{#staticsMatrixBody}}
{{#.}}
|
{{#label}}
{{.}}
{{/label}}
|
{{/.}}
{{/staticsMatrixBody}}
{{! "Jump distance" tab ---------------------------------------------------------------------------------------- }}
| Ship |
Mass |
Base Distance |
Distance to jump range |
|
|
|
min |
max |
| Covert Ops Frigate |
{{#massValue}}1280000{{/massValue}} |
5.5 km |
0 km |
5.5 km |
| Plated T3 Cruiser |
{{#massValue}}14300000{{/massValue}} |
6.9 km |
0 km |
6.9 km |
| Plated Bhaalgorn |
{{#massValue}}101000000{{/massValue}} |
8.8 km |
0 km |
8.8 km |
| Orca |
{{#massValue}}250000000{{/massValue}} |
10.1 km |
0.1 km |
10.1 km |
| Average Carrier |
{{#massValue}}1120000000{{/massValue}} |
13.5 km |
3.5 km |
13.5 km |
| Average Dreadnought |
{{#massValue}}1240000000{{/massValue}} |
13.8 km |
3.8 km |
13.8 km |
The new base distance would scale as high as ~14km from the wormhole for the largest ships, and the random factor for each jump would range from 2km (for a fresh wormhole) to 5km (for a crit wormhole) in either direction.
The distance from a wormhole that ships must be within to jump will remain 5km as always.
By CCP Fozzie | Mass-Based Spawn Distance after Wormhole Jumps


Finding distance and travel duration made easy
Starting Address
Final Destination
Mode of Travel:
Choose from the list...
Driving
Walking
Bicycling
Transit
Duration :
Distance :
Sorry! the distance couldn't be calculated, too long route!


FEATURED PRODUCTS
The New 2020 KTM
see more
Simpson Outlaw Bandit Motorcycle Helmet
$449.95
Redline Men's Orange Stripe Cowhide Leather Motorcycle Jacket, Black M-3200
$299.99
BEST DEALS
Cafe Cruiser 1150
was
$4,249.99
now
$2,249.99
Custom-Made California Gold Helmet
was
$150.00
now
$79.99
Honda CBR600RR
was
$10,149.99
now
$6,999.99
SUBSCRIBE TO EMAIL
got mail? sign up for road warriors newsletter.REVIEWS
Road Warriors has the best stuff!
written byCatherine McPhee
I got a new BMW 3100 and matching gear from them at a great deal and look forward to good
weather so I go out and take advantage of these quality products!
Love my Redline Men's Orange Stripe jacket!
written byJimbo Webber
Bought the featured jacket, Redline Men's Orange Stripe Cowhide Leather Motorcycle Jacket, Black M-3200
and I absolutely love it. It is light enough to be worn in the summer and warm enough for winter
as well!
I love this place! Shipping takes longer than expected but super high quality products.
written byFrancis Jacobson
Road Warriors has the best products at the best price! I hit up the recent sale they were having
on accessories and I was very impressed with what I got for the price. Shipping took a whole month
when it was only suppose to take 2 weeks that why I gave them a 4 out of 5 star rating but
in the end I love this place and would buy again.


Login
Classes
Personal training
Registration
My Products
Profile
Logout
Login
Classes
Personal training
Registration
My Products
Profile
Logout


Smartsheet Picker for AngularJS
This is page is an example of how to implement the Smartsheet Picker directive for AngularJS.


Optional function to generate cryptographically secure random bytes
Decrypts data encrypted with encryptContent
with the
transit private key.
encrypted content.
the hex string of the ECDSA private key to use for decryption. If not provided, will use user's appPrivateKey.
decrypted content.
Encrypts the data provided with the app public key.
data to encrypt
Stringified ciphertext object
Calculate the base64 encoded string length for a given input length. This is equivalent to the byte length when the string is ASCII or UTF8-8 encoded.
Generated using TypeDoc
@stacks/encryption
Encryption functions used by Stacks.js packages.
Installation


Lego Builder is my first BabylonJS demo, intended as a proof a concept for one of Versusmind's projet.
Version V1 is a desktop application where you may build Lego constructions. Bricks are created procedurally and some JSON saving is implemented.
Version VR is a mobile one, playable in VR using a Google Cardboard compatible phone. This time, saving is made using local-storage, no files needed.


--- layout: post title: my first post author: "hj_yeah" tags: - test tag ---
This is my first post.Click the link below to go back to index:


Javascript and canvas tech demos
Balls in a Box
Particle Fountain
Fireworks
Fire Automata
Conway's Game of Life
Animated Block Heightfield


Hello, Tizen Application API!
NOTE: Application API must be run in an installed application!
Input test app id:
Application information:
Applications ID:
Input test app context:
Application context information:
Running applications context:
Current application:
Input launch app ID:
Result:
Input launch app ID:
Input operation:
Input uri:
Input mime:
Input category:
Result:
Input operation:
Input uri:
Input mime:
Input category:
Result:
Input kill app context:
Result:
Result:
Input app ID:
Application meta data:


com.ibm.webest.processing.impl.calculation
Class PutnamCalculationService
java.lang.Object
com.ibm.webest.processing.impl.calculation.PutnamCalculationService
- All Implemented Interfaces:
- PutnamCalculationServiceLocal, PutnamCalculationServiceRemote
@DeclareRoles(value={"admin","estimator","manager"})
@RolesAllowed(value={"admin","estimator","manager"})
public class PutnamCalculationService
- extends java.lang.Object
- implements PutnamCalculationServiceLocal, PutnamCalculationServiceRemote
PutnamCalculationService Does calculations within the Putnam model
- Author:
- Andre Munzinger, David Dornseifer
|
Method Summary |
PutnamResult |
calc(float sloc,
float pp,
COCOMOResult cocomoResults)
calc Mainprocess of Putnamcalcprocess This method calls all other
functions who calculate the estimates |
float |
getE(int sloc)
getE Helps to get the right E-Value from DB |
| Methods inherited from class java.lang.Object |
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
PutnamCalculationService
public PutnamCalculationService()
getE
public float getE(int sloc)
throws PutnamCalcException
- Description copied from interface:
PutnamCalculationServiceRemote
- getE Helps to get the right E-Value from DB
- Specified by:
getE
in interface PutnamCalculationServiceRemote
- Parameters:
sloc
- Sourcelines of code
- Returns:
- the parameter e
- Throws:
PutnamCalcException
- Thrown if - Sourcelines of code are zero or less - Exception
in the calculationFacade
calc
public PutnamResult calc(float sloc,
float pp,
COCOMOResult cocomoResults)
throws PutnamCalcException,
EntityNotFoundException,
DatabaseConnectionException
- Description copied from interface:
PutnamCalculationServiceRemote
- calc Mainprocess of Putnamcalcprocess This method calls all other
functions who calculate the estimates
- Specified by:
calc
in interface PutnamCalculationServiceRemote
- Returns:
- Endresult of the Putnam-Calculation
- Throws:
PutnamCalcException
- Thrown if - Sourcelines of code are zero or less - PP is zero
or less - COCOMOResult is null
EntityNotFoundException
- If there was anexception in the calculationFacade
DatabaseConnectionException
- If there was a problem in the DB


Exploring The Medieval Treadwheel Crane In Gdansk, Poland
by Geoffrey MorrisonTransporting goods by boat has been the backbone of the world’s economy for centuries. Massive cargo ships are unloaded by skilled dockworkers using skyscraper-sized cranes. But how did ships disgorge their goods in the days before steel girders and hydropneumatics? The seaside town of Gdansk, Poland, has one answer: a multi-story wooden crane designed in the 1300s.
It certainly catches the eye, dominating an otherwise uniform canal-side of restaurants and shops. The lack of windows is another giveaway this isn’t a normal building.
As you’d hope, it’s actually a museum. As you climb your way up through the structure, each floor has a little more of the story of the crane itself, plus information about shipping and commerce throughout its life.
Finally, you reach the most interesting part: a glass door opens to the inner workings of the crane itself. Exposed beams and supports, massive in size, are not something you’d see in most buildings. Stairs from here go up and down. Each level up brings you farther out over the sidewalk below, not quite reaching out over the water. The top level, which probably does, isn’t accessible.
Looking landward you can see the giant treadwheels, human-sized hamster wheels, that supplied the force on the ropes that lifted the cargo to and from the waiting ships.
My timing is fortuitous, as the local “sailing” ship is passing underneath, offering a delightfully anachronistic view.
The ship itself is a floating restaurant, its sails never unfolding as it “magically” traverses the canal several times a day. I can hear the engine from here, but I choose to ignore it.
Going down to the bottom of this section reveals two more wheels, and a view down to the sidewalk below. As you exit, dioramas at each level tell the story of the people who lived inside the crane at various times throughout its multi-hundred year life.
The Gdansk crane is the largest in Europe, and is sadly not fully original. It had survived centuries, even finding uses long after its crane had become obsolete. It partially burned during World War II, the start of which was 80 years to the day of my visit.
The current crane, rebuilt in 1950s, is part of the National Maritime Museum. Tickets are around $2.50 US (10 złoty). You can cross the canal for less than $0.50 and also check out the steam-powered ship Sołdek (except in the winter).
Not sure about the “sailing” restaurant ship, though it’s usually parked nearby. A bit to kitsch for my tastes, but it looks pretty at night.


Twitter rolls out global 'hide replies' feature to give users more control
by Elizabeth Culliford(Reuters) - Twitter Inc is globally launching a feature for users to hide certain replies on their tweets, in order to give people more control over their conversations on the site, the company said on Thursday.
The feature, which has previously been tested in the United States, Canada and Japan, is part of Twitter’s efforts to clean up abusive content and make the social media platform more user-friendly.
During testing, the company found that people mostly hid replies they found “irrelevant, off-topic or annoying,” Suzanne Xie, director of product management at Twitter, said in a blog post on Thursday.
Users will still be able to see and engage with hidden replies by pressing an icon that will appear on the tweets. Xie said in the blog post that some people did not want to hide replies due to fear of retaliation and said Twitter would continue to get feedback on the issue.
Twitter will also check with users who use the feature whether they want to block the replier.
Xie said that while people were curious to see how public figures, such as politicians and journalists, would use the feature, those people were so far not hiding replies “very often.”
She also said that Twitter would be looking at new controls, including options around who can reply to or see certain conversations, to see if those would lead to healthier discussions.


Item One
Item Two
Item Three
Item Four
Item Six
Item Seven
Item Eight
Appear
Item One
Item Two
Item Three
Item Four
Item Six
Item Seven
Item Eight


East London Lovers Group plc is the leading global media and
entertainment business that inspires and enables people to make
the most of the east side of the city. We are a group of young individuals who share their love and passion to delicious food,
great coffee and colorful cocktails.
No one knows the east side of the city like us, we’ve been discovering the brilliant
and searching out the secret and extraordinary since 2010. If you want to know about food and drink in
East London then East London Lovers is your social companion.
Dee, Klaud, Tania and Louise made this website because
we wanted to show people all that Shoreditch has to offer.
That's why we created this website!
so take a look around and let us know what you think.
Some reasons why we love Shoreditch:


FUNMITO BLESSED
FRONT-END NINJA
Featured Work
PIXEL ART MAKER
https://ofunmito.github.io/pixel-art-maker
COURSE SUMMARY
https://ofunmito.github.io/pixel-art-maker
PERSONALITY CHECKER
https://ofunmito.github.io/pixel-art-maker


What is pair programming?
The process of collaborating with another developer to work as a team to provide programming solutions.
Why is pair programming important to DBC?
DBC wasn't designed to pump out codemonkeys. Instead, the program gears towards generating well-rounded coders who not only have an adept knowledge of what they're working on but who also understand the give-and-take involved in being in a collaborative, project-based environment.
Compare Driver and Navigator
If the Navigator is the guy holding the map, the Driver is the one making the turns. While the former guides his partner through the goals the code is working towards accomplishing, the latter is responsible for implementing them.
Reflections
Pairing was less awkward than I thought it would be, even with the wild mic noise the Jamie was having. I was pretty tentative heading into it but afterwards am glad I did it. I'm looking forward to pair programming more as it aids in understanding code much more thoroughly.


Linkin park is the best rock band out there because as the saying goes "numbers speak for themselves" Having sold over 100 million records worldwide they are considered one of, if not the best band by rock, metal and pop fans.
Thier diverse style of music makes their music ideal for work-outs and television shows. Its really hard to notice time when listenin Linkin park.
Genres:Alternative-rock, nu-metal, alternative-metal, rap-rockel ,ectronic-rock, pop-rock.
The band was formed in 1996 by three highschool friends: Mike Shinoda, Brad Delson and Rob Bourdon. They recruited Mark Wakefield as their lead vocalist and called the band Xero.Lack of opportunities prompted Wakefield to leave and was replaced by Chester Bennington. They decided to change the band's name to Hybrid Theory bur later changed it to Linkin Park, to avoid confusion with Hybrid, another British band. Read more.
Here are some of the members and their roles in the band:
You can listen the album at: Youtube
You can listen the album at: Youtube
You can listen the album at: Youtube
You can listen the album at: Youtube
You can listen the album at: Youtube
You can listen the album at: Youtube
You can listen the album at: Youtube
Listen at Youtube
Listen at Youtube
Listen at Youtube
Listen at Youtube
Listen at Youtube
Listen at Youtube
Listen at Youtube
Listen at Youtube
Listen at Youtube
Listen at Youtube


@INTRO_MENU: Introduction
Duda is a framework to create fast and solid web services on top of Monkey HTTP stack. All the interfaces are available in C language in a pseudo-object format.
All API calls or methods are grouped inside different objects, by default the objects are already initialized by the Duda core, no instance creation is required.
When developing a Web Application or Web Service with Duda, you will find two types of objects, those who are built-in into the core and the external objects called Packages.
The Core Objects expose interfaces for common routines such as parse requests, compose responses, manage cookies or sessions, read configuration files, etc. But in most of cases this is not enough and due to the implementation requirement will be required to connect to some database, work under a sub-protocol such as WebSockets or just some helpers to use JSON. This is when Packages join into the game.
A Package is an Object that is not known or initializated by Duda. It's an external component that can be used by the Web Application on-demand and it requires some special handling which includes to load the Package header file and the explicit call to duda_load_package(...) inside duda_main() to instance the object into the application.
Each Package documented here explains it owns requirements to be loaded successfully.


Bird bird bird?
Upload Image
What's the word?
{% if bird is defined%} {% if bird %}
BUH BUH BUH BIRD BIRD BIRD, THE BIRD IS THE WORD
{% else %}
Bird is NOT the word.
{% endif %} {% endif %}
What is this crap?


{{title}}
Here are the users on this wiki:
{%if users%}-
{%for u in users%}
- {{u.username}} {%endfor%}
This wiki has no users! You can edit its configuration file to add some.
{%endif%}Here are the users on this wiki:
{%if users%}This wiki has no users! You can edit its configuration file to add some.
{%endif%}


Basic Packages for Linux
®
From Scratch - Version 2018-09-21
Prev
wpa_supplicant-2.6
Next
Python-2.7.15
.
Home
Support Tools
These programs are used by other programs.
Table of Contents
Python-2.7.15
cpio-2.12
parted-3.2
Berkeley DB-5.3.28