My name is Caitlyn and I'm learning to program at Dev Bootcamp to become a software developer. I'm currently in Phase 1 of the program and will graduate in late June.
The path that led me here is a long tale fit for bard. Perhaps the day will come when I sit down and type it out. But until then, all you need to know is I'm pursuing a challenge, a lifestyle, and accomplishments worthy of pride.
Check out my Coderbits profile to see my tech skills breakdown, tutorials and courses I've completed, badges I've earned, and everything else I've done so far.
- Caitlyn


Find Pad Thai In No Time!
Finding a delicious and healthy meal is a simple tap away. Use our intuitive mobile app to help you find the best place to eat by location, rating, cuisine type, and more.
Tired of the same old lunch spots? Need some variety in your life but don't know where to look? Try our Foodie Passport app where it will unlock a world of new culinary possibilities for you!
Explore thousands of local eateries around you using our app. You can search by location, neighborhood, rating, types of cuisine, and more!
Finding a delicious and healthy meal is a simple tap away. Use our intuitive mobile app to help you find the best place to eat by location, rating, cuisine type, and more.
Ordering food using this app was super easy! The food arrived in less than 30 minutes.
I hardly cook because I don't have time so finding nearby healthy places to eat was a breeze with this app.
I'm discovering so many great places to eat around my neighborhood that I never would have found without using this app.


Release clause tempts Newcastle United to move for Ghanaian defender
Release clause of Real Valladolid defender Mohammed Salisu has given Premier League side Newcastle United the urge to pursuit for the youngster's signature according to reports.
The 20-year-old defender has been impressing in the heart of Real Valladolid’s defence in the La Liga this season.
According to Spanish outlet pucelafichajes.com, Salisu's form has attracted Newcastle United along with Premier League rivals Everton, Sevilla and Schalke 04.
Per reports in Spain, Newcastle are showing interest in Real Valladolid star Mohammed Salisu after discovering a €12m (£10m) release clause in his current contract.
Salisu has been one of the breakthrough talents in La Liga this season, helping his side up to 13th in the Spanish top flight making thirteen appearances and netting one goal.


Newtelco Vacation
Home
Vacations
New Request
My Vacations
Administration
Logout
My Vacations
Download .xlsx
Remaining Days
All Company vs My Vacations


Roland Fantom-8 review
The long-awaited return of Roland's high-spec synth workstation
£3,519 | $4,000
by MusicRadar
(Image: © Future)
Our Verdict
A versatile powerhouse with bags of connectivity. We’re looking forward to seeing how the Fantom ‘platform’ expands in the future.
Pros
- • Well-built with a clear, snappy touchscreen
- • Powerful step LFOs, multimode analogue filter/drive and great sequencing, sampling and effects
- • Streams multiple audio channels over USB, CV/gate outs
Cons
- • Expensive
- • No dedicated tonewheel organ/EP engines
- • Not enough ‘bread and butter’ scenes. No full ‘linear’ audio track recording or user multisampling (currently). Piano-roll editing is quite basic (currently)
- • No rack version; bulky at 27kg
What is it?
The latest version of Roland’s Fantom synth workstation has a brand-new, more direct interface, new sound engines and lots of connectivity/integration to bring things up-to-date. We’re looking at the 88-note Fantom-8 here, but you can also buy the Fantom-7 and Fantom-6, which have 76 and 61 keys respectively.
The new Fantom ‘platform’ uses Roland’s latest Zen-Core tech (basically a powerful new unified engine that contains PCM, V-Piano modelling and VA waves, in this instance), with processing headroom for future engine upgrades and additions.
The way the Fantom operates now revolves around ‘Scenes’. A Scene is much like the old Live Set (256 are available, more would be nice!) and is basically a container or snapshot of everything on the front panel.
One Scene can be made up of up to 16 Zones (each Zone contains controller and MIDI info, plus key ranges for controlling the native engines and external MIDI gear). Each Zone then contains a Tone (a Tone can contain up to four partials/oscillators). Each partial (oscillator) within a Tone can contain a completely different sound engine, including the modelled V-Piano engine, PCM (samples), VA modelling (up to nine wave types including Juno, SuperSaw, PCM-Sync or Noise). So there’s a lot on offer.
PCM banks A and B contain 963 and 257 samples respectively, giving a total of 1,220 raw partial waves to build on across the four partials available within a Tone. To bring things further up-to-date, you’ll also find new Tones from the AX-Edge keytar, alongside classics from the Integra-7 and XV-5080, though there are none of the lovely Supernatural Acoustic Tones onboard (yet).
Regarding hands-on control, there’s the standard issue Roland mod/bender, several assignable switches, two wheels (like the JD-XA) plus eight faders with LED level and LED ring dials for each of the 16 Zones (8 x 2 banks), plus one fader for USB audio streaming level from your DAW.
There are six high-resolution clickable knobs for editing under the screen (linked to six key performance parameters). Then you also get direct oscillator, filter, envelope and effect controls right on the front panel, which take you directly to the main areas of a sound you’d most likely want to edit on the fly. Roland has done a great job keeping things simple but effective, especially considering the power under the hood.
In addition, there are 16 TR8-style step buttons for step-sequencing, which also take you directly to 16 instrument categories (to speed up editing and performing) and a rhythm track which allows you to chain drum patterns/sync them to the sequencer and then easily switch between each section/pattern onscreen. Finally, you have 16 pads (four banks) and these can be used for triggering notes, samples, audio, MIDI (internal/external), sequences and more besides.
Performance and verdict
The Fantom-8 has a high-quality, great-feeling wooden PHA-50 keybed (like the RD-2000) but with aftertouch. All the new Fantoms feel and look the part and are built solidly throughout, with a metal front panel and under-key lip, plastic for the rear, sides and controllers panel and what appears to be a particle board base.
Switches feel positive, knobs and dials are smooth and high resolution, panel lighting is great for navigating and viewing stored values of knobs, and the new large colour touchscreen is the snappiest I’ve used in a workstation.
In fact, Roland has come up with the most intuitive workstation UI/UX design we’ve laid hands on to date; you can get at everything directly from the front panel yet, even when you dig deep, the Fantom never gets overwhelming (as the Yamaha Montage/Kronos can at times), plus all the lettering onscreen is of a size that can actually be read comfortably!
The new Fantom has a wide, warm, precise sound (with a tilt to the brighter/high-mid character) but with a punchy low end. With all the engines, deep-step LFOs and comprehensive modulation facilities, control matrix, Structures, VA filters and dual-IFX per-Zone (plus chorus and reverb), it feels engaging.
The stereo multimode analogue filter/drive (a workstation first) adds welcome character, and the V-synth-style Motional Pad (on screen) morphs seamlessly between four sounds.
Downsides? Well, the Fantom would benefit from a dedicated V-Electric Piano engine with the same detailed control and full polyphony/note tuning as the excellent V-Piano engine. It also misses a dedicated VK-tonewheel organ engine (and those Zone faders are crying to be auto-mapped drawbars)!
Full ACB analogue-modelling engines (as in the System-8/Cloud) would also be welcome inclusions, along with linear audio tracks/user multisampling, and currently, Scene saving wasn’t saving all our tweaks.
However, these are early days for the new Fantom platform; Roland has laid the solid groundwork, which we’re sure will be expanded and improved soon. A solid return indeed!
MusicRadar verdict: A versatile powerhouse with bags of connectivity. We’re looking forward to seeing how the Fantom ‘platform’ expands in the future.
The web says
"This is the workstation that the keyboard world needed. With so many people going the MIDI controller route, this is a breath of fresh air for the community." Keyboard Kraze
Hands-on demos
Guitar Center
Sweetwater
GAK
Andertons
Specifications
- Keyboard: 88 Keys (PHA-50 Wood and Plastic Hybrid Structure, with Escapement and Ebony/Ivory Feel, channel aftertouch)
- Sound Generator: ZEN-Core, V-Piano Technology
- Parts: 16 Zones (Internal + External)
- Scenes: 128 Scenes x 4 Bank
- Tones: Over 3,500 Tones, over 90 Drum kits
- Multi-Effects: 16 systems, 90 types
- Part EQ: 16 systems
- Drum Part COMP: 6 systems
- Insertion Effect: 2 System, 90 Types
- Chorus: 8 types
- Reverb: 6 types
- Master Compressor
- Master EQ
- Mic Input Reverb: 6 types
- Analog Filter STEREO; Type: LPF1/LPF2/LPF3/HPF/BPF/Bypass, Drive, Amp
Sequencer
- MIDI Tracks: 16 (Internal/External)
- Group: 16
- Pattern: 8 (per each Track)
- Pattern Length 32 measures
- Recording Method: Realtime recording, Step recording, TR-REC
Sampler
- Format: 16-bit linear, 44.1/48kHz, WAV/AIFF import supported
- Maximum Polyphony: 8
- Number of samples: 16 Pads x 4 Banks
Other
- Rhythm Pattern, Arpeggiator, Chord Memory
- Controllers: Pitch Bend/Modulation Lever, Assignable Switch x 2 (S1/S2), Control Knob x 8, Slider x 8, USB Audio Slider, Wheel x 2, Function Knob x 6, Sound Modified Knob x 11, 4 x 4 Pad
- Display: Graphic Type, 7", Wide VGA (800 x 480 dots), backlit LCD (Color/Touch screen)
- Connectors: Headphones Jack: Stereo 1/4-inch phone type; MAIN OUT Jacks (L/MONO, R) (1/4-inch phone type); MAIN OUT Jacks (L, R) (XLR type); SUB OUT1 Jacks (L, R) (1/4-inch phone type); SUB OUT2 Jacks (L, R) (1/4-inch phone type); ANALOG OUTPUT Jacks(1,2)(1/4-inch phone type); Mic/Line Input Jacks: (1,2) (1/4 inch phone type/XLR type); 2 x CV OUT, 2x GATE OUT; FOOT PEDAL Jacks (HOLD, CTRL1,CTRL2,CTRL3); MIDI connectors (IN, OUT1, OUT2/THRU); USB MEMORY Port; USB COMPUTER Port (AUDIO/MIDI); 3 x External Device Port
- Width: 1,432 mm
- Depth: 439 mm
- Height: 153 mm
- Weigh 27.7 kg6


