Jerimiah Woods
-Aspiring Software Developer-
-Aspiring Software Developer-
4511 Puttor Drive
Eau Claire, WI 54701
(715) 572-4512
<EMAIL_ADDRESS>Eau Claire, WI 54701
(715) 572-4512
<EMAIL_ADDRESS>Personal Profile
I moved to Eau Claire, Wisconsin in 2009 to attend the University of Wisconsin - Eau Claire. I completed a four year degree in Actuarial Science there in 2013. Soon after that I was given the opportunity to do some work with a local software development business where I learned Objective-C and helped to build an iOS application. After that experience I decided to pursue software development as a career and enrolled at Chippewa Valley Technical College. In my three semesters there I have finished all but one class in their Software Developer program. Armed with that education, along with a few side projects and a strong desire and aptitude, I'm looking forward to beginning a career in development here in Eau Claire.
Education
Chippewa Valley Technical College
Anticipated Graduation: December 2015
- Associate of Applied Science – Information Technology – Software Developer
- 65/68 credits completed
- Registered to complete final class (ASP .Net) online in Fall 2015
University of Wisconsin - Eau Claire
Graduation Date: May 2013
- Bachelors of Science - Actuarial Science
- Passed Exam FM - Financial Mathematics
Technologies
- Software Development: Objective-C, Java, Groovy, Visual Basic, Android
- Web Development: HTML, CSS, JavaScript, Java, PHP, Ruby on Rails
- Developer Tools: Git, Bitbucket, PivotalTracker, Xcode, Eclipse, IntelliJ, NetBeans
- Operating Systems: Mac OSX, Windows, Linux
- Databases and Reporting: SQL, Access, Crystal Reports
Portfolio
- InterValve is the first project I ever worked on. It is an iOS application I helped build in 2013.
- To Do is a PHP web application I am currently building that utilizes JavaScript and MySQL.
- Property World is a web application I built with an agile team at CVTC. We used Ruby on Rails. See what my team had to say about me.
- Where in the Word is a personal project I've been working on using Java.
Work History
Mobile Application Developer
(August 2013 - October 2013)
GalacticTech
Mondovi, WI
- Learned Objective-C through a combination of self-study and professional guidance
- Assisted in development of marketing application using Xcode
Shift Leader
(June 2011 - Present)
Kwik Trip, Inc.
Eau Claire, WI
- Effectively lead team on Madison Street, one of the highest volume convenience stores in the Chippewa Valley, to ensure all duties are accomplished in an excellent and timely manner
- Demonstrate reliability by maintaining perfect attendance
Table Games Dealer/Dual Games Supervisor
(July 2007 - Sept 2009)
Ho-Chunk Gaming - Nekoosa
Nekoosa, WI
- Personally created and conducted 30-player, semi-weekly poker tournaments
- Managed and observed four dealers simultaneously to ensure speed, accuracy, and game security
- Delivered excellent and entertaining customer service, building rapport with clientele


Description:
It is the pre-processor part of a CAPE simulator.
It uses the CAPE-OPEN SMST Component.
Associations:
has
Role A:
Class: Sequential Modular Executive
Navigatable: no
Aggregate: no
Static: no
Friend: no
Cardinality: 1
Role B:
Class: Pre-Processor Subsystem
Navigatable: no
Aggregate: no
Static: no
Friend: no
Cardinality: 1


Qualified Responders
Search
Occupation:
All
Physician
Respiratory Therapist
Veterinarian
Availability:
All
Available
Not Available
Unknown
Name
Occupation
Location
Availability
Loading...


Removal Messages
Rule 1:
Rule 2:
Rule 2b:
Rule 3:
Rule 4:
Rule 5:
Rule 6:
Rule 7:
Rule 8:
Rule 9:
Footer:
One Tap Removals:
Save


TransactionEntity
public protocol TransactionEntity
convenience representation of all transaction types
-
Internal transactio id
Declaration
Swift
var id: Int? { get set }
-
Blockchain transaction id
Declaration
Swift
var transactionId: Data { get set }
-
String representing the date of creation
format is yyyy-MM-dd’T'HH:MM:ss.SSSSSSSSSZ
- Example: 2019-12-04T17:49:10.636624000Z
Declaration
Swift
var created: String? { get set }
-
Undocumented
Declaration
Swift
var transactionIndex: Int? { get set }
-
Undocumented
Declaration
Swift
var expiryHeight: BlockHeight? { get set }
-
Undocumented
Declaration
Swift
var minedHeight: BlockHeight? { get set }
-
Undocumented
Declaration
Swift
var raw: Data? { get set }
-
hash(into:)
Extension methodUndocumented
Declaration
Swift
func hash(into hasher: inout Hasher)
-
==(_:_:)
Extension methodUndocumented
Declaration
Swift
static func == (lhs: Self, rhs: Self) -> Bool


We're working out how to make practical for a household, the processes and tools that large organisations use to store and organise
things. Read along and follow us to see how open source project techniques, tools and technologies are being used to do this.
Launchng OSX scripts
Feb 1, 2014
Java
Feb 1, 2014
Building a folder and document based protocol
Feb 1, 2014
giubilo up and running
Mar 8, 2015
Do you collect a ton of photos, notes, receipts, to-do's, music, movies, documents, recipes, how-to's, bookmarks? Are you trying to manage a life that's sprawling everywhere at home and online? Giubilo is a virtual personal assistant to help tie up the loose ends of organising your life and leisure time.
The processes and tools to do this aren't new:
Between these they have had: sophisticated linking, analytics, collaboration and search, version control, file signing, integrity checks, encryptions licensing and citability, granular access models, flexible rules-based workflows and tools for backup, sync and cloud access.
It makes sense to consumerise these cool capabilities to help at home...READ MORE
We're developing tools that you can download and use for, storing all your digital things forever, no matter what they are, find them no matter where you are and share them safely and easily...
Giubilo is made up of Concepts - things being built, Retrospectives - step-by-step how-did's to make things easy to understand and recreate and Points of view - thoughts for where things could go...
The software and information developed is open source and is using open source tools, techniques and technologies, like Q&A Communities, ALM and DevOps, Crowd Sourcing, Java, Go, UPnP, CMIS, Eclispe, Github, Docker...


A proof of concept to show the current limitations of responsive design and how it can be solved. asDesigned gives back the power to the designers so that they can make their design to be asDesigned.
A Unitless, Fluid, Elastic, Semantic, Responsive, Scalable, Debuggable, Declarative, Simple to use Grid System! And... HTML5 and CSS3 Ready!


|
Copies data from the source operand (second operand) to the I/O port specified with the destination operand (first operand). The source operand is a memory location, the address of which is read from either the DS:ESI or the DS:SI registers (depending on the address-size attribute of the instruction, 32 or 16, respectively). (The DS segment may be overridden with a segment override prefix.) The destination operand is an I/O port address (from 0 to 65,535) that is read from the DX register. The size of the I/O port being accessed (that is, the size of the source and destination operands) is determined by the opcode for an 8-bit I/O port or by the operand-size attribute of the instruction for a 16- or 32-bit I/O port.
At the assembly-code level, two forms of this instruction are allowed: the "explicit-operands" form and the "no-operands" form. The explicit-operands form (specified with the OUTS mnemonic) allows the source and destination operands to be specified explicitly. Here, the source operand should be a symbol that indicates the size of the I/O port and the source address, and the destination operand must be DX. This explicit-operands form is provided to allow documentation; however, note that the documentation provided by this form can be misleading. That is, the source operand symbol must specify the correct type (size) of the operand (byte, word, or doubleword), but it does not have to specify the correct location. The location is always specified by the DS:(E)SI registers, which must be loaded correctly before the OUTS instruction is executed.
The no-operands form provides "short forms" of the byte, word, and doubleword versions of the OUTS instructions. Here also DS:(E)SI is assumed to be the source operand and DX is assumed to be the destination operand. The size of the I/O port is specified with the choice of mnemonic:
OUTSB (byte), OUTSW (word), or OUTSD (doubleword).
After the byte, word, or doubleword is transferred from the memory location to the I/O port, the (E)SI register is incremented or decremented automatically according to the setting of the DF flag in the EFLAGS register. (If the DF flag is 0, the (E)SI register is incremented; if the DF flag is 1, the (E)SI register is decremented.) The (E)SI register is incremented or decremented by 1 for byte operations, by 2 for word operations, or by 4 for doubleword operations.
The OUTS, OUTSB, OUTSW, and OUTSD instructions can be preceded by the REP prefix for block input of ECX bytes, words, or doublewords. See "REP/REPE/REPZ/REPNE /REPNZ-Repeat String Operation Prefix" in this chapter for a description of the REP prefix.
This instruction is only useful for accessing I/O ports located in the processor's I/O address space. See Chapter 13, Input/Output, in the IA-32 Intel Architecture Software Developer's Manual, Volume 1, for more information on accessing I/O ports in the I/O address space.
|


{%- include head.html -%}
{%- include header.html -%}
HOME
Projects
Resume
BLOG
{{ content }}
{%- include footer.html -%}


The Great Station
Welcome to the Great Station, home of the world's most famous locomotives in motion! Check to see when your train will arrive.
Current Train Schedule
Train Name
Destination
Frequency (min)
Next Arrival
Minutes Away
Add Train
Train Name
Destination
First Train Time (HH:mm - military time)
Frequency (min)
Submit


Police release video of officer-involved shooting in Wilmington that left one man dead
by ABC7.com staffWILMINGTON, LOS ANGELES (KABC) -- Police released new video Thursday of an officer-involved shooting in Wilmington where one man was killed.
The incident happened in September at a mobile home park near Figueroa and Anaheim Streets.
When officers arrived to the scene, they found David Hernandez outside naked, according to the Los Angeles Police Department.
His father Raymond Hernandez stepped out of a nearby trailer with one hand behind his back. Officers opened fire when he pointed a gun at them.
Raymond was struck and killed and his son David was later arrested.
No officers were hurt. The investigation is ongoing.


