GitHub's Watch feature doesn't send notifications when commits are pushed. This script aims to implement this feature and much more.
Call for maintainers: I don't use this project myself anymore but IFTTT instead (see below). If you're interested in taking over the maintenance of this project, or just helping, please let me know (e.g. by opening an issue).
$ sudo apt-get install sendmail
$ sudo pip install gicowa
Add the following line to your /etc/crontab
:
0 * * * * root gicowa --persist --no-color --mailto<EMAIL_ADDRESS>lastwatchedcommits MyGitHubUsername sincelast > /tmp/gicowa 2>&1
That's it. As long as your machine is running you'll get e-mails when something gets pushed on a repo you're watching.
NOTES:
- The e-mails are likely to be considered as spam until you mark one as non-spam in your e-mail client. Or use the
--mailfrom
option.- If you're watching 15 repos or more, you probably want to use the
--credentials
option to make sure you don't hit the GitHub API rate limit.
gicowa
is a generic command-line tool with which you can make much more that just
implementing the use case depicted in the introduction. This section shows what it can.
$ gicowa watchlist AurelienLourot watchlist AurelienLourot brandon-rhodes/uncommitted AurelienLourot/crouton-emacs-conf brillout/FasterWeb AurelienLourot/github-commit-watcher
$ gicowa lastrepocommits AurelienLourot/github-commit-watcher since 2015 07 05 09 12 00 lastrepocommits AurelienLourot/github-commit-watcher since 2015-07-05 09:12:00 Last commit pushed on 2015-07-05 10:48:58 Committed on 2015-07-05 10:46:27 - Aurelien Lourot - Minor cleanup. Committed on 2015-07-05 09:39:01 - Aurelien Lourot - watchlist command implemented. Committed on 2015-07-05 09:12:00 - Aurelien Lourot - argparse added.
NOTES:
- Keep in mind that a commit's committer timestamp isn't the time at which it gets pushed.
- The lines starting with
Committed on
list commits on themaster
branch only. Their timestamps are the committer timestamps.- The line starting with
Last commit pushed on
shows the time at which a commit got pushed on the repository for the last time on any branch.
$ gicowa lastwatchedcommits AurelienLourot since 2015 07 04 00 00 00 lastwatchedcommits AurelienLourot since 2015-07-04 00:00:00 AurelienLourot/crouton-emacs-conf - Last commit pushed on 2015-07-04 17:10:18 AurelienLourot/crouton-emacs-conf - Committed on 2015-07-04 17:08:48 - Aurelien Lourot - Support for Del key. brillout/FasterWeb - Last commit pushed on 2015-07-04 16:40:54 brillout/FasterWeb - Committed on 2015-07-04 16:38:55 - brillout - add README AurelienLourot/github-commit-watcher - Last commit pushed on 2015-07-05 10:48:58 AurelienLourot/github-commit-watcher - Committed on 2015-07-05 10:46:27 - Aurelien Lourot - Minor cleanup. AurelienLourot/github-commit-watcher - Committed on 2015-07-05 09:39:01 - Aurelien Lourot - watchlist command implemented. AurelienLourot/github-commit-watcher - Committed on 2015-07-05 09:12:00 - Aurelien Lourot - argparse added. AurelienLourot/github-commit-watcher - Committed on 2015-07-05 09:07:14 - AurelienLourot - Initial commit
NOTE: if you're watching 15 repos or more, you probably want to use the
--credentials
option to make sure you don't hit the GitHub API rate limit.
Any listing command taking a since <timestamp>
argument takes also a
sincelast
one. It will then use the time where that same command has been run for the
last time on that machine with the option --persist
. This option makes
gicowa
remember the last execution time of each command in ~/.gicowa
.
$ gicowa --persist lastwatchedcommits AurelienLourot sincelast lastwatchedcommits AurelienLourot since 2015-07-05 20:17:46 $ gicowa --persist lastwatchedcommits AurelienLourot sincelast lastwatchedcommits AurelienLourot since 2015-07-05 20:25:33
You can send the output of any command to yourself by e-mail:
$ gicowa --no-color --mailto<EMAIL_ADDRESS>lastwatchedcommits AurelienLourot since 2015 07 04 00 00 00 lastwatchedcommits AurelienLourot since 2015-07-04 00:00:00 AurelienLourot/crouton-emacs-conf - Last commit pushed on 2015-07-04 17:10:18 AurelienLourot/crouton-emacs-conf - Committed on 2015-07-04 17:08:48 - Aurelien Lourot - Support for Del key. brillout/FasterWeb - Last commit pushed on 2015-07-04 16:40:54 brillout/FasterWeb - Committed on 2015-07-04 16:38:55 - brillout - add README AurelienLourot/github-commit-watcher - Last commit pushed on 2015-07-05 10:48:58 AurelienLourot/github-commit-watcher - Committed on 2015-07-05 10:46:27 - Aurelien Lourot - Minor cleanup. AurelienLourot/github-commit-watcher - Committed on 2015-07-05 09:39:01 - Aurelien Lourot - watchlist command implemented. AurelienLourot/github-commit-watcher - Committed on 2015-07-05 09:12:00 - Aurelien Lourot - argparse added. AurelienLourot/github-commit-watcher - Committed on 2015-07-05 09:07:14 - AurelienLourot - Initial commit Sent by e-mail to<EMAIL_ADDRESS>NOTES:
- You probably want to use
--no-color
because your e-mail client is likely not to render the bash color escape sequences properly.- The e-mails are likely to be considered as spam until you mark one as non-spam in your e-mail client. Or use the
--mailfrom
option.
1.2.3 (2015-10-17) to 1.2.5 (2015-10-19):
1.2.2 (2015-10-12):
1.2.1 (2015-08-20):
1.2.0 (2015-08-20):
--version
option implemented.1.1.0 (2015-08-20):
--errorto
option implemented.1.0.1 (2015-08-18) to 1.0.9 (2015-08-19):
The following projects provide similar functionalities:


One of the secret chambers in Hogwarts is full of philosopher’s stones. The floor of the chamber is covered by h × w square tiles, where there are h rows of tiles from front (first row) to back (last row) and w columns of tiles from left to right. Each tile has 1 to 100 stones on it. Harry has to grab as many philosopher’s stones as possible, subject to the following restrictions:
The first line consists of a single integer T, the number of test cases. In each of the test cases, the first line has two integers. The first integer h (1 <= h <= 100) is the number of rows of tiles on the floor. The second integer w (1 <= w <= 100) is the number of columns of tiles on the floor. Next, there are h lines of inputs. The i-th line of these, specifies the number of philosopher’s stones in each tile of the i-th row from the front. Each line has w integers, where each integer m (0 <= m <= 100) is the number of philosopher’s stones on that tile. The integers are separated by a space character.
The output should consist of T lines, (1 <= T <= 100), one for each test case. Each line consists of a single integer, which is the maximum possible number of philosopher’s stones Harry can grab, in one single trip from the first row to the last row for the corresponding test case.
Input: 1 6 5 3 1 7 4 2 2 1 3 1 1 1 2 2 1 8 2 2 1 5 3 2 1 4 4 4 5 2 7 5 1 Output: 32 //7+1+8+5+4+7=32


Replaces an
unwrap()
call with a
match
expression if the call receiver has either
Option
or
Result
type.


You know if there's something that needs done, I will do it.
These are the things that I am constantly improving without end
Please feel free to contact me here!


