At this point, you have general overview of shaders. This tutorial is aimed at teaching some useful tricks for optimizing, error checking and some useful code snippets. Feel free to just play around with shaders and come back to this later if you're not ready.
When I was first learning about shaders, it was difficult for me to tell what code was efficient and what would be slow. After all, you can't easily run code on thousands of pixels in GML, but shaders can with ease. At the same time many shaders can struggle with if-statements and for-loops, while GML has no such problem. So that's what I'd like to cover now.
So here's a list of things to consider.
float PHI = (sqrt(5.)+1.)/2.;
consider pre-calculating the answer instead. In this case, approximately 1.618034. Sometimes you need to compute a complex expression with changing variables (e.g. sunlight color based on the sun position). If this expression is the same across all pixels, then try calculating this outside the shader and passing it in as a uniform. The CPU is more going to be more accurate anyway!
float texel_width = 1.0 / resolution.x;
float texel_height = 1.0 / resolution.y;
Just use a vec2: vec2 texel_size = 1.0 / resolution;
if (i > light_num) break;
The preprocessor is used to "process" the shader code during compilation (not runtime). For example, with #define
, you can define a macro value, let's say 'pi', and it will replace all references of 'pi' with that value (just like GML macros). Every time you run the game, the preprocessor will compile those changes as though you hardcoded those values in, making it a good choice for values you may want to change later.
Here's a list of the supported preprocessor directives:
#define, #undef, #ifdef, #ifndef, #if, #endif, #else, #elif,
So you know that '#define' can define a value like constants, but, like GML macros, it can also hold expressions such as #define add a + b
or you can use it like a function with custom values like: #define add(a,b) a + b
.
Note: This code directly replaces its references, so you probably don't want to put a semi-colon at the end of your expression, if you already have one on that line! And since it's like copy-pasting, you'll want to make sure you're not repeating computations that only need to be done once.
The next directive is '#undef', which as you may have guessed, can be used to undefine macros, which can be used to avoid naming conflicts. '#ifdef' and `ifndef` are preprocessor if statements to check if a macro is defined (or not, respectively). Instead of brackets, you use '#endif' to close the statement, and any lines in between will be discarded (during compile) if the condition is false. Some people like to leave optional bits of code in their shader that can be toggled on with a define.
Next is '#if', which can be used for standard conditionals (e.g ==, >, etc). Just make sure the terms in the condition are constant values, macros!
And finally, you have '#else' and '#elif' which work how you'd expect, being an else statement and else-if respectively. To recap, here's a quick example:
#define mode 0 //Try changing this to 0, 1 or 2.
#if (mode == 0)
color *= vec3(1.0, 0.0, 0.0); //Multiply "color" by a red filter.
#elif (mode == 1)
color *= vec3(0.0, 1.0, 0.0); //Mulitply by a green filter.
#else
color = color.rrr; //Use mono-color from red channel.
#endif
#undef mode
So that's how you can make your code more customizable without taking runtime performance! You'll thank yourself later for not leaving magic numbers everywhere.
Here are some useful pieces of code that should help you get started!
For some effects (like sepia-tone or grayscale) you need to compute the brightness of a color. I'll go over the two most common approaches.
float average = (color.r+color.g+color.b)/3.0;
So if any one channel is brightened, it increases the output brightness, up to a max brightness of 1.0.
float weighted = dot(color.rgb, vec3(0.299, 0.587, 0.114));
The dot product simply adds up the color's red value times 0.299, green times 0.587, and blue times 0.114 which also adds up to a max value of 1.0. These come from fairly standard luma values. There are more many more sophisticated compute brightness, but this is adequate for most game effects.
One thing you might not know is that 50% brightness (or 0.5 RGB) is not displayed at 50% brightness on your monitor. Instead, it's displayed at around 73% brightness because the output is not linear.
//Useful on textures because they are already gamma-encoded.
vec3 decode = pow(color.rgb, vec3(0.4545));
//Useful with linear gradients or lighting. It should be the last step.
vec3 encode = pow(color.rgb, vec3(2.2));
If you're probably wondering where the 2.2 comes from, it's the standard gamma for most displays today.
For many effects, you need to work directly with texture coordinates and texture pages can make the more difficult.
For example, say you want write a gradient shader where the sprite's alpha fades to 0 at the bottom.
The easy answer would be to use the texture coordinates because they range from 0 to 1 across the texture page.
Texture coordinate normalization.
uniform vec4 sprite_uvs; //uvs [x, y, w, h]
//Use sprite_get_uvs() to get the coordinates of the top-left and bottom-right corners:
//Example: var uvs = sprite_get_uvs(sprite_index, image_index);
//You can get the texture coordinate range as the difference between them:
//Example: shader_set_uniform_f(uni_uvs, uvs[0], uvs[1], uvs[2]-uvs[0], uvs[3]-uvs[1]);
//Map the texture coordinates to the range 0 - 1 ("normalized").
vec2 texcoord_normalize(vec2 coord)
{
return (coord-sprite_uvs.xy)/sprite_uvs.zw;
}
//Map normalized texture coordinates back to the original range.
vec2 texcoord_unnormalize(vec2 coord)
{
return coord*sprite_uvs.zw+sprite_uvs.xy;
}
So if you skim over shader websites like ShaderToy you've probably seen various types of noise come up a lot. Noise can be used to make your effect look more natural and chaotic. It's perfect for fog, water, terrain, clouds and much more so it's definitely something to go over. In a future tutorial, I'll go over noise in more detail, but for now I'll go over three basic types to get you started:
//Typical pseudo-random hash (white noise).
float hash(vec2 p)
{
p = mod(p, 7.31); //Bring 'p' to a useful range.
//Generate a pseudo random number from 'p'.
return fract(sin(p.x*12.9898 + p.y*78.233) * 43758.5453);
}
In short, this hash generates a really high-frequency and amplitude sine-wave using "random" numbers that are unlikely to produce visible patterns.
And the 'fract' brings it to the 0-1 range (most useful range) and helps break up the patterns further. The modulo is optional. It produces better results for values > 10, but does add computationally cost. Not necessary on 0 to 1 ranges, like texture coordinates.
//Standard value noise.
float value_noise(vec2 pos)
{
vec2 cell = floor(pos); //Cell (whole number) coordinates.
vec2 sub = pos-cell; //Sub-cell (fractional) coordinates.
sub *= sub*(3.-2.*sub); //Cubic interpolation (comment out for linear interpolation).
const vec2 off = vec2(0,1); //Offset vector.
//Sample cell corners and interpolate between them.
return mix( mix(hash(cell+off.xx), hash(cell+off.yx), sub.x),
mix(hash(cell+off.xy), hash(cell+off.yy), sub.x), sub.y);
}
This function produces smoother white noise. It uses the exact same hash function, but rounded to whole numbers (4 cell corners) and interpolates between them. When you layer multiple "octaves" of value noise you can produce some very natural patterns. This is known as fractal noise:
//Generate 'fractal' noise from multiple value noise octaves.
float fractal_noise(vec2 pos, int oct, float amp)
{
float noise_sum = 0.; //Noise total.
float weight_sum = 0.; //Weight total.
float weight = 1.; //Octave weight.
for(int i = 0; i < oct; i++) //Iterate through octaves
{
noise_sum += value_noise(pos) * weight; //Add noise octave.
weight_sum += weight; //Add octave weight.
weight *= amp; //Reduce octave amplitude by multiplier.
pos *= mat2(1.6,1.2,-1.2,1.6); //Rotate and scale.
}
return noise_sum/weight_sum; //Compute average.
}
This iterates through multiple octaves of value noise at different scales and amplitudes and averages the result. You can control the number of octaves (4-10 is reasonable) and the amplitude multiplier (0.5-1.0 is reasonable). An "amp" value of 1.0 will mean all octaves have the same weight and gives a rougher appearance, while a value 0.5 means each octave is half the intensity of the last, giving a very smooth falloff.
Error messages... Everyone hates seeing them. What does Fragment Shader: shd_example at line 3 : ''
even mean? Well now let's go over the different error messages and how to interpret them. The first thing to know is that the error line is off by one or two. Too be safe, check a couple lines above where the error occured.
Here's a quick list of the error messages:
Draw failed due to invalid input layout
An underrated feature of GLSL ES is shader extensions. This gives you access to extra features that didn't make it into the full shader release.
You can enable an extension like so:
#extension extension_name : require
This will cause an error if the shader is not supported on your hardware.
There are two working shader extensions in GMS 2 (if you find another, contact me):
Finally there are some built-in shader macros which may be useful! When you compile your GLSL ES shader in GameMaker, it may be converted to GLSL, HLSL or PSSL depending on the platform you're compiling for. For Windows, UWP and Xbox One, it will compile to HLSL 11, for Mac or Ubuntu, GLSL, for PlayStation 4, PSSL and GLSL ES for everything else.
There are four macros for these languages: _YY_GLSLES_, _YY_GLSL_, _YY_HLSL11_, _YY_PSSL_
So if you want to add extra code for only Windows, you can use the pre-processor to check if '_YY_HLSL11_' is defined.
You can also check the shader version using '__VERSION__'. As of 2023, this will always be "100" but it could change in the future.
So here's a quick summary of what we covered here: Optimize your code for parallel computation (avoid complicated edge cases). If your variables can be pre-computed or computed less often, do that.
You can use the pre-processor for adjustable shader parameters that don't add any runtime cost. This also is perfect for magic numbers that are referenced all around the shaders.
RGB color perception is a bit complicated, lime, vec3(0,1,0)
, appears brighter than blue, vec3(0,0,1)
. Also vec3(0.5,0.5,0.5)
is not half as bright as vec3(1,1,1)
, but a bit brighter due to how brightness is encoded.
Error messages point to the wrong shader line (being 2 lines below).
Finally there are some useful shader extensions and built-in macros to play around with.
I hope you learned something interesting, even if you are an intermediate shader programmer. I want this website to be the source I didn't have when I was learning about shaders, so please consider sharing this with others if you found it helpful!


--- layout: structure--pattern title: User Patterns - NOT DONE load_highlighter: true has_map: true ---

...

We are looking at 2 different methods to see if these affect the success of the lumbar puncture:
1.
2. Early stylet removal versus late stylet removal
And a link.
A stylet sits inside the needle to prevent skin cells getting stuck in the needle. During the procedure, the stylet would either be removed after the needle is through the skin but before it reaches the cerebrospinal fluid, or it will be removed from the needle after it reaches the cerebrospinal fluid.

...

...

...

<img ...


Every Logisim project is automatically a library that can be loaded into other Logisim projects: Just save it into a file and then load the library within another project. All of the circuits defined in the first project will then be available as subcircuits for the second. This feature allows you to reuse common components across projects and to share favorite components with your friends (or students).
Each project has a designated "main circuit," which can be changed to refer to the current circuit via the Set As Main Circuit option in the Project menu. The only significance of this is that the main circuit is the one that is displayed when you first open the project. The default name of the circuit in a newly created file ("main") has no significance at all, and you can feel free to delete or rename that circuit.
With a loaded Logisim library, you are allowed to view circuits and manipulate their states, but Logisim will prevent you from altering the circuits' design and other data stored within the file.
If you want to alter a circuit in a loaded Logisim library, then you need to open it separately within Logisim. As soon as you save it, the other project should automatically load the modified version immediately; but if it does not, you can right-click the library folder in the explorer pane and select Reload Library.
Next: User's Guide.