Async client for different request types
| ..., .list | Any number of objects of class |
|---|
An object of class AsyncVaried
with variables and methods
Methods
request()
Execute asynchronous requests - returns: nothing, responses stored inside object, though will print messages if you choose verbose output
requests()
list requests
- returns: a list of HttpRequest
objects, empty list before
requests made
responses()
list responses
- returns: a list of HttpResponse
objects, empty list before
requests made
parse(encoding = "UTF-8")
parse content - returns: character vector, empty character vector before requests made
status_code()
(integer) HTTP status codes - returns: numeric vector, empty numeric vector before requests made
status()
(list) HTTP status objects
- returns: a list of http_code
objects, empty list before
requests made
content()
raw content - returns: raw list, empty list before requests made
times()
curl request times - returns: list of named numeric vectors, empty list before requests made
Other async: Async
not_run({ # pass in requests via ... req1 <- HttpRequest$new( url = "https://httpbin.org/get", opts = list(verbose = TRUE), headers = list(foo = "bar") )$get() req2 <- HttpRequest$new(url = "https://httpbin.org/post")$post() # Create an AsyncVaried object out <- AsyncVaried$new(req1, req2) # before you make requests, the methods return empty objects out$status() out$status_code() out$content() out$times() out$parse() out$responses() # make requests out$request() # access various parts ## http status objects out$status() ## status codes out$status_code() ## content (raw data) out$content() ## times out$times() ## parsed content out$parse() ## response objects out$responses() # pass in requests in a list via .list param reqlist <- list( HttpRequest$new(url = "https://httpbin.org/get")$get(), HttpRequest$new(url = "https://httpbin.org/post")$post(), HttpRequest$new(url = "https://httpbin.org/put")$put(), HttpRequest$new(url = "https://httpbin.org/delete")$delete(), HttpRequest$new(url = "https://httpbin.org/get?g=5")$get(), HttpRequest$new( url = "https://httpbin.org/post")$post(body = list(y = 9)), HttpRequest$new( url = "https://httpbin.org/get")$get(query = list(hello = "world")) ) out <- AsyncVaried$new(.list = reqlist) out$request() out$status() out$status_code() out$content() out$times() out$parse() })


AWS::S3::BucketPolicy
Applies an Amazon S3 bucket policy to an Amazon S3 bucket. If you are using an identity
other than the root user of the AWS account that owns the bucket, the calling
identity must have the PutBucketPolicy
permissions on the specified bucket and
belong to the bucket owner's account in order to use this operation.
If you don't have PutBucketPolicy
permissions, Amazon S3 returns a 403
Access Denied
error. If you have the correct permissions, but you're not using an
identity that belongs to the bucket owner's account, Amazon S3 returns a 405 Method Not
Allowed
error.
As a security precaution, the root user of the AWS account that owns a bucket can always use this operation, even if the policy explicitly denies the root user the ability to perform this action.
For more information, see Bucket policy examples.
The following operations are related to PutBucketPolicy
:
Syntax
To declare this entity in your AWS CloudFormation template, use the following syntax:
JSON
{ "Type" : "AWS::S3::BucketPolicy", "Properties" : { "Bucket" :
String
, "PolicyDocument" :Json
} }
YAML
Type: AWS::S3::BucketPolicy Properties: Bucket:
String
PolicyDocument:Json
Properties
Bucket
-
The name of the Amazon S3 bucket to which the policy applies.
Required: Yes
Type: String
Update requires: Replacement
PolicyDocument
-
A policy document containing permissions to add to the specified bucket. In IAM, you must provide policy documents in JSON format. However, in CloudFormation you can provide the policy in JSON or YAML format because CloudFormation converts YAML to JSON before submitting it to IAM. For more information, see the AWS::IAM::Policy PolicyDocument resource description in this guide and Access Policy Language Overview in the Amazon S3 User Guide.
Required: Yes
Type: Json
Update requires: No interruption
Examples
Bucket policy that allows GET requests from specific referers
The following sample is a bucket policy that is attached to the DOC-EXAMPLE-BUCKET bucket and allows GET requests that originate from www.example.com and example.net:
This key should be used carefully. It is dangerous to include a publicly known
referer header value. Unauthorized parties can use modified or custom browsers to
provide any aws:referer
value that they choose. As a result,
aws:referer
should not be used to prevent unauthorized parties from
making direct AWS requests. It is offered only to allow customers to
protect their digital content, such as content stored in Amazon S3, from being
referenced on unauthorized third-party sites. For more information, see aws:referer
in the IAM User Guide.
JSON
{ "SampleBucketPolicy": { "Type": "AWS::S3::BucketPolicy", "Properties": { "Bucket": { "Ref": "DOC-EXAMPLE-BUCKET" }, "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:aws:s3:::", { "Ref": "DOC-EXAMPLE-BUCKET" }, "/*" ] ] }, "Principal": "*", "Condition": { "StringLike": { "aws:Referer": [ "http://www.example.com/*", "http://example.net/*" ] } } } ] } } } }
YAML
SampleBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref DOC-EXAMPLE-BUCKET PolicyDocument: Version: 2012-10-17 Statement: - Action: - 's3:GetObject' Effect: Allow Resource: !Join - '' - - 'arn:aws:s3:::' - !Ref DOC-EXAMPLE-BUCKET - /* Principal: '*' Condition: StringLike: 'aws:Referer': - 'http://www.example.com/*' - 'http://example.net/*'


The following is a list of compile dependencies for this project. These dependencies are required to compile and run the application:
The following is a list of transitive dependencies for this project. Transitive dependencies are the dependencies of the project dependencies.
The following is a list of compile dependencies for this project. These dependencies are required to compile and run the application:
| GroupId | ArtifactId | Version | Type | License |
|---|---|---|---|---|
| org.codehaus.jackson | jackson-core-asl | 1.9.8 | jar | The Apache Software License, Version 2.0 |
| org.codehaus.jackson | jackson-mapper-asl | 1.9.8 | jar | The Apache Software License, Version 2.0 |
Apache 2.0 license: Restlet Core - API and Engine, Restlet Extension - JSON, Restlet Extension - Jackson, Restlet Extension - Servlet
EPL 1.0 license: Restlet Core - API and Engine, Restlet Extension - JSON, Restlet Extension - Jackson, Restlet Extension - Servlet
LGPL 3.0 license: Restlet Core - API and Engine, Restlet Extension - JSON, Restlet Extension - Jackson, Restlet Extension - Servlet
Unknown: DemoWebAPI, JSON framework
BSD: Bean Materializer
CDDL 1.0 license: Restlet Core - API and Engine, Restlet Extension - JSON, Restlet Extension - Jackson, Restlet Extension - Servlet
LGPL 2.1 license: Restlet Core - API and Engine, Restlet Extension - JSON, Restlet Extension - Jackson, Restlet Extension - Servlet
The Apache Software License, Version 2.0: Apache Log4j, Data Mapper for Jackson, JAX-RS provider for JSON content type, Jackson, Support for Smile data format ("binary infoset for JSON"), Xml Compatibility extensions for Jackson
GNU Lesser General Public License (LGPL), Version 2.1: Data Mapper for Jackson, JAX-RS provider for JSON content type, Jackson, Support for Smile data format ("binary infoset for JSON"), Xml Compatibility extensions for Jackson
| Filename | Size | Entries | Classes | Packages | JDK Rev | Debug |
|---|---|---|---|---|---|---|
| log4j-1.2.16.jar | 470.25 kB | 346 | 308 | 20 | 1.1 | debug |
| jackson-core-asl-1.9.8.jar | 223.17 kB | 136 | 120 | 8 | 1.5 | debug |
| jackson-core-lgpl-1.9.11.jar | 231.98 kB | 137 | 121 | 8 | 1.5 | debug |
| jackson-jaxrs-1.9.11.jar | 17.90 kB | 17 | 7 | 1 | 1.5 | debug |
| jackson-mapper-asl-1.9.8.jar | 762.02 kB | 529 | 502 | 18 | 1.5 | debug |
| jackson-mapper-lgpl-1.9.11.jar | 767.42 kB | 529 | 502 | 18 | 1.5 | debug |
| jackson-mrbean-1.9.11.jar | 65.68 kB | 45 | 31 | 3 | 1.5 | debug |
| jackson-smile-1.9.11.jar | 50.93 kB | 22 | 12 | 1 | 1.5 | debug |
| jackson-xc-1.9.11.jar | 26.45 kB | 19 | 9 | 1 | 1.5 | debug |
| org.restlet-2.1.2.jar | 711.36 kB | 427 | 399 | 21 | 1.5 | debug |
| org.restlet.ext.jackson-2.1.2.jar | 5.11 kB | 10 | 2 | 1 | 1.5 | debug |
| org.restlet.ext.json-2.1.2.jar | 5.33 kB | 10 | 2 | 1 | 1.5 | debug |
| org.restlet.ext.servlet-2.1.2.jar | 19.21 kB | 15 | 8 | 2 | 1.5 | debug |
| org.restlet.lib.org.json-2.0.jar | 47.65 kB | 20 | 18 | 1 | 1.5 | debug |
| Total | Size | Entries | Classes | Packages | JDK Rev | Debug |
| 14 | 3.32 MB | 2,262 | 2,041 | 104 | 1.5 | 14 |
| compile: 14 | compile: 3.32 MB | compile: 2,262 | compile: 2,041 | compile: 104 | - | compile: 14 |
| Repo ID | URL | Release | Snapshot |
|---|---|---|---|
| maven-db4o | https://source.db4o.com/maven/ | Yes | Yes |
| maven2-java | http://download.java.net/maven/2 | Yes | Yes |
| org.maven | http://repo1.maven.org/maven2 | Yes | Yes |
| org.restlet | http://maven.restlet.org/ | Yes | Yes |
| maven-restlet | http://maven.restlet.org | Yes | Yes |
| maven1-java | http://download.java.net/maven/1 | Yes | Yes |
| central | http://repo.maven.apache.org/maven2 | Yes | - |
| maven-central | http://repo1.maven.org/maven2/ | Yes | Yes |
Repository locations for each of the Dependencies.


this is a learners guide to HTML, which will teach you many elements, scaling from easy to expert.
for feedback and help email me at<EMAIL_ADDRESS>ps: since i've just started, show this to all your friends please!!


--- layout: post title: "Building your first Eclipse quick fix" date: 2014-09-28 23:47:06 -0500 comments: false ---
I recently started a project called fb-contrib quickfixes that focuses on creating quickfixes for FindBugs-detected bugs. At first, it was a bit difficult, because, to my knowledge, there isn't a nice friendly "how to make a quickfix" tutorial, so I thought I'd make one.
In this tutorial, we will make the following quickfix.
This is a good start if you want to contribute quickfixes yourself to the project or if you are interested in a hands-on exercise with abstract syntax trees (ASTs, for short - see below).
It fixes a bug called LSC_LITERAL_STRING_COMPARISON which, as you can see, is easily fixed by swapping the argument (the String
literal) and the String
variable (which could be null).
You will be writing software for Eclipse to perform the quickfixes, so I'll start discussing how Eclipse deals with Java source code - Abstract Syntax Trees (ASTs). The Wikipedia article covers it well, but basically, ASTs are a semantic representation of the source code - Eclipse knows what each line is, whether it's an if statement, a variable initialization statement, etc. Let's look at an example of some source code and its representative AST.
The outer-most ASTNode is a TypeDeclaration for the class ForQuickFixes
.
TypeDeclarations have some bookkeeping things like modifiers, a name, whether it's an interface or not, but we mostly care about the stuff inside of it, lines 3-7, which are the BodyDeclarations.
Remember, in a class, you can define fields, methods and other types, so that is what these are - an ordered list of all fields, methods and types defined in ForQuickFixes. This happens to just be a single MethodDeclaration that corresponds to our main
method.
MethodDeclarations can also have bookkeeping things, like a name, modifiers, a list of arguments (of type SingleVariableDeclaration), but if we are looking to fix Literal String Comparisons, we only really care about what goes on inside the method - the body. The body is a Block, which is basically a wrapper for a bunch of Statements.
Statements
are basically executable lines of code, so we run into them pretty frequently.
In fact, our code snippet has
two
statements, an IfStatement and an ExpressionStatement corresponding to System.out.println("Test 1.0");
.
Statements generally have other Statements nested inside of them, as well as Expressions, the other key building block that you will encounter a lot. For example, the IfStatement is composed of other Statements and Expressions like this:
The Expression we are interested in is args[0].equals("version")
, which happens to be a MethodInvocation and it is currently the rightOperand of an InfixExpression.
This MethodInvocation has a name, an expression (aka the object upon which the method is invoked), and a List<Type>
of arguments.
The one argument is a StringLiteral.
Discovering, reasoning about, and navigating this AST is much easier (for me, at least) when I use a tool called ASTView, which is an Eclipse plugin.
An important tool for navigating the AST is the Visitor pattern. Basically what we will do is create an object which will be given to the AST. The AST will ping the object with notifications as it navigates the passed-in object through the entire the tree.
So, if we are interested in MethodInvocations, we will make the visiting object have a visit(MethodInvocation node)
method that will be called for every MethodInvocation in the AST, giving us a chance to poke around with all of the nodes.
For this tutorial, I'm providing an already setup Eclipse workspace, downloadable here. As of writing, the 3.0.0 version of the FindBugs plugin does not support extension, but a dev version does. Here is a compiled dev version (with fb-contrib bundled). Uninstall FindBugs from Eclipse (if already installed) and then unzip the bundle and install it from Eclipse. See http://stackoverflow.com/a/16074606/1447621 for more details. If you want to do this in hard mode, follow the dev setup instructions for fb-contrib quickfixes - it will amount to basically the same thing.
Read the two prerequisite sections above if you haven't already. You may also wish to install ASTView from above.
First, we need to start by registering our bug pattern to be fixed. We do this by updating the plugin.xml file, which is responsible for declaring how we are extending other Eclipse plugins (among other things).
Now, we'll make the class we promised to make in plugin.xml - LiteralStringComparisonResolution
.
BugResolution
, the superclass has two methods that we are required to overwrite.
Moreover, we will
true
, but, if you find yourself not needing to verify types, return false
, to improve performance.
This method will be called when the user has opted to fix the bug.
So, given these three variables, we need to find the buggy code and create a fix.
These three lines will appear in most every quickfix.
What do they do?
They find the node that contains the bug (line #12) and then traverse that node with the custom visitor (#13-14).
This is our custom node visitor.
ASTVisitor has a bunch of visit methods, but they are all basically empty by default.
We'll override the ones we want next.
Now, we'll code the visitor.
The purpose of the visitor will be to find the incorrect MethodInvocation
and
also identify the String
literal and the String
variable so they can be swapped.
Since we are looking for a MethodInvocation
to fix, we will override visit(MethodInvocation)
as seen below:
arguments()
) are non-parameterized.
When we cast them (e.g. to a List<Expression>)
, this makes a compiler warning.
This annotation silences said warning.
The return value indicates whether or not you want to traverse the subtree (true is the default value for all visit() calls). We return false when we have found the MethodInvocation we are looking for, true otherwise.
To see if the MethodInvocation we are looking at is the one we want to fix, we check to see if the name matches something in our list and the first (and only) argument has a literal value.
It is technically possible for this logic to find (and then fix) the wrong method.
For the purposes of this tutorial, I've decided to omit it, but if you want to see the type-checking version, see this gist.
Now that we've identified the problemmatic code, we'll need to make a fixed version and then replace it.
setExpression(visitor.stringLiteralExpression)
would throw an IllegalArgumentException
.
The code example shows two ways to deal with that - making a brand new node (lines 17-18) or using rewrite.createMoveTarget (lines 20+21). The third way I know of is with rewrite.createCopyTarget, but I don't know how this differs from the MoveTarget - they seem to do the same thing.
While I'd like to say this was all easily created, it was a bit of a struggle. ASTView helped some, but really what was useful was setting breakpoints, stepping through the various visitors and exploring the nodes with the Eclipse Debugging tools. Hopefully, this guide has made it easier to get a feel for the Eclipse quickfix platform than I had. Along the way, I did run into some issues that others should not repeat:
Foo f = new Foo()
is a ClassInstanceCreation, not a ConstructorInvocation:
ConstructorInvocations, as it turns out, refer to an invocation of constructor from a similar constructor like this(someVar,otherVar)
.
This was annoying and confusing for me when I was trying to deal with fixing constructors.Stay tuned for the next iteration of this tutorial where we look to have a slightly more complicated example. Here's a sneak preview:


Desafio: Uma viagem perfeita
The perfect trip
I would see scenes like...
And animals like...
And eat food like...


Rent
Payment history
| Date | Transaction | Payment method | In | Out | Balance |
|---|---|---|---|---|---|
| 31/07/2018 | ABC1234 | --- | £50.00 | £60.00 | -£60.00 |
| 31/07/2018 | ABC1234 | --- | £50.00 | £60.00 | -£60.00 |
| 31/07/2018 | ABC1234 | --- | £50.00 | £60.00 | -£60.00 |
| 31/07/2018 | ABC1234 | --- | £50.00 | £60.00 | -£60.00 |
| 31/07/2018 | ABC1234 | --- | £50.00 | £60.00 | -£60.00 |
| 31/07/2018 | ABC1234 | --- | £50.00 | £60.00 | -£60.00 |
| 31/07/2018 | ABC1234 | --- | £50.00 | £60.00 | -£60.00 |
| 31/07/2018 | ABC1234 | --- | £50.00 | £60.00 | -£60.00 |
Pay rent
Agent says: Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid hic modi unde, ducimus nostrum nam in nisi quaerat excepturi perferendis, porro repellendus facilis numquam suscipit ex odit quia tempore magnam.


sun lounge
`Prev `__
S
`Next `__
--------------
**sun lounge**: n.
[UK] The room where all the Sun workstations live. The humor in this
term comes from the fact that it's also in mainstream use to describe a
solarium, and all those Sun workstations clustered together give off an
amazing amount of heat.
--------------
+------------------------+----------------------------+-------------------------------+
| `Prev `__ | `Up <../S.html>`__ | `Next `__ |
+------------------------+----------------------------+-------------------------------+
| Sun | `Home <../index.html>`__ | sun-stools |
+------------------------+----------------------------+-------------------------------+


Copyright © Matthew Pflueger 2007
Authors: Matthew Pflueger (matthew.pflueger@gmail.com).
This module implements the Mnesia driver for ErlyDB.
This is an internal ErlyDB module that you normally shouldn't have to
use directly. For most situations, all you have to know
about this module is the options you can pass to start/1
, which
is called by erlydb:start/2
. Currently (Erlyweb 0.6), no options are
recognized/used.
Introduction
Conventions
Types
Example
What's Not Supported
Mnesia is Erlang's distributed DataBase Management System (DBMS). Please read the Mnesia Reference Manual for more information about Mnesia.
This driver executes Erlsql queries against Mnesia. Most Erlsql queries are dynamically converted into Query List Comprehension (QLC) expressions before execution. Please see the qlc module documentation for more information on QLC. Please read the Erlsql documentation for more information on Erlsql.
This driver does not add relational support to Mnesia (constraints, cascades, etc). Some relational support for Mnesia has been implemented by Ulf Wiger in the user contribution rdbms (see http://erlang.org/user.html). For more information visit http://ulf.wiger.net/rdbms/doc/rdbms.html. You can download a more recent version of rdbms at http://ulf.wiger.net/rdbms/download/.
The driver uses a table named 'counter' for auto-incrementing (identity) primary key columns. (only valid for set or ordered-set tables). The 'counter' table must be created using the following:
mnesia:create_table(counter, [{disc_copies, [node()]}, {attributes, [key, counter]}])
The key column will contain table names of the mnesia tables utilizing identity columns. The counter contains the value of the last used identity (serial integer). The counter is updated using:
mnesia:dirty_update_counter(counter, Table, 1)
You can initialize/start the identity of a particular table by executing the above statement with an arbitrary number (greater than 0). The above operation is atomic (the function name is misleading). Please read the Mnesia docs for more information. The use of the 'counter' table is currently not customizable but that will hopefully change soon.
All columns named 'id' or ending with 'id' are treated as integers. If the column named 'id' is the first attribute (column) in the mnesia table, then it is also treated as an auto-incrementing identity column.
This driver stores all fields as binary unless the field name ends with id and in that case the field is treated as an integer (as discussed above). This can be customized by utilizing the user_properties for a mnesia table. The driver will do a limited amount of type conversion utilizing these properties. The driver will recognize user_properties for a field if defined in the following format:
{Field, {Type, Modifier}, Null, Key, Default, Extra, MnesiaType}
where Field is an atom and must be the same as the field (attribute) name, Type through Extra is are as defined in erlydb_field:new/6 MnesiaType is the type to store the field as in mnesia.
Currently, only the following values for MnesiaType are recognized:
atom, list, binary, integer, float, datetime, date, time, undefined
The erlydb_mnesia driver will attempt to convert field values into the specified type before insertion/update/query of the record in mnesia... If the MnesiaType has a value of undefined then no type conversion is attempted for the field.
Given the following record:
-record(person, {myid, type, name, age, country, office, department, genre, instrument, created_on})
Create a Mnesia table with types for the driver using:
{atomic, ok} = mnesia:create_table(person, [ {disc_copies, [node()]}, {attributes, record_info(fields, person)}, {user_properties, [{myid, {integer, undefined}, false, primary, undefined, identity, integer}, {type, {varchar, undefined}, false, undefined, undefined, undefined, atom}, {age, {integer, undefined}, true, undefined, undefined, undefined, integer}, {created_on, {datetime, undefined}, true, undefined, undefined, undefined, undefined}]}])
Note the following: 1) The primary key column is called myid and is an auto-incrementing integer column. This is the same as if the column had been named 'id'. 2) The type and age columns have customized types. The driver will try to convert all values inserted into the table into the specified types. 3) The created_on column is defined as a datetime for Erlyweb but is of type undefined for the Mnesia driver. This means that no type conversion will be attempted for the created_on column resulting in a Erlang datetime tuple to be stored in the column {{Year, Month, Day}, {Hour, Minute, Second}} or {datetime, {{Year, Month, Day},{Hour,Minute,Second}}} depending on how you create the record (creating a record from strings will result in the tuple beginning with datetime). 4) Changing the user property for the created_on column to specify a mnesia type of datetime like {created_on, {datetime, undefined}, true, undefined, undefined, undefined, datetime} will result in the erlang date time tuple {{Year,Month,Day},{Hour,Minute,Second}} to be stored regardless of how the record was created (ie. it will strip the redundant datetime atom from the tuple
See test/erlydb/erlydb_mnesia_schema for more examples of how to create mnesia tables with user_properties...
| get_last_insert_id/2 | Get the id of the last inserted record. |
| get_metadata/1 | Get the table names and fields for the database. |
| q/1 | |
| q/2 | |
| select/2 | Execute a statement against Mnesia. |
| select_as/3 | Execute a statement for records belonging to the given module, returning all rows with additional data to support higher-level ErlyDB features. |
| start/0 | |
| start/1 | Start the Mnesia driver using the options property list. |
| transaction/2 | Execute a group of statements in a transaction. |
| update/2 | Execute a update to Mnesia. |
get_last_insert_id(Table::atom(), Options::options()) -> term()
Get the id of the last inserted record.
get_metadata(Options::proplist()) -> gb_trees()
Get the table names and fields for the database.
select(Statement::statement(), Options::options()) -> {ok, Rows::list()} | {error, Error}
Execute a statement against Mnesia.
select_as(Module::atom(), Statement::statement(), Options::options()) -> {ok, Rows} | {error, Error}
Execute a statement for records belonging to the given module, returning all rows with additional data to support higher-level ErlyDB features.
start(StartOptions::proplist()) -> ok | {error, Error}
Start the Mnesia driver using the options property list. Currently, no options are recognized.
transaction(Fun::function(), Options::options()) -> {atomic, Result} | {aborted, Reason}
Execute a group of statements in a transaction. Fun is the function that implements the transaction. Fun can contain an arbitrary sequence of calls to the erlydb_mnesia's query functions. If Fun crashes or returns or throws 'error' or {error, Err}, the transaction is automatically rolled back.
update(Statement::statement(), Options::options()) -> {ok, NumAffected} | {error, Err}
Execute a update to Mnesia.


Organizers
Invited Speakers
Pietro Perona is the Allen E. Puckett Professor of Electrical Engineering at Caltech. He directs Computation and Neural Systems (www.cns.caltech.edu), a PhD program centered on the study of biological brains and intelligent machines. Professor Perona's research centers on vision. He has contributed to the theory of partial differential equations for image processing and boundary formation, and to modeling the early visual system's function. He is currently interested in visual categories and visual recognition.
Jingdong Wang is a Senior Researcher of Microsoft Research Asia. His research focuses on efficient CNN architecture design, human pose estimation, semantic segmentation, image classification, object detection, large-scale indexing, person re-identification, and salient object detection. He has been serving/served as an Associate Editor of IEEE TPAMI, IEEE TMM and IEEE TCSVT, and area chair (or SPC) of some prestigious conferences like CVPR, ICCV, ECCV, ACM MM, IJCAI, and AAAI. He is an ACM Distinguished Member and a Fellow of IAPR.
Subhransu Maji is an Assistant Professor in the College of Information and Computer Sciences at the University of Massachusetts, Amherst and the co-director of the Computer Vision Lab. He obtained my Ph.D. under the supervision of Jitendra Malik from the University of California at Berkeley in 2011, and a B.Tech. in Computer Science and Engineering from IIT Kanpur in 2006. His research is funded by the National Science Foundation, as well as faculty grants from Facebook, NVIDIA, and Adobe.
Oisin Mac Aodha is an Assistant Professor in Machine Learning at the University of Edinburgh. Previous to that, he was a postdoc with Prof. Pietro Perona in the Computational Vision Lab at the Caltech. He obtained his PhD from University College London with Prof. Gabriel Brostow. His current research interests are broadly in the areas of machine learning, computer vision, and human-in-the-loop methods such as active learning and machine teaching.
Rohit Singh is the Chair for the WWF Ranger Federation of Asia. He has been with WWF for 13 years and brings his considerable experience, enthusiasm and insights into his position as Zero Poaching lead for the Wildlife Crime Initiative. He has been instrumental in moving forwards implementation of the Zero Poaching Framework/Toolkit, to professionalize the ranger force and in sharing lessons learned in Asia with colleagues in Africa. He is also the key person in WWF on technology solutions for conservation especially for anti poaching work.
Peiqi Liu is director of WWF North Eastern China office. He has been worked for wildlife ecology and conservation for more than 20 years. He joined WWF China in 2014 to lead the conservation programe for Amur tiger and leopard. Before that, he worked for Wildlife conservation society (WCS) as a project manager for three years, and China Jilin Province Academy of Forestry as a researcher for 10 years.
Advisory Board
Pietro Perona, Professor, Caltech
Lucas Joppa, Chief Environmental Officer, Microsoft
Zhengyou Zhang, Director, Tencent AI Lab
Program Committee Members
Oisin Mac Aodha (Caltech)
Sara Beery (Caltech)
Elizabeth Bondi (Harvard)
Anna Bethke (Intel AI Lab)
Yang Song (Google)
Grace Chu (Google)
Kristina Kermanshahche (Perspicace Inc)
Fei Fang (CMU)
Graham Taylor (University of Guelph)
Jiwen Lu (Tsinghua University)
Junliang Xing (CASIA, Chinese Academy of Science)
Shanshan Zhang (Nanjing University of Science and Technology)
Margaux Luck (Mila)
Tilo Burghardt (University of Bristol)
Alexander Freytag (Carl Zeiss AG)
Ergys Ristani (Facebook)
Michael Ying Yang (University of Twente, Netherland)
Xintong Han (Malong Tech)
Shuyuan Li (SJTU)
Staff
Taewook Jeong, Local support, Intel Korea
Contact: cvwc2019 AT hotmail.com. Any question related to the workshop such as paper submission, challenge participation, etc, please feel free to send email to the contact mailbox.


Exception handling is the process of responding to exceptions when a computer program runs. An exception occurs when an unexpected event happens that requires special processing. Examples include a user providing abnormal input, a file system error being encountered when trying to read or write a file, or a program attempting to divide by zero.
The main purpose is to prevent abnormal termination of the program and to customise the exception message.
SystemException
ApplicationException
Exception
class which is the parent of SystemException
and ApplicationException
SystemException
SystemException
Exception
objecttry
block
Contains statements that can produce an error
Code at least one catch block or finally block immediately following a try
block
catch
block
Can "catch" one type of Exception
You must code at least one catch
block or finally
block immediately following a try
block
finally
block
Contains actions to perform at the end of a try…catch
sequence
Executes whether the try block identifies any Exceptions or not
Used to perform clean-up tasks
A finally
block executes after 1) the try
ends normally. 2) the catch
executes and 3) the try
ends abnormally and the catch
does not execute
Exceptions
Exceptions
can be handled by the same catch
blockExceptions
Exception
Class's ToString()
Method and Message propertyException
class overrides ToString()
Exception
Class's ToString()
Method and Message propertyException
class Message
propertyException
getType()
methodException
Objects Through the Call StackStackTrace
propertySystem.IO Namespace
The System.IO namespace contains types that allow reading and writing to files and data streams, and types that provide basic file and directory support.
File Class
Directory Class
It means interpret the following string as literal. Meaning, the \ in the string will actually be a "\" in the output, rather than having to put "\\" to mean the literal character
string user_name = "itsme";
string path = $@"C:\Users\{user_name}\Desktop\myapp
Stream Class
| Class | Description |
| BufferedStream | A utility stream, it wrapped another stream, which helps improve performance |
| FileStream | Stream used to read and write data to the file. |
| MemoryStream | Creates a stream whose backing store is memory. |
| UnmanagedMemoryStream | |
| IsolatedStorageFileStream | |
| PipeStream | |
| NetworkStream | |
| CryptoStream | Defines a stream that links data streams to cryptographic transformations. |
| DeflateStream | |
| GZipStream |
| Attribute | Description |
| CanRead | Gets a value indicating whether the current stream supports reading. |
| CanSeek | Gets a value indicating whether the current stream supports seeking. |
| CanWrite | Gets a value indicating whether the current stream supports writing. |
| Length | Gets the length in bytes of the stream. |
| Position | Gets or sets the current position of this stream. |
StreamReader
for text input from a fileStreamWriter
for text output to a fileFileStream
is used alone for bytes and with either StreamReader and StreamWriter for text, for either input from and output to a fileFileStream Class
| FileMode | Description |
| Append | Opens the file if it exists and seeks to the end of the file, or creates a new file |
| Create | Specifies that the operating system should create a new file. If the file already exists, it will be overwritten. |
| CreateNew | Specifies that the operating system should create a new file.If the file already exists, an IOException exception is thrown. This mode requires FileIOPermissionAccess.Write permission. |
| Open | Specifies that the operating system should open an existing file. A System.IO.FileNotFoundException exception is thrown if the file does not exist. |
| OpenOrCreate | Specifies that the operating system should open a file if it exists; otherwise, a new file should be created |
| Truncate | Specifies that the operating system should open an existing file. When the file is opened, it should be truncated so that its size is zero bytes. |
| FileAccess | Description |
| Read | Data can be read from the file. |
| ReadWrite | Data can be read from and written to the file. |
| Write | Data can be written to the file. |
FileStream
objectSeek()
method and the SeekOrigin
enumeration: inFile.Seek(0, SeekOrigin.Begin);
[Serializable]
attributeSystem.Runtime.Serialization.Formatters.Binary;
System.Runtime.Serialization;
Linq stands for Language Integrated Query. Linq provides methods to easily query data sets including objects, relational databases, XML and other data sources
Arrays, Characters, List of Objects, XML, etc.
Query Syntax
Many people find query syntax simpler and easier to read.
Some queries must be expressed as method calls.
Method Syntax
If you have never used a query language like SQL before, but you have some C# experience, then you might find the method syntax easier to read
uses extension methods included in the Enumerable or Queryable static class, similar to how you would call the extension method of any class.
Method syntax comprises of extension methods and Lambda expression. The extension method Where() is defined in the Enumerable class
"from acct in accounts"
"where acct.acctBalance > 8000.00"
"Iterating over data using foreach"
Lambda Expressions is an anonymous function that you can use to create delegates or expression tree types.
By using lambda expressions, you can write local functions that can be passed as arguments or returned as the value of function calls
List<string> candyList = new List<string>(){
"Snickers", "Twix", "Mars", "Skittles", "Starburst", "Sour Patch Kids",
"Big Red", "Winter fresh", "Trident"
};
//Three examples of using Lambda Expressions
candyList.ForEach(x => Console.WriteLine(x)); //Example outputing items within list
class Program
{
static void Main(string[] args)
{
//Two dimensional array
double[,] price = {
{350, 390, 435},
{400, 440, 480},
{475, 530, 575}
};
string[,] selection = {
{"Snickers", "Twix", "Mars"},
{"Skittles", "Starburst", "Sour Patch Kids"},
{"Big Red", "Winter fresh", "Trident"}
};
List<Candy> candyList = new List<Candy>();
//Iterate through the multi-Array and populate the list
for (var i = 0; i < 3; i++)
{
for (var x = 0; x < 3; x++)
{
Candy aCandy = new Candy(selection[i, x], price[i, x]);
candyList.Add(aCandy);
Console.WriteLine("{0} goes for {1}", selection[i, x], price[i, x].ToString("c"));
}
}
//LINQ Query Syntax to select all candies greater than 450 using query syntax
IEnumerable<Candy> candyOverQuery = from candy in candyList
where candy.price > 450
orderby candy.name
select candy;
//LINQ Query syntax to select all candies greater than 450 using method syntax
var candyOverMethod = candyList.Where<Candy>(x => x.price > 450).Select(x => x).ToList();
candyOverQuery.ToList<Candy>().ForEach(x => Console.WriteLine(x.ToString()));
//Decrement through the list and find the object with value "Snickers" for the name property
for(var i = candyList.Count -1; i >= 0; i--)
{
if (candyList[i].name.Contains("Snickers"))
{
candyList.RemoveAt(i);
}
}
//Output the list using lambda Expression
candyList.ForEach(x => Console.WriteLine(x.ToString()));
}
}
public class Candy
{
public string name { get; set; }
public double price { get; set; }
public Candy(string name, double price)
{
this.name = name;
this.price = price;
}
public override string ToString()
{
return String.Format("The name of the candy is " + name + " the price for this candy " + price);
}
}
Using the program on the previous slide - write a Linq query using query and method syntax
class Program
{
static void Main(string[] args)
{
//Two dimensional array
double[,] price = { {350, 390, 435},{400, 440, 480},{475, 530, 575}};
string[,] selection = {{"Snickers", "Twix", "Mars"},{"Skittles", "Mars", "Sour Patch Kids"},{"Mars", "Mars", "Trident"}};
List<Candy> candyList = new List<Candy>();
//Iterate through the multi-Array and populate the list
for (var i = 0; i < 3; i++)
{
for (var x = 0; x < 3; x++)
{
Candy aCandy = new Candy(selection[i, x], price[i, x]);
candyList.Add(aCandy);
//Console.WriteLine("{0} goes for {1}", selection[i, x], price[i, x].ToString("c"));
}
}
//LINQ Query Syntax to select all candies greater than 450 using query syntax
var candyOverQuery = from candy in candyList
group candy by candy.name into candyGroup
select new { aGroup = candyGroup.Key, Count = candyGroup.Count() }; //Creates new Object instance
//Iterate through each instance and output candy group along with count
foreach(var i in candyOverQuery)
{
Console.WriteLine($"Group { i.aGroup} and Count is {i.Count}");
}
//LINQ Query syntax to select all candies greater than 415 and starts with 'S' and order
var newQueriedList = candyList.Where<Candy>(x => x.price > 415).Where<Candy>(x=>x.name.StartsWith('S')).Select(x => x).OrderBy(x=>x.name).ToList();
//LINQ Query syntax to select all candies greater than 450 using method syntax
var candyOverMethod = candyList.Where<Candy>(x => x.price > 450).Select(x => x).OrderBy(x=>x.name).ToList();
//Outputing the LINQ Method Syntax
//candyOverMethod.ForEach(x => Console.WriteLine(x.ToString()));
}
}
public class Candy
{
public string name { get; set; }
public double price { get; set; }
public Candy(string name, double price)
{
this.name = name;
this.price = price;
}
public override string ToString()
{
return String.Format("The name of the candy is " + name + " the price for this candy " + price);
}
}


How to get certified as a professional scrum master, the fast and the slow way
A few months ago, I got the Professional Scrum Master Certification (PSM I).
As this is a trending certification nowadays, because most companies operate in some kind of agile methodologies, I would share some tips that helped me get 98% on the first try.
I will provide a fast and a slow track.
I would urge you to lean more towards the slow track, as the fast track, most of the time, will give you just enough knowledge to pass the certification; but this is totally not enough to solve business day to day team problems with scrum, which is what a big part of what a scrum master does.
Though, some people just care for the certificate itself, for their own reasons (eg company KPIs), so let’s go.
Fast track
The fast track should take at most 25-30 hours of preparation.
Read the scrum guide at least five times and internalize the concepts
Almost all of the questions in the PSM I exam are derived from details of the scrum guide text. Most of the time there are nexus questions too, but it is not that hard if you have conquered the scrum guide.
Learning by heart is not the solution here, though you might need to do it to remember minor details you will never encounter again in your scrum master journey (which I believe is the case with most certifications) :-)
While doing this step, you should totally understand a) the processes of scrum methodology b) the why behind the processes.
For example:
- Why the daily scrum (or standup as most people know it) last for 15 minutes and not 20?
- Why is it a bad idea for the CEO to join the sprint retro?
- Why sprint ceremonies are not a chance to micromanage people?
I believe if you read it thoroughly and mindfully 5-6 times, you are good to go.
Embrace the scrum.org fora
In there you will “meet” people from the scrum trenches. People who make a living, maybe many years in a row, from scrum oriented activities and know what works and what not.
I have to admit that reading the scrum.org fora, helped me understand a lot “the why” behind the scrum guide.
Do the official open assessments
The official open assessments will test your understanding of the scrum guide and make you familiar with the actual exam environment. They are great practice for PSM I.
I think a good portion of the questions that you will encounter in the open assessment will be similar to the ones in the exam.
I would suggest you take the open assessments many times. The more the merrier.
A popular stop criterion is when you have achieved a 100% score for five or six consecutive times.
Do the mock tests from Mikhail Lapshin
Mikhail Laphsin is a software architect and he’s very passionate about scrum as well.
As part of that, he had created one of the best simulation tests out there, which is following 100% the scrum guide.
There are no multiple versions of the test, at least that was the case at the time I was taking it, but doing it and checking the explanation of your wrong answers, will supercharge your probabilities towards the actual exam.
The slow track
This track will keep you busy for about 3 months. You can stretch it as much or little you want. I assume you have gone through the fast track as well, before starting the slow.
Don’t forget to check the official reading guide too, when on the slow track and add any resource you find interesting in my suggestions.
Reflect on your current scrum experience
You can get the scrum master certification even if you have totally no experience with scrum before. Though it will make your life way easier if you do.
So if you are one of the lucky ones, while you are reading the material think what you are doing correct and what you are doing wrong in the scrum team you are part of.
There are a lot of opinionated people around, regarding scrum, mostly from ignorant people that usually believe the scrum guide is a web framework or a book with pasta recipes. Let them do their thing, and stick to your plan to become a great scrum master.
When you do, you can be opinionated as hell. Till then, I suggest you focus on the collective experience of the community.
If you are on the unlucky part, a great free resource for a pretty good and interesting introduction is Scrum Training Series.
Blogs
Similar to the scrum.org fora, blogs can give you a great perspective from the view of a working scrum master / agile coach.
Some articles might be an overkill for a new scrum master, don’t get discouraged if you don’t get some of those.
My other favorite one is Serious Scrum.
Books
Do you think you would escape? :) Here are some of the best scrum books I have found out there and I would suggest you to read.
- Software in 30 Days
- Essential Scrum: A Practical Guide to the Most Popular Agile Process
- The Skilled Facilitator: A Comprehensive Resource for Consultants, Facilitators, Coaches, and Trainers
- The Professional ScrumMaster’s Handbook - Break the Chains of Traditional Organization and Management
- Toyota Production System: Beyond Large-Scale Production
- The Serving Leader: Five Powerful Actions to Transform Your Team, Business, and Community
- Scrum and XP from the Trenches
Other assessments
If time allows and you are not burned out yet :-P , doing the nexus, scrum developer and product owner open assessments will help you get a wider picture of the framework, from various angles.
Of course, you don’t need to take consistently perfect scores, a couple of runs with “pass” is more than sufficient in my opinion.
Book a class
This is a bit overkill if you ask me and I would never take a class for PSM I (PSM II or III are more eligible for that kind of training). But I don’t want to influence your personal style of learning.
You can find all the trainers here. If there is no one in your country or you don’t want physical presence due to the pandemic, maybe you could request Skype/Hangouts courses.
I don’t know anyone who has done it, so if you have any interesting feedback to share, please do, I would be glad to hear it!
Conclusion
Thank you for reading this article. If you are new to the field, I wish you all the best in your journey as a scrum master. If you are more seasoned I would appreciate any feedback on the resources. Enjoy your study in any case!!!


Wrap a function object in a packaged task.
template< typename Function> unspecified operator()( Function && f) const;
The package
function is used to adapt a function object as
a packaged task. When this adapter is passed as a completion token to an
asynchronous operation, the result of the function object is retuned via
a std::future.
std::future<std::size_t> fut = my_socket.async_read_some(buffer, use_future([](asio::error_code ec, std::size_t n) { return ec ? 0 : n; })); ... std::size_t n = fut.get();


ABOUT
I’m a Ghanaian graphic designer, composer and video editor with satisfied clients worldwide (well, more like Ghana, Nigeria, U.S and U.K) hehehe :).
I design logos, letterhe.. okay lets say corporate branding, website design and other promotional design.
I have over 7 years experience and started a company with Claude for online advertising, web design and branding (well, general graphic design).
Check the links on the left side, you can see/hear a couple things I’ve done.
Thanks for passing by.
Send me an email, lets do some business.


{% extends 'home/base.html' %} {% load humanize %} {% load staticfiles %} {% load performance_extras %} {% load progress_extras %} {% load i18n %} {% block content %}
| {% if district %} Health Facility {% else %} District {% endif%} | Eligible Spray Areas | Spray Areas Visited (a) | Spray Areas Sprayed Effectively(b) | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Number | % | Number | % | |||||||||
| Target Area | {% if the_district.name == "Sinda" %}Priority | {% endif %}Structures on ground | Found | Sprayed | Spray Effectiveness | Found coverage | Spray coverage | |||||
| {% if higher_level_map and not district_name %} {{ district.district_name }} {% elif district_name and district.level == ta_level %} {{ district.district_name }} {% else %} {{ district.district_name }} {% endif %} | {% if district.level != 'ta' %} {{district.num_of_spray_areas }} {% else %}{{ district.structures|intcomma }} {% endif %} | {{ district.visited_total|intcomma }} | {% if site_name != 'namibia' %} {% percentage district.visited_total district.num_of_spray_areas %} {% endif %} | {{ district.visited_sprayed|intcomma }} | {% calc_percentage district.visited_sprayed district.visited_total as calculated_percentage %}{{ calculated_percentage }} | |||||||
| {% trans "Not in Targeted Area" %} | ||||||||||||
| {% if higher_level_map and not district_name %} {% endif %} {% if district_name and district.level == ta_level %} {{ district.district_name }} {% else %} {{ district.district_name }} {% endif %} | {% if the_district.name == "Sinda" %}{{ district.priority|default_if_none:"" }} | {% endif %}{{ district.structures|intcomma }} | {{ district.found|intcomma }} | {{ district.visited_sprayed|intcomma }} | {% calc_percentage district.visited_sprayed district.structures as spray_effectiveness_percentage %}{{ spray_effectiveness_percentage }} | {% calc_percentage district.found district.structures as found_coverage_percentage %}{{ found_coverage_percentage }} | {% calc_percentage district.visited_sprayed district.found as spray_coverage_percentage %}{{ spray_coverage_percentage }} | |||||
| {% trans "Not in Targeted Area" %} | {% if the_district.name == "Sinda" %} | {% endif %} | {{ no_location.found|default_if_none:"0"|intcomma }} | {{ no_location.sprayed|default_if_none:"0"|intcomma }} | {% if no_location.sprayed and no_location.found %} {% calc_percentage no_location.sprayed no_location.found as spray_effectiveness_percentage %}{{ spray_effectiveness_percentage }} | {% else %}{% endif %} | ||||||
| Total | {% if not district or district.level == 'district' %}{{ district_totals.num_of_spray_areas|intcomma }} | {{ district_totals.visited_total|intcomma }} | {% if site_name != 'namibia' %} {% percentage district_totals.visited_total district_totals.num_of_spray_areas %} {% endif %} | {{ district_totals.visited_sprayed|intcomma }} | {% calc_percentage district_totals.visited_sprayed district_totals.visited_total as total_calculated_percentage %}{{ total_calculated_percentage }} | {% else %} {% if the_district.name == "Sinda" %}{% endif %} | {{ district_totals.structures|intcomma }} | {{ district_totals.visited_total|intcomma }} | {{ district_totals.visited_sprayed|intcomma }} | {% calc_percentage district_totals.visited_sprayed district_totals.structures as spray_effectiveness_percentage %}{{ spray_effectiveness_percentage }} | {% calc_percentage district_totals.visited_total district_totals.structures as found_coverage_percentage %}{{ found_coverage_percentage }} | {% calc_percentage district_totals.visited_sprayed district_totals.visited_total as spray_coverage_percentage %}{{ spray_coverage_percentage }} | {% endif%}
* To sort a column, click on the column name
{% include 'definitions-and-conditions.html' %}


Start page
Search specimens
Cross browser
Search localities
V
irtuella
H
erbariet: Databases
Systematic / taxonomical databases
Mixed
DYNTAXA
Updated list of Swedish taxa
The Plant list
Easy to use search page with data from Tropicos, IPNI and other sources
The international plant name index (IPNI)
A database of vascular plant names
Tropicos
Taxonomic database (good for Bryophytes)
Integrated taxonomical information system (ITIS)
Catalogue of Life
WoRMS
World Register of Marine Species
Algae
AlgaeBase
Taxonomic database of Algae
Nordic Microalgae
Searchable webpage with nordic aquatic organisms
Fungi and lichens
Species Fungorum
Taxonomic database of fungi incl. lichens
MycoBank
Cybernome
Fungi database with referenses to literature
LIAS
A Database with Names of Lichens, Lichenicolous Fungi and Non-Lichenized Ascomycetes
Santesson's online checklist
Fennoscandian lichen-forming and lichenicolous fungi
Bryophytes
Checklist of norwegian mosses
A check list with lots of old synonyms that complements DYNTAXA
Myxomycetes
nomen.eumycetozoa.com
An online nomenclatural information system of Eumycetozoa / slime moulds
Specimen / observation databases
GBIF International
GBIF Sweden
Artportalen
Swedish online observations system
Other databases
Index Herbarorium
The official searchable list of herbaria worldwide
Index of Botanists
Searchable database of Botanists with publications
Index of Exsiccatae (IndExs)
A database of Exsiccatae
Ortnamnsregistret
Ormbunkar.se (Uppsala Universitet)
Turn Swedish coordinates into district and province
Maps
Kartbild.com
Easy to use zoomable historical maps over Sweden
Sveriges Länskartor
Good maps to find Swedish locality names
Min Karta
Search for the names used on Swedish maps
Generalstabskartan
Old maps over Sweden. Select: "Arkiv: Rikets allmänna kartverks arkiv"
Google Maps
Eniro kartor
Swedish online map searchable. (to street level)
Hitta.se
Swedish online map searchable. (to street level)
Finn Kart
Norwegian map


public abstract class OSCReceiver extends java.lang.Object implements OSCChannel, java.lang.Runnable
OSCReceiver
manages reception
of incoming OSC messages. A receiver can be either revivable or
non-revivable.
DatagramChannel
(for UDP) or SocketChannel
(for TCP)).
When the channel is closed, the receiver cannot be restarted. The network channel
is closed for example when a TCP server shuts down, but also when trying to connect
to a TCP server that is not yet reachable.newUsing
constructors that takes a
protocol and address argument. A revivable receiver can be restarted because it
recreates the network channel if necessary.
The receiver launches a listening Thread
when
startListening
is called.
The OSCReceiver
has methods for registering and unregistering listeners
that get informed about incoming messages. Filtering out specific messages must be
done by the listeners.
The listening thread is stopped using stopListening
method.
Note that as of v0.3, you will most likely want to use preferably one of
OSCClient
or OSCServer
over OSCReceiver
.
Also note that as of v0.3, OSCReceiver
is abstract, which renders
direct instantiation impossible. To update old code, occurrences of
new OSCReceiver()
must be replaced by one of the
OSCReceiver.newUsing
methods! The "filter" functionality of
NetUtil 0.2 is now implied by calling setTarget( SocketAddress )
.
Here is an example that also demonstrates message sending using an instance of
OSCTransmitter
:
OSCReceiver rcv = null; OSCTransmitter trns; DatagramChannel dch = null; try { final SocketAddress addr = new InetSocketAddress( InetAddress.getLocalHost(), 57110 ); final Object notify = new Object(); // note: using constructors with SelectableChannel implies the receivers and // transmitters cannot be revived. to create revivable channels on the same socket, // you must use one of the newUsing methods that take an IP address and/or port // number. dch = DatagramChannel.open(); dch.socket().bind( null ); // assigns an automatic local socket address rcv = OSCReceiver.newUsing( dch ); trns = OSCTransmitter.newUsing( dch ); rcv.addOSCListener( new OSCListener() { public void messageReceived( OSCMessage msg, SocketAddress sender, long time ) { if( msg.getName().equals( "status.reply" )) { System.out.println( "scsynth is running. contains " + msg.getArg( 1 ) + " unit generators, " + msg.getArg( 2 ) + " synths, " + msg.getArg( 3 ) + " groups, " + msg.getArg( 4 ) + " synth defs.\n" + "CPU load is " + msg.getArg( 5 ) + "% (average) / " + msg.getArg( 6 ) + "% (peak)" ); synchronized( notify ) { notify.notifyAll(); } } } }); rcv.startListening(); trns.send( new OSCMessage( "/status", OSCMessage.NO_ARGS ), addr ); synchronized( notify ) { notify.wait( 5000 ); } } catch( InterruptedException e1 ) {} catch( IOException e2 ) { System.err.println( e2.getLocalizedMessage() ); } finally { if( rcv != null ) { rcv.dispose(); } else if( dch != null ) { try { dch.close(); } catch( IOException e4 ) {}; } }Note that the datagram channel needs to be bound to a valid reachable address, because
stopListening
will be sending a terminating message to
this channel. You can bind the channel using dch.socket().bind()
,
as shown in the example above.
Note that someone has reported trouble with the InetAddress.getLocalHost()
method
on a machine that has no proper IP configuration or DNS problems. In such a case when
you need to communicate only on this machine and not a network, use the loopback
address "<IP_ADDRESS>" as the filtering address or bind the socket to the loop
address manually before calling new OSCReceiver()
.
OSCClient
,
OSCServer
,
OSCTransmitter
| Modifier and Type | Field and Description |
|---|---|
protected boolean |
allocBuf |
protected java.nio.ByteBuffer |
byteBuf |
protected java.lang.Object |
generalSync |
protected boolean |
isListening |
protected java.net.InetSocketAddress |
localAddress |
protected boolean |
revivable |
protected java.net.SocketAddress |
target |
protected java.lang.Thread |
thread |
protected java.lang.Object |
threadSync |
DEFAULTBUFSIZE, kDumpBoth, kDumpHex, kDumpOff, kDumpText, TCP, UDP
| Modifier | Constructor and Description |
|---|---|
protected |
OSCReceiver(OSCPacketCodec c,
java.lang.String protocol,
java.net.InetSocketAddress localAddress,
boolean revivable) |
| Modifier and Type | Method and Description |
|---|---|
void |
addOSCListener(OSCListener listener)
Registers a listener that gets informed
about incoming messages.
|
protected void |
checkBuffer() |
protected abstract void |
closeChannel() |
abstract void |
connect()
Establishes connection for transports requiring
connectivity (e.g.
|
protected static java.lang.String |
debugTimeString() |
void |
dispose()
Disposes the resources associated with the OSC communicator.
|
void |
dumpOSC(int mode,
java.io.PrintStream stream)
Changes the way processed OSC messages are printed to the standard err console.
|
protected void |
flipDecodeDispatch(java.net.SocketAddress sender) |
int |
getBufferSize()
Queries the buffer size used for coding or decoding OSC messages.
|
OSCPacketCodec |
getCodec()
Queries the codec used in packet coding and decoding.
|
abstract java.net.InetSocketAddress |
getLocalAddress()
Queries the receiver's local socket address.
|
protected java.net.InetSocketAddress |
getLocalAddress(java.net.InetAddress addr,
int port) |
java.lang.String |
getProtocol()
Queries the transport protocol used by this communicator.
|
abstract boolean |
isConnected()
Queries the connection state of the receiver.
|
boolean |
isListening()
Queries whether the
OSCReceiver is
listening or not. |
static OSCReceiver |
newUsing(java.nio.channels.DatagramChannel dch)
Creates a new instance of a non-revivable
OSCReceiver , using
default codec and UDP transport on a given channel. |
static OSCReceiver |
newUsing(OSCPacketCodec c,
java.nio.channels.DatagramChannel dch)
Creates a new instance of a non-revivable
OSCReceiver , using
a specific codec and UDP transport on a given channel. |
static OSCReceiver |
newUsing(OSCPacketCodec c,
java.nio.channels.SocketChannel sch)
Creates a new instance of a non-revivable
OSCReceiver , using
a specific codec and TCP transport on a given channel. |
static OSCReceiver |
newUsing(OSCPacketCodec c,
java.lang.String protocol)
Creates a new instance of a revivable
OSCReceiver , using
a specific codec and transport protocol. |
static OSCReceiver |
newUsing(OSCPacketCodec c,
java.lang.String protocol,
java.net.InetSocketAddress localAddress)
Creates a new instance of a revivable
OSCReceiver , using
a specific codec and transport protocol and local socket address. |
static OSCReceiver |
newUsing(OSCPacketCodec c,
java.lang.String protocol,
int port)
Creates a new instance of a revivable
OSCReceiver , using
a specific codec and transport protocol and port. |
static OSCReceiver |
newUsing(OSCPacketCodec c,
java.lang.String protocol,
int port,
boolean loopBack)
Creates a new instance of a revivable
OSCReceiver , using
a specific codec and transport protocol and port. |
static OSCReceiver |
newUsing(java.nio.channels.SocketChannel sch)
Creates a new instance of a non-revivable
OSCReceiver , using
default codec and TCP transport on a given channel. |
static OSCReceiver |
newUsing(java.lang.String protocol)
Creates a new instance of a revivable
OSCReceiver , using
default codec and a specific transport protocol. |
static OSCReceiver |
newUsing(java.lang.String protocol,
java.net.InetSocketAddress localAddress)
Creates a new instance of a revivable
OSCReceiver , using
default codec and a specific transport protocol and local socket address. |
static OSCReceiver |
newUsing(java.lang.String protocol,
int port)
Creates a new instance of a revivable
OSCReceiver , using
default codec and a specific transport protocol and port. |
static OSCReceiver |
newUsing(java.lang.String protocol,
int port,
boolean loopBack)
Creates a new instance of a revivable
OSCReceiver , using
default codec and a specific transport protocol and port. |
void |
removeOSCListener(OSCListener listener)
Unregisters a listener that gets informed
about incoming messages
|
protected abstract void |
sendGuardSignal() |
void |
setBufferSize(int size)
Adjusts the buffer size for OSC messages.
|
protected abstract void |
setChannel(java.nio.channels.SelectableChannel ch) |
void |
setCodec(OSCPacketCodec c)
Specifies which codec is used in packet coding and decoding.
|
abstract void |
setTarget(java.net.SocketAddress target) |
void |
startListening()
Starts to wait for incoming messages.
|
void |
stopListening()
Stops waiting for incoming messages.
|
protected java.lang.Thread thread
protected final java.lang.Object generalSync
protected final java.lang.Object threadSync
protected boolean isListening
protected java.nio.ByteBuffer byteBuf
protected boolean allocBuf
protected final java.net.InetSocketAddress localAddress
protected final boolean revivable
protected java.net.SocketAddress target
protected OSCReceiver(OSCPacketCodec c, java.lang.String protocol, java.net.InetSocketAddress localAddress, boolean revivable)
public static OSCReceiver newUsing(java.lang.String protocol) throws java.io.IOException
OSCReceiver
, using
default codec and a specific transport protocol. It picks an arbitrary free port
and uses the local machine's IP. To determine the resulting
port, you can use getLocalAddress
afterwards.
TCP receivers are required
to be connected to one particular target, so setTarget
is
must be called prior to connect
or startListening
!
protocol
- the protocol to use, currently either UDP
or TCP
java.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedOSCChannel.UDP
,
OSCChannel.TCP
,
getLocalAddress()
public static OSCReceiver newUsing(OSCPacketCodec c, java.lang.String protocol) throws java.io.IOException
OSCReceiver
, using
a specific codec and transport protocol. It picks an arbitrary free port
and uses the local machine's IP. To determine the resulting
port, you can use getLocalAddress
afterwards.
TCP receivers are required
to be connected to one particular target, so setTarget
is
must be called prior to connect
or startListening
!
c
- the codec to useprotocol
- the protocol to use, currently either UDP
or TCP
java.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedOSCChannel.UDP
,
OSCChannel.TCP
,
getLocalAddress()
public static OSCReceiver newUsing(java.lang.String protocol, int port) throws java.io.IOException
OSCReceiver
, using
default codec and a specific transport protocol and port. It
uses the local machine's IP. Note that the port
specifies the
local socket (at which the receiver listens), it does not determine the
remote sockets from which messages can be received. If you want to filter
out a particular remote (or target) socket, this can be done
using the setTarget
method!
TCP receivers are required
to be connected to one particular target, so setTarget
is
must be called prior to connect
or startListening
!
protocol
- the protocol to use, currently either UDP
or TCP
port
- the port number for the OSC socket, or 0
to use an arbitrary free portjava.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedpublic static OSCReceiver newUsing(OSCPacketCodec c, java.lang.String protocol, int port) throws java.io.IOException
OSCReceiver
, using
a specific codec and transport protocol and port. It
uses the local machine's IP. Note that the port
specifies the
local socket (at which the receiver listens), it does not determine the
remote sockets from which messages can be received. If you want to filter
out a particular remote (or target) socket, this can be done
using the setTarget
method!
TCP receivers are required
to be connected to one particular target, so setTarget
is
must be called prior to connect
or startListening
!
c
- the codec to useprotocol
- the protocol to use, currently either UDP
or TCP
port
- the port number for the OSC socket, or 0
to use an arbitrary free portjava.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedpublic static OSCReceiver newUsing(java.lang.String protocol, int port, boolean loopBack) throws java.io.IOException
OSCReceiver
, using
default codec and a specific transport protocol and port. It
uses the local machine's IP or the "loopback" address.
Note that the port
specifies the
local socket (at which the receiver listens), it does not determine the
remote sockets from which messages can be received. If you want to filter
out a particular remote (or target) socket, this can be done
using the setTarget
method!
TCP receivers are required
to be connected to one particular target, so setTarget
is
must be called prior to connect
or startListening
!
protocol
- the protocol to use, currently either UDP
or TCP
port
- the port number for the OSC socket, or 0
to use an arbitrary free portloopBack
- if true
, the "loopback" address ("<IP_ADDRESS>"
)
is used which limits communication to the local machine. If false
, the
special IP "<IP_ADDRESS>"
is used which means messages from any IP as well as from
the loopback are acceptedjava.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedpublic static OSCReceiver newUsing(OSCPacketCodec c, java.lang.String protocol, int port, boolean loopBack) throws java.io.IOException
OSCReceiver
, using
a specific codec and transport protocol and port. It
uses the local machine's IP or the "loopback" address.
Note that the port
specifies the
local socket (at which the receiver listens), it does not determine the
remote sockets from which messages can be received. If you want to filter
out a particular remote (or target) socket, this can be done
using the setTarget
method!
TCP receivers are required
to be connected to one particular target, so setTarget
is
must be called prior to connect
or startListening
!
c
- the codec to useprotocol
- the protocol to use, currently either UDP
or TCP
port
- the port number for the OSC socket, or 0
to use an arbitrary free portloopBack
- if true
, the "loopback" address ("<IP_ADDRESS>"
)
is used which limits communication to the local machine. If false
, the
special IP "<IP_ADDRESS>"
is used which means messages from any IP as well as from
the loopback are acceptedjava.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedpublic static OSCReceiver newUsing(java.lang.String protocol, java.net.InetSocketAddress localAddress) throws java.io.IOException
OSCReceiver
, using
default codec and a specific transport protocol and local socket address.
Note that localAdress
specifies the
local socket (at which the receiver listens), it does not determine the
remote sockets from which messages can be received. If you want to filter
out a particular remote (or target) socket, this can be done
using the setTarget
method!
TCP receivers are required
to be connected to one particular target, so setTarget
is
must be called prior to connect
or startListening
!
protocol
- the protocol to use, currently either UDP
or TCP
localAddress
- a valid address to use for the OSC socket. If the port is 0
,
an arbitrary free port is picked when the receiver is started. (you can find out
the actual port in this case by calling getLocalAddress()
after the
receiver was started).java.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedpublic static OSCReceiver newUsing(OSCPacketCodec c, java.lang.String protocol, java.net.InetSocketAddress localAddress) throws java.io.IOException
OSCReceiver
, using
a specific codec and transport protocol and local socket address.
Note that the port
specifies the
local socket (at which the receiver listens), it does not determine the
remote sockets from which messages can be received. If you want to filter
out a particular remote (or target) socket, this can be done
using the setTarget
method!
TCP receivers are required
to be connected to one particular target, so setTarget
is
must be called prior to connect
or startListening
!
c
- the codec to useprotocol
- the protocol to use, currently either UDP
or TCP
localAddress
- a valid address to use for the OSC socket. If the port is 0
,
an arbitrary free port is picked when the receiver is started. (you can find out
the actual port in this case by calling getLocalAddress()
after the
receiver was started).java.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedpublic static OSCReceiver newUsing(java.nio.channels.DatagramChannel dch) throws java.io.IOException
OSCReceiver
, using
default codec and UDP transport on a given channel. The caller should ensure that
the provided channel's socket was bound to a valid address
(using dch.socket().bind( SocketAddress )
).
Note that dch
specifies the
local socket (at which the receiver listens), it does not determine the
remote sockets from which messages can be received. If you want to filter
out a particular remote (or target) socket, this can be done
using the setTarget
method!dch
- the DatagramChannel
to use as UDP socket.java.io.IOException
- if a networking error occurs while configuring the socketpublic static OSCReceiver newUsing(OSCPacketCodec c, java.nio.channels.DatagramChannel dch) throws java.io.IOException
OSCReceiver
, using
a specific codec and UDP transport on a given channel. The caller should ensure that
the provided channel's socket was bound to a valid address
(using dch.socket().bind( SocketAddress )
).
Note that dch
specifies the
local socket (at which the receiver listens), it does not determine the
remote sockets from which messages can be received. If you want to filter
out a particular remote (or target) socket, this can be done
using the setTarget
method!c
- the codec to usedch
- the DatagramChannel
to use as UDP socket.java.io.IOException
- if a networking error occurs while configuring the socketpublic static OSCReceiver newUsing(java.nio.channels.SocketChannel sch) throws java.io.IOException
OSCReceiver
, using
default codec and TCP transport on a given channel. The caller should ensure that
the provided channel's socket was bound to a valid address
(using sch.socket().bind( SocketAddress )
). Furthermore,
the channel must be connected (using connect()
) before
being able to receive messages. Note that sch
specifies the
local socket (at which the receiver listens), it does not determine the
remote sockets from which messages can be received. The remote (or target)
socket must be explicitly specified using setTarget
before
trying to connect!sch
- the SocketChannel
to use as TCP socket.java.io.IOException
- if a networking error occurs while configuring the socketpublic static OSCReceiver newUsing(OSCPacketCodec c, java.nio.channels.SocketChannel sch) throws java.io.IOException
OSCReceiver
, using
a specific codec and TCP transport on a given channel. The caller should ensure that
the provided channel's socket was bound to a valid address
(using sch.socket().bind( SocketAddress )
). Furthermore,
the channel must be connected (using connect()
) before
being able to receive messages. Note that sch
specifies the
local socket (at which the receiver listens), it does not determine the
remote sockets from which messages can be received. The remote (or target)
socket must be explicitly specified using setTarget
before
trying to connect!c
- the codec to usesch
- the SocketChannel
to use as TCP socket.java.io.IOException
- if a networking error occurs while configuring the socketpublic java.lang.String getProtocol()
OSCChannel
getProtocol
in interface OSCChannel
UDP
or TCP
OSCChannel.UDP
,
OSCChannel.TCP
public abstract java.net.InetSocketAddress getLocalAddress() throws java.io.IOException
getHostName()
(or for the IP getAddress().getHostAddress()
)
and getPort()
. This port number may be 0
if the receiver was called with an unspecified port and has not yet been
started. In this case, to determine the port actually used, call this
method after the receiver has been started.
Note that if the receiver is bound to the accept-any IP "<IP_ADDRESS>"
,
which happens for example when calling newUsing( <protocol>, 0, false )
,
the returned IP will be the localhost's IP, so you can
patch the result directly into any setTarget
call.
getLocalAddress
in interface OSCChannel
java.io.IOException
- if the local host could not be resolvedInetSocketAddress.getHostName()
,
InetSocketAddress.getAddress()
,
InetSocketAddress.getPort()
public abstract void setTarget(java.net.SocketAddress target)
public void setCodec(OSCPacketCodec c)
OSCChannel
setCodec
in interface OSCChannel
c
- the codec to usepublic OSCPacketCodec getCodec()
OSCChannel
getCodec
in interface OSCChannel
OSCPacketCodec.getDefaultCodec()
public void addOSCListener(OSCListener listener)
listener
- the listener to registerpublic void removeOSCListener(OSCListener listener)
listener
- the listener to remove from
the list of notified objects.public void startListening() throws java.io.IOException
startListening
. This method will check
the connection status of the channel, using isConnected
and establish the connection if necessary. Therefore,
calling connect
prior to startListening
is not necessary.
To find out at which port we are listening, call
getLocalAddress().getPort()
.
If the OSCReceiver
is already listening,
this method does nothing.
java.io.IOException
- when an error occurs
while establishing the channel connection.
In that case, no thread has been started
and hence stopListening() needn't be calledjava.lang.IllegalStateException
- when trying to call this method from within the OSC receiver thread
(which would obviously cause a loop)public boolean isListening()
OSCReceiver
is
listening or not.public void stopListening() throws java.io.IOException
close()
on the datagram
channel, which causes the listening thread to die because
of a channel-closing exception.java.io.IOException
- if an error occurs while shutting downjava.lang.IllegalStateException
- when trying to call this method from within the OSC receiver thread
(which would obviously cause a loop)public void setBufferSize(int size)
OSCChannel
setBufferSize
in interface OSCChannel
size
- the new size in bytes.OSCChannel.getBufferSize()
public int getBufferSize()
OSCChannel
getBufferSize
in interface OSCChannel
OSCChannel.setBufferSize( int )
public void dumpOSC(int mode, java.io.PrintStream stream)
OSCChannel
dumpOSC
in interface OSCChannel
mode
- one of kDumpOff
(don't dump, default),
kDumpText
(dump human readable string),
kDumpHex
(hexdump), or
kDumpBoth
(both text and hex)stream
- the stream to print on, or null
which
is shorthand for System.err
OSCChannel.kDumpOff
,
OSCChannel.kDumpText
,
OSCChannel.kDumpHex
,
OSCChannel.kDumpBoth
public void dispose()
OSCChannel
dispose
in interface OSCChannel
protected abstract void sendGuardSignal() throws java.io.IOException
java.io.IOException
protected abstract void setChannel(java.nio.channels.SelectableChannel ch) throws java.io.IOException
java.io.IOException
protected abstract void closeChannel() throws java.io.IOException
java.io.IOException
protected static java.lang.String debugTimeString()
protected void flipDecodeDispatch(java.net.SocketAddress sender) throws java.io.IOException
java.io.IOException
protected void checkBuffer()
protected java.net.InetSocketAddress getLocalAddress(java.net.InetAddress addr, int port) throws java.net.UnknownHostException
java.net.UnknownHostException
public abstract void connect() throws java.io.IOException
Having a connected channel without actually listening to incoming messages
is usually not making sense. You can call startListening
without
explicit prior call to connect
, because startListening
will establish the connection if necessary.
When a UDP transmitter
is created without an explicit DatagramChannel
– say by
calling OSCReceiver.newUsing( "udp" )
, calling
connect()
will actually create and bind a DatagramChannel
.
For a UDP receiver which was created with an explicit
DatagramChannel
. However, for TCP receivers,
this may throw an IOException
if the receiver
was already connected, therefore be sure to check isConnected()
before.
java.io.IOException
- if a networking error occurs. Possible reasons: - the underlying
network channel had been closed by the server. - the transport
is TCP and the server is not available.java.io.IOException
isConnected()
,
startListening()
public abstract boolean isConnected()
true
if the receiver is connected, false
otherwise. For transports that do not use
connectivity (e.g. UDP) this returns false
, if the
underlying DatagramChannel
has not yet been created.connect()


In this exercise I am to choose several adjectives that describe how I felt at my happiest, proudest or most satisfied. I narrowed my original list of 28 down to these core adjectives: achievement/accomplishment, creativity, decisiveness, efficiency, honesty/openness and reliability/responsibility.
These words are very similar and both have French etymology. They mean a lot to me mainly because I am a task oriented person. I have a sense of accomplishment when completing simple, daily tasks i.e., grocery shopping, walking the dogs, cleaning the house, laundry etc. But achievement is something a little more, its a long-term goal. Completing Phase 0 of this bootcamp will be an achievement for me. These things instill a great sense of pride in me as well as a sense of empowerment and security.
 And yes I try every day – I am not always successful but on bad days I still rate a 3 on a 1 to 5 scale.
As far as using my values to counteract a stereotype threat, I don't know. I have lived and worked long enough to know that sometimes you have to choose between your values and what the world or office or whatever is offering or views as acceptable. And from my experience choose your values – you will be happier and healthier in the long run. And don't think you are alone; it may take awhile but there are others out there who hold the same values and you will find them.


2nd edition
Do you have a real Passion for learning?   Are you good at solving problems? Do you want to be a part of the technology that is making the world a better place?
You can chat with some of the cool folks in our office who will share with you the tips and tricks of tackling a ThoughtWorks interview ;-) This orientation session will walk you through our recruitment process. Join us for an interactive evening. Snacks and tea is on us!
4:00 - 4:10 pm
Keynote: About ThoughtWorks
4:10 - 4:30 pm
Mind the code
4:30 - 5:15 pm
Interactive Panel Discussion: Q&A
5:15 - 5:30 pm
Clean Code: 4 rules of simple design
5:30 - 5:45 pm
Thought leadership at TW


Dear Sir, This contact is being made to you out of the increase need. Ostensibly, this may some what aroused some kind of surprise and suspicion both by its source, method or channel of transmission. It may also, be seen unjustifiable based on rules of certain values, but certain concerns and considerations has increased quite immeasurably and contemptuously in me, hence my approach. I am DR BENNARD ABAH a member of the movement for Democratic Change in ZIMBABWE? My party is opposed to the ZANU-PF of the incumbent president ROBERT MUGBE. I went into a partnership with a white farmer and businessman in ZIMBABWE and as we progressed in business, I bought his ideas and philosophy, which made me join the movement for democratic change which is dominated by the white (of which my colleague is a top member). We control the greater portion of the white-dominated farms in ZIMBABWE and we are major shareholder in major companies in ZIMBABWE. The MUGABE government and his political associate are not tolerant to the activities of the movement for democratic change and he is using indirect guerrilla war tactics to oppress the members. ZIMBABWE war veterans invaded our farms and confiscated some of our assets and held us hostage. I manage to escape from their brutality but my business partner died in the struggle. He left a message that I should sell off our assets including the farms, estates and the companies, ensuring that his family relocates overseas and also to invest the money properly bearing in mind that the next step of the guerrillas will be to confiscate those remaining assets. I have successfully sold off the remaining portion of our estates, tobacco farms and companies after which I managed with the help of the immigration officer to sneak into JOHANNESBURG, SOUTH AFRICA, with the money and my colleague's families. In fact, we are seeking refuge in SOUTH AFRICA at this moment. The total sum in our possession at hand is the sum USD36 MILLION realized from auction, sales of the estates, tobacco farms and companies. The money is secured in a security company. We are being highly restricted by the South African Authorities in opening up bank accounts here thereby adding more pain to the existing sorrows; a good study has also shown that South African as a base for our asylum is not the bests of a choice. Evidences available show that South African is a nation in crisis, a fractured and bitterly divided nation since after apartheids rule, not suitable for good and strong investments. It is an irony that the level of crimes, corruptions, mistrusts, mischief in the country is seemed to have for years endangered the economic development and has scared foreigner's investors away from investing in the country. I wish to link up some one with strong characters who I can trust and enter into an understanding with and some one with good knowledge of investment to administer funds into business. This should be done under none-disclosure and none circumvention framework. I have lots of drawbacks in the South African environment as issues in the country does not seem to go far enough to guarantee hope, trust in investment. Please, if I can have your confidence, trust and understanding in this matter, I will be glad to have you contact me with this email<EMAIL_ADDRESS>Please, this is not a case of money laundering of illicit funds. I have 2 options for you; the 1st is that you could choose to have 25% of money for nominating your account for this transaction. Or you could as well go into a joint business partnership with me for proper investment of the fund in any best choice of your wish once the money is transferred into your Overseas account. Best regards,


Next: RELATED WORK
Up: Utilization of SKOS Vocabulary
Previous: P-A4 Provide skos:prefLabel to
P-A5 Use skos:altLabel to describe variations of the concept
Alternative labels can complement the label with the acronyms, abbreviations, spelling variants, and irregular plural/singular forms for a concept.
lavdim
2015-08-12


Error Fetching Stories
-
{{ story.title }}{{ story.num_comments }}
Submitted by {{ story.author }} | {{ story.points }} points