Diese Seite wird von Englisch auf Deutsch übersetzt. Sprichst Du Deutsch?
Selenium RC was the main Selenium project for a long time, before the WebDriver/Selenium merge brought up Selenium 2, a more powerful tool. It is worth to highlight that Selenium 1 is not supported anymore.
First, we will describe how the components of Selenium RC operate and the role each plays in running your test scripts.
Selenium RC components are:
Here is a simplified architecture diagram:
The diagram shows the client libraries communicate with the Server passing each Selenium command for execution. Then the server passes the Selenium command to the browser using Selenium-Core JavaScript commands. The browser, using its JavaScript interpreter, executes the Selenium command. This runs the Selenese action or verification you specified in your test script.
Selenium Server receives Selenium commands from your test program, interprets them, and reports back to your program the results of running those tests.
The RC server bundles Selenium Core and automatically injects it into the browser. This occurs when your test program opens the browser (using a client library API function). Selenium-Core is a JavaScript program, actually a set of JavaScript functions which interprets and executes Selenese commands using the browser’s built-in JavaScript interpreter.
The Server receives the Selenese commands from your test program using simple HTTP GET/POST requests. This means you can use any programming language that can send HTTP requests to automate Selenium tests on the browser.
The client libraries provide the programming support that allows you to run Selenium commands from a program of your own design. There is a different client library for each supported language. A Selenium client library provides a programming interface (API), i.e., a set of functions, which run Selenium commands from your own program. Within each interface, there is a programming function that supports each Selenese command.
The client library takes a Selenese command and passes it to the Selenium Server for processing a specific action or test against the application under test (AUT). The client library also receives the result of that command and passes it back to your program. Your program can receive the result and store it into a program variable and report it as a success or failure, or possibly take corrective action if it was an unexpected error.
So to create a test program, you simply write a program that runs a set of Selenium commands using a client library API. And, optionally, if you already have a Selenese test script created in the Selenium-IDE, you can generate the Selenium RC code. The Selenium-IDE can translate (using its Export menu item) its Selenium commands into a client-driver’s API function calls. See the Selenium-IDE chapter for specifics on exporting RC code from Selenium-IDE.
Installation is rather a misnomer for Selenium. Selenium has a set of libraries available in the programming language of your choice. You could download them from the downloads page.
Once you’ve chosen a language to work with, you simply need to:
The Selenium RC server is simply a Java jar file (selenium-server-standalone-
Before starting any tests you must start the server. Go to the directory where Selenium RC’s server is located and run the following from a command-line console.
java -jar selenium-server-standalone-<version-number>.jar
This can be simplified by creating a batch or shell executable file (.bat on Windows and .sh on Linux) containing the command above. Then make a shortcut to that executable on your desktop and simply double-click the icon to start the server.
For the server to run you’ll need Java installed and the PATH environment variable correctly configured to run it from the console. You can check that you have Java correctly installed by running the following on a console.
java -version
If you get a version number (which needs to be 1.5 or later), you’re ready to start using Selenium RC.
For details on Java test project configuration, see the Appendix sections Configuring Selenium RC With Eclipse and Configuring Selenium RC With Intellij.
For details on Python client driver configuration, see the appendix Python Client Driver Configuration.
For specific details on .NET client driver configuration with Visual Studio, see the appendix .NET client driver configuration.
gem install selenium-client
require "selenium/client"
For details on Ruby client driver configuration, see the Selenium-Client documentation
_
The primary task for using Selenium RC is to convert your Selenese into a programming language. In this section, we provide several different language-specific examples.
Let’s start with an example Selenese test script. Imagine recording the following test with Selenium-IDE.
| open | / | |
| type | q | selenium rc |
| clickAndWait | btnG | |
| assertTextPresent | Results * for selenium rc |
Note: This example would work with the Google search page http://www.google.com
Here is the test script exported (via Selenium-IDE) to each of the supported programming languages. If you have at least basic knowledge of an object- oriented programming language, you will understand how Selenium runs Selenese commands by reading one of these examples. To see an example in a specific language, select one of these buttons.
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using Selenium;
namespace SeleniumTests
{
[TestFixture]
public class NewTest
{
private ISelenium selenium;
private StringBuilder verificationErrors;
[SetUp]
public void SetupTest()
{
selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com/");
selenium.Start();
verificationErrors = new StringBuilder();
}
[TearDown]
public void TeardownTest()
{
try
{
selenium.Stop();
}
catch (Exception)
{
// Ignore errors if unable to close the browser
}
Assert.AreEqual("", verificationErrors.ToString());
}
[Test]
public void TheNewTest()
{
selenium.Open("/");
selenium.Type("q", "selenium rc");
selenium.Click("btnG");
selenium.WaitForPageToLoad("30000");
Assert.AreEqual("selenium rc - Google Search", selenium.GetTitle());
}
}
}
/** Add JUnit framework to your classpath if not already there
* for this example to work
*/
package com.example.tests;
import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;
public class NewTest extends SeleneseTestCase {
public void setUp() throws Exception {
setUp("http://www.google.com/", "*firefox");
}
public void testNew() throws Exception {
selenium.open("/");
selenium.type("q", "selenium rc");
selenium.click("btnG");
selenium.waitForPageToLoad("30000");
assertTrue(selenium.isTextPresent("Results * for selenium rc"));
}
}
<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class Example extends PHPUnit_Extensions_SeleniumTestCase
{
function setUp()
{
$this->setBrowser("*firefox");
$this->setBrowserUrl("http://www.google.com/");
}
function testMyTestCase()
{
$this->open("/");
$this->type("q", "selenium rc");
$this->click("btnG");
$this->waitForPageToLoad("30000");
$this->assertTrue($this->isTextPresent("Results * for selenium rc"));
}
}
?>
from selenium import selenium
import unittest, time, re
class NewTest(unittest.TestCase):
def setUp(self):
self.verificationErrors = []
self.selenium = selenium("localhost", 4444, "*firefox",
"http://www.google.com/")
self.selenium.start()
def test_new(self):
sel = self.selenium
sel.open("/")
sel.type("q", "selenium rc")
sel.click("btnG")
sel.wait_for_page_to_load("30000")
self.failUnless(sel.is_text_present("Results * for selenium rc"))
def tearDown(self):
self.selenium.stop()
self.assertEqual([], self.verificationErrors)
require "selenium/client"
require "test/unit"
class NewTest < Test::Unit::TestCase
def setup
@verification_errors = []
if $selenium
@selenium = $selenium
else
@selenium = Selenium::Client::Driver.new("localhost", 4444, "*firefox", "http://www.google.com/", 60);
@selenium.start
end
@selenium.set_context("test_new")
end
def teardown
@selenium.stop unless $selenium
assert_equal [], @verification_errors
end
def test_new
@selenium.open "/"
@selenium.type "q", "selenium rc"
@selenium.click "btnG"
@selenium.wait_for_page_to_load "30000"
assert @selenium.is_text_present("Results * for selenium rc")
end
end
In the next section we’ll explain how to build a test program using the generated code.
Now we’ll illustrate how to program your own tests using examples in each of the supported programming languages. There are essentially two tasks:
Optionally, you can adopt a test engine platform like JUnit or TestNG for Java, or NUnit for .NET if you are using one of those languages.
Here, we show language-specific examples. The language-specific APIs tend to differ from one to another, so you’ll find a separate explanation for each.
For Java, people use either JUnit or TestNG as the test engine.
Some development environments like Eclipse have direct support for these via
plug-ins. This makes it even easier. Teaching JUnit or TestNG is beyond the scope of
this document however materials may be found online and there are publications
available. If you are already a “java-shop” chances are your developers will
already have some experience with one of these test frameworks.
You will probably want to rename the test class from “NewTest” to something of your own choosing. Also, you will need to change the browser-open parameters in the statement:
selenium = new DefaultSelenium("localhost", 4444, "*iehta", "http://www.google.com/");
The Selenium-IDE generated code will look like this. This example has comments added manually for additional clarity.
package com.example.tests;
// We specify the package of our tests
import com.thoughtworks.selenium.*;
// This is the driver's import. You'll use this for instantiating a
// browser and making it do what you need.
import java.util.regex.Pattern;
// Selenium-IDE add the Pattern module because it's sometimes used for
// regex validations. You can remove the module if it's not used in your
// script.
public class NewTest extends SeleneseTestCase {
// We create our Selenium test case
public void setUp() throws Exception {
setUp("http://www.google.com/", "*firefox");
// We instantiate and start the browser
}
public void testNew() throws Exception {
selenium.open("/");
selenium.type("q", "selenium rc");
selenium.click("btnG");
selenium.waitForPageToLoad("30000");
assertTrue(selenium.isTextPresent("Results * for selenium rc"));
// These are the real test steps
}
}
C#
The .NET Client Driver works with Microsoft.NET. It can be used with any .NET testing framework like NUnit or the Visual Studio 2005 Team System.
Selenium-IDE assumes you will use NUnit as your testing framework. You can see this in the generated code below. It includes the using statement for NUnit along with corresponding NUnit attributes identifying the role for each member function of the test class.
You will probably have to rename the test class from “NewTest” to something of your own choosing. Also, you will need to change the browser-open parameters in the statement:
selenium = new DefaultSelenium("localhost", 4444, "*iehta", "http://www.google.com/");
The generated code will look similar to this.
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using Selenium;
namespace SeleniumTests
{
[TestFixture]
public class NewTest
{
private ISelenium selenium;
private StringBuilder verificationErrors;
[SetUp]
public void SetupTest()
{
selenium = new DefaultSelenium("localhost", 4444, "*iehta",
"http://www.google.com/");
selenium.Start();
verificationErrors = new StringBuilder();
}
[TearDown]
public void TeardownTest()
{
try
{
selenium.Stop();
}
catch (Exception)
{
// Ignore errors if unable to close the browser
}
Assert.AreEqual("", verificationErrors.ToString());
}
[Test]
public void TheNewTest()
{
// Open Google search engine.
selenium.Open("http://www.google.com/");
// Assert Title of page.
Assert.AreEqual("Google", selenium.GetTitle());
// Provide search term as "Selenium OpenQA"
selenium.Type("q", "Selenium OpenQA");
// Read the keyed search term and assert it.
Assert.AreEqual("Selenium OpenQA", selenium.GetValue("q"));
// Click on Search button.
selenium.Click("btnG");
// Wait for page to load.
selenium.WaitForPageToLoad("5000");
// Assert that "www.openqa.org" is available in search results.
Assert.IsTrue(selenium.IsTextPresent("www.openqa.org"));
// Assert that page title is - "Selenium OpenQA - Google Search"
Assert.AreEqual("Selenium OpenQA - Google Search",
selenium.GetTitle());
}
}
}
You can allow NUnit to manage the execution
of your tests. Or alternatively, you can write a simple main()
program that
instantiates the test object and runs each of the three methods, SetupTest()
,
TheNewTest()
, and TeardownTest()
in turn.
Pyunit is the test framework to use for Python.
The basic test structure is:
from selenium import selenium
# This is the driver's import. You'll use this class for instantiating a
# browser and making it do what you need.
import unittest, time, re
# This are the basic imports added by Selenium-IDE by default.
# You can remove the modules if they are not used in your script.
class NewTest(unittest.TestCase):
# We create our unittest test case
def setUp(self):
self.verificationErrors = []
# This is an empty array where we will store any verification errors
# we find in our tests
self.selenium = selenium("localhost", 4444, "*firefox",
"http://www.google.com/")
self.selenium.start()
# We instantiate and start the browser
def test_new(self):
# This is the test code. Here you should put the actions you need
# the browser to do during your test.
sel = self.selenium
# We assign the browser to the variable "sel" (just to save us from
# typing "self.selenium" each time we want to call the browser).
sel.open("/")
sel.type("q", "selenium rc")
sel.click("btnG")
sel.wait_for_page_to_load("30000")
self.failUnless(sel.is_text_present("Results * for selenium rc"))
# These are the real test steps
def tearDown(self):
self.selenium.stop()
# we close the browser (I'd recommend you to comment this line while
# you are creating and debugging your tests)
self.assertEqual([], self.verificationErrors)
# And make the test fail if we found that any verification errors
# were found
Old (pre 2.0) versions of Selenium-IDE generate Ruby code that requires the old Selenium gem. Therefore, it is advisable to update any Ruby scripts generated by the IDE as follows:
On line 1, change require "selenium"
to require
"selenium/client"
On line 11, change Selenium::SeleniumDriver.new
to
Selenium::Client::Driver.new
You probably also want to change the class name to something more informative than “Untitled,” and change the test method’s name to something other than “test_untitled.”
Here is a simple example created by modifying the Ruby code generated by Selenium IDE, as described above.
# load the Selenium-Client gem
require "selenium/client"
# Load Test::Unit, Ruby's default test framework.
# If you prefer RSpec, see the examples in the Selenium-Client
# documentation.
require "test/unit"
class Untitled < Test::Unit::TestCase
# The setup method is called before each test.
def setup
# This array is used to capture errors and display them at the
# end of the test run.
@verification_errors = []
# Create a new instance of the Selenium-Client driver.
@selenium = Selenium::Client::Driver.new \
:host => "localhost",
:port => 4444,
:browser => "*chrome",
:url => "http://www.google.com/",
:timeout_in_second => 60
# Start the browser session
@selenium.start
# Print a message in the browser-side log and status bar
# (optional).
@selenium.set_context("test_untitled")
end
# The teardown method is called after each test.
def teardown
# Stop the browser session.
@selenium.stop
# Print the array of error messages, if any.
assert_equal [], @verification_errors
end
# This is the main body of your test.
def test_untitled
# Open the root of the site we specified when we created the
# new driver instance, above.
@selenium.open "/"
# Type 'selenium rc' into the field named 'q'
@selenium.type "q", "selenium rc"
# Click the button named "btnG"
@selenium.click "btnG"
# Wait for the search results page to load.
# Note that we don't need to set a timeout here, because that
# was specified when we created the new driver instance, above.
@selenium.wait_for_page_to_load
begin
# Test whether the search results contain the expected text.
# Notice that the star (*) is a wildcard that matches any
# number of characters.
assert @selenium.is_text_present("Results * for selenium rc")
rescue Test::Unit::AssertionFailedError
# If the assertion fails, push it onto the array of errors.
@verification_errors << $!
end
end
end
The members of the documentation team have not used Selenium RC with Perl or PHP. If you are using Selenium RC with either of these two languages please contact the Documentation Team (see the chapter on contributing). We would love to include some examples from you and your experiences, to support Perl and PHP users.
The Selenium RC API uses naming conventions
that, assuming you understand Selenese, much of the interface
will be self-explanatory. Here, however, we explain the most critical and
possibly less obvious aspects.
selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com/");
selenium.Start();
setUp("http://www.google.com/", "*firefox");
my $sel = Test::WWW::Selenium->new( host => "localhost",
port => 4444,
browser => "*firefox",
browser_url => "http://www.google.com/" );
$this->setBrowser("*firefox");
$this->setBrowserUrl("http://www.google.com/");
self.selenium = selenium("localhost", 4444, "*firefox",
"http://www.google.com/")
self.selenium.start()
@selenium = Selenium::ClientDriver.new("localhost", 4444, "*firefox", "http://www.google.com/", 10000);
@selenium.start
Each of these examples opens the browser and represents that browser by assigning a “browser instance” to a program variable. This program variable is then used to call methods from the browser. These methods execute the Selenium commands, i.e. like open or type or the verify commands.
The parameters required when creating the browser instance are:
host Specifies the IP address of the computer where the server is located. Usually, this is the same machine as where the client is running, so in this case localhost is passed. In some clients this is an optional parameter.
port Specifies the TCP/IP socket where the server is listening waiting for the client to establish a connection. This also is optional in some client drivers.
browser The browser in which you want to run the tests. This is a required parameter.
url The base url of the application under test. This is required by all the client libs and is integral information for starting up the browser-proxy-AUT communication.
Note that some of the client libraries require the browser to be started explicitly by calling
its start()
method.
Once you have the browser initialized and assigned to a variable (generally named “selenium”) you can make it run Selenese commands by calling the respective methods from the browser variable. For example, to call the type method of the selenium object:
selenium.type("field-id","string to type")
In the background the browser will actually perform a type operation,
essentially identical to a user typing input into the browser, by
using the locator and the string you specified during the method call.
Selenium RC does not have its own mechanism for reporting results. Rather, it allows you to build your reporting customized to your needs using features of your chosen programming language. That’s great, but what if you simply want something quick that’s already done for you? Often an existing library or test framework can meet your needs faster than developing your own test reporting code.
Test frameworks are available for many programming languages. These, along with their primary function of providing a flexible test engine for executing your tests, include library code for reporting results. For example, Java has two commonly used test frameworks, JUnit and TestNG. .NET also has its own, NUnit.
We won’t teach the frameworks themselves here; that’s beyond the scope of this user guide. We will simply introduce the framework features that relate to Selenium along with some techniques you can apply. There are good books available on these test frameworks however along with information on the internet.
Also available are third-party libraries specifically created for reporting test results in your chosen programming language. These often support a variety of formats such as HTML or PDF.
Most people new to the testing frameworks will begin with the framework’s built-in reporting features. From there most will examine any available libraries as that’s less time consuming than developing your own. As you begin to use Selenium no doubt you will start putting in your own “print statements” for reporting progress. That may gradually lead to you developing your own reporting, possibly in parallel to using a library or test framework. Regardless, after the initial, but short, learning curve you will naturally develop what works best for your own situation.
To illustrate, we’ll direct you to some specific tools in some of the other languages supported by Selenium. The ones listed here are commonly used and have been used extensively (and therefore recommended) by the authors of this guide.
If Selenium Test cases are developed using JUnit then JUnit Report can be used to generate test reports.
If Selenium Test cases are developed using TestNG then no external task is required to generate test reports. The TestNG framework generates an HTML report which list details of tests.
ReportNG is a HTML reporting plug-in for the TestNG framework. It is intended as a replacement for the default TestNG HTML report. ReportNG provides a simple, colour-coded view of the test results.
Now we’ll get to the whole reason for using Selenium RC, adding programming logic to your tests. It’s the same as for any program. Program flow is controlled using condition statements and iteration. In addition you can report progress information using I/O. In this section we’ll show some examples of how programming language constructs can be combined with Selenium to solve common testing problems.
You will find as you transition from the simple tests of the existence of
page elements to tests of dynamic functionality involving multiple web-pages and
varying data that you will require programming logic for verifying expected
results. Basically, the Selenium-IDE does not support iteration and
standard condition statements. You can do some conditions by embedding javascript
in Selenese parameters, however
iteration is impossible, and most conditions will be much easier in a
programming language. In addition, you may need exception handling for
error recovery. For these reasons and others, we have written this section
to illustrate the use of common programming techniques to
give you greater ‘verification power’ in your automated testing.
The examples in this section are written in C# and Java, although the code is simple and can be easily adapted to the other supported languages. If you have some basic knowledge of an object-oriented programming language you shouldn’t have difficulty understanding this section.
Iteration is one of the most common things people need to do in their tests. For example, you may want to to execute a search multiple times. Or, perhaps for verifying your test results you need to process a “result set” returned from a database.
Using the same Google search example we used earlier, let’s check the Selenium search results. This test could use the Selenese:
| open | / | |
| type | q | selenium rc |
| clickAndWait | btnG | |
| assertTextPresent | Results * for selenium rc | |
| type | q | selenium ide |
| clickAndWait | btnG | |
| assertTextPresent | Results * for selenium ide | |
| type | q | selenium grid |
| clickAndWait | btnG | |
| assertTextPresent | Results * for selenium grid |
The code has been repeated to run the same steps 3 times. But multiple copies of the same code is not good program practice because it’s more work to maintain. By using a programming language, we can iterate over the search results for a more flexible and maintainable solution.
C#
// Collection of String values.
String[] arr = {"ide", "rc", "grid"};
// Execute loop for each String in array 'arr'.
foreach (String s in arr) {
sel.open("/");
sel.type("q", "selenium " +s);
sel.click("btnG");
sel.waitForPageToLoad("30000");
assertTrue("Expected text: " +s+ " is missing on page."
, sel.isTextPresent("Results * for selenium " + s));
}
To illustrate using conditions in tests we’ll start with an example. A common problem encountered while running Selenium tests occurs when an expected element is not available on page. For example, when running the following line:
selenium.type("q", "selenium " +s);
If element ‘q’ is not on the page then an exception is thrown:
com.thoughtworks.selenium.SeleniumException: ERROR: Element q not found
This can cause your test to abort. For some tests that’s what you want. But often that is not desirable as your test script has many other subsequent tests to perform.
A better approach is to first validate whether the element is really present and then take alternatives when it it is not. Let’s look at this using Java.
// If element is available on page then perform type operation.
if(selenium.isElementPresent("q")) {
selenium.type("q", "Selenium rc");
} else {
System.out.printf("Element: " +q+ " is not available on page.")
}
The advantage of this approach is to continue with test execution even if some UI elements are not available on page.
JavaScript comes very handy in exercising an application which is not directly supported by selenium. The getEval method of Selenium API can be used to execute JavaScript from Selenium RC.
Consider an application having check boxes with no static identifiers. In this case one could evaluate JavaScript from Selenium RC to get ids of all check boxes and then exercise them.
public static String[] getAllCheckboxIds () {
String script = "var inputId = new Array();";// Create array in java script.
script += "var cnt = 0;"; // Counter for check box ids.
script += "var inputFields = new Array();"; // Create array in java script.
script += "inputFields = window.document.getElementsByTagName('input');"; // Collect input elements.
script += "for(var i=0; i<inputFields.length; i++) {"; // Loop through the collected elements.
script += "if(inputFields[i].id !=null " +
"&& inputFields[i].id !='undefined' " +
"&& inputFields[i].getAttribute('type') == 'checkbox') {"; // If input field is of type check box and input id is not null.
script += "inputId[cnt]=inputFields[i].id ;" + // Save check box id to inputId array.
"cnt++;" + // increment the counter.
"}" + // end of if.
"}"; // end of for.
script += "inputId.toString();" ;// Convert array in to string.
String[] checkboxIds = selenium.getEval(script).split(","); // Split the string.
return checkboxIds;
}
To count number of images on a page:
selenium.getEval("window.document.images.length;");
Remember to use window object in case of DOM expressions as by default selenium window is referred to, not the test window.
When the server is launched, command line options can be used to change the default server behaviour.
Recall, the server is started by running the following.
$ java -jar selenium-server-standalone-<version-number>.jar
To see the list of options, run the server with the -h
option.
$ java -jar selenium-server-standalone-<version-number>.jar -h
You’ll see a list of all the options you can use with the server and a brief description of each. The provided descriptions will not always be enough, so we’ve provided explanations for some of the more important options.
If your AUT is behind an HTTP proxy which requires authentication then you should configure http.proxyHost, http.proxyPort, http.proxyUser and http.proxyPassword using the following command.
$ java -jar selenium-server-standalone-<version-number>.jar -Dhttp.proxyHost=proxy.com -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password
If you are using Selenium 1.0 you can probably skip this section, since multiwindow mode is the default behavior. However, prior to version 1.0, Selenium by default ran the application under test in a sub frame as shown here.
Some applications didn’t run correctly in a sub frame, and needed to be loaded into the top frame of the window. The multi-window mode option allowed the AUT to run in a separate window rather than in the default frame where it could then have the top frame it required.
For older versions of Selenium you must specify multiwindow mode explicitly with the following option:
-multiwindow
As of Selenium RC 1.0, if you want to run your test within a single frame (i.e. using the standard for earlier Selenium versions) you can state this to the Selenium Server using the option
-singlewindow
Firefox will not run two instances simultaneously unless you specify a separate profile for each instance. Selenium RC 1.0 and later runs in a separate profile automatically, so if you are using Selenium 1.0, you can probably skip this section. However, if you’re using an older version of Selenium or if you need to use a specific profile for your tests (such as adding an https certificate or having some addons installed), you will need to explicitly specify the profile.
First, to create a separate Firefox profile, follow this procedure. Open the Windows Start menu, select “Run”, then type and enter one of the following:
firefox.exe -profilemanager
firefox.exe -P
Create the new profile using the dialog. Then when you run Selenium Server, tell it to use this new Firefox profile with the server command-line option -firefoxProfileTemplate and specify the path to the profile using its filename and directory path.
-firefoxProfileTemplate "path to the profile"
Warning: Be sure to put your profile in a new folder separate from the default!!! The Firefox profile manager tool will delete all files in a folder if you delete a profile, regardless of whether they are profile files or not.
More information about Firefox profiles can be found in Mozilla’s Knowledge Base
You can run Selenese html files directly within the Selenium Server by passing the html file to the server’s command line. For instance:
java -jar selenium-server-standalone-<version-number>.jar -htmlSuite "*firefox"
"http://www.google.com" "c:\absolute\path\to\my\HTMLSuite.html"
"c:\absolute\path\to\my\results.html"
This will automatically launch your HTML suite, run all the tests and save a nice HTML report with the results.
Note: When using this option, the server will start the tests and wait for a specified number of seconds for the test to complete; if the test doesn’t complete within that amount of time, the command will exit with a non-zero exit code and no results file will be generated.
This command line is very long so be careful when
you type it. Note this requires you to pass in an HTML
Selenese suite, not a single test. Also be aware the -htmlSuite option is incompatible with -interactive
You cannot run both at the same time.
When launching Selenium server the -log option can be used to record valuable debugging information reported by the Selenium Server to a text file.
java -jar selenium-server-standalone-<version-number>.jar -log selenium.log
This log file is more verbose than the standard console logs (it includes DEBUG level logging messages). The log file also includes the logger name, and the ID number of the thread that logged the message. For example:
20:44:25 DEBUG [12] org.openqa.selenium.server.SeleniumDriverResourceHandler -
Browser 465828/:top frame1 posted START NEW
The message format is
TIMESTAMP(HH:mm:ss) LEVEL [THREAD] LOGGER - MESSAGE
This message may be multiline.
JavaScript on the browser side (Selenium Core) also logs important messages; in many cases, these can be more useful to the end-user than the regular Selenium Server logs. To access browser-side logs, pass the -browserSideLog argument to the Selenium Server.
java -jar selenium-server-standalone-<version-number>.jar -browserSideLog
-browserSideLog must be combined with the -log argument, to log browserSideLogs (as well as all other DEBUG level logging messages) to a file.
You can specify to Selenium RC a path to a specific browser. This is useful if you have different versions of the same browser and you wish to use a specific one. Also, this is used to allow your tests to run against a browser not directly supported by Selenium RC. When specifying the run mode, use the *custom specifier followed by the full path to the browser’s executable:
*custom <path to browser>
Note: This topic tries to explain the technical implementation behind Selenium RC. It’s not fundamental for a Selenium user to know this, but could be useful for understanding some of the problems you might find in the future.
To understand in detail how Selenium RC Server works and why it uses proxy injection
and heightened privilege modes you must first understand the same origin policy
_.
The main restriction that Selenium faces is the Same Origin Policy. This security restriction is applied by every browser in the market and its objective is to ensure that a site’s content will never be accessible by a script from another site. The Same Origin Policy dictates that any code loaded within the browser can only operate within that website’s domain. It cannot perform functions on another website. So for example, if the browser loads JavaScript code when it loads www.mysite.com, it cannot run that loaded code against www.mysite2.com–even if that’s another of your sites. If this were possible, a script placed on any website you open would be able to read information on your bank account if you had the account page opened on other tab. This is called XSS (Cross-site Scripting).
To work within this policy, Selenium-Core (and its JavaScript commands that make all the magic happen) must be placed in the same origin as the Application Under Test (same URL).
Historically, Selenium-Core was limited by this problem since it was implemented in JavaScript. Selenium RC is not, however, restricted by the Same Origin Policy. Its use of the Selenium Server as a proxy avoids this problem. It, essentially, tells the browser that the browser is working on a single “spoofed” website that the Server provides.
Note: You can find additional information about this topic on Wikipedia pages about Same Origin Policy and XSS.
The first method Selenium used to avoid the The Same Origin Policy was Proxy Injection. In Proxy Injection Mode, the Selenium Server acts as a client-configured HTTP proxy1, that sits between the browser and the Application Under Test2. It then masks the AUT under a fictional URL (embedding Selenium-Core and the set of tests and delivering them as if they were coming from the same origin).
Here is an architectural diagram.
As a test suite starts in your favorite language, the following happens:
This workflow in this method is very similar to Proxy Injection but the main difference is that the browsers are launched in a special mode called Heightened Privileges, which allows websites to do things that are not commonly permitted (as doing XSS_, or filling file upload inputs and pretty useful stuff for Selenium). By using these browser modes, Selenium Core is able to directly open the AUT and read/interact with its content without having to pass the whole AUT through the Selenium RC server.
Here is the architectural diagram.
As a test suite starts in your favorite language, the following happens:
Many applications switch from using HTTP to HTTPS when they need to send encrypted information such as passwords or credit card information. This is common with many of today’s web applications. Selenium RC supports this.
To ensure the HTTPS site is genuine, the browser will need a security certificate. Otherwise, when the browser accesses the AUT using HTTPS, it will assume that application is not ‘trusted’. When this occurs the browser displays security popups, and these popups cannot be closed using Selenium RC.
When dealing with HTTPS in a Selenium RC test, you must use a run mode that supports this and handles the security certificate for you. You specify the run mode when your test program initializes Selenium.
In Selenium RC 1.0 beta 2 and later use *firefox or *iexplore for the run mode. In earlier versions, including Selenium RC 1.0 beta 1, use *chrome or *iehta, for the run mode. Using these run modes, you will not need to install any special security certificates; Selenium RC will handle it for you.
In version 1.0 the run modes *firefox or *iexplore are recommended. However, there are additional run modes of *iexploreproxy and *firefoxproxy. These are provided for backwards compatibility only, and should not be used unless required by legacy test programs. Their use will present limitations with security certificate handling and with the running of multiple windows if your application opens additional browser windows.
In earlier versions of Selenium RC, *chrome or *iehta were the run modes that supported HTTPS and the handling of security popups. These were considered ‘experimental modes although they became quite stable and many people used them. If you are using Selenium 1.0 you do not need, and should not use, these older run modes.
Normally, your browser will trust the application you are testing by installing a security certificate which you already own. You can check this in your browser’s options or Internet properties (if you don’t know your AUT’s security certificate ask your system administrator). When Selenium loads your browser it injects code to intercept messages between the browser and the server. The browser now thinks untrusted software is trying to look like your application. It responds by alerting you with popup messages.
To get around this, Selenium RC, (again when using a run mode that support this) will install its own security certificate, temporarily, to your client machine in a place where the browser can access it. This tricks the browser into thinking it’s accessing a site different from your AUT and effectively suppresses the popups.
Another method used with earlier versions of Selenium was to install the Cybervillians security certificate provided with your Selenium installation. Most users should no longer need to do this however; if you are running Selenium RC in proxy injection mode, you may need to explicitly install this security certificate.
The Selenium API supports running against multiple browsers in addition to Internet Explorer and Mozilla Firefox. See the https://selenium.dev website for supported browsers. In addition, when a browser is not directly supported, you may still run your Selenium tests against a browser of your choosing by using the “*custom” run-mode (i.e. in place of *firefox or *iexplore) when your test application starts the browser. With this, you pass in the path to the browsers executable within the API call. This can also be done from the Server in interactive mode.
cmd=getNewBrowserSession&1=*custom c:\Program Files\Mozilla Firefox\MyBrowser.exe&2=http://www.google.com
Normally Selenium RC automatically configures the browser, but if you launch the browser using the “*custom” run mode, you can force Selenium RC to launch the browser as-is, without using an automatic configuration.
For example, you can launch Firefox with a custom configuration like this:
cmd=getNewBrowserSession&1=*custom c:\Program Files\Mozilla Firefox\firefox.exe&2=http://www.google.com
Note that when launching the browser this way, you must manually configure the browser to use the Selenium Server as a proxy. Normally this just means opening your browser preferences and specifying “localhost:4444” as an HTTP proxy, but instructions for this can differ radically from browser to browser. Consult your browser’s documentation for details.
Be aware that Mozilla browsers can vary in how they start and stop. One may need to set the MOZ_NO_REMOTE environment variable to make Mozilla browsers behave a little more predictably. Unix users should avoid launching the browser using a shell script; it’s generally better to use the binary executable (e.g. firefox-bin) directly.
When getting started with Selenium RC there’s a few potential problems that are commonly encountered. We present them along with their solutions here.
When your test program cannot connect to the Selenium Server, Selenium throws an exception in your test program. It should display this message or a similar one:
"Unable to connect to remote server (Inner Exception Message:
No connection could be made because the target machine actively
refused it )"
(using .NET and XP Service Pack 2)
If you see a message like this, be sure you started the Selenium Server. If so, then there is a problem with the connectivity between the Selenium Client Library and the Selenium Server.
When starting with Selenium RC, most people begin by running their test program (with a Selenium Client Library) and the Selenium Server on the same machine. To do this use “localhost” as your connection parameter. We recommend beginning this way since it reduces the influence of potential networking problems which you’re getting started. Assuming your operating system has typical networking and TCP/IP settings you should have little difficulty. In truth, many people choose to run the tests this way.
If, however, you do want to run Selenium Server on a remote machine, the connectivity should be fine assuming you have valid TCP/IP connectivity between the two machines.
If you have difficulty connecting, you can use common networking tools like ping, telnet, ifconfig(Unix)/ipconfig (Windows), etc to ensure you have a valid network connection. If unfamilar with these, your system administrator can assist you.
Ok, not a friendly error message, sorry, but if the Selenium Server cannot load the browser you will likely see this error.
(500) Internal Server Error
This could be caused by
If your test program starts the browser successfully, but the browser doesn’t display the website you’re testing, the most likely cause is your test program is not using the correct URL.
This can easily happen. When you use Selenium-IDE to export your script, it inserts a dummy URL. You must manually change the URL to the correct one for your application to be tested.
This most often occurs when you run your Selenium RC test program against Firefox, but you already have a Firefox browser session running and, you didn’t specify a separate profile when you started the Selenium Server. The error from the test program looks like this:
Error: java.lang.RuntimeException: Firefox refused shutdown while
preparing a profile
Here’s the complete error message from the server:
16:20:03.919 INFO - Preparing Firefox profile...
16:20:27.822 WARN - GET /selenium-server/driver/?cmd=getNewBrowserSession&1=*fir
efox&2=http%3a%2f%2fsage-webapp1.qa.idc.com HTTP/1.1
java.lang.RuntimeException: Firefox refused shutdown while preparing a profile
at org.openqa.selenium.server.browserlaunchers.FirefoxCustomProfileLaunc
her.waitForFullProfileToBeCreated(FirefoxCustomProfileLauncher.java:277)
...
Caused by: org.openqa.selenium.server.browserlaunchers.FirefoxCustomProfileLaunc
her$FileLockRemainedException: Lock file still present! C:\DOCUME~1\jsvec\LOCALS
~1\Temp\customProfileDir203138\parent.lock
To resolve this, see the section on Specifying a Separate Firefox Profile
Make sure your version of Selenium supports the version of your browser. For example, Selenium RC 0.92 does not support Firefox 3. At times you may be lucky (I was). But don’t forget to check which browser versions are supported by the version of Selenium you are using. When in doubt, use the latest release version of Selenium with the most widely used version of your browser.
This error says you’re not using a correct version of Java. The Selenium Server requires Java 1.5 or higher.
To check double-check your java version, run this from the command line.
java -version
You should see a message showing the Java version.
java version "1.5.0_07"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)
Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode)
If you see a lower version number, you may need to update the JRE, or you may simply need to add it to your PATH environment variable.
If you’re getting a 404 error while attempting to open a page on “http://www.google.com/selenium-server/", then it must be because the Selenium Server was not correctly configured as a proxy. The “selenium-server” directory doesn’t exist on google.com; it only appears to exist when the proxy is properly configured. Proxy Configuration highly depends on how the browser is launched with firefox, iexplore, opera, or custom.
iexplore: If the browser is launched using *iexplore, you could be having a problem with Internet Explorer’s proxy settings. Selenium Server attempts To configure the global proxy settings in the Internet Options Control Panel. You must make sure that those are correctly configured when Selenium Server launches the browser. Try looking at your Internet Options control panel. Click on the “Connections” tab and click on “LAN Settings”.
Proxy Configuration
_ for more details.custom: When using *custom you must configure the proxy correctly(manually), otherwise you’ll get a 404 error. Double-check that you’ve configured your proxy settings correctly. To check whether you’ve configured the proxy correctly is to attempt to intentionally configure the browser incorrectly. Try configuring the browser to use the wrong proxy server hostname, or the wrong port. If you had successfully configured the browser’s proxy settings incorrectly, then the browser will be unable to connect to the Internet, which is one way to make sure that one is adjusting the relevant settings.
For other browsers (*firefox, *opera) we automatically hard-code the proxy for you, and so there are no known issues with this functionality. If you’re encountering 404 errors and have followed this user guide carefully post your results to user group for some help from the user community.
The most common reason for this error is that your session is attempting to violate the same-origin policy by crossing domain boundaries (e.g., accesses a page from http://domain1 and then accesses a page from http://domain2) or switching protocols (moving from http://domainX to https://domainX).
This error can also occur when JavaScript attempts to find UI objects which are not yet available (before the page has completely loaded), or are no longer available (after the page has started to be unloaded). This is most typically encountered with AJAX pages which are working with sections of a page or subframes that load and/or reload independently of the larger page.
This error can be intermittent. Often it is impossible to reproduce the problem
with a debugger because the trouble stems from race conditions which
are not reproducible when the debugger’s overhead is added to the system.
Permission issues are covered in some detail in the tutorial. Read the section
about the The Same Origin Policy
, Proxy Injection
carefully.
There are several kinds of “Popups” that you can get during a Selenium test. You may not be able to close these popups by running Selenium commands if they are initiated by the browser and not your AUT. You may need to know how to manage these. Each type of popup needs to be addressed differently.
HTTP basic authentication dialogs: These dialogs prompt for a
username/password to login to the site. To login to a site that requires
HTTP basic authentication, use a username and password in the URL, as
described in RFC 1738
_, like this: open(“http://myusername:myuserpassword@myexample.com/blah/blah/blah").
SSL certificate warnings: Selenium RC automatically attempts to spoof SSL certificates when it is enabled as a proxy; see more on this in the section on HTTPS. If your browser is configured correctly, you should never see SSL certificate warnings, but you may need to configure your browser to trust our dangerous “CyberVillains” SSL certificate authority. Again, refer to the HTTPS section for how to do this.
modal JavaScript alert/confirmation/prompt dialogs: Selenium tries to conceal those dialogs from you (by replacing window.alert, window.confirm and window.prompt) so they won’t stop the execution of your page. If you’re seeing an alert pop-up, it’s probably because it fired during the page load process, which is usually too early for us to protect the page. Selenese contains commands for asserting or verifying alert and confirmation popups. See the sections on these topics in Chapter 4.
On Unix/Linux you must invoke “firefox-bin” directly, so make sure that executable is on the path.  You can specify the path to firefox-bin directly, like this.
cmd=getNewBrowserSession&1=*firefox /usr/local/firefox/firefox-bin&2=http://www.google.com
Check Firefox profile folder -> prefs.js -> user_pref(“browser.startup.page”, 0); Comment this line like this: “//user_pref(“browser.startup.page”, 0);” and try again.
No. Selenium relies on interceptors to determine window names as they are being loaded. These interceptors work best in catching new windows if the windows are loaded AFTER the onload() function. Selenium may not recognize windows loaded before the onload function.
On Unix/Linux, versions of Selenium before 1.0 needed to invoke “firefox-bin” directly, so if you are using a previous version, make sure that the real executable is on the path.
On most Linux distributions, the real firefox-bin is located on:
/usr/lib/firefox-x.x.x/
Where the x.x.x is the version number you currently have. So, to add that path to the user’s path. you will have to add the following to your .bashrc file:
export PATH="$PATH:/usr/lib/firefox-x.x.x/"
If necessary, you can specify the path to firefox-bin directly in your test, like this:
"*firefox /usr/lib/firefox-x.x.x/firefox-bin"
If you are running your tests on Internet Explorer and you cannot locate
elements using their style
attribute.
For example:
//td[@style="background-color:yellow"]
This would work perfectly in Firefox, Opera or Safari but not with IE.
IE interprets the keys in @style
as uppercase. So, even if the
source code is in lowercase, you should use:
//td[@style="BACKGROUND-COLOR:yellow"]
This is a problem if your test is intended to work on multiple browsers, but you can easily code your test to detect the situation and try the alternative locator that only works in IE.
To avoid this error you have to start browser with an option that disables same origin policy checks:
selenium.start("commandLineFlags=--disable-web-security");
To avoid this error you have to configure the browser: disable the popup blocker AND uncheck ‘Enable Protected Mode’ option in Tools >> Options >> Security.


I received my MPH (Epidemiology & Global Health) from the Yale School of Public Health, and have an MEng (undergraduate) in Bioengineering from Imperial College London. I have worked at the Yale Global Health Leadership Institute as a researcher and program manager.
When away from keyboard, I can be found tending to my offspring -- a human and a Sheepadoodle named Tintin. I read promiscuously but veer towards young adult, sci-fi, and literature.
I also spend a lot of time thinking about food. I used to run a food Instagram called Carb My Enthusiasm.
P.S. The X in my name stands for Xulin, which is my legal name. My entire family actually has called me Annabel since birth, but never actually put it in legal documents.


The Trap Goblin
Character Level
1st - 4th
5th - 10th
11th - 15th
16th - 20th
Damage Severity
setback
dangerous
deadly
Damage Type
piercing
slashing
crushing
fire
electrical
cold
necrotic
Generate Trap!
Your Trap:


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/automatic.20cases.html ---
Can we have a tactic that does cases
on the argument of XX.rec
or XX.rec_on
?
That sounds like a really nice basic tactic for a tactic-learner to write!
good! are you a tactic-learner?
Maybe @Chris Hughes is? I think he got a bit disheartened when he realised he had 100 questions and couldn't face asking Mario and Simon all of them though...
(and of course I was no help)
Maybe there should be a basic tactic-writing thread. The workflow I see is: start Zulip thread, spam it with basic questions which are not covered in PIL, experts occasionally make insightful comments, someone writes some notes and sticks them up in the mathlib docs project, we all learn something.
From Programming In Lean:
open tactic meta def destruct_conjunctions : tactic unit := repeat (do l ← local_context, first $ l.map (λ h, do ht ← infer_type h >>= whnf, match ht with | `(and %%a %%b) := do n ← get_unused_name `h none, mk_mapp ``and.left [none, none, some h] >>= assertv n a, n ← get_unused_name `h none, mk_mapp ``and.right [none, none, some h] >>= assertv n b, clear h | _ := failed end)) example (P Q : Prop) (HPQ : P ∧ Q) : false := begin destruct_conjunctions, exact false.intro end
That's how to break up an and
in the hypotheses. You just want to break up a rec
in the conclusion. How hard can it be? ;-)
Maybe there should be a basic tactic-writing thread. The workflow I see is: start Zulip thread, spam it with basic questions which are not covered in PIL, experts occasionally make insightful comments, someone writes some notes and sticks them up in the mathlib docs project, we all learn something.
Or a "tactics" stream? We've got a "maths" stream after all. This seems like a general enough topic (in the non-Zulip sense) to turn it into a stream.
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


Former YEEZY Designer Launches Affordable Tabi Sneaker and New Brand
ILYSM is both a creative studio and conscious design label.
by Jake SilbertJoining the YEEZY alumni already dabbling in sneaker design, former junior YEEZY designer Sara Jaramillo co-created a new footwear model to kick off a new venture dubbed ILYSM. Self-described as a “non-conventional platform to launch merch and projects,” ILYSM’s aim is to present a debut offering that succinctly encapsulates its worldview; this is accomplished by its premiere footwear model, designed by Alice Wang and Jaramillo (who also has experience as Proenza Schouler’s accessories designer): a sustainable tabi-inspired shoe offered at an affordable price point.
Though the tabi silhouette isn’t inherently distinct in the footwear industry, ILYSM’s offering stands out due to its contemporary, thoughtful construction. Crafted from yarn sourced from a mill that specializes in natural and traceable products, the shoes are designed from the ground up with consciousness in mind. Offered in white and black colorways, the uppers are specifically designed to save 30% in waste material over other sneaker models, thanks to a pattern that knits the uppers exactly to shape.
Each shoe utilizes textiles that blend threads of recycled polyester, viscose and silk for comfort and durability, with a merino wool sockliner that inherently reduces smell from sweat and footbed supported by a layer of mulesing-free merino wool and recycled foam.
The tabi sneakers will retail for $99 USD and debut on ILYSM’s e-commerce site December 10.
Meanwhile, Maison Margiela‘s iconic spin on the tabi design recently received a “Bounce” sole update.


Author: Lagarde Jeremie
Level: Intermediate
Technologies: CDI, JMX, MBean
Summary: The helloworld-mbean
quickstart demonstrates the use of CDI and MBean in JBoss EAP and includes JConsole instructions and Arquillian tests.
Target Product: JBoss EAP
Source: https://github.com/jboss-developer/jboss-eap-quickstarts/
The helloworld-mbean
quickstart demonstrates the use of CDI and MBean in Red Hat JBoss Enterprise Application Platform. The project also includes a set of Arquillian tests for MBeans.
The example is composed of the following MBeans:
AnnotatedComponentHelloWorld
: This MBean is a managed bean with @MXBean
annotation.
MXComponentHelloWorld
: This MBean is a managed bean with MXBean
interface.
MXPojoHelloWorld
: This MBean is a pojo using MXBean interface and declared in the jboss-service.xml
file.
SarMXPojoHelloWorld
: This MBean is a pojo using MXBean interface and declared in jboss-service.xml in SAR packaging.
The application this project produces is designed to be run on Red Hat JBoss Enterprise Application Platform 7.1 or later.
All you need to build this project is Java 8.0 (Java SDK 1.8) or later and Maven 3.3.1 or later. See Configure Maven for JBoss EAP 7.1 to make sure you are configured correctly for testing the quickstarts.
In the following instructions, replace EAP7_HOME
with the actual path to your JBoss EAP installation. The installation path is described in detail here: Use of EAP7_HOME and JBOSS_HOME Variables.
For Linux: EAP7_HOME/bin/standalone.sh
For Windows: EAP7_HOME\bin\standalone.bat
mvn clean install wildfly:deploy
This will deploy helloworld-mbean-webapp/target/helloworld-mbean-webapp.war
and helloworld-mbean-service/target/helloworld-mbean-service.sar
to the running instance of the server.
This quickstart differs from the other quickstarts in that it uses JConsole to access and test the quickstart rather than access an URL in the browser. If you do access http://localhost:8080/helloworld-mbean-webapp/, you will see a screen shot image of the JConsole application,
The following sections describe how to use JConsole to inspect and test the MBeans.
To connect to the JBoss EAP server using JConsole, open a command prompt and type the following command :
For Linux: JDK_HOME/bin/jconsole
For Windows: JDK_HOME\bin\jconsole.exe
Select the local org.jboss.modules.Main
process and click Connect
.
A dialog displays with the warning Secure connection failed. Retry insecurely?
. Click Insecure
to continue.
You can use JConsole to inspect and use the MBeans :
quickstarts
in the left column of the console.quickstarts
, you see the 4 MBeans: AnnotatedComponentHelloWorld
, MXComponentHelloWorld
, MXPojoHelloWorld
, and SarMXPojoHelloWorld
Operations
--> sayHello
.sayHello
button.AnnotatedComponentHelloWorld
and MXComponentHelloWorld
examples, you will see a popup Window displaying Hello <your name>!
.MXPojoHelloWorld
and SarMXPojoHelloWorld
examples, you will see a popup Window displaying Welcome <your name>!
.mvn wildfly:undeploy
This quickstart provides Arquillian tests. By default, these tests are configured to be skipped as Arquillian tests require the use of a container.
mvn clean verify -Parq-remote
You can also let Arquillian manage the JBoss EAP server by using the arq-managed
profile. For more information about how to run the Arquillian tests, see Run the Arquillian Tests.
You can also start the server and deploy the quickstarts or run the Arquillian tests from Eclipse using JBoss tools. For general information about how to import a quickstart, add a JBoss EAP server, and build and deploy a quickstart, see Use JBoss Developer Studio or Eclipse to Run the Quickstarts.
This quickstart consists of multiple projects and requires installation of the JBoss Tools Maven Packaging Configurator
, so it deploys and runs differently in JBoss Developer Studio than the other quickstarts.
Red Hat Central
page is not showing, open it by choosing Help
--> Red Hat Central
.Software/Update
tab at the bottom of the Red Hat Central
.Maven
section, select the JBoss Tools Maven Packaging Configurator
and click Install/Update
.helloworld-mbean
parent project and choose Maven
--> Update Project...
. Select all projects and click OK
.helloworld-mbean-service
project and choose Run As
--> Run on Server
.helloworld-mbean-webapp
project and choose Run As
--> Run on Server
.helloworld-mbean-wepapp
project and choose Run As
--> Maven build
. Enter wildfly:undeploy
for the Goals
and click Run
.helloworld-mbean-service
project and choose Run As
--> Maven build
. Enter wildfly:undeploy
for the Goals
and click Run
.If you want to debug the source code of any library in the project, run the following command to pull the source into your local repository. The IDE should then detect it.
mvn dependency:sources


Hong Chen, Sebastian Schmidt, Odele Coddington, Gala Wind,
Anthony Bucholtz, Michal Segal Rozenhaimer, Samuel LeBlanc
Presented by
Hong Chen
Why are they important?
When they are thin, LWP is small
Surface is already bright
Moderate increase of cooling in shortwave
Significant increase of warming in longwave
When they are thick, LWP is large
Reflect more solar radiation
Significant increase of cooling in shortwave
Moderate increase of warming in longwave
1. Can MODIS detect the low-level thin clouds?
2. Are the MODIS cloud retrievals for low-level thin clouds reliable?
Arctic Radiation-IceBridge Sea & Ice Experiment
Solar Spectra Flux Radiometer (SSFR)
($\mathrm{W m^{-2} nm^{-1}}$) SSFR
Spectral context
SZA-dependent azimuth response
Spectral cosine response
BBR ($\mathrm{W m^{-2}}$)
Consistent azimuth response
Stable cosine response
No spectral context
2014-09-11 (Above Clouds)
Broadband Flux Comparison
Broadband Flux Comparison
Clear Sky?
Spectral Flux Comparison (Upwelling)
2014-09-13 (Below Clouds)
SSFR Derived Snow/Ice Surface Albedo
Broadband Flux Comparison
Spectral Flux Comparison (Downwelling)
1. The MODIS "1621" cloud products provide good estimate of cloud optical parameters over snow/ice in the Arctic.
2. However, optically thin clouds remain undetected. These clouds constitute a significant fraction of the total cloud cover during ARISE cases.
3. SSFR spectral irradiance measurements provide surface albedo, which can be used as boundary conditions for cloud retrievals and the calculation of cloud radiative effects.


Home
About
Contact
Privacy Policy
Discord Server
Update V1.0
ELO.GG
is released. What are you waiting for? Let's play!


Hello world how are you today?
This is a test of the use of ligatures to encode icons in a fun and cool way. Now you can insert graphics just through very simple text edditing, kind of like having emoticons!
Sadly ligs aren't supported in IE before version 10!
We will also test the
for the CSS :before and :after pseudo elements


Here are some of our Favorite Places!
Brazil
Denmark
Costa Rica
Thailand
Here is a photo gallery of our favorite places!


BabyMeals |
Privacy-first and ad-free baby meal timer app for iOS. Start and stop the timer with a single touch or hands-free using your voice with Siri.
Keep an overview of meal times and frequency to understand your baby's food needs better. All data is securely stored only on your device.
The BabyMeals app is designed from the ground up to protect your and your baby's information. It doesn’t gather your personal information to sell to advertisers or other organizations. BabyMeals requires no sign-up and does not contain 3rd-party products and services like analytics or advertising networks. These may share with others your information to serve such advertising.
BabyMeals is build upon Apple's development platform for iPhone and iPad. Information collected by Apple is governed by their privacy policy. We encourage you to learn about their privacy practises as you install BabyMeal or other apps.
Please contact us, if you have any questions or concerns about BabyMeal's Privacy Policy.


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/appveyor.html ---
What is appveyor doing in the build process?
I have a PR on which appveyor is failing, but everything else looks ok: https://github.com/leanprover-community/mathlib/pull/938#partial-pull-merging
Appveyor tests the install scripts on windows
It's broken here as well. https://github.com/leanprover-community/mathlib/pull/937
that seems like an issue with python
Trying to install python dependencies fails to establish a connection. We may have to wait
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.
It uses utility classes for typography and spacing to space content out within the larger container.
 If you feel like you’re stuck on a treadmill in your business… …always working hard, longer hours, always under pressure… …you are limited by technical knowledge to get things done yourself… …thinking that nobody else can do it like you so its a waste of time to get help… …staying small and only serving a handful of clients, instead of creating scale and making a much bigger impact… …never quite enough leads, enough clients, enough time or enough income… …neglecting other areas of life, such as health and relationships… …wondering what it is that you’re missing, why nothing seems to work for you… …then you need a JoeThePlug assistant!
JoeThePlug makes businesses better. 1000+ companies rely on JoeThePlug to help them run their business. Why? It helps them get more done in less time without all the chaos and confusion
Finally breakthrough the frustration of trying to grow your business yourself. Focus on your most important work, not on time sucking tasks and routine. Imagine having a reliable go-to person for every need in your business. Actually, you don’t have to imagine it. We spend over $10,000 to train and certify each assistant so you can be sure the help is just a click away.  Do what you love and we will do everything else!
Finally breakthrough the frustration of trying to grow your business yourself. Focus on your most important work, not on time sucking tasks and routine. Imagine having a reliable go-to person for every need in your business. Actually, you don’t have to imagine it. We spend over $10,000 to train and certify each assistant so you can be sure the help is just a click away.  Do what you love and we will do everything else!
The common misconception is – the more you pay, the more you get. The truth is – you are just paying agencies and freelance platforms for more markup. Not for more help to grow your business and achieve your dreams faster. You shouldn’t pay more to get less. No more expensive agencies, unreliable freelancers or overseas assistants. At Vasumo, we cut out the middlemen, so you can get America’s best trained and experienced assistants at fair and honest prices. No contracts, no gotchas, no hidden anything, ever. Finally!
Vasumo is the secret weapon of successful people. Every Vasumo assistant is trained for over 3 months in 300 tasks and takes over 16 certifications including Google and Facebook Certified Programs, Digital Marketer’s Email Marketing, Conversion Funnel, Search Marketing, Copywriting, Paid Traffic, Content Marketing, Ecommerce Marketing, Social Media & Community, Analytics & Data, Conversion Optimization and Testing Mastery and more. It’s true, we all have the same amount of hours in a day as Beyoncé and Tim Ferris but we obviously don’t all use our time in the same way. It turns out that successful people are usually great at delegating tasks so that they can focus on their most important work. No more excuses. Now you’re ready to go take on the world!
From online stores and agencies to coaches, local businesses and consulting firms, business owners choose Vasumo assistants to get professional help and grow their businesses faster.


Kerala is popularly known as God’s own Country. It is also known as Land of Spices. The state is actually named after the coconut tree. "Kera" means Coconut tree and "Alam" means land; so “Kerala” means Land of Coconut Trees.
Kerala, a state on India's tropical Malabar Coast, has nearly 600km of Arabian Sea shoreline. It's known for its palm-lined beaches and backwaters, a network of canals. Inland are the Western Ghats, mountains whose slopes support tea, coffee and spice plantations as well as wildlife. National parks like Eravikulam and Periyar, plus Wayanad and other sanctuaries, are home to elephants, langur monkeys and tigers.
Lush green tea plantations, serene winding backwaters and spice plantations are a few features that define Kerala as one of the most popular tourist destinations in India. Popular as ‘God’s Own Country’ Kerala is a haven for travellers who come here to unwind in the salubrious climes, away from the concrete jungle. In a state where the topography ranges from cool hills to balmy sea beaches, Kerala is a sight for sore eyes.


Quick way to create List, Set and Map
published by Pradeep on March 21, 2018
Java 9 introduced of() static methods in List, Map and Set interfaces. This method will help us to create collection easily. I got surprised to see this method, it is lot easier to use and easier to remember and less verbose. Lets see some examples of using this method.
//list contains four string objects
List<String> numbers = List.of("one", "two", "three", "four");
Iterator on this list will give us the same order in which we inserted. Before java 9 we have only option to create list like this, is using Arrays.asList method. In the List interface you will see multiple overloaded of() methods, each of them takes variable number of parameters. below is the list;
static <E> List<E> of()
static <E> List<E> of(E e1)
static <E> List<E> of(E e1, E e2)
static <E> List<E> of(E e1, E e2, E e3)
static <E> List<E> of(E e1, E e2, E e3, E e4)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10)
static <E> List<E> of(E... elements)
There are eleven overloaded methods to handle up to ten input parameters and twelfth one takes ‘varargs’. of() is not just for List, same kind of overloaded methods are available in Set and Map as well. Except in Map there is no ‘varargs’ method.
//set contains two string objects
Set<String> numbers = Set.of("one", "two");
Note that if you pass duplicate object into set then it throws IllegalArgumentException, because in set, duplicates are not allowed.
//map contains three entries
Map<Integer, String> numbers = Map.of(1, "one", 2, "two", 3, "three");
See, how easy it is to create map objects. We need to pass key and values like normal parameters to the of() method. You can also create Map with entry objects using ofEntries() method.
Map<Integer, String> numbers = Map.ofEntries(
Map.entry(1, "one"),
Map.entry(2, "two"),
Map.entry(3, "three"));
Duplicate keys are not allowed in Map, it will throw IllegalArgumentException.
This method creates immutable collection means; once created, no element can be added, removed or replaced and no nulls are allowed when creating the collection object.


Input Contours
Test Geometry:
Winding Rule:
Output
Expectation
Output Boundaries
Expectation Boundaries


|
Copley Motion Library
|
This class represents an object that can be used by multiple threads to gain safe access to a shared resource. More...
Public Member Functions | |
| Mutex (void) | |
| Create a new mutex object. | |
| virtual | ~Mutex () |
| Free any system resources associated with the mutex. | |
| const Error * | Lock (void) |
| Lock the mutex. More... | |
| const Error * | Unlock (void) |
| Unlock the mutex. More... | |
This class represents an object that can be used by multiple threads to gain safe access to a shared resource.
If an attempt is made to lock a mutex that is currently locked by another thread, the thread attempting the lock will be suspended until the thread holding the lock releases it. Mutex objects are not required to allow recursive access.
| const Error* Lock | ( | void | ) |
Lock the mutex.
This function causes the calling function to gain exclusive access to the mutex object. If some other thread has the mutex locked when this method is called, the calling thread will block until the mutex is unlocked.
| const Error* Unlock | ( | void | ) |
Unlock the mutex.
This function causes the calling thread to give up it's lock on the mutex. A task switch may occur before this call returns if a high priority task is currently trying to lock the mutex.


--- title: Investigating difftime behavior author: Ildi Czeller date: '2018-04-02' slug: investigating-difftime-behavior categories: ["R"] tags: ["base R", "S3", "lookup"] ---
Author: Ildi Czeller, @czeildi on Twitter and Github
It caused me a great deal of headache to work around as.difftime
to get what I wanted but also I learned much more than I expected along the way so I wanted to share the journey with you.
I had a data frame with two columns containing timestamps and I wanted to calculate the difference between them.
## send_time open_time
## 1: 2018-04-01 00:01:00 2018-04-01 00:07:00
## 2: 2018-04-02 00:01:00 2018-04-02 02:01:00
In the first row, there are 6 minutes between send and open time and in the second row there are 2 hours. The essence of the unexpected behavior I experienced:
dt[, open_time - send_time][2]
## Time difference of 120 mins
dt[2, open_time - send_time]
## Time difference of 2 hours
Basically the result for one row depends on other rows in the data frame.
My first idea was to explicitly provide the units
argument. However, it did not help.
dt[, as.difftime(open_time - send_time, units = "hours")][2]
## Time difference of 120 mins
I found that if I create a difftime object with difftime
and not with subtraction it works as I expect.
dt[, difftime(open_time, send_time, units = "hours")][2]
## Time difference of 2 hours
base_time <- lubridate::ymd_hms("2018-04-01 00:00:00")
later_times <- base_time + c(
lubridate::period(1, "month"),
lubridate::period(1, "day"),
lubridate::period(1, "minute"),
lubridate::period(1, "second")
)
later_times[1:1] - base_time
## Time difference of 30 days
later_times[1:2] - base_time
## Time differences in days
## [1] 30 1
later_times[1:3] - base_time
## Time differences in mins
## [1] 43200 1440 1
later_times[1:4] - base_time
## Time differences in secs
## [1] 2592000 86400 60 1
Based on this I am quite confident to say that firstly the smallest unit will be used for all values and secondly subtraction won’t result in units greater than a day.
units
not help?It still puzzled me why the explicit units
argument did not help. Time to look at the source code at last!
as.difftime
function (tim, format = "%X", units = "auto")
{
if (inherits(tim, "difftime"))
return(tim)
if (is.character(tim)) {
difftime(strptime(tim, format = format), strptime("0:0:0",
format = "%X"), units = units)
}
else {
# ...
}
}
Only by skimming the code we can see that it behaves differently depending on the type of its argument. What did we pass?
class(dt[2, open_time - send_time])
## [1] "difftime"
In the first two rows we get our answer: if the argument to as.difftime
is already a difftime
object, then the units
argument will have no effect.
units="auto"
My next question was where is the code to determine the used unit? As as.difftime
makes no transformation it must happen when we subtract two vectors.
Now it is useful to know that -
is an S3 generic which means it selects what S3 method to call based on the type (S3 class) of its argument(s). In base R subtraction is defined specifically for timestamp objects (of class POSIXt
). Note that you can call S3 methods directly with [generic_name].[class_name]
.
`-.POSIXt`
function (e1, e2)
{
# ...
if (!inherits(e1, "POSIXt"))
stop("can only subtract from \"POSIXt\" objects")
if (nargs() == 1)
stop("unary '-' is not defined for \"POSIXt\" objects")
if (inherits(e2, "POSIXt"))
return(difftime(e1, e2))
# if ...
# ...
}
We subtract two values of class POSIXt
so the relevant part for us is return(difftime(e1, e2))
. Let’s look at difftime
now.
difftime
function (time1, time2, tz, units = c("auto", "secs", "mins",
"hours", "days", "weeks"))
{
# ...
z <- unclass(time1) - unclass(time2)
attr(z, "tzone") <- NULL
units <- match.arg(units)
if (units == "auto")
units <- if (all(is.na(z)))
"secs"
else {
zz <- min(abs(z), na.rm = TRUE)
if (!is.finite(zz) || zz < 60)
"secs"
else if (zz < 3600)
"mins"
else if (zz < 86400)
"hours"
else "days"
}
# ...
}
Without understanding every detail we can see that if units
are not specified as in our case it will depend on the smallest absolute value. What makes these computations work is that unclass()
on a POSIXct
type object gives the number of seconds by default since 1970-01-01
.
Finally I took the time to read the longish help file of difftime
which contained most of this information. Still I would go this way again as I believe I learned more.
Look at the source code earlier and always be explicit with conversions if possible.


lclpy.io package¶
Submodules¶
lclpy.io.csv_io module¶
-
lclpy.io.csv_io.
read_csv
(filename, dtype='int')¶ Converts the csv file format to useable data structures.
Note that the csv file should only contain the cost matrixes. Different matrixes should be seperated with an empty line. A maximum of 2 distance matrixes can be read.
- Parameters
filename (str) – Absolute or relative path to the file that contains the data.
datatype (str, optional) – Determines the data type of the returned matrix(es). At the time, 2 datatypes are supported “float” and “int”. The default float and int are respectively used if one of this parameter is used. The default is “int”.
- Returns
matrix_1 (numpy.ndarray) – A matrix for the problem.
matrix_2 (numpy.ndarray) – A matrix for the problem, note that this matriw won’t always be returned.
Examples
Read “testfile.csv” from the map “data” in the current directory:
from lclpy.io.csv_io import read_csv read_csv('data/testfile.csv')
-
lclpy.io.csv_io.
write_benchmark_csv
(benchmark_result, pathname, algorithm_names=None, problem_names=None)¶ Writes the result of a benchmark to several csv files in a single map.
Note that the name of the map can be chosen, but the csv files will always be named as follows:
“alg_” + algorithm_name + “_problem_” + problem_name + _run_ + run + “.csv”
The runs always start from 0.
- Parameters
result (list of list of list of collections.namedtuple) – The result from a benchmark.
pathname (str) – Absolute or relative path to the map that one wishes to write too. It doesn’t need to exist.
algorithm_names (list of str or tuple of str, optional) – Must be the same length as the algorithm list given to the original benchmark. The indices of a name corresponds with the indices of the algorithms given to the original benchmark.
problem_names (list of str or tuple of str, optional) – Must be the same length as the problem list given to the original benchmark. The indices of a name corresponds with the indices of the problems given to the original benchmark.
-
lclpy.io.csv_io.
write_csv
(result, filename)¶ Writes the result of an algorithm to a csv file.
- Parameters
result (collections.namedtuple) – The result from a localsearch algorithm
filename (str) – Absolute or relative path to the file that one wishes to write too. It doesn’t need to exist.
lclpy.io.qaplib module¶
-
lclpy.io.qaplib.
read_qaplib
(filename)¶ Converts the qaplib file format to useable data structures.
This function can be used to convert files in the qaplib format to useable data structures.
- Parameters
filename (str) – absolute or relative path to the file that contains the data.
- Returns
distance_matrix (numpy.ndarray) – The distance matrix for the problem.
flow_matrix (numpy.ndarray) – The flow matrix for the problem.
dictionary ({int : int}) – A dictionary that can convert a position the distance matrix to the name given in the data. This dict can be useful when generating output.
Examples
Read “testfile.tsp” from the map “data” in the current working directory:
from lclpy.io.qaplib import read_qaplib read_tsplib('data/testfile.tsp')
lclpy.io.tsplib module¶
-
lclpy.io.tsplib.
read_tsplib
(filename)¶ Converts the tsplib file format to useable data structures.
Currently this function only works for TSP problems. The crystallography problems can’t be parsed with this function.
- Parameters
filename (str) – absolute or relative path to the file that contains the data.
- Returns
distance_matrix (numpy.ndarray) – The distance matrix for the problem.
dictionary ({int : int}) – A dictionary that can convert a position the distance matrix to the name given in the data. This dict can be useful when generating output.
metadata (list of str) – Contains the metadata of the problem. The last entry will always be EOF.
Examples
Read “testfile.tsp” from the map “data” in the current working directory:
from lclpy.io.tsplib import read_tsplib read_tsplib('data/testfile.tsp')
Module contents¶
This package conatains functions for the input and output of data.


Derek Eder
@derekeder
Every year, the CPS selective enrollment tiers change *slightly*. Here's what changed: http://cpstiers.opencityapps.org/tier-differences.html
10/8/2015, 4:36:01 PM
Favs: 1
Retweets: 3
link← @derekeder Twitter archive
Derek Eder
@derekeder
Every year, the CPS selective enrollment tiers change *slightly*. Here's what changed: http://cpstiers.opencityapps.org/tier-differences.html
10/8/2015, 4:36:01 PM
Favs: 1
Retweets: 3
link


Home
Address
Admin
More
About
Jobs
Contact
Report an issue
Sign up
Log in
Welcome to Addresses Book !
A site where you can manage all the addresses of your dreams
!!
Website made with
by Simplon


Data Scientist Capstone
Made with Udacity
Contact
Dog Breed Prediction
Please upload an image to classify
{% block message %} {% endblock %} {% block content %} {% endblock %}


Not Found
The requested URL /images/favicon.ico was not found on this server.
Apache/2.2.14 (Ubuntu) Server at sankuru.biz Port 80


| Macros |
|
@LDAP:name@
|
Lookup the LDAP value of the user's LDAP attribute name.
|
|
@LDAP:name:length@
|
Lookup the LDAP value of the user's LDAP attribute name.
If the value is longer than length, then truncate the value to the specified length.
|
|
@LDAP:name:length:padding@
|
Lookup the LDAP value of the user's LDAP attribute name.
If the value is longer than length, then truncate the value to the specified length.
If the value is shorter than length, then pad the value with the value of length.
|
|
@LDAP:DN@
|
Replace with LDAP value of user's LDAP Distinguished Name
|
|
@User:PwExpireTime@
|
Time user's password will expire in default ISO format.
|
|
@User:PwExpireTime:pattern@
|
Time user's password will expire where pattern is a SimpleDateFormat pattern
|
|
@User:PwExpireTime:pattern:tz@
|
Time user's password will expire where pattern is a SimpleDateFormat pattern, and the timezone is a tz specified
as a valid TimeZone ID.
|
|
@User:DaysUntilPwExpire@
|
Number of days until the user's password will expire
|
|
@User:ID@
|
User's UserID (if authenticated)
|
|
@User:Email@
|
User's Email Address
|
|
@User:Password@
|
User's current password (if authenticated). Use caution, this will allow password to appear in logs and whichever function the macro is used in.
|
|
@InstanceID@
|
Instance ID of the application
|
|
@CurrentTime@
|
Current time in default format.
|
|
@CurrentTime:pattern@
|
Current time where pattern is a SimpleDateFormat pattern
|
|
@CurrentTime:pattern:tz@
|
Current time where pattern is a SimpleDateFormat pattern, and the timezone is a tz specified
as a valid TimeZone ID.
|
|
@Site:URL@
|
URL of the site (http://www.example.com/password)
|
|
@Site:Host@
|
Hostname of the site (www.example.com)
|
|
@RandomChar@
|
A single random character of visible upper & lower ASCII characters and digits.
|
|
@RandomChar:length@
|
Random characters, where length is the number of random characters to generate.
|
|
@RandomChar:length:characters@
|
Random characters, where length is the number of random characters to generate and characters is the list of characters to be used as random characters.
|
|
@Encode:type:[[value]]@
|
Encode a value using the specified type of encoding, where type is the type of encoding and where value is
the value to encode. The value may include other macros. Types permitted are urlPath,
urlParameter and base64.
|
|
@Hash:type:[[value]]@
|
Hash a value using the specified hash type, where type is the type of hash and where value is
the value to hash. The value may include other macros. Hash types permitted are md5,
sha1, sha256, and sha512.
|
| Macro Examples |
| @LDAP:givenName@ |
Jason |
| @LDAP:givenName:3@ |
Jas |
| @LDAP:givenName:8:-@ |
Jason--- |
| Click Here! |
Click Here! |
| @RandomChar:8:0123456789ABCDEF@ |
4B420A120F |
| @LDAP:givenName:1@@LDAP:sn:7@@RandomChar:2:0123456789@ |
JSmith84 |
| @LDAP:givenName:1@@LDAP:sn:7:0@@RandomChar:2:0123456789@ |
JSmith0084 |
| The time is @CurrentTime:EEE, MMM d<EMAIL_ADDRESS>|
The time is Sat, Jan 1, 2000. |


Leaving a Comment
To leave comments on a portfolio you are viewing, follow these steps:
- Scroll to the "Add new comment" section near the bottom of the screen.
- Enter a title and a comment of any length in the Title and Comment boxes, respectively. Both of these entries are required.
- Under the "Make this comment visible to" subheading, choose one of the following options:
- Make the comment visible only to yourself by clicking the Only Me radio button.
- Make the comment visible only to yourself and the person who created the portfolio by clicking the The Owner and I radio button.
- Make the comment visible to the general public by clicking the Everyone button is the active button. This is the default option.
- To submit your comment, click submit.
- To exit, close the window.


Home
Cafes
Join Us
About Us
Caption Text
Caption Two
Caption Three
summury
about website
name of rusturnt
name of rusturnt


Noodles is a task-based parallel programming model in Python that offers the same intuitive interface when running complex workflows on your laptop or on large computer clusters.
To install the latest version from PyPI:
pip install noodles
To enable the Xenon backend for remote job execution,
pip install noodles[xenon]
This requires a Java Runtime to be installed, you may check this by running
java --version
which should print the version of the currently installed JRE.
All the latest documentation is available on Read the Docs.


Irani Protesters Embrace Gandhigiri, Hand Out Flowers to Troops Deployed to Control Them
Recently, a section of Iranians protesting against a sharp rise in petrol prices in their country embraced Gandhigiri. How? They handed out flowers to troops deployed to control them
Tehran: Not just Indians, the teachings of Mahatma Gandhi have a considerable impact on people around the world.
Recently, a section of Iranians protesting against a sharp rise in petrol prices in their country embraced Gandhigiri. How? They handed out flowers to troops deployed to control them, and the beautiful gesture has earned praise from social media users across the world.
Appreciating the act, Twitterati posted several videos of protesters distributing flowers to security personnel in an Iranian city. While handing out the flowers, protestors can be heard saying to the police, “We are not the enemy.”
“To stand in the face of terror with love and to try to bring civility to the chaos, is an act of true bravery. Sadly, people will lose their lives in this battle as history has shown us over & over. But goodness will prevail. Hoping for sooner than later,” posted another user.
As per human rights watchdog Amnesty International, at least 106 people have been killed across Iran in protests over the increasing fuel prices and a subsequent government crackdown.
The Iranian government has, however, rubbished these reports.
For breaking news and live news updates, like us on Facebook or follow us on Twitter and Instagram. Read more on Buzz Latest News on India.com.
Story Timeline
- 05 Jan 2018 UN Security Council to meet on Iran protests
- 05 Jan 2018 Hard-line cleric says social media fed Iran protests, unrest
Comments - Join the Discussion


To DOlist
Sample Header
25/06/1992
Lorem Ipsum Dolor Sit Amet
In Progress
Completed
Add a task
Drag Here to Delete


|
|
{{measuring.reqDate}} | {{measuring.reqUserTO.empCode}} | {{measuring.apprUserTO.empCode}} | {{measuring.apprCurrentProj}} | {{measuring.reqCurrentProj}} | {{measuring.reqCode}} | {{measuring.reqNotifyCode}} | {{measuring.apprStatus}} | View |
| Select | Date of Request | Requester | Approver | Origin Project | Destination Project | Requisition ID | Requisition Notification | Approval Status | More Details |
|---|
|
|
{{measuring.reqDate}} | {{measuring.reqUserTO.empCode}} | {{measuring.apprUserTO.empCode}} | {{measuring.apprCurrentProj}} | {{measuring.reqCurrentProj}} | {{measuring.reqCode}} | {{measuring.reqNotifyCode}} | {{measuring.apprStatus}} | View |


About David Lamps
Creating and puzzle solving are part of what makes me tick. I fell in love with coding while working in the Visual Effects industry, and used that as a springboard into web development. While building web apps at Dev Bootcamp, I have been able to combine making meaningful and beautiful things with my love of problem solving. Looking to future, I'm excited to contribute to the open canvass of technology.


[default] element index
All elements
a
c
g
i
j
m
p
s
t
u
_
_
top
__construct
User::__construct()
in user.php
Retrieves a user from the database.
__construct
Ticket::__construct()
in ticket.php
Finds a ticket within the database, with the given ID.
a
top
Admin
Position::Admin
in position.php
allConsultants
User::allConsultants()
in user.php
allManagers
User::allManagers()
in user.php
allStatuses
Status::allStatuses()
in status.php
allUsers
User::allUsers()
in user.php
c
top
Completed
Status::Completed
in status.php
Consultant
Position::Consultant
in position.php
g
top
getConsultant
Ticket::getConsultant()
in ticket.php
getConsultantID
Ticket::getConsultantID()
in ticket.php
getConsultantTickets
User::getConsultantTickets()
in user.php
getDate
Ticket::getDate()
in ticket.php
getDescription
Ticket::getDescription()
in ticket.php
getEmail
User::getEmail()
in user.php
getFirst
User::getFirst()
in user.php
getHTML
Ticket::getHTML()
in ticket.php
getHTML
User::getHTML()
in user.php
getID
User::getID()
in user.php
getID
Ticket::getID()
in ticket.php
getJSON
User::getJSON()
in user.php
getJSON
Ticket::getJSON()
in ticket.php
getLast
User::getLast()
in user.php
getManager
Ticket::getManager()
in ticket.php
getManagerID
Ticket::getManagerID()
in ticket.php
getManagerTickets
User::getManagerTickets()
in user.php
getName
User::getName()
in user.php
getPosition
User::getPosition()
in user.php
getPositionID
User::getPositionID()
in user.php
getRoom
User::getRoom()
in user.php
getStatus
Ticket::getStatus()
in ticket.php
getTickets
User::getTickets()
in user.php
getTitle
Ticket::getTitle()
in ticket.php
getUser
Ticket::getUser()
in ticket.php
getUserID
Ticket::getUserID()
in ticket.php
i
top
init
User::init()
in user.php
Initializes class constants.
init
Ticket::init()
in ticket.php
Initializes class constants.
InProgress
Status::InProgress
in status.php
j
top
jsonSerialize
User::jsonSerialize()
in user.php
Converts the User into JSON, for use with the API.
jsonSerialize
Ticket::jsonSerialize()
in ticket.php
Converts the Ticket into JSON, for use with the API.
m
top
Manager
Position::Manager
in position.php
p
top
Position
Position
in position.php
The position of a User (e.g. user, consultant, manager).
position.php
position.php
in position.php
s
top
setConsultant
Ticket::setConsultant()
in ticket.php
setManager
Ticket::setManager()
in ticket.php
setStatus
Ticket::setStatus()
in ticket.php
Updates the status of the ticket, both in the object and in the database.
Status
Status
in status.php
The status of a Ticket (e.g. Completed).
status.php
status.php
in status.php
t
top
Ticket
Ticket
in ticket.php
A help ticket within the system.
ticket.php
ticket.php
in ticket.php
toString
Status::toString()
in status.php
Converts a Status to a string, for output purposes.
toString
Position::toString()
in position.php
Converts a Position to a string, for output purposes.
u
top
User
Position::User
in position.php
User
User
in user.php
A user within the system.
user.php
user.php
in user.php
a
c
g
i
j
m
p
s
t
u
_


{{alert.msg}}
Automator 27 @ your service.
URL
Not a valid url!
Amount of calls
Not a valid amount!
I agree
Do it!
×
Modal title
...


Please watch this video about the mobile application.
Today we'll be learning about the San Antonio public library app. The first thing you'll need is your library card.
Next we'll need to go to the library's website. Once there you're going to go to the account button located at the top.
From there you'll enter your library card information and if you haven't already done so you will create a password.
Once you've set up your online account on the library website you will then go to the appstore for iphones.
Once there you will search for and then download the mySAPL app.
When it's finished downloading you will then look for mySAPL app icon and click on it.
This is what the home screen looks like.
Once you're in the app in order to start checking out books or do anything like that you'll need to go to the mysap icon located in the middle.
When you click on it this screen pops up.
Here is where you will add in your library card number and your password.
Now you are able to see all of your Library account information.
Next let's go down to the bottom and click the explore button.
You are now at the apps home screen and this is where you can begin to look at books, recent arrivals, just ordered, and bestsellers.
Let's say you already know which book you would like to look for you would go to the bottom and click the search button.
At the top of the screen you will find the search bar.
This is where you'll enter your book title.
I went ahead and search for cat in the hat.
If this is the book I would like I would then go and click on it and i'll begin to see all the information the library has about the book.
If this is a book I'm interested in I can go to the left icon at the top and click it to have a menu drop-down.
This menu has different options. In my case I would like to place the book on hold for hit
2:07the whole button and then have the
2:10option to pick which library i would
2:12like the book to be held that for me
2:14after selecting the library of it like
2:17we then go down to the mysap icon and
2:21view your holds the Millennium now you
2:25can see all your active holes and the
2:27holes area if you choose to cancel her
2:29hold you click on it and hit cancel hold
2:32and you say yes Annelle if you choose to
2:36you can also search by authors name
2:44the last great feature in this app is
2:47the location button here you can see all
2:50of the San Antonio library locations
2:54[Music]


This dialog provides a cryptanalysis
(Solitaire analysis) of a
ciphertext, which is encrypted with the
Solitaire algorithm. The ciphertext has to be loaded as a text
document. The text is bounded by 65.535 letters. The rest will be ignored. Then the
initial deck is generated by using the found final deck. With this initial
deck the keystream will be generated and the ciphertext can be decrypted.
Please follow the numbers of the frames (groupings) in this dialog (grouping 1 to 4).
Determining the initial deck
Grouping 1: Parameters of the found deck
Please choose the way of determining the found final deck. For that click one of the buttons Load final deck or Own choice.
Grouping 2: Positioning of the joker
Because of the irreversibility of the Solitaire algorithm in some special cases it has to be decisioned, whether to place joker A or Joker B at the top or at the bottom of the card deck. This grouping allows to choose between Always to front, Always to back and Start manual.
The manual cryptanalysis as well as the automatical cryptanalysis can take wrong decisions, with the result of a wrong plaintext.
Grouping 3: Generating the initial deck
This grouping provides to applicate the differnet states of the card decks.
Grouping 4: Generating the keystream
By using the created initial deck the Solitaire algorithm can be started by clicking the button Automatic generating of the keystream. So the keystream is generated and it is possible to decrypt the ciphertext.
If the keystream is generated completely, the ciphertext can be decrypted by clicking the button Decrypt (but only if the created initial deck is the same one, as the initial deck, which was used for the encryption).
With the Cancel button you can leave the dialog.


public interface ILayoutElem
extends java.io.Serializable
| Modifier and Type | Method and Description |
|---|---|
LayoutSize |
calculateLayoutHeight(LayoutSizeType type,
LayoutSize widthHint) |
LayoutSize |
calculateLayoutWidth(LayoutSizeType type,
LayoutSize heightHint) |
nl.weeaboo.common.Rect2D |
getLayoutBounds()
Returns the current position and size of this element within its parent layout.
|
boolean |
isVisible() |
void |
setLayoutBounds(nl.weeaboo.common.Rect2D rect)
Positions this element within its parent's layout.
|
boolean isVisible()
true
if this element is currently visible. This information is used by the layout
system to skip over invisible items without reserving room for them.LayoutSize calculateLayoutWidth(LayoutSizeType type, LayoutSize heightHint)
heightHint
- The height for which to calculate the corresponding layout width. May be
LayoutSize.INFINITE
or LayoutSize.UNKNOWN
, but never null
.LayoutSize calculateLayoutHeight(LayoutSizeType type, LayoutSize widthHint)
widthHint
- The width for which to calculate the corresponding layout height. May be
LayoutSize.INFINITE
or LayoutSize.UNKNOWN
, but never null
.nl.weeaboo.common.Rect2D getLayoutBounds()
void setLayoutBounds(nl.weeaboo.common.Rect2D rect)