Komodo
kmdlabs
See #get-started channel to access additional LABS channels
100 messages
Between 07-Dec-19 12:00 AM and 08-Dec-19 12:00 AM
Bar_F1sh_Rel
07-Dec-19 12:20 AM
No - can't get it to rebuild - komodod is dead. Going to bed - try again tomorrow.
ComputerGenie 👴👴👴
07-Dec-19 12:30 AM
https://tenor.com/view/blursotong-sotong-keliru-kabur-blur-gif-9606646
daemonfox
07-Dec-19 12:30 AM
ok help me out
I Goggled it but cant find a Cryptonight Dynamic GPU miner
and im helping others with other things...
mind pointing me in the right direc tion cg?
ComputerGenie 👴👴👴
07-Dec-19 12:33 AM
https://discord.gg/hYSrWXH
it's a mod of xmrig
daemonfox
07-Dec-19 12:46 AM
https://github.com/fart-master/blur-miner
fart-master/blur-miner
Improved CPU and Nvidia GPU miner for blur. Contribute to fart-master/blur-miner development by creating an account on GitHub.
that?>
Oszy
07-Dec-19 12:46 AM
fart-master
ComputerGenie 👴👴👴
07-Dec-19 12:53 AM
yes that be sure to scan the blur discord for the proper config changes or else you'll be mining to someone else's wallet
daemonfox
07-Dec-19 12:53 AM
k
ill care more later i guess
least i have t to look at now
reading some of that... they salty a GPU miner propped up so quickly?
 StakedNotary is now LabsNotary, totally re written
seems to work for me so far.. .much fixes took a long time to test it all
Oszy
07-Dec-19 01:05 AM
what works for you never works for us
ComputerGenie 👴👴👴
07-Dec-19 01:05 AM
StakedNotary is now LabsNotary
doesn't update and says "FTW!"
blackjok3r
07-Dec-19 01:06 AM
its in my repo, i wont force ppl to use it
(edited)
Oszy
07-Dec-19 01:06 AM
i'll test it when i wake up
blackjok3r
07-Dec-19 01:06 AM
but it simoply works better, the old stuff was terrible
ComputerGenie 👴👴👴
07-Dec-19 01:07 AM
its in my repo
with the<PHONE_NUMBER>000 other "updates" and "fixes" we keep hearing about but never seeing?
blackjok3r
07-Dec-19 01:07 AM
lol
yeah there ius a lot of them, but when i cant use a computer its pretty hard to write and test code
ComputerGenie 👴👴👴
07-Dec-19 01:08 AM
so, in other words, hard every day?
blackjok3r
07-Dec-19 01:09 AM
ummm not sure really... havbent been at my house most of the time... 2 ppl died and now things calmed down here.
ComputerGenie 👴👴👴
07-Dec-19 01:09 AM
2 ppl died
in your house?
(edited)
blackjok3r
07-Dec-19 01:09 AM
Dont knwo for how long so trying to smash out the work for LABS i put off for liek 6 months
no the town...
ComputerGenie 👴👴👴
07-Dec-19 01:10 AM
what does 2 people in town dying have to do with you not being home?
is cornfuzzed
blackjok3r
07-Dec-19 01:12 AM
yes it sounds confusing lol... need more security or more land
(edited)
Alright
07-Dec-19 02:06 AM
just pushed a better entercomp script, does everything in python
1
blackjok3r
07-Dec-19 02:10 AM
https://github.com/KMDLabs/komodo/commit/235abb97ecf68aa32b0cfe7ad81dfafbae8f9f79
fix ac_perc and notarypay · KMDLabs/komodo@235abb9
Alright
07-Dec-19 02:11 AM
again*
blackjok3r
07-Dec-19 02:11 AM
This should fix the CFEKPOS1 chain
(edited)
Alright
07-Dec-19 02:15 AM
would not recommend using keys generated for that for real money, code used for generating addresses is from here
https://www.reddit.com/r/Bitcoin/comments/19meq0/hey_bitcoiners_here_are_my_short_python_3_scripts/
Hey Bitcoiners, here are my short Python 3 scripts to generate a B...
A few months back I wrote some Python 3 scripts to generate Bitcoin addresses. They work just like Brainwallet does, and in fact are 100%...
Alright
07-Dec-19 02:25 AM
back it a bit if anyone new tries to sign up, tell them they don't need komodod in the pos64staker dir
they might have trouble with depends, will make the list when I'm back
daemonfox
07-Dec-19 02:32 AM
K giving your fix a shot... building it now
cant remeber what the make command is that does this faster than build.sh...

Need to get off my couch
daemonfox
07-Dec-19 02:49 AM
in the src dir
so komodo/src
did you remove a lot of the daemon output?
doesnt state when block is found and starting new
kmdkrazy
07-Dec-19 02:52 AM
Woah
Wierd
3022 insertions
I just build yesterday
And my komodod is in the correct folder fyi
kmdlabs like the instructions say
blackjok3r
07-Dec-19 02:57 AM
I have new notary readme in ny branch that has the correct info the master branch is wrong in a few places
will post it here soon
daemonfox
07-Dec-19 02:57 AM
[CFEKPOS1:2089] starting PoW with 1s until block is elegible for broadcast...


Bayelsa, Kogi Elections: IGP Identifies Policemen Who Disrupted The Electoral Process
by Enioluwa AdeniyiMuhammed Adamu, the Inspector-General of Police, while speaking on the Bayelsa and Kogi State elections has identified the policemen who disrupted the electoral process.
The IGP who spoke after President Muhammadu Buhari’s meeting with security heads stated that those caught on videos making round were fake officers.
Adamu further stated that all security personnel who worked during the November 16 elections were given special tags.
He further stated that anyone without the tags was on illegal assignments.
“Before the elections, there was threats assessment of the two states and we realised that there was going to be violence in two states”.
“Because, during the campaigns, we saw how the opponents were fighting themselves, so we prepared so much for that. During one of the stakeholders meeting, I went to Kogi with the chairman of INEC and I also went to Bayelsa.”
“Even at the point of signing the peace accord to conduct the election without any problems, after signing a peace accord in Kogi, within the hall, there was a problem by the parties.”
The IGP noted that the police force was aware that the electoral process was not going to be easy and so they had prepared heavily for the elections.
He stated that they were aware that some politicians in the state were going to sew police and military uniforms, which made them give them tags.
On why the Police allowed violence during the elections even with security reports before the exercise, he said: “You see, it depends on the way you choose to interpret.”
“We did our assessment, we knew these things will happen but what we needed to do was plan to prevent it, or if it happens, to arrest. That explains why the number of policemen we sent to those states were so massive.”
“Now, when you get the information and you did your assessment and you did your plan, the bad guys are also planning, and the people we are dealing with here are politicians. So, for us to be able to distinguish the bad from the good, one of the strategies was to create a situation that will enable us to identify the good ones, genuine personnel.”
“Then anyone without identification tag, is a bad guy and then we pick him. They came out as they planned but then, we made some arrests on the spot where we saw them, those that escaped through information and intelligence we also picked them.”


Table 9.8.1 shows the distribution of student loan forgiveness benefit by income under the \(2022\) Biden student loan forgiveness plan. Most of the debt forgiven would have accumulated for those in the \(25\)-\(35\) age group; hence, this column may be more representative of the plan's effects. No benefit is expected to go to the top \(5\%\) of earners in either age group. Data from Wharton School of Business [9.11.169].
in-context


The Java Management Extensions (JMX) API is standard API introduced in J2SE 5.0 for managing and monitoring applications and services.
We have added the support to JMX in Jawr to allow user to modify the behaviour of Jawr at runtime.
For example, the user will be able to pass an entire application from production mode to debug mode and vice versa. The user will also be able to set one session in debug mode, while the rest of the application will still be in production mode.
This is a really powerfull way to interact with Jawr at runtime. To access to the Jawr MBeans, you will have to use a JMX console, like JConsole, which is provided in the JDK since Java 5.0.
The Jawr MBeans are available accessible with the type net.jawr.web.jmx.
When using Jawr in multiple applications on your application server, it can be useful to set the prefix of the Jawr MBean for applications which are deployed on different server using the same application context. This will allows you to know which MBean is associated to which application. To do that, you have to use the jawr.jmx.mbean.prefix property in your Jawr configuration file.
Important note : This feature will allow you to modify some Jawr properties at runtime, but you should keep in mind that your changes are not persisted. This means that if you made a modification at runtime, the next time you will restart your application, your latest modifications made at runtime, will not be taken into account.
You will find an overview of JMX at the following links :
The JMX is part of Java API since Java 5.
To enable it, you only have to pass the following argument in the virtual machine of your web application server:
-Dcom.sun.management.jmxremote
To secure the JMX access to your application, please look for the section "Using Password and Access Files" at the following link.
We have defined two types of MBeans in JAWR. One which handles the configuration for a resource type (JS, CSS, Image). And another one, which handles the configuration for an entire application.
This MBean will handle the configuration for one type of resource. You will be able to configure the following properties :
You could modify these values at runtime, but the values will only be taken in account when you will launch the refreshConfig operation from the JMX console :
/** * Refresh the configuration. */ public void refreshConfig();
This MBean will handle the configuration for an entire application. This means that when modifying the configuration on this MBean, you will modify the configuration of JAWR for all resources (JS, CSS and Images).
You will be able to configure the following properties :
You could modify these values at runtime, but the values will only be taken in account when you will launch the refreshConfig operation from the JMX console :
/** * Refresh the configuration. */ public void refreshConfig();
There are other methods available in the JawrApplicationConfigManagerMBean.
/** * Add a session ID to the set of debug session ID. * All request make by sessions, whose their IDs are contained in the debug session set, * will be threated as in debug mode. * * @param sessionId the session ID to add */ public void addDebugSessionId(String sessionId); /** * Add a session ID, to the set of debug session ID. * All request make by sessions, whose their IDs are contained in the debug session set, * will be threated as in debug mode. * * @param sessionId the session ID to add */ public void removeDebugSessionId(String sessionId); /** * Remove a session ID from the set of debug session ID. * * @param sessionId the session ID to remove */ public void removeAllDebugSessionId(); /** * Returns true if the session ID passed in parameter is a debuggable session ID * @param sessionId the session ID * @return true if the session ID passed in parameter is a debuggable session ID */ public boolean isDebugSessionId(String sessionId);


Here at www.mso-upesh.wixsite.com, we are committed to a single goal; we strive to make the world a better place. Explore our website to learn more about all that we’re doing to make a change. We are a private, non-profit organization dedicated to finding volunteers to help those in need overcome challenges, while developing meaningful relationships with them..
We believe that our work is truly making a difference for people all over the world and here in our community. We hope that one day, everyone will share our passion for change. We invite you to join us on our mission to improve the lives of those who need it most. With the right attitude, and a bit of support, our dreams can and will be realized.
“We rely on substantial aid from generous people like yourself who care to make a difference in the way their community is run. Our Volunteer Organization depends on the generosity of benefactors like you.


Currently aged 24, having completed my A-Level studies and university experience, I feel open to a new work venture in a professional setting.
I try to keep my approach to work in a prioritized and independent manner, but I am also able to work within a team/group in order to achieve certain goals and/or tasks. Even though I am young, let that not deter you from how from the standard of work I would aim to keep. Having worked briefly with a few known clients like MOO and Teespring, I have seen how offices work in both quiet and busy days.
Maths
Biology
Physics
Chemistry
English Literature
English Language
DiDA - Diploma in Digital Applications
My aim is to provide a good service to the customers/clientele of your business and to carry on the high standard of service at your business gives and become an affluent part of the team. This, I feel, is necessary to build on my current peer to peer skills and experience in a work environment for career progression on a professional level.
Other media content I create is more image based. Very much a Front-End fascination.