$ git add Documentation/\*.txt
git-add(1) Manual Page
NAME
git-add - Add file contents to the index
SYNOPSIS
git add [-n] [-v] [--force | -f] [--interactive | -i] [--patch | -p] [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]] [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--] [<pathspec>...]
DESCRIPTION
This command updates the index using the current content found in the working tree, to prepare the content staged for the next commit. It typically adds the current content of existing paths as a whole, but with some options it can also be used to add content with only part of the changes made to the working tree files applied, or remove paths that do not exist in the working tree anymore.
The "index" holds a snapshot of the content of the working tree, and it is this snapshot that is taken as the contents of the next commit. Thus after making any changes to the working directory, and before running the commit command, you must use the add command to add any new or modified files to the index.
This command can be performed multiple times before a commit. It only adds the content of the specified file(s) at the time the add command is run; if you want subsequent changes included in the next commit, then you must run git add again to add the new content to the index.
The git status command can be used to obtain a summary of which files have changes that are staged for the next commit.
The git add command will not add ignored files by default. If any ignored files were explicitly specified on the command line, git add will fail with a list of ignored files. Ignored files reached by directory recursion or filename globbing performed by Git (quote your globs before the shell) will be silently ignored. The git add command can be used to add ignored files with the -f (force) option.
Please see git-commit(1) for alternative ways to add content to a commit.
OPTIONS
- <pathspec>...
Files to add content from. Fileglobs (e.g. *.c) can be given to add all matching files. Also a leading directory name (e.g. dir to add dir/file1 and dir/file2) can be given to add all files in the directory, recursively.
- -n
- --dry-run
Don't actually add the file(s), just show if they exist and/or will be ignored.
- -v
- --verbose
Be verbose.
- -f
- --force
Allow adding otherwise ignored files.
- -i
- --interactive
Add modified contents in the working tree interactively to the index. Optional path arguments may be supplied to limit operation to a subset of the working tree. See Interactive mode for details.
- -p
- --patch
Interactively choose hunks of patch between the index and the work tree and add them to the index. This gives the user a chance to review the difference before adding modified contents to the index.
This effectively runs add --interactive, but bypasses the initial command menu and directly jumps to the patch subcommand. See Interactive mode for details.
- -e, --edit
Open the diff vs. the index in an editor and let the user edit it. After the editor was closed, adjust the hunk headers and apply the patch to the index.
The intent of this option is to pick and choose lines of the patch to apply, or even to modify the contents of lines to be staged. This can be quicker and more flexible than using the interactive hunk selector. However, it is easy to confuse oneself and create a patch that does not apply to the index. See EDITING PATCHES below.
- -u
- --update
Update the index just where it already has an entry matching <pathspec>. This removes as well as modifies index entries to match the working tree, but adds no new files.
If no <pathspec> is given, the current version of Git defaults to "."; in other words, update all tracked files in the current directory and its subdirectories. This default will change in a future version of Git, hence the form without <pathspec> should not be used.
- -A
- --all
- --no-ignore-removal
Update the index not only where the working tree has a file matching <pathspec> but also where the index already has an entry. This adds, modifies, and removes index entries to match the working tree.
If no <pathspec> is given, the current version of Git defaults to "."; in other words, update all files in the current directory and its subdirectories. This default will change in a future version of Git, hence the form without <pathspec> should not be used.
- --no-all
- --ignore-removal
Update the index by adding new files that are unknown to the index and files modified in the working tree, but ignore files that have been removed from the working tree. This option is a no-op when no <pathspec> is used.
This option is primarily to help the current users of Git, whose "git add <pathspec>..." ignores removed files. In future versions of Git, "git add <pathspec>..." will be a synonym to "git add -A <pathspec>..." and "git add --ignore-removal <pathspec>..." will behave like today's "git add <pathspec>...", ignoring removed files.
- -N
- --intent-to-add
Record only the fact that the path will be added later. An entry for the path is placed in the index with no content. This is useful for, among other things, showing the unstaged content of such files with git diff and committing them with git commit -a.
- --refresh
Don't add the file(s), but only refresh their stat() information in the index.
- --ignore-errors
If some files could not be added because of errors indexing them, do not abort the operation, but continue adding the others. The command shall still exit with non-zero status. The configuration variable add.ignoreErrors can be set to true to make this the default behaviour.
- --ignore-missing
This option can only be used together with --dry-run. By using this option the user can check if any of the given files would be ignored, no matter if they are already present in the work tree or not.
- --
This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken for command-line options).
Configuration
The optional configuration variable core.excludesfile indicates a path to a file containing patterns of file names to exclude from git-add, similar to $GIT_DIR/info/exclude. Patterns in the exclude file are used in addition to those in info/exclude. See gitignore(5).
EXAMPLES
Adds content from all *.txt files under Documentation directory and its subdirectories:
Note that the asterisk * is quoted from the shell in this example; this lets the command include the files from subdirectories of Documentation/ directory.
Considers adding content from all git-*.sh scripts:
$ git add git-*.sh
Because this example lets the shell expand the asterisk (i.e. you are listing the files explicitly), it does not consider subdir/git-foo.sh.
Interactive mode
When the command enters the interactive mode, it shows the output of the status subcommand, and then goes into its interactive command loop.
The command loop shows the list of subcommands available, and gives a prompt "What now> ". In general, when the prompt ends with a single >, you can pick only one of the choices given and type return, like this:
*** Commands *** 1: status 2: update 3: revert 4: add untracked 5: patch 6: diff 7: quit 8: help What now> 1
You also could say s or sta or status above as long as the choice is unique.
The main command loop has 6 subcommands (plus help and quit).
- status
This shows the change between HEAD and index (i.e. what will be committed if you say git commit), and between index and working tree files (i.e. what you could stage further before git commit using git add) for each path. A sample output looks like this:
staged unstaged path 1: binary nothing foo.png 2: +403/-35 +1/-1 git-add--interactive.perl
It shows that foo.png has differences from HEAD (but that is binary so line count cannot be shown) and there is no difference between indexed copy and the working tree version (if the working tree version were also different, binary would have been shown in place of nothing). The other file, git-add--interactive.perl, has 403 lines added and 35 lines deleted if you commit what is in the index, but working tree file has further modifications (one addition and one deletion).
- update
This shows the status information and issues an "Update>>" prompt. When the prompt ends with double >>, you can make more than one selection, concatenated with whitespace or comma. Also you can say ranges. E.g. "2-5 7,9" to choose 2,3,4,5,7,9 from the list. If the second number in a range is omitted, all remaining patches are taken. E.g. "7-" to choose 7,8,9 from the list. You can say * to choose everything.
What you chose are then highlighted with *, like this:
staged unstaged path 1: binary nothing foo.png * 2: +403/-35 +1/-1 git-add--interactive.perl
To remove selection, prefix the input with - like this:
Update>> -2
After making the selection, answer with an empty line to stage the contents of working tree files for selected paths in the index.
- revert
This has a very similar UI to update, and the staged information for selected paths are reverted to that of the HEAD version. Reverting new paths makes them untracked.
- add untracked
This has a very similar UI to update and revert, and lets you add untracked paths to the index.
- patch
This lets you choose one path out of a status like selection. After choosing the path, it presents the diff between the index and the working tree file and asks you if you want to stage the change of each hunk. You can select one of the following options and type return:
y - stage this hunk n - do not stage this hunk q - quit; do not stage this hunk nor any of the remaining ones a - stage this hunk and all later hunks in the file d - do not stage this hunk nor any of the later hunks in the file g - select a hunk to go to / - search for a hunk matching the given regex j - leave this hunk undecided, see next undecided hunk J - leave this hunk undecided, see next hunk k - leave this hunk undecided, see previous undecided hunk K - leave this hunk undecided, see previous hunk s - split the current hunk into smaller hunks e - manually edit the current hunk ? - print help
After deciding the fate for all hunks, if there is any hunk that was chosen, the index is updated with the selected hunks.
You can omit having to type return here, by setting the configuration variable interactive.singlekey to true.
- diff
This lets you review what will be committed (i.e. between HEAD and index).
EDITING PATCHES
Invoking git add -e or selecting e from the interactive hunk selector will open a patch in your editor; after the editor exits, the result is applied to the index. You are free to make arbitrary changes to the patch, but note that some changes may have confusing results, or even result in a patch that cannot be applied. If you want to abort the operation entirely (i.e., stage nothing new in the index), simply delete all lines of the patch. The list below describes some common things you may see in a patch, and which editing operations make sense on them.
- added content
Added content is represented by lines beginning with "+". You can prevent staging any addition lines by deleting them.
- removed content
Removed content is represented by lines beginning with "-". You can prevent staging their removal by converting the "-" to a " " (space).
- modified content
Modified content is represented by "-" lines (removing the old content) followed by "+" lines (adding the replacement content). You can prevent staging the modification by converting "-" lines to " ", and removing "+" lines. Beware that modifying only half of the pair is likely to introduce confusing changes to the index.
There are also more complex operations that can be performed. But beware that because the patch is applied only to the index and not the working tree, the working tree will appear to "undo" the change in the index. For example, introducing a new line into the index that is in neither the HEAD nor the working tree will stage the new line for commit, but the line will appear to be reverted in the working tree.
Avoid using these constructs, or do so with extreme caution.
- removing untouched content
Content which does not differ between the index and working tree may be shown on context lines, beginning with a " " (space). You can stage context lines for removal by converting the space to a "-". The resulting working tree file will appear to re-add the content.
- modifying existing content
One can also modify context lines by staging them for removal (by converting " " to "-") and adding a "+" line with the new content. Similarly, one can modify "+" lines for existing additions or modifications. In all cases, the new modification will appear reverted in the working tree.
- new content
You may also add new content that does not exist in the patch; simply add new lines, each starting with "+". The addition will appear reverted in the working tree.
There are also several operations which should be avoided entirely, as they will make the patch impossible to apply:
adding context (" ") or removal ("-") lines
deleting context or removal lines
modifying the contents of context or removal lines
GIT
Part of the git(1) suite


Comra918.github.io
Technicolor works with creative and technology leaders in content creation, distribution and consumption to seamlessly deliver experiences worldwide. Advanced Digital Recearch Standalone-Tower Whirlwind Installationanleitung Und Betriebsanleitung.
AKO Classic will sunset 31 JAN 2019 and the full functionality of the portal will no longer be available. All individual and organizational files to be retained must be moved Army Knowledge Online - Pre-Acceptance. Vtiger CRM is online software that helps 300,000+ businesses grow sales, improve marketing ROI, and deliver great customer service. Try it free for 15 days! Try it free for 15 days! Vtiger CRM is online software that helps more than 300000 businesses grow sales, improve marketing reach, and deliver great customer service. ABB Group - Leading digital technologies for industry. Boost traffic and revenue with a full suite of SEO and competitor analysis tools. Discover new opportunities to find, reach, and convert your audience.
Western Digital Empowering the World s Data Infrastructures. Western Digital provides data storage solutions, including systems, HDD, Flash SSD, memory and personal data solutions to help customers capture and preserve their most valued. Dank der guten Fehlerkorrektur hatte das „SOHD-16P9S“ mit verkratzten DVDs und Daten-CDs kaum Probleme. Auch bei den Geschwindigkeitsmessungen lag das Laufwerk mit an der Spitze. Nuance - PDF, Customer Service, HIM, and Speech. ABB is a pioneering technology leader that works closely with utility, industry, transportation and infrastructure customers to write the future of industrial digitalization and realize value.
Keyword Research, Competitive Analysis, Website - Alexa. Vtiger - CRM Customer Relationship Management Software. The new SoundTouch app offers fast, simple control of your music. Use it to enhance your SoundTouch experience and enjoy music throughout your home via your Wi-Fi network. Our innovations in voice, natural language understanding, reasoning and systems integration come together to create more human technology. Learn.