Xerox threatens to go hostile in HP takeover bid
by James WarringtonXerox today threatened to take its $33.5bn (£26bn) takeover offer for HP hostile if the tech firm’s board did not agree to a “friendly” merger by next week.
Read more: HP rejects Xerox's $33.5bn takeover bid but keeps door open for potential merger
HP rejected Xerox’s offer of $22 per share on Sunday, saying it “significantly undervalues” the company, but said it remained open to further discussions over a potential merger.
However, in a letter to board chair Chip Bergh and chief executive Enrique Lores, Xerox said it was “very surprised” and “confused” by HP’s decision to rebuff the offer.
“The Xerox board of directors is determined to expeditiously pursue our proposed acquisition of HP to completion - we see no cause for further delay,” the firm wrote.
The printer maker said it would take its offer directly to HP shareholders if the two sides had not agreed on “mutual confirmatory due diligence” for a deal by 5pm on 25 November.
In its response issued over the weekend, HP branded the takeover offer “highly conditional and uncertain”. Xerox hit back at this claim, insisting there would be no financing condition on its acquisition.
The printing firm also said it had accepted HP’s requests for due diligence, but that the computer maker had refused to open its books in return.
Read more: Xerox to sell off stake in Fuji Xerox for $2.3bn
“Any friendly process for a combination of this type requires mutual diligence - your proposal for one-way diligence is an unnecessary delay tactic,” it said.
HP has been contacted for comment on the letter.


This is a unit test for the GWTHandler and the GWTRPCServiceExporter. It requires that the web application is running
and exposing
the handler at /handler
and the exporter at /exporter
. If loaded correctly, it will run
through
some tests for the handler and the controller which should not take longer than a couple of seconds.


ECHO is off.
Get current time position
00
Time-50ms
-10ms
+10ms
+50ms
Set time position to 5 seconds
1:title_04.mp4
2:title_05.mp4
3:title_06.mp4
4:title_07.mp4
5:title_08.mp4
6:title_09.mp4
7:title_10.mp4
8:title_11.mp4
9:title_12.mp4
10:T_01_chapter_01.mp4
11:T_01_chapter_02.mp4
12:T_01_chapter_03.mp4
13:T_01_chapter_04.mp4
14:T_01_chapter_05.mp4
15:T_01_chapter_06.mp4
16:T_01_chapter_07.mp4
17:T_01_chapter_08.mp4
18:T_01_chapter_09.mp4
19:T_01_chapter_10.mp4
20:T_01_chapter_11.mp4
21:T_01_chapter_12.mp4
22:T_01_chapter_13.mp4
23:T_01_chapter_14.mp4
24:T_01_chapter_15.mp4
25:T_01_chapter_16.mp4
26:T_01_chapter_17.mp4
27:T_01_chapter_18.mp4
28:T_01_chapter_19.mp4
29:T_01_chapter_20.mp4
30:T_01_chapter_21.mp4
31:T_01_chapter_22.mp4
Your browser does not support HTML5 video.


We host retirement planing workshops throughout the year at various locations in Ontario and across Canada. Register for one near you.


Ask questions with us
"The real secret of happiness lies in having a genuine interest in all the details of everyday life." William Morris
"The real secret of happiness lies in having a genuine interest in all the details of everyday life."


The evolution of me...
| COMPANY | Jobs | START DATE | LOCATION |
|---|---|---|---|
| Hi Marley | Software Engineer | February 2019 | Boston, MA |
| Veson Nautical | Associate Software Developer | November 2018 | Boston, MA |
| Veson Nautical | Software Engineer Intern | July 2018 | Boston, MA |
| Formlabs | Business Systems Analyst Intern | April 2018 | Boston, MA |
| Resilient Coders | Full Stack Web Developer Apprentice | January 2018 | Boston, MA |
| HubSpot | Help Desk Intern | August 2017 | Cambridge, MA |
| HubSpot | Data Analyst Intern | May 2017 | Cambridge, MA |
| Federal Home Loan Bank of Boston | Help Desk Intern | August 2016 | Boston, MA |
| Planet Fitness | Front Desk Rep | October 2014 | Boston, MA |


{{ _('Use double brackets to add personal information about the recipient:') }}
{{ _('Hello ((first name)), your reference is ((ref number))') }}


Working with a pair for the first time in a guided pairing session was a great experience for myself and I think Dustin as well! I think we both enjoyed it and worked very well as a team together. We both took several turns 'driving' and 'navigating'. This strategy worked very well for us and both of us were able to show our strengths and areas to work on. Dustin was very good with fluid layouts and was able to help me gain a much greater understanding of how to set up a fluid design. Our communication was great and I think we were able to accomplish a lot in short amount of time. Paired programming seems like a very great practice to me and I look forward to a lot more pairing while in DBC as well as in my career in the future.
Side Information


MR.FRANK TETTEH(JP)


{% extends "default.html" %} {% load bootstrap3 %} {% block css %} {% endblock %} {% block content %}
Welcome to the ODC Workshop at IGARSS. This page serves to aggregate some useful links and content that may be referenced during this presentation. You can use this page to follow along or to reference at a later date. You will receive a sheet containing a server IP address that will serve as a sandboxed Data Cube instance for this workshop.
When directed to visit a webpage or open a configuration file or document, you can use this page to quickly and easily open the files. Additionally, a command 'cheat sheet' is provided to ensure that everyone who wants to follow along is able to keep up. For ease of use, this has been divided into sections.