--- layout: post title: Java vs Native mobile games date: 2006-10-07 00:00:00 categories: business mobile software-development ---
The Register on Java vs Native mobile games: "Native applications should run a little faster than Java versions, though that lead is rapidly diminishing, leaving the only reason to "go native" being the ability to utilise hardware-specific features such as side buttons or jog-dials. But such features cannot form part of any standard, as by their very nature they are not standard, and the most popular games on mobiles remain basic puzzles and strategy games which make little call on advanced hardware: being used to fill the minutes travelling, or waiting to travel."


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 | <%--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
--%>

<title>Tag Plugin Examples: Out</title>

Tag Plugin Examples - <c:out>

Plugin Introductory Notes

Brief Instructions for Writing Plugins

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

Set value to variable

<c:set var="someText" value="Some text" scope="page"/>

Get value

<c:out value="Sample Value"/>

Get value from variable, default escapeXml=true

<c:out value="${someText}"/>

Get value from variable, escapeXml=false

<c:out value="${someText}" escapeXml="false"/>

Default value, default="Guest"

<c:out value="${user}" default="Guest"/>

<c:out value="${user}" >Guest2</c:out>

|


{%extends "base.html"%} {%block head%}
Plan your next adventure.
7 nights in November
Price: $2500 per person
7 nights in May
Price: $2000 per person
7 nights in June
Price: $3000 per person


HP’s Black Friday deals aren’t messing around
Discounts up to 65% on HP Omen, Spectre, and Envy best-sellers
by HP[This week, Destructoid is brought to you by the HP Store. This is a sponsored post.]
HP is offering up a slew of high-quality holiday deals for its array of Omen, Spectre, and Envy gaming systems, monitors, and accessories. The sale is live now, so check out some of our top picks below - or hit up the HP Store direct to see the complete selection!
HP OMEN Desktop PC
Doorbuster Price: $949.99 (normally $1499.99)
Key Features:
- Windows 10 Home 64
- 8th Generation Intel® Core™ i7-8700K
- NVIDIA® GeForce® GTX 1660 Ti 6G
- 8 GB memory; 1 TB HDD storage
- Free shipping
- An additional 20% off PC accessories
- Customization available
See all Black Friday desktop deals!
HP EliteBook 850 G5 Notebook PC
65% off through 12/2: $747.80 (normally $2,108)
Key Features:
- Windows 10 Home 64 - HP recommends Windows 10 Pro for business
- 8th Generation Intel® Core™ i7 processor
- 4 GB memory; 256 GB SSD storage
- 15.6" FHD display
- Intel® HD Graphics 620
- Customization available
See all Black Friday laptop deals!
OMEN X 27 240Hz Gaming Monitor
Black Friday price: $569.99 (normally $649.99)
Key Features:
- QHD (2560 x 1440 @ 60 Hz)
- 1000:1 static; 10000000:1 dynamic
- 1 ms (with overdrive)


This is a sample DITA Project that imposes custom settings for DITA editing. When the project is open in the Oxygen Project view, it will impose a custom set of global options as well as an imposed custom DITA framework extension.
The project contains the following folder structure:
Most of the preference pages in the Preferences folder can be saved at project level. When the project is open in the Project view, the following global options are imposed:
DITA editing can be customized by extending the current DITA framework customization. The framework extension is defined in the custom-settings/dita-extension/dita-extension.exf framework script file. You can add your own custom actions to the toolbars, menus, or contextual menus, and add, change, or remove transformation scenarios or validation scenarios.
You can customize the existing DITA file templates by making changes to the custom-settings/dita-extension/templates/ and custom-settings/dita-map-extension/templates/ folders.
The content completion configuration extension file custom-settings/dita-extension/resources/cc_config_ext.xml allows you to customize various aspects of content completion.
You can add custom Schematron validation rules in the custom-settings/dita-extension/resources/customRules.sch Schematron file.
You can also customize the visual editing by modifying the CSS custom-settings/dita-extension/css/custom.css.
For checking terminology, you can use the Oxygen Terminology Checker add-on. You can add terminology rules to the oxygen-term-checker folder. For example, the Oxygen user manual uses a set of Vale rules to check for common terminology problems.
You can publish the content of the "project.ditamap" in two ways:


The sea-level code is available at https://github.com/matthiasmengel/sealevel with the version used in the presented analysis archived at 10.5281/zenodo.1118288. The MAGICC model is not open-source, but a compiled version can be obtained from the authors.


Click and drag in the canvas window. The faster you drag, the bigger the circles are. Best viewed in Chrome or Safari.
1) (20%) Enable the checkbox - checking it will cause all of the circles to be drawn at 50% alpha.
2) (30%) Create an additional variation of this speed circle theme, or on a similar theme such as symmetry. This should be SIGNIFICANTLY different from the base files. Tell us what the variation is so that we can read it right here: ** YOUR DESCRIPTION GOES HERE **
3) (20%) Circle traits are based on mouse position or movement speed.
4) (30%) Slider affects circle drawing. The slider should show an obvious visual effect to the circles.
Check out the Khan Academy examples (written in processing) here: Speed Circles & Symmetry
Here's our original Speed Circles JS, and in-class variation example: Speed Circles JS 2.


Select your languages
Fast Installation
Use your generated vimrc file following this instructions.
Learn more about Vim
See the commands list.
Customize your ViM
Create a ~/.vimrc.local and customize your own configuration.
A generator which provides a simple method of generating a .vimrc configuration for vim
Use your generated vimrc file following this instructions.
See the commands list.
Create a ~/.vimrc.local and customize your own configuration.


 Notifications are currently {{im_notify|yesno:"ON,OFF"}} (Change notification options)
Your IM address is:
{{im_address.base}}
You may clear it by sending SIGN OUT to {{IM_BOT}}
Activate your Google Talk, LiveJournal, or Jabber address to post and receive notifications from IM.
Using Adium on MacOSX? Click to send it a command: Add the bot


Developer Relations / Beard - Toby Sims / @4thfloor_monkey
Find the slides at heroku
We are the World's leading learning company, providing a wealth of educational materials, learning platforms, business information and consumer publishing.
All of this:
Education!
Technology!
...
Education Technology
Technology in Education
A bit of this:
And sometimes a bit of this:
and we all got mildly addicted.
*With thanks to the work of Marshall McLuhan et al
Some assumptions:
*With thanks to the work of many, many blue sky thinkers...
stuff
stuff
stuff
These guys come in two forms, inline:
“The nice thing about standards is that there are so many to choose from”
and block:
“For years there has been a theory that millions of monkeys typing at random on millions of typewriters would reproduce the entire works of Shakespeare. The Internet has proven this theory to be untrue.”
Press b or period on your keyboard to enter the 'paused' mode. This mode is helpful when you want to take distracting slides off the screen during a presentation.


|
GetImage Environment MFCDiscription A web crawler for pictures. Can be used to batch download the pictures and other elements on a website, or filter keywords in URLs. GitHub |
|
|
Plot 2D implicit function code |
|
|
A simple 3D basketball game Environment MFC, OpenGL, OpenCVDiscription A computer graphics class project. code (Chinese) |
|
|
Balls'n'Holes Environment Android, JavaDiscription A simple Android game.  Motion (e.g. shaking) detection based on Accelerometers. code Intro (Chinese) |
|
|
Double-player snake game Environment x86 assemblycode (Chinese) |
|
|
A MIPS-like CPU design with pipeline Environment Verilogcode (Chinese) |


{% load static %} {% comment %} {% if form.subject.errors %}
Please fill in this form to create an account.
{{ field.help_text|safe }}
{{ error }}
By creating an account you agree to our Terms & Privacy.


