Information about GameBoy hardware and programming is extremely hard to find. Most of it is incomplete, uncertain and vague. If you have any new information, PLEASE, email it to me. The following information is mostly based on a document by Pan of Anthrox, Jeff Frohwein's, Pascal Felber's, and my own findings.
--------------------------- FFFF | 32kB ROMs are non-switchable and occupy I/O ports + internal RAM | 0000-7FFF are. Bigger ROMs use one of two --------------------------- FF00 | different bank switches. The type of a Internal RAM | bank switch can be determined from the --------------------------- C000 | internal info area located at 0100-014F 8kB switchable RAM bank | in each cartridge. --------------------------- A000 | 16kB VRAM | MBC1 (Memory Bank Controller 1): --------------------------- 8000 | Writing a value into 2000-3FFF area will 16kB switchable ROM bank | select an appropriate ROM bank at --------------------------- 4000 | 4000-7FFF. Writing a value into 4000-5FFF 16kB ROM bank #0 | area will select an appropriate RAM bank --------------------------- 0000 | at A000-C000. | | MBC2 (Memory Bank Controller 2): | Writing a value into 2100-21FF area will | select an appropriate ROM bank at | 4000-7FFF. RAM switching is not provided.
Following Z80 opcodes are changed:
------------------------------------------------------------------------------ Code Z80 operation GameBoy operation ------------------------------------------------------------------------------ 08 xx xx EX AF,AF' LD (word),SP Save SP at given address 10 xx DJNZ offset STOP Meaning unknown 22 LD (word),HL LD (HLI),A Save A at (HL) and increment HL 2A LD HL,(word) LD A,(HLI) Load A from (HL) and increment HL 32 LD (word),A LD (HLD),A Save A at (HL) and decrement HL 3A LD A,(word) LD A,(HLD) Load A from (HL) and decrement HL D3 OUTA (byte) No operation D9 EXX RETI Enable interrupts and return DB INA (byte) No operation DD Prefix DD No operation E0 xx RET PO LD (byte),A Save A at (FF00+byte) E2 JP PO,word LD (C),A Save A at (FF00+C) E3 EX HL,(SP) No operation E4 CALL PO,word No operation E8 xx RET PE ADD SP,offset Add signed offset to SP EA xx xx JP PE,word LD (word),A Save A at given address EB EX DE,HL No operation EC CALL PE,word No operation F0 xx RET P LD A,(byte) Load A from (FF00+byte) F2 JP P,word No operation F4 CALL P,word No operation F8 xx RET M LDHL SP,offset Load HL with SP + signed offset FA xx xx JP M,word LD A,(word) Load A from given address FC CALL M,word No operation FD Prefix FD No operation ------------------------------------------------------------------------------
0100-0103 A sequence of bytes 00 C3 xx xx where last two bytes contain the starting address of a cartridge (lower byte first). The first two bytes of this sequence can be used as a "magic number" to recognize GameBoy cartridges. When GameBoy starts, the control is passed to address 0100 and then the sequence is interpreted as NOP; JP. 0105-0133 Nintendo character area: CE ED 66 66 CC 0D 00 0B 03 73 00 83 00 0C 00 0D 00 08 11 1F 88 89 00 0E DC CC 6E E6 DD DD D9 99 BB BB 67 63 6E 0E EC CC DD DC 99 9F BB B9 33 3E 0134-0143 Title of the game in ASCII terminated by zeroes 0144-0146 Not used 0147 Cartridge type: 0 - ROM ONLY 3 - ROM+MBC1+RAM+BATTERY 1 - ROM+MBC1 5 - ROM+MBC2 2 - ROM+MBC1+RAM 6 - ROM+MBC2+BATTERY 0148 ROM size: 0 - 256kBit = 32kB = 2 banks 1 - 512kBit = 64kB = 4 banks 2 - 1MBit = 128kB = 8 banks 3 - 2MBit = 256kB = 16 banks 4 - 4MBit = 512kB = 32 banks 0149 RAM size: 0 - None 1 - 16kBit = 2kB = 1 bank 2 - 64kBit = 8kB = 1 bank 3 - 256kBit = 32kB = 4 banks 0150-0151 Manufacturer code: 3301 - Nintendo 7901 - Accolade A400 - Konami 014C Version number 014D Complement check 014E-014F Checksum (higher byte first) produced by adding all bytes of a cartridge except for two checksum bytes together and taking two lower bytes of the result.
An area of VRAM known as Background Tile Table contains the numbers of tiles to be displayed. It is organized as 32 rows of 32 bytes each. Each byte contains a number of a tile to be displayed. Tile patterns are taken from the Tile Pattern Table located either at 8000-8FFF or 8800-97FF. In the first case, patterns are numbered with unsigned numbers from 0 to 255 (i.e. pattern #0 lies at address 8000). In the second case, patterns have signed numbers from -128 to 127 [i.e. pattern #0 lies at address 9000). The Tile Pattern Table address for the background can be selected via LCDCONT register.
Besides background, there is also a "window" overlaying the background. The window is not scrollable i.e. it is always displayed starting from its left upper corner. The location of a window on the screen can be adjusted via WNDPOSX and WNDPOSY registers. Screen coordinates of the top left corner of a window are WNDPOSX-7,WNDPOSY. The tile numbers for the window are stored in the Window Tile Table in the same way as background tiles are stored in the Background Tile Table. The tile patterns are taken from the table at 8800-97FF and therefore have unsigned numbers.
Both background and window can be disabled or enabled separately via bits in the LCDCONT register.
The tile images are stored in the Tile Pattern Tables. Each 8x8 image occupies 16 bytes, where each 2 bytes represent a line:
Tile: Image: .33333.. .33333.. -> 01111100 -> 7Ch 22...22. 01111100 -> 7Ch 11...11. 22...22. -> 00000000 -> 00h 2222222. <-- digits represent 11000110 -> C6h 33...33. color numbers 11...11. -> 11000110 -> C6h 22...22. 00000000 -> 00h 11...11. 2222222. -> 00000000 -> 00h ........ 11111110 -> FEh 33...33. -> 11000110 -> C6h 11000110 -> C6h 22...22. -> 00000000 -> 00h 11000110 -> C6h 11...11. -> 11000110 -> C6h 00000000 -> 00h ........ -> 00000000 -> 00h 00000000 -> 00hAs it was said before, there are two Tile Pattern Tables at 8000-8FFF and at 8800-97FF. The first one can be used for sprites and the background. Its tiles are numbered from 0 to 255. The second table can be used for the background and the window display and its tiles are numbered from -128 to 127.
Byte0 Y position on the screen Byte1 X position on the screen Byte2 Pattern number 0-255 [notice that unlike tile numbers, sprite pattern numbers are unsigned] Byte3 Flags: Bit7 Priority Sprite is displayed in front of the window if this bit is set to 1. Otherwise, sprite is shown behind the window but in front of the background. Bit6 Y flip Sprite pattern is flipped vertically if this bit is set to 1. Bit5 X flip Sprite pattern is flipped horizontally if this bit is set to 1. Bit4 Palette number Sprite colors are taken from OBJ1PAL if this bit is set to 1 and from OBJ0PAL otherwise.
I/O ports are mapped to memory locations in FF00-FFFF area: ------------------------------------------------------------------------------ FF00 -- JOYPAD [RW] Joypad port Bit5 Bit4 | In order to scan the keys, output 0 into either Bit4 Bit3 DOWN START | or Bit5 of JOYPAD, wait for some time and read JOYPAD. Bit2 UP SELECT | Bits 0-3 will be set to zeroes if corresponding Bit1 LEFT B | buttons are pressed. Bits 6 and 7 are not used. Bits Bit0 RIGHT A | 0-3 are connected to input lines P10-P13. Bits 4 and 5 | are connected to ouput lines P14 and P15. Example: ; Routine finding which buttons were pressed since the last check LD A,20h ; Set 0 at the output line P14 LD (FF00h),A ; LD A,(FF00h) ; Read JOYPAD several times to accomodate the noise LD A,(FF00h) ; CPL ; Bits 0-3 are now 1s if corresponding buttons pressed AND 0Fh ; Extract lower 4 bits carrying button status... SWAP A ; ...and move them into upper for bits LD B,A ; At this point: B = START.SELECT.B.A.x.x.x.x LD A,10h ; Set 0 at the output line P15 LD (FF00h),A ; LD A,(FF00h) ; Read JOYPAD several times to accomodate the noise LD A,(FF00h) ; LD A,(FF00h) ; LD A,(FF00h) ; LD A,(FF00h) ; LD A,(FF00h) ; CPL ; Bits 0-3 are now 1s if corresponding buttons pressed AND 0Fh ; Extract lower 4 bits carrying buttons' status... OR B ; ...and combine them with 4 other button status bits LD D,A ; At this point: D = START.SELECT.B.A.DOWN.UP.LEFT.RIGHT LD A,(FF8Bh) ; Read old button status from RAM XOR D ; Set 1s for buttons whose status has changed AND D ; Extract buttons which were *pressed* since last check LD (FF8Ch),A ; Save information of those buttons LD A,D ; Update button status in RAM LD (FF8Bh),A ; LD A,30h ; Set 1s at both P14 and P15 lines LD (FF00h),A ; [probably to reset the circuitry] ------------------------------------------------------------------------------ FF01 -- SIODATA [RW] Serial I/O Data ----------------------------------------------+---------------+--------------- FF02 -- SIOCONT [RW] Serial I/O Control | when set to 1 | when set to 0 Bit7 Transfer start flag | START | NO TRANSFER Bit0 Serial I/O clock select | INTERNAL | EXTERNAL ----------------------------------------------+---------------+--------------- FF04 -- DIVIDER [RW] Divider [meaning unknown] ------------------------------------------------------------------------------ FF05 -- TIMECNT [RW] Timer Counter This register contains constantly increasing number. The timer interrupt occurs when this register overflows. ------------------------------------------------------------------------------ FF06 -- TIMEMOD [RW] Timer Modulo The contents of TIMEMOD are loaded into TIMECNT every time TIMECNT overflows. ----------------------------------------------+---------------+--------------- FF07 -- TIMCONT [RW] Timer Control | when set to 1 | when set to 0 Bit2 Start/Stop timer | COUNTING | STOPPED Bit1-0 Timer clock select: 00 - 4096Hz 01 - 262144Hz 10 - 65536Hz 11 - 16384Hz ----------------------------------------------+---------------+--------------- FF0F -- IFLAGS [RW] Interrupt Flags | when set to 1 | when set to 0 Bit4 Transition High->Low on pins P10-P13 | OCCURED | NO Bit3 End of serial I/O transfer | OCCURED | NO Bit2 Timer overflow | OCCURED | NO Bit1 LCD controller interrupt [see LCDSTAT] | OCCURED | NO Bit0 LCD vertical blanking impulse | OCCURED | NO ----------------------------------------------+---------------+--------------- FF10 -- SNDREG10 [RW] Sweep [Sound Mode #1] Bit6-4 Sweep time: 000: SWEEP OFF 010: 15.6ms 100: 31.3ms 110: 46.9ms 001: 7.8ms 011: 23.4ms 101: 39.1ms 111: 54.7ms Bit3 Frequency increase[0]/decrease[1] Bit2-0 Number of shifts ------------------------------------------------------------------------------ FF11 -- SNDREG11 [RW] Sound Length/Pattern Duty [Sound Mode #1] Bit7-6 Wave Pattern Duty [only these bits can be read]: 00: 12.5% 01: 25% 10: 50% 11: 75% Bit5-0 Length of sound data ------------------------------------------------------------------------------ FF12 -- SNDREG12 [RW] Control [Sound Mode #1] Bit7-4 Initial value of envelope Bit3 Envelope up[1]/down[0] Bit2-0 Number of envelope sweep ------------------------------------------------------------------------------ FF13 -- SNDREG13 [W] Frequency Low [Sound Mode #1] Lower 8 bits of the 11bit frequency. Higher 3 bits are in SNDREG14. ------------------------------------------------------------------------------ FF14 -- SNDREG14 [RW] Frequency High [Sound Mode #1] Bit7 When 1 is written into this bit, sound restarts Bit6 Counter/Consecutive selection [only this bit can be read] Bit2-0 Higher 3 bits of the 11bit frequency ------------------------------------------------------------------------------ FF16 -- SNDREG21 [RW] Sound Length/Pattern Duty [Sound Mode #2] Bit7-6 Wave Pattern Duty [only these bits can be read]: 00: 12.5% 01: 25% 10: 50% 11: 75% Bit5-0 Length of sound data ------------------------------------------------------------------------------ FF17 -- SNDREG22 [RW] Control [Sound Mode #2] Bit7-4 Initial value of envelope Bit3 Envelope up[1]/down[0] Bit2-0 Number of envelope step ------------------------------------------------------------------------------ FF18 -- SNDREG23 [W] Frequency Low [Sound Mode #2] Lower 8 bits of the 11bit frequency. Higher 3 bits are in SNDREG24. ------------------------------------------------------------------------------ FF19 -- SNDREG24 [RW] Frequency High [Sound Mode #2] Bit7 When 1 is written into this bit, sound restarts Bit6 Counter/Consecutive selection [only this bit can be read] Bit2-0 Higher 3 bits of the 11bit frequency ------------------------------------------------------------------------------ FF1A -- SNDREG30 [RW] Control [Sound Mode #3] Bit7 Sound on[1]/off[0] ------------------------------------------------------------------------------ FF1B -- SNDREG31 [RW] Sound Length [Sound Mode #3] ------------------------------------------------------------------------------ FF1C -- SNDREG32 [RW] Output Level [Sound Mode #3] Bit6-5 Output Level: 00: MUTE 01: 100% 10: 50% 11: 25% ------------------------------------------------------------------------------ FF1D -- SNDREG33 [W] Frequency Low [Sound Mode #3] Lower 8 bits of the 11bit frequency. Higher 3 bits are in SNDREG34. ------------------------------------------------------------------------------ FF1E -- SNDREG34 [RW] Frequency High [Sound Mode #3] Bit7 When 1 is written into this bit, sound restarts Bit6 Counter/Consecutive selection [only this bit can be read] Bit2-0 Higher 3 bits of the 11bit frequency ------------------------------------------------------------------------------ FF20 -- SNDREG41 [RW] Sound Length/Pattern Duty [Sound Mode #4] Bit5-0 Length of sound data ------------------------------------------------------------------------------ FF21 -- SNDREG42 [RW] Control [Sound Mode #4] Bit7-4 Initial value of envelope Bit3 Envelope up[1]/down[0] Bit2-0 Number of envelope step ------------------------------------------------------------------------------ FF22 -- SNDREG43 [RW] Polynomial Counter [Sound Mode #4] Bit7-4 Shift clock frequency for the counter 0000: Dividing ratio of frequencies / 2 0001: Dividing ratio of frequencies / 2^2 0010: Dividing ratio of frequencies / 2^3 .... .... 1101: Dividing ratio of frequencies / 2^14 1100: Prohibited 1111: Prohibited Bit3 Number of steps: 7 [1]/15 [0] Bit2-0 Dividing ratio of frequences 000: f*2 010: f/2 100: f/4 110: f/6 where f = 4.194304Mhz/8 001: f*1 011: f/3 101: f/5 111: f/7 ------------------------------------------------------------------------------ FF23 -- SNDREG44 [RW] Frequency High [Sound Mode #4] Bit7 When 1 is written into this bit, sound restarts Bit6 Counter/Consecutive selection [only this bit can be read] ------------------------------------------------------------------------------ FF24 -- SNDREG50 [RW] Channel and Volume Control Bit7 Vin -> SO2 on[1]/off[0] Bit6-4 Volume on SO2 Bit3 Vin -> SO1 on[1]/off[0] Bit2-0 Volume on SO1 ------------------------------------------------------------------------------ FF25 -- SNDREG51 [RW] Sound Output Terminal Selector Bit7 Sound 4 -> SO2 | Bit6 Sound 3 -> SO2 | Bit5 Sound 2 -> SO2 | SO1 and SO2 are two sound outputs connected to the Bit4 Sound 1 -> SO2 | headphones. Vin is an input terminal in the cartridge Bit3 Sound 4 -> SO1 | slot. Bit2 Sound 3 -> SO1 | Bit1 Sound 2 -> SO1 | Bit0 Sound 1 -> SO1 | ----------------------+------------------------------------------------------- FF26 -- SNDREG52 [RW] Sound ON/OFF Bit7 All sound on[1]/off[0] Bit3 Sound 4 on[1]/off[0] Bit2 Sound 3 on[1]/off[0] Bit1 Sound 2 on[1]/off[0] Bit0 Sound 1 on[1]/off[0] ----------------------------------------------+---------------+--------------- FF40 -- LCDCONT [RW] LCD Control | when set to 1 | when set to 0 Bit7 LCD operation | ON | OFF Bit6 Window Tile Table address | 9C00-9FFF | 9800-9BFF Bit5 Window display | ON | OFF Bit4 Tile Pattern Table address | 8000-8FFF | 8800-97FF Bit3 Background Tile Table address | 9C00-9FFF | 9800-9BFF Bit2 Sprite size | 8x16 | 8x8 Bit1 Color #0 transparency in the window | SOLID | TRANSPARENT Bit0 Background display | ON | OFF ----------------------------------------------+---------------+--------------- FF41 -- LCDSTAT [RW] LCD Status | when set to 1 | when set to 0 Bit6 Interrupt on scanline coincidence | ON | OFF Bit5 Interrupt on controller mode 10 | ON | OFF Bit4 Interrupt on controller mode 01 | ON | OFF Bit3 Interrupt on controller mode 00 | ON | OFF Bit2 Scanline coincidence flag | COINCIDENCE | NO COINCIDENCE Bit1-0 LCD Controller mode: 00 - Horizontal blanking impulse [VRAM 8000-9FFF can be accessed by CPU] 01 - Vertical blanking impulse [VRAM 8000-9FFF can be accessed by CPU] 10 - OAM FE00-FE90 is accessed by LCD controller 11 - Both OAM FE00-FE90 and VRAM 8000-9FFF are accessed by LCD controller ------------------------------------------------------------------------------ FF42 -- SCROLLY [RW] Background Vertical Scrolling ------------------------------------------------------------------------------ FF43 -- SCROLLX [RW] Background Horizontal Scrolling ------------------------------------------------------------------------------ FF44 -- CURLINE [RW] Current Scanline This register contains the number of a screen line currently being scanned. It can take values 0-153 where 144-153 indicate the vertical blanking period. Writing into this register resets it. ------------------------------------------------------------------------------ FF45 -- CMPLINE [RW] Scanline Comparison When contents of CURLINE are equal to contents of CMPLINE, scanline coincidence flag is set in the LCD status register and an interrupt may occur. ------------------------------------------------------------------------------ FF47 -- BGRDPAL [W] Background Palette Bit7-6 Palette for color #3 | Bit5-4 Palette for color #2 | 00 ------- 01 ------- 10 -------> 11 Bit3-2 Palette for color #1 | lightest darkest Bit1-0 Palette for color #0 | ------------------------------+----------------------------------------------- FF48 -- OBJ0PAL [W] Sprite Palette #0 Bit7-6 Palette for color #3 | Bit5-4 Palette for color #2 | 00 ------- 01 ------- 10 -------> 11 Bit3-2 Palette for color #1 | lightest darkest Bit1-0 Palette for color #0 | ------------------------------+----------------------------------------------- FF49 -- OBJ1PAL [W] Sprite Palette #1 Bit7-6 Palette for color #3 | Bit5-4 Palette for color #2 | 00 ------- 01 ------- 10 -------> 11 Bit3-2 Palette for color #1 | lightest darkest Bit1-0 Palette for color #0 | ------------------------------+----------------------------------------------- FF4A -- WNDPOSY [RW] Window Y Position WNDPOSY may assume values 0-143. It determines the vertical position of the left upper corner of a window on the screen. ------------------------------------------------------------------------------ FF4B -- WNDPOSX [RW] Window X Position WNDPOSX may assume values 7-166. It determines the horizontal position of the left upper corner of a window on the screen. The real position is WNDPOSX-7. ------------------------------------------------------------------------------ FF46 -- DMACONT [W] DMA Transfer Control Writing to this register will cause a DMA transfer into OAM located at FE00-FE9F. The written value determines the source address in a following way: 00 -> 0000, 01 -> 0100, ... , 9A -> 9A00, ... The DMA transfer takes about 160 nanoseconds. Example: ; Routine transferring 0400-049F into OAM DI ; Disable interrupts LD A,04h ; Transferring data from 0400h LD (FF46h),A ; Start DMA transfer LOOP: LD A,#40 ; Wait DEC A ; JR NZ,LOOP ; EI ; Enable interrupts ----------------------------------------------+---------------+--------------- FFFF -- ISWITCH [RW] Interrupt Enable/Disable | when set to 1 | when set to 0 Bit4 Transition High->Low on pins P10-P13 | ENABLED | DISABLED Bit3 End of serial I/O transfer | ENABLED | DISABLED Bit2 Timer overflow | ENABLED | DISABLED Bit1 LCD controller interrupt [see LCDSTAT] | ENABLED | DISABLED Bit0 LCD vertical blanking impulse | ENABLED | DISABLED ----------------------------------------------+---------------+---------------


Tutorial¶
API-KEY¶
Before proteinFinder.py can be used, a line in the code has to be changed. Since NCBI search requires an identification key or API-KEY, the first thing to do is to create an account on NCBI. Next it is best to follow this guide to acquire the key. The API key needs to be inserted into the following line of code in proteinFinder.py:
apiKey = "INSERT YOUR KEY HERE"
Once this is done, the program has its full functionality.
Basic Functionality¶
Let’s assume we have a csv File containing gene loci. The loci were originally from the NCBI database. Now we want to have more information about the gene product. We start with the input file, named ‘genes.csv’. It stores the following information:
Gene loci:
gene_loci |
|---|
Dshi_0051 |
Dshi_0052 |
Dshi_0053 |
Dshi_0054 |
Dshi_0055 |
Dshi_0056 |
Dshi_0057 |
Dshi_0058 |
Dshi_0059 |
Dshi_0060 |
CC_2_9 |
We start the command line prompt and navigate to the folder containing proteinFinder.py. To use the Protein Finder module we need to know what kind of arguments the script is expecting. We can go look it up in documentation or we just type in:
python3 proteinFinder.py -h
The flag -h is short for help. This command shows all arguments the script is able to process and a short description:
usage: proteinFinder.py [-h] [--noheaders] [-db DATABASE] [-c COLUMNS]
[--organism ORGANISM] [-i {text,id}] [--idType IDTYPE]
inputFile outputFile {ncbi,uniprot,ncbi+uniprot}
positional arguments:
inputFile Path to csvfile with query strings
outputFile Path to file the results should besaved
{ncbi,uniprot,ncbi+uniprot}
Which website should be queried
optional arguments:
-h, --help show this help message and exit
--noheaders When reading the input file it does notskip the first row
-db DATABASE, --database DATABASE
Database which shouldbe queried
-c COLUMNS, --columns COLUMNS
When quiering Uniprot,depicts, which type of
information should be downloaded. Terms have to be
comma seperated
--organism ORGANISM Narrow down the search tospecified organism
-i {text,id}, --inputDataType {text,id}
Type of data stored in input File
--idType IDTYPE What database the IDs are from?
For the script working proberly, the positional arguments are required. The minimum working script, would be:
python3 proteinFinder.py inputFilePath outputFilePath websiteToQuery
In our case the data is stored in a csv file called ‘genes.csv’. And we want the endresult to be saved in ‘proteinInformation.csv’. Since Uniprot does not recognise our gene loci we first need to query NCBI, for the ID. And with that ID we query the Uniprot database. luckily the script is smart and handles this with the simple argument ‘ncbi+uniprot’. So we end up with the following command:
python3 proteinFinder.py genes.csv proteinInformation.csv ncbi+uniprot
The script informs us that it ignores the first line in the input file, which contains the headers. If you don’t want this behaviour, you need to pass the argument ‘–noheaders’. We also get a feedback on the status of the querys:
Skipping headers
Query 1 of 12
Query 2 of 12
Query 3 of 12
Query 4 of 12
Query 5 of 12
Query 6 of 12
Query 7 of 12
Query 8 of 12
Query 9 of 12
Query 10 of 12
Query 11 of 12
Query 12 of 12
The information found by the search are summed up in the table. The resulting table in ‘proteinInformation.csv’should look similar to this:
query |
ID_NCBI |
ID_Uni |
Protein names |
Gene names |
Protein existence |
|---|---|---|---|---|---|
Dshi_0051 |
157910367 |
A8LJX4 |
Uncharacterized protein |
Dshi_0051 |
Predicted |
Dshi_0052 |
157910368 |
A8LJX5 |
Uncharacterized protein |
Dshi_0052 |
Predicted |
Dshi_0053 |
157910369 |
A8LJX6 |
HI0933 family protein |
Dshi_0053 |
Predicted |
Dshi_0054 |
157910370 |
A8LJX7 |
Glutathione S-transferase like protein |
gst2 Dshi_0054 |
Predicted |
Dshi_0055 |
157910371 |
A8LJX8 |
DNA polymerase III, delta subunit |
holA Dshi_0055 |
Predicted |
Dshi_0056 |
157910372 |
A8LJX9 |
Uncharacterized protein |
Dshi_0056 |
Predicted |
Dshi_0057 |
189082998 |
A8LJY0 |
Leucine–tRNA ligase |
leuS Dshi_0057 |
Inferred from homology |
Dshi_0057 |
157910373 |
A8LJY0 |
Leucine–tRNA ligase |
leuS Dshi_0057 |
Inferred from homology |
Dshi_0058 |
157910374 |
A8LJY1 |
Outer-membrane lipoprotein carrier protein |
lolA Dshi_0058 |
Inferred from homology |
Dshi_0059 |
157910375 |
A8LJY2 |
DNA translocase |
ftsK Dshi_0059 |
Inferred from homology |
Dshi_0060 |
157910376 |
A8LJY3 |
Aminotransferase class I and II |
Dshi_0060 |
Predicted |
Dshi_0061 |
157910377 |
A8LJY4 |
Amidase |
Dshi_0061 |
Inferred from homology |
CC_2_9 |
Not Found |
The table stores the original query, the IDs found in NCBI and the Uniport entry. Overall the search was successful. However there are 2 interesting cases. First, when the script does not find some entrys, it will fill the row with a ‘Not Found’ tag. Second, Dshi_0057 seems to appear twice. This is by design. When multiple IDs or entries are found for a query, each ID or entry, will be represented in a unique row. The reason is, there is no way for the programmer to safely determine what entry is relevant. Therefore every table, has to be inspected for such duplicates and be eliminated by hand.
Searching NCBI¶
To query NCBI you need to specify which database should be queried. A full list of all names can be found here. Right now only text search is available.
python3 proteinFinder.py genes.csv proteinInformation.csv ncbi -db protein
If no -db flag is typed in the default value will be the protein database.
Example¶
Starting from a table genes.csv with gene loci, the corresponding ncbi accession numbers should be acquire.
query |
Dshi_0051 |
Dshi_0052 |
Dshi_0053 |
Dshi_0054 |
Dshi_0055 |
Dshi_0056 |
Dshi_0057 |
Dshi_0057 |
Dshi_0058 |
Dshi_0059 |
Dshi_0060 |
Dshi_0061 |
python3 proteinFinder.py genes.csv geneInfo.csv ncbi
This command outputs geneInfo.csv:
query |
ID_NCBI |
Dshi_0051 |
157910367 |
Dshi_0052 |
157910368 |
Dshi_0053 |
157910369 |
Dshi_0054 |
157910370 |
Dshi_0055 |
157910371 |
Dshi_0056 |
157910372 |
Dshi_0057 |
189082998 |
Dshi_0057 |
157910373 |
Dshi_0058 |
157910374 |
Dshi_0059 |
157910375 |
Dshi_0060 |
157910376 |
Dshi_0061 |
157910377 |
Searching Uniprot¶
Uniprot can be searched in two ways.
Query with search terms¶
python3 proteinFinder.py genes.csv proteinInformation.csv uniprot
irst it can be searched by search terms. This takes a long time since every term needs to make its own request to the database.
The results can be filtered for a specific organism with the –organism flag followed by the species name. For trustworthy results it is recommended to input the UniProt taxon id, found on the website.
python3 proteinFinder.py inputFile outputFile uniprot --organism "Dinoroseobacter shibae"
python3 proteinFinder.py inputFile outputFile uniprot --organism 398580
Query with IDs¶
python3 proteinFinder.py genes.csv proteinInformation.csv uniprot --inputDataType id
The second way is to search by ID. To search with IDs the parameter –inputDataType needs to be set to ‘id’.
The IDs can be from variouse databases. Uniprot is able to map (translate) a given ID to its own accession number. For this the database has to specified from which the data come from. The database can be set with the argument –idType. A list of all available databases can be found here.
Columns¶
With UniProt querys the information, which should be retrieved, can be controled with the –columns flag. The column names have to be seperated by a comma. All possible columns are listed on the UniProt website.
python3 proteinFinder.py inputFile outputFile
uniprot --columns "id,keywords,genes,organism"
If not specified the default values are: * id * protein names * genes * existence * organism * ec * feature(METAL BINDING) * keywords * comment(PATHWAY) * comment(SUBCELLULAR LOCATION) * comment(DOMAIN) * families * sequence
Examples¶
The starting point will be the following table, which is a list of uniprot accesion numbers of proteins:
uniprot_id |
A8LJX5 |
A8LJX6 |
A8LJX7 |
A8LJX8 |
A8LJX9 |
A8LJY0 |
A8LJY0 |
A8LJY1 |
A8LJY2 |
A8LJY3 |
A8LJY4 |
A8LJY5 |
To extract the information from UniProt, the following command will be used:
python3 proteinFinder.py proteins.csv proteinInformation.csv uniprot -i id
The program requests information about the accesion numbers, which after success results in the following table:
Entry |
Protein names |
Gene names |
Protein existence |
Organism |
EC number |
A8LJX5 |
Uncharacterized protein |
Dshi_0052 |
Predicted |
Dinoroseobacter shibae (strain DSM 16493 / NCIMB 14021 / DFL 12) |
|
A8LJX6 |
HI0933 family protein |
Dshi_0053 |
Predicted |
Dinoroseobacter shibae (strain DSM 16493 / NCIMB 14021 / DFL 12) |
|
A8LJX7 |
Glutathione S-transferase like protein (EC <IP_ADDRESS>) |
gst2 Dshi_0054 |
Predicted |
Dinoroseobacter shibae (strain DSM 16493 / NCIMB 14021 / DFL 12) |
<IP_ADDRESS> |
A8LJX8 |
DNA polymerase III, delta subunit (EC <IP_ADDRESS>) |
holA Dshi_0055 |
Predicted |
Dinoroseobacter shibae (strain DSM 16493 / NCIMB 14021 / DFL 12) |
<IP_ADDRESS> |
A8LJX9 |
Uncharacterized protein |
Dshi_0056 |
Predicted |
Dinoroseobacter shibae (strain DSM 16493 / NCIMB 14021 / DFL 12) |
|
A8LJY0 |
Leucine–tRNA ligase (EC <IP_ADDRESS>) (Leucyl-tRNA synthetase) (LeuRS) |
leuS Dshi_0057 |
Inferred from homology |
Dinoroseobacter shibae (strain DSM 16493 / NCIMB 14021 / DFL 12) |
<IP_ADDRESS> |
A8LJY0 |
Leucine–tRNA ligase (EC <IP_ADDRESS>) (Leucyl-tRNA synthetase) (LeuRS) |
leuS Dshi_0057 |
Inferred from homology |
Dinoroseobacter shibae (strain DSM 16493 / NCIMB 14021 / DFL 12) |
<IP_ADDRESS> |
A8LJY1 |
Outer-membrane lipoprotein carrier protein |
lolA Dshi_0058 |
Inferred from homology |
Dinoroseobacter shibae (strain DSM 16493 / NCIMB 14021 / DFL 12) |
|
A8LJY2 |
DNA translocase |
ftsK Dshi_0059 |
Inferred from homology |
Dinoroseobacter shibae (strain DSM 16493 / NCIMB 14021 / DFL 12) |
|
A8LJY3 |
Aminotransferase class I and II |
Dshi_0060 |
Predicted |
Dinoroseobacter shibae (strain DSM 16493 / NCIMB 14021 / DFL 12) |
|
A8LJY4 |
Amidase |
Dshi_0061 |
Inferred from homology |
Dinoroseobacter shibae (strain DSM 16493 / NCIMB 14021 / DFL 12) |
|
A8LJY5 |
2-octaprenyl-6-methoxyphenol hydroxylase (EC 1.14.13.-) |
ubiH Dshi_0062 |
Predicted |
Dinoroseobacter shibae (strain DSM 16493 / NCIMB 14021 / DFL 12) |
1.14.13.- |
With alternating the columns using the –columns flag the information requested will be changed:
python3 proteinFinder.py proteins.csv proteinInformation.csv
uniprot -i id --columns "id,keywords,genes"
Entry |
Keywords |
Gene names |
A8LJX5 |
Complete proteome;Reference proteome |
Dshi_0052 |
A8LJX6 |
Complete proteome;Reference proteome |
Dshi_0053 |
A8LJX7 |
Complete proteome;Reference proteome;Transferase |
gst2 Dshi_0054 |
A8LJX8 |
Complete proteome;Nucleotidyltransferase;Reference proteome;Transferase |
holA Dshi_0055 |
A8LJX9 |
Complete proteome;Reference proteome |
Dshi_0056 |
A8LJY0 |
ATP-binding;Aminoacyl-tRNA synthetase;Complete proteome;Cytoplasm;Ligase;Nucleotide-binding;Protein biosynthesis;Reference proteome |
leuS Dshi_0057 |
A8LJY0 |
ATP-binding;Aminoacyl-tRNA synthetase;Complete proteome;Cytoplasm;Ligase;Nucleotide-binding;Protein biosynthesis;Reference proteome |
leuS Dshi_0057 |
A8LJY1 |
Chaperone;Complete proteome;Lipoprotein;Protein transport;Reference proteome;Transport |
lolA Dshi_0058 |
A8LJY2 |
ATP-binding;Cell cycle;Cell division;Cell membrane;Chromosome partition;Complete proteome;DNA-binding;Membrane;Nucleotide-binding;Reference proteome;Transmembrane;Transmembrane helix |
ftsK Dshi_0059 |
A8LJY3 |
Aminotransferase;Complete proteome;Reference proteome;Transferase |
Dshi_0060 |
A8LJY4 |
Complete proteome;Reference proteome |
Dshi_0061 |
A8LJY5 |
Complete proteome;Oxidoreductase;Reference proteome |
ubiH Dshi_0062 |
More detailed information can be found in the documentation.


Today I’m happy to announce the availability of the Drill 1.2 release. This release addresses 217 JIRAs on top of the 1.1 release. Highlights include:
Relational Database Support
Drill now includes a JDBC storage plugin for querying relational databases (RDBMSs). Users can run SQL queries that join data between non-relational datastores (eg, MongoDB, HBase, HDFS, S3) and relational databases (eg, MySQL, Oracle). For example, a single query can join log files in HDFS with a users table in MySQL. Drill automatically pushes execution (projections, filters, partial joins, etc.) down into the RDBMS whenever possible.
New Window Functions
The 1.2 release adds additional window functions: NTILE
, FIRST_VALUE
, LAST_VALUE
, LEAD
and LAG
. Drill now supports 15 different window functions:
- Value Functions:
FIRST_VALUE
,LAST_VALUE
,LEAD
,LAG
- Aggregate Functions:
AVG
,COUNT
,MAX
,MIN
,SUM
- Ranking Functions:
CUME_DIST
,DENSE_RANK
,NTILE
,PERCENT_RANK
,RANK
,ROW_NUMBER
In addition to supporting new window functions, Drill 1.2 adds support for multiple window functions in a single query. A query can contain multiple window functions that slice up the data in different ways by means of different OVER
clauses, but they all act on the same collection of rows.
Parquet Metadata Caching
When running a query against a directory tree with Parquet files, Drill scans the directory and reads the footers of the files during the planning phase. This allows Drill to prune partitions and optimize query execution for data locality. However, this process can be time consuming for directory trees with thousands of files. Drill 1.2 includes a new feature that caches the metadata information so that subsequent queries don’t need to scan all the files. The cache is automatically maintained based on the directory timestamps.
Performance Improvements on HBase and Hive Tables
Drill 1.2 introduces a faster read path for HBase and Hive tables. When querying Hive tables backed by Parquet files, Drill now uses a high-performance Parquet reader rather than the Hive SerDe.
DROP TABLE
for Files and Directories
Drill 1.2 allows users to drop file- and directory-based tables with a SQL command (DROP TABLE
).
Enhanced MongoDB Integration
Drill 1.2 supports extended JSON types, addressing previous issues with queries on MongoDB collections.
Many More Fixes
Drill 1.2 includes hundreds of other fixes and enhancements.
Download the Drill 1.2 release now and let us know your thoughts.
Drill On! Jacques Nadeau


Picturesque
Log In
Sign Up
Check out what people are saying about our app:
Leave a review
Login |
Sign Up


| 042:023 Khan | : |
That is (the Paradise) whereof Allah gives glad tidings to His slaves who believe (in the Oneness of Allah Islamic Monotheism) and do righteous good deeds. Say (O Muhammad SAW): "No reward do I ask of you for this except to be kind to me for my kinship with you." And whoever earns a good righteous deed, We shall give him an increase of good in respect thereof. Verily, Allah is Oft-Forgiving, Most Ready to appreciate (the deeds of those who are obedient to Him). |
| 042:023 Maulana | : |
This it is of which Allah gives the goods news to His servants, who believe and do good. Say: I ask of you naught in return for it but love for relatives. And whoever earns good, We give him more of good therein. Surely Allah is Forgiving, Grateful. |
| 042:023 Pickthal | : |
This it is which Allah announceth unto His bondmen who believe and do good works. Say (O Muhammad, unto mankind): I ask of you no fee therefor, save lovingkindness among kinsfolk. And whoso scoreth a good deed We add unto its good for him. Lo! Allah is Forgiving, Responsive. |
| 042:023 Rashad | : |
This is the good news from GOD to His servants who believe and lead a righteous life. Say, "I do not ask you for any wage. I do ask each of you to take care of your own relatives." Anyone who does a righteous work, we multiply his reward for it. GOD is Forgiver, Appreciative. |
| 042:023 Sarwar | : |
This is the glad news which God gives to His servants, the righteously striving believers. (Muhammad), say, "I do not ask you for any payment for my preaching to you except (your) love of(my near) relatives." Whoever achieves virtue will have its merit increased. God is All-forgiving and Appreciating. |
| 042:023 Shakir | : |
That is of which Allah gives the good news to His servants, (to) those who believe and do good deeds. Say: I do not ask of you any reward for it but love for my near relatives; and whoever earns good, We give him more of good therein; surely Allah is Forgiving, Grateful. |
| 042:023 Sherali | : |
This it is whereof ALLAH gives the glad tidings to HIS servants who believe and do good works. Say, 'I ask of you no reward for my service to you, except such love as subsist between kindred. And whoso earns a good deed, WE give him increase of good therein. Surely, ALLAH is Most Forgiving, Most Appreciating. |
| 042:023 Yusufali | : |
That is (the Bounty) whereof Allah gives Glad Tidings to His Servants who believe and do righteous deeds. Say: "No reward do I ask of you for this except the love of those near of kin." And if any one earns any good, We shall give him an increase of good in respect thereof: for Allah is Oft-Forgiving, Most Ready to appreciate (service). |
Concepts/Themes Covered: أركان الإسلام > التوحيد > توحيد الله تعالي > صفات الله تعالى > الشكور Pillars of Islam> Islamic> Oneness of Allah> His Glory's Characteristics> The Most Ready to Appreciate الإيمان > الأنبياء والرسل > لا أجر لهم على التبليغ Faith> The Prophets and the Messengers of Allah> No Reward for Conveyance الإيمان > الإيمان بالله > الإيمان والعمل Faith> Belief In Allah> The Faith and the Action الإيمان > المؤمنون > ما أعده الله لهم Faith> The Believers> What has Allah Prepared for them الإيمان > المؤمنون > وعده إياهم Faith> The Believers> His Promise to them العمل > الجزاء > الجزاء بالعمل Action(Work)> The Reward> The Reward by Action العمل > العمل الصالح > الدعوة إلى العمل الصالح Action(Work)> The Good Deeds>The Call for Good Deeds الإنسان والعلاقات الاجتماعية > صلة ذوي القربى Man and The Social Relations>Kinship
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


Jin-Woo arrived at the god statue’s eye level instantly
This was at the highest point of the jump before one’s body would begin its descent due to gravity . It felt as if everything around him had come to a stand-still
The drops of sweat flying off of his body as he jumped sparkled under the light . Although slow, they were definitely getting further away from him
He was in the state of peak concentration right now . The undeniable threat of losing his life from the smallest mistake pushed all of Jin-Woo’s abilities to their absolute limits
‘This is the true power of the Agility Stat… . ’.
His heart pounded hard and fast as the realisation dawned on him that this was what the peak state of the Agility Stat could produce when pushed to the extreme . However, he obviously did not have the leeway to revel in the fruit of his labour
Even now, the eyes of the god statue were moving towards him, albeit at a crawling speed . Seeing up close the crimson light coagulating within the d*m thing’s eyes sent shivers all over his body
Just getting brushed by that thing would mean his end
Sensing the dizziness of the danger, his mind re-focused on the task at hand
‘Stay calm… ’.
He reached out with his left hand, still not holding any weapon
‘Ruler’s Authority!’.
The upgraded skill based on ‘Ruler’s Reach’ began pulling at the shoulder of the god statue . He was thinking of reeling himself in, rather than actually dragging the god statue and its incalculable body weight towards him
Wuuoong-!!.
However, his expectation was somewhat shaken up as the upper body of the god statue actually did creep forward just a little
‘… !!!’.
What an incredible force of attraction that was!.
The power of the skill must have gone up several notches when it evolved from ‘Ruler’s Reach’ to ‘Ruler’s Authority’
And all thanks to that, Jin-Woo got to land on the god statue’s shoulder far easier than he anticipated . He quickly raised his head to look behind him
Buzzzzing-!.
The scarlet-red laser beam exploding out accurately pierced past the location in the air he was floating in, only a moment ago
‘Nice . ’.
For the next few seconds, he was safe from the god statue’s laser beam attacks
Feeling unburdened now, Jin-Woo sprinted on top of the statue’s shoulder with all his might and arrived near its neck . His right hand gripped the hilt of the ‘Demon King’s Shortsword’ tightly
‘Violent Slash!!’.
Several silver streaks of blade light rained down on the target like the shells of a shotgun
Dududududududu-!!.
Dozens upon dozens of slashes landed on the statue’s neck . However, there was barely any visible damage
Not one slash managed to inflict a heavy enough wound; they all stopped at simply causing negligible, superficial nicks on the skin
‘So, the shortsword doesn’t work, is that it?’.
It was that moment that the ‘Demon King’s Shortsword’, previously capable of slicing up the steel-like scales of the boss-level Naga into ragged bits, came across as an insignificant and shabby toy
It was then
Jin-Woo discovered a giant hand busy flying in his general direction . Before it could grasp him, though, he ran on the back of the statue’s neck and changed his position to the other shoulder
He took a quick look down as he ran and saw how dizzyingly high he was right now
He raised his head up and glared at the side of the god statue’s face . This god statue wouldn’t be the first enemy that his blades failed to inflict any damage . As a matter of fact, he had dealt with a countless number of them so far
‘If I can’t stab it, then I’ll just pummel it!’.
He didn’t invest all those Stat points in his Strength Stat just for fun . Jin-Woo’s eyes gleamed brightly with determination . He lightly jumped up and thrust his left hand at the temple of the god statue’s face
Crack!!.
All five fingers of his left hand dug deep under the surface
‘It’s done!’.
Jin-Woo clenched his left hand into a fist .  All this was simply him getting ready
The real thing was starting now
Jin-Woo’s right back, his right shoulder, and then his right arm all began to balloon up to an unnatural size . That was the result of an incredible amount of magic energy enveloping his right arm
As a test, he threw a single punch first
Ka-boom!!!.
The god statue’s head, that didn’t even budge from the shortsword’s attacks, suddenly and visibly trembled
‘… !!’.
The angel statue observing the unfolding situation was shocked beyond words from that
The enormous amount of magic energy spreading out from high up above managed to shake the air within the entire underground temple . The angel statue continued to look up while not even bothering to hide its extremely excited state at all
To think, that a human would deal with its masterpiece in such a manner
An even greater level of anticipation bubbled up within the gleaming light of the angel statue’s eyes
Ka-bboooom!!.
Jin-Woo’s fist punched the god statue’s face for the second time
Stagger
For a brief moment there, the god statue lost its balance . The attacks were definitely working
However, the god statue wasn’t planning to stand still and not do anything while getting punched to death by him
Vuwoong-!!.
As if it was trying to catch a mosquito, the god statue slapped its own face with that giant hand
BOOM-!!.
Jin-Woo dodged that giant palm strike and safely landed back on the god statue’s shoulder, a mocking grin etched on his face now . That was no different from this thing busily slapping itself
He didn’t wait and sprinted back towards the god statue’s face as soon as its hand went away . And then…
Boom!! Ka-boom!! Kwang! Kwang!! Kwa-boom!!!.
Terrifying, deafening booms reverberated continuously throughout the large dome-shaped temple
Crack, craaack…
 The tottering god statue tried its best to maintain its balance before it began running towards one of the walls in this massive, open space
Thud, thud, thud!!.
The ‘creature’s huge legs viciously stomped on the ground . It was trying to crush Jin-Woo still sticking to its face by ramming into the wall
‘But, before that happens… . ’.
… . He’d finish this fight!.
 Kwang!! Kwang!! Kwaaahng!!.
Thud! Thud! Thud!.
The god statue increased its running speed and the gap to the wall was reduced in seconds
Sneak
Jin-Woo confirmed the remaining distance with his eyes and, for the purpose of landing the final blow, sent all of his power to his right arm
Thick veins bulged on his ballooning arm muscles as a horrifying amount of magic energy filled his limb up
‘… . Very good . ’.
The physical strength of a level 103 . Jin-Woo poured all of that into this single fist of his . Just before he was about to collide against the wall…
KWA-BOOM!!.
CRACK!!!.
Along with the loud noise of a ripened watermelon shattering into pieces, half of the god statue’s face was blown away . It eventually faltered and fell down on its knees
RUMBLE-!!.
The entirety of the empty dome-shaped arena rumbled spectacularly . And then, the gigantic body of the god statue powerlessly tilted over to the ground
RUUUMBLE-!!.
A thick, choking cloud of dust kicked up into the air as the massive figure collapsed, hard, to the dry ground .  ”.
Jin-Woo let out a soft sigh under his breath
Ba-thump, ba-thump, ba-thump…
Even now, the sound of his wildly beating heart noisily rang around in his ear canals . The god statue that nearly made him wet his pants the first time he stood before it, had fallen face down on the ground, unmoving
No one else did that . He was responsible for this spectacle
‘I can definitely do this . ’.
… . Regardless of what that was
He recalled the Hunters who lost their lives inside here and a powerful emotion welled up from deep within his heart . Unfortunately, the remaining stone statues continued to move quickly, as if they didn’t want him to have this quiet moment to himself
They surrounded him in a circle and closed the distance . Just before they were about to pounce on him, though…
Jin-Woo stopped looking at his two hands… and raised his head
“Ruler’s Authority . ”.
BOOM-!!.
Every single stone statue slammed their heads down on the floor and stopped moving altogether . This was the power of the invisible hand, also known as the skill ‘Ruler’s Authority’
Jin-Woo returned his gaze back to his hands
‘I’ve become even stronger through today’s battle . ’.
He clenched his fists and unfurled them, before repeating his actions again
An incredible power was overflowing out of his fists, no, from his entire body . He could clearly sense this flow of power now
At the same time, his heart showed no signs of slowing down at all . It felt as if something sleeping deep within him had awakened through this life-or-death struggle
It was then
Clap, clap, clap, clap, clap
He heard slow handclaps . Jin-Woo raised his head in the direction of that clapping noise . The angel statue was clapping its hands in an exaggerated manner, that repulsive smile still etched on its face
“Truly excellent . ”.
Quite unlike the words leaving its mouth, though, the light oozing out of its eyes were of rather nefarious origins . Jin-Woo calmly spoke to the statue
“Don’t you have an agreement to uphold, first?”.
The d*mn thing clearly announced that, as long as Jin-Woo managed to stand on his two feet after the end of this final test, all the answers he wanted to know would be provided to him
So, he wanted to hear them right now
Unfortunately, a stiff smile formed on the angel statue as if it had no intentions of letting him know that easily
“Hah, hah . ”.
It took a step closer to him
“Your test isn’t finished yet . ”.
Then, another step closer
“In here… . ”.
Yet another step
The angel statue closed the distance with several large strides and eventually stood before Jin-Woo’s nose
“… . I’m still here, aren’t I?”.
Dududuk, dudududuk!!!.
The lengthy wings on the back of the angel statue suddenly twisted and writhed around before transforming into arms . Two arms coming out of its shoulders, and six more sprouting from its back – eight hands in total began clenching into tight fists
“I am your final test . ”.
Jin-Woo frowned deeply . Before he could say anything, though – the angel statue cut him off
“There is no need to worry about my ‘life’ . ”.
Flinch
Jin-Woo’s eyes widened in surprise . This thing knew what he wanted to say in advance . He was about to raise his voice in irritation, telling the creature that its death would result in him not getting any answers in the end
“Are you surprised?”.
The angel statue raised one of its hands and pointed at its own head
“All of your information is in here . ’.
‘… . Could it be?’.
Cold sweat drops rapidly formed on Jin-Woo’s forehead
“As expected of a quick-witted human . Hah, hah . ”.
The angel statue issued out more of that stiff, mechanical laughter . And then, carried on with what it wanted to say
“If you try to control your power to prevent me from dying, that will make it difficult to properly measure your true strength . So, to prevent that…”.
Right in that moment – the angel statue’s lips moved at a quick pace
However, the voice of the angel statue didn’t come out from there . It came out from somewhere else
[An ‘Emergency Quest’ has been issued . ].
[If you fail to defeat the enemy within the designated time limit, your heart will stop operating altogether . ].
[Remaining time: 10:00].
Just as the quest message finished saying its piece, one second ticked down from the remaining time
Tick
[Remaining time: 09:59].
Jin-Woo’s eyes began trembling hard as he stared at the angel statue
“That’s right . ”.
[That’s right . ].
Whenever the angel statue spoke, he also heard the System’s voice at the same time as well
Jin-Woo’s heart that seemed to have recovered some calmness just now began madly pounding away again . His breathing quickened and his fingertips trembled
The angel statue studied Jin-Woo’s reaction before answering one of the very first questions he asked earlier – “What are you?”.
“I am the architect of the System . ”.
[I am the architect of the System . ].
***.
“Mister Kim, you’re a reporter .
Woo Jin-Cheol threw that question out as if he was feeling greatly annoyed by something at the moment
The reporter named Kim yawned grandly while scratching the area around his sideburns
“That place is already packed full of other reporters . Nothing will change even if I show up there, wouldn’t you agree? It’ll be better for me to stick with the folks of the Monitoring Division and get myself a scoop or two . ”.
“…”.
Woo Jin-Cheol was tempted to advise this reporter that he should either stick to yawning or scratching his face, but gave up and sighed inwardly
This was because Kim was one of a very few reporters that wrote favourable articles regarding the Association when everyone else seemed to be hell-bent on ‘uncovering’ wrongdoings of the organisation or coming up with provocative gossip pieces on the private lives of various Hunters
‘No need to turn an ally into an enemy, now is there… . ?’.
That was why Woo Jin-Cheol was keeping this reporter named Kim company as the latter paid a visit to the Monitoring Division’s offices
Kim finally finished his lengthy yawn and threw a question back
“Besides that, Chief Woo . Our whole country is going through a bit of upheaval right now, so is it fine for you to be sitting here and doing nothing in the office like this?”.
Woo Jin-Cheol closed the cover on the file he was working on and spoke in a soft voice that sounded almost like a gentle sigh
“Someone has to stay behind to guard his assigned station, you see . ”.
“Ohhh . ”.
Reporter Kim’s eyes opened up wider in understanding and replied while quickly pulling out a palm-sized memo pad and a pen
“You know, that’s a cool soundbite . I want to make sure not to miss out on a single word, so can you repeat them for me, please?”.
“Mister Kim, you really… . ”.
Woo Jin-Cheol was about to raise his voice higher but with excellent timing, his smartphone went off
‘…Mm?’.
It was a call coming from the report centre . If it was a call not coming through the hotline of the Monitoring Division but to his personal phone, then that could only mean the matter at hand wasn’t simple in nature
Woo Jin-Cheol quickly answered the call
“This is Section Chief Woo Jin-Cheol speaking, Monitoring Division . ”.
– “Chief, we just received a report, sir . Looks like your presence is required on this one . ”.
Woo Jin-Cheol’s eyes narrowed to a slit
“What happened?”.
– “Do you remember the high school where those Orcs came out?”.
“Did something happen in that place again… . ?”.
– “It doesn’t seem like anything major had gone down there yet, but a Gate appearing in that school’s athletic field a few days ago turned out to be a dual dungeon, sir . ”.
‘A dual dungeon?’.
Woo Jin-Cheol’s eyes grew wider
– “But, the thing is… . ”.
It seemed that the employee charged with receiving the reports still had something else to say . Woo Jin-Cheol’s voice became more urgent
“Okay, so what else is there?”.
– “I heard that Hunter Seong Jin-Woo has entered the Gate, sir . ”.
< Chapter 157 > Fin


Note 1: Hold the <Control Key> while clicking the link to view the context highlighted source in a separate tab.
Note 2: Those with an Explained
link can be viewed with a detailed explanation of the code.
| Link | Usage | Explanation |
|---|---|---|
| {{oRow.name}} | {{oRow.desc}} | Explained |
{{sSrcFile}}
`Click on link to view source ....'


Best Looks From the 2019 American Music Awards Red Carpet (Photos) The most eye-poppin’ fashions from the biggest names in music 25 Nov 2019, 09:08 by Rosemary Rossi, J. Clara Chan Getty Images Musicians Big Freedia and Kesha, who will both perform at tonight's ceremony, pose together on the red carpet.Rich Fury / Getty Images Halsey is nominated for Artist of the Year and has favorite music video and pop/rock song nods for "Without Me."Rich Fury / Getty Images Singer/songwriter Shania Twain arrives on the red carpet.Rich Fury / Getty Images Model Anwar Hadid and singer Dua Lipa, who will perform at tonight's ceremony, arrive together.Matt Winkelmeyer / Getty Images for dcp Billie Eilish is up for six awards at tonight's ceremony.Rich Fury / Getty Images Camila Cabello, who's nominated for best collaboration, will perform tonight with Shawn Mendes.Rich Fury / Getty Images Christina AguileraGetty Images Taylor Swift will be honored as the Artist of the Decade at tonight's awards show.Rich Fury / Getty Images Tyra BanksGetty Images Paula AbdulGetty Images Kelsea BalleriniGetty Images Katherine LangfordGetty Images Jameela JamilGetty Images Ella MaiGetty Images Carrie UnderwoodGetty Images Billy PorterGetty Images Singer and songwriter Ciara, the host of the 2019 AMAs, arrives on the red carpet.Emma McIntyre / Getty Images for dcp Lizzo is nominated for new artist of the year, favorite female artist (soul/R&B), and favorite song (soul/R&B).Rich Fury / Getty Images Selena GomezGetty Images Actress, singer, and dancer Alyson Stoner poses on the red carpet.Rich Fury / Getty Images Lil Nax XGetty Images Kelly OsbourneGetty Images Jenna DewanGetty Images Heidi KlumGetty Images DiploGetty Images Damon SharpeGetty Images Constance WuGetty Images Carole KingGetty Images Aijia Lise and Andy GrammerGetty Images Nick ViallGetty Images Patrick StarrrGetty Images Pia MiaGetty Images Post MaloneGetty Images Regina KingGetty Images Rich the Kid and Antonette WillisGetty Images Shawn MendesGetty Images Taran Killam and Cobie SmuldersGetty Images WATTGetty Images Daniel LevyGetty Images Adam Levin, Sam Harris, and Casey Harris of X AmbassadorsGetty Images


|
Documentation for C++/SDL 2.0 Tile Engine
Making a simple tile based engine
|
A math utility function namespace. More...
Enumerations | |
| enum | { UP, DOWN, LEFT, RIGHT } |
| Describes a direction. |
Functions | |
| float | Distance (const Vector2f &a, const Vector2f &b) |
| float | Clamp (const float x, const float min, const float max) |
| float | Magnitude (const Vector2f &v) |
| Vector2f | Normalize (const Vector2f &v) |
| Vector2f | Lerp (const Vector2f &start, const Vector2f &end, float percent) |
| int | RectNearRect (const Rectf &a, const Rectf &b, int tolerance=0) |
| bool | CheckCollision (const Rectf &a, const Rectf &b) |
| bool | CheckCollision (const Vector2f &p, const Rectf &r) |
| Vector2f | ToSceneSpace (const Camera *cam, const Vector2f &v) |
| Rectf | ToSceneSpace (const Camera *cam, const Rectf &r) |
| Vector2f | FromSceneSpace (const Camera *cam, const Vector2f &v) |
| Rectf | FromSceneSpace (const Camera *cam, const Rectf &r) |
A math utility function namespace.
A math utility function namespace
| float Math::Clamp | ( | const float | x, |
| const float | min, | ||
| const float | max | ||
| ) |
Clamp the value x between the range min and max
| x | The value to clamp |
| min | The minimum value x can be |
| max | The max value x can be |
Takes two vectors (points) and returns the distance between them
| a | First point |
| b | Second point |
| float Math::Magnitude | ( | const Vector2f & | v | ) |
Check if two rectangles are near each other and return the side of a that's near b TODO: Implement an early out for this function if the rect's are too far
| a | The first Rect |
| b | The Rect to see if a is near |
| tolerance | The max distance the Rect's can be from each other, default is 0 |


This package contains a full DFA/NFA implementation with Unicode alphabet and support for all standard (and a number of non-standard) regular expression operations.
The most commonly used functionality is located in the classes LinkedAutomaton and RegExp.
For more information, go to the package home page at https://github.com/pocorall/automaton.


Kurt Schnelker is a student at Dev Bootcamp, an aspiring programmer, and entreprenuer. He enjoys the challenges that programming faces him with on a daily basis. In his spare time he enjoys playing the guitar, yoga, and football.
kurt.schnelker@gmail.com


The pattern space is a buffer that contains the current input line. There is also a set-aside buffer called the hold space. The contents of the pattern space can be copied to the hold space and the contents of the hold space can be copied to the pattern space. A group of commands allows you to move data between the hold space and the pattern space. The hold space is used for temporary storage, and that's it. Individual commands can't address the hold space or alter its contents.
The most frequent use of the hold space is to have it retain a duplicate of the current input line while you change the original in the pattern space. The commands that affect the pattern space are:
| Command | Abbreviation | Function |
|---|---|---|
| Hold | h or H | Copy or append contents of pattern space to hold space. |
| Get | g or G | Copy or append contents of hold space to pattern space. |
| Exchange | x | Swap contents of hold space and pattern space. |
Each of these commands can take an address that specifies a single line or a range of lines. The hold (h,H) commands move data into the hold space and the get (g,G) commands move data from the hold space back into the pattern space. The difference between the lowercase and uppercase versions of the same command is that the lowercase command overwrites the contents of the target buffer, while the uppercase command appends to the buffer's existing contents.
The hold command replaces the contents of the hold space with the contents of the pattern space. The get command replaces the contents of the pattern space with the contents of the hold space.
The Hold command puts a newline followed by the contents of the pattern space after the contents of the hold space. (The newline is appended to the hold space even if the hold space is empty.) The Get command puts a newline followed by the contents of the hold space after the contents of the pattern space.
The exchange command swaps the contents of the two buffers. It has no side effects on either buffer.
Let's use a trivial example to illustrate putting lines into the hold space and retrieving them later. We are going to write a script that reverses pairs of lines. For a sample file, we'll use a list of numbers:
1 2 11 22 111 222
The object is to reverse the order of the lines beginning with 1 and the lines beginning with 2. Here's how we use the hold space: we copy the first line to the hold space - and hold on to it - while we clear the pattern space. Then sed reads the second line into the pattern space and we append the line from the hold space to the end of the pattern space. Look at the script:
# Reverse flip /1/{ h d } /2/{ G }
Any line matching a "1" is copied to the hold space and deleted from the pattern space. Control passes to the top of the script and the line is not printed. When the next line is read, it matches the pattern "2" and the line that had been copied to the hold space is now appended to the pattern space. Then both lines are printed. In other words, we save the first line of the pair and don't output it until we match the second line.
Here's the result of running the script on the sample file:
$sed -f sed.flip test.flip
2 1 22 11 222 111
The hold command followed by the delete command is a fairly common pairing. Without the delete command, control would reach the bottom of the script and the contents of the pattern space would be output. If the script used the next (n) command instead of the delete command, the contents of the pattern space would also be output. You can experiment with this script by removing the delete command altogether or by putting a next command in its place. You could also see what happens if you use g instead of G.
Note that the logic of this script is poor, though the script is useful for demonstration purposes. If a line matches the first instruction and the next line fails to match the second instruction, the first line will not be output. This is a hole down which lines disappear.
In the previous chapter, we introduced the transform command (y) and described how it can exchange lowercase letters for uppercase letters on a line. Since this command acts on the entire contents of the pattern space, it is something of a chore to do a letter-by-letter transformation of a portion of the line. But it is possible, though convoluted, as the following example will demonstrate.
While working on a programming guide, we found that the names of statements were entered inconsistently. They needed to be uppercase, but some were lowercase while others had an initial capital letter. While the task was simple - to capitalize the name of the statement - there were nearly 100 statements and it seemed a tedious project to write that many explicit substitutions of the form:
s/find the Match statement/find the MATCH statement/g
The transform command could do the lowercase-to-uppercase conversion but it applies the conversion to the entire line. The hold space makes this task possible because we use it to store a copy of the input line while we isolate and convert the statement name in the pattern space. Look at the script first:
# capitalize statement names /the .* statement/{ h s/.*the \(.*\) statement.*/\1/ y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ G s/\(.*\)\n\(.*the \).*\( statement.*\)/\2\1\3/ }
The address limits the procedure to lines that match "the .* statement". Let's look at what each command does:
h
The hold command copies the current input line into the hold space. Using the sample line "find the Match statement," we'll show the contents of the pattern space and of the hold space. After the h command, both the pattern space and the hold space are identical.
Pattern Space: | find the Match statement |
Hold Space: | find the Match statement |
s/.*the \(.*\) statement.*/\1/
The substitute command extracts the name of the statement from the line and replaces the entire line with it.
Pattern Space: | Match |
Hold Space: | find the Match statement |
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
The transform command changes each lowercase letter to an uppercase letter.
Pattern Space: | MATCH |
Hold Space: | find the Match statement |
G
The Get command appends the line saved in the hold space to the pattern space.
Pattern Space: | MATCH\nfind the Match statement |
Hold Space: | find the Match statement |
s/\(.*\)\n\(.*the \).*\( statement.*\)/\2\1\3/
The substitute command matches three different parts of the pattern space: 1) all characters up to the embedded newline, 2) all characters following the embedded newline and up to and including "the" followed by a space, and 3) all characters beginning with a space and followed by "statement" up to the end of the pattern space. The name of the statement as it appeared in the original line is matched but not saved. The replacement section of this command recalls the saved portions and reassembles them in a different order, putting the capitalized name of the command in between "the" and "statement."
Pattern Space: | find the MATCH statement |
Hold Space: | find the Match statement |
Let's look at a test run. Here's our sample file:
find the Match statement Consult the Get statement. using the Read statement to retrieve data
Running the script on the sample file produces:
find the MATCH statement Consult the GET statement. using the READ statement to retrieve data
As you can see from this script, skillful use of the hold space can aid in isolating and manipulating portions of the input line.
In the previous chapter, we looked at a shell script named index.edit. This script extracts index entries from one or more files and automatically generates a sed script consisting of a substitute command for each index entry. We mentioned that a small failing of the script was that it did not look out for regular expression metacharacters that appeared as literals in an index entry, such as the following:
.XX "asterisk (*) metacharacter"
After processing this entry, the original index.edit generated the following substitute command:
/^\.XX /s/asterisk (*) metacharacter/asterisk (*) metacharacter/
While it "knows" to escape the period before ".XX", it doesn't protect the metacharacter "*". The problem is that the pattern "(*)" does not match "(*)" and the substitute command would fail to be applied. The solution is to modify index.edit so it looks for metacharacters and escapes them. There's one more twist: a different set of metacharacters is recognized in the replacement string.
We have to maintain two copies of the index entry. The first copy we edit to escape regular expression metacharacters and then use for the pattern. The second copy we edit to escape the metacharacters special to the replacement string. The hold space keeps the second copy while we edit the first copy, then we swap the two and edit the second copy. Here's the script:
#! /bin/sh # index.edit -- compile list of index entries for editing # new version that matches metacharacters grep "^\.XX" $* | sort -u | sed ' h s/[][\\*.]/\\&/g x s/[\\&]/\\&/g s/^\.XX // s/$/\// x s/^\\\.XX \(.*\)$/\/^\\.XX \/s\/\1\// G s/\n//'
The hold command puts a copy of the current index entry into the hold space. Then the substitute command looks for any of the following metacharacters: "]", "[", "\", "*" or ".". This regular expression is rather interesting: 1) if the close bracket is the first character in a character class, it is interpreted literally, not as the closing delimiter of the class; and 2) of the metacharacters specified, only the backslash has a special meaning in a character class and must be escaped. Also, there is no need to escape the metacharacters "^" and "$" because they only have special meaning if in the first or last positions in a regular expression, respectively, which is impossible given the structure of the index entry. After escaping the metacharacters, the exchange command swaps the contents of the pattern space and the hold space.
Starting with a new copy of the line, the substitute command adds a backslash to escape either a backslash or an ampersand for the replacement string. Then another substitute command removes the ".XX" from the line and the one after that appends a slash (/) to the end of the line, preparing a replacement string that looks like:
"asterisk (*) metacharacter"/
Once again, the exchange command swaps the pattern space and the hold space. With the first copy in the pattern space, we need to prepare the pattern address and the substitute pattern. The substitute command saves the index entry, and replaces the line with the first part of the syntax for the substitute command:
\/^\\.XX \/s\/\1\//
Using the sample entry, the pattern space would have the following contents:
/^\.XX /s/"asterisk (\*) metacharacter"/
Then the Get command takes the replacement string in the hold space and appends it to the pattern space. Because Get also inserts a newline, the substitute command is necessary to remove it. The following line is output at the end:
/^\.XX /s/"asterisk (\*) metacharacter"/"asterisk (*) metacharacter"/
The hold space can be used to collect a block of lines before outputting them. Some troff requests and macros are block-oriented, in that commands must surround a block of text. Usually a code at the beginning enables the format and one at the end disables the format. HTML-coded documents also contain many block-oriented constructs. For instance, "
" begins a paragraph and "
" ends it. In the next example, we'll look at placing HTML-style paragraph tags in a plain text file. For this example, the input is a file containing variable-length lines that form paragraphs; each paragraph is separated from the next one by a blank line. Therefore, the script must collect all lines in the hold space until a blank line is encountered. The contents of the hold space are retrieved and surrounded with the paragraph tags.
Here's the script:
/^$/!{ H d } /^$/{ x s/^\n/
/ s/$/<\/p>/ G }
Running the script on a sample file produces:

My wife won't let me buy a power saw. She is afraid of an accident if I use one. So I rely on a hand saw for a variety of weekend projects like building shelves. However, if I made my living as a carpenter, I would have to use a power saw. The speed and efficiency provided by power tools would be essential to being productive.

For people who create and modify text files, sed and awk are power tools for editing.

Most of the things that you can do with these programs can be done interactively with a text editor. However, using these programs can save many hours of repetitive work in achieving the same result.

The script has basically two parts, corresponding to each address. Either we do one thing if the input line is not blank or a different thing if it is. If the input line is not blank, it is appended to the hold space (with H), and then deleted from the pattern space. The delete command prevents the line from being output and clears the pattern space. Control passes back to the top of the script and a new line is read. The general idea is that we don't output any line of text; it is collected in the hold space.
If the input line is blank, we process the contents of the hold space. To illustrate what the second procedure does, let's use the second paragraph in the previous sample file and show what happens. After a blank line has been read, the pattern space and the hold space have the following contents:
Pattern Space: | ^$ |
Hold Space: |
|
A blank line in the pattern space is represented as "^$", the regular expression that matches it. The embedded newlines are represented in the hold space by "\n". Note that the Hold command puts a newline in the hold space and then appends the current line to the hold space. Even when the hold space is empty, the Hold command places a newline before the contents of the pattern space.
The exchange command (x) swaps the contents of the hold space and the pattern space. The blank line is saved in the hold space so we can retrieve it at the end of the procedure. (We could insert a newline in other ways, also.)
Pattern Space: |
|
Hold Space: | ^$ |
Now we make two substitutions: placing "
" at the beginning of the pattern space and "
" at the end. The first substitute command matches "^\n" because a newline is at the beginning of the line as a consequence of the Hold command. The second substitute command matches the end of the pattern space ("$" does not match any embedded newlines but only the terminal newline.)
Pattern Space: |
|
Hold Space: | ^$ |
Note that the embedded newline is preserved in the pattern space. The last command, G, appends the blank line in the hold space to the pattern space. Upon reaching the bottom of the script, sed outputs the paragraph we had collected in the hold space and coded in the pattern space.
This script illustrates the mechanics of collecting input and holding on to it until another pattern is matched. It's important to pay attention to flow control in the script. The first procedure in the script does not reach bottom because we don't want any output yet. The second procedure does reach bottom, clearing the pattern space and the hold space before we begin collecting lines for the next paragraph.
This script also illustrates how to use addressing to set up exclusive addresses, in which a line must match one or the other address. You can also set up addresses to handle various exceptions in the input and thereby improve the reliability of a script. For instance, in the previous script, what happens if the last line in the input file is not blank? All the lines collected since the last blank line will not be output. There are several ways to handle this, but a rather clever one is to manufacture a blank line that the blank-line procedure will match later in the script. In other words, if the last line contains a line of text, we will copy the text to the hold space and clear the contents of the pattern space with the substitute command. We make the current line blank so that it matches the procedure that outputs what has been collected in the hold space. Here's the procedure:
${ /^$/!{ H s/.*// } }
This procedure must be placed in the script before the two procedures shown earlier. The addressing symbol "$" matches only the last line in the file. Inside this procedure, we test for lines that are not blank. If the line is blank, we don't have to do anything with it. If the current line is not blank, then we append it to the hold space. This is what we do in the other procedure that matches a non-blank line. Then we use the substitute command to create a blank line in the pattern space.
Upon exiting this procedure, there is a blank line in the pattern space. It matches the subsequent procedure for blank lines that adds the HTML paragraph codes and outputs the paragraph.


QUEEN's GUARD
Copyright (c) ~1780 Adam Vaugeois?
Queen's Guard (a.k.a. Agon) is played on an hexagonal board with the following setup:
- RING - Two cells belong to the same ring, if they are equally distant to the center cell.
- MOVE - The Guards and the Queen may move to any adjacent empty cell, with the following restriction:
- The move may be sideways, i.e., in the same ring around the center, or,
- The move may be into a cell inside the next inner ring, i.e., towards the center.
- A Guard may never enter the center.
- TRAP - If a piece moves to a cell, where there is an enemy piece between it and a friendly one (and all 3 pieces are in the same ring), the enemy piece is trapped.
- A trapped piece must, on the next move, be placed on any empty cell in the next outer ring (so, trapping a piece is like gaining an extra move, since the adversary must waste his next move to release the trap).
- If a piece moves between two enemy pieces, it also gets trapped.
- If the Queen and a Guard are trapped at the same time, then the Queen must be moved first.
- GOAL - Wins the player that places his Queen in the center, surrounded by his six Guards.
- A player looses, if his Guards are positioned immediately around the cell, and this is empty.
My impression is that the game is too drawish. One thing that may help is to modify the trap rule, and a trapped stone should be placed on the outer ring of the board, so in this way, trapping is a lot more stronger. But I think this is not enough...
An example Black's move. If Black could move to cell [1] it would win. But since it is trapped between two black Guards, it must go retreat to the next outer ring.
Concerning my last sentence, Damian Walker sent me the following comment:
You mention in your page on Agon, or Queen's Guard, that "One thing that may help is to modify the trap rule, and a trapped stone should be placed on the outer ring of the board, so in this way, trapping is a lot more stronger."
I have R C Bell's book Board and Table Games from Many Civilizations, and Parlett's book The Oxford History of Board Games, and both books say that this is how the game is played anyway. The exception is that when a queen is trapped, she may be placed anywhere.
They also propose a variant, though each is slightly different. Bell proposes that the queens start in opposite corners as in the normal game, but that the game starts with a placement phase, where players take turns to place their guards, one at a time, in any hex on the board (the centre excepted, presumably). Once this is done, play continues as normal. Parlett suggests that the queens are also placed, before the guards, in the same way.There is a ZRF to play Queen's Guard with Zillions.


pickList Widget
src/widgets/select/pick-list.js:1
A widget providing selection and sorting capabilities for a list of elements
Item Index
Properties
Methods
addAllItems
-
[event=null]
Move all items from the source list of the pickList to the target list.
Parameters:
-
[event=null]
Object optionalThe event that triggered the movement of the elements. This event will be made accessible when the resulting change event is fired.
addItems
-
[items]
-
[event=null]
Move items from the source list of the pickList to the target list.
Parameters:
-
[items]
Object optionalA list of Elements to remove from the source list of the pickList. If no items are specified, the selected sourceList items are used.
-
[event=null]
Object optionalThe event that triggered the movement of the elements. This event will be made accessible when the resulting change event is fired.
destroy
()
Removes the pick list functionality completely. This will return the element back to its pre-init state.
removeAllItems
-
[event=null]
Move all items from the target list of the pickList to the source list.
Parameters:
-
[event=null]
Object optionalThe event that triggered the movement of the elements. This event will be made accessible when the resulting change event is fired.
removeItems
-
items
-
[event=null]
Move items from the target list of the pickList to the source list.
Parameters:
-
items
ObjectA list of Elements to remove from the target list of the pickList If no items are specified, the selected targetList items are used.
-
[event=null]
Object optionalThe event that triggered the movement of the elements. This event will be made accessible when the resulting change event is fired.
Properties
disabled
Boolean
Disable the pickList widget
Default: false
header
String
The text to use for the pickList header
height
String
The height of the pickList. Specify the value as either:
A String with appropriate units, eg.:
height: '120px'
An integer without any units, in which case the units of
px
are assumed:height: 120
heightMax
String
The maximum height of the pickList Specify the value as either:
A String with appropriate units, eg.:
heightMax: '120px'
An integer without any units, in which case the units of
px
are assumed:heightMax: 120
heightMin
String
The minimum height of the pickList. Specify the value as either:
A String with appropriate units, eg.:
heightMin: '120px'
An integer without any units, in which case the units of
px
are assumed:heightMin: 120
orderable
Boolean
When true, elements in the target list can be re-ordered
Default: true
orderButtonsText
JSON
Text to be applied to the ordering buttons of the target list. The text should be arranged as an object in JSON notation.
eg. {first: ..., up: ..., down: ..., last: ...}
Default: null
pickButtonsText
JSON
Text to be applied to the picking buttons of the picklist. The text should be arranged as an object in JSON notation.
eg. {addAll: ..., add: ..., remove: ..., removeAll: ...}
Default: null
sortFunction
Function
Function used to sort the elements after an item has been added to either the source or target list.
sortFunction
must meet the API requirements of the compareFunction for the
Array.prototype.sort
method.
sourceHeader
String
The text to use for the source header of the pickList
styleClass
String
A CSS class to be added to the pickList. Multiple classes should be space separated
switchByClick
Boolean
When true, clicking on a pickList element will move it between the source and target lists
Default: false
switchByDblClick
Boolean
When true, double-clicking on a pickList element will move it between the source and target lists
Default: true
targetHeader
String
The text to use for the target header of the pickList
Events
addDomElements
Fired after the dynamically created DOM elements of the pickList have been created
blur
Fired when the pickList loses focus
change
Fired when the target list of the pickList changes values.
create
Fired after the pickList has been created
destroy
Fired after the pickList has been destroyed
focus
Fired when the pickList receives focus


Hello World!
This is client/index.html
. Go edit it and refresh!
The contents of the following textarea are automatically saved to the server
via GET/PUT on the URL /var/content
.
It will be restored on change.
The contents of the following textarea are loaded via GET on the URL
/var/content
. You do not have edit
permission, so you can't edit it (a PUT would return 403), but you can
click here to fetch the latest edits
made by others.


CONSOLE
Mode:
Server code
Client code
HEX Transaction
TX-process
Web-process
Save to file
Load from file
Name:
sec


s\AppBundle\Command\CreateAgentCommand
tests\AppBundle\Controller\AgentController
tests\AppBundle\Controller\CustomerController
- ✓ Get customer list action
- ✓ Get customer detail action
- ✓ Create customer action
tests\AppBundle\Controller\OrderController
tests\AppBundle\Controller\ProductController
- ✓ Get product list action
- ✓ Get product detail action
- ✓ Update product action
- ✓ Create product action
tests\AppBundle\EventListener\RequestListener
- ✓ Listener throws when master request has inconsistent client ips
tests\AppBundle\EventListener\ResponseListener
- ✓ Filter does nothing for sub requests
s\AppBundle\Repository\CustomerRepository
- ✓ Find all records test
- ✓ Find one by id test
tests\AppBundle\Service\AgentService
- ✓ Get user
- ✓ Validate user credentials
- ✓ Validate user credentials through exception with invalid user name
- ✓ Validate user credentials through exception with disabled user
- ✓ Validate user credentials through exception with invalid credential
- ✓ Generate authentication token
tests\PhpunitBundle\Service\AuthenticateAuthorizeService
- ✓ Authenticate api request
- ✓ Authenticate api request should throw exception for invalid content type
- ✓ Authenticate api request should throw exception for invalid authorization
- ✓ Authenticate api request should throw exception for invalid user
- ✓ Authenticate api request should throw exception for invalid method
- ✓ Authenticate api request should throw exception for disabled user
tests\AppBundle\Service\CustomerService
- ✓ Create one
- ✓ Get all
- ✓ Get one
- ✓ Update one should throw exception for invalid customer id
- ✓ Update one
- ✓ Delete one should throw exception for invalid customer id
- ✓ Delete one
tests\AppBundle\Service\OrderService
- ✓ Process place order request
- ✓ Validate place order request
- ✓ Fetch or create customer
tests\AppBundle\Service\ProductService
- ✓ Fetch product list
- ✓ Create product
- ✓ Get product detail
- ✓ Get product detail throw exception for invalid product code
- ✓ Update product throw exception for invalid product code
- ✓ Update one


Implements the differential evolution algorithm for global optimization of a real-valued function of a real-valued parameter vector.
| Version: | 2.2-4 |
| Depends: | parallel |
| Suggests: | foreach, iterators, colorspace, lattice |
| Published: | 2016-12-19 |
| Author: | David Ardia [aut], Katharine Mullen [aut, cre], Brian Peterson [aut], Joshua Ulrich [aut], Kris Boudt [ctb] |
| Maintainer: | Katharine Mullen <mullenkate at gmail.com> |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| NeedsCompilation: | yes |
| Citation: | DEoptim citation info |
| Materials: | README NEWS |
| In views: | Optimization |
| CRAN checks: | DEoptim results |
| Reference manual: | DEoptim.pdf |
| Vignettes: |
DEoptim: An R Package for Differential Evolution Large scale portfolio optimization with DEoptim |
| Package source: | DEoptim_2.2-4.tar.gz |
| Windows binaries: | r-devel: DEoptim_2.2-4.zip, r-release: DEoptim_2.2-4.zip, r-oldrel: DEoptim_2.2-4.zip |
| OS X binaries: | r-release: DEoptim_2.2-4.tgz, r-oldrel: DEoptim_2.2-4.tgz |
| Old sources: | DEoptim archive |
| Reverse depends: | EcoHydRology, galts, likeLTD, micEconCES, quickpsy, selectMeta |
| Reverse imports: | BaMORC, BBEST, BMhyb, carfima, CEGO, ctsem, DstarM, FuzzyStatProb, IDE, phenex, prodest, QuantumClone, ROI.plugin.deoptim, SpaDES.core, SPOT, svars, trawl |
| Reverse suggests: | airGR, BayesianTools, MSCMT, nanop, npsp, PortfolioAnalytics, RcppDE, SACOBRA, SpaDES.tools, swmmr |
Please use the canonical form https://CRAN.R-project.org/package=DEoptim to link to this page.


(2006-05-28) Changed license to Apache Software License 2.0.
(2003-05-06) Added target attribute support
(2002-10-10) Added reload method
About a year ago Emil visited me while I was living in USA and he came up with a brilliant idea for a next generation DHTML tree. After some discussions about this it took shape and in the end it turned out to be one of the best DHTML tree scripts I've ever seen.
Since the original xTree script is implemented using Object Oriented JS it is very easy to extend and as soon as it started to take shape we got some wild ideas on how one could extend the tree. One idea that Emil implemented in the original tree was to add support for persistance. Another idea I had some time later was to allow subtrees to be loaded and populated at runtime. For this to work the xTree had to be updated a little to support data model changes at runtime. Emil added support for this after a while and now nothing was in my way to add the dynamic loading support.
The XLoadTree is an extended version of the xTree and it allows you to define a source property for each tree item that points to an xml file that is then loaded, transformed using DOM and inserted using tree item methods. The basic mechanism for this has been working for a long time but since I wanted to cover the xml loading mechanisms before writing this article it is not until now that I can publish this.
The persistance from the original xTree is not sophisticated enough for dynamic loaded trees because the original persistance is dependent on the order of insertion and not the path. I will try to fix this in a later update.
The xml object has some issues when using the file protocol (in IE) so this one only works when located on a web server. I'll see what can be done about this.


Here is some dummy text for this paragraph.
Here is some dummy text about my skills
Here is some dummy text for contact me.


| 006:158 Khan | : |
Do they then wait for anything other than that the angels should come to them, or that your Lord should come, or that some of the Signs of your Lord should come (i.e. portents of the Hour e.g., arising of the sun from the west)! The day that some of the Signs of your Lord do come, no good will it do to a person to believe then, if he believed not before, nor earned good (by performing deeds of righteousness) through his Faith. Say: "Wait you! we (too) are waiting." |
| 006:158 Maulana | : |
They wait not aught but that the angels should come to them, or that thy Lord should come, or that some of the signs of thy Lord should come. On the day when some of the signs of thy Lord come, its faith will not profit a soul which believed not before, nor earned good through its faith. Say: Wait; we too are waiting. |
| 006:158 Pickthal | : |
Wait they, indeed, for nothing less than that the angels should come unto them, or thy Lord should come, or there should come one of the portents from thy Lord? In the day when one of the portents from thy Lord cometh, its belief availeth naught a soul which theretofore believed not, nor in its belief earned good (by works). Say: Wait ye! Lo! We (too) are waiting. |
| 006:158 Rashad | : |
Are they waiting for the angels to come to them, or your Lord, or some physical manifestations of your Lord? The day this happens, no soul will benefit from believing if it did not believe before that, and did not reap the benefits of belief by leading a righteous life. Say, "Keep on waiting; we too are waiting." |
| 006:158 Sarwar | : |
Are they waiting until the angels or your Lord come to them or for some miracles to take place? On the day when some miracles of God will take place, the belief of any soul will be of no avail to it unless some good deeds have been done with it, or it has been formed before the coming of such a day. (Muhammad), tell them, "Wait and we, too, are waiting." |
| 006:158 Shakir | : |
They do not wait aught but that the angels should come to them, or that your Lord should come, or that some of the signs of your Lord should come. On the day when some of the signs of your Lord shall come, its faith shall not profit a soul which did not believe before, or earn good through its faith. Say: Wait; we too are waiting. |
| 006:158 Sherali | : |
They are but waiting that angels should come to them or that thy Lord should come or there should come some of the Signs of thy Lord. The day when some of the Signs of thy Lord shall come, it shall not profit a soul to believe, which had not believed before, nor earned any good by its faith. Say, 'Wait ye, we too are waiting.' |
| 006:158 Yusufali | : |
Are they waiting to see if the angels come to them, or thy Lord (Himself), or certain of the signs of thy Lord! the day that certain of the signs of thy Lord do come, no good will it do to a soul to believe in them then if it believed not before nor earned righteousness through its faith. Say: "Wait ye: we too are waiting." |
Concepts/Themes Covered: الإيمان > الإيمان بالله > حقيقة الإيمان Faith> Belief In Allah> The Reality of Faith الإيمان > اليوم الآخر > الإرهاصات التي تسبقه Faith> The Hereafter> The Signs which Precede it
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


|
Velocity Tools
Generic Tools
Tool Documentation
Other Subprojects
|
|
RenderTool Reference Documentation
|
| |
This tool exposes methods to evaluate the given strings as VTL
(Velocity Template Language) and automatically using the current context.
| Class |
| | org.apache.velocity.tools.generic.RenderTool |
| Name |
| | $render (this is the recommended name of the tool in
the Velocity context) |
| Toolbox Configuration Example |
| | <tool>
<key>render</key>
<scope>application</scope>
<class>org.apache.velocity.tools.generic.RenderTool</class>
</tool> |
| Author(s) |
| |
Nathan Bubna
|
- Method Overview
-
|
eval() |
Evaluates a String containing VTL using the current context, and
returns the result as a String.
|
|
recurse() |
Recursively evaluates a String containing VTL using the
current context, and returns the result as a String.
|
- See Also
-
The Javadoc for more info.
|
|
eval()
|
| |
Evaluates a String containing VTL using the current context, and
returns the result as a String.
String eval(Context ctx, String vtl)
|
- Parameters
-
- ctx
-
The Context to be evaluate the vtl with.
- vtl
-
The code to be evaluated.
- Returns
-
The evaluated code as a String.
Evaluates a String containing VTL using the given context, and
returns the result as a String. If this fails, then null
will be returned. This evaluation is not recursive.
#set( $list = [1,2,3] )
#set( $object = '$list' )
#set( $method = 'size()' )
$render.eval($ctx, "${object}.$method")
|
|
This will produce the following output:
|
|
recurse()
|
| |
Recursively evaluates a String containing VTL using the
current context, and returns the result as a String.
String recurse(Context ctx, String vtl)
|
- Parameters
-
- vtl
-
The code to be evaluated.
- ctx
-
The Context to be evaluate the vtl with.
- Returns
-
The evaluated code as a String.
Recursively evaluates a String containing VTL using the
given context, and returns the result as a String. It
will continue to re-evaluate the output of the last
evaluation until an evaluation returns the same code
that was fed into it.
#macro( say_hi )hello world!#end
#set( $foo = '#say_hi()' )
#set( $bar = '$foo' )
$render.recurse($ctx, '$bar')
|
|
This will produce the following output:
|
|


| Package | Description |
|---|---|
| org.custommonkey.xmlunit |
Root of the XMLUnit 1.x compatibility layer.
|
| org.custommonkey.xmlunit.examples |
| Modifier and Type | Class and Description |
|---|---|
class |
DetailedDiff
Compares and describes all the differences between two XML documents.
|
class |
Diff
Compares and describes any difference between XML documents.
|
class |
IgnoreTextAndAttributeValuesDifferenceListener
Class to use when performing a Diff that only compares the
structure of 2 pieces of XML, i.e. where the values of text
and attribute nodes should be ignored.
|
| Modifier and Type | Method and Description |
|---|---|
void |
DifferenceEngineContract.compare(Node control,
Node test,
DifferenceListener listener,
ElementQualifier elementQualifier)
Entry point for Node comparison testing.
|
void |
DifferenceEngine.compare(Node control,
Node test,
DifferenceListener listener,
ElementQualifier elementQualifier)
Entry point for Node comparison testing.
|
void |
NewDifferenceEngine.compare(Node control,
Node test,
DifferenceListener listener,
ElementQualifier elementQualifier)
Entry point for Node comparison testing.
|
protected void |
DifferenceEngine.compare(Object expected,
Object actual,
Node control,
Node test,
DifferenceListener listener,
Difference difference)
If the expected and actual values are unequal then inform the listener of
a difference and throw a DifferenceFoundException.
|
protected void |
DifferenceEngine.compare(Object expected,
Object actual,
Node control,
Node test,
DifferenceListener listener,
Difference difference,
XpathNodeTracker controlLoc,
XpathNodeTracker testLoc)
If the expected and actual values are unequal then inform the listener of
a difference and throw a DifferenceFoundException.
|
protected void |
DifferenceEngine.compareAttribute(Attr control,
Attr test,
DifferenceListener listener)
Compare two attributes
|
protected void |
DifferenceEngine.compareCDataSection(CDATASection control,
CDATASection test,
DifferenceListener listener)
Compare two CDATA sections - unused, kept for backwards compatibility
|
protected void |
DifferenceEngine.compareComment(Comment control,
Comment test,
DifferenceListener listener)
Compare two comments
|
protected void |
DifferenceEngine.compareDocument(Document control,
Document test,
DifferenceListener listener,
ElementQualifier elementQualifier)
Compare two Documents for doctype and then element differences
|
protected void |
DifferenceEngine.compareDocumentType(DocumentType control,
DocumentType test,
DifferenceListener listener)
Compare two DocumentType nodes
|
protected void |
DifferenceEngine.compareElement(Element control,
Element test,
DifferenceListener listener)
Compare 2 elements and their attributes
|
protected void |
DifferenceEngine.compareHasChildNodes(Node control,
Node test,
DifferenceListener listener)
Compare the number of children, and if the same, compare the actual
children via their NodeLists.
|
protected void |
DifferenceEngine.compareNode(Node control,
Node test,
DifferenceListener listener,
ElementQualifier elementQualifier)
First point of call: if nodes are comparable it compares node values then
recurses to compare node children.
|
protected boolean |
DifferenceEngine.compareNodeBasics(Node control,
Node test,
DifferenceListener listener)
Compares node type and node namespace characteristics: basically
determines if nodes are comparable further
|
protected void |
DifferenceEngine.compareNodeChildren(Node control,
Node test,
DifferenceListener listener,
ElementQualifier elementQualifier)
Compare the number of children, and if the same, compare the actual
children via their NodeLists.
|
protected void |
DifferenceEngine.compareNodeList(List<Node> controlChildren,
List<Node> testChildren,
int numNodes,
DifferenceListener listener,
ElementQualifier elementQualifier)
Compare the contents of two node list one by one, assuming that order
of children is NOT important: matching begins at same position in test
list as control list.
|
protected void |
DifferenceEngine.compareProcessingInstruction(ProcessingInstruction control,
ProcessingInstruction test,
DifferenceListener listener)
Compare two processing instructions
|
protected void |
DifferenceEngine.compareRecognizedXMLSchemaInstanceAttribute(Attr control,
Attr test,
DifferenceListener listener)
Compare two attributes
|
protected void |
DifferenceEngine.compareText(CharacterData control,
CharacterData test,
DifferenceListener listener)
Compare text
|
protected void |
DifferenceEngine.compareText(Text control,
Text test,
DifferenceListener listener)
Compare text - unused, kept for backwards compatibility
|
void |
Diff.overrideDifferenceListener(DifferenceListener delegate)
Override the
DifferenceListener used to determine how
to handle differences that are found. |
| Constructor and Description |
|---|
DifferenceListener2DifferenceEvaluator(DifferenceListener dl) |
| Modifier and Type | Class and Description |
|---|---|
class |
CaseInsensitiveDifferenceListener
Ignores case for all textual content.
|
class |
FloatingPointTolerantDifferenceListener
Expects texts to be floating point numbers and treats them as
identical if they only differ by a given tolerance value (or less).
|
class |
TextDifferenceListenerBase
Base class that delegates all differences to another DifferenceListener.
|
| Constructor and Description |
|---|
CaseInsensitiveDifferenceListener(DifferenceListener delegateTo) |
FloatingPointTolerantDifferenceListener(DifferenceListener delegateTo,
double tolerance) |
TextDifferenceListenerBase(DifferenceListener delegateTo) |
Copyright © 2001–2017 XMLUnit. All rights reserved.


Registration Form
Name
Enrollment
Email address
We'll never share your email with anyone else.
Password
Semester
1
2
3
4
5
6
7
8
Submit