java.lang.Object World
public class World
The class that stores the information Note: avoids using for each loops to prevent concurrent modification errors
| Constructor Summary | |
|---|---|
World(Background b,
int width,
int height,
ResourceManager m)
Makes a new World |
| Method Summary | |
|---|---|
void |
addEnemy(Enemy e)
adds an enemy to world |
void |
addPeople(int num)
adds people |
void |
addTextBubble(TextBubble b)
|
void |
addTower(Tower t)
Adds a tower to the list, and links them |
void |
changeXY(int deltaX,
int deltaY)
For the dragging to scroll in the world feature |
java.util.ArrayList<Enemy> |
enemiesInRange(Coordinate c,
double r)
returns all enemies within r of c, for towers |
void |
gainMetal(int amnt)
adds metal |
java.util.ArrayList<Tower> |
getAllTowers()
|
Enemy |
getClosestEnemy(Coordinate c,
double r)
returns the enemy closest to c that is at most r away from c returns null is there is no such enemy |
Tower |
getClosestTower(Coordinate c,
double r)
returns the tower closest to c that is at most r away from c returns null is there is no such tower |
int |
getHeight()
|
double |
getMagnification()
|
Tower |
getRandomTower(Coordinate c)
Returns a random tower weighted to be closer to the coordinate c |
int |
getWidth()
|
World |
newClone()
Subclasses override this method to provide another world object for the purpose of restarting levels |
void |
paintComponent(java.awt.Graphics g)
Paints the world |
void |
placeTower(Tower t)
Makes the world prepare |
void |
removeEnemy(Enemy e)
|
void |
removeTower(Tower t)
Gets rid of tower and de-links it |
ResourceManager |
resourceManager()
allows access to the game resources |
int |
scoreIncrease()
Used for the Score in the game's Account in Main |
boolean |
setMagnification(double num)
Sets the magnification of the world when the user zooms in and out |
void |
setObjective(Objective c)
|
void |
setOffset(int x,
int y)
For the dragging to scroll in the world feature |
void |
setSize(int x,
int y)
sets the true size of the world (not the same as the window size, it may be necessary to scroll to view the entire world |
void |
setTower()
Places the tower where the mouse was clicked in the world |
void |
setXY(int eventX,
int eventY)
To be used with the mouseDragged() method in GamePanel |
java.util.ArrayList<Tower> |
towersInRange(Coordinate c,
double r)
returns a list of all towers within r from c, for enemies |
void |
updateBackground()
moves the background |
void |
updateComponents()
updates the game components |
int |
x()
|
int |
y()
|
| Methods inherited from class |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public World(Background b, int width, int height, ResourceManager m)
| Method Detail |
|---|
public void addEnemy(Enemy e)
public void addPeople(int num)
public void addTextBubble(TextBubble b)
public void addTower(Tower t)
public void changeXY(int deltaX, int deltaY)
public java.util.ArrayList<Enemy> enemiesInRange(Coordinate c, double r)
public void gainMetal(int amnt)
public java.util.ArrayList<Tower> getAllTowers()
public Enemy getClosestEnemy(Coordinate c, double r)
public Tower getClosestTower(Coordinate c, double r)
public int getHeight()
public double getMagnification()
public Tower getRandomTower(Coordinate c)
public int getWidth()
public World newClone()
public void paintComponent(java.awt.Graphics g)
public void placeTower(Tower t)
public void removeEnemy(Enemy e)
public void removeTower(Tower t)
public ResourceManager resourceManager()
public int scoreIncrease()
public boolean setMagnification(double num)
public void setObjective(Objective c)
public void setOffset(int x, int y)
public void setSize(int x, int y)
public void setTower()
public void setXY(int eventX, int eventY)
public java.util.ArrayList<Tower> towersInRange(Coordinate c, double r)
public void updateBackground()
public void updateComponents()
public int x()
public int y()


DefaultWireframe
open class DefaultWireframe : Wireframe, HasControllerContainer
Undocumented
-
Undocumented
Declaration
Swift
public let controllerContainer: ControllerContainer
-
init(router:composedOptionProvider:routingHandlerContainer:composedControllerProvider:composedPresenterProvider:composedRoutingPresenter:routingDelegate:composedRoutingObserver:routeResultHandler:topControllerResolver:controllerDismisser:controllerContainer:)
Undocumented
Declaration
Swift
public init( router : Router = DefaultRouter(), composedOptionProvider: ComposedRoutingOptionProvider = DefaultComposedRoutingOptionProvider(), routingHandlerContainer: RoutingHandlerContainer = DefaultRoutingHandlerContainer(), composedControllerProvider: ComposedControllerProvider = DefaultComposedControllerProvider(), composedPresenterProvider: ComposedPresenterProvider = DefaultComposedPresenterProvider(), composedRoutingPresenter: ComposedRoutingPresenter = DefaultComposedRoutingPresenter(), routingDelegate: RoutingDelegate = DefaultRoutingDelegate(), composedRoutingObserver: ComposedRoutingObserver = DefaultComposedRoutingObserver(), routeResultHandler: RouteResultHandler = DefaultRouteResultHandler(), topControllerResolver: ComposedTopControllerResolver = DefaultComposedTopControllerResolver(), controllerDismisser: ComposedControllerDimisser = DefaultComposedControllerDismisser(), controllerContainer: ControllerContainer = DefaultControllerContainer() )
-
Declaration
Swift
open var topViewController: UIViewController? { get }
-
Declaration
Swift
open func dismissTopViewController(animated:Bool,completion: @escaping ()->Void)
-
Check if a route pattern matching this url was added to the wireframe. Be careful, if you don’t route to a handler (but to a controller), it’s possible that no ControllerProvider or RoutingOptionProvider for this controller exists.
Declaration
Swift
open func canRoute(url: URL, parameters: [String : Any], option: RoutingOption?) throws -> Bool
Parameters
url
the url to check for resolution
parameters
the parameters (data) given to the controller
Return Value
Can the wireframe find a route for the given url
-
Route to a new route presenting a view controller
Throws
throws an error when no controller and/or option provider can be found.Declaration
Swift
open func route(url: URL, parameters: [String : Any] = [:], option: RoutingOption? = nil, completion: @escaping () -> Void = {}) throws
Parameters
url
the route of the view controller to be presented
option
how should your view controller be presented (default is nil)
parameters
a dictionary of parameters (data) send to the presented view controller (default is empty dict)
completion
function called when the view controller was presented (default is empty completion)
-
Return the view controller for a given url
Declaration
Swift
open func controller(url: URL, parameters: [String : Any]) throws -> UIViewController?
Parameters
url
url
parameters
parameters
Return Value
nil if no controller was found, the found controller otherwise
-
Register a route pattern for routing. You have to register a route pattern to allow the wireframe matching it. This is done automatically if you are using a ViewFeature from SwiftyVISPER as ControllerProvider.
Declaration
Swift
open func add(routePattern: String) throws
Parameters
pattern
the route pattern to register
-
Register a handler for a route pattern The handler will be called if a route matches your route pattern. (you dont’t have to add your pattern manually in this case)
Declaration
Swift
open func add(priority: Int, responsibleFor: @escaping (RouteResult) -> Bool, handler: @escaping RoutingHandler) throws
Parameters
priority
The priority for calling your handler, higher priorities are called first. (Defaults to 0)
responsibleFor
nil if this handler should be registered for every routing option, or a spec
handler
A handler called when a route matches your route pattern
-
Add an instance providing a controller for a route
Declaration
Swift
open func add(controllerProvider: ControllerProvider, priority: Int = 0)
Parameters
controllerProvider
instance providing a controller
priority
The priority for calling your provider, higher priorities are called first. (Defaults to 0)
-
Add an instance providing a presenter for a route
Declaration
Swift
open func add(presenterProvider: PresenterProvider, priority: Int = 0)
Parameters
provider
instance providing a presenter
priority
The priority for calling your provider, higher priorities are called first. (Defaults to 0)
-
Add an instance providing routing options for a route
Declaration
Swift
open func add(optionProvider: RoutingOptionProvider, priority: Int = 0)
Parameters
optionProvider
instance providing routing options for a route
priority
The priority for calling your provider, higher priorities are called first. (Defaults to 0)
-
Add an instance observing controllers before they are presented
Declaration
Swift
open func add(routingObserver: RoutingObserver, priority: Int = 0, routePattern: String? = nil)
Parameters
routingObserver
An instance observing controllers before they are presented
priority
The priority for calling your provider, higher priorities are called first. (Defaults to 0)
routePattern
The route pattern to call this observer, the observer is called for every route if this pattern is nil
-
Add an instance responsible for presenting view controllers. It will be triggert after the wireframe resolves a route
Declaration
Swift
open func add(routingPresenter: RoutingPresenter,priority: Int = 0)
Parameters
routingPresenter
An instance responsible for presenting view controllers
priority
The priority for calling your provider, higher priorities are called first. (Defaults to 0)
-
Add a instance responsible for finding the top view controller on an other vc
Declaration
Swift
open func add(topControllerResolver: TopControllerResolver, priority: Int)
Parameters
topControllerResolver
instance responsible for finding the top view controller on an other vc
priority
The priority for calling your provider, higher priorities are called first. (Defaults to 0)
-
Add an instance responsible for dismissing controllers
Declaration
Swift
open func add(controllerDimisser: ControllerDismisser, priority: Int)
Parameters
controllerDimisser
an instance responsible for dismissing controllers
priority
The priority for calling your dismisser, higher priorities are called first. (Defaults to 0)
-
Add a controller that can be used to navigate in your app. Typically this will be a UINavigationController, but it could also be a UITabbarController if you have a routing presenter that can handle it. Be careful you can add more than one viewControllers if your RoutingPresenters can handle different controller types or when the active ‘rootController’ changes. The last added controller will be used first. The controller will not be retained by the application (it is weakly stored), you need to store a link to them elsewhere (if you don’t want them to be removed from memory).
Declaration
Swift
open func navigateOn(_ controller: UIViewController)
Parameters
controller
a controller that can be used to navigte in your app
-
return the first navigatableController that matches in a block
Declaration
Swift
open func controllerToNavigate(matches: (UIViewController?) -> Bool) -> UIViewController?
-
delegate removement of a controller to navigate
Declaration
Swift
open func remove(controller: UIViewController)


ReMVVM
ReMVVM is an application architecture concept, marriage of Unidirectional Data Flow (Redux) with MVVM.
Redux + MVVM = ReMVVM
Motivation
Model-View-ViewModel - is well known and widely used architecture on iOS platform. It is very simple, lightweight, doesn’t bring any boilerplate and works well with reactive programming (can be used without it of course). Working on the app which contain more than single view you will find couple of questions:
- who is responsible to create View Model ?
- how to pass parameters to View Model’s constructor or fabric ?
- how to implement switching to the new view ? Where to make view change and how to pass View Model to the View ?
Of course you can find couple patterns to solve that such as coordinator but surprisingly easy you can follow the wrong path.
Unidirectional Data Flow (UDF) - the main concept behind is immutable application state that can be changed only in one place in the app (Store) and only by predictable plain functions (in Reducers) ie. State + Action = NewState. The most popular implementation of that concept is JavaScript library called Redux. The first and most popular swift’s implementation is ReSwift by Benjamin Encz. If you are not familiar with that architecture I strongly recommend to look on Benjamin’s presentation and look into ReSwift documentation.
You can find an easy example of Redux implementation with incrementing and decrementing single integer value. Let’s imagine you have application with 15-30 screens, all with complicated view structure and communication with backend API. It will bring complicated Application State, a lot of Reducers and dozens or even hundreds of Actions for the state changes.
But… what about making a mix of two architectures ? Can we implement “global” app state by Unidirectional Data Flow and use MVVM pattern for each screen in the app with all benefits it has ? We can and it is what ReMVVM was made for.
Components
For the simplicity, you can think that Unidirectional Data Flow part stores global data model state of the app. View Model may take that data, listens and reacts on the data change and of course converts and serves it for the View layer.
We can divide components on two groups related with Unidirectional Data Flow and MVVM.
Unidirectional Data Flow:
Store
- contains your application state that can be modified only by dispatching an StoreAction
. Every state change is notified to every StateObserver
.
StoreState
- it’s immutable data structure that holds your application data. In ReMVVM it has to provide ViewModelFactory
that will be used for creating View Models for your view(s).
StoreAction
- describes state change and is handled by corresponding Reducer
.
Middleware
- mechanism for enhance action’s dispatch functionality. It is usually used to simplify asynchronous dispatch and implement ‘side effects’ if required.
Reducer
- provides pure function that returns new state based on current state and the action.
MVVM:
ViewModel
- is designed to store and manage UI related data for the view
ViewModelProvider
- provides View Model(s) using ViewModelFactory from current state
ViewModelFactory
- creates View Model instances
Example
Let’s start with standard „The counter” example. We will implement one View that presents the counter value and two buttons to increase and decrease it. We will use SwiftUI and Combine but we can do it with UIKit with or without any other Reactive framework.
Counter value will be stored in application state in Store. View model will be listening on every change and will serve counter’s value as a string value.
It is extremely easy example. You may feel there is no need to put counter into application state or even there is no need to have view model and that’s true but usually in real life I’m sure you will find the benefits.
First, we need to define our application state. We don’t need custom ViewModelFactory
so we will use default implementation of StoreState
protocol.
struct ApplicationState: StoreState {
let counter: Int
}
Second, we need an StoreAction
that will let us to change state.
enum CounterAction: StoreAction {
case increase
case decrease
}
Third, we need a Reducer
that will update counter value based on action.
enum CounterReducer: Reducer {
static func reduce(state: Int, with action: CounterAction) -> Int {
switch action {
case .increase: return state + 1
case .decrease: return state - 1
}
}
}
Then, we can write view model that observes state changes and served mapped value for the view.
final class CounterViewModel: ObservableObject, Initializable {
@Published private(set) var counter: String = ""
@ReMVVM.State private var state: Int?
required init() {
$state.map(String.init).assign(to: &$counter)
}
}
Without property wrappers
“`swift final class CounterViewModel: ObservableObject, Initializable, StateObserver { @Published private(set) var counter: String = ”“ required init() { } func didReduce(state: Int, oldState: Int?) { counter = String(state) } } ”` *Please notice “`StateObserver”` declaration!*Finally, we can create our view.
struct CounterView: View {
@ReMVVM.ViewModel private var viewModel: CounterViewModel!
@ReMVVM.Dispatcher private var dispatcher
var body: some View {
VStack {
Text("Counter: \(viewModel.counter)")
.padding(.bottom)
Button(action: dispatcher[CounterAction.increase]) {
Text("Increase")
}
Button(action: dispatcher[CounterAction.decrease]) {
Text("Decrease")
}
}
}
}
Probably you’ve noticed that we wrote Reducer
for the counter value and view model listens for Int type values instead of the ApplicationState
. We could base on ApplicationState
but I would like to present you idea about substates.
It’s good to separate data as much as possible so we can operate on smaller chunks, so then view model depends only on the required data not the whole state.
To accomplish that we still need to create Reducer
for ApplicationState
.
struct ApplicationReducer: Reducer {
static func reduce(state: ApplicationState, with action: StoreAction) -> ApplicationState {
ApplicationState(
counter: CounterReducer.reduce(state: state.counter, with: action)
//...
)
}
}
We also need to provide StateMapper
that converts ApplicationState
to our Int
substate. Thanks to this we can observe substate changes in view model.
let counterMapper = StateMapper<ApplicationState>(for: \.counter)
Now, we can initialise store.
let initialState = ApplicationState(counter: 0)
let store = Store(with: initialState,
reducer: ApplicationReducer.self,
stateMappers: [counterMapper])
ReMVVM.initialize(with: store)
And test it
Testing substate reducer
![](img/CounterViewPreview2.gif)ReMVVMCore and ReMVVMSwiftUI
ReMVVM project contains two targets:
- ReMVVMCore - contains ReMVVM implementation plus ‘basic versions’ of property wrappers that you can use with UIKit
- ReMVVMSwiftUI - contains property wrappers that should be used with SwiftUI conjunction
Basically import ReMVVMSwiftUI when using SwiftUI, import ReMVVMCore otherwise.
Extensions
Sneak peak for navigation implemented with ReMVVM.
CounterView
has no additional view navigation logic implemented. The view contains additional buttons that just send appropriate actions.
Details
Code: “`swift struct CounterView: View { @ReMVVM.ViewModel private var viewModel: CounterViewModel! @ReMVVM.Dispatcher private var dispatcher var body: some View { VStack { VStack { Text("View id: \(viewModel.id)”) Text(“Counter: \(viewModel.counter)”) Button(action: dispatcher[CounterAction.increase]) { Text(“Increase”) } Button(action: dispatcher[CounterAction.decrease]) { Text(“Decrease”) } }.padding(.bottom) VStack { Text(“Navigation: -> new CounterView”) Button(action: dispatcher[Push(with: CounterView())]) { Text(“Push new”) } Button(action: dispatcher[Pop()]) { Text(“Pop”) } Button(action: dispatcher[ShowModal(view: CounterView())]) { Text(“Show new on modal”) } Button(action: dispatcher[ShowModal(view: CounterView(), navigation: true)]) { Text(“Show new on modal with nav”) } Button(action: dispatcher[DismissModal()]) { Text(“Dismiss modal”) } Button(action: dispatcher[Show(on: Navigation.root, view: CounterView())]) { Text(“Show new on root”) } Button(action: dispatcher[NavigationTab.profile.action]) { Text(“Show profile tab”) } } } } } “` For the example code please have a look here: [ReMVVMSampleSwiftUI](https://github.com/ReMVVM/ReMVVMSampleSwiftUI) [ReMVVMExtUIKit](https://github.com/ReMVVM/ReMVVMExtUIKit) navigation implementation used in couple live applications available in AppStore. [ReMVVMExtSwiftUI](https://github.com/ReMVVM/ReMVVMExtSwiftUI) is a concept of navigation implementation in pure SwiftUI. [ReMVVMSample-iOS](https://github.com/ReMVVM/ReMVVMSample-iOS) is UIKit with RxSwift sample that use [ReMVVMExtUIKit](https://github.com/ReMVVM/ReMVVMExtUIKit).Summary
ReMVVM architecture brings great separation between layers. It’s clear where to store model data, who and where creates view model and how it’s passed to the view. It takes the biggest advantages of two different architectures and makes the code readable without introducing any boilerplate.


Sport data always contains a lot of very interesting insights. We narrate a story about statistics in American Football. Having been inspired by Sheldon Cooper we decided to find out what helps professional sport players win. As good data scientists we are going to start discovering the data with nice visualizations. Looking at players positions, understanding coach strategies and team statistics give us some interesting ideas. So, grab a popcorn and enjoy the story! By the way, a lot of our graphs are interactive, do not forget about that during you reading and you will get even more insights!
American football is one of the most interesting and complex sports in the world. It is a sport game played by two teams of 11 players on a 120-yard rectangular field with goal lines on each end. The objective of the game is for one team to outscore the other. The offense, or the team with control of the ball, attempts to advance the ball down the field by running or passing the ball, while the opposing team aims to stop their advance and tries to take control of the ball. The offense must advance at least 10 yards in four downs, or plays, or else they turn over the football to the opposing team; if they succeed, they are given a new set of four downs. The place where the ball goes down becomes the line of scrimmage, and it is where the ball is placed for the start of the next play. Scoring can occur in the form of a touchdown (6 points), an extra point conversion (1 point), a two-point conversion (2 points), a field goal (3 points) or a safety (2 points).
For better and more detailed explanations of the rules we advise you to read this article and watch this video. If you are already into the game, you can find full games on this channel.
Being one of the most intricate sports in the world makes american football also one of the most interesting to explore. This sport game is made up of several key moments one of which is hand-off - the act of handing the ball directly from one player to another, i.e. without it leaving the first player's hands. To explore this interesting aspect of the game and, in general, the game itself, we used NFL dataset from kaggle competition "NFL Big Data Bowl". The dataset contains numerous statistics about the game (e.g. location) as well as players (e.g. position, speed, direction) all recorded at the time of hand-off.
The National Football League has the highest average attendance of any sporting league in the world with an impressive average attendance of 66,960 during the 2011 NFL season, by the way, it's almost half of Lausanne’s population. Best players are already assigned the same level of fame and respect as national heroes. Not only hero status but also an exciting life full of competitive spirit is what we recall when we think about football players. These make a number of children to dream about a career as a player of this fascinating game. To make this dream come true, they start training in high schools and colleges.
Let’s plot the number of games played in the state on the US map. Let’s also plot the popularity of each state for professional players studying. As you can see, there are huge differences in these maps. The most games are played in California, while most players studied in Texas. There are no games in the middle of the US, but some players studied there. From the previous plots, we learned that the distributions of games and players’ colleges differ significantly. It means that players often move to another state to join the professional team.
Let’s plot the most popular directions for a future career from each state (you can select an analyzed state). It’s interesting that some state has a very strong preference in such direction (for example, students from Texas prefer to play in California while students from Alabama usually moves to New York) but players who studied in other states (for example, in California) moves almost evenly to other states. We suppose that it is related to a difference in the work of scout teams in different states.
Looking at players' weight distribution depending on the positions they play, one can observe three 3 different groups. The first group ('heavy-weight' marked with red colour) includes player positions such as OT (offensive tackle) or G (guard) whose primary goal is both stop the run and put pressure on the quarterback. This explains why players in this group have median weight of more than 140kg. Wow!
In the group marked with blue colour ('light-weight'),there are positions like WR (wide receiver), which is again very natural, since such players must be agile to be able to catch the ball and run fast. The group in the middle ('medium-weight' marked with green colour) consists of mainly linebreakers, i.e. players whose primary role is to give instructions to other teammates and back up the line.
Sheldon Cooper is a young genius from the cult serial "Big Bang Theory". In one of the episodes about his youth Sheldon analyzes statistic of American Football games and proposes a tactic which then helps his father win a game.
– Statistically always punching on fourth down makes no sense. When the Aggies give up the ball on their own 5-yard line the opposing team has a 92% chance of scoring when they put deep from their own territory the other team still has a 77% chance of scoring but since they convert on fourth down 50% of the time the math says they should never punch again
Sheldon says that the probability to score when there are less then five yards left is 92%. In American Football there are 4 ways of scoring, but unfortunately from our data we can derive only the information about TouchDowns. Hovever it is the most popular and valuable way of score gaining, so that is also very interesting. So, let's check it out! For that we need to check if rusher crosses the end-zone. To do that we at first analyze how many yards from the line of scrimmage to the defence's end-zone at each down.
Very wierd outlier on the 75 yards? The answer is touchbacks - a ruling when the ball becomes dead on or behind a team's own goal being send by opposing team. Since 2018 NFL awards toucbacks by 25 yards kickoffs . But let's get back to touchdowns!
Knowing achived yards on a down we can draw a conclusion if there was a touchdown or not. On this plot you can see how likely a team scores with touchdown depending on a position of the line of scrimmage. We can see that the probability to score with a touchdown from 5-yard line is only 18.18%. But Sheldon doesn't lie, so may be he meant the probability to score having number of yards ≤ 5?
On this plot we have a probability to score starting from X yards or closer. One can do a touchdown from ≤ 5-yard line with a 40% chance. It is still much less than promised 92%. But, we still do not have an infromation about punches and throws, we can not conlude that Sheldon was right or wrong here. However this is a nice statistics, which may be useful for coaches.
Here we want to investigate how probable it is to gain next 4 downs by making 10 yards in 4 downs. For that we will compare number of made yards with the distance needed for achieving the goal.
If team does not move line of scrimmage 10 yards forward in 4 downs, ball obsession goes to a defending team. So, how likely team will achieve 10 yards and prevent trun-over? From the plot we see probability grows almost linearly and this is what we expect to see as the team moves gradually during the 4 downs. However there is slight decreas on the 4th down, what may mean that the deffensive team plays more aggressive on 4th down. So, the probability to convert on fourth down is 42% percent . That is very close to Sheldon's prediction, and as we also didn't consider the probability of the ball interception it may be even closer to 50%!
The probability to make a touchdown on the fourth down is almost 3 times higher than on the first one. While on average each down with sucsessfull handoff gives only 4 yards it should not affect the probability of touchdown on the huge distances. We explain this phenomenon by the fact that we plot P(Touchdown|4th down, rush) and a coach makes a decision to rush on a 4th down only when he is sure that the team will score. If you will see a game, usually team punch the ball on the 4th down, so the real probability
P(Touchdown| 4th down) is much smaller.
Strategy forms a major part of the game of American football, and both teams plan many aspects of their plays (offense) and response to plays (defense), such as what formations they take, who they put on the field, and the roles and instructions each player are given. Throughout a game, each team adapts to the other's apparent strengths and weaknesses, trying various approaches to outmaneuver or overpower their opponent to score more points in order to win the game.
Since our data is about hand-offs, let’s take a look at formations which are usually used in such games.
We can separate the three most popular formations which are used in almost 95% of the games : SINGLEBACK, SHOTGUN and I_FORM. Their corresponding schemes are shown below.
In american football, we can point out two areas of field as special ones. These are the areas close to team’s end zones and have a width of 20 yards. High probability of touch down in these zones makes coaches to change their tactic. Therefore, it makes sense to compute what tactics were mostly used per zone of field. For that we will divide field on five 20-yards long zones and for each calculate number of times when each formation was used. The plot shown below illustrates computed statistics in terms of distance from offensive team’s endzone.
What we observe is that hand-off technique is usually used in the zone of 20-40 yards from own end zone. With increase of distance from that zone, the number of times when hand-off was used gradually decreases. Another interesting aspect is that coaches not only prefer SINGLEBACK formation in general but they do it for for each zone. But, is SINGLEBACK the best offensive formation for all cases? To investigate that, let’s compute average number of yards gained for each formation.
Plot reveals dramatic drop of efficiency when offence team is close to the opponent's end zone. Statistically, hand-off allow to gain the highest number of yards in the 20-40 yards zone , which coincides with coaches’ approach. But the thing which coaches might do wrong is favouring SINGLEBACK formation over SHOTGUN since the former has significantly lower value of average yards gained for each zone. Things get even more interesting when we consider the closest to opponent's end zone area. In this case, the best tactic to use is I_FORM.
The main insights we studied:


'He Lies in Honor': Members of Congress Remember Officer Brian Sicknick at U.S. Capitol
President Joe Biden arrived at the Capito Rotunda during a ceremony for the officer.
President Joe Biden arrived at the Capito Rotunda during a ceremony for the officer.


Wavsyn - Tools for creating Mirage Disk Images
We are using Node.js
, Chromium
, and Electron
.
Run a tool!
Choose a function, and the source and destination folders the function uses.
Choose a function:
32bit to 8 bit conversion
16bit to 8 bit conversion
Write Disk Image
Convert to HFE
Source Folder
Destination Folder
Run!
Output Window:
hi


Cookieuse relies on implicit consent, by ensuring that all visitors have seen a note about cookies.
Visitors are shown a message overlay (styled by CSS) which tells them that the site uses cookies; the message can be customised, but should have a link to your cookie policy.
It can be configured to allows users to refuse the use of non-essential cookies; in this example, that is managed by the cookie policy page.
For more details on how this works, see the cookieuse website, or browse the code on github.


The execute
command has special behaviour when placed on
a

element. Instead of executing once, it
executes every detail row in the table and transfers the commands
from the header row to each detail row.

 Full Name	 Username

 Fred Bloggs	 fredbloggs

 John Doe	 johndoe

 Winston Churchill	 winston

If the method generateUsername()
returns the
full name in lowercase with spaces removed, when we run
the test we expect:
2 successes and
1 failure and
0 exceptions
to be reported.
The failure will have an expected value of
"winston
"
and an actual value of
"winstonchurchill
".


Man gets life for killing woman he repeatedly threatened
WEST PALM BEACH, Fla. (AP) - A Florida man has been sentenced to life in prison for killing his on-again, off-again girlfriend.
The Sun Sentinel reports 29-year-old Dacoby Reshard Wooten was sentenced Tuesday for the first-degree murder of 24-year-old Dav’Neisha Bryant in 2015. Prosecutors say Bryant ended the couple’s tumultuous relationship just before Wooten kicked in her apartment door and waited for her with a loaded pistol.
Prosecutor Terri Skiles said Bryant “knew what was coming,” as Wooten had been texting her threats, including an apparent refence to Stephen King’s “The Shining” and a promise to make Bryant beg for her life. Wooten’s public defender, Carey Haughwout, argued the threats were Wooten’s way of saying “I can’t deal with not having you in my life.”
Information from: Sun Sentinel , http://www.sun-sentinel.com/
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


{include file="../application/index/view/public/index_tou.html" /}
还没有商城账号？ 注册
Copyright © 2003-2015 椿龄文化(chunlingwenhua). All Rights Reserved.


today
month
week
day
list
March 2018
Sun
Mon
Tue
Wed
Thu
Fri
Sat
25
26
27
28
1
2
3
All Day Event
4
5
6
7
8
9
10
Long Event
4p
Repeating Event
11
12
13
14
15
16
17
Conference
6:30a
Birthday Party
4p
Repeating Event
10:30a
Meeting
12p
Lunch
2:30p
Meeting
+3 more
5:30p
Happy Hour
8p
Dinner
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Click for Google
1
2
3
4
5
6
7


| Package | Description |
|---|---|
| com.versionone.apiclient | |
| com.versionone.apiclient.exceptions | |
| com.versionone.apiclient.interfaces |
| Modifier and Type | Method and Description |
|---|---|
Asset |
Services.createNew(IAssetType assetType,
Oid context)
Create new Asset
|
InputStream |
Services.getAttachment(Oid attachmentOid) |
Reader |
Services.getEmbeddedImage(Oid embeddedImageOid) |
String |
Services.getLocalization(IAttributeDefinition attribute) |
String |
Services.getLocalization(String key) |
String |
Localizer.resolve(String key)
Resolve the key to it's localized value
|
void |
Services.save(Asset[] assets)
Save an array of assets without comment
|
Oid |
Services.saveAttachment(String filePath,
Asset asset,
String attachmentName) |
Oid |
Services.saveEmbeddedImage(String filePath,
Asset asset) |
V1Connector.IsetProxyOrEndPointOrConnector |
V1Connector.IAuthenticationMethods.withAccessToken(String accessToken)
Optional method for setting the access token for authentication.
|
static V1Connector.ISetUserAgentMakeRequest |
V1Connector.withInstanceUrl(String instanceUrl) |
V1Connector.IsetProxyOrEndPointOrConnector |
V1Connector.IAuthenticationMethods.withOAuth2Token(String oauth2Token)
Optional method for setting the OAuth2 access token for authentication.
|
V1Connector.IBuild |
V1Connector.IProxy.withProxy(ProxyProvider proxyProvider)
Optional method for setting the proxy credentials.
|
V1Connector.IAuthenticationMethods |
V1Connector.ISetUserAgentMakeRequest.withUserAgentHeader(String name,
String version)
Required method for setting a custom user agent header for all HTTP requests made to the VersionOne API.
|
V1Connector.IsetProxyOrEndPointOrConnector |
V1Connector.IAuthenticationMethods.withUsernameAndPassword(String username,
String password)
Optional method for setting the username and password for authentication.
|
V1Connector.IsetProxyOrEndPointOrConnector |
V1Connector.IAuthenticationMethods.withWindowsIntegrated()
Optional method for setting the Windows Integrated Authentication credentials for authentication based on the
currently logged in user.
|
| Constructor and Description |
|---|
V1Connector(String instanceUrl) |
| Modifier and Type | Class and Description |
|---|---|
class |
APIException
Represents a generic API exception
|
class |
AttachmentLengthException
Exception of attachment length
|
class |
ConnectionException
Exception thrown for connection errors
|
class |
OidException
Exception thrown when the API encounters a problem related to Object Identifiers
|
class |
SecurityException
Exception thrown when the APIClient encounters a security exception (401)
|
| Modifier and Type | Method and Description |
|---|---|
Object |
IAttributeDefinition.coerce(Object value)
Attempt to convert the value into this type
|
Asset |
IServices.createNew(IAssetType assetType,
Oid context)
Creates a new asset.
|
InputStream |
IServices.getAttachment(Oid attachmentOid)
Returns the attachment data for the specified attachment Oid.
|
Reader |
IServices.getEmbeddedImage(Oid embeddedImageOid)
Returns the embedded image data for the specified attachment Oid.
|
String |
IServices.getLocalization(IAttributeDefinition attribute)
Returns a localization value based on an attribute definition.
|
String |
IServices.getLocalization(String key)
Returns a localization value based on key.
|
String |
ILocalizer.resolve(String key)
Resolve the key to it's localized value
|
void |
IServices.save(Asset[] assetList)
Saves multiple assets without a comment.
|
Oid |
IServices.saveAttachment(String filePath,
Asset asset,
String attachmentName)
Saves an attachment to the specified asset.
|
Oid |
IServices.saveEmbeddedImage(String filePath,
Asset asset)
Saves an embedded image to the specified asset.
|
Copyright © 2016 VersionOne, Inc.. All rights reserved.


Here is an Atom Feed for the blog if you want to subscribe.
My previous posts are here: $partial("templates/post-list.html")$


The website is hosted for free on Heroku. After 30 mins of inactivity, the server is sleeping, and takes a while to restart.
By default, names and year of birth/death are visible to everyone. Other informations are only visible to admins and profile owners. Roles: - Normal user: Can see simplified profile, suggest update - Logged user: Can see full profile owned / releated persons - Admin: Full rights


Home
Social Media
About
Copyright Information
Projects
Projects
There will be something here someday.


Sdec1
Provides a simple interface to SPHDEC1 (XDM 1.0) based algorithms.
More...
Detailed Description
Provides a simple interface to SPHDEC1 (XDM 1.0) based algorithms.
Release Support: G711, G726, G729 and ILBC. Due to defect in ILBC Decoder v 1.10.002, this release will not work with this version.
Typical usage:
#include <xdc/std.h>
#include <ti/sdo/ce/Engine.h>
#include <ti/sdo/ce/CERuntime.h>
#include <ti/sdo/dmai/Dmai.h>
#include <ti/sdo/dmai/Buffer.h>
#include <ti/sdo/dmai/Loader.h>
#include <ti/sdo/dmai/ce/Sdec1.h>
Sdec1_Handle hSd;
Loader_Handle hLoader;
Buffer_Handle hOutBuf, hInBuf;
Engine_Handle hEngine;
SPHDEC1_Params params = Sdec1_Params_DEFAULT;
SPHDEC1_DynamicParams dynParams = Sdec1_DynamicParams_DEFAULT;
Loader_Attrs lAttrs = Loader_Attrs_DEFAULT;
Buffer_Attrs bAttrs = Buffer_Attrs_DEFAULT;
CERuntime_init();
Dmai_init();
hEngine = Engine_open("myengine", NULL, NULL);
hSd = Sdec1_create(hEngine, "mydec", ¶ms, &dynParams);
hOutBuf = Buffer_create(Sdec1_getOutBufSize(hSd), &bAttrs);
lAttrs.readSize = Sdec1_getInBufSize(hSd);
lAttrs.readBufSize = lAttrs.readSize * 2;
hLoader = Loader_create("myfile", &lAttrs);
Loader_prime(hLoader, &hInBuf);
while (1) {
Sdec1_process(hSd, hInBuf, hOutBuf);
Loader_getFrame(hLoader, hInBuf);
if (Buffer_getUserPtr(hInBuf) == NULL) break;
}
Loader_delete(hLoader);
Buffer_delete(hOutBuf);
Sdec1_delete(hSd);
Engine_close(hEngine);
Typedef Documentation
Handle through which to reference a Speech Decode algorithm.
Function Documentation
| Sdec1_Handle Sdec1_create |
( |
Engine_Handle |
hEngine, |
|
|
Char * |
codecName, |
|
|
SPHDEC1_Params * |
params, |
|
|
SPHDEC1_DynamicParams * |
dynParams | |
|
) |
| | |
Creates a Speech Decode (XDM 1.0) algorithm instance.
- Parameters:
-
| [in] | hEngine | An opened engine containing the algorithm to create. |
| [in] | codecName | The name of the algorithm to open. Corresponds to the string name given in the .cfg file. |
| [in] | params | XDM parameters to use while creating the codec. |
| [in] | dynParams | XDM dynamic parameters to use while creating the codec. |
- Return values:
-
| Handle | for use in subsequent operations (see Sdec1_Handle). |
| NULL | for failure. |
Decodes a Speech buffer.
- Parameters:
-
| [in] | hSd | The Sdec1_Handle to use for decoding. |
| [in] | hInBuf | The Buffer_Handle for the buffer containing the encoded data. |
| [in] | hOutBuf | The Buffer_Handle for the buffer to fill with decoded data. |
- Return values:
-
| DMAI_EOK | for success. |
| Negative value | for failure, see Dmai.h. |
Deletes a Speech Decode algorithm instance.
- Parameters:
-
- Return values:
-
| DMAI_EOK | for success. |
| Negative value | for failure, see Dmai.h. |
Get the SPHDEC1 handle from the Sdec1 module instance.
- Parameters:
-
| [in] | hSd | The Sdec1_Handle for which to get the SPHDEC1 handle. |
- Return values:
-
| Handle | to the speech1 decode algorithm, see the XDM documentation for SPHDEC1. |
Get the input buffer size required by the codec.
- Parameters:
-
- Return values:
-
| Size | in bytes of the input buffer required. |
Get the output buffer size required by the codec.
- Parameters:
-
- Return values:
-
| Size | in bytes of the output buffer required. |
Variable Documentation
Default XDM parameters for a Speech Decode algorithm.
size = sizeof(SPHDEC1_Params),
compandingLaw = ISPEECH1_PCM_COMPAND_ALAW,
packingType = 0,
codecSelection = 0,
bitRate = 0,
reserved = 0,
**tablesPtr = NULL,
Default XDM dynamic parameters for a Speech Decode algorithm.
size = sizeof(SPHDEC1_DynamicParams),
postFilter = 0


 From that, they went on and created the most plot-driven, intricately pieced movie in the last 25 years. The result: the Usual Suspects, one hell of a movie that redefines the word plot twist. The story is convoluted, and is really confusing to read, although easy to follow on screen. Special investigator Kujan (Chazz Palminteri) grills "Verbal" Kint (Kevin Spacey), a crippled con-man who is the lone survivor of an LA boat explosion that claimed more than 20 victims. Kujan wants to confirm that his nemesis, the rogue cop Keaton (Gabriel Byrne), is actually dead. Kint relates the majority of the film in flashback, beginning with the fateful day when five shifty guys meet in a police-station lineup in New York City.  Together they plot to steal a small fortune in gems from "New York's Finest Taxi Service"--crooked cops who provide escort service for visiting drug kingpins. What follows is a shell-game of violence and betrayal, all hinging on the identity of a mysterious villain called Keyser Soze. The film is brilliantly compact: its the shortest 90 minutes you'll ever spend in a movie theater. The cast is exceptional. Palminteri shines, he is brutally honest, a true cop, one who is going after the whole story because its there. Byrne is terrific, his brooding character, his seriousness is needed to supplement the hysteria of Benicio Del Toro, who is a riot as Fenster.  Baldwin is also very good, he is careful, methodical, and cold, a chilling character with a nasty streak of hot-blooded sarcasm. Pollak is also terrific as usual, a very good character actor. However, this will be forever known as the film that launched Kevin Spacey. Spacey is simply breathtaking, he is a force on screen, giving a magnetic performance that jars the senses at the end of this twisting maze. Spacey's performance will be remembered for years, for it is the best of his career, it may be the best supporting actor performance in the last 50 years.  The film is a good one, a decent film until the last 10 minutes. What this film boils down to is the greatest ending in cinematic history, for me at least. The revelation of Keyser Soze, the closing gunfights, it is something wondrous. You have to see this movie about 10 times to believe what they do. Kudos to McQuarrie and Singer for giving the audience a delightful, fast-paced, furiously plot-driven movie with quirky characters, phenomenal acting, and some hilarious moments stuck in the middle. McQuarrie refuses to believe the audience is dumb. Without furnishing too many details, he concocts his story and lets it run, hoping the audience gets it at the end. We do. This might just be the finest cinematic puzzle ever created. Kudos also to Singer and John Ottman, who created the score. They both create what is a true film-noir setting, carefully setting up this intricate puzzle until the final, jarring ending. There are flaws: more questions raised than answers, lack of character development, and no strong female characters (save one). However, the plot, and that stunning ending, make up for all the flaws and more. If you haven't seen the movie, rent it. Watch it. Then rewind the tape, and watch it again. Trust me, you'll be amazed.
FINAL: **** out of ****
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


|
It is no more than life itself |
||
|---|---|---|
|
It is no more than life itself And as we climbed up and looked back on the past we The passage of water that would drown our memories, the smoke that threatened to cloud our sense of certainty, and the gust of panic that took away our dreams Whether a dream –or our path – we will never be able to say… |
|---|


This search page requires JavaScript. Please enable it in your browser, or use the index page instead.


Special Maze Armor, Invincibility Chestplate
Imagine that there is an obstacle that is so overpowering (such as a room full of differing mobs),
that the only way a player can get through the room is to be invulnerable to damage
That is the purpose of this special armor item.
When you are wearing this item, you cannot be damaged by fire, water, arrows, players, or mobs
It is very over powered which is why it must be removed from inventory if worn to complete a challenge.


20
hello cls2 @ ! # "helo" 'world "ok
I am the space station These seven cameras
have a zoom range
of any 12x or more,
and some of the wide-angle view
of good. They also have a
lot of image stabilization (either optical or mechanical), which is
important for people who are with a powerful zoom lens. Some other
important features thatThese cameras contain electronic viewfinder,
full control while shooting. In general, these cameras are all seem
very similar.
Sign my guestbook


Home
About
Portfolio
Contact
Khavin Lindo
Web/Software Developer
About Me
Contact
About Me
I am an IT professional currently working with web development
Portfolio
Resume
Portfolio
Recent Projects
Crystal Collector
Libre Mitio
Train Scheduler
GifTastic
LIRI
Bamazon
FriendFinder
Eat La Burger!!!
EZ-Genda
NEWSky-SCRAPER
Contact


{% extends "base.html" %} {% block title %}Page Not Found{% endblock title %} {% block content %}
Sorry, but the requested page could not be found. Return to the homepage.


Vista Photography
What I do!
Hello! My name is Caleb Hall and I’m a freelance photographer and videographer based in the scorching city of Phoenix, Arizona. I have been professionally capturing images and videos for my client’s special occasions for over 20 years. I specialize in portraiture and event photography/videography (includes weddings). Please contact me if you have any questions!
Testimonials
Caleb was wonderful to work with and the pictures came out absolutely perfect! If anyone I know needs a photographer I will definitely be recommending him. Thank you so much for capturing lifelong memories on my special day!- Maddie Simon
Caleb was communicative, professional, and the photos he captured were amazing. Will be contacting him if I ever need any photo work again. - Jorge Simpson
I needed a videographer for my daughter’s quinceanera and a friend of mine recommended Caleb. I’m so glad they did, the video was exactly what I was hoping for. Thank you, Caleb! - Mariana Freeks
I needed graduation pictures for my daughter and I heard of Jessica through some friends. She answered all of my questions and was so patient! The pictures she took were what I was looking for. Will be recommending her to family and friends. - Melvin Garcia


---
layout: post
title: OSCON Schedule
tags:
- Community
status: publish
type: post
published: true
meta:
dsq_thread_id: '17413716'
---
I can't decide between several sessions. I wish I had that thingy from Harry Potter that Hermoine uses to attend classes that overlap. Regardless, here is the tentative plan. If you have any suggestions let me know:
OSCON Google Calendar


Neural Machine Translation Demo
Running NeMo commit id: v1.0.2
Select translation direction:
English to German
German to English
Spanish to English
English to Spanish
English to Russian
Russian to English
English to French
French to English
English to Chinese
Chinese to English
Type something here, chose language pair and click "Translate" button.
Translate !


@main("ProConnect"){
Welcome to Proconnect, a professional networking service - a networking service which helps you take your professional network to the next level. Our goal is to help you connect with other proffesionals and share skill sets and accomplisments. Hiring managers and recruiters have the ability to search a compiled database of candidates that meet their criteria.
Our mission is to help people create a personal profile and connect with other professionals, to join discussions, share experiences, and make announcements.
Download the ProConnect app on Google Play and take part in discussions and share your experiences on the go.
For more information about our company, please visit our Company Page or contact us at supportproConnectors.com.


Purple Martians
Technical Code Descriptions
Input
Overview
Keyboard input
Keys held array
Hack to make PRINTSCREEN work
Mouse input
Joystick input
Key bindings vs controls
Overview
I really missed the way that Allegro 4 handled input, so I recreated parts of it.
Allegro 4 had global variables that were updated asynchronously:
extern volatile char key[KEY_MAX];
extern volatile int mouse_x;
extern volatile int mouse_y;
extern volatile int mouse_z;
extern volatile int mouse_b;
extern JOYSTICK_INFO joy[n];
I recreated most of these, or similar equivalents, and update them when I process the event queue. (see Processing events)
Keyboard input
In Allegro 4, there is an array of key flags that are updated asynchronously:
extern volatile char key[KEY_MAX];
You could do stuff like:
if (key[KEY_I])
{
while (key[KEY_I]); // wait for key to be released
// do something
}
I wanted to do something similar in Allegro 5, I made my own key array and set it with keyboard events like this:
bool mInput.key[ALLEGRO_KEY_MAX][4];
void mwInput::proc_input_events(ALLEGRO_EVENT ev)
{
if (ev.type == ALLEGRO_EVENT_KEY_DOWN) key[ev.keyboard.keycode][0] = true;
if (ev.type == ALLEGRO_EVENT_KEY_UP) key[ev.keyboard.keycode][0] = false;
...
Keys held array
For each key (and mouse button), I detect not only if the key is pressed, but also if it has been just pressed, or just released.
// mInput.key[][0] current value
// mInput.key[][1] previous value
// mInput.key[][2] just pressed
// mInput.key[][3] just released
void mwInput::proc_keys_held(void)
{
for (int k = ALLEGRO_KEY_A; k < ALLEGRO_KEY_MAX; k++)
{
if ((key[k][0] == true) && (key[k][1] == false)) key[k][2] = true; // just pressed
else key[k][2] = false;
if ((key[k][0] == false) && (key[k][1] == true)) key[k][3] = true; // just released
else key[k][3] = false;
key[k][1] = key[k][0]; // previous for next time
}
for (int m=1; m<5; m++)
{
if ((mouse_b[m][0] == true) && (mouse_b[m][1] == false)) mouse_b[m][2] = true; // just pressed
else mouse_b[m][2] = false;
if ((mouse_b[m][0] == false) && (mouse_b[m][1] == true)) mouse_b[m][3] = true; // just released
else mouse_b[m][3] = false;
mouse_b[m][1] = mouse_b[m][0]; // previous for next time
}
}
Now in Allegro 5, I can do something similar to what I used to do in Allegro 4:
mEvent.proc();
if (mInput.key[ALLEGRO_KEY_I][0])
{
while (mInput.key[ALLEGRO_KEY_I][0]) mEvent.proc(); // wait for key to be released
// do something
}
And if I use the key held functionality, it can make it even simpler:
mEvent.proc();
if (mInput.key[ALLEGRO_KEY_I][3]) // key has just been released
{
// do something
}
Hack to make PRINTSCREEN work
There is a known bug with the PRINTSCREEN key in windows.
It does not generate ALLEGRO_EVENT_KEY_DOWN events, only ALLEGRO_EVENT_KEY_UP events.
I made the following work around so I could use PRINTSCREEN for my screenshot function.
At the start of my event processing I clear the key like this:
mInput.key[ALLEGRO_KEY_PRINTSCREEN][0] = 0; // hack to make PRINTSCREEN key work properly
Then I add an exception to my key up section like this:
if (ev.type == ALLEGRO_EVENT_KEY_UP)
{
int k = ev.keyboard.keycode;
mInput.key[k] = false;
if (k == ALLEGRO_KEY_PRINTSCREEN) mInput.key[k] = true; // hack to make PRINTSCREEN work
}
Mouse input
For mouse input, I do something similar to what I do for keyboard.
Allegro 4 has external variables for mouse position and button state that are asynchronously updated.
In Allegro 5, I re-implement them and set them with mouse events:
int mInput.mouse_x
int mInput.mouse_y
int mInput.mouse_z
int mInput.mouse_dx
int mInput.mouse_dy
int mInput.mouse_dz
bool mInput.mouse_b[5][4]
void mwInput::proc_input_events(ALLEGRO_EVENT ev)
{
if (ev.type == ALLEGRO_EVENT_MOUSE_WARPED)
{
mouse_x = ev.mouse.x / mDisplay.display_transform_double;
mouse_y = ev.mouse.y / mDisplay.display_transform_double;
}
if (ev.type == ALLEGRO_EVENT_MOUSE_AXES)
{
mouse_x = ev.mouse.x / mDisplay.display_transform_double;
mouse_y = ev.mouse.y / mDisplay.display_transform_double;
mouse_z = ev.mouse.z / mDisplay.display_transform_double;
mouse_dx = ev.mouse.dx;
mouse_dy = ev.mouse.dy;
mouse_dz = ev.mouse.dz;
}
if (ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN)
{
if (ev.mouse.button == 1) mouse_b[1][0] = true;
if (ev.mouse.button == 2) mouse_b[2][0] = true;
if (ev.mouse.button == 3) mouse_b[3][0] = true;
if (ev.mouse.button == 4) mouse_b[4][0] = true;
}
if (ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_UP)
{
if (ev.mouse.button == 1) mouse_b[1][0] = false;
if (ev.mouse.button == 2) mouse_b[2][0] = false;
if (ev.mouse.button == 3) mouse_b[3][0] = false;
if (ev.mouse.button == 4) mouse_b[4][0] = false;
}
}
Note that the mouse positions are divided by mDisplay.display_transform_double.
This is to account for an orthographic screen tranformation. (see Display Transform Double)
Joystick input
I do something really weird for the joystick. I've done it for many years.

I do the exact same thing with joystick inputs.
When a joystick control is pressed, its index in the key array is set TRUE, and when released, FALSE.
This method makes it easier to set up the controller bindings for the game.
For example, the game control [FIRE] could be mapped to a keyboard key like "C" or a joystick control like "joy-b5", and the code to detect that would be the same. I just check if that key array index is set.
When I display or change the key bindings I use the char array above and both key and joystick bindings show a text description.
Here is how I use joystick events to set joystick controls in the key array:
if (ev.type == ALLEGRO_EVENT_JOYSTICK_AXIS)
{
int jy = getJoystickNum(ev.joystick.id);
int jo = 0; // offset
if (jy == 0) jo = 0;
if (jy == 1) jo = 20;
int ax = ev.joystick.axis;
float pos = ev.joystick.pos;
if (ax == 0) // x axis
{
key[130+jo] = false;
key[131+jo] = false;
if (pos > 0) key[131+jo] = true;
if (pos < 0) key[130+jo] = true;
}
if (ax == 1) // y axis
{
key[128+jo] = false;
key[129+jo] = false;
if (pos > 0) key[129+jo] = true;
if (pos < 0) key[128+jo] = true;
}
}
if (ev.type == ALLEGRO_EVENT_JOYSTICK_BUTTON_DOWN)
{
int jy = getJoystickNum(ev.joystick.id);
int sc = get_scan_code_from_joystick(jy, 1, ev.joystick.button);
key[sc] = true;
}
if (ev.type == ALLEGRO_EVENT_JOYSTICK_BUTTON_UP)
{
int jy = getJoystickNum(ev.joystick.id);
int sc = get_scan_code_from_joystick(jy, 1, ev.joystick.button);
key[sc] = false;
}
int getJoystickNum(ALLEGRO_JOYSTICK* joy) // Thanks Edgar Reynaldo!
{
for (int i=0; i < al_get_num_joysticks(); ++i)
{
if (joy == al_get_joystick(i)) {return i;}
}
return -1;
}
int get_scan_code_from_joystick(int joy, int button, int num)
{
int ret = 0;
int base = 128;
if (joy == 0) base = 128;
if (joy == 1) base = 148;
if (button) ret = num + 4;
return base + ret;
}
Key bindings vs controls
There is a clear distinction between the key bindings and the controls.
In the player struct, for each player we have the key bindings:
mPlayer.loc[p].up_key
mPlayer.loc[p].down_key
mPlayer.loc[p].left_key
mPlayer.loc[p].right_key
mPlayer.loc[p].jump_key
mPlayer.loc[p].fire_key
mPlayer.loc[p].menu_key
And then we have variables to indicate if a particular control is active for that frame:
mPlayer.syn[p].up
mPlayer.syn[p].down
mPlayer.syn[p].left
mPlayer.syn[p].right
mPlayer.syn[p].jump
mPlayer.syn[p].fire
mPlayer.syn[p].menu
The game used to have a very simple method of checking if a key was pressed and then setting the corresponding control.
That has been superceded by the game moves array control method.
For an in depth description of how controls are set, see: Game Moves Array


| DOSE: |
1 hit |
oral |
LSD |
(blotter / tab) |
Once on an LSD trip I invented non-linear text that interconnected at multiple points. This was created on loose-leaf paper but it functioned exactly like standard hypertext. Keep in mind that this took place in 1992, the same year the World-Wide Web was released by CERN and HTML (Hyper Text Mark-up Language) was first put in place around the same time. But like most people, I was completely unaware that the internet (and HTML) existed.
I was having a surge of revelations about metaphysical/psychological/natural/creative matters and was writing furiously. I soon realized that my thoughts could not be expressed from beginning to end. As I extrapolated on any given subject, I found myself underlining words and phrases (that I intended to elaborate upon on a different page) and placing symbols after them. This basically worked like footnotes, but I was using non-sequential symbols like *, @, #, $, %, etc. These symbols would prompt the reader (if he or she wished to read further about the underlined word or phrase) to go to the page with the corresponding symbol at the top.
So I would write a page on body energy (for example) and would make a brief mention of the third eye. The Key Words “third eye” would be underlined and there was a symbol like * after it. You could continue to read bout body energy or find the page headed with * and read about the third eye. This page would of course contain many underlined words and phrases. Each page was connected to some or all of the other pages on many points. I was a little frustrated that I could not figure out any linear way to arrange these pages from beginning to end, or any order whatsoever. After sometime I put aside the pen and paper and indulged in other activities (music, art books, etc.) and continued to enjoy a mild LSD trip.
The next day I again tried to put the pages in some sort of order. After some time I realized that this was impossible. I started hanging the pages from my ceiling using thread and tape. I placed them a few feet apart from each other and began to connect each underlined word or phrase with its respective page using lengths of thread and tape. Soon this became impossible to complete. My room was so full of criss-crossed threads that I could not crawl over, under or though them. It was like shoe-string Indra’s Net, a room-wide web of tape and thread. This project was abandoned for practical reasons and the pages given to various friends who were impressed (even if somewhat confused).
It was not until this year that I suddenly realized that what I had made functioned as low-tech hypertext!
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


class: center, middle, inverse, title-slide .title[ # Multivariate data plots ] .subtitle[ ## SISBID 2023
https://github.com/dicook/SISBID
] .author[ ### Di Cook (
<EMAIL_ADDRESS>)
Heike Hofmann (
<EMAIL_ADDRESS>)
Susan Vanderplas (
<EMAIL_ADDRESS>) ] .date[ ### 07/26-28/2023 ] --- class: inverse middle # Your turn - What is multivariate data? - What makes multivariate analysis different from univariate analysis?
−
+
01
:
00
??? - data is multivariate, if we have more information than a single aspect for each entity/person/experimental unit. - multivariate analysis takes relationships between these different aspects into account. --- # Main types of plots - __pairwise plots__: explore association between pairs of variables - __parallel coordinate plots__: use parallel axes to lay out many variables on a page - __heatmaps__: represent data value using colour, present as a coloured table - __tours__: sequence of projections of high-dimensional data, good for examining shape and distribution between many variables --- # Scatterplot matrix: GGally .pull-left[The basic plot plot for multivariate data is a scatterplot matrix. There are two functions available in the GGally package: `ggpairs`. ```r # Make a simple scatterplot matrix of the new penguins data penguins <- penguins %>% filter(!is.na(bill_length_mm)) ggpairs(penguins, columns=c(3:6)) ``` *What do we learn?* - clustering - linear dependence ] .pull-right[  ] --- .pull-left[ **Add some colour for groups** ```r # Re-make mapping colour to species (class) ggpairs(penguins, columns=c(3:6), ggplot2::aes(colour=species)) ```

 *What do we learn?* - clustering is due to the class variable ] .pull-right[  ] --- .pull-left[ Only show correlation.
This is dangerous!
Only appropriate if correlation is a good summary of the association. ```r # Look at one species only adelie <- penguins %>% filter(species == "Adelie") %>% select(bill_length_mm:body_mass_g) ggcorr(adelie) ``` ] .pull-right[  ] --- .pull-left[ Only show correlation, using a corrgram. Again, this is dangerous, and only useful to get a broad overview of association that is suitably summarised by correlation. ```r # install.packages("corrgram") library(corrgram) corrgram(adelie, lower.panel=corrgram::panel.ellipse) ``` The `corrgram` package has numerous scatterplot matrix capabilities. ] .pull-right[  ] --- # Generalized pairs plot .pull-left[ The pairs plot can also incorporate non-numerical variables, and different types of two variable plots. ```r # Matrix plot when variables are not numeric data(australia_PISA2012) australia_PISA2012 <- australia_PISA2012 %>% mutate(desk = factor(desk), room = factor(room), study = factor(study), computer = factor(computer), software = factor(software), internet = factor(internet), literature = factor(literature), poetry= factor(poetry), art = factor(art), textbook = factor(textbook), dictionary = factor(dictionary), dishwasher = factor(dishwasher)) australia_PISA2012 %>% filter(!is.na(dishwasher)) %>% ggpairs(columns=c(3, 15, 16, 21, 26)) ``` ] .pull-right[  ] --- ```r # Modify the defaults, set the transparency of points since there is a lot of data australia_PISA2012 %>% filter(!is.na(dishwasher)) %>% ggpairs(columns=c(3, 15, 16, 21, 26), lower = list(continuous = wrap("points", alpha=0.05))) ```  --- .pull-left[ ```r # Make a special style of plot to put in the matrix my_fn <- function(data, mapping, method="loess", ...){ p <- ggplot(data = data, mapping = mapping) + geom_point(alpha=0.2, size=1) + geom_smooth(method="lm", ...) p } ``` ```r australia_PISA2012 %>% filter(!is.na(dishwasher)) %>% ggpairs(columns=c(3, 15, 16, 21, 26), lower = list(continuous = my_fn)) ``` *What do we learn?* - moderate increase in all scores as more time is spent on homework - test scores all have a very regular bivariate normal shape - is this simulated data? yes. - having a dishwasher in the household corresponds to small increase in homework time - very little but slight increase in scores with a dishwasher in household ] .pull-right[  ] --- class: inverse middle # Your turn Re-make the plot with - side-by-side boxplots on the lower triangle, for the combo variables, - and the density plots in the upper triangle.
−
+
08
:
00
--- # Regression setting .pull-left[ An alternative pairs plot that better matches this sort of data, where there is a response variable and explanatory variables. For this data, plot house price against all other variables. ```r housing <- read_csv(here::here("data/housing.csv")) %>% mutate(date = dmy(date)) %>% mutate(year = year(date)) %>% filter(year == 2016) %>% filter(!is.na(bedroom2), !is.na(price)) %>% filter(bedroom2 < 7, bathroom < 5) %>% mutate(bedroom2 = factor(bedroom2), bathroom = factor(bathroom)) ``` ] .pull-right[ ```r ggduo(housing[, c(4,3,8,10,11)], columnsX = 2:5, columnsY = 1, aes(colour=type, fill=type), types = list(continuous = wrap("smooth", alpha = 0.10))) ```  ] --- # Big biological data The Bioconductor package `bigPint` has tools for working with larger amounts of data, as seen in RNA-Seq experiments. More info at https://lindsayrutter.github.io/bigPint/ .pull-left[ Data on soybean experiment, with two treatments, and three replicates. Here's the scatterplot of the first replicate. ```r # if (!require("BiocManager", quietly = TRUE)) # install.packages("BiocManager") # BiocManager::install("bigPint") library(bigPint) data(soybean_ir_sub) soybean_ir_sub[,-1] <- log(soybean_ir_sub[,-1]+1) ggplot(soybean_ir_sub, aes(x=N.1, y=P.1)) + geom_point() + theme(aspect.ratio=1) ``` ] .pull-right[  ] --- The `litre` plot combines replicates into same plot, to look at the treatments. To handle the data size it uses a hexbin display. The data values for an individual gene can be overlaid on the plot. .pull-left[ ```r geneList = soybean_ir_sub_metrics[["N_P"]][1:5,]$ID ret <- plotLitre(data = soybean_ir_sub, geneList = geneList, pointColor = "deeppink") names(ret) [1] "N_P_Glyma.19G168700.Wm82.a2.v1" "N_P_Glyma.13G293500.Wm82.a2.v1" "N_P_Glyma.05G188700.Wm82.a2.v1" [4] "N_P_Glyma.13G173100.Wm82.a2.v1" "N_P_Glyma.11G141800.Wm82.a2.v1" ret[["N_P_Glyma.19G168700.Wm82.a2.v1"]] ``` ] .pull-right[  ] --- .pull-left[ This can be extended into a scatterplot matrix ```r ret <- plotSM(soybean_cn_sub, soybean_cn_sub_metrics, option = "hexagon", xbins = 5, pointSize = 0.1, saveFile = FALSE) ret[[2]] ``` ] .pull-right[  ] --- .pull-left[ When working with RNA-Seq data, it is useful to compare samples using a side-by-side boxplot. Overlaying the profiles of different genes can help to learn about the patterns across samples, particularly to examine the significant genes after testing. (This can be called a parallel coordinate plot.) ```r ret <- plotPCP(data = soybean_ir_sub, geneList = geneList, lineSize = 0.3, saveFile = FALSE) ret[[1]] ``` ] .pull-right[  ] --- # Resources - [GGobi web site](http://www.ggobi.org), [ggobi book](http://www.ggobi.org/book) - Emerson et al (2013) The Generalized Pairs Plot, Journal of Computational and Graphical Statistics, 22:1, 79-91 - [Natalia da Silva](http://natydasilva.com/) [PPForest](https://cran.r-project.org/web/packages/PPforest/index.html) and [shiny app](https://natydasilva.shinyapps.io/shinyV03/). - Eunkyung Lee [PPtreeViz](https://www.jstatsoft.org/article/view/v083i08) - Wickham, Cook, Hofmann (2015) [Visualising Statistical Models: Removing the blindfold](http://dicook.org/publication/blindfold_2015/) - Cook and Swayne (2007) [Interactive and Dynamic Graphics for Data Analysis](http://ggobi.org/book/) - Wickham et al (2011) [tourr: An R Package for Exploring Multivariate Data with Projections](https://www.jstatsoft.org/article/view/v040i02/v40i02.pdf) and the R package [tourr](https://cran.r-project.org/web/packages/tourr/index.html) - Schloerke et al (2016) [Escape from Boxland](https://journal.r-project.org/archive/2016/RJ-2016-044/index.html), [the web site zoo](http://schloerke.com/geozoo/) and the R package [geozoo](https://cran.r-project.org/web/packages/geozoo/index.html) --- # Share and share alike
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.


Online syntax highlighting for the masses! Online syntax highlighting for more than 100 languages, including C#, Java, PHP, Basic, Perl, Python, Pascal, SQL, JavaScript and others including rare and obscure ones!.
Geting 4x Speedup With .NET Core 3.0 SIMD Intrinsics A few weeks ago I and Den Raskovalov had a fancy conversation on C# performance, which turned into a tiny but fun coding exercise. The…
Huawei announces HarmonyOS, an open-source platform for every device Huawei has announced a brand-new operating system, dubbed HarmonyOS. So what is it actually designed to do?
!(Spotting the promising cryptography-related start ups) In my free time in the last years, I have helped (for free) some VCs and friends to figure out what are good opportunities in the cryptography field. I'm at an excellent position to see what is serious cryptography, and even what a promising start up look...
Have I Been Pwned Alerts You to Data Breaches Even When the Websites Won’t In our interview with Troy Hunt, founder of Have I Been Pwned find out what to do when your personal information is compromised by a data
Roundup #51: .NET Core 3.0 launches at .NET Conf, .NET Standard adoption, Nullable Reference Types, Cake on Linux, Logging in ASPNET Core - CodeOpinion Here are the things that caught my eye recently in .NET. I’d love to hear what you found most interesting this week. Let me know in the comments or on Twitter. .NET Core 3.0 launches at .NET Conf .NET Conf is a FREE, 3 day virtual developer event co-org...
Cleanup ProjectN ifdefs by jkotas · Pull Request #7675 · dotnet/corert jkotas merged commit e9ce698 into dotnet:master
Walmart taking down violent video game demos, displays Signs, displays containing "violent images or aggressive behavior" removed in wake of shootings; retailer still sells guns
Add ReadAllAsync extension method to common by JamesNK · Pull Request #438 · grpc/grpc-dotnet Adds ReadAllAsync to Common package. If we like this then I'll add additional unit tests.
Open Sourcing more WPF assemblies by stevenbrix · Pull Request #1576 · dotnet/wpf This PR open sources the following assemblies: PresentationUI WindowsFormsIntegration System.Printing System.Windows.Presentation System.Windows.Controls.Ribbon Themes PresentationFramework.Aero ...


List of Concepts and Technologies Completed
Bullets
Technology
Concepts
Sub Category
*
Java
ORM
Hibernate
*
Java
JPA
EclipseLink
*
Python
Web Server
Tornado


USD/CHF Technical Analysis: 200-day SMA, 7-week-old trendline cap rise to 8-day high
by Anil Panchal- Following its latest recovery, USD/CHF rises to the highest since the previous Tuesday.
- 200-day SMA and multi-week-old resistance line hold the key to pair’s run-up towards 1.0000 mark.
- 0.9870 can entertain short-term sellers.
Based on its U-turn from 0.9870, the USD/CHF pair current takes the bids to the highest in eight-day while trading around 0.9940 during early Friday.
However, 200-day Simple Moving Average (SMA) and a downward sloping trend line since October-starts, around 0.9950 and 0.9965 respectively, stand tall to challenge buyers.
It’s worth mentioning that the pair’s run-up beyond 0.9965 enables it to claim 1.0000 round-figure whereas the previous month high close to 1.0030 could challenge bulls then after.
Should prices take a U-turn from the present levels, 0.9870 can act as nearby key support ahead of October month low near 0.9835.
Additionally, the pair’s extended downpour beneath 0.9835 emphasizes on 0.9800/0.9795 area including September bottom and 61.8% Fibonacci retracement of August-October upside.
USD/CHF daily chart
Trend: Pullback expected
additional important levels
| Overview | |
|---|---|
| Today last price | 0.9936 |
| Today Daily Change | 3 pips |
| Today Daily Change % | 0.03% |
| Today daily open | 0.9933 |
| Trends | |
|---|---|
| Daily SMA20 | 0.9914 |
| Daily SMA50 | 0.9923 |
| Daily SMA100 | 0.9883 |
| Daily SMA200 | 0.9949 |
| Levels | |
|---|---|
| Previous Daily High | 0.9936 |
| Previous Daily Low | 0.989 |
| Previous Weekly High | 0.9978 |
| Previous Weekly Low | 0.9869 |
| Previous Monthly High | 1.0028 |
| Previous Monthly Low | 0.9837 |
| Daily Fibonacci 38.2% | 0.9918 |
| Daily Fibonacci 61.8% | 0.9907 |
| Daily Pivot Point S1 | 0.9903 |
| Daily Pivot Point S2 | 0.9874 |
| Daily Pivot Point S3 | 0.9857 |
| Daily Pivot Point R1 | 0.9949 |
| Daily Pivot Point R2 | 0.9965 |
| Daily Pivot Point R3 | 0.9995 |


This plugin takes the data from an HTML table and converts renders it in a ZingChart. It allows the user to submit JSON data along with the table when rendering, or to pull data from HTML5 custom data attributes.
note: the JS code snippets below are assumed to be within a jQuery$(document).ready()
block
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
)<script src="zingchart/html5_scripts/zingchart-html5-min.js"></script>
)<script src="zingchart.jquery.js"></script>
)<script src="zingify.jquery.js"></script>
)Converts a (well-formed) HTML table into a ZingChart rendering. For an example of the most basic usage:
A table in the HTML that looks like this:
| month | apples | oranges |
|---|---|---|
| Jan | 42 | 48 |
| Feb | 37 | 52 |
| Mar | 48 | 59 |
| April | 36 | 61 |
| May | 35 | 38 |
When zingified as follows:
$('table#myTable').zingify();
Will render this chart:
| month | vacuum cleaners | senators |
|---|---|---|
| Jan | 43 | 32 |
| Feb | 21 | 33 |
| Mar | 12 | 42 |
| April | 19 | 55 |
| May | 34 | 38 |
| June | 40 | 32 |
| July | 42 | 35 |
| Aug | 42 | 37 |
| Sep | 38 | 48 |
| Oct | 38 | 55 |
| Nov | 32 | 59 |
| Dec | 38 | 55 |