1. Overview
perfLoad offers powerful whitebox testing features to analyze not only client-side response times but also allows the user to capture server-side execution times and to monitor system metrics on all participating hosts. In addition, it provides the complete picture as an easy to read HTML report containing a sophisticated visual analysis of the measurings.
Main Features
-
Whitebox load and performance testing including client- and server-side measurings and system metrics
-
Support for complex load profiles including a visual editor
-
Full HTTP support
-
Support for custom request types
-
Load test driver development in Java
-
Central control
-
Full-featured reporting
Getting Started
For a quick start, a complete demo setup is available which installs all perfLoad components and a reference application on your local machine. This should get you started quickly in a matter of minutes and help you set up real-world testing scenarios for your applications.
Read on…
-
Getting Started - Get up and running quickly using the demo setup.
-
Complete Feature List - Find out all about perfLoad’s amazing features.
-
Components - Get to know perfLoad’s components.
-
Installation - Learn how to set up and configure everything for real-world scenarios.
-
Analyzing perfAlyzer Reports - Learn about reporting features and how to interpret reports.
-
Community - Need help? Want to get involved?
2. Getting Started
In order to get started quickly with perfLoad and to demonstrate how everything works together, a demo setup is available that installs a complete perfLoad environment including all components together with a reference application on your local machine.
It includes a sample load test driver and several sample testplans which you may run and study in order to get familiar with perfLoad.
Installation
-
Make sure
JAVA_HOME
is set to Java 7 (JDK or JRE). -
Download (link will follow once published) the demo installer and unzip it to some directory of your choice. You will find there a directory named
demo-installer
. -
Open a command prompt in this directory and run
DemoInstaller.cmd
or./DemoInstaller
, depending on your operating system. The installer will then download and configure all components. You will be prompted for the demo installation directory. You may accept the default or enter a directory of you choice.
demo-installer> DemoInstaller.cmd
Initializing...
*******************************************************************
* *
* *
* Welcome to perfLoad's Demo Installer 1.0.0 *
* (c) 2013, mgm technology partners GmbH *
* *
* *
*******************************************************************
> Enter installation directory [../perfload-demo]:
Running Sample Load Tests
-
Open a command prompt in the directory
supervisor
in the directory where the demo was installed. -
Execute
runLoadTest.cmd
or./runLoadTest
. -
You will be prompted for a testplan to run:
perfload-demo\supervisor> runLoadTest.cmd
Initializing...
*******************************************************************
* *
* *
* Welcome to perfLoad's Supervisor 1.9.1 *
* (c) 2013, mgm technology partners GmbH *
* *
* *
*******************************************************************
No tentant specified. Running in single-tenancy mode.
Please select the testplan you'd like to use:
1) testplan_browse_error.xml
2) testplan_browse_garbage.xml
3) testplan_CPUload.xml
4) testplan_garbage.xml
5) testplan_long.xml
6) testplan_persistent_garbage.xml
7) testplan_short.xml
-
You may execute any of these testplans. For a start, we’d recommand to select
testplan_short
. It runs about ten minutes.
That’s it! Supervisor takes care of everything including startup and shutdown of the reference application.
Examining the Test Results
After successfully completing the test, perfAlyzer is launched creating a report, which is stored under perfalyzer\output\<testplan>\<timestamp>\05_report\report.html
.
3. Features
Whitebox Testing Options
-
Measuring client-side response times
-
Measuring server-side execution times of specific Java methods using perfLoad Agent
-
Capturing system metrics, such as CPU, IO, memory, network, etc. using perfMon
Central Control with perfLoad Supervisor
-
Load test execution control
-
SSH communication with participating hosts
-
Data collection using SCP
-
Hooks for custom scripting, e. g. for starting up or shutting down the system under test.
Load Test Driver Options
-
Load test driver development in Java with support for JSR 330 dependency injection
-
Support for all HTTP methods and thus for any kind of HTTP requests (SOAP, REST, AJAX)
-
Support for custom "request types" (e. g. for calling Java Applet code, calling shell scripts, etc.)
-
Configurable waiting times between requests
-
Fully parameterizable request flows
-
Tests driven by load profiles making client load exactly follow predefined curves
-
Combination of different request flows into a single load profile
-
Orchestration of load profile executions across multiple client hosts/processes
-
Support for extraction of response headers and details from responses
-
Support for validation of response content and status codes
Visual Creation of Load Profiles with perfLoad Load Profile Editor
Evaluation and Reporting with perfAlyzer
-
Full-featured reports including client- and server-side measurements, percentile calculation, response time distribution, system metrics, garbage collection, test history, etc.
4. Components
perfLoad consists of a number of components which are explained below.
4.1. Console
The console controls load test execution. It distributes testplans, load profiles, and driver jars to the daemons and runs the test. |
4.2. Daemon
A daemon is little server between the console and the clients. A daemon spawns the client processes that execute the load test driver. |
4.3. Client
A client process executes the load test driver. Each event in a load profile triggers a new client thread at the specified time executing the operation specified by the load profile event. |
4.4. perfMon
The monitoring tool perfMon should be installed on all participating hosts. It captures system metrics, such as CPU, memory, IO, network, etc. and writes them to a file. |
4.5. Load Profile Editor
A Swing application for visually creating load profiles. |
4.6. Agent
The perfLoad Agent is a Java agent which instruments the byte code in order to weave in measuring hooks. This solution is much more elegant than AOP because it does no require the development of project-specific aspects. The agent only requires a config file in JSON format in order to define methods that should be instrumented. The agent also captures exceptions that occur in instrumented methods. |
4.7. perfAlyzer
Reporting solution that runs out-of-the-box with zero or little extra configuration. Creates full-featured HTML reports including client- and server-side measurings, percentile calculation, response time distribution, system metrics, garbage collection, test history, etc. |
4.8. Supervisor
A Gradle script and a few Groovy classes for controlling everything:
|
5. Installation
The various perfLoad components need to be installed on the participating hosts. All components must be installed under a common directory on each host, which will subsequently be referred to as PERFLOAD_HOME
. An environment variable with this name is, however, not necessary.
A Note up front
-
Installing the components always involves unzipping a distribution. It is advisable to unzip the distributions directly on the target systems. This avoids file corruption during SCP transfer of unzipped distributions (e. g. *.dll and \*.so file in perfMon) and creates execute permissions for shell scripts automatically.
-
It is always safe to unzip a newer version over an existing installation. All files that require user changes have
.default
in their names and must be renamed upon installation. So you can always diff your adapted config files with the default ones after an update and make necessary adjustments, if need be.
5.1. Installing Daemons and Clients
-
Requires Java 7
-
Unzip the perfLoad Client distribution to
PERFLOAD_HOME
on all client hosts. -
Unzip the perfLoad Daemon distribution to
PERFLOAD_HOME
on all client hosts. -
JAVA_HOME
must be set to a Java 7 (JDK or JRE). Asetenv.cmd
/setenv.sh
may be added to the daemon directory in order to setJAVA_HOME
. It will be picked up if present.
5.2. Installing perfMon
-
Requires Java 6
-
Unzip the perfMon distribution to
PERFLOAD_HOME
on all hosts where you wish to run perfMon during load tests. -
JAVA_HOME
must be set to a Java 6 or higher (JDK or JRE). Asetenv.cmd
/setenv.sh
may be added to the daemon directory in order to setJAVA_HOME
. It will be picked up if present.
5.3. Installing the Console
-
Requires Java 7
-
Unzip the perfLoad Console distribution to
PERFLOAD_HOME
on the controller host. -
JAVA_HOME
must be set to a Java 7 (JDK or JRE). Asetenv.cmd
/setenv.sh
may be added to the daemon directory in order to setJAVA_HOME
. It will be picked up if present. -
Copy the driver jar and any additional dependencies to the folder
test-lib
. -
Copy testplan files to the folder
testplans
. -
Copy load profile events files to the folder
testplans/loadprofiles
.
5.4. Installing the Agent
-
Requires Java 6
-
Unzip the perfLoad Agent distribution to
PERFLOAD_HOME
on the application server hosts. -
Rename
perfload-agent.default.json
toperfload-agent.json
and edit it as specified below.
For each method to be measured, add a JSON object to the file, the key being the fully classified class name of the class that contains methods to measure. Each class name JSON object must in turn contain any number of JSON objects for methods to measure, the keys being the method names and the values being lists of JSON arrays with method parameters. Specifying method parameters allows to distinguish between overloaded methods. If an empty list is specified, any, potentially overloaded, method with the name of the key is instrumented.
The agent can also instrument entry points of Web applications, i. e. servlets or filter. This enables the agent to match client requests and server-side measurings because perfLoad sends custom HTTP headers which the agent can extract. If your application has multiple entry points (e. g. multiple filters that are chained), only the first entry point relevant for a request should be instrumented. It is suggested the entry points be always configured.
Sample for an agent config file
{
'entryPoints': {
'servlets': ['com.foo.web.FooServlet'],
'filters': ['com.foo.web.FooFilter']
},
'instrumentations': {
'com.foo.web.Foo': {
'doSomething': [[], ['int'], ['long', 'long']],
'doSomethingElse': []
},
'com.foo.web.Bar': {
'doIt': [[java.lang.Integer]],
'doItAgain': []
}
}
}
In order to activate the agent in your application server, add the following VM-Parameter:
-javaagent:/path/to/agent/perfload-agent.jar
5.5. Installing the Supervisor
-
Requires Java 7
-
Unzip the perfLoad Supervisor distribution to
PERFLOAD_HOME
on the controller host. Note, the Supervisor must be installed on the same host as the Console. -
JAVA_HOME
must be set to a Java 7 (JDK or JRE). Asetenv.cmd
/setenv.sh
may be added to the daemon directory in order to setJAVA_HOME
. It will be picked up if present. -
Rename all files in directory
conf
matching the pattern.default.
by removing ".default" from the file name. -
Edit the config files in the folder
conf
as described below.
Editing SupervisorConfig.groovy
The file SupervisorConfig.groovy
contains settings for the Supervisor that are not specific to load tests. The file is in a format that can be read by Groovy’s [ConfigSlurper](http://groovy.codehaus.org/ConfigSlurper). The following table lists all properties for this file. Note that, unlike Java properties, the values are real types, not just strings.
| Property | Description | Type |
|---|---|---|
|
The timeout in minutes that the console will wait after the last test thread was started before aborting the test.  This should normally be set to |
|
|
Specifies whether the Supervisor should start configured servers before executing a load test. |
|
|
Specifies whether the Supervisor should shutdown configured servers after executing a load test. |
|
|
Specifies whether the Supervisor should collect test results after executing a load test. |
|
|
Specifies whether the Supervisor should run project specific targets before and after a load test. |
|
|
Automatically runs perfAlyzer after the test |
|
|
If |
|
Editing LoadTestConfig.groovy
The file LoadTestConfig.groovy
contains configurations for all hosts participating in load tests. The file is in a format that can be read by Groovy’s [ConfigSlurper](http://groovy.codehaus.org/ConfigSlurper). The following table lists the properties for this file. Note that, unlike Java properties, the values are real types, not just strings. As the configuration is structured as nested maps, the table also shows parent-child relationships.
| Property | Parent | Description | Type |
|---|---|---|---|
|
Root for host configurations. |
|
|
|
|
A map representing a specific host configuration. |
|
|
|
The username for SSH access. |
|
|
|
The password for SSH access (optional). |
|
|
|
The certificate for public key authentication (optional). |
|
|
|
The base directory for all perfLoad components on this host. |
|
|
|
The OS family of this host. |
|
|
|
Optional parameter that be set if this is a client host that runs perfLoad daemons and client processes. Specifies the id of a daemon as configured in the load profile. |
|
|
|
Optional parameter that must be |
|
|
|
A list of SSH commands that should be executed on this host before a load test, e. g. to start up application servers. |
|
|
|
A list of SSH commands that should be executed on this host after a load test, e. g. to shut down application servers. |
|
|
|
A map of archiving configurations that specify what files perfLoad should zip up and collect after a load test. |
|
|
|
A map representing a specific archiving configuration. |
|
|
|
The directory that contains files to be archived. |
|
|
|
A wildcard pattern matching files to be archived. |
|
|
|
The name of the zip file to create. |
|
|
|
Specifiey whether the files (including the zip file) should be deleted before a test if they exist. May be left out otherwise. |
|
The following example should make this clearer:
Example for LoadTestConfig.groovy
hostConfigs {
myClientHost1 {
user = 'myuser'
password = 'mypass'
perfLoadHome = '/home/myuser/perfload'
osfamily = 'unix'
daemonId = 1
perfmon = true
}
myClientHost2 {
user = 'myuser'
password = 'mypass'
perfLoadHome = '/home/myuser/perfload'
osfamily = 'unix'
daemonId = 2
perfmon = true
}
myAppServerHost1 {
user = 'myuser'
password = 'mypass'
perfLoadHome = '/home/myuser/perfload'
osfamily = 'unix'
perfmon = true
startup = [[dir: '/dir/to/appserver/bin', executable: './myapp.sh'], args: ['start']]
shutdown = [[dir: '/dir/to/appserver/bin', executable: './myapp.sh', args: ['shutdown']]
archiving {
appServerLogs {
dir = '/dir/to/appserver/logs'
files = '*.log'
zipName = 'appserver-logs.zip'
cleanup = true
}
}
}
myAppServerHost2 {
user = 'myuser'
password = 'mypass'
perfLoadHome = '/home/myuser/perfload'
osfamily = 'unix'
perfmon = true
startup = [[dir: '/dir/to/appserver/bin', executable: './startup.sh']]
shutdown = [[dir: '/dir/to/appserver/bin', executable: './shutdown.sh']]
archiving {
appServerLogs {
dir = '/dir/to/appserver/logs'
files = '*.log'
zipName = 'appserver-logs.zip'
cleanup = true
}
}
}
myDbHost {
user = 'myuser'
password = 'mypass'
perfLoadHome = '/home/myuser/perfload'
osfamily = 'unix'
perfmon = true
}
}
Adding project-specific targets
The Supervisor can execute project-specific tasks before and after a load test. The file ProjectTargets.gradle
must be placed in the Supervisor’s installation directory. It must contain the tasks before
, after
, and performSystemCheck
. The latter one can be used to check the availability of the system, e. g. by calling a URL.
// custom config object, if necessary
// myProjectConfig = SupervisorUtils.loadConfig(tenant, 'ProjectTasksconfig.groovy')
task before(description: 'Executes project-specific tasks before the load test') << {
}
task after(description: 'Executes project-specific tasks after the load test') << {
}
task performSystemCheck(description: 'Checks that everything is up and running') << {
/*
* In order to fail this task, e. g. ant.fail() may be called
*/
}
|
Note
|
An upcoming version of the Supervisor will be able to distribute all components to the participating hosts so that everything can be configured in one central place and then be installed automatically. |
5.6. Installing the Load Profile Editor
-
Requires Java 7
-
Unzip the perfLoad Load Profile Editor distribution to
PERFLOAD_HOME
on the controller host. -
JAVA_HOME
must be set to a Java 7 (JDK or JRE). Asetenv.cmd
/setenv.sh
may be added to the daemon directory in order to setJAVA_HOME
. It will be picked up if present.
6.  A daemon acts as a server between the perfLoad Console
and the actual perfLoad Client
processes. There is always one daemon per client host. Each daemon triggers client processes on the same machine which in turn spawn threads that execute the load test driver.
Definition of Terms
Before getting into the details, the following table defines a few key terms that are necessary to understand perfLoad.
| Term | Definition |
|---|---|
|
The piece of software that is executed during a load test. It acts as a client to the system under test. A load test driver can be customized by load test implementers. |
|
perfLoad usually executes multiple client threads per client process. Each client thread executes the load test driver. The |
|
|
|
perfLoad Web tests always execute a list of predefined requests. A request flow is an XML file that contains a list of such predefined request templates. Request flows may be fully parameterized. At runtime request templates are transformed into executable requests. |
|
The load profile, which may be created using perfLoad’s |
|
The testplan is a little XML file which tells perfLoad which load profile to execute, specifies load test driver jar files to distribute to the clients, and allows to set additional properties for the test. |
perfLoad Client Internals
perfLoad is not limited to Web load tests. Anything can be implemented. So, in the following, we’ll see how perfLoad clients work in general.
Load Tests in General
The following sequence diagram shows the basic scenario, which is common to all load tests.
image:sequence-diagram_test-driver.png
The subsequent sections describe the involved classes in detail.
Class com.mgmtp.perfload.core.client.LtProcess
The class com.mgmtp.perfload.core.client.LtProcess
is the main entry point for a load test client process. It submits com.mgmtp.perfload.core.client.LtRunner
implementations to an ExecutorService
, which is actually responsible for creating test threads. Events are triggered on process start and finish. Implementers can react on these events for initialization and clean-up tasks (e. g. shutdown of connection pools common to all threads).
Class com.mgmtp.perfload.core.client.util.concurrent.DelayingExecutorService
This class extends java.util.concurrent.AbstractExecutorService
. It allows tasks to be executed after a given delay. This is necessary for load profile execution. Internally, it maintains a completion queue, so finished tasks may be taken out of this queue as soon as they are done. This allows for a quick reaction on possible execution errors so that, depending on the type of exception, tests can be aborted early. The size of the thread pool is not limited because the number of threads needed for load profile execution is not available ahead of time. However, idle threads may die when they are not needed anymore. Warnings are logged if tasks are executed too late because of performance problems in the client process due to very high load.
Class com.mgmtp.perfload.core.client.runner.LtRunner
The class com.mgmtp.perfload.core.client.LtRunner
is associated with an com.mgmtp.perfload.core.client.driver.LtDriver
instance. It executes the LtDriver as many times as specified by the loops parameter. Before and after the whole execution as well as before and after each loop iteration, events are triggered. com.mgmtp.perfload.core.client.LtRunner
is wrapped into a Runnable
instance that is submitted to the executor service. Exceptions thrown during execution are wrapped and re-thrown as ExecutionException
when get()
is called on the resulting Future. When the above-mentioned completion queue is polled exceptions may be reacted on early and at a central place.
Interface com.mgmtp.perfload.core.client.driver.LtDriver
com.mgmtp.perfload.core.client.driver.LtDriver
is merely an interface. Code that is to be executed during a load test must be implemented in the execute
method.
Web Load Tests
Web load tests are naturally more complex. Requests must be executed, responses must be parsed. Certain values may have to be extracted from a previous response in order to replace placeholder tokens for the next request, and so on. In all these areas, projects may have special requirements. Thus, perfLoad provides sensible defaults and offers the necessary extensibility. The diagram below shows the general scenario for Web load tests starting out with com.mgmtp.perfload.core.client.LtRunner
. The steps before that are the same as for simple load tests.
image:sequence-diagram_web-driver.png
Class com.mgmtp.perfload.core.web.WebLtDriver
The class com.mgmtp.perfload.core.web.WebLtDriver
is the default com.mgmtp.perfload.core.client.driver.LtDriver
implementation for Web load tests. It calls a com.mgmtp.perfload.core.web.flow.RequestFlowHandler
which is responsible for any further processing.
Interface com.mgmtp.perfload.core.web.flow.RequestFlowHandler
A com.mgmtp.perfload.core.web.flow.RequestFlowHandler
processes pre-recorded requests from an XML file. It replaces placeholder tokens in parameterized requests and calls appropriate +RequestHandler+s for processing requests. PerfLoad will provide a default implementation that may easily be extended, e. g. for loading project-specific test data from a database.
Interface com.mgmtp.perfload.core.web.request.RequestHandler
A com.mgmtp.perfload.core.web.request.RequestHandler
executes requests. PerfLoad supports all HTTP methods. Custom request handlers may be configured.
Interface com.mgmtp.perfload.core.web.response.ResponseParser
A com.mgmtp.perfload.core.web.response.ResponseParser
basically does what its name implies. Based on regular expressions, the default implementation can validate a response and extract replacement values for placeholder tokens from it.
Next Steps
After this general overview, we can continue delving in deeper:
6.1.  It acts as a client to the system under test. It is basically just a jar file (or multiple jar files if further dependencies are needed). For simple tests, the jar needs to contain at least a properties file and a request flow file. For more advanced tests, custom Java classes will be required.
Initially, we’ll focus on Web load tests using com.mgmtp.perfload.core.client.web.WebLtDriver
as driver implementation. Later on, we’ll look at calling scripts using com.mgmtp.perfload.core.client.driver.ScriptLtDriver
and, finally, at implementing custom drivers.
6.1.1. Project Setup
For Maven users, add the following dependency to your driver project:
<dependency>
<groupId>com.mgmtp.perfload</groupId>
<artifactId>perfload-client</artifactId>
<version>insert current version</version>
</dependency>
<!-- Contains DriverTestRunner. Only needed during development. -->
<dependency>
<groupId>com.mgmtp.perfload</groupId>
<artifactId>perfload-test-utils</artifactId>
<version>insert current version</version>
<scope>test</scope>
</dependency>
The following screenshot shows an example for a driver project in Eclipse:
image:project_structure.png
The following table quickly explains the files on the screenshot:
| Class | Description |
|---|---|
|
Guice module for the driver. Needs to be specified in the testplan |
|
Listener implementation for hooking into the request flow execution |
|
Contains the request flow |
|
CSV file containing test data |
|
Properties file |
|
Test class for debugging and testing the driver. |
A load test driver can be easily debugged and tested in an IDE using com.mgmtp.perfload.test.utils.DriverTestRunner
. This class provides a static method that executes the driver once directly in the IDE without the need for the whole perfLoad framework.
DriverTestRunner.runDriver(new ExampleModule(new PropertiesMap()), "myOperation", "myTarget");
6.1.2. Properties
The properties file perfload.utf8.props
must be present in the classpath root of the driver jar. The file must have the extension .utf8.props
which indicates that the file, unlike the old standard Java properties files, must be UTF-8-encoded. Java 6 added support for properties in UTF-8 format. The file extension is changed becaused Eclipse will by default always try to encode properties files in Latin-1 adding unicode escapes for non-Latin-1 characters. Internally, perfLoad uses the class com.mgmtp.perfload.core.common.util.PropertiesMap
to handle properties.
The whole test execution in perfLoad is based on operations
and targets
. An operation
defines what is to be executed, e. g. which request flow (see next section) for Web load test, and a target
defines against which system (there may be multiple application servers) the operation
is executed. The following example shows how operations
and targets
for a browsing and a checkout scenario of an online shop could be configured.
Properties Example
# two request flow for operation'browsing'; multiple comma-separated request flows may
# be specified, which are executed sequentially
operation.browsing.requestflows=requestflows/browsing1.xml,requestflows/browsing2.xml
# request flow for operation 'checkout'
operation.checkout.requestflows=requestflows/checkout.xml
# two target configurations, 'appserver01' and 'appserver02'
target.appserver01.host=http://myshop01.mgm-tp.com
target.appserver02.host=http://myshop02.mgm-tp.com
# custom properties may be added
my.custom.property=foo
6.1.3. Request Flows
During a Web load test, perfLoad executes a number of pre-defined parameterizable HTTP requests that make up a so-called request flow. Multiple request flows may be specified for an operation
which are then executed sequentially. The following XML file shows how a request flow is configured. Parameter values may be wrapped into CDATA blocks if necessary. Different request types are shown exemplarily.
Request Flow Example
<?xml version="1.0" encoding="UTF-8"?>
<requestFlow>
<request type="GET" uri="/home" />
<request type="POST" uri="/login">
<param name="username">${username}</param>
<!-- use CDATA blocks if necessary -->
<param name="password"><![CDATA[${password}]]></param>
</request>
<request type="PUT" uri="/test">
<body><![CDATA[some body content, might be XML or JSON]]></body>
</request>
<request type="POST" uri="/test/42">
<body resourcePath="body.txt" resourceType="text" />
</request>
<!--
Uses a uri alias so requests are grouped under this alias
in the reponse time distribution report.
-->
<request type="POST" uri="/image/${id}" uriAlias="Image Upload">
<header name="Content-Type">image/png</header>
<body resourcePath="logo.png" resourceType="binary" />
</request>
<!--
Note the use of '&' in the URL. otherwise XML validation would fail.
The value of the first parameter and the name of the second parameter are parameterized.
-->
<request type="GET" uri="/foo?param1=${value1}&${param2}=value2" />
<!-- same as the above, for GET request, the query string is created automatically -->
<request type="GET" uri="/foo">
<param name="param1">${value1}</param>
<param name="${param2}">value2</param>
</request>
<!-- Requests may be skipped. In this case, the skip parameter is itself parameterized -->
<request type="GET" uri="/bar" skip="${skip}" />
<request type="GET" uri="/rest">
<!-- add custom header -->
<header name="Content-Type">application/xml</header>
</request>
</requestFlow>
Parameterization of Requests
The example above contains placeholder tokens in many places. In fact, any element atribute or content in the XML file is parameterizable. perfLoad uses Ant-style placeholder tokens, such as ${username}
. Internally, perfLoad holds placeholders and their replacement values in a com.mgmtp.perfload.core.client.util.PlaceholderContainer
which is confined to the current thread. Replacement values may either be extracted from responses (see next section) or added to the com.mgmtp.perfload.core.client.util.PlaceholderContainer
programmatically. The latter can be done using an event listener (see the section on events below), e. g. using test data that come from e. g. a database or CSV files. At runtime, placeholder tokens are resolved just before executing a request.
Extracting Details from Responses
Response Body Extraction
Details may be extracted from HTTP responses in order to be stored in the com.mgmtp.perfload.core.client.util.PlaceholderContainer
.
Detail Extraction Example
<?xml version="1.0" encoding="UTF-8"?>
<requestFlow>
<request type="GET" uri="/home">
<!-- extract value for placeholder 'foo' from response -->
<detailExtraction name="foo">
<![CDATA[foo=([^"]+)"]]>
</detailExtraction>
<!-- extract value for placeholder 'bar' from response -->
<detailExtraction name="bar">
<![CDATA[name="bar"\s+value="([^"]+)"]]>
</detailExtraction>
</request>
<request type="POST" uri="/next">
<!-- use extracted placeholder values in next request -->
<param name="foo">${foo}</param>
<param name="bar">${bar}</param>
</request>
</requestFlow>
The detailExtraction
element must have a regular expression pattern as text content that identifies what to extract. It may be wrapped into a CDATA block. The regular expression is applied against the response body using java.util.regex.Matcher.find()
. The element can have the following attributes:
| Attribute | Description | Required |
|---|---|---|
|
The key under which the extracted value is stored in the |
yes |
|
The value is always extracted from a capturing group. This attribute identifies the index of the group. Defaults to |
no |
|
If |
no |
|
Default value to use if no subsequence matching the regular expression pattern is found in the response body. |
no |
|
By default, the result of the first match is extracted. If |
no |
Response Header Extraction
Response header may be extracted and store in the PlaceholderContainer
as well. By default, the name of the headser is used as the placeholder name. An alternative placeholder name my optionally be specified. See example below.
Header Extraction Example
<?xml version="1.0" encoding="UTF-8"?>
<requestFlow>
<request type="GET" uri="/home">
<headerExtraction name="myFirstHeader" />
<headerExtraction name="mySecondHeader" placeholderName="myPlaceholder" />
</request>
</requestFlow>
6.1.4. Validating Responses
A com.mgmtp.perfload.core.web.response.ResponseValidator
is responsible for validating and parsing HTTP responses. The default implementation is the class com.mgmtp.perfload.core.web.response.DefaultResponseParser
. It checks for allowed or forbidden HTTP status codes and error patterns, and can extract details from the response as described above. The com.mgmtp.perfload.core.web.response.DefaultResponseParser
can be configured with properties. If a response is considered invalid, an com.mgmtp.perfload.core.web.response.InvalidResponseException
is thrown, which causes the execution of the current request flow to be aborted (not the whole test, though!).
Checking HTTP Status Codes
Optionally, comma-separated lists of allowed or forbidden HTTP status code may be configured. Allowed and forbidden status codes must be mutually exclusive. Usually, it only makes sense to specify either allowed or forbidden status code, not both.
Example for the Configuration of Allowed and Forbidden HTTP Status Codes
responseParser.allowedStatusCodes=200
responseParser.forbiddenStatusCodes=404,500
Checking the Response Body
Optionally, regular expression patterns may be configured marking a response invalid if a subsequence matching one of the patterns is found in the response body. Multiple pattern may be specified. They must be indexed starting at one.
Exaample for the Configuration of Error Patterns
# check for specific marker the app adds in case of an error
responseParser.errorPattern.1=<!--loadtest stop -->
# make sure the page is complete
responseParser.errorPattern.2=(?is)^((?!</html>).)*$
The first one checks for the error marker <!--loadtest stop -->
which is written to the response whenever an error occurs (e. g. a validation error due to invalid user input). The seconds one checks that the body contains a closing HTML tag making sure the complete response page was returned.
6.1.5. Test Modules
perfLoad supports JSR 330 dependency injection, which driver implementers may take full advantage of. The wiring for JSR 330 is done using Google Guice. A load test driver needs a Guice module which must be specified in the testplan (see [Creating a Testplan](Creating a Testplan)). perfLoad already comes with a pre-configured module for Web load tests com.mgmtp.perfload.core.web.config.WebLtModule
which is sufficient for simple tests that are not parameterized with special test data. For more flexibility, a custom Guice module is required.
Custom Guice modules must inherit from com.mgmtp.perfload.core.client.config.AbstractLtModule
. For Web tests, com.mgmtp.perfload.core.weg.config.AbstractWebLtModule
should be subclassed. Custom modules for Web load tests must install com.mgmtp.perfload.core.web.config.WebLtModule
and provide additional bindings as needed.
Module Example
public class ExampleModule extends AbstractLtModule {
public ExampleModule(final PropertiesMap testplanProperties) {
super(testplanProperties);
}
@Override
protected void doConfigure() {
// Custom bindings
}
}
Module Example for Web Tests
public class ExampleWebModule extends AbstractWebLtModule {
public ExampleWebModule(final PropertiesMap testplanProperties) {
super(testplanProperties);
}
@Override
protected void doConfigureWebModule() {
install(new WebLtModule(testplanProperties));
// Custom bindings
}
}
6.1.6. Scoping
JSR 330 provides a singleton scope, and, by default, objects are unscoped in Guice, i. e. new instances are created as requested. In addition to that, perfLoad implements a com.mgmtp.perfload.core.client.config.scope.ThreadScope
. This allows it to confine objects to threads, i. e. to each execution of a operation
/target
combination. The com.mgmtp.perfload.core.client.config.scope.ThreadScope
is cleaned up automatically after a test thread is done, so a thread’s state is cleared which is necessary because threads are pooled and may be reused. The annotation com.mgmtp.perfload.core.client.config.annotations.ThreadScoped
can be used to mark classes that should have thread scope.
6.1.7. Events
perfLoad triggers a number of events which driver implementers may react on, e. g. in order to load test data for parameterized tests. The following event listener interfaces can be implemented:
-
com.mgmtp.perfload.core.client.event.LtProcessEventListener
-
com.mgmtp.perfload.core.client.event.LtRunnerEventListener
-
com.mgmtp.perfload.core.web.event.RequestFlowEventListener
Listeners may be registered as follows in the Guice module and are thus themselves subject to JSR 330 injection. For convenience, the class com.mgmtp.perfload.core.client.web.event.LtListenerAdapter
is available which provides a dummy implementation of all three listener interfaces. Note that it is possible that listeners can be scoped. It is e. g. possible to make a listener thread-scoped, i. e. each driver execution gets its own listener confined to the current thread.
Registering Event Listeners
public class ExampleWebModule extends AbstractWebLtModule {
public ExampleWebModule(final PropertiesMap testplanProperties) {
super(testplanProperties);
}
@Override
protected void doConfigureWebModule() {
install(new WebLtModule(testplanProperties));
bindLtProcessEventListener().to(MyListener.class);
bindLtRunnerEventListener().to(MyListener.class);
bindRequestFlowEventListener().to(MyListener.class);
}
}
6.1.8. Waiting Times
It is possible to configure waiting times at the following execution points during a test run:
-
Before the the start of each driver execution
-
Before each request (applies to Web load tests only)
The waiting time before each request is calculated using a com.mgmtp.perfload.core.client.util.WaitingTimeStrategy
. The following implementations are available:
-
com.mgmtp.perfload.core.client.util.ConstantWaitingTimeStrategy
-
com.mgmtp.perfload.core.client.util.EqualDistWaitingTimeStrategy
-
com.mgmtp.perfload.core.client.util.BetaDistWaitingTimeStrategy
The default implementation used is com.mgmtp.perfload.core.client.util.ConstantWaitingTimeStrategy
. It may be overridden in the test’s Guice module:
Setting a WaitingTimeStrategy
public class ExampleModule extends AbstractLtModule {
public ExampleModule(final PropertiesMap testplanProperties) {
super(testplanProperties);
}
@Override
protected void doConfigure() {
bind(WaitingTimeStrategy.class).to(EqualDistWaitingTimeStrategy.class);
}
}
Waiting times are configurable using the following properties.
| Property | Description | Default |
|---|---|---|
|
The random time between 0 and this value each test thread waits before it executes the driver logic. This is useful for static tests only and guarantees for a certain ramp-up time. |
0 |
|
Constant waiting time before each request. |
0 |
|
Applies to |
none |
|
Applies to |
none |
|
Applies to |
none |
|
Applies to |
none |
|
Applies to |
none |
|
Applies to |
none |
The default waiting time is 500 ms between requests. In most cases, the defaults are just fine.
6.1.9. Custom Request Handlers
Out of the box, perfLoad supports all HTTP request types. For certain purposes it might be necessary to implement a custom request handler, e. g. for making calls into Applet code. The following code snippets show how a request handler is registered and configured in a request flow. In this case, the AppletRequestHandler
uses reflection to call a method identified by the uri
of the request.
Registering a Custom Request Handler
public class ExampleWebModule extends AbstractWebLtModule {
public ExampleWebModule(final PropertiesMap testplanProperties) {
super(testplanProperties);
}
@Override
protected void doConfigureWebModule() {
install(new WebLtModule(testplanProperties));
bindRequestHandler("APPLET").to(AppletRequestHandler.class);
}
}
Example for a Request Flow with a Custom Request Handler
<?xml version="1.0" encoding="UTF-8"?>
<requestFlow>
<request type="GET" uri="/home" />
<request type="APPLET" uri="myAppletUri" />
</requestFlow>
If necessary (should not really be the case!), it is possible to override perfLoad’s built-in request handlers using Guice' module overrides.
Example for Overriding the Request Handler for GET requests
public class ExampleWebModule extends AbstractWebLtModule {
public ExampleWebModule(final PropertiesMap testplanProperties) {
super(testplanProperties);
}
@Override
protected void doConfigureWebModule() {
// Install WebLtModule overriding the handler for GET requests.
Module module = Modules.override(new WebLtModule(testplanProperties))
.with(new AbstractWebLtModule(testplanProperties) {
@Override
protected void doConfigureWebModule() {
bindRequestHandler("GET").to(MyCustomGetRequestHandler.class);
}
});
install(module);
}
}
6.1.10. Using the Script Driver
In order to create real-world scenarios, it can be interesting to call scripts that trigger some action during a load test. perfLoad has com.mgmtp.perfload.core.client.driver.ScriptLtDriver
for this use case. In order to use the script driver, it must be configured in perfload.utf8.props
, which is shown in the following table.
| Property | Description | Required |
|---|---|---|
|
The working directory for the new process. If not specified, the current directory is used. |
no |
|
Specifies whether the new process should get a fresh environment. Defaults to |
no |
|
Specifies an environment variable for the new process. |
no |
|
Commands to start the process, indexed starting at 1. The list of commands is passed to |
yes |
|
Specified whether the process' output should be redirected to the log of the client process. Defaults to |
no |
|
Prefix to use for the process’s log when log is redirected. |
no |
|
Specifies whether termination of the process should be awaited. Defaults to |
no |
Configuration Example
# the working directory for the new process
operation.myOperation.procInfo.dir=/home/foo/bar
# should the process inherit the environment or get a fresh one?
operation.myOperation.procInfo.freshEnvironment=true
# environment variable for the new process
operation.myOperation.procInfo.envVars.APP_OPTS=-Dfoo=bar
operation.myOperation.procInfo.envVars.MY_ENV_VAR=baz
# commands for the new process (starting at 1)
operation.myOperation.procInfo.commands.1=/bin/sh -c ./my_script.sh
operation.myOperation.procInfo.commands.2=-param1
operation.myOperation.procInfo.commands.3=-param2=42
# should the process' output be redirected to perfLoad's client log?
operation.myOperation.procInfo.redirectProcessOutput=true
# optional prefix to be used for the process's log when log is redirected
operation.myOperation.procInfo.logPrefix=myProc>
perfLoad automatically selects the ScriptLtDriver
if the properties contain keys starting with operation.<operation>.procInfo
.
6.1.11. Creating a Custom Driver
Custom load test drivers must implement the interface com.mgmtp.perfload.core.client.driver.LtDriver
.
public class MyCustomDriver implements LtDriver {
public void execute() throws Exception {
// custom driver logic goes here
}
}
The driver must be registered in a Guice module under its own key. A com.mgmtp.perfload.core.client.config.DriverSelectionPredicate
must be implemented that decides, based on the current operation and properties, if the driver is selected. When ever perfLoad executes an operation
, it iterates over the selection predicates of registered drivers. The first match is selected. The iteration order is non-deterministic. The selection criteria should thus be distinct.
DriverSelectionPredicate selectionPredicate = new DriverSelectionPredicate() {
@Override
public boolean apply(final String operation, final PropertiesMap properties) {
// return true, if the driver is to be used
// for the specified operation and properties
return properties.containsKey("operation." + operation + ".myCustomDriver");
}
}
bindLtDriver("myCustomDriver").forPredicate(selectionPredicate).to(MyCustomDriver.class);
6.2. Creating a Load Profile
One of perfLoad’s strength is the fact that it uses load profiles. A load profile consist of load profile events. Each events stands for exactly one execution of the load test driver for a specific operation
and target
at a specific time by a specific client process. The load profile define how the load is distributed across all client process on all participating client hosts. For each execution, a new client thread is spawn at the specified time, i. e. the load is guaranteed to follow the profile independently of the load on the system under test.
Load profiles can be created using perfLoad’s Load Profile Editor. The following series of screenshots explains this.
Initially, operations, targets, and clients need to be configured.
Now we can add load curve assignments
for one or multiple operations. A load test may contain executions for one operation only, but combination tests executing multiple operations are supported as well.
image/lpe3.png[Load Profile Settings]
image/lpe4.png[Load Profile Settings]
image/lpe5.png[Load Profile Settings]
When load profile should now be safe and additionally, it must be exported as events file (extension .perfload
). The events file must be copied to console/testplans/loadprofiles
on the controller host.
6.3.  As we have learned, we need a load test driver and a load profile. The testplan is the glue between the driver and the load profile. Multiple testplans may be created in order to run the same driver with different load profiles.
Testplan Example
<?xml version="1.0" encoding="UTF-8"?>
<testplan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://mgm-tp.github.io/perfload/schema/1.0/perfload-testplan.xsd">
<module>com.mgmtp.perfload.example.driver.ExampleModule<module>
<loadProfile>example.perfload</loadProfile>
<testJars>
<testJar>driver-example-1.0.0-SNAPSHOT.jar</testJar>
</testJars>
<!-- optional properties -->
<properties>
<property name="prop1">value1</property>
<property name="prop2">value2</property>
</properties>
<!-- optional JVM args for the client process -->
<jvmargs>
<jvmarg>-Dsysprop1=value1</jvmarg>
<jvmarg>-Dsysprop2=value2</jvmarg>
</jvmargs>
</testplan>
Testplan Reference
| Element | Parent Element | Description | Required |
|---|---|---|---|
|
|
Root element. |
yes |
|
|
The fully qualified class name of the Guice module that configures the test. |
yes |
|
|
The path to the load profile events file. The file is search in subdirectory |
yes |
|
|
Lists jar files the driver needs in addition to those the perfLoad client provides anyways. |
yes |
|
|
A jar file the driver needs. Jar files are search relative to the console’s subdirectory |
At lease one. |
|
|
Container element for properties. |
no |
|
|
A property specific to the testplan. The value of the property must be specified as this element’s content. Testplan properties are merged with those in |
no |
|
|
Container element for additional JVM args for the client process. |
no |
|
|
A JVM argument for the client process. |
no |
Using XInclude in Testplans
XInclude is supported in testplan file, i. e. it is possible to extract test jars to a separate file. It is very common to have many testplans using the same driver. Thus, a separate file reduces redundancy and eases maintainance. Note the usage of the XInclude namespace.
<?xml version="1.0" encoding="UTF-8"?>
<testplan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xi="http://www.w3.org/2001/XInclude"
xsi:noNamespaceSchemaLocation="http://mgm-tp.github.io/perfload/schema/1.0/perfload-testplan.xsd">
<module>com.mgmtp.perfload.example.driver.ExampleModule<module>
<loadProfile>example.perfload</loadProfile>
<xi:include href="testJars.xml" />
</testplan>
<?xml version="1.0" encoding="UTF-8"?>
<testJars>
<testJar>driver-example-1.0.0-SNAPSHOT.jar</testJar>
<testJar>my-special-third-party-dependency.jar</testJar>
</testJars>
6.4. A Complete Example
This page describes a simple example scenario that tests a returns Fibonacci servlet.
6.4.1. The Driver Code
The Guice Module
package com.mgmtp.perfload.example.driver;
import static com.google.common.collect.Maps.newHashMapWithExpectedSize;
import static org.apache.commons.io.IOUtils.lineIterator;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import org.apache.commons.io.LineIterator;
import com.google.inject.Provides;
import com.mgmtp.perfload.core.client.web.config.AbstractWebLtModule;
import com.mgmtp.perfload.core.client.web.config.WebLtModule;
import com.mgmtp.perfload.core.common.util.PropertiesMap;
public class ExampleModule extends AbstractWebLtModule {
public ExampleModule(final PropertiesMap testplanProperties) {
super(testplanProperties);
}
@Override
protected void doConfigureWebModule() {
bindRequestFlowEventListener().to(ExampleListener.class);
install(new WebLtModule(testplanProperties));
}
@TestData
@Provides
Map<String, String> provideTestData() {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
try (InputStream is = cl.getResourceAsStream("testdata/fibonacci.txt")) {
Map<String, String> result = newHashMapWithExpectedSize(20);
for (LineIterator it = lineIterator(is, "UTF-8"); it.hasNext();) {
String line = it.nextLine();
if (line.startsWith("#")) {
continue;
}
String[] columns = line.split(";");
result.put(columns[0], columns[1]);
}
return result;
} catch (IOException ex) {
throw new IllegalStateException("Error reading test data.", ex);
}
}
}
The module installs import com.mgmtp.perfload.core.web.config.WebLtModule
as usual. Plus, it binds a map of test data that is initialized in a provider method and a listener that uses the map in order to select an entry for the current test thread. In this case, the test data is read from a simple text file. In a real-world scenario, a database could be used instead.
Qualifying Annotation for the Test Data Map
package com.mgmtp.perfload.example.driver;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.inject.Qualifier;
@Retention(RUNTIME)
@Target({ FIELD, PARAMETER, METHOD })
@Qualifier
public @interface TestData {
//
}
The annotation TestData
is used in order to further qualify the map. This is necessary if different maps of type Map<String, String>
are bound. The annotation must itself be annotated with @Qualifier
.
Listener for Loading Test Data
package com.mgmtp.perfload.example.driver;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton;
import net.jcip.annotations.Immutable;
import net.jcip.annotations.ThreadSafe;
import com.google.common.collect.ImmutableList;
import com.mgmtp.perfload.core.client.util.PlaceholderContainer;
import com.mgmtp.perfload.core.client.web.event.LtListenerAdapter;
import com.mgmtp.perfload.core.client.web.event.RequestFlowEvent;
@Singleton
public class ExampleListener extends LtListenerAdapter {
private final Provider<PlaceholderContainer> placeholderContainerProvider;
private final List<Entry<String, String>> testDataEntries;
private final Random random = new Random();
@Inject
public ExampleListener(final Provider<PlaceholderContainer> placeholderContainerProvider,
@TestData final Map<String, String> testData) {
this.placeholderContainerProvider = placeholderContainerProvider;
this.testDataEntries = ImmutableList.copyOf(testData.entrySet());
}
@Override
public void beforeRequest(final RequestFlowEvent event) {
int index = random.nextInt(testDataEntries.size());
Entry<String, String> entry = testDataEntries.get(index);
PlaceholderContainer placeholderContainer = placeholderContainerProvider.get();
placeholderContainer.put("n", entry.getKey());
placeholderContainer.put("fibn", entry.getValue());
}
}
The ExampleListener
only implements the method beforeRequest
. It randomly selects a test data entry and adds replacement values for the placeholder tokens n
and fibn
to the PlaceholderContainer
. The class ExampleListener
is bound as a Singleton
and is annotated accordingly. The PlaceholderContainer
is bound by perfLoad and has ThreadScope
. Thus, it should not be injected directly, but a Provider<PlaceholderContainer>
should be injected instead. Otherwise, its scope would effectively be widened to that of a Singleton
. JSR 330 allows it to inject a provider instead of a direct instance making it possible to always get a correctly scoped object.
6.4.2. The Request Flow
Request Flow with two Requests
<?xml version="1.0" encoding="UTF-8"?>
<requestFlow xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="http://mgm-tp.github.io/perfload/schema/1.0/perfload-request-flow.xsd">
<request type="GET" uri="/fibonacci">
<param name="n">${n}</param>
<detailExtraction name="fibn" >(${fibn})</detailExtraction>
</request>
<request type="POST" uri="/fibonacci">
<param name="n">${n}</param>
<detailExtraction name="fibn">(${fibn})</detailExtraction>
</request>
</requestFlow>
This is a simple request flow that contains a GET and a POST request to the servlet. Upon execution, the placeholders are replaced. The servlet is supposed to return the +nth Fibonacci number as plain text. The expected result is then extracted from the response. Of course, this is a somewhat contrived example. In a real-world scenario, one would e. g. extract some id from the response that must be added as a parameter to the following request.
6.4.3. The Testplan
Fibonacci Testplan
<?xml version="1.0" encoding="utf-8"?>
<testplan xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="http://mgm-tp.github.io/perfload/schema/1.0/perfload-testplan.xsd">
<module>com.mgmtp.perfload.core.test.client.TestClientModule</module>
<loadProfile>fibonacci.perfload</loadProfile>
<testJars>
<testJar>driver-example-1.0.0.jar"</testJar>
</testJars>
</testplan>
7.  Please bear with us…
8. Downloads
All perfLoad artifacts and distributions are available on Maven Central:
Maven Dependency for Load Test Driver Development
<dependency>
<groupId>com.mgmtp.perfload.core</groupId>
<artifactId>perfload-client</artifactId>
<version>insert current version</version>
</dependency>
9. Tips and Tricks for Load Testing
To be filled with life. Please bear with us…
11. Need Help?
Join the discussion list:
12. Found a Bug?
Use the Github issue tracker:
13. Want to Get Involved?
We’ll be happy to accept pull requests. Here’s the list of Github repositories:
-
perfLoad Core (Console, client, and Daemon) https://github.com/mgm-tp/perfload-core
-
Load Profile Editor https://github.com/mgm-tp/perfload-loadprofiles
-
Logging Library https://github.com/mgm-tp/perfload-logging
-
Reference Application https://github.com/mgm-tp/perfload-ref-app


AlphaDropout
Applies Alpha Dropout to the input.
Inherits From: Layer
tf.compat.v1.keras.layers.AlphaDropout
tf.compat.v2.keras.layers.AlphaDropout
Alpha Dropout is a Dropout
that keeps mean and variance of inputs
to their original values, in order to ensure the self-normalizing property
even after this dropout.
Alpha Dropout fits well to Scaled Exponential Linear Units
by randomly setting activations to the negative saturation value.
rate
: float, drop probability (as with Dropout
).
The multiplicative noise will have
standard deviation sqrt(rate / (1 - rate))
.seed
: A Python integer to use as random seed.inputs
: Input tensor (of any rank).training
: Python boolean indicating whether the layer should behave in
training mode (adding dropout) or in inference mode (doing nothing).Arbitrary. Use the keyword argument input_shape
(tuple of integers, does not include the samples axis)
when using this layer as the first layer in a model.
Same shape as input.
__init__
__init__( rate, noise_shape=None, seed=None, **kwargs )


We need this information to set up your project.
Project information
You provided these details for the overall project.
..you
..you
| Action | Information | Status |
|---|---|---|
|
Target start date
|
|
|
|
Correspondence address
|
|
Incomplete Complete |
Project location
Your organisation must provide a project location. We assign the monitoring officer based on location.
| Partner | Project location | Actions |
|---|---|---|
|
|
|
Edit |


View upcoming events, and your reservations.
1 Imperial Plaza,
Gotham 754773
Democratic Republic of Gotham
Experience the Outstanding Comfort of Superior Amenities™
© 2019 All Rights Reserved.


| s_cc |
This is set when you log in to NHS login.
It lets us know that you have logged in and tells us who you are so we can keep your information secure. |
When you close your browser |
| s_sq |
This is set when you use NHS login for the first time.
It stores information passed to us from the health websites and apps you are using with NHS login. We use it to make sure only they can see your information.
It will only be set if the health websites and apps are approved by us.
|
When you close your browser |
| s_vi |
This lets us know your unique visitor I.D. time/date stamp that tells us the time and date you first visit NHS login.
|
2 years |
| s_fid |
This lets us know your unique visitor I.D. time/date stamp. It is only used if the s_vi cookie is blocked by your browser.
|
2 years |
| AMCV_###@AdobeOrg |
This lets us know your unique visitor I.D. when you use NHS login.
|
2 years |
| s_ppv and s_ppvl |
This stores information which lets us know how far you scroll down the page.
|
When you leave NHS login |
| s_nr |
This stores information which lets us know the dates you visit NHS login and if you have used it before.
|
2 years |
| gpv |
This stores information which lets us know how many of our pages you visited.
|
The end of session |
| AMCVS |
This is set when you first log in. It lets us know your unique visitor I.D. each time you use NHS login.
|
2 years |
| Demdex |
This uses a tool called Audience Manager which allows us to know your unique visitor I.D. each time you use NHS login and other NHS online services.
|
2 years |


My Team
Amy
Manager
ID: 1
Email<EMAIL_ADDRESS>Office Number:<PHONE_NUMBER>
Nick
Engineer
ID: 2
Email<EMAIL_ADDRESS>GitHub: example123
Josh
Intern
ID: 3
Email<EMAIL_ADDRESS>School: This is School Name


{{alert.text}}
{{alert.button.text}}
It will be great if you can rate us.
Please share any feedback, including what you do or dont like about 'What is my IP'.
| Version {{appInfo.version}} |
| (c) What is my IP, 2015 |
| Please leave questions, bug reports, or comments to: |
| Email<EMAIL_ADDRESS>|


Screenshoterest doesn't work on special browser pages, such as the "New tab", "Downloads", "Settings" pages and so on.
If this is not the case, please reload the page and try again.
OK
Simple
Responsive (beta)


MI6 Agency's Drink Shop
Shopping Cart
Checkout
Sign Up
Login
Log Out
Are You ready to check out, 00-{{shoppingCart.customer.name}}?
{%if shoppingCart.products==[]%}
There are no items in your shopping cart, agent.
{%else%}
Name
Price (one)
Quantity
Total
{%for item in shoppingCart.products %}
{{item.product.name}}
${{item.product.price}}
{{item.quantity}}
${{(item.product.price|float*item.quantity)}}
{%endfor%}
Total
${{total}}
{%endif%}


{# Table of subject and text variables for messages. #}
The message subject line and text body may contain variables which are substituted according to the table.
| Variable | Value |
|---|---|
{host} |
The name of the hosting site. |
{host_url} |
The URL of the hosting site. |
{identifier} |
The identifier of the {{ terminology('order') }}. |
{owner} |
The account owning the {{ terminology('order') }}; usually its creator. |
{site} |
The name of the OrderPortal site. |
{site_url} |
The URL of the OrderPortal site. |
{support} |
The contact email for the OrderPortal site. |
{tags} |
The tags set for the {{ terminology('order') }}, if any. |
{title} |
The title of the {{ terminology('order') }}. |
{url} |
The absolute URL for the {{ terminology('order') }}. |


Cedros Island is situated off Mexico's western coast. This region is the real Baja, not a regular tourist destination; with honest, authentic and resilient people who adopted Cedros island as their home, and have been living from their abundant ocean resources for generations.
It's pricipal industry is the export of salt, and because of this Cedros’ port ranks as Mexico's third-largest, carrying over 7 million metric tons of salt per year. The population is reported as being somewhere between 1500-5,000 persons as there are many seasonal residents, such as relatives moving in and out, visiting in summer, and those who come for the fishing season to work.
There are two main towns on Cedros Island, El Morro, and Cedros Town. The former is at the southernmost point of the island, where the employees of the salt company live in housing and infrastructure provided by the company. Cedros Town is about four times bigger; most of the inhabitants are fishermen, service providers and small business owners.
Cedros Town: Position 28°02.35'N, 115°11.7'W.
The San Benitos Islands are situated about 16 miles West of Cedros Island and are a great destination for wildlife watching, hiking and snorkelling. Cruisers liken these islands to the Galapagos with very friendly fishermen and amazing wildlife. See reports adjacent with further details.
You will need to officially clear into Mexico at Ensenada before stopping at Isla Cedros harbour as you cannot clear Immigration and obtain a Tourist Permit here. (Note: Cedros harbour is listed in some books as a port of entry as there are indeed 2 immigration officials based here. Whilst they can do the appropriate paperwork, there is no bank on the island at which you can pay for the tourist permit and therefore immediate departure for another port of entry would be required in order to avoid a fine.)
Visiting yachts will need to check in with the Port Captain, come alongside the dock where the Port Captain offices are located.
Make sure you have your valid Mexican tourist permit, and your fishing permit (if you plan to fish) before stopping here.
Last updated February 2012.
There are no facilities or moorings for yachts here. Anchor off Cedros Town after checking in. El Morro town, 5 miles south, is where salt is off loaded and the main docks are situated.
With advance notice Cedros Outdoor Adventures can help to pre-arrange docking and landing on the island.
Cedros town has a recently paved main street leading from the harbour. The fishing co-op runs a cannery, a couple of small grocery stores (beer and liquor, limited selection of foods, mostly dried and canned, with produce and ice especially hard to come by), a couple of cafes and two restaurants. El Marino and La Pacenita serve breakfasts, good Mexican food and seafood in the local styles. There are also taco stands, burritos, and hotdogs on vending cars at night. Food, snacks, beer and liquor can be purchased in local stores.
The island also has 2 churches, a pharmacy, an airport serving various destinations in Baja California and a new hotel with internet service and hot showers.
Last updated February 2012.


This page is served by a JavaScript example program preloaded on your neonious one.
Try out your board:
AJAX request to toggle buttons failed!
Visit the IDE under /neonious/ to start hacking!
If you want it secure, try HTTPS. It is working, but might not with your setup.
See manual for an exact explanation on why.
External resources:
| http://www.neonious.com/TPManual | Be creative on what to do with this board! But, to know the limits, get educated what you can do with this board here. |
| http://www.neonious.com/Kickstarter | Support our Kickstarter, and get the final board with much more possibilities!
Get the neonious 1800x RGB-LED kit to turn the JavaScript power into great animations. Highlighted in our Kickstarter video! Consider the neonious IoT Electronics Kit: The all-in-one package to get you a full IoT electronics education. Includes over 150 large and small pieces, and a text book with many examples on how to connect them to develop anything you can imagine. Or just give a thank you donation to our Kickstarter! |


{{text}} ?
All information associated to this campaign will be permanently deleted. This operation can not be undone.
With this action you create copy of current campaign with all widgets and images.