Luvit 2.5.6 Documentation
Table of Contents
- About this Documentation
- Synopsis
- Buffer
- Child Process
- Codec
- Core
- Datagram | UDP
- dgram.createSocket(type, callback)
- Class: dgram.Socket
- Socket:recvStart()
- Socket:recvStop()
- Socket:setTimeout(msecs, callback)
- Socket:send(data, port, host, callback)
- Socket:bind(port, host, options)
- Socket:close(callback)
- Socket:address()
- Socket:setBroadcast(status)
- Socket:setMembership(multicastAddress[, multicastInterface], op)
- Socket:addMembership(multicastAddress[, interfaceAddress])
- Socket:dropMembership(multicastAddress[, interfaceAddress])
- Socket:setTTL(ttl)
- DNS
- dns.query(servers, name, dnsclass, qtype, callback)
- dns.resolve4(name, callback)
- dns.resolve6(name, callback)
- dns.resolveSrv(name, callback)
- dns.resolveMx(name, callback)
- dns.resolveNs(name, callback)
- dns.resolveTxt(name, callback)
- dns.setServers(servers)
- dns.setTimeout(timeout)
- dns.setDefaultTimeout()
- dns.setDefaultServers()
- dns.loadResolver(options)
- FS
- fs.close(fileDescriptor, callback)
- fs.closeSync(fd)
- fs.open(path[, flags, mode], callback)
- fs.openSync(path, flags[, mode])
- fs.read(fd, [, size, offset], callback)
- fs.readSync(fd[, size, offset])
- fs.unlink(path, callback)
- fs.unlinkSync(path)
- fs.write(fd[, offset], data, callback)
- fs.writeSync(fs[, offset,] data)
- fs.mkdir(path[, mode], callback)
- fs.mkdirSync(path, mode)
- fs.mkdtemp(template, callback)
- fs.mkdtempSync(template)
- fs.rmdir(path, callback)
- fs.rmdirSync(path)
- fs.readdir(path, callback)
- fs.readdirSync(path)
- fs.scandir(path, callback)
- fs.scandirSync(path)
- fs.exists(path, callback)
- fs.existsSync(path)
- fs.stat(path, callback)
- fs.statSync(path)
- fs.fstat(fd, callback)
- fs.fstatSync(fd)
- fs.lstat(path, callback)
- fs.lstatSync(path)
- fs.rename(path, newPath, callback)
- fs.renameSync(path, newPath)
- fs.fsync(fd, callback)
- fs.fsyncSync(fd)
- fs.fdatasync(fd, callback)
- fs.fdatasyncSync(fd)
- fs.ftruncate(fname[, offset], callback)
- fs.ftruncateSync(fname[, offset])
- fs.sendFile(outFd, inFd, offset, length, callback)
- fs.sendfileSync(outFd, inFd, offset, length)
- fs.access(path[, flags], callback)
- fs.chmod(path, mode, callback)
- fs.chmodSync(fd, mode)
- fs.fchmod(fd, mode, callback)
- fs.fchmodSync(fd, mode0
- fs.utime(path, atime, mtime, callback)
- fs.utimeSync(path, atime, mtime)
- fs.futime(fd, atime, mtime, callback)
- fs.futimeSync(fd, atime, mtime, callback)
- fs.link(path, newPath, callback)
- fs.linkSync(path, newPath)
- fs.symlink(path, newPath[, option], callback)
- fs.symlinkSync(path, newPath[, options])
- fs.readlink(path, callback)
- fs.readlinkSync(path)
- fs.chown(path, uid, gid, callback)
- fs.chownSync(path, uid, gid)
- fs.fchown(fd, uid, gid, callback)
- fs.fchownSync(fd, uid, gid)
- fs.readFile(path, callback)
- fs.readFileSync(path)
- fs.writeFile(path, data, callback)
- fs.writeFileSync(path, data)
- fs.appendFile(filename, data[, callback])
- fs.appendFileSync(path, data)
- Class: fs.WriteStream
- fs.createWriteStream(path, options)
- Class: fs.WriteStreamSync
- Class: fs.ReadStream
- fs.createReadStream(path, options)
- Helpful
- HTTP Codec
- HTTP
- HTTPS
- JSON
- Light operating system helper
- Net
- Path
- path.getRoot([filePath])
- path.getSep()
- path.pathEquals(a, b)
- path.normalize(filepath)
- path.join(...)
- path.resolve([from ...], to)
- path.relative(from, to)
- path.dirname(filepath)
- path.basename(filepath, expected_ext)
- path.extname(filepath)
- path.isAbsolute(filepath)
- path.isUNC(filepath)
- path.isDriveRelative(filepath)
- path.normalizeSeparators(filepath)
- Pretty print
- prettyPrint.loadColors([index])
- Value: prettyPrint.theme
- prettyPrint.print(...)
- prettyPrint.prettyPrint(...)
- prettyPrint.dump(value, recurse, nocolor)
- prettyPrint.color(colorName)
- prettyPrint.colorize(colorName, string, resetName)
- prettyPrint.strip(str)
- Userdata Value: prettyPrint.stdin
- Userdata Value: prettyPrint.stdout
- Userdata Value: prettyPrint.stderr
- Process
- Query String
- Readline
- Class: readline.History
- Class readline.Editor
- Editor:refreshLine()
- Editor:insertAbove(line)
- Editor:insert(line)
- Editor:moveLeft()
- Editor:getHistory(delta)
- Editor:backspace()
- Editor:delete()
- Editor:swap()
- Editor:deleteLine()
- Editor:deleteEnd()
- Editor:moveHome()
- Editor:moveEnd()
- Editor:deleteWord()
- Editor:jumpLeft()
- Editor:jumpRight()
- Editor:clearScreen()
- Editor:beep()
- Editor:complete()
- Editor:onKey(key)
- Editor:readLine(prompt, callback)
- readline.readLine(prompt[, options], callback)
- Repl
- Require
- Stream
- Thread
- Timer
- URL
- Utils
About this Documentation#
The goal of this documentation is to comprehensively explain the Luvit API, both from a reference as well as a conceptual point of view. Each section describes a built-in module or high-level concept.
Where appropriate, property types, method arguments, and the arguments provided to event handlers are detailed in a list underneath the topic heading.
Every .html
document has a corresponding .json
document presenting
the same information in a structured manner. This feature is
experimental, and added for the benefit of IDEs and other utilities that
wish to do programmatic things with the documentation.
Every .html
and .json
file is generated based on the corresponding
.markdown
file in the doc/api/
folder in luvit's source tree. The
documentation is generated using the tools/doc/generate.js
program.
The HTML template is located at doc/template.html
.
There's also a lot of examples in this repo that may be helpful.
Synopsis#
The luvit CLI tool can be used as a scripting platform just like node. This can be used to run lua scripts as standalone servers, clients, or other tools.
This simple web server written in Luvit responds with Hello World for every request.
local http = require('http')
http.createServer(function (req, res)
local body = "Hello world\n"
res:setHeader("Content-Type", "text/plain")
res:setHeader("Content-Length", #body)
res:finish(body)
end):listen(1337, '<IP_ADDRESS>')
print('Server running at http://<IP_ADDRESS>:1337/')
To run the server, put the code into a file called server.lua
and execute
it with using luvit
> luvit server.lua
Server running at http://<IP_ADDRESS>:1337/
This script is a standalone HTTP server, there is no need for Apache or Nginx to act as host. All of the examples in the documentation can be run similarly.
Buffer#
A mutable buffer using ffi for luvit.
buffer = require('buffer')
Class: buffer.Buffer#
Main buffer class
Buffer:inspect()#
Inspect a buffer. Returns a string of hexes like <Buffer Hexes>
Buffer:readUInt8(offset)#
Reads unsigned 8 bit int at offset
Buffer:readInt8(offset)#
Read 8 bit int at offset
Buffer:readUInt16LE(offset)#
Read a unsigned 16 bit integer in little endian at offset
Buffer:readUInt16BE(offset)#
Read a unsigned 16 bit integer in big endian at offset
Buffer:readInt16LE(offset)#
Read a signed 16 bit integer in little endian at offset
Buffer:readInt16BE(offset)#
Read a signed 16 bit integer in big endian at offset
Buffer:readUInt32LE(offset)#
Read a unsigned 32 bit integer in little endian at offset
Buffer:readInt32LE(offset)#
Read a signed 32 bit integer in little endian at offset
Buffer:readInt32BE(offset)#
Read a signed 32 bit integer in big endian at offset
Buffer:toString([i, j])#
Stringify the buffer from the ith to the jth position, or the whole thing if i and j arent specified
Child Process#
It is possible to stream data through a child's stdin, stdout, and stderr in a fully non-blocking way.
childprocess.spawn(command, args, options)#
Spawns a command line process.
Since the data coming in is a stream, you may want to pass it through a filter like the luvit line emitter package to get lines instead.
function example()
local LineEmitter = require('line-emitter').LineEmitter
local childProcess = require('childprocess')
local function run(command, args, options)
local stdout, stderr = LineEmitter:new(), LineEmitter:new()
local child = childProcess.spawn(command, args, options)
child.stdout:pipe(stdout)
child.stderr:pipe(stderr)
return child, stdout, stderr
end
local child = run('ls', {'-hal'}, {})
child:on('data', print)
end
example()
total 2
drwxr-xr-x 31 root wheel 1.1K Aug 21 16:39 .
drwxr-xr-x 31 root wheel 1.1K Aug 21 16:39 ..
Options can have the following k-v pairs:
detached = [Boolean]
stdio = [Array]
cwd = [String]
uid = [Number]
gid = [Number]
childprocess.exec(command[, options], callback)#
Executes the supplied command and returns data returned in the callback.
The callback can be either a function or a thread for coroutine style code.
The command can have arguments e.g. childprocess.exec('ls -a', print)
.
Options can have the following k-v pairs:
timeout = [Number]
maxBuffer = [Integer, default: 4 * 1024]
signal = [String, default: 'SIGTERM']
shell = [String, default: 'cmd.exe' or '/bin/sh']
Additionally since this function delegates to Spawn, all spawn option k-vs are also valid.
childprocess.execFile(file[, args, options, callback])#
Similiar to exec but the arguments for the command/file must be supplied as a string to the second parameter. Also, callback is optional as well here.
Codec#
Utilities for working with luvit streams and codecs.
local codec = require('codec')
codec.wrapEmitter(emitter)#
Wraps an emitter with coroutines. Returns read and write functions.
codec.wrapStream(socket)#
Given a raw uv_stream_t userdara, return coro-friendly read/write functions.
codec.chain(...)#
Allows one to chain coroutines
Core#
Core object model for luvit using simple prototypes and inheritance. We support single inheritance for classes.
core.instanceof(obj, class)#
Given an object which inherits from a class, and a class, returns whether the object is an instance of that class.
> em = core.Emitter:new()
> core.instanceof(em, core.Emitter)
true
Class: core.Object#
The base object class. It provides simple prototypal inheritance and inheritable constructors. All other objects inherit from this.
Object:create()#
Creates a new instance of the base object
Object:new(...)#
Creates a new instance and calls obj:initialize(...)
if it exists.
local Rectangle = Object:extend()
function Rectangle:initialize(w, h)
self.w = w
self.h = h
end
function Rectangle:getArea()
return self.w * self.h
end
local rect = Rectangle:new(3, 4)
p(rect:getArea())
Object:extend()#
Creates a new sub-class.
local Square = Rectangle:extend()
function Square:initialize(w)
self.w = w
self.h = h
end
Class: core.Emitter#
This class can be used directly whenever an event emitter is needed.
local emitter = Emitter:new()
emitter:on('foo', p)
emitter:emit('foo', 1, 2, 3)
Also it can easily be sub-classed.
local Custom = Emitter:extend()
local c = Custom:new()
c:on('bar', onBar)
Unlike EventEmitter in node.js, Emitter class doesn't auto binds self
reference. This means, if a callback handler is expecting a self
reference,
utils.bind() should be used, and the callback handler should have a self
at
the beginning its parameter list.
function some_func(self, a, b, c) end
emitter:on('end', utils.bind(some_func, emitter))
emitter:emit('end', 'a', 'b', 'c')
Emitter:on(name, callback)#
Adds an event listener (callback
) for the named event name
.
em = Emitter:new()
em:on('data', function(data) print(data) end)
Emitter:once(name, callback)#
Same as Emitter:on
except it de-registers itself after the first event.
Emitter:listenerCount(name)#
Returns the count of the listeners bound to an event with the name name
Emitter:emit(name, ...)#
Emit a named event to all listeners with optional data arguments
> em = Emitter:new()
> em:on('data', function(data) print(data) end)
> em:emit('data', 'foo')
'foo'
Emitter:removeListener(name, callback)#
Removes a listener so it no longer catches events
> em = Emitter:new()
> em:on('data', function(data) print(data) end)
> em:emit('data', 'foo')
foo
> em:removeListener('data', function() em:emit('data', 'foo') end)
> -- nothing printed
Emitter:removeAllListeners(name)#
Removes all listeners. Name is optional and if supplied will make it act like removeListener
Emitter:listeners(name)#
Returns listeners for the event with name name
Emitter:wrap(name)#
Utility that binds the named method self[name]
for use as a callback. The
first argument (err
) is re-routed to the "error" event instead.
local Joystick = Emitter:extend()
function Joystick:initialize(device)
self:wrap("onOpen")
FS.open(device, self.onOpen)
end
function Joystick:onOpen(fd)
-- and so forth
end
Emitter:propagate(eventName, target)#
Propagate the event to another emitter.
Class: core.Error#
This is for code that wants structured error messages.
Error:initialize(message)#
How to handle strings
Datagram | UDP#
Node-style udp module for luvit
local dgram = require('dgram')
dgram.createSocket(type, callback)#
Creates a new datagram socket Callback is triggered every time the 'message' event gets emitted
Class: dgram.Socket#
Socket extends Emitter and inherits all the events thereof. The dgram Socket class encapsulates the datagram functionality. It should be created via dgram.createSocket(...)
Socket:recvStart()#
Start receiving on socket
Socket:recvStop()#
Stop listening on socket
Socket:setTimeout(msecs, callback)#
Sets a socket timeout
Socket:send(data, port, host, callback)#
Sends data down the udp socket
Socket:bind(port, host, options)#
Starts listening on the specified port and host.
Socket:close(callback)#
Closes a socket instance and fires the callback after cleanup
Socket:address()#
Returns an object containing the address information for a socket. For UDP sockets, this object will contain address , family and port.
Socket:setBroadcast(status)#
- status - Boolean Sets or clears the SO_BROADCAST socket option. When this option is set, UDP packets may be sent to a local interface's broadcast address.
Socket:setMembership(multicastAddress[, multicastInterface], op)#
Sets membership status for a multicast group. Op can be 'join' or 'leave'.
Socket:addMembership(multicastAddress[, interfaceAddress])#
- multicastAddress String
- multicastInterface String, Optional Tells the kernel to join a multicast group with IP_ADD_MEMBERSHIP socket option.
If multicastInterface is not specified, the OS will try to add membership to all valid interfaces.
Socket:dropMembership(multicastAddress[, interfaceAddress])#
- multicastAddress String
- multicastInterface String, Optional Opposite of addMembership - tells the kernel to leave a multicast group with IP_DROP_MEMBERSHIP socket option. This is automatically called by the kernel when the socket is closed or process terminates, so most apps will never need to call this.
If multicastInterface is not specified, the OS will try to drop membership to all valid interfaces.
Socket:setTTL(ttl)#
- ttl Integer Sets the IP_TTL socket option. TTL stands for "Time to Live," but in this context it specifies the number of IP hops that a packet is allowed to go through. Each router or gateway that forwards a packet decrements the TTL. If the TTL is decremented to 0 by a router, it will not be forwarded. Changing TTL values is typically done for network probes or when multicasting.
The argument to setTTL() is a number of hops between 1 and 255. The default on most systems is 64.
DNS#
Node-style dns module for luvit
local dns = require('dns')
dns.query(servers, name, dnsclass, qtype, callback)#
dns.resolve4(name, callback)#
dns.resolve6(name, callback)#
dns.resolveSrv(name, callback)#
dns.resolveMx(name, callback)#
dns.resolveNs(name, callback)#
dns.resolveTxt(name, callback)#
dns.setServers(servers)#
dns.setTimeout(timeout)#
dns.setDefaultTimeout()#
Sets the timeout to the default timeout of 2 seconds
dns.setDefaultServers()#
Sets the list of servers to the default list
{
{
['host'] = '<IP_ADDRESS>',
['port'] = 53,
['tcp'] = false
},
{
['host'] = '<IP_ADDRESS>',
['port'] = 53,
['tcp'] = false
},
}
dns.loadResolver(options)#
Options is a table with key file. E,g
{file = '/etc/resolv.conf'}
FS#
Node-style filesystem module for luvit
local fs = require('fs')
Uses lib uv under the hood. A lot of these fuctions are very similiar to linux system calls and can be understood by reading the man pages of linux command line commnds with the same names.
The asynchronous form always takes a completion callback as its last argument. The arguments passed to the completion callback depend on the method, but the first argument is always reserved for an exception. If the operation was completed successfully, then the first argument will be null or undefined.
Sync versions of functions usually return true if they succeed or an error if they dont and no data is expected. Otherwise they return the data on success.
fs.close(fileDescriptor, callback)#
Close a file. No arguments other than a possible exception are given to the completion callback.
fs.closeSync(fd)#
Synchronous file close
fs.open(path[, flags, mode], callback)#
Asynchronous file open. flags
can be:
'r'
- Open file for reading. An exception occurs if the file does not exist.'r+'
- Open file for reading and writing. An exception occurs if the file does not exist.'rs'
- Open file for reading in synchronous mode. Instructs the operating system to bypass the local file system cache.This is primarily useful for opening files on NFS mounts as it allows you to skip the potentially stale local cache. It has a very real impact on I/O performance so don't use this flag unless you need it.
Note that this doesn't turn
fs.open()
into a synchronous blocking call. If that's what you want then you should be usingfs.openSync()
'rs+'
- Open file for reading and writing, telling the OS to open it synchronously. See notes for'rs'
about using this with caution.'w'
- Open file for writing. The file is created (if it does not exist) or truncated (if it exists).'wx'
- Like'w'
but fails ifpath
exists.'w+'
- Open file for reading and writing. The file is created (if it does not exist) or truncated (if it exists).'wx+'
- Like'w+'
but fails ifpath
exists.'a'
- Open file for appending. The file is created if it does not exist.'ax'
- Like'a'
but fails ifpath
exists.'a+'
- Open file for reading and appending. The file is created if it does not exist.'ax+'
- Like'a+'
but fails ifpath
exists.
mode
sets the file mode (permission and sticky bits), but only if the file was
created. It defaults to 0666
, readable and writeable.
The callback gets two arguments (err, fd)
.
The exclusive flag 'x'
(O_EXCL
flag in open(2)) ensures that path
is newly
created. On POSIX systems, path
is considered to exist even if it is a symlink
to a non-existent file. The exclusive flag may or may not work with network file
systems.
On Linux, positional writes don't work when the file is opened in append mode. The kernel ignores the position argument and always appends the data to the end of the file.
fs.openSync(path, flags[, mode])#
Synchronous version of fs.open()
. Returns an integer representing the file
descriptor.
fs.read(fd, [, size, offset], callback)#
Read data from the file specified by fd
.
offset
is the offset in the buffer to start reading at.
size
is an integer specifying the number of bytes to read. Defaults to 4096.
The callback is given the three arguments, (err, bytesRead, buffer)
.
fs.readSync(fd[, size, offset])#
Synchronous file read
fs.unlink(path, callback)#
Asynchronous delete file. No arguments other than a possible exception are given to the completion callback.
fs.unlinkSync(path)#
Synchronous unlink. Returns undefined
.
fs.write(fd[, offset], data, callback)#
Writes a data in string data
to a file fd
calling a function callback
with
err or nil when done. offset
is the offset in the buffer to start writing at.
fs.writeSync(fs[, offset,] data)#
Synchronous version of the above write function
fs.mkdir(path[, mode], callback)#
Creates a directory with name path
and returns a callback with err or nil.
Mode is the permissions set on the directory, defaults to octal 0777
fs.mkdirSync(path, mode)#
Sync version of mkdir.
fs.mkdtemp(template, callback)#
Makes a directory from a template object
fs.mkdtempSync(template)#
Sync version of mkdtemp
fs.rmdir(path, callback)#
Removes a directory
fs.rmdirSync(path)#
Sync version of rmdir
fs.readdir(path, callback)#
Reads a directory, returning files and folders in it in the callback. First arg of cb is nil or err This function is not recursive. Use the luvit-walk package for a recursive variant
fs.readdirSync(path)#
Sync version of readdir
fs.scandir(path, callback)#
Similiar to readdir but the callback here gets a function instead of a table containing the list of files. Every time this function is invoked it returns the name of the file/dir and the type of the file/dir (either file or directory).
fs.scandirSync(path)#
Simply returns the iterator function retrieved in the async scandirs callback
fs.exists(path, callback)#
Checks if a file exists. Callback is called with true or false and an error or nil in the first and second args respectively.
fs.existsSync(path)#
Sync version of exists. Returns the args the callback gets in the async version
fs.stat(path, callback)#
> fs.stat('/', function(err, stat) print(err) statData = stat end)
uv_fs_t: 0x00ada5c0
> nil
statData
{ mtime = { nsec = 0, sec =<PHONE_NUMBER> },
atime = { nsec = 0, sec =<PHONE_NUMBER> }, ino = 2, nlink = 31, uid = 0,
blksize = 4096, ctime = { nsec = 0, sec =<PHONE_NUMBER> }, rdev = 0,
size = 1122, mode = 16877, type = 'directory',
birthtime = { nsec = 0, sec =<PHONE_NUMBER> }, flags = 0, gid = 0, gen = 0,
dev = 16777220, blocks = 0 }
fs.statSync(path)#
Sync version of fs.stat. Returns either an error or the stat object
fs.fstat(fd, callback)#
Similiar to stat but expects a file descriptor as retrieved from open or read instead of a path
fs.fstatSync(fd)#
Sync fstat
fs.lstat(path, callback)#
lstat() is identical to stat(), except that if path is a symbolic link, then the link itself is stat-ed, not the file that it refers to.
fs.lstatSync(path)#
Sync lstat
fs.rename(path, newPath, callback)#
Renames a file or directory located at the given path to the new path. The callback is called with either the error or true
fs.renameSync(path, newPath)#
Sync version of rename
fs.fsync(fd, callback)#
Async fsync. No arguments other than a possible exception are given to the completion callback.
fsync() transfers ("flushes") all modified in-core data of (i.e., modified buffer cache pages for) the file referred to by the file descriptor fd to the disk device (or other permanent storage device) so that all changed information can be retrieved even after the system crashed or was rebooted. This includes writing through or flushing a disk cache if present. The call blocks until the device reports that the transfer has completed. It also flushes metadata information associated with the file (see stat(2)).
Calling fsync() does not necessarily ensure that the entry in the directory containing the file has also reached disk. For that an explicit fsync() on a file descriptor for the directory is also needed.
fs.fsyncSync(fd)#
Sync version of fsync
fs.fdatasync(fd, callback)#
fdatasync() is similar to fsync(), but does not flush modified metadata unless that metadata is needed in order to allow a subsequent data retrieval to be correctly handled. For example, changes to st_atime or st_mtime (respectively, time of last access and time of last modification; see stat(2)) do not require flushing because they are not necessary for a subsequent data read to be handled correctly. On the other hand, a change to the file size (st_size, as made by say ftruncate(2)), would require a metadata flush.
The aim of fdatasync() is to reduce disk activity for applications that do not require all metadata to be synchronized with the disk.
fs.fdatasyncSync(fd)#
Sync fdatasync
fs.ftruncate(fname[, offset], callback)#
Shrink or extend the size of each FILE to the specified size
A FILE argument that does not exist is created.
If a FILE is larger than the specified size, the extra data is lost. If a FILE is shorter, it is extended and the extended part (hole) reads as zero bytes.
fs.ftruncateSync(fname[, offset])#
Sync truncate
fs.sendFile(outFd, inFd, offset, length, callback)#
sendfile() copies data between one file descriptor and another. Because this copying is done within the kernel, sendfile() is more efficient than the combination of read(2) and write(2), which would require transferring data to and from user space.
fs.sendfileSync(outFd, inFd, offset, length)#
Sync sendfile
fs.access(path[, flags], callback)#
Tests a user's permissions for the file specified by path. mode is an optional integer that specifies the accessibility checks to be performed. The following constants define the possible values of mode. It is possible to create a mask consisting of the bitwise OR of two or more values.
- fs.F_OK - File is visible to the calling process. This is useful for determining if a file exists, but says nothing about rwx permissions. Default if no mode is specified.
- fs.R_OK - File can be read by the calling process.
- fs.W_OK - File can be written by the calling process.
- fs.X_OK - File can be executed by the calling process. This has no effect on Windows (will behave like fs.F_OK).
- The final argument, callback, is a callback function that is invoked with a possible error argument. If any of the accessibility checks fail, the error argument will be populated. The following example checks if the file /etc/passwd can be read and written by the current process.
fs.chmod(path, mode, callback)#
Asynchronous fchmod(2). No arguments other than a possible exception are given to the completion callback.
fs.chmodSync(fd, mode)#
Sync chmod.
fs.fchmod(fd, mode, callback)#
Asynchronous fchmod(2). No arguments other than a possible exception are given to the completion callback.
fs.fchmodSync(fd, mode0#
Sync fchmod
fs.utime(path, atime, mtime, callback)#
Async utime. Chages file last access and modification times
fs.utimeSync(path, atime, mtime)#
Sync utime
fs.futime(fd, atime, mtime, callback)#
Changes file timestamps
fs.futimeSync(fd, atime, mtime, callback)#
Sync futime
fs.link(path, newPath, callback)#
link() creates a new link (also known as a hard link) to an existing file. If newpath exists it will not be overwritten.
This new name may be used exactly as the old one for any operation; both names refer to the same file (and so have the same permissions and ownership) and it is impossible to tell which name was the "original".
fs.linkSync(path, newPath)#
Sync link
fs.symlink(path, newPath[, option], callback)#
Creates soft link instead of a hard link as in link
fs.symlinkSync(path, newPath[, options])#
Sync symlink
fs.readlink(path, callback)#
Asynchronous readlink(2). The callback gets two arguments (err, linkString). Prints value of a symbolic link or canonical file name
fs.readlinkSync(path)#
Sync readlink
fs.chown(path, uid, gid, callback)#
Async chown. Changes ownership of a file
fs.chownSync(path, uid, gid)#
Sync chown
fs.fchown(fd, uid, gid, callback)#
Like chown but works with file descriptors
fs.fchownSync(fd, uid, gid)#
Sync fchown
fs.readFile(path, callback)#
Reads a file to a string buffer which is returned as the second argument in the callback. Works with virtual filesystems as well
fs.readFileSync(path)#
Sync readFile
fs.writeFile(path, data, callback)#
Writes a file.
fs.writeFileSync(path, data)#
Sync writeFile
fs.appendFile(filename, data[, callback])#
Appends data to a file
fs.appendFileSync(path, data)#
Sync version of append file.
Class: fs.WriteStream#
Creates a writeable stream You can extend the following class methods in your extended instance.
e.g.
local path, cb, chunk = 'valid/path', validFunc, 'validString'
local WritableChild = fs.WriteStream:extend()
function WritableChild:_write(data, callback)
print('Wrote: '..data)
callback()
end
local writable = WritableChild:new(path, cb)
writable:on('open', function() print('file opened')
writable:write(chunk) -- optional callback
writable:close()
WriteStream:initialize(path, options)#
You can set the path to the file and options here. Options is a table with the following key-value pairs
fd - File descriptor
flags - 'w' for write. See fs.open for other possible flags
mode - file mode to write to. Defaults to 438 which is equivalent to octal 0666
start - Start position
WriteStream:open(callback)#
Callback to fire when the write stream is opened. This callback gets no arguments. An open event is also emitted with the file descriptor when the file is opened
WriteStream:_write(data, callback)#
Internal write utility. Bind the declared _write
in your inherited class to be called when the file is opened
WriteStream:close()#
Closes or destroys the write stream. Calls self:destroy()
WriteStream:destroy()#
Closes the write stream
fs.createWriteStream(path, options)#
Creates and returns a new write stream, that is an instance of the aforementioned WriteStream class with the given path and options
Class: fs.WriteStreamSync#
A synchronous version of the WriteStream class. Extends WriteStream
Class: fs.ReadStream#
A parent class for creating readable streams from files. You should extend the following class methods in your extended instance
ReadStream:initialize(path, options)#
Initializer for the ReadStream class. Options table key values: fd - file descriptor mode path offset chunkSize length
ReadStream:open(callback)#
Callback to fire when the read stream is opened. This callback gets no arguments. An open event is also emitted with the file descriptor when the file is opened
ReadStream:_read(n)#
Reads a file, n chunk bytes at a time. You can set the n in the init options
ReadStream:close()#
Closes the readstream.
ReadStream:destroy(err)#
Destroys the readstream. Gets called by close. Emits 'error' with err if theres an error.
fs.createReadStream(path, options)#
Function which creates and returns a new read stream instance with the set options and path
Helpful#
Levenshtein distance for property-not-found hints in modules.
string.levenshtein(str1, str2)#
Adds a levenshtein distance function to luas native string library. The string library in luvit gets auto populated
with luas string library and inbuilt methods. You can use it by simply going
string.levenshtein(str1, str2)
. No require statements needed.
HTTP Codec#
A simple pair of functions for converting between hex and raw strings.local httpCodec = require('http-codec')
httpCodec.encoder()#
Returns a function. See the source at http.lua:ServerResponse for an example.
httpCodec.decoder()#
Returns a function which takes one argument. See the source at http.lua for an example.
HTTP#
Node-style http client and server module for luvit
local http = require('http')
Value: http.headerMeta#
Provide a nice case insensitive interface to headers. Pulled from https://github.com/creationix/weblit/blob/master/libs/weblit-app.lua
Class: http.IncomingMessage#
Incoming message class, extends net.Socket.
IncomingMessage:initialize(head, socket)#
Head is headers. Headers declared in this child class, i.e. options expected in the head table:
- version - httpVersion
// Server specific
- method
- path - url
// Client specific
- code - statusCode
- reason - statusMessage
IncomingMessage:_read()#
Resumes self.socket
Class: http.ServerResponse#
ServerResponse:setHeader(name, value)#
ServerResponse:getHeader(name)#
ServerResponse:removeHeader(name)#
ServerResponse:flushHeaders()#
ServerResponse:write(chunk, callback)#
ServerResponse:finish(chunk)#
ServerResponse:writeHead(newStatusCode, newHeaders)#
http.handleConnections(socket, onRequest)#
http.createServer(onRequest)#
Class: http.ClientRequest#
ClientRequest.getDefaultUserAgent()#
ClientRequest:flushHeaders()#
ClientRequest:write(data, cb)#
ClientRequest:done(data, cb)#
ClientRequest:setTimeout(msecs, callback)#
http.parseUrl(url)#
http.request(options, onResponse)#
http.get(options, onResponse)#
HTTPS#
Node-style https client and server module for luvit. HTTPS is the HTTP protocol over TLS/SSL.
local https = require('https')
https.createServer(options, onRequest)#
https.request(options, callback)#
https.get(options, onResponse)#
JSON#
local json = require('json')
Alternatively you can use lpeg like so:
local json = require('json').use_lpeg()
json.stringify(value [, state])#
Serialize a Lua table into a JSON string.
local tbl = { username = "Groucho" }
local json_str = json.stringify( tbl )
json.encode(value[, state])#
Alias for json.stringify
json.parse(str [, pos][, nullval][, ...])#
Deserialize a JSON string into a Lua table.
local json_str = '{ "username": "Groucho" }'
local tbl = json.parse( json_str )
json.decode(str[, pos, nullval, ...])#
Alias for json.parse
Value: json.null#
A null property type for JSON encoding.
local tbl = { user = "Jane", is_working = json.null }
local json_str = json.stringify( tbl )
json.quotestring(value)#
Quotes a string. Based on the regexp "escapable" in https://github.com/douglascrockford/JSON-js
Light operating system helper#
Also known as los. Its' a tiny helper to get os name in luvit.
local los = require('los')
los.type()#
Returns either Windows, Linux, OSX, BSD, POSIX or Other depending on the host operating system.
Net#
Node-style net client and server module for luvit
local net = require('net')
Class: Socket#
Socket:initialize(options)#
The Socket initializer called when an instance is generated with Socket:new().
You can pass in a number to options and the module will try to guess if a handler of type TCP or PIPE is required, or specify a handler
like so: Socket:new({handle = 'Valid handle type'})
Socket:bind(ip, port)#
Socket:address()#
Socket:shutdown(callback)#
Socket:nodelay(enable)#
Socket:keepalive(enable, delay)#
Socket:pause()#
Socket:resume()#
Socket:connect(...)#
Works as either
local options = {
host = ...,
port = ...
}
connect(options, [cb])
or
connect(port, [host, cb])
Socket:destroy(exception[, callback])#
Socket:listen([queueSize])#
Default queueSize is 128
Socket:getsockname()#
Class: Server#
Server:initialize([options,] connectionListener)#
Server:destroy(err, callback)#
Server:listen(port[, ip], callback)#
Server:address()#
net.createConnection(...)#
createConnection(port, host, callback)
or
createConnection({port = ..., host = ..., callback = ...})
Creates, configures, connects and returns a new Socket instance.
net.connect(...)#
Alias for net.createConnection(...)
net.createServer(options, connectionListener)#
Creates, configures, initializes and returns a new Server instance.
Path#
This module contains utilities for handling and transforming file paths. Almost all these methods perform only string transformations. The file system is not consulted to check whether paths are valid. Supports both windows and posix.
Use require('path')
to use this module. The following methods are provided:
path.getRoot([filePath])#
Gets the filesystems root path.
path.getSep()#
Gets the filesystems default path seperator
path.pathEquals(a, b)#
Checks if path a is equal to b
path.normalize(filepath)#
Normalize a string path, taking care of '..' and '.' parts.
When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used.
path.join(...)#
Joins a splat of different strings together with the default seperator to form a valid path
path.resolve([from ...], to)#
Works backwards, joining the arguments until it resolves to an absolute path. If an absolute path is not resolved, then the current working directory is prepended
E.g.
> path.resolve('/foo/bar', '/tmp/file/')
'/tmp/file/'
path.relative(from, to)#
Returns the relative path from 'from' to 'to' If no relative path can be solved, then 'to' is returned
path.dirname(filepath)#
Return the directory name of a path. Similar to the Unix dirname command.
path.basename(filepath, expected_ext)#
Return the last portion of a path. Similar to the Unix basename command.
path.extname(filepath)#
Return the extension of the path, from the last '.' to end of string in the last portion of the path. If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string. Examples:
path.isAbsolute(filepath)#
Checks if filepath is absolute
path.isUNC(filepath)#
Checks if the path follows Microsofts universal naming convention
path.isDriveRelative(filepath)#
Drive-relative paths are unique to Windows and use the format <letter>:filepath
path.normalizeSeparators(filepath)#
Returns file path with posix seperators
Pretty print#
A lua value pretty printer and colorizer for terminals.
local prettyPrint = require('pretty-print')
prettyPrint.loadColors([index])#
Index lets you optionally pick a theme, 16 or 256.
Value: prettyPrint.theme#
Table of keys and values of the available themes
prettyPrint.print(...)#
Works like the default lua print function. We also override the default lua print function
prettyPrint.prettyPrint(...)#
prettyPrint.dump(value, recurse, nocolor)#
prettyPrint.color(colorName)#
prettyPrint.colorize(colorName, string, resetName)#
prettyPrint.strip(str)#
Userdata Value: prettyPrint.stdin#
Userdata Value: prettyPrint.stdout#
Userdata Value: prettyPrint.stderr#
Process#
Node-style global process table for luvit
local process = require('process')
process.globalProcess()#
Query String#
This module provides utilities for dealing with query strings. It provides the following methods:
querystring.stringify(obj[, sep][, eq][, options])#
Serialize an object to a query string.
Optionally override the default separator ('&'
) and assignment ('='
)
characters.
Options object may contain encodeURIComponent
property (querystring.escape
by default),
it can be used to encode string with non-utf8
encoding if necessary.
Example:
querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' })
// returns
'foo=bar&baz=qux&baz=quux&corge='
querystring.stringify({foo: 'bar', baz: 'qux'}, ';', ':')
// returns
'foo:bar;baz:qux'
// Suppose gbkEncodeURIComponent function already exists,
// it can encode string with `gbk` encoding
querystring.stringify({ w: '中文', foo: 'bar' }, null, null,
{ encodeURIComponent: gbkEncodeURIComponent })
// returns
'w=%D6%D0%CE%C4&foo=bar'
querystring.parse(str[, sep][, eq][, options])#
Deserialize a query string to an object.
Optionally override the default separator ('&'
) and assignment ('='
)
characters.
Options object may contain maxKeys
property (equal to 1000 by default), it'll
be used to limit processed keys. Set it to 0 to remove key count limitation.
Options object may contain decodeURIComponent
property (querystring.unescape
by default),
it can be used to decode a non-utf8
encoding string if necessary.
Example:
querystring.parse('foo=bar&baz=qux&baz=quux&corge')
// returns
{ foo: 'bar', baz: ['qux', 'quux'], corge: '' }
// Suppose gbkDecodeURIComponent function already exists,
// it can decode `gbk` encoding string
querystring.parse('w=%D6%D0%CE%C4&foo=bar', null, null,
{ decodeURIComponent: gbkDecodeURIComponent })
// returns
{ w: '中文', foo: 'bar' }
querystring.urlencode(str)#
Escapes special characters in a url
querystring.urlencode('https://github.com/luvit/luvit/blob/master/deps/querystring.lua')
Returns
'https%3A%2F%2Fgithub%2Ecom%2Fluvit%2Fluvit%2Fblob%2Fmaster%2Fdeps%2Fquerystring%2Elua'
querystring.urldecode(str)#
Un-escapes special characters in a url
querystring.urldecode('https%3A%2F%2Fgithub%2Ecom%2Fluvit%2Fluvit%2Fblob%2Fmaster%2Fdeps%2Fquerystring%2Elua')
Returns
'https://github.com/luvit/luvit/blob/master/deps/querystring.lua'
Readline#
A readline interface for terminals in pure lua.
local readline = require('readline')
Class: readline.History#
History:add(line)#
History:setMaxLength(length)#
History:clean()#
History:load(data)#
History:clean()#
History:dump()#
History:updateLastLine(line)#
Class readline.Editor#
Editor:refreshLine()#
Editor:insertAbove(line)#
Editor:insert(line)#
Editor:moveLeft()#
Editor:getHistory(delta)#
Editor:backspace()#
Editor:delete()#
Editor:swap()#
Editor:deleteLine()#
Editor:deleteEnd()#
Editor:moveHome()#
Editor:moveEnd()#
Editor:deleteWord()#
Editor:jumpLeft()#
Editor:jumpRight()#
Editor:clearScreen()#
Editor:beep()#
Editor:complete()#
Editor:onKey(key)#
Editor:readLine(prompt, callback)#
readline.readLine(prompt[, options], callback)#
Repl#
Implementation of a read-execute-print-loop in Luvit. Used by the Luvit repl which is returned when the Luvit binary is executed without args.
Some of the examples/samples in these docs are generated by running luvit code in this repl.
Additionally require names in the docs follow the ones automatically added into the repl during bootup (e.g. pretty-print is name-spaced as prettyPrint in the repl).
All the luvit deps are injected into the repl at runtime to make it easier to try and experiment with the luvit ecosystem.
Require#
Luvit's custom require system with relative requires and sane search paths.
This allows us to have the convenience of having node style require statements to include libraries.
Stream#
A port of node.js's stream module for luvit.
local Stream = require('Stream')
Class: Stream.Stream#
This is the stream core or base. Extends the emitter class described in Core.
You will most likely not use this class. The only relevant part of this class, the pipe method, is overriden in Readable.
Class: Stream.ReadableState#
Used to hold state by the Readable class
ReadableState:initialize(options, stream)#
Options table:
- HighWaterMark - Defaults to 16, maxes out at 128MB. 128MB limit cannot be overwritten without modifying luvit/deps/stream/stream_readable
- objectMode - If false/nil then the highWaterMark is set to 16 * 1024
Class: Stream.Readable#
Extends Stream.Stream, implements a readable stream interface. Uses ReadableState to keep track of self._readableState
Readable:push(chunk)#
Manually shove something into the read buffer. This returns true if the highWaterMark has not been hit yet, similar to how Writable.write() returns true if you should write() some more.
Readable:unshift(chunk)#
Unshift should always be something directly out of read()
Readable:read(n)#
Reads and returns n chunk bytes
Readable:_read(n)#
Internal method executed by Readable:read. Can be overwritten in child classes.
Readable:unpipe(dest)#
Removes pipes to dest
Readable:on(ev, fn)#
Triggers a callback fn
when an event ev
is triggered.
E.g.
> local child = require('stream').Readable
> child:on('foo', function() print('bar') end)
> child:emit('foo')
'bar'
> child:on('bar', function(data) print(data) end)
> child:emit('bar', 'foo')
'foo'
Readable.addListener#
Alias for Readable:on
You can use Readable:addListener for an implicit self or use Readable.addListener(self, ...)
Readable:resume()#
Resumes a stream
Readable:pause()#
Pauses a stream
Class: Stream.WriteReq#
Used internally within the Writable class.
Class: Stream.WritableState#
Used internally within the Writable class to hold state.
WritableState:initialize(options, stream)#
Options table:
- HighWaterMark - Defaults to 16, maxes out at 128MB. 128MB limit cannot be overwritten without modifying luvit/deps/stream/stream_readable
- objectMode - If false/nil then the highWaterMark is set to 16 * 1024
Class: Stream.Writable#
The writable stream class
Emits end
when done
Writable:initialize(options)#
You can modify the writable state options here, or set them.
Writable:write(chunk, cb)#
Manually write a chunk
Writable:cork()#
Kind of like pause
Writable:uncork()#
Kind of like resume
Class: Stream.Duplex#
A Duplex stream is both readable and writable and inherits the functionality and methods of the aforementioned readable and writable classes.
Duplex:initialize(options)#
These options are passed along to the initializers of the readable and writable streams this class uses.
Furthermore, we can have the following key values in the options table.
- readable - false/true
- writable - false/true
- allowHalfOpen - false/true
Class: Stream.Transform#
a transform stream is a readable/writable stream where you do something with the data. Sometimes it's called a "filter", but that's not a great name for it, since that implies a thing where some bits pass through, and others are simply ignored. (That would be a valid example of a transform, of course.)
While the output is causally related to the input, it's not a necessarily symmetric or synchronous transformation. For example, a zlib stream might take multiple plain-text writes(), and then emit a single compressed chunk some time in the future.
Here's how this works:
The Transform stream has all the aspects of the readable and writable stream classes. When you write(chunk), that calls _write(chunk,cb) internally, and returns false if there's a lot of pending writes buffered up. When you call read(), that calls _read(n) until there's enough pending readable data buffered up.
In a transform stream, the written data is placed in a buffer. When _read(n) is called, it transforms the queued up data, calling the buffered _write cb's as it consumes chunks. If consuming a single written chunk would result in multiple output chunks, then the first outputted bit calls the readcb, and subsequent chunks just go into the read buffer, and will cause it to emit 'readable' if necessary.
This way, back-pressure is actually determined by the reading side, since _read has to be called to start processing a new chunk. However, a pathological inflate type of transform can cause excessive buffering here. For example, imagine a stream where every byte of input is interpreted as an integer from 0-255, and then results in that many bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in 1kb of data being output. In this case, you could write a very small amount of input, and end up with a very large amount of output. In such a pathological inflating mechanism, there'd be no way to tell the system to stop doing the transform. A single 4MB write could cause the system to run out of memory.
However, even in such a pathological case, only a single written chunk would be consumed, and then the rest would wait (un-transformed) until the results of the previous transformed chunk were consumed.
Transform:initialize(options)#
Extendable initializer for the Transform class.
Transform:_transform(chunk, cb)#
The internal transform method.  E.g. implement a passthrough filter aka a very fancy way to print hello world
local Transform = require('stream').Transform
local Transformer = Transform:extend()
function Transformer:initialize()
Transform.initialize(self, {objectMode = true})
end
function Transformer:_transform(line, cb)
self:push(line)
return cb()
end
local transformer = Transformer:new()
transformer:on('data', print)
transformer:write('hello world')
Class: Stream.PassThrough#
An extension of the transform stream class with the transform method declared.
Basically just the most minimal sort of Transform stream.
Every written chunk gets output as-is.
Class: Stream.Observable#
Observable is a stream that can be observed outside the pipeline. observe() returns a new Readable stream that emits all data that passes through this stream. Streams created by observe() do not affect back-pressure.
Thread#
Thread module for luvit
local thread = require('thread')
thread.start(threadFunc, ...)#
thread.join(thread)#
thread.equals(thread1, thread2)#
thread.self()#
thread.work(threadFunc, notifyEntry)#
thread.queue(worker, ...)#
Class: thread.Worker#
Luvit threadpool
Worker:queue(...)#
Timer#
Javascript style setTimeout and setInterval for luvit
local timer = require('timer')
timer.sleep(delay, thread)#
timer.setTimeout(delay, callback, ...)#
timer.setInterval(interval, callback, ...)#
timer.clearInterval(timer)#
timer.clearTimeout(timer)#
Alias for clearInterval
timer.clearTimer(timer)#
Alias for clearTimeout
timer.setImmediate(callback, ...)#
timer.unenroll(item)#
timer.enroll(time, msecs)#
timer.active(item)#
URL#
Node-style url codec for luvit
url.parse(url[, parseQueryString])#
Takes a url string, returns an object. Optional second argument of type bool. Pass in true if you'd like to pass the query part of the url through the querystring modules parse function.
url = require('url')
url.parse('https://github.com/luvit/luvit/blob/master/deps/url.lua')
Returns
{ host = 'github.com', hostname = 'github.com', href = 'https://github.com/luvit/luvit/blob/master/deps/url.lua', protocol = 'https',
pathname = '/luvit/luvit/blob/master/deps/url.lua', path = '/luvit/luvit/blob/master/deps/url.lua' }
Utils#
Wrapper around pretty-print with extra tools for luvit
local utils = require('utils')
Everything in pretty-print is available under the utils namespace as well. Additionally utils has the following available functions
utils.bind(fn, self, ...)#
utils.noop(err)#
utils.adapt(c, fn, ...)#
Used heavily within luvit to wrap luv methods and expose them.


{% extends 'base.html' %} {% from "components/phase-banner/_macro.njk" import onsPhaseBanner %} {% from "components/input/_macro.njk" import onsInput %} {% from "components/upload/_macro.njk" import onsUpload %} {% from "components/button/_macro.njk" import onsButton %} {% from "components/panel/_macro.njk" import onsPanel %} {% from "custom_search/_macro.njk" import customSearch %} {% from "components/radios/_macro.njk" import onsRadios %} {% from "components/question/_macro.njk" import onsQuestion %} {% from "components/table/_macro.njk" import onsTable %} {% from "components/section-navigation/_macro.njk" import onsSectionNavigation %} {% block main %}
This will schedule an asynchronous managed job. You can monitor progress and download results from Monitor Jobs.
To get started, upload a CSV file of up to 100,000 addresses to be matched. The file must have only two columns, id and address.
Download a sample file" })}} {% call onsPanel({ "type": 'warn' }) %} If multiple addresses tie in confidence score then addresses are sorted in ascending UPRN order, meaning the lowest UPRNs come first. {% endcall %}


My first expression is : {{5+5}}
The name is {{firstName+" "+lastName}}
{{person.name+" "+person.task}}
points array second element: {{points[2]}}
Ng-bind>> points[2]=


In 2014, music talent agent Aziz Bey dreamed up PurpleThrone, a mobile app where music fans can discover and support independent artists using cryptocurrency. But in 2018, cryptocurrency still isn’t intuitive to everyone — and Bey hadn’t figured out how to encourage music lovers to support artists.
I was part of an ambitious project to redesign PurpleThrone and integrate a tipping feature.
The primary focus of our team’s redesign was integrating a new feature that prompts users to send cryptocurrency tips to musicians. We wanted to mimic the magic of hearing an amazing street musician and dropping a dollar in their guitar case.
Since our user interviews revealed that the target audience (music influencers) was not comfortable with cryptocurrency, our design team focused efforts on a proof-of-concept app integrating a tipping feature where users send US currency to musicians. Our designs for a mobile app where music influencers can easily send micropayments to independent artists they want to support will be shipped fall 2018.
At the onset of the project, the team tested the existing PurpleThrone app with three participants who had experience streaming music videos with other apps.
Bey, the entrepreneur and founder, had built and coded PurpleThrone himself. The existing app allowed users to stream music videos and “like” or “skip” them via a swiping mechanism akin to Tinder.

Users expected to be able to browse through the album covers shown on the bottom of the video viewer screen. They were confused when the screen showed additional info on the current song playing.
The onboarding asks users their favorite genres — and users expected a homepage that would be personalized to their tastes. They felt misled.
PurpleThrone is geared towards music influencers who crave new sounds. We disseminated a survey to collect data and also find people who are obsessed with finding the next great thing in music.
Over 100 people responded to our survey.
listen to music on a smartphone
care about listening to independent artists
find new music through music videos
We then conducted seven interviews. Digging into the interview transcripts revealed some big insights around music streaming and tipping.
People who are obsessed with knowing fresh music want to know about artists before they make it big.
People expect music streaming services to know them and serve personalized music recommendations.
Curiosity motivates people to obsessively click around apps — discovering musicians, tracks, playlists and more. This enjoyable feedback loop keeps them engaged.
Our target users weren’t active in the cryptocurrency community.
Given that crypto was not well understood by the target users, the team focused our design efforts on a tip feature that accepts US dollars. Users couldn't navigate the current PurpleThrone UI successfully, and they weren't engaged or connected to the content.
The team created the following problem statement to serve as a central focus.
"How might we help music fans discover new talent they want to support and keep them engaged in their music discovery process?"
To better understand the opportunity areas, we created a persona and journey map that reflected our early research and user interviews.
[For a more detailed look at our persona, please click here.]
Based on insights from our user research, we hypothesized that if a user likes a song and favorites it, they will feel as though the artist is good enough to merit a tip. We tested our hypothesis with our low-fi wireframes, and continued iterated on our tipping concept, copy and design aesthetic.
2 rounds of design studio
Whiteboarding, sketching & feature prioritization
4 usability tests with low-fi wireframes
5 usability tests with mid-fi prototype
2 usability tests with hi-fi prototype
Though all users could easily complete tasks, 2 of 4 users were turned off by the word “tip,” and they wanted to know where the money was going. Also, users expressed disgust over the idea that they’d see the tip pop-up screen after each song they liked.
Changing the copy on the tip screen to “back this artist” elicited positive feedback during usability testing of our mid-fi and hi-fi wireframes. We also decided to change the tip format: rather than have the pop-up screen triggers by the user liking a song, the pop-up screen would act like Spotify ad because many of our users are familiar with Spotify. After listening to a few songs, a user would see the tip screen and either have to send a tip right away, or wait 30 seconds before s/he can listen to the next song.
Since supporting independent artists is a core value proposition setting PurpleThrone apart from competitors in mobile music streaming, we wanted to highlight that visually using a “rock” icon throughout our designs.
We introduced the “rock” icon when we redesigned PurpleThrone’s onboarding, and our usability testing revealed that the icon was learnable and memorable—many users commented on it as they moved through the app.
Users had no trouble understanding the onboarding screens we created for our mid-fi usability testing. People loved the lighthearted “Party On” call-to-action button, and they also liked the rocker hand icon. In our mid-fi prototype, we had users select their favorite genres during onboarding and then we designed the homepage to display songs/artists from that genre—users noticed and made positive comments about the personalization.
For our mid-fidelity wireframes, we created a quick “thank you” screen. Our testing revealed that users liked the screen but wanted a more personal message, and wanted to be notified about getting a receipt. We added a photo of the artist, a “thank you” quote from him/her, and copy telling users that a receipt would be emailed to them.
Presenting our final prototype and mockups to the client went well — our stakeholders respected our design decisions because we thoroughly explained our research and usability testing. They were impressed by our ability to tap into users’ generosity by allowing the app to foster a connection between music fan and artist.
The design sprint served as a proof-of-concept and since then, I’ve gone back and refined the UI of several key screens. Several key changes I made included: increasing button size to align with HIG (Human Interface Guidelines) standards, adding labels to the tab bar, and adding better typographic hierarchy.
Extending this project beyond the initial design sprint, our team would like to dive into the following:
Additional testing of hi-fi prototype
Cryptocurrency integration
Calendar feature for users to browse live events with PurpleThrone artists
Research, design and testing of separate product for artists to manage their presence on PurpleThrone


Kenya 12-0 Djibouti: Harambee Starlets Sail To Cecafa Women’s Championship Semis
by Bonface OsanoHarambee Starlets hammered hapless Djibouti 12-0 on Tuesday to sail through to the semis of the Cecafa Women’s Championship with a game to spare.
Starlets opened their Group B campaign with a 2-0 win over Ethiopia on Sunday.
The annual regional meet is taking place in Dar, Tanzania.
Jentrix Shikwanga was the star of the game against Djibouti – bagging four goals, while fellow striker Mwanalima Adam and Mercy Airo scored hat-tricks each in the sided tie.
Read: FKF Lands Kshs 90 Million Deal For Second Division
Djibouti have been the whipping girls of the group and have so far soaked in a total of 25 goals. The team lost 13-0 to Uganda’s Crested Cranes in their group opener.
Kenya and Uganda will lock horns on the Thursday with both sides having made the quarters.


Chapter 12 - Reusable web components
This application contains the following components:
Listing 12.3: /paramTest1.jsp
Listing 12.4: /paramTest2.jsp
Click on the link below to see both components in action.
paramTest1.jsp?first=john&last=smith
Open the source files, modify the code, play around with it, and practice the different ways to use the forward, include, and param actions to get familiar with them.


The DatabaseQuery class allows you to build queries programmatically with ease. This class was inspired partly by CodeIgniter’s Active Record functionality.
To get a DatabaseQuery
instance, call the start_query()
method on your database connection:
$q = database()->start_query('table_name', 'statement');
statement
should be a MySQL query keyword: SELECT
(default), SELECT DISTINCT
, UPDATE
, DELETE
, INSERT
, or REPLACE
.
Forms a SELECT
clause. Can accept a variable number of column names, or an array of column names.
$q->select('name', 'age');
Forms a WHERE
clause. Can accept a column name and value, or an associative array of multiple column names and values:
$q->where('name', 'Bob'); $q->where($conditions); // this also works
By default, this method checks for equality. If you need a different operator, append that to the column name:
$q->where('visits >', 3);
Forms a WHERE IN(...)
clause. You must pass a column name, and an array of values to compare against:
$q->where_in('name', array('Bob', 'David', 'Jill'));
Allows complex conditions in the WHERE
clause:
$q->raw_where('(timestamp > UNIX_TIMESTAMP() OR timestamp IS NULL)');
Use with caution. Do not pass in data from variables that have not been escaped or you will be vulnerable to SQL injection.
Forms a GROUP BY
clause. Like select()
, it accepts either column names or an array:
$q->group_by('age', 'height');
Forms an ORDER BY
clause. Like select()
, it accepts either column names or an array:
$q->order_by('timestamp', 'id');
If needed you can append an order keyword to the column name:
$q->order_by('timestamp DESC', 'id ASC');
Forms a LIMIT
clause. Pass numeric arguments for limit
and offset
:
$q->limit(100, 300); // get 100 results, starting with record # 300
Same as limit(1)
Forms a JOIN
clause. Pass the table name, join conditions, and a boolean indicating whether or not to do a LEFT JOIN
.
# LEFT JOIN employees ON employees.id = users.id $q->join('employees', 'employees.id = users.id', TRUE);
Adds a second query as a UNION
. Pass a query string and a boolean indicating whether or not to return only unique results, or all the results:
$q->union($query, FALSE); // ... UNION ALL [query]
Adds a SET
clause for INSERT
, UPDATE
, or REPLACE
queries. Like where()
, it accepts a pair of arguments (column, value) or an associative array:
$q->set('name', 'Bob'); $q->set($data); // this also works
The methods outlined above return the current instance, so you can chain together methods conveniently:
$q->select(...)->where(...)->order_by(...);
Once you’re done setting up your DatabaseQuery object, just call the run() method:
$result = $q->run();
Alternately, you can cast the query object as a string to get the SQL query:
$result = database()->execute((string) $q);


serialization
/
net.corda.v5.serialization
/
SerializationContext
/
UseCase
/
Testing
Testing
Testing


Two years ago, First Tech Challenge 9681 Parallel Lions was founded by five freshmen. However, in the following years, all of the original members had left the team, so the number was unused since. This year, there were a lot of rookies that were interested in joining FTC, so the team was revived. We are using the number for this competition.
Our goal as a team is to work together to bring out the best in each other and to challenge each other to be useful members of 9681 Parallel Lions. We hope to bring together our unique talents and skill sets in the robotics world to create a successful robot. We also hope to create bonds with one another and with our FTC veteran team, 4326. 9681 wish to go through the season representing our school well and following the core values of our school: life of the mind, mature behavior, mutual respect, gratuitous proffesionalism, and creation of a secure and healthful environment.


Welcome to the online
Bollywood Dumbcharades
This is a very simple application that allows to generate a random movie name with a timer.
Movie Name
{{ generated_movie_name }}
Select a timer and then press ‘Generate’ button to generate a random movie name.
Time Remaing:


Digital identification and biometric data have become increasingly popular in the
private sector and have slowly been introduced and piloted in governmental and
non-governmental organizations in the emerging world.
The IFRC S2030 Think
Piece on Digital Identification summarizes research into how biometric data, digital
identification, and blockchain technology have and will take part in the lives of
vulnerable populations in refugee camps.


Before you apply
Who may use this application?
This application form is designed for a Victim of violent crime. Under the Crime Victim Assistance Act, a Victim is a person who is injured physically or psychologically as a result of certain crimes committed in British Columbia.
If this definition does not apply to you, please see the application forms for Witnesses or Immediate Family Members.
If the victim is deceased, please see the application for Immediate Family Members.
What types of benefits does the Crime Victim's Assistance Program provide?
Benefits that may be available to Victims of violent crime include:
- medical and dental expenses
- prescription drug expenses
- counselling
- lost employment income (reimbursed at minimum wage)
- repair or replacement costs of damaged or destroyed property that a person was wearing at the time of the crime (e.g., eyeglasses, clothing)
- protective measures (e.g., moving expenses)
- disability benefits, services or equipment
The Crime Victim Assistance Program will NOT cover:
- injuries or loss sustained from motor vehicle accidents
- injuries or loss sustained at work, and which are covered by WorkSafeBC
- claims for pain and suffering
- lost or stolen property
- injuries sustained from an offence occurring outside of B.C. or prior to July 1, 1972
Note
The Crime Victim Assistance Program will only provide benefits that are not covered by other programs
(e.g., EI, ICBC, extended health coverage, personal insurance).
View full summary of benefits
Instructions
Filling out the application
The application form is also available in PDF format at www.gov.bc.ca/crimevictimassistance. To download the appropriate viewer, visit http://get.adobe.com/reader.
Print versions of the application form are also available from the Crime Victim Assistance Program or a local victim service program.
A local victim service program can help you complete this application. To locate a program near you, call VictimLink BC toll-free at 1-800-563-0808.
Be complete and accurate
Please ensure that all form fields that you fill in are done so accurately. Any information that is inaccurate will affect the processing of your claim.
What you need to have:
In order to complete this form efficiently please make sure you have the following on hand:
- All information pertaining to the incident
- Your own health information (PHN)
- Police Officers contact
- Employment information (if requesting benefits for lost employment income)
- Info about the deceased (if it was a fatality)
- What benefits you are claiming (View Summary of Benefits)
- Victim Service Worker's information (if available)
- Court File Number (if known)
- Date of crime
- Date reported to police
- Date of hospital visit
- Date of any health care professional (ie., doctor, psychiatrist) visit
Time needed to complete this application
This application will take approximately 45 minutes to complete. You will not be able to save and come back to your application, so please be sure that you have enough time to finish it in one session.
If your address or telephone number changes after submitting this application, please inform the Crime Victim Assistance Program by calling 1-866-660-3888.
For additional questions, please contact the Crime Victim Assistance Program at<PHONE_NUMBER> or toll free in B.C. at 1-866-660-3888.
For more information, see the Government of British Columbia website at www.gov.bc.ca/crimevictimassistance or query “cvap bc” using your internet search engine.
This section provides information regarding any expenses or losses you are claiming as a result of the crime. Please keep receipts for all expenses you are claiming. The program will require you to submit original receipts.
For a list of benefits available through CVAP, please view the Summary of Benefits.
Original receipts are required for expenses not covered by your extended health or other insurance plan
Please check all that apply (at least one is required):
Medical Expenses
Victims who need healthcare because of their injuries from the crime
Examples:
- Ambulence or emergency transportation
- Diagnosis and treatment by doctors or health professionals (e.g., physiotherapists, massage therapists)
- Health care services at a facility
- Medical equipment and supplies
Dental Expenses
Victims who need healthcare because of their injuries from the crime
Examples:
- Ambulence or emergency transportation
- Diagnosis and treatment by doctors or health professionals (e.g., physiotherapists, massage therapists)
- Health care services at a facility
Prescription Drug Expenses
Victims who need prescription drugs to recover from, or manage the effects of, their injuries from the crime
Examples:
- Medications prescribed by a doctor, dentist, or podiatrist
Counselling
For all victims of crime
Examples:
- Counselling Sessions
- Psycho-educational sessions to others who support the victim
Lost Employment Income (reimbursed at minimum wage)
Victims whose injuries have a long-term effect on their ability to work and who did not have a job when the crime occurred (special eligibility issues for minors)
Examples:
- Monthly payments to assist in financially supporting the victim
Damaged or destroyed personal property
Victims whose eyeglasses/contacts, disability aids, or articles of clothing were damaged or destroyed because of the crime
Repair or replacement of:
- Eyeglass frames
- Prescription lenses
- Various types of disability aids
- Clothing
Protective Measures
Victims who need healthcare because of their injuries from the crime
Examples:
- Ambulence or emergency transportation
- Diagnosis and treatment by doctors or health professionals (e.g., physiotherapists, massage therapists)
- Health care services at a facility
Disability benefits, services or equipment
Victims who need disability aids because of their injuries from the crime, to reduce the effects of the injuries, improve their quality of life, and assist in daily living
Examples:
- Mobility aids
- Communication aids
- Vision aids
- Specialized clothing
- Prostheses and orthoses
- Other equipment or supplies
Crime Scene Cleaning
Victims who were injured at their home or in their vehicle and need specialized cleaning of the home or vehicle due to the nature of the crime.
Examples:
- Specialized cleaning and disinfecting of contaminated areas
- Replacement of contaminated flooring, wall covering, or other built-in features
If you have recieved or will recieve other benefits as a result of the crime, check all that apply:
This section provides information regarding applying on behalf of an applicant. This information is only necessary if you are a guardian or legal representative of the applicant.
0">
You previously selected the option below. Verify that this is correct before continuing with the application.
Continue to the next step in the application.
Complete the following before continuing with the application.
See required fields based on preferred contact methods here
Name
Contact Information
Mailing Address
Note: If you are not the natural or adoptive parent of the applicant, please attach a copy of any court order or other document that is proof of guardianship/trusteeship.
[upload functionality goes here]
Information supplied on this form is necessary to determine your eligibility for benefits, and is collected under the authority of Section 6 of the Crime Victim Assistance Act. Any information collected will be used only for the purposes of adjudicating your claim for benefits.
By signing this section you declare that the information you have provided on this application is true and correct. It is an offence to provide false or misleading information on this application and may lead to prosecution. If it is discovered at a lter time that false or misleading information has been provided on this application form, you may be rquired to repay to CVAP any benefits received.
Information supplied on this form is necessary to determine your eligibility for benefits, and is collected under the authority of Section 6 of the Crime Victim Assistance Act. Any information collected will be used only for the purposes of adjudicating your claim for benefits.This section authorizes the Crime Victim Assistance Program to contact the persons and organizations listed so that we may process your claim for benefits. Your application will be returned if this section is not signed and dated. You may be required to submit other authorizations that are needed to process your claim. If you have any questions about the collection and use of the information gathered by the Crime Victim Assistance Program, please contact the program at<PHONE_NUMBER> or toll free in B.C. at 1-866-660-3888.
By signing this section you hereby authorize:
- The doctor, dentist, optometrist, chiropractor, or other health care progressional who treated my injuries (physical and/or psychological) to give the Crime Victim Assistance Program, on request, medical or other reports regarding my injuries, treatment or other information relevant to this application;
- The police or other law enforcement authorities to give the Crime Victim Assistance Program, on request, a copy of police reports, statements, incident reports or other information relevant to this application;
- The Workers' Compensation Board of BC or other authority from which the victim received or will receive or will be eligible to receieve payments from provincial, federal or other jurisdictions funds to give the Crime Victim Assistance Program, on request, information relevant to this application.
- My employer(s) or similar authority to give the Crime Victim Assistance Program, on request, information as to my employment earnings, benefits or other information relevant to this application;
- Any accident, disability, sickness, life insurance/assurance company or private pension scheme or extended health benefits scheme from which payments or services were received or wlil be received to give the Crime Victim Assistance Program, on request, information relevant to this application;
- Human Resources and Skills Development Canada or Aboriginal Affairs and Northern Development Canada or any other authority from which payments were received or will be received to give the Crime Victim Assistance Program, on request information relevant to this application;
- The Canada Employment Insurance Commission or the Canada Pension Plan or similar employment insurance and pension plans from other jurisdictions, to give the Crime Victim Assistance Program, on request, information as to benefits received or to be received relevant to this application; and,
- Canada Revenue Agency or other similar agency in any other jurisdiction, to give the Crime Victim Assistance Program, upon request information as to my employment income.
- The Ministry of Children and Family Development (MCFD) to give the Crime Victim Assistance Program, on request, a copy of information relevant to this application.


data class LocalCacheState<CACHE : Any>
Local response (response obtained from the user or device, no network fetch call) in apps are in 1 of 2 different types of state: |
|
open class OnlineCacheState<CACHE>
Holds the current state of response that is obtained via a network call. This response structure is meant to be passed out of Teller and to the application using Teller so it can parse it and display the response representation in the app. The online response state is not manipulated here. It is only stored. Data in apps are in 1 of 3 different types of state: |


| $14,512 |
CHECKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $15,288 |
CHECKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $19,214 |
CHECKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $19,394 |
CHECKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $24,358 |
SAVINGS ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $13,228 |
CHEKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $21,094 |
CHECKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $19,984 |
SAVINGS ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $18,980 |
CHECKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $20,302 |
CHECKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $21,420 |
CHECKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $24,906 |
CHECKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $13,654 |
SAVINGS ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $24,536 |
CHECKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $23,569 |
CHECKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $24,307 |
CHECKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|
| $25,306 |
CHECKING ACCOUNT Citi.com [Login:Password]+ Name+Address+ [Email access] |
|


Welcome to my profile
Contact Details
Name:
Giorgi Kutateladze
Age:
20
Ocupation:
Student
Social Media
Facebook
Hobbies
Playing football
Programming
Playing/Listening/Composing music


--- title: Markdown ---
Get me a vodka rocks. And a piece of toast. Say goodbye to these, because it's the last time! Guy's a pro. Michael! Across from where?
No… but I'd like to be asked! It's called 'taking advantage. ' It's what gets you ahead in life. Not tricks, Michael, illusions. Army had half a day.
Well, what do you expect, mother? Say goodbye to these, because it's the last time! I don't understand the question, and I won't respond to it.  However, I am going to oblige and answer the nice officer's questions because I am an honest man with no secrets to hide.
I don't criticize you! And if you're worried about criticism, sometimes a diet is the best defense. Did you enjoy your meal, Mom? You drank it fast enough. Did you enjoy your meal, Mom? You drank it fast enough.
Steve Holt! Guy's a pro. I don't understand the question, and I won't respond to it. There's so many poorly chosen words in that sentence.
Oh, you're gonna be in a coma, all right. Bad news. Andy Griffith turned us down. He didn't like his trailer. It's called 'taking advantage.' It's what gets you ahead in life. That's why you always leave a note!
There's so many poorly chosen words in that sentence. There's only one man I've ever called a coward, and that's Brian Doyle Murray. No, what I'm calling you is a television actor.
Whoa, this guy's straight? Say goodbye to these, because it's the last time! That's why you always leave a note! There's only one man I've ever called a coward, and that's Brian Doyle Murray. No, what I'm calling you is a television actor.
Say goodbye to these, because it's the last time! I'm afraid I just blue myself. Steve Holt!   Steve Holt!
Not tricks, Michael, illusions. Guy's a pro. No! I was ashamed to be SEEN with you. I like being with you. Really? Did nothing cancel?
Now, when you do this without getting punched in the chest, you'll have more fun. Guy's a pro. That's what it said on 'Ask Jeeves.' I don't understand the question, and I won't respond to it. Whoa, this guy's straight?
As you may or may not know, Lindsay and I have hit a bit of a rough patch. He'll want to use your yacht, and I don't want this thing smelling like fish. No… but I'd like to be asked! Did you enjoy your meal, Mom? You drank it fast enough.
 I care deeply for nature. It's a hug, Michael. I'm hugging you. Well, what do you expect, mother?
I don't understand the question, and I won't respond to it. Well, what do you expect, mother? Marry me.  However, I am going to oblige and answer the nice officer's questions because I am an honest man with no secrets to hide.
He'll want to use your yacht, and I don't want this thing smelling like fish. I'm half machine. I'm a monster. But I bought a yearbook ad from you, doesn't that mean anything anymore? That's what it said on 'Ask Jeeves.'


It seems like there have been some problems with your PHP environment identified. The above output should give you some hint on how to fix that. Try this script again afterwards, if needed.
We're done here. You probably want to delete this script again.


Hot Hot Outstanding hot shots from all over the world. Some of the best photografers show their hot pics.


{% include 'base.html' %} {% load static %} {% block content%} {{user}} Bio of the person {{user.email}} Your Products {{products.count}} Img selling Last orders {% endblock %} {% block script %} {% endblock %}
Bio of the person


http_attach_mem - creates HTTP protocol on top of underlying socket
#include <libdill.h>
int http_attach_mem(
int s,
struct http_storage* mem);
WARNING: This is experimental functionality and the API may change in the future.
HTTP is an application-level protocol described in RFC 7230. This implementation handles only the request/response exchange. Whatever comes after that must be handled by a different protocol.
This function instantiates HTTP protocol on top of the underlying protocol.
This function allows to avoid one dynamic memory allocation by storing the object in user-supplied memory. Unless you are hyper-optimizing use http_attach instead.
s: Handle of the underlying socket. It must be a bytestream protocol.
mem: The structure to store the newly created object in. It must not be deallocated before the object is closed.
The socket can be cleanly shut down using http_detach function.
This function is not available if libdill is compiled with --disable-sockets option.
In case of success the function returns newly created socket handle. In case of error it returns -1 and sets errno to one of the values below.
int s = tcp_connect(&addr, -1);
s = http_attach(s);
http_sendrequest(s, "GET", "/", -1);
http_sendfield(s, "Host", "www.example.org", -1);
http_done(s, -1);
char reason[256];
http_recvstatus(s, reason, sizeof(reason), -1);
while(1) {
char name[256];
char value[256];
int rc = http_recvfield(s, name, sizeof(name), value, sizeof(value), -1);
if(rc == -1 && errno == EPIPE) break;
}
s = http_detach(s, -1);
tcp_close(s);
hclose(3) http_attach(3) http_detach(3) http_done(3) http_recvfield(3) http_recvrequest(3) http_recvstatus(3) http_sendfield(3) http_sendrequest(3) http_sendstatus(3)


Hi {{name}}
Meetme user {{connector.username}} has requested to connect your account to his account on meetme. You may approve or reject this request.
Click to Accept or Reject the invitation.
Accept
Reject
Unsubscribe


November 23 2015
This Is My First Article
Sausage tenderloin brisket short ribs pork loin ribeye prosciutto strip steak fatback beef pastrami. Biltong tongue tenderloin sirloin, doner porchetta short ribs shoulder venison capicola kevin sausage chicken meatloaf bresaola. Buffalo ribeye ham pastrami, kevin picanha beef ribs strip steak porchetta ball tip flank pork loin cow kielbasa chuck.
Meatball short ribs ham, pork pancetta landjaeger flank swine ribeye alcatra. Strip steak flank sausage tongue andouille chicken meatloaf frankfurter t-bone landjaeger. Frankfurter tenderloin burgdoggen pork belly, tongue capicola ham hock pork loin kielbasa shank pork.
Shoulder turkey strip steak, salami fatback venison sausage boudin kevin. Landjaeger meatloaf picanha, capicola corned beef sausage rump swine spare ribs ham hock. Swine pork tri-tip meatball brisket alcatra turkey short ribs. Leberkas ham turkey, tongue alcatra doner pork chop.
December 11 2015
This Is Another Article
Biltong short ribs pork belly pig filet mignon jowl landjaeger bresaola pancetta spare ribs beef ribs meatloaf fatback.  Pork chop alcatra pork loin, bresaola hamburger shoulder short ribs. Pork belly filet mignon bacon sausage prosciutto.
 Jowl rump capicola swine turducken pancetta tongue. Corned beef hamburger swine, tri-tip drumstick meatloaf capicola short ribs buffalo venison turkey ground round.
Pork loin flank fatback, drumstick boudin shoulder meatloaf porchetta brisket. Shoulder tri-tip pork belly chuck frankfurter. Landjaeger chicken tenderloin pork loin shank ham pork belly salami spare ribs short ribs beef ball tip boudin.


Along with higher-order functions, one of the hallmarks of functional programming is lazy evaluation. A primary manifestation of lazy evaluation is lazy lists, generally called streams by Scheme programmers, where evaluation of a list element is delayed until its value is needed.
The literature on lazy evaluation distinguishes two styles of laziness, called even and odd. Odd style streams are ubiquitous among Scheme programs and can be easily encoded with the Scheme primitives delay and force defined in R5RS. However, the even style delays evaluation in a manner closer to that of traditional lazy languages such as Haskell and avoids an "off by one" error that is symptomatic of the odd style.
This SRFI defines the stream data type in the even style, some essential procedures and syntax that operate on streams, and motivates our choice of the even style. A companion SRFI 41 Stream Library provides additional procedures and syntax which make for more convenient processing of streams and shows several examples of their use.


Unreal Editor
Options
New Script
Open Script
About
Reference
How To
Developers
Add Blocks
Standard Blocks
Additional Blocks


Stores the camera settings (brightness/contrast, gain/exposure, etc.) and interfaces with the ZED when they need to be loaded or changed. Created by ZEDCamera and referenced by ZEDCameraSettingsEditor. More...
Classes | |
| class | CameraSettings |
| Container for ZED camera settings, with constructors for easily creating default or specific values or making duplicate instances. More... | |
Functions | |
| ZEDCameraSettings () | |
| Constructor. Creates a new instance of CameraSettings to contain all settings values. More... | |
| void | SetSettings (sl.ZEDCamera zedCamera) |
| Applies all settings from the container to the actual ZED camera. More... | |
| void | ResetCameraSettings (sl.ZEDCamera zedCamera) |
| Applies all settings from the container to the actual ZED camera. More... | |
| void | LoadCameraSettings (sl.ZEDCamera zedCamera, string path="ZED_Settings.conf") |
| Loads camera settings from a file, and sets them to the container and camera. File is loaded from the root project folder (one above Assets). More... | |
| void | RetrieveSettingsCamera (sl.ZEDCamera zedCamera) |
| Retrieves current settings from the ZED camera. More... | |
| void | SetCameraSettings (int cid, sl.CAMERA_SETTINGS settings, int value, bool usedefault=false) |
| Applies an individual setting to the ZED camera. More... | |
| int | GetCameraSettings (int cid, sl.CAMERA_SETTINGS settings) |
| Gets the value from an individual ZED camera setting (brightness, contrast, gain, exposure, etc.) More... | |
| void | SaveCameraSettings (string path) |
| Saves all camera settings into a file into the specified path/name. More... | |
Attributes | |
| bool | auto = true |
| Whether exposure is set to automatic. More... | |
| bool | whiteBalanceAuto = true |
| Whether white balance is set to automatic. More... | |
Properties | |
| CameraSettings | Settings [get] |
| Reference to the settings container object. More... | |
Stores the camera settings (brightness/contrast, gain/exposure, etc.) and interfaces with the ZED when they need to be loaded or changed. Created by ZEDCamera and referenced by ZEDCameraSettingsEditor.
The actual settings themselves are stored in an instance of CameraSettings, for easier manipulation. But this class provides accessors for each value within it.
|
inline |
Constructor. Creates a new instance of CameraSettings to contain all settings values.
|
inline |
Applies all settings from the container to the actual ZED camera.
| zedCamera | Current instance of the ZEDCamera wrapper. |
Referenced by ZEDCameraSettings.LoadCameraSettings(), and ZEDCamera.SetCameraSettings().
|
inline |
Applies all settings from the container to the actual ZED camera.
| zedCamera | Current instance of the ZEDCamera wrapper. |
|
inline |
Loads camera settings from a file, and sets them to the container and camera. File is loaded from the root project folder (one above Assets).
| zedCamera | |
| path |
Referenced by ZEDCamera.LoadCameraSettings().
|
inline |
Retrieves current settings from the ZED camera.
| zedCamera |
Referenced by ZEDCamera.RetrieveCameraSettings().
|
inline |
Applies an individual setting to the ZED camera.
| settings | Setting to be changed (brightness, contrast, gain, exposure, etc.) |
| value | New value for the setting. |
| usedefault | If true, ignores the value and applies the default setting. |
|
inline |
Gets the value from an individual ZED camera setting (brightness, contrast, gain, exposure, etc.)
| settings | Setting to be retrieved. |
|
inline |
Saves all camera settings into a file into the specified path/name.
| path | Path and filename to save the file |
Referenced by ZEDCamera.SaveCameraSettings().
| bool auto = true |
Whether exposure is set to automatic.
Referenced by ZEDCamera.GetExposureUpdateType().
| bool whiteBalanceAuto = true |
Whether white balance is set to automatic.
Referenced by ZEDCamera.GetWhiteBalanceUpdateType(), and ZEDCameraSettings.LoadCameraSettings().
|
get |
Reference to the settings container object.


health EBS public surveillance respiratory signals healthcare reporting Health facilities facility detection {border-style reported signal px;} #ffffff;} pilot Public detected influenza potential severe unusual events ;():�?. Cameroon DLMEP CPC Hospital event�?based hospital report events. clinicians focal however, illness implementation laboratory staff Cameroon's Yaoundé, early human immediate program provided px; response specimens verification {font-family Dis. Infect MOH National Yaoundé acute cases community disease font-size notification outbreak systems true virus (HN) Cameroon. Disease Division Event�?based LNSP Organization World clinical data double; emerging infection influenza, patients rapid rapidly training triage Control Emerg March additional agreement avian border-color border-width capacity case determined enable events, facilities, focused important including outbreaks patient phone points poultry recognize solid; worker {font-style {font-weight (Table ;():. Accessed CDC CPC, CPC/LNSP Cameroon, Centers Centre DLMEP, EBS, IDSR International Laboratory Pasteur Viral [Internet]. acute�?onset bold clinician collab: courier; course em; experience exposure facilities. facility, global identify illness, implemented initial integrated les national pneumoniae, primary process process, pt;} reporting. represent routinely signals. situation support suspected testing timely verification, viruses weekly work


ChatScript comes with a bot used to analyze documents called NLTK. You build it using `:build nltk
It's still in its infancy.
You start by selecting what you want to do: tally rootpos
– read documents and list all words in it and their frequencies by root and part of speech. The sentence I have loved animals since I was a boy will show
2 = I~pro
1 = have~aux
1 = animal~n
1 = since~con
1 = be~v
1 = a~det
1 = boy~n
though not necessarily in that order. You can then sort the output log file to find most common words. Note that I have loved love will list love~n
and love~v
separately since their part of speech usage was different.
tally root
– read documents and list all words in it and their frequencies by root. No part of speech information is provided so I have loved love will display 2 = love.
tally raw
– read documents and list all words in it and their frequencies as given. Swims and swim are two separate listings.
By default it displays all words. If you add min 2 after some command, then any word displayed must be found at least twice.
sentiment
– read incoming sentences or documents and display the sentence with a summary of + and – affect at start and pluss and minuses after words that have affect.
reset
– turn off existing mode, in preparation for changing to a new mode. For document reading, you would name the file or directory to read like this:
:document REGRESS/moby_dick.txt
- to read a file relative to top level ChatScript :document READER/BOOKS/
- to read some directory relative to top level ChatScript
Tallying on a big document can take a moment, so the system outputs a . every 1000 sentences it reads.


Try out our Premium Member services: Virtual Legal Assistant, Query Alert Service and an ad-free experience. Free for one month and pay only if you like it.
70. $~ * IN THE HIGH COURT OF DELHI AT NEW DELHI + W.P.(C) 4768/2011 DELHI POLLUTION CONTROL COMMITTEE ..... Petitioner Through: Mr. Arjun Pant with Mr. Dinesh Jindal, Adv. versus M/S OSHO UPWAN ..... Respondent Through: None. CORAM: HON'BLE MR. JUSTICE RAJIV SAHAI ENDLAW ORDER
% 15.07.2011
1. The petition impugns the order dated 17th February, 2011 of the Financial Commissioner acting as an Appellate Authority under the Water (Prevention & Control of Pollution) Act, 1974, on an appeal preferred by the respondent.
2. The petitioner had vide order dated 29th January, 2010 in exercise of powers under Section 33(A) and Section 31(A) of the Act directed the respondent to close down its unit namely M/s Osho Upwan, Palla Bhakhtawar Road, Delhi with immediate effect and also directed, MCD to cancel the licence granted to the respondent and prosecution for failure to close the unit and further directed NDPL & DJB to disconnect the electricity and water supply. 1/-
3. It is inter alia the contention of the petitioner in the writ petition that no appeal against the said directions was maintainable. Attention is invited to the order dated 5th March, 2010 of the same officer occupying the office of the Financial Commissioner in another case holding so.
4. The Financial Commissioner has in the order impugned in this petition held that the directions aforesaid were issued by the petitioner without giving any opportunity of being heard to the respondent and has set aside the directions issued by the petitioner vide order dated 29 th January, 2010 with liberty to the petitioner to pass appropriate orders after affording a reasonable opportunity of being heard to the respondent.
5. This writ petition came up before this Court first on 12 th July, 2011 when it was put to the counsel for the petitioner that rather than allowing time to be spent before this Court, would it not be expedient for the petitioner, to without prejudice to its legal contention aforesaid, grant an opportunity to the respondent of being heard and to pass fresh orders. It was felt that such course of action would be more expeditious and would result in directions, if found tenable after hearing the respondent, being issued at the earliest. The counsel for the petitioner had sought time to obtain instructions.
6. The counsel has today informed that he has instructions to agree to the aforesaid course of action. 2/-
7. Accordingly, this writ petition is disposed of with the following directions:-
a. The petitioner, without prejudice to its contention that the Financial Commissioner had no jurisdiction to issue directions as aforesaid, to grant an opportunity of hearing to the respondent and after hearing the respondent to pass fresh directions under Section 33(A) (supra);
b. It is clarified that the order of the Financial Commissioner impugned in this petition shall not constitute a precedent in any similar appeal preferred before the Financial Commissioner and it shall remain open to the petitioner to satisfy the Financial Commissioner that appeals against such orders are not maintainable.
No order as to costs.
RAJIV SAHAI ENDLAW,J JULY 15, 2011 pp..
3/-


The name of the address book group to which you are adding addresses. you can change the group name by selecting
Edit
from the main address book dialog.


Hi! I'm Steve Cochrane, and this blog was a “devlog” of my experiences working on my videogame The Mountaineers, an NES-style platformer. Now I don't know what this is. Enjoy!
Disclaimer: I am an employee of Blizzard Entertainment (specifically, a web engineer) and this is my personal blog. All thoughts and opinions are my own.


Probably you want to load data for the location for which you don't have access. If this is a mistake and are you sure that you have access to it, please report an issue.


{% block content %} {% if staff %}
The following users have submitted finalized entries for this node:
{{ staff.contributed|join:", " }}
The following users have not yet submitted finalized entries for this node:
{{ staff.notcontributed|join:", " }}


GreenTrip won the TravelScrum hackathon prize sponsored by Sciant which involved mentoring and a cash prize. We are very happy to have had the chance to support this innovative project.
Watch the videoSciant is very excited to support the global ideation hackathon TravelScrum, which will bring many innovators, industry leaders, technology & business leaders together to build solutions tackling 1 or more of the challenges.
Learn moreDon't miss a great opportunity to get practical advice on how hotels can bounce back from Covid-19 with cost-effective must-have technologies!
Learn moreWe are pleased to announce our partnership with travel and hospitality tech leader Michael McCartan as we intensify our efforts to Unlock Potential across the sector.
For hotels to stay ahead of industry changes and challenges, introducing digitization and connecting all touchpoints across a customers journey can bring improved customer satisfaction and revenue, but also require more resources. Data integration with Real-time Data is a way to increase profit margins, deepen customer loyalty and enhance operations.
Learn moreWatch the record from Friday's Digital on Funnel TV, if you didn't have a chance to watch a live stream. Stephen Burke about topics such as Oracle Cloud, Blockchain and Cryptocurrencies and others..
Learn moreGreat insights about the open API adoption in hospitality technology system integrations by Simone Puorto.
Learn moreNowadays, over 50% of companies are using big-data analytics. Although logistics companies are not among the first to adopt it, they are likely to be the ones that stand to benefit most from it. Especially during the last-mile delivery the proper gathering and cleansing of data would enable better forecasting of events and less uncertainty.
Learn moreFrontline Dynamics is a start-up optimizing air cargo operations as part of Sciant logistic division. Angel Mitev our SVP and Practice Principal, is acting at CTO for Frontline Dynamics. Last month he was hosted by Bulgarian Bloomberg TV to talk about digitalization of the Air Cargo industry.
Learn moreAngel Mitev, our SVP & Practice Principal is attending Start.Up! Germany Tour these next few days. Together with Kevin Vaz they are representing Frontline Dynamics, meeting with companies in North-Rhine Westphalia and also pitching at the RuhrSummit 2019.
Angel's opinion piece on the key technologies needed to address transformation in the logistics and transport section within the next five years was published in full by IT Pro Portal. Here Angel talks about the market situation and the changes that are coming fast to a sector still living of legacy systems but being quickly disrupted by new tech.
Learn moreBulgarian business publication covers the impending launch of Sciant's partner Frontline Dynamic - the startup with a product to optimise air cargo operations as part of our logistics division. We've co-invested with BrightCap Ventures VC fund.
Learn more"Now that chatbots are no longer sexy, are they finally becoming useful?" Great insight about chatbots in the Hospitality industry!
Learn more


Meadowsweet has been renovated throughout to a high standard. Beautifully and stylishly furnished with great attention to detail it has a contemporary look whilst still retaining a warm and welcoming atmosphere.
The spacious kitchen/diner is fitted with a dishwasher, washing machine / dryer, microwave, fridge, freezer, hob and oven. There is also a comprehensive range of cook and tableware. Double doors lead from the kitchen to an enclosed courtyard area.
A comfortable lounge with cosy sofas to relax on after a busy day on the beach is complete with flat screen TV, DVD player and a selection of games and books.
The staircase from the lounge leads up to the three bedrooms on the first floor. Both the super king and double bed bedrooms have double aspect views over the meadows. The twin is equipped with two generous single beds.
The bathroom located on the first floor has a bath, wash basin and w.c. A separate walk in power shower room with wc can be found on the ground floor.
Enjoy al fresco dinning on the sunny patio sun trap complete with comfortable garden furniture and gas bar-b-que.
Meadowsweet has gas central heating and towels and bed linen are provided. All electricity, heating and wi-fi are included in the tariff.
Pets are welcome at Meadowsweet however smoking is not permitted inside the property.