Controls
| Key |
Action |
| Scroll |
Zoom |
| Left Click |
Place Point |
| Right Click |
Pan |
| R, L, U, M, C |
Change Color |
| Ctrl+Z |
Undo |
| P |
Toggle background image pixelation |
| O |
Toggle export preview |
| |
Increment Opacity |
| , |
Toggle all layer visibility |
| [ |
Toggle control point visibility |
| 0 |
Reset pan and zoom levels |
| Alt + Click |
Delete Layer |
How to use
This is how I personally use this tool the quickest. First, I label all the movables and lane markings.
Next, I label the road, and move it to the bottom with the layer palette. Then I add a box of undrivable
over the entire image and move it to the bottom. Finally, I add the car section over the hood
img-labeler version: {{version}}


{% extends 'base.html' %} {% load i18n %} {% block title %}{% trans "Legal Disclosure"%}{% endblock %} {% block content %}
Information in accordance with Section 5 TMG
{% blocktrans %} The contents of our pages have been created with the utmost care. However, we cannot guarantee the contents' accuracy, completeness or topicality. According to statutory provisions, we are furthermore responsible for our own content on these web pages. In this matter, please note that we are not obliged to monitor the transmitted or saved information of third parties, or investigate circumstances pointing to illegal activity. Our obligations to remove or block the use of information under generally applicable laws remain unaffected by this as per §§ 8 to 10 of the Telemedia Act (TMG). {% endblocktrans %}
{% blocktrans %} Responsibility for the content of external links (to web pages of third parties) lies solely with the operators of the linked pages. No violations were evident to us at the time of linking. Should any legal infringement become known to us, we will remove the respective link immediately. {% endblocktrans %}
{% blocktrans %} Our web pages and their contents are subject to German copyright law. Unless expressly permitted by law, every form of utilizing, reproducing or processing works subject to copyright protection on our web pages requires the prior consent of the respective owner of the rights. Individual reproductions of a work are only allowed for private use. The materials from these pages are copyrighted and any unauthorized use may violate copyright laws. {% endblocktrans %}
{% endblock %}


Jurgen Klopp happy with England’s handling of Joe Gomez-Raheem Sterling bust up
by FSA EditorJoe Gomez is “better than good” says Jurgen Klopp, who is happy with how Gareth Southgate handled the defender’s fight with Raheem Sterling.
Jurgen Klopp has no problem with how England manager Gareth Southgate chose to handle the incident between Joe Gomez and Raheem Sterling.
Gomez and ex-Liverpool star Sterling were involved in a scuffle at St George’s Park on November 11, the day after the pair clashed in the Reds’ 3-1 win over Manchester City.
Southgate dropped Sterling for England’s 7-0 win over Montenegro, a match in which Joe Gomez came on and was booed by certain sections of the crowd.
Sterling returned in the 4-0 victory over Kosovo as England wrapped up their Euro 2020 qualifying campaign, though Gomez – who has insisted the matter has been fully put to bed – missed out with a knee injury.
Klopp expects Gomez to be able to play against Crystal Palace on Saturday if required, and the Liverpool boss is satisfied with how Southgate dealt with the situation.
“Gomez is better than good, everything is fine,” Klopp told a news conference on Friday.
“If people are not sensible with it, it gets made bigger than it is and we speak about it for five weeks. The people involved are fine.
“Things like this happen in a football environment. It’s a big challenge to ask the boys to give everything against each other and then the next day ask them to play together.
“There is nothing more to say about it. Gareth and the English FA dealt with it like I think it was right, I cannot judge because I was not in the situation. Joe is absolutely okay, nothing else to say about it really.”
Liverpool’s triumph over City at Anfield sent the Reds nine points clear of the defending champions with 12 games played.


{{ partial "header.html" . }} {{ partial "navigation.html" . }}
The platform behind 75,000 fast-moving teams.
"Covanta expects to make $3.2MM in savings."
"The user friendliness of Budibase is outstanding!"
"Those same apps are now here in less than an hour."
The Bulgarian Gov rehomes 100,000 refugees using Budibase.