|
|
The current XBIS code includes a test
program for comparing XBIS performance with both text XML and zip/gzip
compression of text, test.RunTest (included in the
/tests directory of the distribution, with source code under the
/build/src directory). This program uses one or more sets of test
data, each consisting of either a single document or a collection of
documents. The test program first reads the current test data set into
memory as an array of bytes, then calls one of four test implementation
classes (test.TextTEXT, TextXBIS, TextZIP, or TestGZIP, as selected by the
first command line argument, which must be "TEXT", "XBIS", "ZIP", or "GZIP").
It requires the SAX2 parser to be specified with a property definition on
the Java command line of the form -Dorg.xml.sax.driver=com.bluecast.xml.Piccolo
(for Piccolo), -Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser
(for Xerces), or the equivalent for other parsers. When the test implementation
class is called by the test program it performs the actual tests
and fills measured time values into an array of results, which are
accumulated by the test program across all test data sets and printed at
the end.
Timing Methodology
The actual timing measurements are done
using several passes over the test data set. Each pass may involve
several repetitions of an operation with the test data set. The
elapsed time for each pass is measured, and only the best time is
saved and returned. This technique was adopted in order to obtain
consistent timing results, since average times across even a larger
number of passes showed much more variation than the best pass times,
apparently due to JVM whims.
The general sequence of operations is as
follows for each test implementation:
Parse document from the in-memory
text (as a ByteArrayInputStream ), with
processing of SAX2 events by a simple handler that counts different
types of items. This is measured as the basic text parse time, and
also as the input time for the TEXT version of the test.
Parse document a second time, saving
the parse event information to an in-memory store. This allows the
events to be replayed at a fraction of the overhead of a full text
parse, providing more accurate timing results for the following step.
Replay the parse events from the
in-memory store, generating output to memory in the appropriate form for the
particular test. In the case of TEXT this uses JAXP with a null
transformation to generate plain document text output; for GZIP this
uses JAXP with a null transformation streamed to a
java.util.zip.GZIPOutputStream ; for XBIS this uses a
org.xbis.SAXToXBISAdapter .
Process the output generated in the
last step to regenerate the SAX2 parser output. In the case of TEXT
this uses a SAX2 parser; for GZIP this uses a java.util.zip.GZIPInputStream
streamed to a SAX2 parser; for XBIS this uses a
org.xbis.XBISToSAXAdapter .
Test Data
The supplied test data sets are broken up into medium and large individual
documents, along with several collections of smaller documents. The
medium documents are:
periodic.xml,
periodic table of the elements in XML. Some attributes, fairly flat
tree (114K bytes).
soap2.xml, generated
array of values in SOAP document form. Heavy on namespaces and
attributes (131K bytes).
Published test results use a third medium
sized file, xml.xml. This is the actual text of the XML
specification, with the external DTD reference removed and all entities defined
in the internal DTD subset. It consists of presentation-style markup with heavy mixed content
and some attributes. This file is not included in the distribution due to
copyright restrictions that prohibit distributing any modified version of the
document.
The large documents are:
weblog.xml,
a log of web page accesses reformatted as XML. Flat structure with
no attributes and generally short character data sequences as
content (2.9M bytes).
factbook.xml,
CIA World Factbook data reformatted as XML. Variable structure with
no attributes and heavy character data content (4.0M bytes).
The collections of small documents are:
ants,
XML configuration files for the Ant build utility from a number of
open source projects (18 documents, 100K bytes total).
fms,
RDF documents from Freshmeat.net (37 documents, 136K bytes total).
soaps,
SOAP request and response documents from an early version of the
SOAP 1.2 specification and from an interoperability test set (42
documents, 30K bytes total).
webs,
web application configuration files from a number of open source
projects (70 documents, 132K bytes total).
Test Results
Current timing results are published on
the IBM developerWorks XML zone, in the article Improve
XML transport performance, Part 2.
As a supplement to the charts supplied in that
article, the three figures below give the results for a test run with the Sun
1.4.1 JVM for Linux (using the Piccolo parser, which tends to deliver the best
performance of the ones I've tested with the Sun JVM). Note that the zip and
gzip performance shown in these test
results is far worse than those from the IBM 1.4.1 JVM. I haven't identified
the cause of the problem, but it appears to be present for both the 1.4.1 and
1.4.2 JVMs from Sun (those are the only ones I've tried).
Figure 1. Medium document performance, Sun 1.4.1 JVM
|
Figure 2. Large document performance, Sun 1.4.1 JVM
|
Figure 3. Small document performance, Sun 1.4.1 JVM
|
The total times are 9.55 seconds for text, 3.44
seconds for XBIS, 247.65 seconds for zip, and 251.20 seconds for gzip. The next
three figures give the results for the same tests, run on the IBM 1.4.1 JVM (also
using the Piccolo parser). These are essentially the same results as shown in
the developerWorks article referenced above, though these include the zip test
results and were run on the final version of the code included in the 0.9.5
release (a slightly later version than was used for the test results published
in the article). The total times in this case are 4.53 seconds for
text, 2.21 seconds for XBIS, 12.18 seconds for zip, and 12.72 seconds for
gzip.
Figure 4. Medium document performance, IBM 1.4.1 JVM
|
Figure 5. Large document performance, IBM 1.4.1 JVM
|
Figure 6. Small document performance, IBM 1.4.1 JVM
|
Earlier timing results (included in the
0.9 distribution) compared XBIS with different XML parsers running
on different JVMs. These tests used a text output approach that was
considerably slower than the JAXP null transformation in the current
test code. The newer approach has reduced the relative advantage of XBIS
over text for output, more accurately reflecting the benefits of the
different techniques.
|


s390_sthyi - emulate STHYI instruction
#include <asm/unistd.h>
int s390_sthyi(unsigned long function_code, void *resp_buffer,
uint64_t *return_code, unsigned long flags);
The s390_sthyi() system call emulates the STHYI (Store Hypervisor
Information) instruction. It provides hardware resource information for the
machine and its virtualization levels. This includes CPU type and capacity, as
well as the machine model and other metrics.
The function_code argument indicates which function to
perform. The following code(s) are supported:
- 0
- Return CP (Central Processor) and IFL (Integrated Facility for Linux)
capacity information.
The resp_buffer argument specifies the address of a
response buffer. When the function_code is 0, the buffer must be one
page (4K) in size. If the system call returns 0, the response buffer will be
filled with CPU capacity information. Otherwise, the response buffer's
content is unchanged.
The return_code argument stores the return code of the
STHYI instruction, using one of the following values:
- 0
- Success.
- 4
- Unsupported function code.
For further details about return_code,
function_code, and resp_buffer, see the reference given in
NOTES.
The flags argument is provided to allow for future
extensions and currently must be set to 0.
On success (that is: emulation succeeded), the return value of
s390_sthyi() matches the condition code of the STHYI instructions,
which is a value in the range [0..3]. A return value of 0 indicates that CPU
capacity information is stored in *resp_buffer. A return value of 3
indicates "unsupported function code" and the content of
*resp_buffer is unchanged. The return values 1 and 2 are reserved.
On error, -1 is returned, and errno is set
appropriately.
- EFAULT
- The value specified in resp_buffer or return_code is not a
valid address.
- EINVAL
- The value specified in flags is nonzero.
- ENOMEM
- Allocating memory for handling the CPU capacity information failed.
- EOPNOTSUPP
- The value specified in function_code is not valid.
This system call is available since Linux 4.15.
This Linux-specific system call is available only on the s390 architecture.
Glibc does not provide a wrapper for this system call, use syscall(2) to
call it.
For details of the STHYI instruction, see
the
documentation page.
When the system call interface is used, the response buffer
doesn't have to fulfill alignment requirements described in the STHYI
instruction definition.
The kernel caches the response (for up to one second, as of Linux
4.16). Subsequent system call invocations may return the cached
response.
This page is part of release 5.05 of the Linux man-pages project. A
description of the project, information about reporting bugs, and the latest
version of this page, can be found at https://www.kernel.org/doc/man-pages/.


Our Services
(SSD 12a/b Schemes) -High Speed Dual Carraigeway & Motorway Schemes
Premier Traffic Management provide the following services for major traffic schemes throughout the United Kingdom.
-
Full CAD TM Design Service.
-
Contra-flow Schemes.
-
Tidal-flow Schemes.
-
Narrow Lane Schemes.
-
High Speed Lane Closures
-
Temproary Road Markings.
-
Laneguard.
-
Varioguard.
-
VMS Trailers.
-
Full Maintenance Service
-
Traffic SafetyP Personnel.
-
Traffic Management Co-ordinator.
-
Traffic Safety and Control Officers.
-
Wide Load Officers.
(SSD 12/d Schemes) - Urban & Rural Schemes
Premier Traffic Management provide the following services for urban & rural schemes.
-
Full CAD TM Design Service.
-
Full Chapter 8 Signing & Guarding.
-
Hire Only or Hire & Maintenance.
-
Lane Closures.
-
Temporary 2, 3 & 4 way Traffic Lights systems.
-
Convoy Works
-
Road Closure & Diversions.
-
Stop/Go systems.
-
Pedestrian systems.
-
Barrier systems.
-
Priority Systems.
-
Fully Qualified Workforce.
Specialist Traffic Management Vehicles
All TM vehicles comply with the Temporary Traffic Management on High Speed Roads – Good Working Practices (SPITTMO).
-
Reflective Markings.
-
CCTV & Audio Warning for Reversing.
-
-
Roof Mounted & Rear Mounted Beacons.
Lorry Mounted Crash Cushion (LMCC)
-
Minimum 10 Tonne Gross Vehicle Weight.
-
Automatic Brake Activation System..
-
All seats fitted with head restraints and inertia seat belts.
-
Light arrow board and sign.
-
CCTV & audio warning for reversing.
CAD Design Site Specific Scheme Drawing
Premier’s fully trained CAD traffic designer’s use the latest computer aided design systems to layout and detail each aspect of a scheme. Premier provides full design scheme and planning which includes site surveys, CAD Drawings and Client liaison meetings as part of each TM package.
Event Management
Our dedicated events team can provide you with a complete bespoke events package including the design, liaison, implementation, marshalling and removal of all traffic management requirements to ensure your event runs smoothly and trouble free.


Welcome on board.
Please click on the link below to verify your email address
If you didn't sign up on WEBSITE_NAME, kindly ignore message or contact us at<EMAIL_ADDRESS>Thanks Website Support Team


Startups are the most powerful possibility I can find for helping to improve those services. A lack of procurement options is at the heart of the bad technology and the inefficient business processes of many cities.
Zachary Townsend, in Why I'm mentoring for America, from the Code for America Blog, November 1st 2013


Enter the topic you would like to interview on:
Data Structures and Algorithms
Data Structures Only
Design and Analysis of Algorithms
Enter the spoken language you would like to interview in:
Mandarin Chinese
English
Hindustani
Spanish
Arabic
Choose a Programming Language:
Java
Python
C++
C#
C
JavaScript
Paste a link to a Google Hangouts chat for your interview:
Paste a link to a pair programming environment for your interview:
Choose your time availability to interview:
Entry 1


Metric Alarm. More...
Public Member Functions | |
| (id) | - init |
| Default constructor for a new object. | |
| (void) | - addDimension: |
| Adds a single object to dimensions. | |
| (NSString *) | - description |
| Returns a string representation of this object; useful for testing and debugging. | |
Properties | |
| NSString * | alarmName |
| The name of the alarm. | |
| NSString * | alarmArn |
| The Amazon Resource Name (ARN) of the alarm. | |
| NSString * | alarmDescription |
| The description for the alarm. | |
| NSDate * | alarmConfigurationUpdatedTimestamp |
| The time stamp of the last update to the alarm configuration. | |
| bool | actionsEnabled |
| Indicates whether actions should be executed during any changes to the alarm's state. | |
| bool | actionsEnabledIsSet |
| NSMutableArray * | oKActions |
The list of actions to execute when this alarm transitions into an OK state from any other state. | |
| NSMutableArray * | alarmActions |
The list of actions to execute when this alarm transitions into an ALARM state from any other state. | |
| NSMutableArray * | insufficientDataActions |
The list of actions to execute when this alarm transitions into an INSUFFICIENT_DATA state from any other state. | |
| NSString * | stateValue |
| The state value for the alarm. | |
| NSString * | stateReason |
| A human-readable explanation for the alarm's state. | |
| NSString * | stateReasonData |
| An explanation for the alarm's state in machine-readable JSON format. | |
| NSDate * | stateUpdatedTimestamp |
| The time stamp of the last update to the alarm's state. | |
| NSString * | metricName |
| The name of the alarm's metric. | |
| NSString * | statistic |
| The namespace of alarm's associated metric. | |
| NSMutableArray * | dimensions |
| The list of dimensions associated with the alarm's associated metric. | |
| NSNumber * | period |
| The period in seconds over which the statistic is applied. | |
| NSString * | unit |
| The unit of the alarm's associated metric. | |
| NSNumber * | evaluationPeriods |
| The number of periods over which data is compared to the specified threshold. | |
| NSNumber * | threshold |
| The value against which the specified statistic is compared. | |
| NSString * | comparisonOperator |
The arithmetic operation to use when comparing the specified Statistic and Threshold . |
Metric Alarm.
| - (void CloudWatchMetricAlarm.)addDimension: | (CloudWatchDimension *) | dimension |
Adds a single object to dimensions.
This function will alloc and init dimensions if not already done.
| - (NSString * CloudWatchMetricAlarm.)description |
Returns a string representation of this object; useful for testing and debugging.
| - (id CloudWatchMetricAlarm.)init |
Default constructor for a new object.
Callers should use the property methods to initialize this object after creating it.
- (NSMutableArray *) alarmActions [read, write, retain] |
The list of actions to execute when this alarm transitions into an ALARM
state from any other state.
Each action is specified as an Amazon Resource Number (ARN). Currently the only actions supported are publishing to an Amazon SNS topic and triggering an Auto Scaling policy.
Constraints:
Length: 0 - 5
- (NSString *) alarmArn [read, write, retain] |
The Amazon Resource Name (ARN) of the alarm.
Constraints:
Length: 1 - 1600
- (NSString *) alarmDescription [read, write, retain] |
The description for the alarm.
Constraints:
Length: 0 - 255
- (NSString *) alarmName [read, write, retain] |
The name of the alarm.
Constraints:
Length: 1 - 255
- (NSString *) comparisonOperator [read, write, retain] |
The arithmetic operation to use when comparing the specified Statistic
and Threshold
.
The specified Statistic
value is used as the first operand.
Constraints:
Allowed Values: GreaterThanOrEqualToThreshold, GreaterThanThreshold, LessThanThreshold, LessThanOrEqualToThreshold
- (NSMutableArray *) dimensions [read, write, retain] |
The list of dimensions associated with the alarm's associated metric.
Constraints:
Length: 0 - 10
- (NSNumber *) evaluationPeriods [read, write, retain] |
The number of periods over which data is compared to the specified threshold.
Constraints:
Range: 1 -
- (NSMutableArray *) insufficientDataActions [read, write, retain] |
The list of actions to execute when this alarm transitions into an INSUFFICIENT_DATA
state from any other state.
Each action is specified as an Amazon Resource Number (ARN). Currently the only actions supported are publishing to an Amazon SNS topic or triggering an Auto Scaling policy.
Constraints:
Length: 0 - 5
- (NSString *) metricName [read, write, retain] |
The name of the alarm's metric.
Constraints:
Length: 1 - 255
- (NSMutableArray *) oKActions [read, write, retain] |
The list of actions to execute when this alarm transitions into an OK
state from any other state.
Each action is specified as an Amazon Resource Number (ARN). Currently the only actions supported are publishing to an Amazon SNS topic and triggering an Auto Scaling policy.
Constraints:
Length: 0 - 5
- (NSNumber *) period [read, write, retain] |
The period in seconds over which the statistic is applied.
Constraints:
Range: 60 -
- (NSString *) stateReason [read, write, retain] |
A human-readable explanation for the alarm's state.
Constraints:
Length: 0 - 1023
- (NSString *) stateReasonData [read, write, retain] |
An explanation for the alarm's state in machine-readable JSON format.
Constraints:
Length: 0 - 4000
- (NSString *) stateValue [read, write, retain] |
The state value for the alarm.
Constraints:
Allowed Values: OK, ALARM, INSUFFICIENT_DATA
- (NSString *) statistic [read, write, retain] |
The namespace of alarm's associated metric.
Constraints:
Length: 1 - 255
Pattern: [^:].*
The statistic to apply to the alarm's associated metric.
Constraints:
Allowed Values: SampleCount, Average, Sum, Minimum, Maximum
- (NSString *) unit [read, write, retain] |
The unit of the alarm's associated metric.
Constraints:
Allowed Values: Seconds, Microseconds, Milliseconds, Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes, Bits, Kilobits, Megabits, Gigabits, Terabits, Percent, Count, Bytes/Second, Kilobytes/Second, Megabytes/Second, Gigabytes/Second, Terabytes/Second, Bits/Second, Kilobits/Second, Megabits/Second, Gigabits/Second, Terabits/Second, Count/Second, None


"HELLO."
We are a type foundry company.
"Providing beauty through utility, success through simplicity."


Welcome To Team Supreme Dining!
I'm a customer, take me to the
menu
I'm a staff member, take me to the
staff page


usage: var printf = PRINTJ.sprintf; This implementation supports the full POSIX set of conversions. Consult the enclosed README for full details.


Laravel Dusk
- Introduction
- Installation
- Getting Started
- Interacting With Elements
- Available Assertions
- Pages
- Components
- Continuous Integration
Introduction
Laravel Dusk provides an expressive, easy-to-use browser automation and testing API. By default, Dusk does not require you to install JDK or Selenium on your machine. Instead, Dusk uses a standalone ChromeDriver installation. However, you are free to utilize any other Selenium compatible driver you wish.
Installation
To get started, you should add the laravel/dusk
Composer dependency to your project:
composer require --dev laravel/dusk
{note} If you are manually registering Dusk's service provider, you should never register it in your production environment, as doing so could lead to arbitrary users being able to authenticate with your application.
After installing the Dusk package, run the dusk:install
Artisan command:
php artisan dusk:install
A Browser
directory will be created within your tests
directory and will contain an example test. Next, set the APP_URL
environment variable in your .env
file. This value should match the URL you use to access your application in a browser.
To run your tests, use the dusk
Artisan command. The dusk
command accepts any argument that is also accepted by the phpunit
command:
php artisan dusk
If you had test failures the last time you ran the dusk
command, you may save time by re-running the failing tests first using the dusk:fails
command:
php artisan dusk:fails
{note} Dusk requires its
chromedriver
binaries to be executable. If you're having problems running Dusk, you can ensure the binaries are executable using the following command:chmod -R 0755 vendor/laravel/dusk/bin
.
Using Other Browsers
By default, Dusk uses Google Chrome and a standalone ChromeDriver installation to run your browser tests. However, you may start your own Selenium server and run your tests against any browser you wish.
To get started, open your tests/DuskTestCase.php
file, which is the base Dusk test case for your application. Within this file, you can remove the call to the startChromeDriver
method. This will stop Dusk from automatically starting the ChromeDriver:
/**
* Prepare for Dusk test execution.
*
* @beforeClass
* @return void
*/
public static function prepare()
{
// static::startChromeDriver();
}
Next, you may modify the driver
method to connect to the URL and port of your choice. In addition, you may modify the "desired capabilities" that should be passed to the WebDriver:
/**
* Create the RemoteWebDriver instance.
*
* @return \Facebook\WebDriver\Remote\RemoteWebDriver
*/
protected function driver()
{
return RemoteWebDriver::create(
'http://localhost:4444/wd/hub', DesiredCapabilities::phantomjs()
);
}
Getting Started
Generating Tests
To generate a Dusk test, use the dusk:make
Artisan command. The generated test will be placed in the tests/Browser
directory:
php artisan dusk:make LoginTest
Running Tests
To run your browser tests, use the dusk
Artisan command:
php artisan dusk
If you had test failures the last time you ran the dusk
command, you may save time by re-running the failing tests first using the dusk:fails
command:
php artisan dusk:fails
The dusk
command accepts any argument that is normally accepted by the PHPUnit test runner, allowing you to only run the tests for a given group, etc:
php artisan dusk --group=foo
Manually Starting ChromeDriver
By default, Dusk will automatically attempt to start ChromeDriver. If this does not work for your particular system, you may manually start ChromeDriver before running the dusk
command. If you choose to start ChromeDriver manually, you should comment out the following line of your tests/DuskTestCase.php
file:
/**
* Prepare for Dusk test execution.
*
* @beforeClass
* @return void
*/
public static function prepare()
{
// static::startChromeDriver();
}
In addition, if you start ChromeDriver on a port other than 9515, you should modify the driver
method of the same class:
/**
* Create the RemoteWebDriver instance.
*
* @return \Facebook\WebDriver\Remote\RemoteWebDriver
*/
protected function driver()
{
return RemoteWebDriver::create(
'http://localhost:9515', DesiredCapabilities::chrome()
);
}
Environment Handling
To force Dusk to use its own environment file when running tests, create a .env.dusk.{environment}
file in the root of your project. For example, if you will be initiating the dusk
command from your local
environment, you should create a .env.dusk.local
file.
When running tests, Dusk will back-up your .env
file and rename your Dusk environment to .env
. Once the tests have completed, your .env
file will be restored.
Creating Browsers
To get started, let's write a test that verifies we can log into our application. After generating a test, we can modify it to navigate to the login page, enter some credentials, and click the "Login" button. To create a browser instance, call the browse
method:
<?php
namespace Tests\Browser;
use App\User;
use Tests\DuskTestCase;
use Laravel\Dusk\Chrome;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends DuskTestCase
{
use DatabaseMigrations;
/**
* A basic browser test example.
*
* @return void
*/
public function testBasicExample()
{
$user = factory(User::class)->create([
'email' =><EMAIL_ADDRESS>]);
$this->browse(function ($browser) use ($user) {
$browser->visit('/login')
->type('email', $user->email)
->type('password', 'secret')
->press('Login')
->assertPathIs('/home');
});
}
}
As you can see in the example above, the browse
method accepts a callback. A browser instance will automatically be passed to this callback by Dusk and is the main object used to interact with and make assertions against your application.
{tip} This test can be used to test the login screen generated by the
make:auth
Artisan command.
Creating Multiple Browsers
Sometimes you may need multiple browsers in order to properly carry out a test. For example, multiple browsers may be needed to test a chat screen that interacts with websockets. To create multiple browsers, "ask" for more than one browser in the signature of the callback given to the browse
method:
$this->browse(function ($first, $second) {
$first->loginAs(User::find(1))
->visit('/home')
->waitForText('Message');
$second->loginAs(User::find(2))
->visit('/home')
->waitForText('Message')
->type('message', 'Hey Taylor')
->press('Send');
$first->waitForText('Hey Taylor')
->assertSee('Jeffrey Way');
});
Resizing Browser Windows
You may use the resize
method to adjust the size of the browser window:
$browser->resize(1920, 1080);
The maximize
method may be used to maximize the browser window:
$browser->maximize();
Browser Macros
If you would like to define a custom browser method that you can re-use in a variety of your tests, you may use the macro
method on the Browser
class. Typically, you should call this method from a service provider's boot
method:
<?php
namespace App\Providers;
use Laravel\Dusk\Browser;
use Illuminate\Support\ServiceProvider;
class DuskServiceProvider extends ServiceProvider
{
/**
* Register the Dusk's browser macros.
*
* @return void
*/
public function boot()
{
Browser::macro('scrollToElement', function ($element = null) {
$this->script("$('html, body').animate({ scrollTop: $('$element').offset().top }, 0);");
return $this;
});
}
}
The macro
function accepts a name as its first argument, and a Closure as its second. The macro's Closure will be executed when calling the macro as a method on a Browser
implementation:
$this->browse(function ($browser) use ($user) {
$browser->visit('/pay')
->scrollToElement('#credit-card-details')
->assertSee('Enter Credit Card Details');
});
Authentication
Often, you will be testing pages that require authentication. You can use Dusk's loginAs
method in order to avoid interacting with the login screen during every test. The loginAs
method accepts a user ID or user model instance:
$this->browse(function ($first, $second) {
$first->loginAs(User::find(1))
->visit('/home');
});
{note} After using the
loginAs
method, the user session will be maintained for all tests within the file.
Database Migrations
When your test requires migrations, like the authentication example above, you should never use the RefreshDatabase
trait. The RefreshDatabase
trait leverages database transactions which will not be applicable across HTTP requests. Instead, use the DatabaseMigrations
trait:
<?php
namespace Tests\Browser;
use App\User;
use Tests\DuskTestCase;
use Laravel\Dusk\Chrome;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends DuskTestCase
{
use DatabaseMigrations;
}
Interacting With Elements
Dusk Selectors
Choosing good CSS selectors for interacting with elements is one of the hardest parts of writing Dusk tests. Over time, frontend changes can cause CSS selectors like the following to break your tests:
// HTML...
<button>Login</button>
// Test...
$browser->click('.login-page .container div > button');
Dusk selectors allow you to focus on writing effective tests rather than remembering CSS selectors. To define a selector, add a dusk
attribute to your HTML element. Then, prefix the selector with @
to manipulate the attached element within a Dusk test:
// HTML...
<button dusk="login-button">Login</button>
// Test...
$browser->click('@login-button');
Clicking Links
To click a link, you may use the clickLink
method on the browser instance. The clickLink
method will click the link that has the given display text:
$browser->clickLink($linkText);
{note} This method interacts with jQuery. If jQuery is not available on the page, Dusk will automatically inject it into the page so it is available for the test's duration.
Text, Values, & Attributes
Retrieving & Setting Values
Dusk provides several methods for interacting with the current display text, value, and attributes of elements on the page. For example, to get the "value" of an element that matches a given selector, use the value
method:
// Retrieve the value...
$value = $browser->value('selector');
// Set the value...
$browser->value('selector', 'value');
Retrieving Text
The text
method may be used to retrieve the display text of an element that matches the given selector:
$text = $browser->text('selector');
Retrieving Attributes
Finally, the attribute
method may be used to retrieve an attribute of an element matching the given selector:
$attribute = $browser->attribute('selector', 'value');
Using Forms
Typing Values
Dusk provides a variety of methods for interacting with forms and input elements. First, let's take a look at an example of typing text into an input field:
$browser->type('email', 'taylor@laravel.com');
Note that, although the method accepts one if necessary, we are not required to pass a CSS selector into the type
method. If a CSS selector is not provided, Dusk will search for an input field with the given name
attribute. Finally, Dusk will attempt to find a textarea
with the given name
attribute.
To append text to a field without clearing its content, you may use the append
method:
$browser->type('tags', 'foo')
->append('tags', ', bar, baz');
You may clear the value of an input using the clear
method:
$browser->clear('email');
Dropdowns
To select a value in a dropdown selection box, you may use the select
method. Like the type
method, the select
method does not require a full CSS selector. When passing a value to the select
method, you should pass the underlying option value instead of the display text:
$browser->select('size', 'Large');
You may select a random option by omitting the second parameter:
$browser->select('size');
Checkboxes
To "check" a checkbox field, you may use the check
method. Like many other input related methods, a full CSS selector is not required. If an exact selector match can't be found, Dusk will search for a checkbox with a matching name
attribute:
$browser->check('terms');
$browser->uncheck('terms');
Radio Buttons
To "select" a radio button option, you may use the radio
method. Like many other input related methods, a full CSS selector is not required. If an exact selector match can't be found, Dusk will search for a radio with matching name
and value
attributes:
$browser->radio('version', 'php7');
Attaching Files
The attach
method may be used to attach a file to a file
input element. Like many other input related methods, a full CSS selector is not required. If an exact selector match can't be found, Dusk will search for a file input with matching name
attribute:
$browser->attach('photo', __DIR__.'/photos/me.png');
{note} The attach function requires the
Zip
PHP extension to be installed and enabled on your server.
Using The Keyboard
The keys
method allows you to provide more complex input sequences to a given element than normally allowed by the type
method. For example, you may hold modifier keys entering values. In this example, the shift
key will be held while taylor
is entered into the element matching the given selector. After taylor
is typed, otwell
will be typed without any modifier keys:
$browser->keys('selector', ['{shift}', 'taylor'], 'otwell');
You may even send a "hot key" to the primary CSS selector that contains your application:
$browser->keys('.app', ['{command}', 'j']);
{tip} All modifier keys are wrapped in
{}
characters, and match the constants defined in theFacebook\WebDriver\WebDriverKeys
class, which can be found on GitHub.
Using The Mouse
Clicking On Elements
The click
method may be used to "click" on an element matching the given selector:
$browser->click('.selector');
Mouseover
The mouseover
method may be used when you need to move the mouse over an element matching the given selector:
$browser->mouseover('.selector');
Drag & Drop
The drag
method may be used to drag an element matching the given selector to another element:
$browser->drag('.from-selector', '.to-selector');
Or, you may drag an element in a single direction:
$browser->dragLeft('.selector', 10);
$browser->dragRight('.selector', 10);
$browser->dragUp('.selector', 10);
$browser->dragDown('.selector', 10);
JavaScript Dialogs
Dusk provides various methods to interact with JavaScript Dialogs:
// Wait for a dialog to appear:
$browser->waitForDialog($seconds = null);
// Assert that a dialog has been displayed and that its message matches the given value:
$browser->assertDialogOpened('value');
// Type the given value in an open JavaScript prompt dialog:
$browser->typeInDialog('Hello World');
To close an opened JavaScript Dialog, clicking the OK button:
$browser->acceptDialog();
To close an opened JavaScript Dialog, clicking the Cancel button (for a confirmation dialog only):
$browser->dismissDialog();
Scoping Selectors
Sometimes you may wish to perform several operations while scoping all of the operations within a given selector. For example, you may wish to assert that some text exists only within a table and then click a button within that table. You may use the with
method to accomplish this. All operations performed within the callback given to the with
method will be scoped to the original selector:
$browser->with('.table', function ($table) {
$table->assertSee('Hello World')
->clickLink('Delete');
});
Waiting For Elements
When testing applications that use JavaScript extensively, it often becomes necessary to "wait" for certain elements or data to be available before proceeding with a test. Dusk makes this a cinch. Using a variety of methods, you may wait for elements to be visible on the page or even wait until a given JavaScript expression evaluates to true
.
Waiting
If you need to pause the test for a given number of milliseconds, use the pause
method:
$browser->pause(1000);
Waiting For Selectors
The waitFor
method may be used to pause the execution of the test until the element matching the given CSS selector is displayed on the page. By default, this will pause the test for a maximum of five seconds before throwing an exception. If necessary, you may pass a custom timeout threshold as the second argument to the method:
// Wait a maximum of five seconds for the selector...
$browser->waitFor('.selector');
// Wait a maximum of one second for the selector...
$browser->waitFor('.selector', 1);
You may also wait until the given selector is missing from the page:
$browser->waitUntilMissing('.selector');
$browser->waitUntilMissing('.selector', 1);
Scoping Selectors When Available
Occasionally, you may wish to wait for a given selector and then interact with the element matching the selector. For example, you may wish to wait until a modal window is available and then press the "OK" button within the modal. The whenAvailable
method may be used in this case. All element operations performed within the given callback will be scoped to the original selector:
$browser->whenAvailable('.modal', function ($modal) {
$modal->assertSee('Hello World')
->press('OK');
});
Waiting For Text
The waitForText
method may be used to wait until the given text is displayed on the page:
// Wait a maximum of five seconds for the text...
$browser->waitForText('Hello World');
// Wait a maximum of one second for the text...
$browser->waitForText('Hello World', 1);
Waiting For Links
The waitForLink
method may be used to wait until the given link text is displayed on the page:
// Wait a maximum of five seconds for the link...
$browser->waitForLink('Create');
// Wait a maximum of one second for the link...
$browser->waitForLink('Create', 1);
Waiting On The Page Location
When making a path assertion such as $browser->assertPathIs('/home')
, the assertion can fail if window.location.pathname
is being updated asynchronously. You may use the waitForLocation
method to wait for the location to be a given value:
$browser->waitForLocation('/secret');
You may also wait for a named route's location:
$browser->waitForRoute($routeName, $parameters);
Waiting for Page Reloads
If you need to make assertions after a page has been reloaded, use the waitForReload
method:
$browser->click('.some-action')
->waitForReload()
->assertSee('something');
Waiting On JavaScript Expressions
Sometimes you may wish to pause the execution of a test until a given JavaScript expression evaluates to true
. You may easily accomplish this using the waitUntil
method. When passing an expression to this method, you do not need to include the return
keyword or an ending semi-colon:
// Wait a maximum of five seconds for the expression to be true...
$browser->waitUntil('App.dataLoaded');
$browser->waitUntil('App.data.servers.length > 0');
// Wait a maximum of one second for the expression to be true...
$browser->waitUntil('App.data.servers.length > 0', 1);
Waiting On Vue Expressions
The following methods may be used to wait until a given Vue component attribute has a given value:
// Wait until the component attribute contains the given value...
$browser->waitUntilVue('user.name', 'Taylor', '@user');
// Wait until the component attribute doesn't contain the given value...
$browser->waitUntilVueIsNot('user.name', null, '@user');
Waiting With A Callback
Many of the "wait" methods in Dusk rely on the underlying waitUsing
method. You may use this method directly to wait for a given callback to return true
. The waitUsing
method accepts the maximum number of seconds to wait, the interval at which the Closure should be evaluated, the Closure, and an optional failure message:
$browser->waitUsing(10, 1, function () use ($something) {
return $something->isReady();
}, "Something wasn't ready in time.");
Making Vue Assertions
Dusk even allows you to make assertions on the state of Vue component data. For example, imagine your application contains the following Vue component:
// HTML...
<profile dusk="profile-component"></profile>
// Component Definition...
Vue.component('profile', {
template: '<div>{{ user.name }}</div>',
data: function () {
return {
user: {
name: 'Taylor'
}
};
}
});
You may assert on the state of the Vue component like so:
/**
* A basic Vue test example.
*
* @return void
*/
public function testVue()
{
$this->browse(function (Browser $browser) {
$browser->visit('/')
->assertVue('user.name', 'Taylor', '@profile-component');
});
}
Available Assertions
Dusk provides a variety of assertions that you may make against your application. All of the available assertions are documented in the list below:
assertTitle assertTitleContains assertUrlIs assertSchemeIs assertSchemeIsNot assertHostIs assertHostIsNot assertPortIs assertPortIsNot assertPathBeginsWith assertPathIs assertPathIsNot assertRouteIs assertQueryStringHas assertQueryStringMissing assertFragmentIs assertFragmentBeginsWith assertFragmentIsNot assertHasCookie assertCookieMissing assertCookieValue assertPlainCookieValue assertSee assertDontSee assertSeeIn assertDontSeeIn assertSourceHas assertSourceMissing assertSeeLink assertDontSeeLink assertInputValue assertInputValueIsNot assertChecked assertNotChecked assertRadioSelected assertRadioNotSelected assertSelected assertNotSelected assertSelectHasOptions assertSelectMissingOptions assertSelectHasOption assertValue assertVisible assertPresent assertMissing assertDialogOpened assertEnabled assertDisabled assertFocused assertNotFocused assertVue assertVueIsNot assertVueContains assertVueDoesNotContain
assertTitle
Assert that the page title matches the given text:
$browser->assertTitle($title);
assertTitleContains
Assert that the page title contains the given text:
$browser->assertTitleContains($title);
assertUrlIs
Assert that the current URL (without the query string) matches the given string:
$browser->assertUrlIs($url);
assertSchemeIs
Assert that the current URL scheme matches the given scheme:
$browser->assertSchemeIs($scheme);
assertSchemeIsNot
Assert that the current URL scheme does not match the given scheme:
$browser->assertSchemeIsNot($scheme);
assertHostIs
Assert that the current URL host matches the given host:
$browser->assertHostIs($host);
assertHostIsNot
Assert that the current URL host does not match the given host:
$browser->assertHostIsNot($host);
assertPortIs
Assert that the current URL port matches the given port:
$browser->assertPortIs($port);
assertPortIsNot
Assert that the current URL port does not match the given port:
$browser->assertPortIsNot($port);
assertPathBeginsWith
Assert that the current URL path begins with the given path:
$browser->assertPathBeginsWith($path);
assertPathIs
Assert that the current path matches the given path:
$browser->assertPathIs('/home');
assertPathIsNot
Assert that the current path does not match the given path:
$browser->assertPathIsNot('/home');
assertRouteIs
Assert that the current URL matches the given named route's URL:
$browser->assertRouteIs($name, $parameters);
assertQueryStringHas
Assert that the given query string parameter is present:
$browser->assertQueryStringHas($name);
Assert that the given query string parameter is present and has a given value:
$browser->assertQueryStringHas($name, $value);
assertQueryStringMissing
Assert that the given query string parameter is missing:
$browser->assertQueryStringMissing($name);
assertFragmentIs
Assert that the current fragment matches the given fragment:
$browser->assertFragmentIs('anchor');
assertFragmentBeginsWith
Assert that the current fragment begins with the given fragment:
$browser->assertFragmentBeginsWith('anchor');
assertFragmentIsNot
Assert that the current fragment does not match the given fragment:
$browser->assertFragmentIsNot('anchor');
assertHasCookie
Assert that the given cookie is present:
$browser->assertHasCookie($name);
assertCookieMissing
Assert that the given cookie is not present:
$browser->assertCookieMissing($name);
assertCookieValue
Assert that a cookie has a given value:
$browser->assertCookieValue($name, $value);
assertPlainCookieValue
Assert that an unencrypted cookie has a given value:
$browser->assertPlainCookieValue($name, $value);
assertSee
Assert that the given text is present on the page:
$browser->assertSee($text);
assertDontSee
Assert that the given text is not present on the page:
$browser->assertDontSee($text);
assertSeeIn
Assert that the given text is present within the selector:
$browser->assertSeeIn($selector, $text);
assertDontSeeIn
Assert that the given text is not present within the selector:
$browser->assertDontSeeIn($selector, $text);
assertSourceHas
Assert that the given source code is present on the page:
$browser->assertSourceHas($code);
assertSourceMissing
Assert that the given source code is not present on the page:
$browser->assertSourceMissing($code);
assertSeeLink
Assert that the given link is present on the page:
$browser->assertSeeLink($linkText);
assertDontSeeLink
Assert that the given link is not present on the page:
$browser->assertDontSeeLink($linkText);
assertInputValue
Assert that the given input field has the given value:
$browser->assertInputValue($field, $value);
assertInputValueIsNot
Assert that the given input field does not have the given value:
$browser->assertInputValueIsNot($field, $value);
assertChecked
Assert that the given checkbox is checked:
$browser->assertChecked($field);
assertNotChecked
Assert that the given checkbox is not checked:
$browser->assertNotChecked($field);
assertRadioSelected
Assert that the given radio field is selected:
$browser->assertRadioSelected($field, $value);
assertRadioNotSelected
Assert that the given radio field is not selected:
$browser->assertRadioNotSelected($field, $value);
assertSelected
Assert that the given dropdown has the given value selected:
$browser->assertSelected($field, $value);
assertNotSelected
Assert that the given dropdown does not have the given value selected:
$browser->assertNotSelected($field, $value);
assertSelectHasOptions
Assert that the given array of values are available to be selected:
$browser->assertSelectHasOptions($field, $values);
assertSelectMissingOptions
Assert that the given array of values are not available to be selected:
$browser->assertSelectMissingOptions($field, $values);
assertSelectHasOption
Assert that the given value is available to be selected on the given field:
$browser->assertSelectHasOption($field, $value);
assertValue
Assert that the element matching the given selector has the given value:
$browser->assertValue($selector, $value);
assertVisible
Assert that the element matching the given selector is visible:
$browser->assertVisible($selector);
assertPresent
Assert that the element matching the given selector is present:
$browser->assertPresent($selector);
assertMissing
Assert that the element matching the given selector is not visible:
$browser->assertMissing($selector);
assertDialogOpened
Assert that a JavaScript dialog with the given message has been opened:
$browser->assertDialogOpened($message);
assertEnabled
Assert that the given field is enabled:
$browser->assertEnabled($field);
assertDisabled
Assert that the given field is disabled:
$browser->assertDisabled($field);
assertFocused
Assert that the given field is focused:
$browser->assertFocused($field);
assertNotFocused
Assert that the given field is not focused:
$browser->assertNotFocused($field);
assertVue
Assert that a given Vue component data property matches the given value:
$browser->assertVue($property, $value, $componentSelector = null);
assertVueIsNot
Assert that a given Vue component data property does not match the given value:
$browser->assertVueIsNot($property, $value, $componentSelector = null);
assertVueContains
Assert that a given Vue component data property is an array and contains the given value:
$browser->assertVueContains($property, $value, $componentSelector = null);
assertVueDoesNotContain
Assert that a given Vue component data property is an array and does not contain the given value:
$browser->assertVueDoesNotContain($property, $value, $componentSelector = null);
Pages
Sometimes, tests require several complicated actions to be performed in sequence. This can make your tests harder to read and understand. Pages allow you to define expressive actions that may then be performed on a given page using a single method. Pages also allow you to define short-cuts to common selectors for your application or a single page.
Generating Pages
To generate a page object, use the dusk:page
Artisan command. All page objects will be placed in the tests/Browser/Pages
directory:
php artisan dusk:page Login
Configuring Pages
By default, pages have three methods: url
, assert
, and elements
. We will discuss the url
and assert
methods now. The elements
method will be discussed in more detail below.
The url
Method
The url
method should return the path of the URL that represents the page. Dusk will use this URL when navigating to the page in the browser:
/**
* Get the URL for the page.
*
* @return string
*/
public function url()
{
return '/login';
}
The assert
Method
The assert
method may make any assertions necessary to verify that the browser is actually on the given page. Completing this method is not necessary; however, you are free to make these assertions if you wish. These assertions will be run automatically when navigating to the page:
/**
* Assert that the browser is on the page.
*
* @return void
*/
public function assert(Browser $browser)
{
$browser->assertPathIs($this->url());
}
Navigating To Pages
Once a page has been configured, you may navigate to it using the visit
method:
use Tests\Browser\Pages\Login;
$browser->visit(new Login);
Sometimes you may already be on a given page and need to "load" the page's selectors and methods into the current test context. This is common when pressing a button and being redirected to a given page without explicitly navigating to it. In this situation, you may use the on
method to load the page:
use Tests\Browser\Pages\CreatePlaylist;
$browser->visit('/dashboard')
->clickLink('Create Playlist')
->on(new CreatePlaylist)
->assertSee('@create');
Shorthand Selectors
The elements
method of pages allows you to define quick, easy-to-remember shortcuts for any CSS selector on your page. For example, let's define a shortcut for the "email" input field of the application's login page:
/**
* Get the element shortcuts for the page.
*
* @return array
*/
public function elements()
{
return [
'@email' => 'input[name=email]',
];
}
Now, you may use this shorthand selector anywhere you would use a full CSS selector:
$browser->type('@email', 'taylor@laravel.com');
Global Shorthand Selectors
After installing Dusk, a base Page
class will be placed in your tests/Browser/Pages
directory. This class contains a siteElements
method which may be used to define global shorthand selectors that should be available on every page throughout your application:
/**
* Get the global element shortcuts for the site.
*
* @return array
*/
public static function siteElements()
{
return [
'@element' => '#selector',
];
}
Page Methods
In addition to the default methods defined on pages, you may define additional methods which may be used throughout your tests. For example, let's imagine we are building a music management application. A common action for one page of the application might be to create a playlist. Instead of re-writing the logic to create a playlist in each test, you may define a createPlaylist
method on a page class:
<?php
namespace Tests\Browser\Pages;
use Laravel\Dusk\Browser;
class Dashboard extends Page
{
// Other page methods...
/**
* Create a new playlist.
*
* @param \Laravel\Dusk\Browser $browser
* @param string $name
* @return void
*/
public function createPlaylist(Browser $browser, $name)
{
$browser->type('name', $name)
->check('share')
->press('Create Playlist');
}
}
Once the method has been defined, you may use it within any test that utilizes the page. The browser instance will automatically be passed to the page method:
use Tests\Browser\Pages\Dashboard;
$browser->visit(new Dashboard)
->createPlaylist('My Playlist')
->assertSee('My Playlist');
Components
Components are similar to Dusk’s “page objects”, but are intended for pieces of UI and functionality that are re-used throughout your application, such as a navigation bar or notification window. As such, components are not bound to specific URLs.
Generating Components
To generate a component, use the dusk:component
Artisan command. New components are placed in the test/Browser/Components
directory:
php artisan dusk:component DatePicker
As shown above, a "date picker" is an example of a component that might exist throughout your application on a variety of pages. It can become cumbersome to manually write the browser automation logic to select a date in dozens of tests throughout your test suite. Instead, we can define a Dusk component to represent the date picker, allowing us to encapsulate that logic within the component:
<?php
namespace Tests\Browser\Components;
use Laravel\Dusk\Browser;
use Laravel\Dusk\Component as BaseComponent;
class DatePicker extends BaseComponent
{
/**
* Get the root selector for the component.
*
* @return string
*/
public function selector()
{
return '.date-picker';
}
/**
* Assert that the browser page contains the component.
*
* @param Browser $browser
* @return void
*/
public function assert(Browser $browser)
{
$browser->assertVisible($this->selector());
}
/**
* Get the element shortcuts for the component.
*
* @return array
*/
public function elements()
{
return [
'@date-field' => 'input.datepicker-input',
'@month-list' => 'div > div.datepicker-months',
'@day-list' => 'div > div.datepicker-days',
];
}
/**
* Select the given date.
*
* @param \Laravel\Dusk\Browser $browser
* @param int $month
* @param int $day
* @return void
*/
public function selectDate($browser, $month, $day)
{
$browser->click('@date-field')
->within('@month-list', function ($browser) use ($month) {
$browser->click($month);
})
->within('@day-list', function ($browser) use ($day) {
$browser->click($day);
});
}
}
Using Components
Once the component has been defined, we can easily select a date within the date picker from any test. And, if the logic necessary to select a date changes, we only need to update the component:
<?php
namespace Tests\Browser;
use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
use Tests\Browser\Components\DatePicker;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends DuskTestCase
{
/**
* A basic component test example.
*
* @return void
*/
public function testBasicExample()
{
$this->browse(function (Browser $browser) {
$browser->visit('/')
->within(new DatePicker, function ($browser) {
$browser->selectDate(1, 2018);
})
->assertSee('January');
});
}
}
Continuous Integration
CircleCI
If you are using CircleCI to run your Dusk tests, you may use this configuration file as a starting point. Like TravisCI, we will use the php artisan serve
command to launch PHP's built-in web server:
version: 2
jobs:
build:
steps:
- run: sudo apt-get install -y libsqlite3-dev
- run: cp .env.testing .env
- run: composer install -n --ignore-platform-reqs
- run: npm install
- run: npm run production
- run: vendor/bin/phpunit
- run:
name: Start Chrome Driver
command: ./vendor/laravel/dusk/bin/chromedriver-linux
background: true
- run:
name: Run Laravel Server
command: php artisan serve
background: true
- run:
name: Run Laravel Dusk Tests
command: php artisan dusk
Codeship
To run Dusk tests on Codeship, add the following commands to your Codeship project. These commands are just a starting point and you are free to add additional commands as needed:
phpenv local 7.2
cp .env.testing .env
mkdir -p ./bootstrap/cache
composer install --no-interaction --prefer-dist
php artisan key:generate
nohup bash -c "php artisan serve 2>&1 &" && sleep 5
php artisan dusk
Heroku CI
To run Dusk tests on Heroku CI, add the following Google Chrome buildpack and scripts to your Heroku app.json
file:
{
"environments": {
"test": {
"buildpacks": [
{ "url": "heroku/php" },
{ "url": "https://github.com/heroku/heroku-buildpack-google-chrome" }
],
"scripts": {
"test-setup": "cp .env.testing .env",
"test": "nohup bash -c './vendor/laravel/dusk/bin/chromedriver-linux > /dev/null 2>&1 &' && nohup bash -c 'php artisan serve > /dev/null 2>&1 &' && php artisan dusk"
}
}
}
}
Travis CI
To run your Dusk tests on Travis CI, use the following .travis.yml
configuration. Since Travis CI is not a graphical environment, we will need to take some extra steps in order to launch a Chrome browser. In addition, we will use php artisan serve
to launch PHP's built-in web server:
language: php
php:
- 7.3
addons:
chrome: stable
install:
- cp .env.testing .env
- travis_retry composer install --no-interaction --prefer-dist --no-suggest
- php artisan key:generate
before_script:
- google-chrome-stable --headless --disable-gpu --remote-debugging-port=9222 http://localhost &
- php artisan serve &
script:
- php artisan dusk
In your .env.testing
file, adjust the value of APP_URL
:
APP_URL=http://<IP_ADDRESS>:8000


Before Change
keywords="neuroscience, algorithm, fMRI, distributed, scalable",
long_description=long_description,
cmdclass={"build_ext": BuildExt},
packages=find_packages(exclude=["doc", "test"]),
)
After Change
return pybind11.get_include(self.user)
ext_modules = [
Extension(
"tfa_extension",
["brainiak/factor_analysis/tfa_extension.cpp"],
include_dirs=[
// Path to pybind11 headers
get_pybind_include(),
get_pybind_include(user=True)
],
language="c++"
),
]
// As of Python 3.6, CCompiler has a `has_flag` method.
// cf http://bugs.python.org/issue26689


Velodyne Manual:
The Velodyne manual is available by request to students of MAE 789: Modern Modeling. I will attempt to drop it in everyone's HPC user folder, but if I miss you send me an email and let me know.
Just like us, the following links will inevitably die at some point. If they do, a quick google search will do the trick. Also, if you're a Mac user and you find good alternatives to WinSCP, let me know so I can add it to the list.
Downloads:
PuTTY
WinSCP
LS-PrePost (Currently using 4.3)
VisIt
Useful Links:
NC State's HPC Center
VIM Commands Cheat Sheet
Linux Shortcuts and Commands


--- layout: post status: publish published: true title: Docker & Continuous Delivery Deployment Types header-img: "img/Docker-and-Continuous-Delivery-Deployment-Types.png" author: display_name: Stefan Thorpe login: stefan email<EMAIL_ADDRESS>url: '' author_login: stefan author_email<EMAIL_ADDRESS>wordpress_id: 1969 wordpress_url: https://caylent.com/?p=1969 date: '2017-11-06 08:00:46 +0200' date_gmt: '2017-11-06 16:00:46 +0200' categories: - Docker - Continuous Delivery - Containers tags: - Docker - Continuous Delivery - Minimum In-Service Deployments - Rolling Deployments - Blue/Green Deployments - A/B Testing comments: - id: 26 author: Docker and Continuous Delivery Deployment Types – Full-Stack Feed author_email: '' author_url: https://fullstackfeed.com/docker-and-continuous-delivery-deployment-types/ date: '2017-11-06 14:47:55 +0200' date_gmt: '2017-11-06 22:47:55 +0200' content: "[…] We examine the four major deployment methods to help your team achieve Continuous Delivery with Docker outlining each of their advantages and disadvantages… Read more […]" --- {% raw %}
This post was originally published here.
In our last blog post—A 5-Step Guide to Good Continuous Delivery—we began looking at the best practices high-performing IT teams should be employing to achieve Continuous Delivery (CD) with Docker. CD is achievable using numerous deployment methods and Docker is just one tool to help realize the necessary customizable “workflow-based” integration/build process.
This week, we’re going to examine the four major deployment types and outline each of their advantages and disadvantages. These are:
These four deployment types fall into two sub-categories: application and infrastructure deployment.
With this method, we specify the minimum number of instances in our applications that stay in-service while updating the remaining percentage—therefore, deploying to as large a number of targets as possible. This process is repeated until all servers have been updated with the new release.
Example: If we have 5 containers each running our current application A, then we set our policy to keep a minimum in-service number of 2. We take 3 servers offline to update them to our new version B. Once these are completed and back online, we can update the remaining 2.
Consider rolling deployments as an extension of minimum in-service. However, rather than define the number of containers that should remain online, we specify the maximum number of containers to update in tandem.
Example: We have the same 5 containers as before, but this time we initialize rolling updates by specifying the number of containers that may be updated simultaneously, e.g. 2. The process moves updates through 2 containers at a time until all the servers in the series are updated.
Note: Docker Swarm supports rolling updates out the box; the default is to update one container at a time. To modify this use the --update-parallelism setting
When following the Blue/Green (a.k.a. Red/Black) method, we replicate our “entire” infrastructure for a short time. The replicated infrastructure hosts the new application, while the old infrastructure continues to run until testing is complete and the new stack is adopted. The capabilities to achieve this have been around for a long time, but before the Cloud, it was an incredibly costly deployment method. Now, we can deploy stacks to a whole new environment—allowing for isolated evaluation—and thanks to the Cloud, at minimal costs. Once testing is complete, we switch our application over to the new version and shut down the legacy stack.
As the image depicts, Blue represents your current environment version, while the new variant you want to deploy is Green. Typically, this happens in the form of a DNS change, though you can deploy Blue/Green by modifying Auto Scaling Groups too.
A/B deployments are virtually identical to Blue/Green, but in this method, we send a small percentage of traffic to our new green environment. This method is capable of switching environments and changing infrastructure, but in a far more precise way than with Blue/Green deployment.
All the benefits of Blue/Green deployments, plus:
Selecting your method of deployment comes down to what best suits your business and technical needs. If it makes sense for your application and user base, we highly recommend leveraging A/B testing where possible.
If you’re keen to automate this entire process, then we’d like to invite you to check out Caylent, our SaaS platform that makes it easy to deploy apps, such as WordPress, inside your own cloud. Our DevOps Container Management System automates the entire process covered here and a whole lot more.
Best of all, it is free to begin! Click here to sign up today.
As always, we welcome your feedback and suggestions for future articles.
{% endraw %}


PS4 Controller Black Friday Deals – Rose Gold, Glacier, Camouflage and more
by Ed ThornIt’s Black Friday, which means deals all week long. More deals than you can wrap your head around, deals spilling all over the floor, deals tucking you into bed at night – you get the idea. Well, it turns out there are loads of offers on PS4 Controllers right now and in a variety of colours too.
Everything from the lovely Rose Gold, to the frosty Glacier White DualShock 4 can be found at a much lower price than usual. If you’re looking to nab a new, replacement or an extra PS4 Controller, then it’s worth scanning through our page below and seeing what takes your fancy.
As always, we’ll endeavor to keep this page updated with all the latest PS4 Controller deals, so keep it bookmarked to stay on top of them all!
What are the best Black Friday PS4 Controller deals right now?
Below you’ll find the best early PS4 Black Friday Controller deals we’ve seen out in the wilds. As we’ve mentioned above, we’ll be keeping a close eye on any deals which spring up in the future.
PS4 Controller Deals in the US:
- DualShock 4 Wireless Controller for PS4 – Jet Black for $38.99
- DualShock 4 Wireless Controller for PS4 – Magma Red for $38.99
- DualShock 4 Wireless Controller for PS4 – Midnight Blue for $38.99
- DualShock 4 Wireless Controller for PS4 – Gold for $38.99
- DualShock 4 Wireless Controller for PS4 – Crystal for $38.99
- DualShock 4 Wireless Controller for PS4 – Green Camouflage for $38.99
- DualShock 4 Wireless Controller for PS4 – Steel Black for $38.99
- DualShock 4 Wireless Controller for PS4 – Glacier White for $38.99
- DualShock 4 Wireless Controller for PS4 – Fortnite Jet Black for $38.99
- DualShock 4 Wireless Controller for PS4 – Blue Camouflage for $38.99
- DualShock 4 Wireless Controller for PS4 – Electric Purple for $38.99
- DualShock 4 Wireless Controller for PS4 – Red Camouflage for $38.99
- DualShock 4 Wireless Controller for PS4 – Rose Gold for $38.99
- DualShock 4 Wireless Controller for PS4 – Titanium Blue for $38.99
PS4 Controller Deals in the UK:
What’s the difference between first party and third party PS4 controllers?
First party (officially licensed) PlayStation 4 controllers are going to cost you more, but you’ll get something of higher quality with all the extras, like HD rumble, touchpad and more.
If you’re on a budget, a third party controller can be a decent go-to option. They might lack in build quality, and may not have all the features of a first party controller but they’ll likely do the job just fine.
What other PS4 Black Friday deals are there?
If you’re in the market for more things PlayStation, then you’re in the right place. As Black Friday continues, we’re rounding up all the best PS4 related deals across the web in our PS4 Black Friday deals hub. It contains offers on everything from great games, to console bundles and even a few PSVR deals too. There’s also some great PlayStation Plus deals live right now, so make sure you take a look.


How I became a Creativist, I
by Trevisia
on 2016-03-30
by Trevisia
on 2016-03-30
“Trevisia, you must be good at trivia! Why else would you be named so?”
After a semester and a half of failing subjects from Classical Painting to Introduction to Debate, I was desperate to find my calling.
“I’m no good at exams,” I told my roommates.
“These aren’t like exam questions. The questions in trivia nights are unusual.”
They wouldn’t tell me how, though. As we walked to the Electric Eel, I imagined the trivia-masters would ask questions such as identification of unusual colors, or the eight elements named in the Faerie Sonnets, or the right ratio of baking powder to baking soda in banana bread, that I would be uniquely able to answer.
But the masculinity of trivia appalled me. Trivia brought out the vilest parts of people. They tried to regurgitate answers that had been memorized from encyclopedias, newspapers, PHSS, the Internet, professors, missed questions on exams, word of mouth, or the “fact sheets” posted around campus and at the bus stop (for those who forgot to bring a book to pass the time).
I felt as if I were among Uniformists, except worse, because they were rowdy, all raising their hands, pounding on the tables, and clinking iced cubes in their drinks. I could feel the same answer being echoed in half the minds, even though I did not know what the answer was. Every time the Great Danzini directed a question at me, I came up with a random name, such as “Jeanatta Wullis” or “Ruthner Quorcum”. Unfortunately, not a single one was right. It was as if I was standing on one of the rings of Neptune, trying to throw a dart to hit exactly the pinnacle of Philosophocle.
After trivia night I decided to cash in my “free 3am friend” coupon. The girl behind the counter looked tired and pugnacious.
“I have a coupon…” I said tentatively.
She picked up the phone on her desk and dialed.
“Hey Agnes, we have a befriendee here…”
She gave me the phone.
“What would you like to talk about?” came the voice from the other end.
I took a deep breath. “I’m having this crisis, I just went to trivia night at the Electric Eel, and if I were to compare myself to a tree, each question they asked me wounded me like a swing of an ax…”
“I’d love to help you,” came the voice at the other end of the line, “but I’m helping someone deal with a breakup right now. I grant that losing at trivia night is a bad experience, but wouldn’t you say it’s a bit more… trivial? Give the phone back to Lisa, she can find you someone else.”
Lisa dialed another number (no response), and another (already busy with a befriendee). She checked the charts, “Joe takes the 3-4am shift off to listen to the radio hour, Jannie and Lura are out of town this week… I hate to say this, but we don’t have any befrienders available today.” She wrung her hands.  I’ll give you a rain check on that, you can come for a free friend anytime… Here, why don’t you listen to the radio, perhaps it will have some ‘Mellow beats’ like last week.”
But instead it was some kind of primal screeching accompanied by clangs of metal.
 Lisa shouted at the radio, banging it against the table. “All I ask is some calming music and you give me this piss!”
Usually I don’t like caustic personalities. But somehow, at this unreal time, it seemed exactly what I needed. Lisa felt like someone flailing, beautifully. Like a dancer performing on the edge of a fountain, giving the illusion of falling but never actually falling. Like me, except that I would actually fall in.
“What about you?” I asked hesitantly, “Can’t you be my 3am friend?”
“Absolutely not! I’m the receptionist only. Though I don’t know why the freaking leaking hellspont I signed up for the job. Actually I do—it’s related to a social experiement—oh never mind. I’m not accredited, last time I tried it I made the befriendee cry.”1
She sipped a cup of fragrant black liquid.
“What is that?”
“This? Coffee. You’ve never had coffee before? Oh, you’re missing out, girl. Here, why don’t you have a cup. We can’t be friends, but we can be conversation partners. Is that good enough for you?”
Over the strangly energizing liquid I poured out all my troubles to Lisa. It turned out that the trivia night was just the tip of the iceberg that my ship had run into. Everywhere in Philosophocle I saw the unbending necessity to memorize equations, or “recall the classics”. Professor Klausicus told us that “we never make anything new, all we do is regurgitate the olds. Therefore, I will teach you to regurgitate the best of the olds.” When I told him that I made new names every day for fun, was that not “new”? he gave me a stern look and a tap on the knuckles, “Besides the mountains of literature, that does not even amount to a sand speck.” When I signed up for painting class, I imagined myself drawing winged horses, castles built from coral reefs, or aurora boreali, but the teacher insisted everyone drew the same apple, and graded us on realism!
When I wandered around campus for three hours in a daze after “trivia night”, it was not because of the stress of answering trivia questions under pressure nor the “iced tea”, but rather the combined pressure of my Philosophocle education thus far.
Lisa looked at me grimly.
“It seems like you need to meet the Creativists.”
She stood up.
“I’m closing tonight, as all our ‘friends’ are busy or slacking. Let’s go take a walk.”
I told Lisa how my dormmates were Uniformists who kept pressuring me to join. They had donated all their old clothes to charity and replaced them with a wardrobe of U-shirts. How I shudder to think of a wardrobe being replaced like that! Imagine my rainbow colored shirts—one for each day of the week—all replaced by a uniform gray! As my three roommates descended deeper into Uniformism, I could no longer tell them apart. They would all eat breakfast together—identical slices of toast and cups of milk, everything—and I’d be along in my room, eating my box of Fruity Puffs. They’d all be smiling when they saw me, offering to lend me one of their U-shirts.
Not to mention, when we arrived at trivia night, they joined their Uniformist friends.
“Come join us,” they had said, but I refused, and was team-less.
“What a backhanded ploy to get you to joint the Uniformists!” Lisa said, “I’m glad you didn’t give in. But how could you miss the Creativists? Weren’t you at the Ideologies Fair at the beginning of the year?”
“Yes. It was so threatening, though! When I went in, the Theoreticians and the Applications were screaming at each other, and both of their presidents appealed to me to pick a side. I just backed out the door. As I was leaving, though, someone came up to me and gave me a coupon for a free friend.”
I noticed some ghostly figures drifting across campus. The two leaders had blankets draped over their shoulders.
“Who are they?” I asked.
“The Wonderers. You really missed everything at the Ideologies Fair, didn’t you? It’s alright, I’ll give you an overview.” She pointed at the stars. “What does that look like to you?”
I squinted. I tried to make out a deer, a wok, a stairway to heaven, a snake eating its own tail, anything, but came up with “a glob?”
“Exactly. So that’s the Uniformists, there.” She pointed at various constellations as she rattled off the groups. “Then you have their arch-enemies, the Creativists, see how that’s a person singing, dancing, and waving a paintbrush at the same time? That dark patch—there’s the Self-Effacers, you won’t see them much. Then there are the Techies and the Naturies, the Society for Family Values, the Sexists2, and the Poly House, the Vegetarian Co-op and the Omnivorous Co-op, the Existentialists, Nonexistentialists, Rationalists, Utilitarians, Relativizers, Altruists, Egoists, Feel-Gooders, Faithers, Experimentalists, Unknowers, Choosers, Stoners3, Freewillers, Determiners, Probabilists…”
We ducked under an archway of two kissing trees and came to a humble blue doorway. Lisa fiddled with the lock and the door opened. She struck a match and lit a lantern hanging beside the door.
“This is the Scoop. There aren’t any cookies here now, though there is some delicious cookie dough in the fridge. But the real exhibit is downstairs.”
Just looking at the cafe for a few seconds under the dim light, I could tell it was a friendly place. The walls were chalkboards upon which students had wrote poems that I did not recognize as part of the “classics”. Unlike the identical, industrial stools of the Electric Eel, the chairs were all flawed in their own way, like individual people.
After Lisa fed me some cookie dough, we went to the Workshop in the basement.
There were three long tables, filled with art supplies like glitter, glitter glue, scissors, metal hooks, plastic eyes, pipe cleaners, bubble-letter tracers, a Random Quote Box, beads, thread, yarn, buttons, colored pencils, paint, spray paint, construction paper, felt, cardboard, burnt-out light bulbs, cut-out book covers, magazines, shells, stones, clay, sketch books, craft books, pop-up books, T-shirts awaiting color, used-up toilet paper rolls, starcharts, toothpicks, cotton balls, socks, flower petals, acorn caps, last autumn’s leaves, feathers dropped from birds in flight, and coconut shells. The floor was covered with old newspaper. There was a U-shirt hanging from a clothesline, which had been defaced by the addition of a set of arms and legs to the U. (I saw then, crystal clear, what U meant: it was an empty receptacle, waiting to be filled, incapable of filling itself.) There was a half-decayed mushroom palace, made from the fruits of a mycological expedition.
The whole place smelled like alphabet soup. I smiled as I remembered long dinners of focused rearrangement, trying to find the most mellifluous combinations of phonemes despite a lack of vowels.
“Wow. Can I use this space?”
“You can if you are a Creativist. But you must complete the initiation before you can become a Creativist. Will you accept the challenge?”
I nodded. I didn’t trust myself to open my mouth to speak—if I did, I was sure that I would spew out a series of never-before spoken words. The language I knew seemed inadequate to express what I felt.
Lisa opened a drawer and took out a small wooden box with a handle. “This,” she said, “is a Randomizer.”
The befriendee had been a Uniformist whose girlfriend just broke up with him because he insisted on her joining Uniformism before they got married. Lisa had absolutely no sympathy for him. “It’s very difficult to be a Befriender,” she concluded, “You have to be able to be anyone’s friend, even if they have the complete opposite philosophy. I like to choose my friends and enemies, thank you very much.”↩
Webmaster’s note: In Philosophocle, the suffix -ist primarily means “someone who does or believes in…” rather than “someone who discriminates based on”↩
so called because when they meditate, they sit as still as stones↩


My research focuses on the evolution of biological complexity– particularly the origins of multicellularity, life cycles, syntrophy, and organizational scales. I am interested in how simple organisms evolve into complex ones. This topic is not only fascinating but it is fundamental to understanding the evolution and ecology of life– both on earth and elsewhere in the “verse”.


{include file="common/meta" /}
{include file="common/header"}
<
{include file="common/control"}
{include file="common/script"}


My name is Magan Hassan. I have an interest with computers & technology. Computers have always fascinated me since I was introduced to computer games consoles and online games. Therefore it has been my ambition to pursue a career in the computing industry. I'm love surfing the web so it's because of that I fall in love with web development & web design. I learnt a lot from studying the internet & the web in both college & university.
My hobbies/interest include watching anime, learning about Islam & playing games.
You can contact me via facebook
You can contact me via my email-<EMAIL_ADDRESS>You can contact me via WhatsApp. Details can be found on my CV


{% extends "layout.html" %} {% block head %}
Please fill in your credentials to register.
Have you an account? Login now.