--- layout: post authors: ["Greg Wilson"] title: FOSDEM 2013 date: 2012-11-14 time: "10:00:00" tags: ["Community"] ---
Via Sylwester Arabas (one of the organizers):
A day-long session ("devroom") on Free/Libre and Open Source Software (FLOSS) for scientists will be held during the next FOSDEM conference, Brussels, 2-3 February 2013 (http://fosdem.org/2013). We aim at having a dozen or two short talks introducing projects, advertising brand new features of established tools, discussing issues relevant to the development of software for scientific computing, and touching on the interdependence of FLOSS and open science.
You can find more info on the call for talks at http://slayoo.github.com/fosdem2013/. The deadline for sending talk proposals is December 16th 2012; please send your submissions or comments to foss4scientists-devroom@lists.fosdem.org.


{% extends "authenticate_app/base.html" %} {% load static %} {% block title_block %}Register{% endblock title_block %} {% block body_block %}
We have sent you an OTP in your mobile. Please verify the OTP to continue.


Interface to provide applications with objects from plugins. More...
#include <Provider.hpp>
Public Member Functions | |
| virtual | ~Provider () |
| Destructor. | |
| virtual unsigned int | getVersion () const =0 |
| Get provider version. | |
| bool | isCompatible (const Host &host) const |
| Check compatibility with host. | |
Friends | |
| class | Host |
Interface to provide applications with objects from plugins.
The plugin specific implementations are unknown at the host side, only their shared interfaces are known. Then, host app needs a generic way of create interface objects. That's what provider classes are for. It is the factory design pattern (http://www.oodesign.com/factory-pattern.html)
Shared interfaces define their provider types (by inheriting from pluma::Provider). Hosts then use those tipes to get objects from the plugins. Plugins derive the shared interface providers so that they can provide host with specific implementations of the shared interface. Those specific providers are given to the host through a connect function.
Example: A host app uses objects of type Device. A certain plugin defines a Keyboard, witch is a Device. The Host will use DeviceProviders to create objects of type Device. The plugin will provide host specifically with a KeyboardProvider. Other plugins may provide host with other derived DeviceProvider types.
Device hpp (shared):
#include <Pluma/Pluma.hpp> class Device{ public: virtual std::string getDescription() const = 0; }; // create DevicedProvider class PLUMA_PROVIDER_HEADER(Device);
Device cpp (shared):
#include "Device.hpp"
generate DevicedProvider with version 6, and compatible with at least v.3
PLUMA_PROVIDER_SOURCE(Device, 6, 3);
Keyboard code on the plugin side:
#include <Pluma/Pluma.hpp> #include "Device.hpp" class Keyboard: public Device{ public: std::string getDescription() const{ return "keyboard"; } }; // create KeyboardProvider, it implements DeviceProvider PLUMA_INHERIT_PROVIDER(Keyboard, Device);
plugin connector:
#include <Pluma/Connector.hpp> #include "Keyboard.hpp" PLUMA_CONNECTOR bool connect(pluma::Host& host){ // add a keyboard provider to host host.add( new KeyboardProvider() ); return true; }
Host application code:
#include <Pluma/Pluma.hpp> #include "Device.hpp" #include <iostream> #include <vector> int main(){ pluma::Pluma plugins; // Tell plugins manager to accept providers of the type DeviceProvider plugins.acceptProviderType<DeviceProvider>(); // Load library "standard_devices" from folder "plugins" plugins.load("plugins", "standard_devices"); // Get device providers into a vector std::vector<DeviceProvider*> providers; plugins.getProviders(providers); // create a Device from the first provider if (!providers.empty()){ Device* myDevice = providers.first()->create(); // do something with myDevice std::cout << device->getDescription() << std::endl; // and delete it in the end delete myDevice; } return 0; }
Definition at line 42 of file Provider.hpp.
| virtual pluma::Provider::~Provider | ( | ) | [virtual] |
Destructor.
| virtual unsigned int pluma::Provider::getVersion | ( | ) | const [pure virtual] |
Get provider version.
| bool pluma::Provider::isCompatible | ( | const Host & | host | ) | const |
Check compatibility with host.
The same provider may be compiled with different versions on host side and on plugins side. This function checks if a plugin provider is compatible with the current version of the same provider type on the host side.
| host | Host, proxy of host application. |


Menu
Home
About Us
Account
Sign In
Loading
Your avatar
Photo
×
Name :
Sur Name :
Email :
Random image
Go to chat
Setting


VSL // Wear And Care
* The Immaculate Heart College Art Department Rules
today’s Very Short List:
design 9 Jan 2015
Pamela Bell founded prinkshop
Subscribe
* Lady Parts Justice
* The greatest cultural contribution is nature. We love a walk on the new Amsterdam Beach trail
http://link.nyobserver.com/516ca68465217dc6e1b9a3a625ns7.2571/TvnrKi0WTdwTHwxwCb186
delightful e-mail that shares
cultural gems from a
different curator every day.
If you have any problems reading this e-mail, click here
http://link.nyobserver.com/516ca68465217dc6e1b9a3a625ns7.2571/UHyHCJsf7NZSKXrPC6c13
Subscribe
Forward
My Account
Unsubscribe
culture 7 Jan 2015
Timur takes us all to a dark glam opera.
tech 5 Jan 2015
Rubie Simonsen on millennials and the age of activism.
culture 3 Jan 2015
A few short films to enjoy this Saturday morning, selected by Joey Horvitz.
Editorial Policy
Privacy Policy
Contact Us
Press
Terms + Conditions
very fine print: ©2015
Observer VSL LLC.
321 West 44th Street, 6th Floor
New York, NY 10036 USA
All rights reserved.
Questions?<PHONE_NUMBER>.
This message was intended for<EMAIL_ADDRESS>If you believe this has been sent to you in error, please safely unsubscribe


Background
Im a person who loves tech and loves new tech developent and avdances in tech but im also a big fan of app desing prgraming and web development and truly would love to make a career out of it
Im Currently a university student at fullsail university for 3d animation but decided to take web developent to complement my degree but also as another potetnial carrer apart from that i love cars so hopefully a carrer in this make me fullfill this pasion of mine
Goals
i really want to master Java script i have previosuly completed a css and html course that i found it was second nature but i have struggled with Java Script but off course increase my knowledge in
- Html
- CSS
- JavaScript
- Ruby
- Rails
I’d like to work for a web design firm helping clients create an impressive online presence.


Twenty-three year old Arthur Athan is currently studying piano with Tamara Smolyar at Monash University, Melbourne, Australia. He has received many accolades, including first prize and Audience Choice Award at the 2015 Australian Concerto and Vocal Competition, the inaugural Spivakovsky Prize (2015) and a perfect score in his Music Performance studies (2011). Most recently, Arthur was selected for the Lev Vlassenko Piano Competition (2015).
Arthur made his concerto debut in 2014 performing Tchaikovsky’s Piano Concerto No 1 with the Old Scotch Symphony Orchestra under John Ferguson. He reprised this performance with the Monash Academy Orchestra under Fabian Russell in 2015 to a sold-out audience.
His former teachers include Majella Drew and Sergei Suetin. He has performed for artists including Paul Badura-Skoda, Leslie Howard, Natasha Vlassenko, Nicolas Hodges and Roberto Prosseda.
Arthur will appear with the Barrier Reef Orchestra in Townsville and the Metropolitan Symphony Orchestra in Perth playing Rachmaninoff in the 2016- 2017 season. He has also been selected for the 2016 Keri Keri International Piano Competition in New Zealand. Arthur continues his concurrent study in law and languages.


We’re excited to bring you the next major version of PMD! Here is a summary of what is planned for PMD 7.
To give us feedback or to suggest a new feature, drop us a line on Gitter!
Summary
New Logo
We decided it’s time to have a modernized logo and get rid of the gun. This allows to include the logo in anywhere without offense.
The current tasks are listed here: Integrate new PMD logo #1931
API
The API of PMD has been growing over the years and needs to be cleaned up. The goal is, to have a clear separation between a well-defined API and the implementation, which is internal. This should help us in future development. This however entails some incompatibilities and deprecations, see also the sections New API support guidelines and [Planned API removals](#planned-api-removals] below.
Full Antlr Support
PMD 6 only supports JavaCC based grammars, but with Antlr parsers can be generated as well. PMD 7 adds full support for grammars written in Antlr, which allows to leverage existing grammars.
The current tasks are listed here: Support for ANTLR based grammars with Swift as an example language #2499
Documentation
We have quite some ideas how we want to improve the documentation. The goal is, that the documentation is up to date and nearly complete. One big task is, how the built-in rules are presented, so that users can easier see, what exactly is available and decide, which rules are useful for the project at hand.
The current tasks are listed here: Documentations improvements tracker #1139
XPath
PMD 6 supports XPath 1.0 via the Jaxen library. This library is old and unmaintained creating some problems
(one of which is duplicated classes in the package org.w3c.dom
which is a Java API actually).
Therefore XPath 1.0 support will be dropped and we upgrade our XPath 2.0 implementation with Saxon moving
on to Saxon HE. This will eventually add support in PMD for XPath 3.1.
The current tasks are listed here: XPath Improvements for PMD 7 #2523
Java
Like the main PMD API, the Java AST has been growing over time and the grammar doesn’t support all edge cases (e.g. annotation are not supported everywhere). The goal is to simplify the AST by reducing unnecessary nodes and abstractions and fix the parsing issues. This helps in the end to provide a better type resolution implementation, but changing the AST is a breaking API change.
Some first results of the Java AST changes are for now documented in the Wiki: Java clean changes.
Miscellaneous
There are also some small improvements, refactoring and internal tasks that are planned for PMD 7.
The current tasks are listed here: PMD 7 Miscellaneous Tasks #2524
New API support guidelines
What’s new
Until now, all released public members and types were implicitly considered part of PMD’s public API, including inheritance-specific members (protected members, abstract methods). We have maintained those APIs with the goal to preserve full binary compatibility between minor releases, only breaking those APIs infrequently, for major releases.
In order to allow PMD to move forward at a faster pace, this implicit contract will be invalidated with PMD 7.0.0. We now introduce more fine-grained distinctions between the type of compatibility support we guarantee for our libraries, and ways to make them explicit to clients of PMD.
.internal
packages and @InternalApi
annotation
Internal API is meant for use only by the main PMD codebase. Internal types and methods may be modified in any way, or even removed, at any time.
Any API in a package that contains an .internal
segment is considered internal.
The @InternalApi
annotation will be used for APIs that have to live outside of
these packages, e.g. methods of a public type that shouldn’t be used outside of PMD (again,
these can be removed anytime).
@ReservedSubclassing
Types marked with the @ReservedSubclassing
annotation are only meant to be subclassed
by classes within PMD. As such, we may add new abstract methods, or remove protected methods,
at any time. All published public members remain supported. The annotation is not inherited, which
means a reserved interface doesn’t prevent its implementors to be subclassed.
@Experimental
APIs marked with the @Experimental
annotation at the class or method level are subject to change.
They can be modified in any way, or even removed, at any time. You should not use or rely
on them in any production code. They are purely to allow broad testing and feedback.
@Deprecated
APIs marked with the @Deprecated
annotation at the class or method level will remain supported
until the next major release but it is recommended to stop using them.
The transition
All currently supported APIs will remain so until 7.0.0. All APIs that are to be moved to
.internal
packages or hidden will be tagged @InternalApi
before that major release, and
the breaking API changes will be performed in 7.0.0.
Planned API removals
List of currently deprecated APIs
@Deprecated
or not in the latest minor release. During the development of 7.0.0,
we may decide to remove some APIs that were not tagged as deprecated, though we’ll try to avoid it.6.26.0
Deprecated API
For removal
RuleChainVisitor
and all implementations in language modulesAbstractRuleChainVisitor
Language#getRuleChainVisitorClass
BaseLanguageModule#<init>
ImportWrapper
6.25.0
-
The maven module
net.sourceforge.pmd:pmd-scala
is deprecated. Usenet.sourceforge.pmd:pmd-scala_2.13
ornet.sourceforge.pmd:pmd-scala_2.12
instead. -
Rule implementation classes are internal API and should not be used by clients directly. The rules should only be referenced via their entry in the corresponding category ruleset (e.g.
<rule ref="category/java/bestpractices.xml/AbstractClassWithoutAbstractMethod" />
).While we definitely won’t move or rename the rule classes in PMD 6.x, we might consider changes in PMD 7.0.0 and onwards.
Deprecated APIs
Internal API
Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
You can identify them with the @InternalApi
annotation. You’ll also get a deprecation warning.
AbstractIgnoredAnnotationRule
(Java)AbstractInefficientZeroCheck
(Java)AbstractJUnitRule
(Java)AbstractJavaMetricsRule
(Java)AbstractLombokAwareRule
(Java)AbstractPoorMethodCall
(Java)AbstractSunSecureRule
(Java)AbstractNcssCountRule
(Java)AbstractCommentRule
(Java)AbstractOptimizationRule
(Java)RegexHelper
(Java)AbstractApexUnitTestRule
(Apex)AbstractNcssCountRule
(Apex)AbstractNcssCountRule
(PLSQL)ApexParser
ApexHandler
RuleChain
RuleSets
RulesetsFactoryUtils#getRuleSets
For removal
TokenEntry#TokenEntry
AbstractTokenizerTest
. Use CpdTextComparisonTest in module pmd-lang-test instead. For details see Testing your implementation in the developer documentation.ASTAnnotation#suppresses
(Apex)ApexXPathRule
(Apex)SymbolTableTestRule
(Java)InefficientStringBufferingRule#isInStringBufferOperation
6.24.0
Deprecated APIs
BaseLanguageModule#addVersion(String, LanguageVersionHandler, boolean)
- Some members of
TokenMgrError
, in particular, a new constructor is available that should be preferred to the old ones AntlrTokenManager.ANTLRSyntaxError
Experimental APIs
Note: Experimental APIs are identified with the annotation Experimental
,
see its javadoc for details
- The experimental methods in
BaseLanguageModule
have been replaced by a definitive API.
6.23.0
Deprecated APIs
Internal API
Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
You can identify them with the @InternalApi
annotation. You’ll also get a deprecation warning.
In ASTs
As part of the changes we’d like to do to AST classes for 7.0.0, we would like to hide some methods and constructors that rule writers should not have access to. The following usages are now deprecated in the Apex, Javascript, PL/SQL, Scala and Visualforce ASTs:
- Manual instantiation of nodes. Constructors of node classes are deprecated and
marked
InternalApi
. Nodes should only be obtained from the parser, which for rules, means that they never need to instantiate node themselves. Those constructors will be made package private with 7.0.0. - Subclassing of abstract node classes, or usage of their type. The base classes are internal API and will be hidden in version 7.0.0. You should not couple your code to them.
- Setters found in any node class or interface. Rules should consider the AST immutable. We will make those setters package private with 7.0.0.
- The implementation classes of
Parser
(egVfParser
) are deprecated and should not be used directly. UseLanguageVersionHandler#getParser
instead. - The implementation classes of
TokenManager
(egVfTokenManager
) are deprecated and should not be used outside of our implementation. This also affects CPD-only modules.
These deprecations are added to the following language modules in this release. Please look at the package documentation to find out the full list of deprecations.
- Apex:
net.sourceforge.pmd.lang.apex.ast
- Javascript:
net.sourceforge.pmd.lang.ecmascript.ast
- PL/SQL:
net.sourceforge.pmd.lang.plsql.ast
- Scala:
net.sourceforge.pmd.lang.scala.ast
- Visualforce:
net.sourceforge.pmd.lang.vf.ast
These deprecations have already been rolled out in a previous version for the following languages:
- Java:
net.sourceforge.pmd.lang.java.ast
- Java Server Pages:
net.sourceforge.pmd.lang.jsp.ast
- Velocity Template Language:
net.sourceforge.pmd.lang.vm.ast
Outside of these packages, these changes also concern the following TokenManager implementations, and their corresponding Parser if it exists (in the same package):
CppTokenManager
JavaTokenManager
Ecmascript5TokenManager
JspTokenManager
MatlabTokenManager
ModelicaTokenManager
ObjectiveCTokenManager
PLSQLTokenManager
PythonTokenManager
VfTokenManager
VmTokenManager
In the Java AST the following attributes are deprecated and will issue a warning when used in XPath rules:
ASTAdditiveExpression#getImage
- usegetOperator()
insteadASTVariableDeclaratorId#getImage
- usegetName()
insteadASTVariableDeclaratorId#getVariableName
- usegetName()
instead
For removal
Parser#getTokenManager
TokenManager#setFileName
AbstractTokenManager#setFileName
AbstractTokenManager#getFileName
AntlrToken#getType
- usegetKind()
instead.ImmutableLanguage
MockRule
Node#getFirstParentOfAnyType
Node#getAsDocument
AbstractNode#hasDescendantOfAnyType
ASTRecordDeclaration#getComponentList
- Multiple fields, constructors and methods in
XPathRule
. See javadoc for details.
6.22.0
Deprecated APIs
Internal API
Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
You can identify them with the @InternalApi
annotation. You’ll also get a deprecation warning.
JavaLanguageHandler
JavaLanguageParser
JavaDataFlowHandler
- Implementations of
RuleViolationFactory
in each language module, egJavaRuleViolationFactory
. See javadoc ofRuleViolationFactory
. -
Implementations of
RuleViolation
in each language module, egJavaRuleViolation
. See javadoc ofRuleViolation
. RuleFactory
RuleBuilder
- Constructors of
RuleSetFactory
, use factory methods fromRulesetsFactoryUtils
instead AbstractApexNode
AbstractApexNodeBase
, and the relatedvisit
methods onApexParserVisitor
and its implementations. UseApexNode
instead, now considers comments too.
For removal
- pmd-core
DFAGraphRule
and its implementationsDFAGraphMethod
- Many methods on the
Node
interface andAbstractNode
base class. See their javadoc for details. Node#isFindBoundary
is deprecated for XPath queries.- Many APIs of
net.sourceforge.pmd.lang.metrics
, though most of them were internal and probably not used directly outside of PMD. UseMetricsUtil
as a replacement for the language-specific façades too. QualifiableNode
,QualifiedName
- pmd-java
AbstractJavaParser
AbstractJavaHandler
ASTAnyTypeDeclaration.TypeKind
ASTAnyTypeDeclaration#getKind
JavaQualifiedName
ASTCatchStatement#getBlock
ASTCompilationUnit#declarationsAreInDefaultPackage
JavaQualifiableNode
net.sourceforge.pmd.lang.java.qname
and its contentsMethodLikeNode
- Its methods will also be removed from its implementations,
ASTMethodOrConstructorDeclaration
,ASTLambdaExpression
.
- Its methods will also be removed from its implementations,
ASTAnyTypeDeclaration#getImage
will be removed. Please usegetSimpleName()
instead. This affectsASTAnnotationTypeDeclaration#getImage
,ASTClassOrInterfaceDeclaration#getImage
, andASTEnumDeclaration#getImage
.- Several methods of
ASTTryStatement
, replacements with other names have been added. This includes the XPath attribute@Finally
, replace it with a test forchild::FinallyStatement
. - Several methods named
getGuardExpressionNode
are replaced withgetCondition
. This affects the following nodes: WhileStatement, DoStatement, ForStatement, IfStatement, AssertStatement, ConditionalExpression. ASTYieldStatement
will not implementTypeNode
anymore come 7.0.0. Test the type of the expression nested within it.JavaMetrics
,JavaMetricsComputer
ASTArguments#getArgumentCount
. Usesize
instead.ASTFormalParameters#getParameterCount
. Usesize
instead.
- pmd-apex
In ASTs (JSP)
As part of the changes we’d like to do to AST classes for 7.0.0, we would like to hide some methods and constructors that rule writers should not have access to. The following usages are now deprecated in the JSP AST (with other languages to come):
- Manual instantiation of nodes. Constructors of node classes are deprecated and
marked
InternalApi
. Nodes should only be obtained from the parser, which for rules, means that they never need to instantiate node themselves. Those constructors will be made package private with 7.0.0. - Subclassing of abstract node classes, or usage of their type. The base classes are internal API and will be hidden in version 7.0.0. You should not couple your code to them.
- Setters found in any node class or interface. Rules should consider the AST immutable. We will make those setters package private with 7.0.0.
- The class
JspParser
is deprecated and should not be used directly. UseLanguageVersionHandler#getParser
instead.
Please look at net.sourceforge.pmd.lang.jsp.ast
to find out the full list of deprecations.
In ASTs (Velocity)
As part of the changes we’d like to do to AST classes for 7.0.0, we would like to hide some methods and constructors that rule writers should not have access to. The following usages are now deprecated in the VM AST (with other languages to come):
- Manual instantiation of nodes. Constructors of node classes are deprecated and
marked
InternalApi
. Nodes should only be obtained from the parser, which for rules, means that they never need to instantiate node themselves. Those constructors will be made package private with 7.0.0. - Subclassing of abstract node classes, or usage of their type. The base classes are internal API and will be hidden in version 7.0.0. You should not couple your code to them.
- Setters found in any node class or interface. Rules should consider the AST immutable. We will make those setters package private with 7.0.0.
- The package
net.sourceforge.pmd.lang.vm.directive
as well as the classesDirectiveMapper
andLogUtil
are deprecated for removal. They were only used internally during parsing. - The class
VmParser
is deprecated and should not be used directly. UseLanguageVersionHandler#getParser
instead.
Please look at net.sourceforge.pmd.lang.vm.ast
to find out the full list of deprecations.
PLSQL AST
The production and node ASTCursorBody
was unnecessary, not used and has been removed. Cursors have been already
parsed as ASTCursorSpecification
.
6.21.0
Deprecated APIs
Internal API
Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
You can identify them with the @InternalApi
annotation. You’ll also get a deprecation warning.
JavaLanguageHandler
JavaLanguageParser
JavaDataFlowHandler
- Implementations of
RuleViolationFactory
in each language module, egJavaRuleViolationFactory
. See javadoc ofRuleViolationFactory
. -
Implementations of
RuleViolation
in each language module, egJavaRuleViolation
. See javadoc ofRuleViolation
. RuleFactory
RuleBuilder
- Constructors of
RuleSetFactory
, use factory methods fromRulesetsFactoryUtils
instead AbstractApexNode
-
AbstractApexNodeBase
, and the relatedvisit
methods onApexParserVisitor
and its implementations. UseApexNode
instead, now considers comments too. CharStream
,JavaCharStream
,SimpleCharStream
: these are APIs used by our JavaCC implementations and that will be moved/refactored for PMD 7.0.0. They should not be used, extended or implemented directly.- All classes generated by JavaCC, eg
JJTJavaParserState
. This includes token classes, which will be replaced with a single implementation, and subclasses ofParseException
, whose usages will be replaced by just that superclass.
For removal
- pmd-core
- Many methods on the
Node
interface andAbstractNode
base class. See their javadoc for details. Node#isFindBoundary
is deprecated for XPath queries.
- Many methods on the
- pmd-java
AbstractJavaParser
AbstractJavaHandler
ASTAnyTypeDeclaration.TypeKind
ASTAnyTypeDeclaration#getKind
JavaQualifiedName
ASTCatchStatement#getBlock
ASTCompilationUnit#declarationsAreInDefaultPackage
JavaQualifiableNode
net.sourceforge.pmd.lang.java.qname
and its contentsMethodLikeNode
- Its methods will also be removed from its implementations,
ASTMethodOrConstructorDeclaration
,ASTLambdaExpression
.
- Its methods will also be removed from its implementations,
ASTAnyTypeDeclaration#getImage
will be removed. Please usegetSimpleName()
instead. This affectsASTAnnotationTypeDeclaration#getImage
,ASTClassOrInterfaceDeclaration#getImage
, andASTEnumDeclaration#getImage
.- Several methods of
ASTTryStatement
, replacements with other names have been added. This includes the XPath attribute@Finally
, replace it with a test forchild::FinallyStatement
. - Several methods named
getGuardExpressionNode
are replaced withgetCondition
. This affects the following nodes: WhileStatement, DoStatement, ForStatement, IfStatement, AssertStatement, ConditionalExpression. ASTYieldStatement
will not implementTypeNode
anymore come 7.0.0. Test the type of the expression nested within it.
6.20.0
No changes.
6.19.0
Deprecated APIs
For removal
- pmd-core
- All the package
net.sourceforge.pmd.dcd
and its subpackages. SeeDCD
. - In
LanguageRegistry
: RuleSet#getExcludePatterns
. Use the new methodgetFileExclusions
instead.RuleSet#getIncludePatterns
. Use the new methodgetFileInclusions
instead.Parser#canParse
Parser#getSuppressMap
RuleBuilder#RuleBuilder
. Use the new constructor with the correct ResourceLoader instead.RuleFactory#RuleFactory
. Use the new constructor with the correct ResourceLoader instead.
- All the package
- pmd-java
CanSuppressWarnings
and its implementationsisSuppressed
getDeclaringType
.isSupressed
ASTMethodDeclarator
getMethodName
getBlock
getParameterCount
- pmd-apex
CanSuppressWarnings
and its implementationsisSupressed
Internal APIs
- pmd-core
- All the package
net.sourceforge.pmd.util
and its subpackages, exceptnet.sourceforge.pmd.util.datasource
andnet.sourceforge.pmd.util.database
. GridBagHelper
ColumnDescriptor
- All the package
6.18.0
Changes to Renderer
-
Each renderer has now a new method
Renderer#setUseShortNames
which is used for implementing the “shortnames” CLI option. The method is automatically called by PMD, if this CLI option is in use. When rendering filenames to the report, the new helper methodAbstractRenderer#determineFileName
should be used. This will change the filename to a short name, if the CLI option “shortnames” is used.Not adjusting custom renderers will make them render always the full file names and not honoring the CLI option “shortnames”.
Deprecated APIs
For removal
- The methods
getImportedNameNode
andgetPackage
have been deprecated and will be removed with PMD 7.0.0. - The method
RuleContext#setSourceCodeFilename
has been deprecated and will be removed. The already existing methodRuleContext#setSourceCodeFile
should be used instead. The methodRuleContext#getSourceCodeFilename
still exists and returns just the filename without the full path. - The method
AbstractPMDProcessor#filenameFrom
has been deprecated. It was used to determine a “short name” of the file being analyzed, so that the report can use short names. However, this logic has been moved to the renderers. - The method
Report#metrics
andReport
have been deprecated. They were leftovers from a previous deprecation round targetingStatisticalRule
.
Internal APIs
Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0. You can identify them with the @InternalApi
annotation. You’ll also get a deprecation warning.
- pmd-core
- pmd-java
net.sourceforge.pmd.lang.java.typeresolution
: Everything, including subpackages, exceptTypeHelper
andJavaTypeDefinition
.ASTCompilationUnit#getClassTypeResolver
6.17.0
No changes.
6.16.0
Deprecated APIs
Reminder: Please don’t use members marked with the annotation
InternalApi
, as they will likely be removed, hidden, or otherwise intentionally broken with 7.0.0.
In ASTs
As part of the changes we’d like to do to AST classes for 7.0.0, we would like to hide some methods and constructors that rule writers should not have access to. The following usages are now deprecated in the Java AST (with other languages to come):
- Manual instantiation of nodes. Constructors of node classes are deprecated and marked
InternalApi
. Nodes should only be obtained from the parser, which for rules, means that never need to instantiate node themselves. Those constructors will be made package private with 7.0.0. - Subclassing of abstract node classes, or usage of their type. Version 7.0.0 will bring a new set of abstractions that will be public API, but the base classes are and will stay internal. You should not couple your code to them.
- Setters found in any node class or interface. Rules should consider the AST immutable. We will make those setters package private with 7.0.0.
Please look at net.sourceforge.pmd.lang.java.ast
to find out the full list
of deprecations.
6.15.0
Deprecated APIs
For removal
- The
DumpFacades
in all languages, that could be used to transform a AST into a textual representation, will be removed with PMD 7. The rule designer is a better way to inspect nodes.net.sourceforge.pmd.lang.apex.ast.DumpFacade
net.sourceforge.pmd.lang.java.ast.DumpFacade
net.sourceforge.pmd.lang.ecmascript.ast.DumpFacade
net.sourceforge.pmd.lang.jsp.ast.DumpFacade
net.sourceforge.pmd.lang.plsql.ast.DumpFacade
net.sourceforge.pmd.lang.vf.ast.DumpFacade
net.sourceforge.pmd.lang.vm.ast.AbstractVmNode#dump
net.sourceforge.pmd.lang.xml.ast.DumpFacade
- The method
LanguageVersionHandler#getDumpFacade
will be removed as well. It is deprecated, along with all its implementations in the subclasses ofLanguageVersionHandler
.
6.14.0
No changes.
6.13.0
Command Line Interface
The start scripts run.sh
, pmd.bat
and cpd.bat
support the new environment variable PMD_JAVA_OPTS
.
This can be used to set arbitrary JVM options for running PMD, such as memory settings (e.g. PMD_JAVA_OPTS=-Xmx512m
)
or enable preview language features (e.g. PMD_JAVA_OPTS=--enable-preview
).
The previously available variables such as OPTS
or HEAPSIZE
are deprecated and will be removed with PMD 7.0.0.
Deprecated API
-
CodeClimateRule
is deprecated in 7.0.0 because it was unused for 2 years and created an unwanted dependency. Properties “cc_categories”, “cc_remediation_points_multiplier”, “cc_block_highlighting” will also be removed. See #1702 for more. -
The Apex ruleset
rulesets/apex/ruleset.xml
has been deprecated and will be removed in 7.0.0. Please use the new quickstart rulesetrulesets/apex/quickstart.xml
instead.
6.12.0
No changes.
6.11.0
StatisticalRule
and the related helper classes and base rule classes are deprecated for removal in 7.0.0. This includes all ofnet.sourceforge.pmd.stat
andnet.sourceforge.pmd.lang.rule.stat
, and alsoAbstractStatisticalJavaRule
,AbstractStatisticalApexRule
and the like. The methodsReport#addMetric
andmetricAdded
will also be removed.setProperty
is deprecated, becauseMultiValuePropertyDescriptor
is deprecated as well
6.10.0
Properties framework
The properties framework is about to get a lifting, and for that reason, we need to deprecate a lot of APIs to remove them in 7.0.0. The proposed changes to the API are described on the wiki
Changes to how you define properties
-
Construction of property descriptors has been possible through builders since 6.0.0. The 7.0.0 API will only allow construction through builders. The builder hierarchy, currently found in the package
net.sourceforge.pmd.properties.builders
, is being replaced by the simplerPropertyBuilder
. Their APIs enjoy a high degree of source compatibility. -
Concrete property classes like
IntegerProperty
andStringMultiProperty
will gradually all be deprecated until 7.0.0. Their usages should be replaced by direct usage of thePropertyDescriptor
interface, e.g.PropertyDescriptor<Integer>
orPropertyDescriptor<List<String>>
. -
Instead of spreading properties across countless classes, the utility class
PropertyFactory
will become from 7.0.0 on the only provider for property descriptor builders. Each current property type will be replaced by a corresponding method onPropertyFactory
:IntegerProperty
is replaced byPropertyFactory#intProperty
IntegerMultiProperty
is replaced byPropertyFactory#intListProperty
FloatProperty
andDoubleProperty
are both replaced byPropertyFactory#doubleProperty
. Having a separate property for floats wasn’t that useful.- Similarly,
FloatMultiProperty
andDoubleMultiProperty
are replaced byPropertyFactory#doubleListProperty
.
- Similarly,
StringProperty
is replaced byPropertyFactory#stringProperty
StringMultiProperty
is replaced byPropertyFactory#stringListProperty
-
RegexProperty
is replaced byPropertyFactory#regexProperty
EnumeratedProperty
is replaced byPropertyFactory#enumProperty
EnumeratedProperty
is replaced byPropertyFactory#enumListProperty
BooleanProperty
is replaced byPropertyFactory#booleanProperty
- Its multi-valued counterpart,
BooleanMultiProperty
, is not replaced, because it doesn’t have a use case.
- Its multi-valued counterpart,
CharacterProperty
is replaced byPropertyFactory#charProperty
CharacterMultiProperty
is replaced byPropertyFactory#charListProperty
LongProperty
is replaced byPropertyFactory#longIntProperty
LongMultiProperty
is replaced byPropertyFactory#longIntListProperty
MethodProperty
,FileProperty
,TypeProperty
and their multi-valued counterparts are discontinued for lack of a use-case, and have no planned replacement in 7.0.0 for now.
Here’s an example:
// Before 7.0.0, these are equivalent:
IntegerProperty myProperty = new IntegerProperty("score", "Top score value", 1, 100, 40, 3.0f);
IntegerProperty myProperty = IntegerProperty.named("score").desc("Top score value").range(1, 100).defaultValue(40).uiOrder(3.0f);
// They both map to the following in 7.0.0
PropertyDescriptor<Integer> myProperty = PropertyFactory.intProperty("score").desc("Top score value").require(inRange(1, 100)).defaultValue(40);
You’re highly encouraged to migrate to using this new API as soon as possible, to ease your migration to 7.0.0.
Architectural simplifications
-
EnumeratedPropertyDescriptor
,NumericPropertyDescriptor
,PackagedPropertyDescriptor
, and the related builders (innet.sourceforge.pmd.properties.builders
) will be removed. These specialized interfaces allowed additional constraints to be enforced on the value of a property, but made the property class hierarchy very large and impractical to maintain. Their functionality will be mapped uniformly toPropertyConstraint
s, which will allow virtually any constraint to be defined, and improve documentation and error reporting. The related methodsPropertyTypeId#isPropertyNumeric
andPropertyTypeId#isPropertyPackaged
are also deprecated. -
MultiValuePropertyDescriptor
andSingleValuePropertyDescriptor
are deprecated. 7.0.0 will introduce a new XML syntax which will remove the need for such a divide between single- and multi-valued properties. The methodPropertyDescriptor#isMultiValue
will be removed accordingly.
Changes to the PropertyDescriptor interface
preferredRowCount
is deprecated with no intended replacement. It was never implemented, and does not belong in this interface. The methodsuiOrder
andcompareTo(PropertyDescriptor)
are deprecated for the same reason. These methods mix presentation logic with business logic and are not necessary for PropertyDescriptors to work.PropertyDescriptor
will not extendComparable<PropertyDescriptor>
anymore come 7.0.0.- The method
propertyErrorFor
is deprecated and will be removed with no intended replacement. It’s really just a shortcut forprop.errorFor(rule.getProperty(prop))
. T
valueFrom(String)
andString
asDelimitedString
(T)
are deprecated and will be removed. These were used to serialize and deserialize properties to/from a string, but 7.0.0 will introduce a more flexible XML syntax which will make them obsolete.isMultiValue
andtype
are deprecated and won’t be replaced. The new XML syntax will remove the need for a divide between multi- and single-value properties, and will allow arbitrary types to be represented. Since arbitrary types may be represented,type
will become obsolete as it can’t represent generic types, which will nevertheless be representable with the XML syntax. It was only used for documentation, but a new way to document these properties exhaustively will be added with 7.0.0.errorFor
is deprecated as its return type will be changed toOptional<String>
with the shift to Java 8.
Deprecated APIs
For internalization
-
The implementation of the adapters for the XPath engines Saxon and Jaxen (package
net.sourceforge.pmd.lang.ast.xpath
) are now deprecated. They’ll be moved to an internal package come 7.0.0. OnlyAttribute
remains public API. -
The classes
PropertyDescriptorField
,PropertyDescriptorBuilderConversionWrapper
, and the methodsPropertyDescriptor#attributeValuesById
,PropertyDescriptor#isDefinedExternally
andPropertyTypeId#getFactory
. These were used to read and write properties to and from XML, but were not intended as public API. -
The class
ValueParserConstants
and the interfaceValueParser
. -
All classes from
net.sourceforge.pmd.lang.java.metrics.impl.visitors
are now considered internal API. They’re deprecated and will be moved into an internal package with 7.0.0. To implement your own metrics visitors,JavaParserVisitorAdapter
should be directly subclassed. -
LanguageVersionHandler#getDataFlowHandler()
,LanguageVersionHandler#getDFAGraphRule()
For removal
-
All classes from
net.sourceforge.pmd.properties.modules
will be removed. -
The interface
Dimensionable
has been deprecated. It gets in the way of a grammar change for 7.0.0 and won’t be needed anymore (see #997). -
Several methods from
ASTLocalVariableDeclaration
andASTFieldDeclaration
have also been deprecated:-
ASTFieldDeclaration
won’t be aTypeNode
come 7.0.0, sogetType
andgetTypeDefinition
are deprecated. -
The method
getVariableName
on those two nodes will be removed, too.
All these are deprecated because those nodes may declare several variables at once, possibly with different types (and obviously with different names). They both implement
Iterator<
ASTVariableDeclaratorId
>
though, so you should iterate on each declared variable. See #910. -
-
Visitor decorators are now deprecated and will be removed in PMD 7.0.0. They were originally a way to write composable visitors, used in the metrics framework, but they didn’t prove cost-effective.
- In
net.sourceforge.pmd.lang.java.ast
:JavaParserDecoratedVisitor
,JavaParserControllessVisitor
,JavaParserControllessVisitorAdapter
, andJavaParserVisitorDecorator
are deprecated with no intended replacement.
- In
-
The LanguageModules of several languages, that only support CPD execution, have been deprecated. These languages are not fully supported by PMD, so having a language module does not make sense. The functionality of CPD is not affected by this change. The following classes have been deprecated and will be removed with PMD 7.0.0:
CppHandler
CppLanguageModule
CppParser
CsLanguageModule
FortranLanguageModule
GroovyLanguageModule
MatlabHandler
MatlabLanguageModule
MatlabParser
ObjectiveCHandler
ObjectiveCLanguageModule
ObjectiveCParser
PhpLanguageModule
PythonHandler
PythonLanguageModule
PythonParser
RubyLanguageModule
ScalaLanguageModule
SwiftLanguageModule
-
Optional AST processing stages like symbol table, type resolution or data-flow analysis will be reified in 7.0.0 to factorise common logic and make them extensible. Further explanations about this change can be found on #1426. Consequently, the following APIs are deprecated for removal:
- In
Rule
:isDfa()
,isTypeResolution()
,isMultifile()
and their respective setters. - In
RuleSet
:usesDFA(Language)
,usesTypeResolution(Language)
,usesMultifile(Language)
- In
RuleSets
:usesDFA(Language)
,usesTypeResolution(Language)
,usesMultifile(Language)
- In
LanguageVersionHandler
:getDataFlowFacade()
,getSymbolFacade()
,getSymbolFacade(ClassLoader)
,getTypeResolutionFacade(ClassLoader)
,getQualifiedNameResolutionFacade(ClassLoader)
- In
6.9.0
No changes.
6.8.0
-
A couple of methods and fields in
net.sourceforge.pmd.properties.AbstractPropertySource
have been deprecated, as they are replaced by already existing functionality or expose internal implementation details:propertyDescriptors
,propertyValuesByDescriptor
,copyPropertyDescriptors()
,copyPropertyValues()
,ignoredProperties()
,usesDefaultValues()
,useDefaultValueFor()
. -
Some methods in
net.sourceforge.pmd.properties.PropertySource
have been deprecated as well:usesDefaultValues()
,useDefaultValueFor()
,ignoredProperties()
. -
The class
net.sourceforge.pmd.lang.rule.AbstractDelegateRule
has been deprecated and will be removed with PMD 7.0.0. It is internally only in use by RuleReference. -
The default constructor of
net.sourceforge.pmd.lang.rule.RuleReference
has been deprecated and will be removed with PMD 7.0.0. RuleReferences should only be created by providing a Rule and a RuleSetReference. Furthermore the following methods are deprecated:setRuleReference()
,hasOverriddenProperty()
,usesDefaultValues()
,useDefaultValueFor()
.
6.7.0
-
All classes in the package
net.sourceforge.pmd.lang.dfa.report
have been deprecated and will be removed with PMD 7.0.0. This includes the classnet.sourceforge.pmd.lang.dfa.report.ReportTree
. The reason is, that this class is very specific to Java and not suitable for other languages. It has only been used forYAHTMLRenderer
, which has been rewritten to work without these classes. -
The nodes RUNSIGNEDSHIFT and RSIGNEDSHIFT are deprecated and will be removed from the AST with PMD 7.0.0. These represented the operator of ShiftExpression in two cases out of three, but they’re not needed and make ShiftExpression inconsistent. The operator of a ShiftExpression is now accessible through ShiftExpression#getOperator.
6.5.0
-
The utility class
net.sourceforge.pmd.lang.java.ast.CommentUtil
has been deprecated and will be removed with PMD 7.0.0. Its methods have been intended to parse javadoc tags. A more useful solution will be added around the AST nodeFormalComment
, which contains as childrenJavadocElement
nodes, which in turn provide access to theJavadocTag
.All comment AST nodes (
FormalComment
,MultiLineComment
,SingleLineComment
) have a new methodgetFilteredComment()
which provide access to the comment text without the leading/*
markers. -
The method
AbstractCommentRule.tagsIndicesIn()
has been deprecated and will be removed with PMD 7.0.0. It is not very useful, since it doesn’t extract the information in a useful way. You would still need check, which tags have been found, and with which data they might be accompanied.
6.4.0
- The following classes in package
net.sourceforge.pmd.benchmark
have been deprecated:Benchmark
,Benchmarker
,BenchmarkReport
,BenchmarkResult
,RuleDuration
,StringBuilderCR
andTextReport
. Their API is not supported anymore and is disconnected from the internals of PMD. Use the newer API based aroundTimeTracker
instead, which can be found in the same package. - The class
net.sourceforge.pmd.lang.java.xpath.TypeOfFunction
has been deprecated. Use the newerTypeIsFunction
in the same package. - The
typeof
methods innet.sourceforge.pmd.lang.java.xpath.JavaFunctions
have been deprecated. Use the newertypeIs
method in the same class instead.. - The methods
isA
,isEither
andisNeither
ofnet.sourceforge.pmd.lang.java.typeresolution.TypeHelper
. Use the newisExactlyAny
andisExactlyNone
methods in the same class instead.
6.2.0
-
The static method
PMDParameters.transformParametersIntoConfiguration(PMDParameters)
is now deprecated, for removal in 7.0.0. The new instance methodPMDParameters.toConfiguration()
replaces it. -
The method
ASTConstructorDeclaration.getParameters()
has been deprecated in favor of the new methodgetFormalParameters()
. This method is available for bothASTConstructorDeclaration
andASTMethodDeclaration
.
6.1.0
- The method
getXPathNodeName
is added to theNode
interface, which removes the use of thetoString
of a node to get its XPath element name (see #569).- The default implementation provided in
AbstractNode
, will be removed with 7.0.0 - With 7.0.0, the
Node.toString
method will not necessarily provide its XPath node name anymore.
- The default implementation provided in
-
The interface
net.sourceforge.pmd.cpd.Renderer
has been deprecated. A new interfacenet.sourceforge.pmd.cpd.renderer.CPDRenderer
has been introduced to replace it. The main difference is that the new interface is meant to render directly to ajava.io.Writer
rather than to a String. This allows to greatly reduce the memory footprint of CPD, as on large projects, with many duplications, it was causingOutOfMemoryError
s (see #795).net.sourceforge.pmd.cpd.FileReporter
has also been deprecated as part of this change, as it’s no longer needed.
6.0.1
- The constant
net.sourceforge.pmd.PMD.VERSION
has been deprecated and will be removed with PMD 7.0.0. Please usenet.sourceforge.pmd.PMDVersion.VERSION
instead.
List of currently deprecated rules
-
The Java rules
VariableNamingConventions
,MIsLeadingVariableName
,SuspiciousConstantFieldName
, andAvoidPrefixingMethodParameters
are now deprecated, and will be removed with version 7.0.0. They are replaced by the more generalFieldNamingConventions
,FormalParameterNamingConventions
, andLocalVariableNamingConventions
. -
The Java rule
AbstractNaming
is deprecated in favour ofClassNamingConventions
. -
The Java rules
WhileLoopsMustUseBraces
,ForLoopsMustUseBraces
,IfStmtsMustUseBraces
, andIfElseStmtsMustUseBraces
are deprecated. They will be replaced by the new ruleControlStatementBraces
. -
The Java rules
NcssConstructorCount
,NcssMethodCount
, andNcssTypeCount
have been deprecated. They will be replaced by the new ruleNcssCount
in the categorydesign
. -
The Java rule
LooseCoupling
in rulesetjava-typeresolution
is deprecated. Use the rule with the same name from categorybestpractices
instead. -
The Java rule
CloneMethodMustImplementCloneable
in rulesetjava-typeresolution
is deprecated. Use the rule with the same name from categoryerrorprone
instead. -
The Java rule
UnusedImports
in rulesetjava-typeresolution
is deprecated. Use the rule with the same name from categorybestpractices
instead. -
The Java rule
SignatureDeclareThrowsException
in rulesetjava-typeresolution
is deprecated. Use the rule with the same name from categorydesign
instead. -
The Java rule
EmptyStaticInitializer
in rulesetjava-empty
is deprecated. Use the ruleEmptyInitializer
, which covers both static and non-static empty initializers.` -
The Java rules
GuardDebugLogging
(rulesetjava-logging-jakarta-commons
) andGuardLogStatementJavaUtil
(rulesetjava-logging-java
) have been deprecated. Use the ruleGuardLogStatement
, which covers all cases regardless of the logging framework. -
The Java rule
UnsynchronizedStaticDateFormatter
has been deprecated and will be removed with PMD 7.0.0. The rule is replaced by the more generalUnsynchronizedStaticFormatter
. -
The two Java rules
PositionLiteralsFirstInComparisons
andPositionLiteralsFirstInCaseInsensitiveComparisons
(rulesetjava-bestpractices
) have been deprecated in favor of the new ruleLiteralsFirstInComparisons
. -
The Java rule
AvoidFinalLocalVariable
(java-codestyle
) has been deprecated and will be removed with PMD 7.0.0. The rule is controversial and also contradicts other existing rules such asLocalVariableCouldBeFinal
. If the goal is to avoid defining constants in a scope smaller than the class, then the ruleAvoidDuplicateLiterals
should be used instead. -
The Apex rule
VariableNamingConventions
(apex-codestyle
) has been deprecated and will be removed with PMD 7.0.0. The rule is replaced by the more general rulesFieldNamingConventions
,FormalParameterNamingConventions
,LocalVariableNamingConventions
, andPropertyNamingConventions
. -
The Java rule
LoggerIsNotStaticFinal
(java-errorprone
) has been deprecated and will be removed with PMD 7.0.0. The rule is replaced byProperLogger
.


Becky Silk Blazer
$335
Eres' daring 'Grigri Fortune' swimsuit has the fit and coverage of a bikini in a one-piece silhouette. This fuchsia style is crafted from the label's sculpting peau douce fabric and has flattering cutouts through the torso and back. Wear yours with mirrored sunglasses on vacation.
An infusion of West Coast cool and New York attitude, Rebecca Minkoff is synonymous with It girl style. Minkoff burst on the fashion scene with her best-selling 'Morning After Bag' and later expanded her offering with the Rebecca Minkoff Collection - a range of luxe city staples with a "downtown romantic" theme.
- Storm and midnight-blue stretch cotton-blend
- Notch lapels, functioning buttoned cuffs, two front flap pockets, single vent, internal pocket
- Two button fastening
- 84% cotton, 14% nylon, 2% elastane
- Dry clean


Fecha_Creacion: 2017-12-29T10:37:48.281Z
Dimension: unknown
Id_Locacion: 38
Nombre: Interdimensional Customs
Residentes: ['https://rickandmortyapi.com/api/character/144', 'https://rickandmortyapi.com/api/character/158']
Tipo: Customs
URL: https://rickandmortyapi.com/api/location/38


Screen reader users, click here to skip the navigation bar
splunk
>
Mappings
Intent:
Search:
Search
Response: e.g. the values of fields a b and c are $resultfield_a$ $resultfield_b$ $resultfield_c$
Save
New
Click on a cell in order to include a field to Response


r-tags depends on Brick/x-tags by the Mozilla Foundation (Apache License) and Marked by Christopher Jeffrey. (MIT License)
r-tags released under the BSD 2-Clause license


This test passes if the 'math' node in the accessibility tree contains a single child, which is ignored:


FEB 2020 Presentation
Reminder rocky, open the links first.
This is the easiest bulletpoint to add to your resume.
Don't forget the weird dance house music for flavor.👅
CSS is a styling language, so its building blocks are different from the classical programming languages.
http://amyhissom.com/HTML5-CSS3/history.html
https://css-tricks.com/look-back-history-css/
https://www.w3.org/Style/CSS20/history.html
https://crossbrowsertesting.com/blog/test-automation/history-of-web-browsers/
Enough History.
Modern CSS uses. Heavily Opinionated.
Write it naturally.
"Borrow" ideas.
Get it from a designer.
Grab a pre-built html template
🌟https://the-echoplex.net/flexyboxes/🌟
🌟https://grid.layoutit.com/🌟
Is that it with CSS?
But wait -- what happened in the late 2000s?
Responsive Design
@media only screen and (max-width: 600px){
body {
background-color: lightblue;
}
}
Responsive Design Trends
But wait -- my CSS file is getting confusing.
CSS preprocessors are scripting languages that extend the default capabilities of CSS. They offer:
CSS preprocessors are scripting languages that extend the default capabilities of CSS. They offer:
CSS preprocessors are scripting languages that extend the default capabilities of CSS. They offer:
But wait -- responsive design, containers, etc...?
If every site is the same, why are we reinventing the wheel?
You don't have to!


Helper classes and extension methods for handling rectangles comfortably
These are some helper classes and extension methods for handling rectangles comfortably.
RectangleF provides only two methods to specify a rectangle:
By constructor:
new RectangleF(10, 20, 30, 40)
which takes top and left coordinates and width and height.
By static method:
RectangleF.FromLTRB(10, 20, 30, 40)
which takes left, top, right and bottom coordinates.
But often you want to specify the horizontal dimension differently from the vertical one, or specify the center and width / height, or the width and right coordinate, for example. To avoid the cumbersome task of calculating the required parameters from the given ones each time, I created the Rect helper class.
With the Rect class you can specify a rectangle in a very flexible way:
For each dimension, two out of four possible specifications are made. For the horizontal dimension, this can be left, center, right and width. For the vertical dimension it can be top, center, bottom and height.
In the following example, we specify bottom coordinate, height, horizontal center coordinate and the width:
Rect.CreateWith.Bottom(40).Height(10).CenterX(20).Width(30).ToRectangleF()
If you there is just one or none specification per dimension, the range for a dimension is not defined. If you specify more than two things, they could contradict each other. In both cases, you will get an exception when you try to convert to RectangleF, but whether the right count of specifications has been provided can easily be seen from the source code.
Following example will fail to execute, because the horizontal dimension is overspecified (left and right coordinate and width is given) and the vertical dimension is underspecified (only top coordinate is given):
Rect.CreateWith.Left(10).Right(20).Width(30).Top(40).ToRectangleF()
Specifying the same thing twice is no problem, however:
Rect.CreateWith.Left(10).Right(20).Top(30).Bottom(40).Left(20).ToRectangleF()
As an alternative to providing direct coordinates or lengths, you can exctract them from other rectangles, points or sizes.
RectangleF rect1 = new RectangleF(10, 20, 30, 40);
PointF point = new PointF(50, 60);
SizeF size = new SizeF(70,80);
RectangleF rect2 =
Rect.CreateWith
.TopLeft(point)
.RightOf(rect1)
.RelativeHeightOf(rect1, 2)
.ToRectangleF();
RectangleF rect3 =
Rect.CreateWith
.Size(size)
.AtRightOf(rect1)
.AtBottomOf(rect1)
.ToRectangleF();
If you want to query again what you just set, you can do that as follows:
Rect rect = Rect.CreateWith.Left(20);
float left = rect.GetLeft().Value;
If you want to use the same partial specifications to create two different rectangles, you can do this as follows:
Rect rect = Rect.CreateWith.Left(10).Right(20).Top(30);
RectangleF rect1 = rect.Bottom(40).ToRectangleF();
RectangleF rect2 = rect.Bottom(50).ToRectangleF();
RectangleF is a struct and thus has value semantics. Rect is a class and has pointer semantics. In order to be able to use a partial specification for different rectangles, the class is immutable and creates another instance for each modification operation.
Because of the immutability, you can do the following:
Rect rect = Rect.CreateWith.Left(10).Right(20).Top(30).Bottom(40);
RectangleF rect2 = rect.Left(50).ToRectangleF();
RectangleF rect3 = rect.Right(60).ToRectangleF();
rect3.Left then will be the original 10 as expected, not 50.
If you want to modify a rectangle, let's say
var rect = new RectangleF(10, 20, 30, 40);
you could create a new Rect, copy the things which should remain the same, and change the others:
Rect.CreateWith.TopOf(rect).RightOf(rect).HeightOf(rect).Width(100).ToRectangleF()
But this is a bit lenghty and cumbersome. With the use of another helper class you can write
rect.With().SameTop().SameRight().SameHeight().Width(100).ToRectangleF()
The With extension method on RectangleF saves the original rectangle and you can transfer the desired specifications just by calling the Same... methods.
Following example relocates the top left corner of the rectangle:
rect.With().SameSize().Top(20).Left(30).ToRectangleF();
rect.With().SameTop().SameRight().SameHeight().Width(100).ToRectangleF()
is still a bit lengthy, and can be written shorter as
rect.With().SameRight().Width(100).ToRectangleF()
So, as an exception to the above rule that for every dimension exactly two specifications have to be provided, you can provide zero specifcations for a dimension, i.e. omitting the dimension as a whole. It will be transferred to the new RectangleF as it was in the original RectangleF.
Note that in the above example it would not be enough to only change the width:
rect.With().Width(100).ToRectangleF()
It's not specified which part of the horizontal range should remain the same: the left, the middle or the right. Hence, in this case an exception is thrown stating that the dimension is underspecified.
Some more examples with just one dimension changed:
rect.With().SameWidth().Left(30).ToRectangleF()
rect.With().Right(10).Width(20).ToRectangleF()
For convenience, you can multiply the sizes of the original rectangle:
rect.With().SameCenter().RelativeHeight(.5f).RelativeWidth(.5f).ToRectangleF()
rect.With().SameCenter().RelativeSize(.5f).ToRectangleF()
Or you can move any side of the rectangle or enlarge / shrink its width and height.
This code moves the lop left corner while the bottom right corner remains fixed:
rect.With().SameRight().SameBottom().LeftMovedBy(10).TopMovedBy(20).ToRectangleF();
All 3 alternatives fix the center while enlarging the rectangle:
rect.With().SameCenter().WidthEnlargedBy(20).HeightEnlargedBy(30).ToRectangleF();
rect.With().SameCenter().EnlargedBy(new SizeF(20, 30)).ToRectangleF();
rect.With().SameCenter().EnlargedBy(20, 30).ToRectangleF();
This moves the rectangle:
rect.With().SameSize().LeftMovedBy(20).TopMovedBy(30).ToRectangleF();
Shorter:
rect.With().LeftTopMovedBy(20, 30).ToRectangleF();
Because writing the above line just to move a rectange is still too much code (and choosing a corner for adding the offset is redundant here), I have added extension methods for RectangleF directly, which are just for the task of moving it:
var r1 = rect.MovedBy(20, 30);
var r2 = rect.MovedRightBy(20);
var r3 = rect.MovedDownBy(30);
Of course, you can also use RectangleF.Offset(PointF), but this method modifies the original RectangleF and doesn't return the new one, so you can't use it in a functional style. I named the methods moved, not move, to indicate that they don't change the original Rect / RectangleF.
Some more extension methods to RectangleF return the corners of the rectangle:
rect.TopLeft()
rect.BottomRight()
They also can be used with the Rect methods:
Rect.CreateWith.TopLeft(rect.BottomRight()).Size(10, 20).ToRectangleF();
Finally, there are two extension methods to return the center coordinates of a rectangle:
rect.CenterX()
rect.CenterY()
float? GetLeft()
float? GetCenterX()
float? GetRight()
float? GetWidth()
float? GetTop()
float? GetCenterY()
float? GetBottom()
float?


The Basics of the Web
The Basics of the Web
World Wide Web
- collection of HTML (hyper text markup language) documents
- hyper links connect documents
- HTML is how you link content (images, etc)
- Pieces of content
- your browser makes requests via internet to servers using HTTP, response is file that browser displays
- server - computer optimized to host/hold files
Hyper Text Markup Language
- text content - you see
- mark up - arrangement
- references to other docs - images, videoes (website has a reference to youtube video in middle)
- Mark Up
- tag = <tag name>
- <name> content </name> ---> called an element
- bold <BOLD>
- italic <EMPHASIS>
- forgot </endtag>? Tag effects everything after opening tag
- HTML Attributes
- atrributes = ATTR
- <tag ATTR="value"> contents </tag>
- anchor tag  = to make a link
-  derp
- image tag
- alt="text" is what is displayed if the image doesn't load - common courtesy
- VOID TAG - no content = no closing tag
- Whitespace
-
 VOID TAG - creates new line (inline - just creates a new line to work on/use as separation)
-

 - creates some separation (makes an invisible box around that text)
- why have both?

 can be used to create height
- inline vs block
- Span/div - to contain content
- span - inline  text
- div - block
 text

- will create a box around text, a separation like

 does
- HTML Document
- <DOCTYPE HTML> doctype
-
-  place to put metadata, css, java
- <title> Title of the webpage</title>
-
-
- content
-
-


Prev
Next
Prev
Next
One
Two
Three
View Site
Two
Three
Four
View Site
One
Three
Four
View Site
Mila
Kunis
.gif
View Site


Enum PlacementMode
Specifies the PlacementMode https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.primitives.placementmode?view=netframework-4.7.2#System_Windows_Controls_Primitives_PlacementMode_Absolute
Namespace: System.Dynamic.ExpandoObject
Assembly: Krypton Toolkit.dll
Syntax
public enum PlacementMode
Absolute
A position of the Popup control relative to the upper-left corner of the screen and at an offset that is defined by the HorizontalOffset and VerticalOffset property values. If the screen edge obscures the Popup, the control then repositions itself to align with the edge.
AbsolutePoint
A position of the Popup control relative to the upper-left corner of the screen and at an offset that is defined by the HorizontalOffset and VerticalOffset property values. If the screen edge obscures the Popup, the control extends in the opposite direction from the axis defined by the HorizontalOffset or VerticalOffset =.
Bottom
A position of the Popup control where the control aligns its upper edge with the lower edge of the PlacementTarget and aligns its left edge with the left edge of the PlacementTarget. If the lower screen-edge obscures the Popup, the control repositions itself so that its lower edge aligns with the upper edge of the PlacementTarget. If the upper screen-edge obscures the Popup, the control then repositions itself so that its upper edge aligns with the upper screen-edge.
Center
A position of the Popup control where it is centered over the PlacementTarget. If a screen edge obscures the Popup, the control repositions itself to align with the screen edge.
Left
A Popup control that aligns its right edge with the left edge of the PlacementTarget and aligns its upper edge with the upper edge of the PlacementTarget.If the left screen-edge obscures the Popup, the Popup repositions itself so that its left edge aligns with the right edge of the PlacementTarget.If the right screen-edge obscures the Popup, the right edge of the control aligns with the right screen-edge.If the upper or lower screen-edge obscures the Popup, the control repositions itself to align with the obscuring screen edge.
Mouse
A position of the Popup control that aligns its upper edge with the lower edge of the bounding box of the mouse and aligns its left edge with the left edge of the bounding box of the mouse. If the lower screen-edge obscures the Popup, it repositions itself to align with the upper edge of the bounding box of the mouse. If the upper screen-edge obscures the Popup, the control repositions itself to align with the upper screen-edge.
MousePoint
A position of the Popup control relative to the tip of the mouse cursor and at an offset that is defined by the HorizontalOffset and VerticalOffset property values. If a horizontal or vertical screen edge obscures the Popup, it opens in the opposite direction from the obscuring edge.If the opposite screen edge also obscures the Popup, it then aligns with the obscuring screen edge.
Relative
A position of the Popup control relative to the upper-left corner of the PlacementTarget and at an offset that is defined by the HorizontalOffset and VerticalOffset property values. If the screen edge obscures the Popup, the control repositions itself to align with the screen edge.
RelativePoint
A position of the Popup control relative to the upper-left corner of the PlacementTarget and at an offset that is defined by the HorizontalOffset and VerticalOffset property values. If a screen edge obscures the Popup, the Popup extends in the opposite direction from the direction from the axis defined by the HorizontalOffset or VerticalOffset.If the opposite screen edge also obscures the Popup, the control then aligns with this screen edge.
Right
A position of the Popup control that aligns its left edge with the right edge of the PlacementTarget and aligns its upper edge with the upper edge of the PlacementTarget. If the right screen-edge obscures the Popup, the control repositions itself so that its left edge aligns with the left edge of the PlacementTarget.If the left screen-edge obscures the Popup, the control repositions itself so that its left edge aligns with the left screen-edge.If the upper or lower screen-edge obscures the Popup, the control then repositions itself to align with the obscuring screen edge.
Top
A position of the Popup control that aligns its lower edge with the upper edge of the PlacementTarget and aligns its left edge with the left edge of the PlacementTarget. If the upper screen-edge obscures the Popup, the control repositions itself so that its upper edge aligns with the lower edge of the PlacementTarget.If the lower screen-edge obscures the Popup, the lower edge of the control aligns with the lower screen-edge.If the left or right screen-edge obscures the Popup, it then repositions itself to align with the obscuring screen.


seek/4
seek(
+Stream,
+Offset,
+Method,
-NewLocation)
Seeks to an arbitrary position in Stream.
A valid Prolog stream.
The offset, in items, to seek relative to the specified Method.
Items are bytes for binary streams, characters for text streams.
[bof,current,eof]
, must be nonvar
Where start seeking, one of the following:
bof
current
eof
The offset from beginning of the file after seeking operation.
Sets the current position of the file stream Stream to a new position according to Offset and Method. If Method is:
bof
current
eof
Avoid using this Method. Determining the size of the stream may be expensive or unsupported for some streams.
Positions and offsets are measured in items, bytes for binary streams and characters for text streams. Note that there may not be any simple relationship between the number of characters read and the byte offset of a text file.
After applying this operation on a text stream, the line counts and line position aspects of the stream position of Stream will be undefined.
The term “file” above is used even though the stream may be connected to other seekable objects that are not files, e.g. an in-memory buffer.
Stream errors (see ref-iou-sfh-est), plus:
instantiation_error
type_error
domain_error
bof
, current
or eof
, or
the resulting position would refer to an unsupported location.
Some streams supports setting the position past the current end of the
stream, in this case the stream is padded with zero bytes or
characters as soon as an item is written to the new location.
permission_error
reposition(true)
, the stream is a text stream
that does not implement seeking, or an I/O error happened during seek.
stream_position/2
, set_stream_position/2
,
open/[3,4]
, byte_count/2
, character_count/2
,
line_count/2
, line_position/2
, ref-iou-sfh.


Trader Espen:
I've sent for the guards, you should leave before they get here. I would not like to see blood spilled over this.


public VaultService
A interface VaultService
is responsible for securely and safely persisting the current state of a vault to storage. The
vault service vends immutable snapshots of the current vault for working with: if you build a transaction based
on a vault that isn't current, be aware that it may end up being invalid if the states that were used have been
consumed by someone else first!
Note that transactions we've seen are held by the storage service, not the vault.
interface VaultService
| Modifier and Type | Interface and Description |
|---|---|
static class |
VaultService.DefaultImpls
A
interface VaultService is responsible for securely and safely persisting the current state of a vault to storage. The
vault service vends immutable snapshots of the current vault for working with: if you build a transaction based
on a vault that isn't current, be aware that it may end up being invalid if the states that were used have been
consumed by someone else first! |
| Modifier and Type | Method and Description |
|---|---|
void |
addNoteToTransaction(SecureHash txnId,
java.lang.String noteText)
Add a note to an existing LedgerTransaction given by its unique
class SecureHash id
Multiple notes may be attached to the same LedgerTransaction.
These are additively and immutably persisted within the node local vault database in a single textual field
using a semi-colon separator |
kotlin.Pair<net.corda.core.transactions.TransactionBuilder,java.util.List> |
generateSpend(TransactionBuilder tx,
Amount<java.util.Currency> amount,
CompositeKey to,
java.util.Set<net.corda.core.crypto.Party> onlyFromParties)
exception InsufficientBalanceException is thrown when a Cash Spending transaction fails because
there is insufficient quantity for a given currency (and optionally set of Issuer Parties).
Note: an class Amount of Currency is only fungible for a given Issuer Party within a interface FungibleAsset |
java.util.Map<java.util.Currency,net.corda.core.contracts.Amount> |
getCashBalances()
Returns a map of how much cash we have in each currency, ignoring details like issuer. Note: currencies for
which we have no cash evaluate to null (not present in map), not 0.
|
Vault |
getCurrentVault()
Returns a read-only snapshot of the vault at the time the call is made. Note that if you consume states or
keys in this vault, you must inform the vault service so it can update its internal state.
|
java.util.Map<net.corda.core.contracts.UniqueIdentifier,net.corda.core.contracts.StateAndRef> |
getLinearHeads()
Returns a snapshot of the heads of LinearStates.
|
rx.Observable<net.corda.core.node.services.Vault.Update> |
getRawUpdates()
Prefer the use of updates unless you know why you want to use this instead.
|
java.lang.Iterable<java.lang.String> |
getTransactionNotes(SecureHash txnId) |
rx.Observable<net.corda.core.node.services.Vault.Update> |
getUpdates()
Get a synchronous Observable of updates. When observations are pushed to the Observer, the Vault will already incorporate
the update, and the database transaction associated with the update will have been committed and closed.
|
<T extends LinearState> |
linearHeadsOfType_(java.lang.Class<T> stateType)
Returns the linearHeads only when the type of the state would be considered an 'instanceof' the given type.
|
void |
notify(WireTransaction tx)
Same as notifyAll but with a single transaction.
|
void |
notifyAll(java.lang.Iterable<net.corda.core.transactions.WireTransaction> txns)
Possibly update the vault by marking as spent states that these transactions consume, and adding any relevant
new states that they create. You should only insert transactions that have been successfully verified here!
|
java.util.Map<net.corda.core.contracts.StateRef,net.corda.core.contracts.TransactionState> |
statesForRefs(java.util.List<net.corda.core.contracts.StateRef> refs) |
kotlin.Pair<net.corda.core.node.services.Vault,rx.Observable> |
track()
Atomically get the current vault and a stream of updates. Note that the Observable buffers updates until the
first subscriber is registered so as to avoid racing with early updates.
|
com.google.common.util.concurrent.ListenableFuture<net.corda.core.node.services.Vault.Update> |
whenConsumed(StateRef ref)
Provide a Future for when a
class StateRef is consumed, which can be very useful in building tests. |
Vault getCurrentVault()
Returns a read-only snapshot of the vault at the time the call is made. Note that if you consume states or keys in this vault, you must inform the vault service so it can update its internal state.
rx.Observable<net.corda.core.node.services.Vault.Update> getRawUpdates()
Prefer the use of updates unless you know why you want to use this instead.
Get a synchronous Observable of updates. When observations are pushed to the Observer, the Vault will already incorporate the update, and the database transaction associated with the update will still be open and current. If for some reason the processing crosses outside of the database transaction (for example, the update is pushed outside the current JVM or across to another Thread which is executing in a different database transaction) then the Vault may not incorporate the update due to racing with committing the current database transaction.
rx.Observable<net.corda.core.node.services.Vault.Update> getUpdates()
Get a synchronous Observable of updates. When observations are pushed to the Observer, the Vault will already incorporate the update, and the database transaction associated with the update will have been committed and closed.
java.util.Map<java.util.Currency,net.corda.core.contracts.Amount> getCashBalances()
Returns a map of how much cash we have in each currency, ignoring details like issuer. Note: currencies for which we have no cash evaluate to null (not present in map), not 0.
kotlin.Pair<net.corda.core.node.services.Vault,rx.Observable> track()
Atomically get the current vault and a stream of updates. Note that the Observable buffers updates until the first subscriber is registered so as to avoid racing with early updates.
java.util.Map<net.corda.core.contracts.UniqueIdentifier,net.corda.core.contracts.StateAndRef> getLinearHeads()
Returns a snapshot of the heads of LinearStates.
<T extends LinearState> java.util.Map<net.corda.core.contracts.UniqueIdentifier,net.corda.core.contracts.StateAndRef> linearHeadsOfType_(java.lang.Class<T> stateType)
Returns the linearHeads only when the type of the state would be considered an 'instanceof' the given type.
java.util.Map<net.corda.core.contracts.StateRef,net.corda.core.contracts.TransactionState> statesForRefs(java.util.List<net.corda.core.contracts.StateRef> refs)
void notifyAll(java.lang.Iterable<net.corda.core.transactions.WireTransaction> txns)
Possibly update the vault by marking as spent states that these transactions consume, and adding any relevant new states that they create. You should only insert transactions that have been successfully verified here!
TODO: Consider if there's a good way to enforce the must-be-verified requirement in the type system.
void notify(WireTransaction tx)
Same as notifyAll but with a single transaction.
com.google.common.util.concurrent.ListenableFuture<net.corda.core.node.services.Vault.Update> whenConsumed(StateRef ref)
Provide a Future for when a class StateRef
is consumed, which can be very useful in building tests.
class StateRef
void addNoteToTransaction(SecureHash txnId, java.lang.String noteText)
Add a note to an existing LedgerTransaction given by its unique class SecureHash
id
Multiple notes may be attached to the same LedgerTransaction.
These are additively and immutably persisted within the node local vault database in a single textual field
using a semi-colon separator
class SecureHash
,
LedgerTransactionjava.lang.Iterable<java.lang.String> getTransactionNotes(SecureHash txnId)
kotlin.Pair<net.corda.core.transactions.TransactionBuilder,java.util.List> generateSpend(TransactionBuilder tx, Amount<java.util.Currency> amount, CompositeKey to, java.util.Set<net.corda.core.crypto.Party> onlyFromParties)
exception InsufficientBalanceException
is thrown when a Cash Spending transaction fails because
there is insufficient quantity for a given currency (and optionally set of Issuer Parties).
Note: an class Amount
of Currency is only fungible for a given Issuer Party within a interface FungibleAsset


public interface InstanceDescription
Note that all methods are idempotent - they always return the same values on subsequent calls. Rather, on any change new InstanceDescriptions are created.
TopologyView
| Modifier and Type | Field and Description |
|---|---|
static String |
PROPERTY_DESCRIPTION
Property containing a description for the instance.
|
static String |
PROPERTY_ENDPOINTS
Property containing endpoints to connect to the instance.
|
static String |
PROPERTY_NAME
Property containing a name for the instance.
|
| Modifier and Type | Method and Description |
|---|---|
ClusterView |
getClusterView()
Returns the ClusterView of which this instance is part of.
|
Map<String,String> |
getProperties()
Returns a Map containing all properties of this instance.
|
String |
getProperty(String name)
Returns the value of a particular property.
|
String |
getSlingId()
The identifier of the running Sling instance.
|
boolean |
isLeader()
If an instance is part of a cluster, it can potentially be a leader of that cluster -
this information is queried here.
|
boolean |
isLocal()
Determines whether this InstanceDescription is representing the local instance.
|
static final String PROPERTY_NAME
static final String PROPERTY_DESCRIPTION
static final String PROPERTY_ENDPOINTS
ClusterView getClusterView()
Every instance is part of a ClusterView even if it is standalone.
boolean isLeader()
If an instance is not part of a cluster, this method returns true.
Only one instance of a cluster is guaranteed to be the leader at any time. This guarantee is provided by this service. If the leader goes down, the service elects a new leader and announces it to TopologyEventListener listeners.
boolean isLocal()
String getSlingId()
String getProperty(String name)
Note that there are no hard guarantees or requirements as to how quickly a property is available once it is set on a distant instance.
name
- The property namenull
DiscoveryService#setProperty(String, String)
Copyright © 2014 The Apache Software Foundation. All rights reserved.


{% extends "base.html" %}
{% block pagecss %}
{% endblock %}
{% block pagehead %}
Smith River Loop 300k, June 24, 2017
Pre-Ride Report
{% endblock %}
{% block subhead %}{% endblock %}
{% block content %}
This will be a fast route for many riders, not particularly hard as 300k brevets go, but the second half is definitely harder than the first half. Consider bringing a third bottle if the day is warm, just for the section from Reedsport to Oxbow Summit. Drink up in Reedsport and fill all the bottles, and top up again at Smith River Store (about 20 miles in from Reedsport).
Edit June 21: It is going to be hot! I very strongly recommend carryng extra water from Reedsport, even if it's just an extra half-liter in a jersey pocket.
Michal Young pre-rode the route June 17, 2017, starting 5am. I rode based on the cue sheet alone without loading the route on GPS. These notes are sequential along the route.
McDonalds has only drive-through at 5am, which is not useful for our purposes. Fortunately just half a block away the Burrito Boy is open and serving food. I did not ask to use the restroom, but I presume they should have one.
[Mile 0] My cues for getting out to the bike path, taken from Google and Ride With GPS, were unusable. Although the path is tantalizingly close to the starting point, the railroad makes it difficult to get directly to. On the other hand, there is almost no traffic at 5am. I will set a simpler path on streets to Skinner Butte Park, where it is simple to get on the path. EDIT: Fixed, we will start east on Broadway and make one right onto High Street. This removed several turns and did not alter the distance. The River Bank Path is very pleasant at 5am ... this will be a nice way to get started.
[Mile 4] We transition off the path to streets that are pretty busy later in the morning, but they are fine that early. The crossing of Hwy 99 at mile 7.4 is protected by a traffic light, and it was triggered by my (steel) bike! On the left, just before that crossing, is a gas station mini-market open early (probably 24 hours) with restrooms and a variety of convenience store foods.
[Mile 19.6] Transition to Hwy 36. I have been informed that next weekend is the “52 mile yard sale” all the way from Junction City to Mapleton. This is apparently a big deal, and will bring the heaviest traffic of the year to the highway. (Can I pick ride dates or what?) However, we will be going through before the worst of it. I was to Deadwood (mile 48.5) before 9am, which is when (according to the cashier at Deadwood Country Market) we can expect to start seeing significant traffic. I'm not a particularly fast rider, so I expect many of you will be close to Mapleton by then.
[Mile 35.5] Triangle Lake: The little grocery store on the right will be open by 7. (Low Pass Market, at mile 26.7, opens at 8 and will almost certainly be closed when you pass.) At this point you've already summitted the coast range, and a nice decent begins. Watch for pocks in the pavement from falling rocks. Lake Creek on your left is very pretty, but hard to appreciate if you are zooming past.
[Mile 48.5] Deadwood (control). The store opens at 8. Offerings are pretty slim ... ice cream bars, sodas, coffee, chips. There will be an information control questions for those who arrive before it opens at 8, and you may also answer the information control question if you prefer to ride on to Mapleton or Florence for resupply. Deadwood Country Market does have a restroom.
[Mile 61.7] Mapleton. Several places to eat on the left after the merge with Hwy 128. I did not stop on this ride, but in the past I have often had coffee and pastry at Caffeination Station, and I have had a hearty lunch at Alpha Bit cafe. On the other hand, at this point you're so close to Florence that I imagine most riders will prefer to just grind out that last 10 miles until the control.
[Mile 76.1] Florence (control). Both lanes of road turn left, but you may want the left lane (turn only) so that you can follow it with a left just after the corner to the Safeway. I skipped the Safeway thinking that there was another grocery on the right, but I must have confused it with another town. The Safeway in Florence is considerably larger than the Safeway in Reedsport, so you might consider resupplying here. I instead had a soda at Nature's Corner Cafe & Market, shortly before the bridge. In the worst case, if you miss the markets in Florence, there are small convenience stores a few miles south, and I will accept those also as the Florence control.
The bridge at the south end is under construction, and not really pleasant, but automobiles were polite and patient as I crossed.
The first few miles south from Florence are only so-so, but soon you'll be riding through coastal forest and along some nice coastal lakes. The road runs far enough inland that there are few glimpses of the ocean, but there is one really nice viewpoint: The National Dunes Day Use area at approximately mile 86.5. Turn right at the sign, and it is perhaps 1/8 mile in to the parking lot. There is a covered area for looking out over the dunes to the ocean, roughly 1/2 mile away. No chance to dip your wheels, but the view is gorgeous.
[Mile 98] Reedsport (control). Two bridges into Reedsport ... again I found auto traffic polite and patient. I really wanted soup and/or a sandwich, and expected to find them at the Safeway. No such luck ... this might be the smallest Safeway I've ever been in. Potato salad came only in family size. There is a restroom, toward the back (look for a label on the double doors). In retrospect I should probably have just left the Safeway and tried either the McKays Market (just north on the other side of the street) or a fast food place. There is a Subway in the same cluster as the Safeway, and a McDonalds and Dairy Queen also close by.
Rehydrate and top your bottles in Reedsport. The next segment is long and fairly remote, with just one small market about 20 miles in. If you carry a third bottle, fill it in Reedsport.
I would also appreciate a text letting me know when you are in Reedsport, so that I can make a rough guess as to when to expect you at the Oxbow summit. If you decide to abandon (I hope not!) then a text message is especially important so that we don't worry about you being stranded somewhere in the next remote section.
[Miles 99-150] You cross the bridge again coming north out of Reedsport, then exit right onto Lower Smith River Road before coming to the second bridge. The first 15 or so miles are nice pavement, and on a warm day you will have a tailwind. You'll pass a couple small parks with vault toilets. At about mile 114.5 you will reach Smith River Store. It is open but quite small; you can get a soda and chips but don't expect much else. Unless you want a beer, because it's also a pub.
This section is really the highlight of the ride. Parts are pastoral, parts are forest, and almost all of it is gorgeous until you reach some unsightly clear-cuts as you approach the summit. Most of the climbing is gentle, again until you near the summit. Pavement quality varies; the chip seal just beyond Smith River Store is pretty rough.
You will lose cell phone service sometime between Reedsport and the Smith River Store, so you might as well put your phone in airplane mode. I forgot to do it before leaving Reedsport, remembered at Smith River Store, and noticed that my phone was down to 30% battery because it had wasted a lot trying to make connections to the fading cell signal.
The climbing gets hard just a few miles from the Oxbow summit, but the climbing doesn't last long. You'll be at the control before you know it.
[Mile 149] We will have a staffed control for you at Oxbow Summit. We'll have water and instant soup — cup-o-noodles for most riders and one or two portions of a vegan lentil soup for our vegetarian riders. (I am pretty sure Keith is vegan ... anyone else have dietary restrictions?) We'll also have water to top your bottles. I don't think you'll be in the mood for bars and sweet stuff, but we'll have a bit on hand in case. If there is something else that you think you'll really, really want 150 miles in, with one more hard climb ahead, let me know.
I got one bar on Verizon at the summit, and was able to send a text message.
[Miles 149-166] There is a swift curvey descent from the summit. Use some care, because there are some big drops from the edge on those hairpin turns. Then there is a bit of flat or rolling terrain as you proceed through Alma, an abandoned prison, and on toward the Wolf Creek turn (mile 156.8). Harder climbing starts immediately after the turn and continues for about 3 miles. You will have cellular telephone service again at the summit of Wolf Creek.
The descent from Wolf Creek summit is a delight ... steep enough to work up some real speed, with swoopy curves that won't make you ride your brakes overly much. At about mile 161.5 the first descent ends, and there is a very gentle climb to a second, minor summit at about mile 166, followed by one more swoopy descent.
Just as that beautiful descent finishes and the road flattens out, you reach the turn onto Territorial Road.
[Mile 168.5-177] DS Market in Crow is about 1 mile off course; just continue Territorial without turning onto Crow Road. Closes at 8. But if you stay on course, there is a gas station with a Jacksons at mile 177, where Crow Road crosses Hwy 127 and becomes Greenhill Road. I really needed it, as my water bottles were empty despite carrying a folding extra bottle that refilled one of my regular bottles and half of the other, and I would have drunk more if I had more. (You'll get topped up at Oxbow, so you won't need as much as I did.) The soda fountain in the Jacksons will dispense water (the lever is under the Gatorade spout), so you can buy some small thing and refill your bottles free if you want. I like to fill one bottle with water and buy a soda with lots of ice to pour into the other.
[Mile 177-187] Technically you are on Greenhill Road before you reach the intersection at Mile 177, but you won't notice it unless you are following a GPS that announces it. The traffic light where Greenhill crosses Hwy 127 will not sense a bicycle, so you may need to use the cross-walk signal. The Jacksons is on your right on the north side of the intersection.
You ride about a mile north on Greenhill and take a right into Meadowlark Prairie Park, the western terminus of Fern Ridge Path. The path parallels Greenhill for about a third of a mile, then turns right just where Greenhill Road meets Royal Ave. If you missed the turn into Meadowlark Park, there is another entry to the path just before the intersection.
There is an information control at the turn, actually at the bench which is just after the turn and a small bridge. It will be simple, and if you have any difficulty with it just take a picture of the area to prove you didn't short-cut the route by taking Hwy 127 in, which of course you didn't because that would be unpleasant and unsafe.
And then ... just path, path, path into Eugene. There are a few dog-legs where you need to be on a street for a very short connection between segments of path, but those will be obvious. There is one confusing Y where you could go left to Roosevelt or right to Eugene Downtown (mile 179.1); go right. A few times the path splits to give you the choice of going under a bridge or crossing at street level, and unless we have an unexpected deluge of rain between now and Saturday you should choose the underpasses.
The path finally ends just before Jefferson Ave. The path turns hard right, then you exit it to dog-leg over the 15th Street and right onto the street (you'll see it's the only way to transition onto a street continuing east). 15th street is a designated bicycle route with sharrows. You take it all the way to Alder street, the west edge of the University of Oregon, and there turn right onto a two-way bicycle way on the left side of the street. The first traffic light you come to is 18th, which has a dedicated light for cyclists and a good sensor to trigger it. Turn left on 18th, over a little hump and down to Agate, turn right and in one block you'll see McMenamins on your right.
A volunteer will be inside McMenamins to sign your card and congratulate you. We'll try to also have a few bike locks available so that you can leave your bicycle on the bike rack. McMenamins is a branch of the same chain that has a number of brew-pubs and interesting inns around Oregon. The 19th Street McMenamins Cafe is a smaller outpost, with no brewing on-site, but it offers the usual McMenamins menu including Terminator Stout, cajun tots, Captain Nemo burger, etc.
Parking: The start and the end are approximately a mile apart. You might want to park between them, but closer to the end, because you'll be a lot more tired then. Edit: The lot I initially recommended, behind the Law School, has been replaced by new student dorms. However, there is a section of 15th street on the west side of Agate that is free on Saturdays. Signs say overnight parking is prohibited, and times before 5am and after midnight are considered overnight, but I doubt they are checked after 4am or before 1am.
Lodging: Phoenix Inn Suites is near the start. New Oregon Motel is nearer the end of the ride. There are numerous smaller hotels near the start point.
Beer: If you live in Eugene, you don't need my advice on this. If you are visting and have time for some local beer and good food, I highly recommend Falling Sky Brewing House & Gastropub, 1334 Oak Alley. Food prices are on the high side, but worth it. The Bier Stein at 1591 Willamette Street has the widest selection of microbrews in town, and possibly in the galaxy. Ninkasi is probably the most famous beer out of Eugene, with a pleasant outdoor dining area.
Main event page (description, registration, etc.)
{% endblock %}


This was last updated in 23th Feb 2021. It may be out of date. If you have any questions, please contact me by email at<EMAIL_ADDRESS>Jang seoksoon
Resume
Github
Stack overflow
Linked in
I found programming is the most elegant yet dominant tool ever to be able do "Good" World domination.
Resume Contents:
University of Leicester (September, 2020 - September 2021) - Leicester, the United Kingdom
Korea National Open University (March, 2016 - August, 2020) - Seoul, South Korea
- Bachelor of Science, Computer Science
- GPA: 3.9 / 4.5
- Computer Science
Studied Computer Science Subjects such as
Algorithm, Data Structure, Database Systems Principles, Computer Networks and Protocols,
Programming Language Theory, Operating System and Discrete Mathematics and so on.
Illinois Institute of Technology (Sepember, 2013 - December, 2013, 'DROP OUT') - Chicago, Illinois, the United States
- Bachelor of Science in Computer Science, College of Science (DROP OUT)
Dongyang Mirae University (March, 2006 - February, 2013) - Seoul, South Korea
- Associate of Science (A.S.) Computer Science
- GPA: 4.14 / 4.5 (120 credits earned)
- Studied core topics of Computer Science such as Design and analysis of Algorithm, Data Structure, OOP, and Software engineering, TCP/IP Networking.
I have strong knowledge of the following technologies:
-
Fluent:
- Swift, Objective-C: I am able to write a poetry on iOS, macOS, watchOS, tvOS.
-
Intermediate:
- Javascript, ClojureScript, Clojure: React Native, Node.js
- Firestore, Cloud Function, FCM: Firebase
-
Basic abilities:
- Java, Kotlin: Able to read and write working codes on Android.
- Python: Able to do personal Script Automation tasks, Web Scrapping.
- Founder of HLVM
- December, 2020 - 'Present'
- Abstraction
Code Snippet Autocompletion Platform for Programmers.
As a founder myself, I have been developing every features from beginning without out sourcing
for not only programming implementation but also software design, UI/UX design and so on
overall on multiple platforms such as macOS(Primary Platform), Web app, iOS, Android.
- Projects
- Software Engineer (Contract)
- June, 2016- 'Present'
- Abstraction
Working as a solo freelance, who had won a large number of contracts from a various number of clients
ranging from start-up to conglomerates either by myself independently or third party
freelancer agencies, (primarily via Wishket, the most popular platform in South Korea
where businesses and professional individuals can connect and collaborate both remotely or in office.)
• Platforms: iOS, macOS, Android, React Native, Web Frontend, Firebase, Serverless
• Cumulative amount of revenue in the one platform (Wishket): $68,371
• Received performance satisfaction assessment score from a number of clients: 5.0/5.0
• Reference: https://www.wishket.com/partners/p/boraseoksoon/
- Projects
(Although not listed, there are more than that..)
- PhotoCell - 2019.11.16 ~ 2019.11.17
- ALL DAYZ - November, 2018 ~ January, 2019
- Xiaoling Toys - September, 2017 ~ , April 2018
-
(closed, not maintained.)
I was in charge of entire iOS development in a startup. It once ranked under #50 in China App Store.
- Link : how it works
- Wishket freelancer - June, 2016 ~
-
Working as a solo freelance, who had won a large number of contracts from a various number of
clients ranging from start-up to conglomerates either by myself independently or third party
freelancer agencies, (primarily via Wishket, the most popular platform in South Korea where
businesses and professional individuals can connect and collaborate both remotely or in office.)
- Link : my wishket profile can be found in here. you can check if you are interested.(Login may be required :))
- worked as a full-time iOS Software engineer in KOINO R&D department 2
- April, 2014 - June, 2016
- Abstraction
Took responsibility for iOS/macOS such as software development, test, distribution, maintenance.
Built and maintained internal static library and SDK, and a large number of user level apps
based on these SDKs implementing SIP(Session Initiation Protocol) and VNC(Virtual Network
Computing) protocols for telecommunications and remote control softwares.
Assisted co-workers in Android Development.
- Projects
- KEB Hanabank: Non-face-to-face Bank Account SDK for iOS
- October, 2015 ~ April, 2016
- Link : available in Apple Appstore.
- Press release link :
- ZDNet Korea released this article here.
- Seoul City: Angel Eyes Project for iOS
- October, 2015 ~ April, 2016
- Link : for user and
for helper in Apple Appstore.
- Press release :
- KBS official press release for this service is here.
- TBS official press release for this service is here and this one.
- KTV official press releases for this service are this one.
- LG CNS IVCT Video Call for iOS
- April, 2014 ~ June, 2016
- Link :
- BPNR: Solution R&D Department
(Intern)worked as a java back-end software engineer
January, 2013 - March, 2013
Abstraction
As the intern, I participated and contributed partly to an internal forum using Java, Spring framework, and Oracle RDBMS on JVM Platform.


Samsung Galaxy S7 edge | 7
1.000,00 USD
The Edge Galaxy S7 series has elegant design with edges. They comes with really advanced hardware and software integration for better performance. Both phones are powered by Quick charging which enables users to get high charging (83%) in just 30 minutes. Although most of the specs for Edge variant is same but it has slightly upper hand over normal S7. Let’s check out the Samsung Galaxy S7 Edge specifications below:
- 5.5 inch SUPER AMOLED
- 1440 X 2560 pixels, ~534 ppi
- 150.9 X 72.6 X 7.7 mm, 157 grams
- Android v6.0 Marshmallow
- Curved Edge display
- Snapdragon 820, Exynos 8890 Octa
- 4GB RAM, 32 / 64 GB, micro SD up to 200 GB
- 12 MP primary camera
- 5 MP front camera
- 3600 mAh non-removable battery


Uniting the Nation with his Swingline Stapler
Stephen Root’s IMDb profile lists over 200 credits in both films and TV shows, doing both on-camera roles and voice
work for animated series. That includes everything from historical dramas to children’s fare; from prestige TV to
raunchy comedies. In other words, he’s the consummate character actor, willing to throw himself into the hands of
whatever project tickles his peculiar fancy. With the recent premiere of his latest film role, in the Jason
Schwartzman-starring 7 Chinese Brothers, we decided to offer up our picks for Root’s best comedic performances.
Great as he was in NewsRadio, the world will long remember Root for his performance as Milton, the
mealy-mouthed, long-suffering drone at IniTech who wants nothing more but to keep his sweaty hands on the
coveted red Swingline stapler. For as great as his vocal work is, Root’s physical comedy here is priceless, as
he shuffles and twitches and jerks his head around like a nervous squirrel.
Root News Volume #1
Stephen Edward Root (born November 17, 1951) is an American actor and voice actor. He has starred as Jimmy James on
the TV sitcom NewsRadio, as Milton Waddams in the film Office Space and as the voices of Bill Dauterive and Buck
Strickland in the animated series King of the Hill.[1] His other roles have included Captain K'Vada in the Star
Trek: The Next Generation feature-length episode "Unification", and Gordon Pibb in DodgeBall: A True Underdog Story.
read more


About
This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at jekyllrb.com
You can find the source code for the Jekyll theme at: github.com/brijeshb42/bitwiser-material
You can find the source code for Jekyll at github.com/jekyll/jekyll