Original 3DS
Released in 2011.
- Stereoscopic "3D" display
- CPU: 2x ARM11 MPCore (268MHz)
- GPU: DMP PICA
- RAM: 128MB FCRAM, 6MB VRAM
- 2nd CPU: ARM946
- Backwards compatible with DS games
New 3DS
Released in 2014/2015.
- "Super Stable" Stereoscopic "3D" display
- CPU: 4x ARM11 MPCore (Up to 804MHz)
- GPU: DMP PICA
- RAM: 256MB FCRAM, 6MB VRAM
- 2nd CPU: ARM946
- Backwards compatible with DS games
Hardware overview
Hardware overview
Hardware overview
Privilege levels (theory)
Privilege levels (reality)
svc 0x7B
bic r1, sp, #0xff
orr r1, r1, #0xf00
add r1, r1, #0x28
ldr r2, [r1]
stmdb r2!, {sp, lr}
mov sp, r2
blx r0
pop {r0, r1}
mov sp, r0
bx r1
Privilege levels (theory)
Privilege levels (reality)
Crypto
- Anything that can be signed is signed
- Anything that can be encrypted is encrypted
- Anything that can be made console/gamecard specific is
- Internal NAND
- All data stored on SD
- Savegames, extdata
- All of this is handled by the ARM9 with its secret keys
ARM11 Userland Exploitation
Entrypoint
- Strictly enforced Data Execution Prevention (DEP/NX)
- Existing pages are either R, RW or RX
- No way to reprotect or map new pages as RWX from userland
- No ASLR
⇒ savegame vulns are fair game
- Encrypted and authenticated savegames
⇒ savegame vulns are not great as initial entrypoints
A wild webkit appears
Entrypoint
- Webkit is used all over the place
- Internet browser
- Youtube application
- Miiverse applet
- ...
- Version in use is very old, with some patches
- Multiple bugs exploited by yellows8 and others
Entrypoint
- Cubic Ninja uses QR code to share user-made levels
- It also fails hard at parsing those user-made levels
Dealing with DEP
- Reminder : even with cubic ninja or webkit, we can't run our own code
- Obvious solution : ROP
- Build a fake stack that returns into code gadgets we need
-
.word ROP_POP_R0PC ; pop {r0, pc}
.word dst ; r0
.word ROP_POP_R1PC ; pop {r1, pc}
.word src ; r1
.word ROP_POP_R2R3R4R5R6PC ; pop {r2, r3, r4, r5, r6, pc}
.word size ; r2
.word 0xDEADBABE ; r3 (garbage)
.word 0xDEADBABE ; r4 (garbage)
.word 0xDEADBABE ; r5 (garbage)
.word 0xDEADBABE ; r6 (garbage)
.word MEMCPY
Dealing with DEP
- ROP is annoying
- svcControlProcessMemory is not accessible from games/applications
- Dynamically linked libraries exist, but are signed
GPU
gspwn
- We can use the GPU to directly access parts of physical memory
- The physical memory layout is completely deterministic
- We can overwrite application .text, get code execution despite DEP
Sandbox
- We've bypassed DEP, but are limited to the current application's sandbox
- can only access its own savedata, likely can't access SD
- can only access its services and syscalls
- can't alter memory layout (number of executable pages...)
Sandbox escape
- GPU can access most of the SYSTEM region which contains :
- home menu (applet, runs in background)
- internet browser (applet, can run in background)
- NS (system module, "Nintendo Shell")
Sandbox escape
- The cutoff excluding the end of SYSTEM and all of BASE looks intentional
- Seems likely Nintendo knew about the possibility of misusing GPU DMA
- If so, they probably didn't realize the extent of the damage it can do
Sandbox escape
- GPU can't access interesting code sections, but it can access menu's heaps
- Taking it over is just a matter of hijacking an object
object:
.word OBJECT_LOC + vtable - object ; pointer to manufactured vtable, and new sp
.word ROP_POP_PC ; pc (pop {pc} to jump to ROP)
vtable: ; also initial ROP
.word ROP_POP_R4R5PC ; pop {r4, r5, pc} : skip pivot
.word OBJECT_LOC + ropload_stackpivot - object + 0x1c ; r4
.word ROP_STACK_PIVOT ; stack pivot ; also r5 (garbage)
rop:
.word ROP_STACK_PIVOT ; ldmdavc r4, {r4, r5, r8, sl, fp, ip, sp, pc}
ropload_stackpivot:
.word 0, 0, 0, 0, 0, 0
.word LOADEDROP_BUFADR ; sp
.word ROP_POP_PC ; pc
Sandbox escape
- Can't run code under home menu, but can ROP our way to success
- ns:s : power of life and death over processes
- Gives us SD access
- Lets us decrypt/dump any title
- Lets us access/overwrite all extdata
- We use this as the base for running homebrew
Homebrew launcher
- Run homebrew "service" in background under menu (written as ROP)
- "Service" handles running homebrew
- Kills current application
- Opens application with necessary permissions for target homebrew
- Takes over application using gspwn
- Sends some service handles to application (for SD access etc)
- "Service" handles events (home button, power button...)
Rom hacks
- We can run code under any app
- We can use this to modify commercial games !
- Launch app, take it over
- Load app's code onto heap
- Patch code
- (we can patch it to redirect data reads to SD card)
- gspwn code and jump to it
Secondary entrypoints
- We can run homebrew under any application
⇒ we can access any savegame
- We can use this to install more convenient secondary entrypoints
Secondary entrypoints
- Menuhax, by yellows8 : exploits faulty theme handling code to run homebrew at startup
- Oot3dhax, by yellows8 : savegame exploit for "Ocarina of Time 3D"
- Ironhax : savegame exploit for "Ironfall : Invasion"
- ...hax : savegame exploit for "..."
What about NS ?
- NS is an attractive target
- Has am:u access, which lets us downgrade individual titles
- Has access to system module-specific system calls
- Is in a region we can partially mess with
- All code and data it uses is beyond the cutoff
- What if we could move them to be below the cutoff ?
What about NS ?
Original layout
What about NS ?
Kill instance of NS
What about NS ?
Allocate data in SYSTEM region from menu
What about NS ?
Launch a new instance of NS
What about NS ?
- Of course, that can't work
- We need NS to launch NS :(
- We can't run multiple instances of the same title :(
- Fortunately, the 3DS has a "safe" mode
- Most system titles have a SAFE_MODE counterpart with a different ID
- pm won't run a SAFE_MODE title if its normal version is already running
- But for some reason...
What about NS ?
- Of course, that can't work
- We need NS to launch NS :(
- We can't run multiple instances of the same title :(
- Fortunately, the 3DS has a "safe" mode
- Most system titles have a SAFE_MODE counterpart with a different ID
- pm won't run a SAFE_MODE title if its normal version is already running
- But for some reason...
snshax
Allocate buffer, launch New3DS Safe NS (sns), gspwn it
snshax
- Gives us code execution under a system module !
- SVC 0x47, 0x48, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x7C
- pm:app, ps:ps, am:u
- Runs in background
- N3DS-only
- For a similar userland privilege escalation attack, look up rohax
ARM11 Kernel Exploitation
Kernel Overview
- Nintendo's first gaming console kernel
- Multicore
- ~130 SVCs (syscalls), ~50 available
- Internally based on C++ objects
SVC 0x15: Result CreateSemaphore(Handle* semaphore, s32 initialCount, s32 maxCount)
SVC 0x21: Result CreateAddressArbiter(Handle* arbiter)
SVC 0x22: Result ArbitrateAddress(Handle arbiter, ...)
Memory Allocators
- Main memory (FCRAM)
- Slab Heap
IPC system
Security
- Little code ✓
- No symbols ✓
- Physically isolated in its own memory ✓
- Objects with reference counting ✓
- More than 100 panic() calls ✓
- Syscall access restriction ✓
- No KASLR, but changing vaddrs between kernel versions✕
- No Stack protection ✕
- Userland is always mapped ✕
- Data Execution Prevention (NX) ✓
Taking a closer look ...
VA d8000000..d8600000 -> PA 18000000..18600000 [ XN ] [ Priv: RW, User: -- ]
VA dff00000..e0000000 -> PA 1ff00000..20000000 [ XN ] [ Priv: RW, User: -- ]
VA e0000000..e8000000 -> PA 20000000..28000000 [ XN ] [ Priv: RW, User: -- ]
...
VA fff00000..fff20000 -> PA 1ff80000..1ffa0000 [ X ] [ Priv: R-, User: -- ]
VA fff20000..fff2c000 -> PA 1ffde000..1ffea000 [ X ] [ Priv: R-, User: -- ]
...
VA ffff0000..ffff1000 -> PA 1fff4000..1fff5000 [ X ] [ Priv: R-, User: -- ]
Taking a closer look ...
VA d8000000..d8600000 -> PA 18000000..18600000 [ XN ] [ Priv: RW, User: -- ]
VA dff00000..e0000000 -> PA 1ff00000..20000000 [ XN ] [ Priv: RW, User: -- ]
VA e0000000..e8000000 -> PA 20000000..28000000 [ XN ] [ Priv: RW, User: -- ]
...
VA fff00000..fff20000 -> PA 1ff80000..1ffa0000 [ X ] [ Priv: R-, User: -- ]
VA fff20000..fff2c000 -> PA 1ffde000..1ffea000 [ X ] [ Priv: R-, User: -- ]
...
VA ffff0000..ffff1000 -> PA 1fff4000..1fff5000 [ X ] [ Priv: R-, User: -- ]
- Little code ✓
- No symbols ✓
- Physically isolated in its own memory ✓
- Objects with reference counting ✓
- More than 100 panic() calls ✓
- Syscall access restriction ✓
- No KASLR, but changing vaddrs between kernel versions✕
- No Stack protection ✕
- Userland is always mapped ✕
- Data Execution Prevention (NX) ✕
Security
- To summarize:
- No Exploitation Protection.
- Let's find the needle in the haystack.
SVC Table
Normal:
- Local Memory Management
- Thread/Process Configuration
- Synchronization Objects Interface
- IPC Requesting
- Normal
Enhanced:
- IPC Responding
- Kernel DMA
- Cache Control
- Normal
- Enhanced
Debug:
- Global Memory Management
- Global Thread/Process Configuration
- Breakpoints
- R/W Process Memory
- Normal
- Enhanced
- Debug
Privileged:
- Process Creation
- Executable Memory Mapping
- Kernel State Changing
- SVC 0x7B
SVC Table
Normal:
- Local Memory Management
- Thread/Process Configuration
- Synchronization Objects Interface
- IPC Requesting
- Enhanced
- Debug
- Privileged
SVC Table
Normal:
- Local Memory Management
- Thread/Process Configuration
- Synchronization Objects Interface
- IPC Requesting // full of panics
- Enhanced
- Debug
- Privileged
SVC Table
Normal:
- Local Memory Management
- Thread/Process Configuration // not much to attack
- Synchronization Objects Interface // not much to attack
- IPC Requesting // full of panics
- Enhanced
- Debug
- Privileged
SVC Table
Normal:
- Local Memory Management
- Thread/Process Configuration // not much to attack
- Synchronization Objects Interface // not much to attack
- IPC Requesting // full of panics
- Enhanced
- Debug
- Privileged
SVC ControlMemory
- We have access to it.
- We can map/free RW pages, ...
- Takes an address, size, op as parameters.
- Does some basic checks.
- Eventually calls a large function.
kern::ControlMemory
1. Calls the memory allocator function ➜ MemchunkHdr ptr.
2. Goes through the allocated Memory Chunks, maps them to userspace. Without any check.
3. Adds Memory Block Information to KProcess.
- Who guarantees that nothing changed between 1. and 2. ?
- Obviously a race condition.
- Exploitation using the GPU could be too slow.
- ... That's not all.
kern::ControlMemory
Allocate Memory
// ...
MemchunkHdr *memchunk;
// Allocate memory
memchunk = heap_alloc_regular(region_descriptor, usr_size);
if(!memchunk) {
// out of memory ...
}
kern::ControlMemory
Map it
/* Map and clear memory */
do {
u32 pages = memchunk->size;
u32 paddr = memchunk + 0x40000000; // convert vaddr -> paddr
// map memchunk into userland
if(mem_map(process, usr_vaddr, pages, paddr, access_rights)>>31) {
// error ...
}
MemchunkHdr *current = memchunk;
memchunk = memchunk->next;
usr_vaddr += pages << 12;
memclear(current, pages << 12); // clear mapped pages
}while(memchunk);
// ...
What's wrong?
kern::ControlMemory
Map it
/* Map and clear memory */
do {
u32 pages = memchunk->size;
u32 paddr = memchunk + 0x40000000; // convert vaddr -> paddr
// map memchunk into userland
if(mem_map(process, usr_vaddr, pages, paddr, access_rights)>>31) {
// error ...
}
MemchunkHdr *current = memchunk;
memchunk = memchunk->next;
usr_vaddr += pages << 12;
memclear(current, pages << 12); // clear mapped pages
} while(memchunk);
// ...
What's wrong?
They're reading from the memchunk after it has already been mapped in userspace!
Exploitation
- Ultimate goal: map kernel pages to userspace.
- On the other hand...
- It requires perfect timing.
if(mem_map(process, usr_vaddr, pages, paddr, access_rights)>>31) {
// error ...
}
MemchunkHdr *current = memchunk;
memchunk = memchunk->next;
- We need a MemchunkHdr structure at the next ptr's address.
The KAddressArbiter oracle
SVC 0x22: Result ArbitrateAddress(Handle arbiter, u32 addr, ...)
- Actually used for Thread Synchronization.
- Tries to read from 'addr'.
- Returns an error if 'addr' is not user-accessible.
Data injection
Let's use the SlabHeap. Because...
- we can create KObjects easily.
- Set their member variables.
- Create a bunch of them.
SlabHeap
Slap the Heap
...we can overwrite vtable pointers.
Summary
- 1. Setup some KObjects
- 2. Request Memory
- 3. Once that memory becomes available, patch the next-ptr.
- 4. Overwrite mapped SlabHeap pages.
- 5. Call svcCloseHandle to deallocate all KObjects.
ARM11 Code Execution
ARM9
-
Reusing the ARM9 for backwards compatibility for NDS as an IO bridge/security processor.
-
Running a stripped down version of ARM11 kernel.
-
No MMU (everything is identity-mapped).
-
.data+stack is executable..
-
.text is writable..
Exploiting ARM9
-
There are three areas with memory-mapped IO:
-
- 0x10000000+: ARM9-only IO
- 0x10100000+: ARM9/ARM11 Shared IO
- 0x10200000+: ARM11-only IO
-
-
We have full ARM11 control.
-
Can we use the shared IO somehow to pwn ARM9?
NTRCARD
- The interface for reading DS cartridges lies in the shared IO region.
- A read operation starts by writing the CTRL register:
LDR R0, =0x10164000
...
LDR R2, =0x883F1FFF ; *NTRCARD_ROMCTRL = \
LSLS R1, R6, #0x1D ; 0x883F1FFF | ((R6&7)<<24);
LSRS R1, R1, #5
ADDS R1, R1, R2
STR R1, [R0,#4] ; This initiates a 0x200-byte transfer
NTRCARD
... and then a read loop:
...
loop: LDR R3, [R0,#4] ; do {
LSLS R3, R3, #8
BPL loop ; while(*NTRCARD_CTRL & ~READY);
LDR R0, [R0,#0x1C]
LSLS R3, R1, #2
ADDS R1, R1, #1
STR R0, [R2,R3] ; buf[i++] = *NTRCARD_IN;
LDR R0, =0x10164000 ; ^ No range check
LDR R3, [R0,#4]
CMP R3, #0
BLT loop ; } while(*NTRCARD_CTRL & BUSY);
...
Vulnerability
So to summarize:
- ARM9 asks for a 0x200 byte transfer.
- ARM11 overwrites the register, asking for 0x4000 bytes.
- ARM9 reads into a buffer until HW says it's finished.
- Boom!
ntrcardhax
We have a nice buffer overrun.
Can we control the data?
The data comes from the DS cartridge slot.
We need to make our own DS cartridge.
+
+
This gives us ARM9 code execution, but...
We want something better.
Chain of trust (Old3DS)
Chain of trust (New3DS)
arm9loader - Theory
- Additional crypto-layer introduced with New3DS.
- Loads new keys from a special NAND-sector.
- Keys are encrypted with a per-console key calculated based on OTP.
- OTP access is disabled forever after arm9loader.
- Looks safe.
arm9loader - Implementation
- Calculate SHA256 hash of OTP.
- Read the key-sector from NAND.
- Decrypt the first key using the OTP hash and put it in keyslot 0x11.

- Verify the 0x11-key by encrypting a fixed test-vector.
- Decrypt ARM9 binary.
They forgot to "clear" keyslot 0x11 here.
- Jump to entrypoint.
Once we have ARM9 code-execution, we can just regenerate all keys by using keyslot 0x11.
arm9loader - Implementation 2.0
- Calculate SHA256 hash of OTP.
- Read the key-sector from NAND.
- Generate all the previous keys, for compatibility.
- Decrypt key #2 from NAND.
- Decrypt ARM9 binary using key #2.
They forgot to verify key #2 by a fixed test-vector.
- Clear keyslot 0x11.
- Jump to entrypoint.
EPIC FAIL
arm9loaderhax
We can change the key #2 in NAND.
arm9loader will decrypt the ARM9 binary to garbage..
.. and jump to it.
Infinite monkeys..
If we try a lot of key #2's...
.. eventually we'll find some garbage that decodes to a branch-instruction.
We install our key #2 onto the NAND key sector.
We install the largest firm binary we have on firm0.
We put our payload on top of firm0.
ARM9 bootrom is executed.
Bootrom loads firm0 into arm9mem.
Bootrom decrypts it.
Bootrom hash-check fails.
Bootrom loads (smaller) firm1 on top.
Bootrom decrypts it.
Since firm1 is valid, bootrom will jump to it.
arm9loader will decrypt using our supplied key.
arm9loader jumps to garbage.
garbage jumps to our code.
Summary
This gives us:
ARM9 code-execution.. ✓
.. from cold boot ✓
.. early. ✓
Gives us 6.x save-key and 7.x NCCH-key.✓
AES Engine
- The ARM9 has a hardware AES crypto engine, used a lot.
- Two security features:
Write-only keys: A key written to a keyslot cannot be read back
Keyscrambler: The actual key used is calculated in hardware and never exposed to the CPU
Keyscrambler
- Two 128-bit keys called keyX and keyY.
- The actual AES key is derived as follows:
normal_key = F(keyX, keyY)
.. where F
is an unknown function implemented in hardware.
Even if we know keyX and keyY, we can't figure out the normal key.
We must ask the 3DS to decrypt/encrypt things for us. :(
Poking
-
By poking the AES engine, we notice:
encrypt(zeroes, keyX=1 << n, keyY=0)
==
encrypt(zeroes, keyX=0, keyY=1 << (n+2))
-
In general, we find that we can write:
F(x, y) = G( (x <<< 2) ^ y )
where G(t)
is an unknown function implemented in hardware.
-
And then we got stuck..
Wait a minute..
- The keyscrambler is used for (among other things):
- Mii QR-codes
- UDS network protocol
- 3DS Download Play
- Wii U also supports all these, but it doesn't have the keyscrambler..
- The Wii U must be using normal keys..
Keys shared between
Wii U <-> 3DS
| Name |
Keyslot |
KeyX set by |
KeyY set by |
| UDS |
0x2D |
Bootrom |
Bootrom |
| Mii QR-codes |
0x31 |
Bootrom |
Firmware |
| DLP |
0x39 |
Bootrom |
Firmware |
- We can't read any keys set by the bootrom.
Can we figure out G(t)?
- Thanks shuffle2 (and team fail0verflow) for helping us extract the Wii U keys!
-
We now have a keyY and its corresponding normal key
(keyX still unknown).
- If G(t) is "bad", then a small change in keyY will only lead to a small change in the normal key.
- Spoiler: G(t) is "bad"
Staring at the data
- One bit in keyY is flipped => One or two bits in the normal key are flipped at a position moved left by 87 or 88, but never 86.
- Looks like an adder maybe?
- Let's try
G(t) = (t + C) <<< 87
, then:
F(x, y) = (((x <<< 2) ^ y) + C) <<< 87
- We don't know keyX because it's set by bootrom.
- We don't know the constant
C
because it's set in silicon.
Bit by bit..
- We take our formula:
normal_key = (((x <<< 2) ^ y) + C) <<< 87
- .. and consider the inequality:
(normal_key0 >>> 87) < (normal_key1 >>> 87)
((x <<< 2) ^ y0) + C < ((x <<< 2) ^ y1) + C
(x <<< 2) ^ y0 < (x <<< 2) ^ y1
- If y0 and y1 are equal except one bit, the XOR is smallest for the y which has the same bit as x.
Solving for keyX and C
- Perform the calculation for all 128 keyY bitflips, and you have recovered all 128 bits of keyX.
- When you know keyX, you can calculate
C
.
- End result:
- Keyscrambler broken ✓
- Bootrom keyX for keyslots 0x30-0x33, 0x38-0x3B ✓
NFC Fail
- Firmware version 8.1 was rushed for the upcoming New3DS release.
- It included an early version of NFC crypto, later replaced.
- Firmware 8.1+ uses an AES normal key.
- Firmware 9.3+ uses an hardcoded keyY.
- They accidentally gave us a (keyY, normal key) pair in their firmware images..
Takeaways
- Giving access to physical memory is dangerous, even if you think you've protected the sensitive stuff
- Shared IO is dangerous
- Only checking your data before decryption is a bad idea
- Secrets hidden in hardware are great, unless you leak them
"I think we may have reached the point where homebrew on closed game consoles is no longer appealing."
- fail0verflow at 30c3
There's still a lot to do
- ctrulib and assorted tools are maturing nicely, but could always use help
- Developers, developers, developers
- Making games is fun !
- Reverse engineering proprietary hardware is fun !
- Reverse engineering proprietary software is fun !


Featured
{% include content/About/News/Featured.html %}
News archive
{% include content/About/News/2022.html %}
{% include content/About/News/2021.html %}
{% include content/About/News/2020.html %}
{% include content/About/News/2019-and-before.html %}


var bot = require('../bot').sharedInstance(),
User = require('./user');
/**
* Represents an wrapped response object
* @param {Object} envelope Envelope dynamic object containing
* message information
* @param {Array<String>} match Array of matches from the message regex
*
* @property {Array<String>} match Array of matches from the message regex
* @property {Envelope} envelope This response {Envelope} instance
* @property {User} user The {User} who sent the message that
* generated this Response instance
* @property {Channel} channel {Channel} from which this message came
* @property {String} text This message's content
*
* @constructor
*/
var Response = function(envelope, match) {
this.envelope = envelope;
this.text = envelope.text;
this.match = match;
this.user = envelope.user;
this.channel = envelope.channel;
};
Response.prototype = {
/**
* Replies the incoming message
* @param {String} string String to be sent back to the user
* @return {undefined} Nothing
*/
send: function(string, attachments) {
bot.adapter.send(this.envelope, string, attachments);
},
/**
* Replies the incoming message mentioning the user if necessary
* @param {String} string String to be sent back to the user
* @return {undefined} Nothing
*/
reply: function(string, attachments) {
bot.adapter.reply(this.envelope, string, attachments);
},
/**
* Sets the propagation status to allowed, which allows the next handler
* to try to process the incoming message
* @return {undefined} Nothing
*/
allowPropagation: function() {
this.envelope.allowPropagation();
},
/**
* Replies this message with a question.
* @param {String} message Prompt to be sent to the user.
* @param {Number} type Type of expected answer. Possible values are Context.NUMBER,
* Context.BOOL, and Context.REGEX. Documentation about those items and
* how they behave can be found in the `Context` documentation.
* @return {Promise} A Promise that will be resolved whenever the target user replies to
* the prompt in the given Channel. This promise cannot be rejected,
* but it may never be resolved.
*/
ask: function(message, type) {
var extra = Array.prototype.slice.apply(arguments, []).slice(2),
args = [message, this.user, this.channel, type].concat(extra);
return bot.contextManager.pushContext.apply(bot.contextManager, args);
},
/**
* Sends a feedback to the channel or user that sent the incoming message to the bot. This
* feature depends on the implementation of the Adapter in use, and may not have effect. For
* instance, when using the Slack adapter, the result is an typing indicator on the bottom of
* the window, stating the the user behind the current bot is typing. This state is reseted
* automatically, whenever a new message from this bot appears.
* @return {undefined} Nothing.
*/
sendTyping: function() {
return bot.adapter.sendTypingState.apply(bot.adapter, [this]);
},
/**
* Adds an reaction to this message. This feature depends on the current adapter implementation
* and will be rejected by default.
* @param {String} reactionName Emoji name to be added to the message.
* @return {Promise} A Promise that will be resolved after the reaction has been
* added to the target message. Again, notice that this feature
* depends on the current Adapter being used and will be rejected
* by default.
*/
addReaction: function(reactionName) {
return bot.adapter.addReaction.apply(bot.adapter, [this.envelope, reactionName]);
},
/**
* Gets an updated state of the user who sent this message.
* @return {Promise} A Promise that will be resolved whenever the user is found.
*/
getUser: function() {
return new Promise((resolve, reject) => {
User.findOne({ username: this.user.username })
.then(u => {
if(!u) {
reject(new Error('User not found.'));
} else {
resolve(u);
}
})
.catch(ex => {
reject(ex);
});
});
}
};
module.exports = Response;


@* * Copyright 2021 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import controllers.auth.AuthenticatedRequest @import config.ApplicationConfig @import utils.GenericViewModel @this() @( pageHeading: String=null, name: String, utr: String, taxYear: Int, actingAsAttorney: Option[ActingAsAttorneyFor] = None )( implicit messages: Messages, request: AuthenticatedRequest[_], appConfig: ApplicationConfig ) @if(actingAsAttorney.isDefined) {
}@name
@Html(Messages("generic.utr")) @utr


[§163D-8.5 Approval of projects, plans, and programs.] All agricultural projects, agricultural development plans, and project facility programs developed by the corporation must be approved by the board of agriculture before implementation. [L 1994, c 264, §7]


*Stock Investments and Mutual Funds are subject to market risks. Please read all Scheme related documents carefully before investing*


My name is Rex Vongphouthone
I am a newly wed and also a newbie when it comes to coding.
A little something about me:
I was born in Honolulu, HI. I am a first generation Laotian/American. After Hawaii my family moved to Minneapolis, MN and I lived there until I was four years old.
My mom's side of the family moved to WA, so my family followed and moved to Bellevue. I grew up in Redmond my whole life.
I graduated from Redmond High School in 2008.
I wanted to be a pharmacist, but when my childhood best friend and cousin died of cancer I was very affected and didn't end up finishing college.
I ended up choosing another career path and became a licensed Hearing Instrument Specialist.
I earned that degree from Spokane Falls Community College in a two year program.
I've been in love with my wife for 7 years and I've been married to her for 8 months!
She is my everything!
Currently, I am working at the Costco Hearing Aid Center in Lynnwood.
This will be my third year there.
I followed my late father's footsteops into this career path.
One of my co-workers has a partner who had attended Epicodus, which is how I became interested in this second career path.
So far at Epicodus I have learned so much about the coding languages.
Prior to attending Epicodus, I took it upon myself to Learn Python the Hard Way, which is a book by Zed A. Shaw, that I started reading as an introduction to what I was getting myself into.
I am having a lot of fun with this course and would love to start a new life within this career!
My current dev-team have been great!
A few of my projects at Epicodus and links to my GitHub repository:
Brief description of my projects at Epicodus using HTML and CSS:
- Hello-world: My very first project! I learned about block elements, how to create an HTML directory, and write in HMTL language.
- Goodbye: I better understood how to create a GitHub repository as well as write in HTML using proper indentation along the way.
- Cookie-recipe: I better understood the layout of HTML using unordered lists and ordered lists.
- Pets: This was something I got the chance to finally try out what I learned and be creative, showcasing my pets while using HTML. Although I was having a hard time adding an image, I finally got it right!
- My-first-webpage: For this project, I finally understood how to commit my work to my GitHub repository. This is where I learned the flow. I also learned about styling HTML using CSS.
- Paragraphs: I learned about styling with classes. I used HTML and CSS.
- Cupcakes: This was my first collaboration project with my pair where I got to drive using HTML and CSS. We learned more about cloning and forking on our github repository.
- JerkyBiz: I wanted to create my own company selling Laotian beef Jerky so I will be getting my website for it set up by the time I am finished with Epicodus. So far I have learned about divs, spans, floats, box models for CSS.
Other than coding being my new interest and hobby, I really enjoy:
- Bike riding trails with my wife.
- Going on hikes and adventrues.
- Dancing and listening to music.
- Grocery shopping at local farmer's markets.
- Reading books and listening to interesting podcasts about health and spirituality.
- Writing songs and raps to instrumental beats.
A few skills I'd like to share with you:
- Cooking: Creating and finding new recipes with my wife.
- Boxing and Muay Thai.
- Driving.


Toggle navigation
CalculatoRI
Haemoglobin Concentration
Tabulated Data Source
Type of Haemoglobin
Oxygeneted
Deoxygeneted
Real Part Reference Point
at
Submit
Reset
Haemoglobin Refractive Index
Real Part of Refractive Index of Haemoglobin
Actions
Export Text File


Instructions:
1.  There are different types of monkeys, that do different things, so you better watch out!
3. Killing the Monkeys give u coins, which you use them to buy more defenses.
4. If the Monkeys somehow get into your tower, you lose lives, you wil be given 100 lives, each monkey that gets into your tower will take 1-5 lives.


Game
The WOJ game. Supports creation of board, wheel, and players which are used to track game play. This class should be used to create games and add rounds to ensure proper functionality.
Example:
let game = new Game();
// create default boards
let data = [data1, data2];
for(let i=0; i<data.length; i++){
let round = game.addRound();
round.board.import(JSON.stringify(data[i]));
round.wheel.assignSectors();
round.wheel.randomizeSectors();
}
// edit board content if needed
round = game.getRound(0);
let clue = round.board.getCategory(1).clues[2];
clue.question = "What is the oldest soft drink in America?";
clue.answer = "Dr. Pepper.";
// start game
game.addPlayer("John");
game.addPlayer("Jane");
// start first round
round = game.getRound(0);
round.start();
// player spins
console.log(round.currentPlayer);
let spin = round.wheel.spin();
console.log(spin);
console.log(round.complete);
Member Summary
| Public Members | ||
| public |
|
|
| public |
|
|
| public |
rounds: Rounds[] |
|
| public get |
Stats for the game. |
Method Summary
| Public Methods | ||
| public |
Add a player to the game. |
|
| public |
Add and initialize a game round with an empty wheel and board. |
|
| public |
editPlayer(id: number, name: string) Retrieve and edit a player. |
|
| public |
getLeaderBoard(): Player[] Retrieve array of players ordered by top score. |
|
| public |
Retrieve a player. |
|
| public |
Retrieve a game round by id. |
Public Members
public rounds: Rounds[] source
Public Methods
public addPlayer(name: string): number source
Add a player to the game. Players are assigned an ID starting with 0 and incrementing by 1.
Params:
| Name | Type | Attribute | Description |
| name | string | the players name. |
public addRound(columns: number, rows: number, basePoints: number): id source
Add and initialize a game round with an empty wheel and board. Rounds are assigned an ID starting with 0 and incrementing by 1.
Return:
| id | auto assigned round ID. |


Features
Tech working on your side.
Codebase
See it for yourself.
Improving worker safety.
We use State-of-the-Art technology to deliver a cloud-based descentralized solution so workers can feel secure in the workplace. Check out our code-base below.
Blockchain Machine Learning App% of healthcare workers say staff shortage is an issue
% of physicians say they're apprehensive about treating patients in the near future
% of healthcare spending is wasteful due to unnecessary tests
% of physicians said they would feel empowered returning to work with employee-sponsored immunity testing
Learn More
Rapid Rollout
We scale with the pandemic
We are targeting government programs sponsoring the advancement of healthcare interoperability to connect with a pilot hospital department, leveraging their existing antibody test sourcing. After a brief 3 week pilot, we will expand to the hospital and onwards.
Modern problems require
Modern solutions
Our focus on decentralised technology promotes Regulation (EU) No 910 of the European Parliament and of the Council (eIDAS) via enhancing access, security and trust in electronic health record systems. The eHealth Digital Service Infrastructure (‘eHDSI’) and all relevant eHDSI policy about the EU’s specific data privacy & transparency requirements are also complied with.
Simpler & More Complete
Have the best of both worlds
Our service, besides being the only Blockchain-base solution, also counts with the most and more refined features.
Elastic Cloud
Descentralized and ready to scale
Encrypted, cheaper, more performatic and more scalable than centralized, bare-metal approaches.
Galley of type and scrambled
On the other hand, we denounce with righteous
Text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type.
Our Team
Contributors
Get in Touch
Doubts? Suggestions? Enquiries?
Contact Info
-
+353 456 789
-
<EMAIL_ADDRESS>-
Richmond St S, Saint Peter's, Dublin, D02 FK02, Ireland


#include <b2BroadPhase.h>
Public Types | |
| enum | { e_nullProxy = -1 } |
Public Member Functions | |
| b2BroadPhase () | |
| ~b2BroadPhase () | |
| int32 | CreateProxy (const b2AABB &aabb, void *userData) |
| void | DestroyProxy (int32 proxyId) |
| Destroy a proxy. It is up to the client to remove any pairs. | |
| void | MoveProxy (int32 proxyId, const b2AABB &aabb, const b2Vec2 &displacement) |
| const b2AABB & | GetFatAABB (int32 proxyId) const |
| Get the fat AABB for a proxy. | |
| void * | GetUserData (int32 proxyId) const |
| Get user data from a proxy. Returns NULL if the id is invalid. | |
| bool | TestOverlap (int32 proxyIdA, int32 proxyIdB) const |
| Test overlap of fat AABBs. | |
| int32 | GetProxyCount () const |
| Get the number of proxies. | |
| template<typename T > | |
| void | UpdatePairs (T *callback) |
| Update the pairs. This results in pair callbacks. This can only add pairs. | |
| template<typename T > | |
| void | Query (T *callback, const b2AABB &aabb) const |
| template<typename T > | |
| void | RayCast (T *callback, const b2RayCastInput &input) const |
| int32 | ComputeHeight () const |
| Compute the height of the embedded tree. | |
Friends | |
| class | b2DynamicTree |
The broad-phase is used for computing pairs and performing volume queries and ray casts. This broad-phase does not persist pairs. Instead, this reports potentially new pairs. It is up to the client to consume the new pairs and to track subsequent overlap.
| b2BroadPhase::b2BroadPhase | ( | ) |
| b2BroadPhase::~b2BroadPhase | ( | ) |
| int32 b2BroadPhase::ComputeHeight | ( | ) | const [inline] |
Compute the height of the embedded tree.
Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs is called.
| void b2BroadPhase::DestroyProxy | ( | int32 | proxyId | ) |
Destroy a proxy. It is up to the client to remove any pairs.
Get the fat AABB for a proxy.
| int32 b2BroadPhase::GetProxyCount | ( | ) | const [inline] |
Get the number of proxies.
| void * b2BroadPhase::GetUserData | ( | int32 | proxyId | ) | const [inline] |
Get user data from a proxy. Returns NULL if the id is invalid.
Call MoveProxy as many times as you like, then when you are done call UpdatePairs to finalized the proxy pairs (for your time step).
| void b2BroadPhase::Query | ( | T * | callback, | |
| const b2AABB & | aabb | |||
| ) | const [inline] |
Query an AABB for overlapping proxies. The callback class is called for each proxy that overlaps the supplied AABB.
| void b2BroadPhase::RayCast | ( | T * | callback, | |
| const b2RayCastInput & | input | |||
| ) | const [inline] |
Ray-cast against the proxies in the tree. This relies on the callback to perform a exact ray-cast in the case were the proxy contains a shape. The callback also performs the any collision filtering. This has performance roughly equal to k * log(n), where k is the number of collisions and n is the number of proxies in the tree.
| input | the ray-cast input data. The ray extends from p1 to p1 + maxFraction * (p2 - p1). | |
| callback | a callback class that is called for each proxy that is hit by the ray. |
Test overlap of fat AABBs.
| void b2BroadPhase::UpdatePairs | ( | T * | callback | ) | [inline] |
Update the pairs. This results in pair callbacks. This can only add pairs.
friend class b2DynamicTree [friend] |


The execution of a put operation is similar to the execution of a send by the origin process and a matching receive by the target process. The obvious difference is that all arguments are provided by one call --- the call executed by the origin process.
| MPI_PUT(origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win) | |
| IN origin_addr | initial address of origin buffer (choice) |
| IN origin_count | number of entries in origin buffer (non-negative integer) |
| IN origin_datatype | datatype of each entry in origin buffer (handle) |
| IN target_rank | rank of target (non-negative integer) |
| IN target_disp | displacement from start of window to target buffer (non-negative integer) |
| IN target_count | number of entries in target buffer (non-negative integer) |
| IN target_datatype | datatype of each entry in target buffer (handle) |
| IN win | window object used for communication (handle) |
int MPI_Put(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win)
MPI_PUT(ORIGIN_ADDR, ORIGIN_COUNT, ORIGIN_DATATYPE, TARGET_RANK, TARGET_DISP, TARGET_COUNT, TARGET_DATATYPE, WIN, IERROR)
<type> ORIGIN_ADDR(*)
INTEGER(KIND=MPI_ADDRESS_KIND) TARGET_DISP
INTEGER ORIGIN_COUNT, ORIGIN_DATATYPE, TARGET_RANK, TARGET_COUNT, TARGET_DATATYPE, WIN, IERROR
{ void MPI::Win::Put(const void* origin_addr, int origin_count, const MPI::Datatype& origin_datatype, int target_rank, MPI::Aint target_disp, int target_count, const MPI::Datatype& target_datatype) const (binding deprecated, see Section Deprecated since MPI-2.2
) }
Transfers origin_count
successive entries of the type specified by the
origin_datatype, starting at address origin_addr
on the origin node to the target node specified by the win, target_rank pair.
The data are written in
the target buffer at address
target_addr = window_base +
target_disp×disp_unit, where window_base and
disp_unit
are the base address and window displacement unit
specified at window initialization, by the target process.
The target buffer is specified by the arguments
target_count
and target_datatype.
The data transfer is the same as that which would occur
if the origin process executed a send
operation
with arguments origin_addr, origin_count, origin_datatype,
target_rank, tag, comm, and the target process executed a
receive operation with arguments
target_addr,
target_count, target_datatype, source, tag, comm, where
target_addr is the target buffer address computed as
explained above, and comm is a communicator for the group of win.
The communication must satisfy the same constraints as for a similar message-passing communication. The target_datatype may not specify overlapping entries in the target buffer.
The message sent must fit, without truncation, in the target buffer.
Furthermore, the target buffer
must fit in the target window.
The target_datatype argument
is a handle to a datatype object defined at the origin process.
However, this object is interpreted at the target process: the outcome
is as if the target datatype object was defined at the target process,
by the same sequence of calls used to define it at the origin process.
The target datatype must
contain only relative displacements, not absolute addresses. The same
holds for get and accumulate.
The target_datatype argument is a handle to a datatype
object
that is defined at the origin process, even though it defines a data
layout in
the target process memory. This causes no problems in a homogeneous
environment, or in a heterogeneous environment, if only portable
datatypes are used (portable datatypes are defined in
Section Semantic Terms
, page Semantic Terms
).
The performance of a put transfer can be significantly affected, on
some systems,
from the choice of window location and the shape and location
of the origin and target buffer: transfers to a target window in memory
allocated by MPI_ALLOC_MEM may be much faster on shared
memory systems;
transfers from contiguous buffers will be
faster on most, if not all, systems; the alignment of the
communication buffers may also impact performance.
( End of advice to users.)
A high-quality
implementation will attempt to
prevent remote accesses to memory outside the
window that was exposed by the process. This, both for debugging
purposes, and for protection with client-server codes that use RMA.
I.e., a high-quality implementation will check, if possible,
window bounds on each RMA call,
and raise an MPI exception at the origin call if an out-of-bound
situation occurred.
Note that the condition can be checked at the origin.
Of course, the added safety achieved by such checks has to be weighed
against the added cost of such checks.
( End of advice to implementors.)
Advice to users.
Advice
to implementors.
Up: Communication Calls
Next: Get
Previous: Communication Calls
Return to MPI-2.2 Standard Index
Return to MPI Forum Home Page
(Unofficial) MPI-2.2 of September 4, 2009
HTML Generated on September 10, 2009


a tribute page for covid warriors
Aug 14, 2020 15:33 IST
After remaining closed since March this year due to the coronavirus disease (Covid-19) pandemic, churches in Mumbai will resume Mass from Sunday with strict adherence to all the government regulations and necessary protocols in place. The state government had permitted reopening of religious places on November 16. However, churches remained closed and only private prayers were allowed so far. Face masks and social distancing norms have been made compulsory. Adults above the age of 65 years, children below 10, and persons with fever, cold, cough, and comorbidities will not be allowed inside church premises. Churches will continue to organise online masses for people who cannot step out as of now, according to Archbishop of Bombay.
They're the Frontline Warriors.


This West Brom star hopes to hand Slaven Bilic another headache at Hull
Albion defender Conor Townsend has had to wait patiently this season, after an injury disrupted beginning to the Baggies' start to the campaign - now he has a chance
by Joseph Chapman, https://www.facebook.com/josephchapmanBM/It took until the end of October for Conor Townsend to make his mark on the West Brom side this season.
Townsend, who to date has only made 16 league appearances for the Baggies since joining the club from Scunthorpe United, replaced the struggling Nathan Ferguson in the meeting with Barnsley - picking up a point-earning assist - and then entered the fray when the teenager saw red against Charlton.
Against Stoke, he made light work of wing-back Tommy Smith in a defensive sense and offered a support to left-sided winger Grady Diangana going forwards.
Is now the time that Townsend is afforded the opportunity to make his first serious case of owning the left-back spot in Albion colours?
West Brom latest
This is your round up of all things West Brom; the one-stop shop that will keep you updated on the latest goings on at the club and beyond.
Transfers, injuries, match-days and managers, we’ve got you covered.
We’ll be bringing the very latest on the Baggies throughout the week and around the clock.
Make sure you keep yourself updated with our handy daily catch up...
Must reads...
- The Leeds and Albion debate dividing opinion - READ
- Bilic sends message to West Ham after Diangana call - READ
- 'Why the hell' Albion flop reflects on time at club - READ
- Albion winger reveals Bilic talks - READ
For all your latest WBA news, opinion, analysis and transfer gossip, click here
You can follow our West Brom reporter Joseph Chapman on Twitter, and his email address is<EMAIL_ADDRESS>The competition
When Townsend was snapped up from then League 1 outfit Scunny, for a fee of around £750,000, the consensus was that he’d be arriving as cover for first-choice Gibbs.
Gibbs, who Albion held onto, was enjoying himself under Darren Moore; he found the net once or twice and tended to spend more time in the opposing half than his own. This admittedly didn’t help Albion’s frailties at the back.
So Townsend, who at 26 isn’t exactly a youngster, had to make do with cup appearances and run-outs from the bench here and there.
Fast forward to the beginning of this campaign - and the draw at Derby - sheer bad luck meant that, just as Gibbs also suffered an injury set-back, he was unavailable to take advantage.
By the time he’d returned, he found Ferguson making the left-back spot his own.
An academy star, who had grown up a centre-back and thrived at right-back, was now denying him his first significant run in the Albion side since he arrived more than 12 months earlier.
Ferguson will be available to face Bristol City in the coming weeks - can Townsend have cemented his place in the side by then?
The fans’ thoughts
Joshua Dyer: A player who I think went under the radar but was superb was Conor Townsend!!! Passing is great, attacks well, defends well! Adds a lot more dynamic on the left! Ferguson been class but Townsend suits this team a lot more with his forward running!
Matt Rowley : Townsend, Sawyers, Bartley, HRK, Livermore. Absolutely superb
TalkWBA : Townsend deserves a lot of credit. Rarely gave the ball away or was challenged defensively and made some good movement link up play with Diangana. Certainly stepped up to his calling
Arry Gill: Townsend stepped up well in the couple of appearances he’s made, fair play
Ricci Dunn : Townsend half decent going forward but doesn’t look like he has a clue when having to defend
Andrew Beech: Nice to see Townsend given ago. He isn’t as pacy as Ferguson but he can cross a ball
poll loading
Who has been your West Brom player of the season so far?
1000+ VOTES SO FAR
Romaine Sawyers Kyle Bartley Jake Livermore Matt Phillips Grady Diangana Matheus Pereira Semi Ajayi Darnell Furlong Hal Robson-Kanu Sam Johnstone Charlie Austin Kyle Edwards Nathan Ferguson Filip Krovinovic Kenneth Zohore Kieran Gibbs
What Townsend said
“I’ve been patient for the best part of two years now – at least 18 months. I have always been waiting for my chance and this is an opportunity now for me, definitely.
“It’s a shame for Nathan because he’s been brilliant when he’s been in the team, and Gibbo (Gibbs) is still injured, which is a shame too, but it is a chance for me and hopefully I can take it and kick on and prove that I’m the one that should play there.
“When I first came here I was new to the league. I had played a lot of games at lower league level but it’s different when you step up, but I’m confident in my own ability. I know I’m good enough to be in this team.
“With us fighting at the top end of the table I just want to keep doing that and keep on proving myself.”


{% extends 'base.html' %} {% import 'macros.html' as macro %} {% block styles %} {{ super() }} {% endblock %} {% block content %}
ThinKTank will build you into becoming a better person and more confident person. You'll be ready to make a confident pitch to your investors in no time.
Check out other people's pitches and learn from there approach. Use that to revise your own pitch and build it to be bulletproof and put you one step closer to financial freedom.
Learn from our veterans and receive emails and tips on how to better approach your day to day to becoming the next billionaire in your family.
Be Phenomenal or be forgotten~Eric(TheHipHopPreacher)Thomas
Business is an ever evolving market and industry. Everyone is coming up with a service or essential that everyone will need now and in the future.
That said. You have to be unique and draw attention to the product pr the service your selling. The competition is high and your bound to get people that can steal your idea. Here you can log in, practice and make your pitches and revise them at your own time.
Click the link to see business pitches that were made recently.
Art is an important and will always be an important part of our lives. We see it everywhere and get different feelings when we see it on different media.
There are a lot of people indulging in different arts some more popular and common around the worlds than others. If you were to OR are involved in the art space and industry.How would you build and make your business unique
Take a look at the creatives page and make a pitch that is unique and will make you stand out
After the just concluded TOKYO 2020 Olympics One of the most unifying factors and aspects of our lives has to be the Olympics.
We all love watching the best in their given disciplines show us what true prowess and hard work looks like. Michael Phelps,Usain Bolt, Eliud Kipchoge, Simon Biles and LeBron James to name a few have gifted and brought the world together.
If you were to advertise and promote your sport in your country, where would you start and how would you make sure it achieves international recognition.
Here are a few pitches that can help you think broadly.
You've probably heard that the millennial community is next in line in shaping the world and the younger community
It goes without saying that there's a lot to be done otherwise 2030 won't be as promising as out forefathers wanted it to be. Limitations like Global warming,racism,Dictatorship, corruption to say a few are some of the major limitations that most countries struggle with.
Say yu had the power to change the current limitations our world faces. How would you implement your power
Have a look at what others suggested.


I recently was asked to build a predictive text application (a la Swiftkey) as part of the capstone project for the Johns Hopkins data science course. It was my second project involving natural language processing (NLP) in the past few months; I also built a small language prediction tool as the capstone for a machine learning workshop I attended.
The goal of my first NLP project was to learn more about model selection and implementing a model as part of a web application framework. As a result, much of the “up front” work was addressed: several Wikipedia pages were scraped in different languages, labeled, and then passed through a vectorizer to create 3-char tokens.
This project, the predictive text application, would require significantly more work, for two reasons: (1) we were starting with a raw corpus, and (2) predictive activities (ie, inferring the “future”) are harder than descriptive activities (ie, inferring “characteristics”). I ony focused on predictions of the English language.
In this post, I’ll describe the process of building the application with an eye towards how I might approach the problem if done again in the future.
##Exploring the Corpus
In the exercise, we used the HC Corpora to develop a predictive text model. The HC Corpora is web-scraped text from a guy named Hans Christensen (thus, HC) in the form of blogs, twitter, and news sources. He has more than 2.5 billion words in 67 languages, which is amazing.
To start, I wanted to get a sense of what common n-grams would look like without cleaning. I also wanted to get a sense of what the n-grams would look like if I took out “stop words.” Stop words are common fillers like “of”, “a”, or “the”. I saved both of these experiments as .csv files to demonstrate why a cleaning of the data was necessary, and why I left stop words in. Removing stop words resulted in a frequency that likely would not be helpful for users. For example, the 2nd most common 3-gram without stopwords was “happy mothers day”. I sampled 2% of the full Corpora.
Using the common cleaning functions from the tm package in R, I created a master function for cleaning the corpora. Note that the order of the functions is important. For example, the list of profanities are all in lowercase. Therefore, if ‘tolower’ did not come earlier - I would have left in some profanities. Per the recommendation of the RWeka documentation, I also created functions for the different multi-word tokens that I will be creating.
clean_text <- function(text){
# Helper function to preprocess corpus
text <- tm_map(text, content_transformer(tolower))
text <- tm_map(text, removeNumbers)
text <- tm_map(text, removePunctuation)
text <- tm_map(text, stripWhitespace)
text <- tm_map(text, removeWords, stopwords("english"))
text <- tm_map(text, removeWords, profanities)
return(text)
}
BiTokens <- function(x) {RWeka::NGramTokenizer(x, RWeka::Weka_control(min = 2, max = 2))}
TriTokens <- function(x) {RWeka::NGramTokenizer(x, RWeka::Weka_control(min = 3, max = 3))}
QuadTokens <- function(x) {RWeka::NGramTokenizer(x, RWeka::Weka_control(min = 4, max = 4))}
For some reason, RWeka has trouble parallelizing the different cores on my OSx. I could only get the functions to work if I specifically stated that I will only use one core. Here, I am creating a 2-, 3-, and 4-gram model. The TDM function creates a very sparse matrix, which I collapse, and then turn into sorted dataframes by frequency.
tdm3a <- TermDocumentMatrix(clean_join, control=list(tokenize=TriTokens))
tdm3 <- removeSparseTerms(tdm3a, 0.9999)
freq3 <- sort(row_sums(tdm3, na.rm = T), decreasing=TRUE)
freq_frame3 <- data.frame(word=names(freq3), freq=freq3)
Tokenizing is a computationally-heavy exercise - since I was only using one core, it would take me more than an hour just to parse 2% of the Corpora once (say, for a 3-gram instead of a 4-gram). As a result, I took shortcuts in developing my database - I would have wanted to ensure that I knew how much of the overall vocabulary was covering, and I chose not to calculate this. There must be a threshold for which additional information is low utility - probably more extreme than Pareto rules (ie, 80% of info covered in 20% of Corpora) - but I am sure that I did not hit that threshold.
 This model works by first matching a database of different “n-grams” to the provided text, and then assigning strengths to different outcomes based on how the match takes place. For example, take the phrase, “The quick brown fox jumps over the lazy dog.” If I have typed “The quick brown fox jumps…” my backoff model would first look at “brown fox jumps” (a 3-gram), then “fox jumps” (a 2-gram), then “jumps” (a 1-gram) - if a match occurs in those three lookups, that answer is provided.
As opposed to my approach of taking the “strongest match,” the backoff model applies a discount for each recursive step (traditionally 0.4) and then provides a “score” for each potential match. The highest score at the end of the process results in the prediction.
The project was coded in R - as a result I used the Shiny framework and hosted the application on Shinyapps.
##So, what did I learn?
- Stanford has a lot of good research on different ‘smoothing methods’ (eg, Jelinek-Mercer, Witten-Bell, Good Turing, and Kneser-Ney). Descriptions of those methods can be found here: Stanford NLP Smoothing Tutorial. Many academics have worked to tackle this problem in the last 15-20 years, and there is sufficient literature as a basis for developing a model.
- There should be triggers for when to use ‘stopwords’ and when to refrain. Words like ‘to’, ‘of’, and ‘the’ don’t necessarily convey the context of what someone may be trying to communicate - at the same time, they are used frequently enough that they should be included in a predictive model.
- Database structure / type provides a lot of flexibility for fast recall. For example, Redis or MongoDB. This was a great attempt to try different database structures for this project. These are tools that are commonly used in my day job, and I would have loved a bit more time to play around with them. Especially how the use of the database might influence use of memory, speed of access, and the required structure for how the data is stored.
Two things I would have loved to explore are:
- Dynamic improvement of the model. How can user inputs (and the knowledge that a prediction is correct or incorrect) help develop a model that greatly increases in accuracy over time?
- Refining model accuracy. I refrained from constructing a holdout set, as I did not have enough free time to build a separate model. For example, does one separate the holdout Corpora by lines and then choose both the random placement of a word and a random set of preceding words for matching? I would love to learn more about best practices.


{{project.name}}
Description
Purpose: To support the Government's Integrated Basic Cleanup while simuntaneously improving sanitary conditions along the banks of La Plata River and prove a long-term and cost-effective solution for safe disposal of wastewater from the Buenos Aires Metropolitan Area
Expected Results (include): {{getIndicators(project.indicators)}}
IBRD Financing: {{project.ibrdFinancing}}


grub-sparc64-setup - set up a device to boot using GRUB
grub-sparc64-setup [OPTION...] DEVICE
Set up images to boot from DEVICE.
You should not normally run this program directly. Use
grub-install instead.
- -a, --allow-floppy
- make the drive also bootable as floppy (default for fdX devices). May
break on some BIOSes.
- -b, --boot-image=FILE
- use FILE as the boot image [default=boot.img]
- -c, --core-image=FILE
- use FILE as the core image [default=core.img]
- -d, --directory=DIR
- use GRUB files in the directory DIR [default=/boot/grub]
- -f, --force
- install even if problems are detected
- -m, --device-map=FILE
- use FILE as the device map [default=/boot/grub/device.map]
- --no-rs-codes
- Do not apply any reed-solomon codes when embedding core.img. This option
is only available on x86 BIOS targets.
- -s, --skip-fs-probe
- do not probe for filesystems in DEVICE
- -v, --verbose
- print verbose messages.
- -?, --help
- give this help list
- --usage
- give a short usage message
- -V, --version
- print program version
Mandatory or optional arguments to long options are also mandatory
or optional for any corresponding short options.
DEVICE must be an OS device (e.g. /dev/sda).
Report bugs to<EMAIL_ADDRESS>grub-install(8), grub-mkimage(1), grub-mkrescue(1)
The full documentation for grub-sparc64-setup is maintained
as a Texinfo manual. If the info and grub-sparc64-setup
programs are properly installed at your site, the command
- info grub-sparc64-setup
should give you access to the complete manual.


Introduction
After choosing the query “Internet Addiction” for the medical world and “Digital Addiction” for the on-line community, we have been analysing the Google Images results in order to have a more detailed view of the phenomenon. The first 100 images for each query have been considered, downloaded using a script and then put into a mosaic (see the image below).
The following step has been tagging each image according to its nature: metaphorical (pink), report/documentary (orange), statistic/chart (blue), illustration (green), textual (red), book/conference related (indigo). What we noticed is a majority of illustrated images for the query Internet Addiction and a predominance of report and documentary images for the query Digital Addiction. Metaphorical images are about the same for both queries (see the image below).


- Click to open another page in this tab, which should also have Firebug open
- Click to open another page in this tab, which should not have Firebug open
- Click to open another page in a new tab, which should also have Firebug open
- Click to open another page in a new tab, which should not have Firebug open


Planner will help you to create different types of work-items, allows you to assign team members and iterations.


Rule the World
Practical rules & BPM development
a Red Hat JBoss BPM Suite workshop
What's in a Workshop
- Introduction to rules, events & processes
- Starter kits
- JBoss BRMS workshops
- JBoss BPM Suite workshops
INTRO
JBoss BPM Suite & BRMS
JBoss BRMS
Workshops
These workshops teach you how to build an online web shop by designing various
rules, events and a ruleflow. The results will be your very own JBoss BRMS Cool Store.
The following workshops are available for you to build:
JBOSS BPM SUITE
Workshops
These workshops teach you how to build a business process for a travel company automating
their online bookings process and human resource (HR) employee awards program.
The following workshops are available for you to build:


BreezyTalk is a global communication site created at HackCU 2016 for the purpose of allowing ideas to flow freely, despite language or cultural
barriers. The BreezyTalk team developed it with the intent of allowing people from all different places, who speak all different langauges, with
all different opinions, to be able to discuss just about anything.
It was our goal to create a place where people could freeley discuss their opinions
with random people, people with different opinions, or people from different parts of the world; we wanted to create an environment for 100% free speech.
Home


Technological progress swiftly overtakes the evolution of mankind...
Our brain is overloaded by huge volumes of information which demand new levels of performance in the modern world.
All this leads to stress, insomnia, overload, rapid fatigue and daytime sleepiness at work.
We’ve created a molecular compound course which will help you achieve the new level of cognitive skills.
And it’s not science fiction...


CSS and AJAX (Week 9) - Learning Objectives
Assessment Structure
- 2 hours, 10 minutes
- Mixture of multiple choice (30-35), free response (1-3) and VSCode (10-15) problems.
- Free response just requires enough detail to answer the question, 1-3 sentences. As long as you are able to explain the concept and answer all aspects that it asks, you are good.
- Coding problems come in two varieties:
- Some will have specs to run (
npm test
) and check your work against (the AJAX project from Tuesday is good practice)
- Some will have an HTML file with specific instructions for CSS rules to apply to achieve the desired styling, as well as some pictures to compare to (the practice assessment is a good example)
- Standard assessment procedures
- You will be in an individual breakout room
- Use a single monitor and share your screen
- Only have open those resources needed to complete the assessment:
- Zoom
- VSCode
- Browser with AAO and Progress Tracker (to ask questions)
- Approved Resources for this assessment:
- MDN: https://developer.mozilla.org/en-US/docs/Web/CSS
Basic CSS (W09D1) - Learning Objectives
Basic CSS
- How to import other CSS files into your CSS file
- Explain how CSS rules are applied based on their order and specificity
- Describe and apply element, id, and class selectors
- Write “combinators” to create compound selector statements to target specific elements
- Explain and apply pseudo selectors for specific elements in specific states (i.e. :hover)
- Explain and apply the
::before
and ::after
pseudo elements, & Use the content CSS property to define the content of an element
- Style content on an HTML page targeting:
- Type faces, sizes, styles, and weights
- Text transformation and alignment
- Colors expresssed as names, hexadecimal RGB values, and decimal RGB values
- Everything about borders
- Shadows
- Opacity (transparency)
- Covering an element with a background image
- Explain the generic font names “serif”, “sans-serif”, and “monospace” and correctly identify examples of each
- Explain why using Web fonts helps with consistent experience across viewing devices:
- Explain absolute and relative length units in CSS
- Demonstrate how to link a stylesheet into an HTML page
- Be able to calculate the specificity of CSS rules and determine which rule override the properties of another
- Use the
content
CSS property to define the content of an element
AJAX (Asynchronous JavaScript and XML) (W09D2) - Learning Objectives
AJAX
- Explain what an AJAX request is
- Identifying the advantages of using an AJAX request.
- Identify what the acronym AJAX means and how it relates to modern Web programming
- Describe the different steps in an AJAX request/response cycle
- Fully use the fetch API to make dynamic Web pages without refreshing the page
- Identify the different types of media that a media query can target
- Explain how the media features (and prefixed subfeatures) of “aspect ratio”, “height”, “orientation”, and “width” are applied
- Use media queries to change the styles of content in an HTML page to achieve a desired effect
Layout and the Box Model
- Describe how:
- padding and margins work in the box model
- the browser positions a fixed positioned element
- the browser positions a relatively positioned element
- the browser positions absolutely positioned elements with and without a relatively positioned parent element
- the browser positions a static positioned element
- Identify elements rendered with specific padding and margin settings
- Apply padding and margins to HTML elements to achieve a desired layout
- Apply positioning settings to HTML elements (fixed, relative, and absolute) to achieve a desired layout. (Sticky positioning is not supported on some older but still used browsers, so it will not be assessed, but can useful.)
- Identify which HTML elements have a default “inline” display value
- Identify which HTML elements have a default “block” display value
- Describe and use z-index positioning of elements
Flexible Box Layout
- Explain how flexible box layout lays out elements
- Use the
flex
property to specify grow, shrink, and basis values.
- Use the
flex-direction
property to direct the layout of the content
- Use the
flex-wrap
property to affect the wrap of content layout within an element using flexible box layout
- Use
align-self
, justify-content
, and align-items
to change the way that children elements are laid out in a flexible box layout
- Use the
order
property to change the order in which elements will appear in a flexible box layout
Grid Layout
- Explain how grid layout lays out elements
- Use the
grid-template-columns
, grid-template-rows
, and grid-template
properties to specify the layout of the grid using relative and absolute measures
- Use
grid-template-areas
to label areas of a grid and grid-area
to assign an element to the area
- Use
column-gap
, row-gap
, and gap
(previously grid-column-gap
, grid-row-gap
, and grid-gap
) to set the “gutter” areas between elements in a grid layout
- Use
grid-column-start
/grid-column-end
and grid-row-start
/grid-row-end
to create spans across multiple columns and rows with positive integers, negative integers, and in conjunction with the “span” operator
- Explain and use the shorthand versions of
grid-column
and grid-row
to define how an element will span a grid layout
- Use the
order
property to change the default order in which items are laid out
- Explain and use the “fr” unit of measure
- Use
justify-items
, align-items
, justify-content
and align-content
to layout items in each grid area
Interactivity and BEM (W09D4) - Learning Objectives
Interactivity
- Use the “hover” pseudo-class to be able to make changes to elements when the device pointer is over an element
- Describe and use the
transition
property to show animated changes due to class and pseudo-class CSS rule application
- Describe and use the
overflow
, overflow-x
, and overflow-y
properties to effect clipping and scrolling on elements
Block, Element, Modifier (BEM)
- Describe what Block means in BEM.
- Describe what Element means in BEM.
- Describe what Modifier means in BEM.
- Identify CSS class names that follow the BEM principle.


{% extends "albums/base.html" %}{% load i18n sniplates %} {% block eye-catcher-content %}
{% blocktrans %} Here you can configure some album-specific settings. Choose how the sidebar should look in the forum, or how your uploads will be dealt with. {% endblocktrans %}
{% endblock %} {% block content %} {% endblock %}


Chocolate Pizza
POSTED ON 15 DEC 2013 / DESERTS
For the fig-swirl: Melt butter over the medium heat in a saucepan. Add brown sugar and stir to disolve. Halve all of the figs and toss in the saucepan with water and lemon juice. Cook over medium heat, stiring frequently, until you hav a chunky-jammy mixture. Add salt with one or two stirs, set aside and let cool completely.
Ice Cream: In a small pot over medium heat, combine milk, and granulated sugar until sugar is completely disolved and the mil is just barely lukewarm. whisk in the egg yolks. Set mixture in the fridge and wait until the fig mixture is cooled.
Using and ice cream machine, pour liquids into the frozen basin and process according to manufacturerer instructions, i.e., let spin and thicken for 20 minutes before adding mascarpone, fig jam mixture, and the nuts. Continue to process for +/- 10 minutes. Pour semi-frozen mixture into a pyrex dish or glass tupperware. Freeze for at least two hours before serving.
Delicious © 2013 - All Rights Reserved
Proudly published with Ghost


--- layout: data_model title: NetflowV9PacketHeaderType this_version: 1.0 ---
Header fields defined for Netflow v9. Note that common elements are included in the Network_Flow_Label. http://www.ietf.org/rfc/rfc3954.txt
| Field Name | Type | Description |
|---|---|---|
| Version0..1 | HexBinaryObjectPropertyType |
Specifies the version of flow record format exported in this packet. The value of this field is 9 for the Netflow v9. |
| Record_Count0..1 | IntegerObjectPropertyType |
Specifies the total number of records in the Export Packet, which is the sum of Options FlowSet records, Template FlowSet records, and Data FlowSet records. http://www.ietf.org/rfc/rfc3954.txt |
| Sys_Up_Time0..1 | IntegerObjectPropertyType |
Specifies the time in milliseconds since this device was first booted. |
| Unix_Secs0..1 | IntegerObjectPropertyType |
Specifies the time in seconds since 0000 UTC 1970 at which the Export Packet leaves the Exporter. |
| Sequence_Number0..1 | IntegerObjectPropertyType |
Incremental sequence counter of all Export Packets sent from the current Observation Domain by the Exporter. This value MUST be cumulative, and SHOULD be used by the Collector toidentify whether any Export Packets have been missed. http://www.ietf.org/rfc/rfc3954.txt |
| Source_ID0..1 | HexBinaryObjectPropertyType |
Specifies a 32-bit value that identifies the Exporter Observation Domain. NetFlow Collectors SHOULD use the combination of the source IP address and the Source ID field to separate different export streams originating from the same Exporter. |


{% extends 'marketplace/base.html' %} {% block pagecontents %}
Please enter your old password and your new password twice so we can verify you typed it in correctly.


A Yume Films Production
- Starring
- Lawrence Kao
- Lauren K. Montgomery
- Title
- "I Hate You"
- Also Starring
- Patrick Joseph Rieger
- Sharon Omi
- Tyne Gaudielle
- Original Score by
- Evan Michael Brown
- Edited by
- Brad Kageno
- Director of Photography
- Bill Otto
- Produced by
- Michelle Opitz
- Pyung Kim
- Brad Kageno
- Screenplay by
- Pyung Kim & Brad Kageno
- Directed by
- Brad Kageno


About
Projects
Contact
Michelle Nguyen
Third-year undergraduate student at UC San Diego, pursuing a degree in Computer Science.
projects
Project 01
Project 01 Description Here.
Project 02
Project 02 Description Here.
Project 03
Project 03 Description Here.
Project 04
Project 04 Description Here.
Contact
email: mqn008@gmail.com


Risks and Solutions
There are multiple security issues. One security issue is only having one person be responsible for being super admin, having access to domain name, hosting account, and CMS account. Another security issue is giving the staff ftp access when the don't need it considering they already have accounts with the same access. Another security issue is that the SSL certificate could only be for the domain and not subdomains. Another issue is comments don't have to be processed first would could allow people to post malicious content.
- Too Much Responsibility
- Split up responsibility among multiple people.
- Don't give all the responsibility to one person to begin with.
- FTP Access
- Revoke FTP access.
- Don't give them FTP access to begin with.
- SSL Coverage
- Get multiple SSL for subdomains or wildcard SSL for domain.
- Get multiple SSl for subdomains or wildcard SSL for domain to being with.
- Malicious Comments
- Remove malcious comments.
- Process comments before actually posting them.
- Bot Account Detection
- Remove all account within a certain time frame to get or based on ip address to remove bot accounts
- Add bot detection to the user accounts to prevent bots from being able to add new accounts.
- Public Email
- Remove email from public view, setup another another email
- Set up the contact form such that it tells the server to send the to the public email so that the contact email is never public.
- Reliance On One Person
- Allow multiple people to be super admins
- Don't give only person super admin.
- 3rd Party Theme Malware
- Check with multiple sources if the 3rd party theme can be trusted.
- Don't use a 3rd party theme, or use a trusted theme instead.
- Revoke Developers Access After Completion
- Immediately revoke any permissions the developer has.
- After the project is completed, remove any permissions the developer has to the website.
- Revoke Access Immediately From Ex-Employees
- Immediately revoke any permissions from ex-employee.
- Before firing them, revoke any permissions from the ex-employee to prevent damage from them.