‘The words are in the elven-tongue of the West of Middle-earth in the Elder Days,’ answered Gandalf. ‘But they do not say anything of importance to us. They say only: The Doors of Durin, Lord of Moria. Speak, friend, and enter. And underneath small and faint is written: I, Narvi, made them. Celebrimbor of Hollin drew these signs.’
‘What does it mean by speak, friend, and enter?’ asked Merry.
‘That is plain enough,’ said Gimli.
- Lord of the Rings, A Journey in the Dark
In this blog post, we will explore a 2016 paper by Garrison et al. that presents an architecture for enforcing access control policies in a cloud storage system, which was published in the IEEE Symposium on Security and Privacy. If you are interested in Security and Privacy topics, be sure to check out my recent blog post on KHyperLogLog, a data structure from Google that estimates privacy risks in large databases.
Access control is defined by the National Institute of Standards and Technology (NIST) as the process of permitting or restricting access to applications at a granular level, such as per-user, per-group, and per-resources.
When we read this definition, one of the first words that come to mind is passwords. The history of passwords is diverse and certainly rich. In older times, they were commonly known as watchwords. In his 1906 book on the Apostles' Creed, Rev. A. G. Mortimer mentions the following regarding the history of watchwords:
The Compatible Time-Sharing System (CTSS) was the first computer system to use password-based login. Professor Robert Fano, who was involved in CTSS development, spoke about the use of passwords at a 1967 IEEE conference:
There are a number of system features that deserve special mention. The private files of each individual are protected by a personal password, which is requested by the system at the beginning of each session at a terminal. The teletypewriter's printer is disabled while the password is given, so that no record of it can be seen by other people. The password is checked by the system against the user's name and problem number, and further access is denied if any mismatch is detected.
Together with this mechanism for insuring privacy of individual files, the system includes facilities for making one's work easily available to other people. A "permit" command is available for authorizing the use of any particular file on the part of other people. Permission can be granted to any number of specifically named individuals, or to everybody, or even to everybody but Joe. The authorization can be limited to using and copying a file, or it can include the right to modify it or even delete it. Once a person has been authorized to use a file owned by somebody else, he can "link" to it by means of an appropriate command and thereafter use it as if it were his own. The links established by each user are recorded in his file directory, together with the records of his own files. These facilities for making one's work available to other people are extensively used. At present, the average number of recorded links per user of the Project MAC system is 27, and the average number of private files per user is 34.
Additionally, Tom Van Vleck, a CTSS system programmer, shared a fascinating story about the use of passwords in CTSS:
The one time XEC * was used in a good way was the day in 1966 that a certain Computation Center administrator's mistake caused the CTSS password file and the message of the day to be swapped. Everybody's password was displayed in clear to each user that logged in. (The editor in those days created a temporary file with a fixed name.) This was before (and was the origin of) the idea of one-way encrypting passwords. Bill Mathews of Project TIP noticed the passwords coming out, and quickly entered the debugger and crashed the machine by entering an XEC * instruction.  (The problem is described and analyzed in Corby's Turing Award Lecture.)
For some context, XEC *
would cause the CPU to “sit there
taking I-cycles, uninterruptible, until an operator manually reset the
CPU.”
Access control mechanisms have significantly evolved since the 1960s. Today, Role-Based Access Control (RBAC) is one of the more common access control models. For instance, an MNC with a storage system for employee records can tie access privileges with job responsibilities to ensure only authorized employees have access to the records. In this scenario, an HR manager would have read and write access to all employee records, while a software manager would only have access to records of employees who report under her. Such roles are then assigned to individual users, with new employees receiving access privileges related to their roles.
In this blog, we will primarily discuss RBAC models, specifically RBAC0, whose state can be formally described as follows:
U
is a set of usersR
is a set of rolesP
is a set of permissionsPA
is the permission assignment relation, a subset of
R x P
UR
is the user assignment relation, a subset of
U x R
auth
determines if a given user u
with a
role r
can use permission p
. This is true
when (u, r)
is in set UR
and
(r, p)
is in set PA
.
This system will be useful in our discussion of construction. See Figure 2 for a visual representation of RBAC.
There are other access control models out there, such as Attribute-Based Access Control (ABAC). ABACs are known to provide more fine-tuning than their RBAC counterparts. To get a better idea, imagine that the aforementioned MNC has a department working on government projects. Such projects likely require a security clearance level (an example of an attribute). Two employees in the organization may have the same roles (e.g., SDE-2), but their security clearance levels differ. If we use ABAC with security clearance level as an attribute, a user attempting to access the file but not meeting these criteria will be denied access.
Before we jump into the architecture, let's discuss some preliminaries, such as identity-based encryption (IBE) and Identity-based signature (IBS) schemes, which we will be using during the construction.
Identity-Based Encryption is a type of public-key encryption system that provides confidentiality by encrypting messages. It allows the use of user identities, such as email addresses, phone numbers, IP addresses, or other unique identifiers, as public keys. This is different from traditional public-key encryption, where a user's public key is typically a large pseudo-random number. IBEs can be particularly useful in scenarios where key management is challenging.
In this blog post, we won't dive into the different types of IBE systems, but we will take a brief look at the four algorithms used by these systems. For our purposes, their implementation can be thought of as an abstraction.
The four algorithms are MSKGen
, KeyGen
,
Enc
, and Dec
:
MSKGen
takes a security parameter n
and
generates public parameters pp
, and master key
msk
.
KeyGen
takes the master key msk
and the
ID
and generates a private key
kID
for the ID
. Here,
ID
is the public key and can be something like a user's
email address.
Enc
encrypts the message m
using the public
key ID
and public parameters pp
.
Dec
decrypts the ciphertext using the private key
kID
.
A visual representation of IBE is provided in Figure 3.
Now, let's take a look at Identity-Based Signature schemes. IBE and IBS are related in the sense that they both use a user's identity (such as an email address) as a public key. However, the difference lies in their functionality. IBS schemes are used to sign messages to prove their authenticity.
In essence, a user's identity is used to generate a signature that is attached to the message to prove that the message was created by the user and has not been altered since then. The receiver of the message can then verify its authenticity by using the user's identity and signature. The private keys are generated using a trusted third party, known as the Private Key Generator (PKG). A visual representation of IBS is shown in Figure 4.
As before, we won't be delving into the implementation, but it is
important to familiarize ourselves with the following algorithms:
MSKGen
, KeyGen
, Sign
, and
Ver
.
MSKGen
takes a security parameter n
and
generates public parameters pp
, and master key
msk
.
KeyGen
takes the master key msk
and the
ID
and generates a private signing key
sID
for this ID
.
Sign
takes the message M
and the private key
sID
to generate a signature sig
.
Ver
takes the message M
and signature
sig
to help verify whether sig
is valid for
a given ID
.
In this blog post, we will consider a cloud storage system with three entities: an administrator, a user, and a cloud storage service. Figure 5 provides a visualization of this system.
The administrator is mainly responsible for managing
cryptographic keys, such as creating and revoking them. For example, as
we saw in the IBE and IBS sections, the administrator would act as a
trusted third party and be responsible for using their master key
msk
to generate a private signing key for a user.
Interestingly, in this architecture, any user can download files from
the cloud. However, since all files are encrypted, only the user with
the appropriate role-based key can decrypt, read, and modify their
contents.
As can be seen, the files are hosted in the cloud, along with the access control policy data that protects them. The read access permissions are enforced on the user's side, whereas the write permissions are enforced on the cloud side. Before authorizing writes, a minimal reference monitor validates the user's signature. The architecture we will be examining makes the following assumptions about the storage system:
With all these preliminaries in mind, let's move on to a naive construction for enforcing RBAC0 on a cloud storage system.
When a new user, such as Alice, joins an organization, she must complete
an initial registration process with the administrator. The
administrator will use their master keys (msk
) to generate
two private keys: ku
and
su
, using KeyGen
for the IBE and IBS schemes, respectively.
These private keys will be sent to Alice.
Similarly, when a new role, such as Sales Ninja, is created in the
organization, the administrator will generate similar private keys:
kr
and sr
, using KeyGen
. For each user, such as Alice, assigned to
this role, the administrator creates and uploads a tuple of the form
<RK, Alice’s ID, role, Enc(kr, sr), IBS signature of the administrator>
Here, RK
is a special value indicating that this is a role
key tuple. Enc(kr, sr)
provides Alice
with cryptographically protected access to
kr
and sr
. The administrator does this by using Alice's private key (ku
) to encrypt the message (kr
and
sr
) with Alice's identity. As Alice also has her private key, she can
easily decrypt and obtain kr
/sr
.
For each file that is to be shared with a particular role, the administrator creates and uploads a tuple of the form
<F, role, <file name, access privileges>, Enc(file), IBS signature of the administrator>
Again, F
is a special value indicating that this is a file
tuple, and Enc(file)
is an IBE-encrypted file with a role
as the ID
. The access privileges can be read or read-write
and the file can be decrypted using the private key
kr
corresponding to that role.
After the administrator completes the preparation, a user can start
reading and writing their authorized files. Let's say, Alice, who is a
Sales Ninja, wants to read an authorized file called
sales.txt
. To do this, she needs to:
RK
tuple for the Sales Ninja role and an
F
tuple for sales.txt
.
kr
from the RK
tuple
using her private IBE key ku
.
sales.txt
using kr
and
read the file.
To write to a file, Alice can create a new F
tuple:
<F, Sales Ninja, <sales.txt, write>, Enc(updated sales.txt), IBS signature of Alice>
once she's done changing the contents locally. She can then send it to
the cloud. If the minimal reference monitor can verify Alice's
signature, the file sales.txt
will be replaced with the
updated one.
The above construction has significant issues. For instance, encrypting
large amounts of data using IBE can impact performance, and the
F
tuple incurs duplicate work as the entire file needs to
be encrypted multiple times, once for each role.
To address these issues, it's recommended to split an
F
tuple into two tuples, F
and
FK
, as follows:
FK
tuple is:
<FK, role, <file name, access privileges>, Enc(k), IBS signature of the administrator>
. Here, k
is a symmetric key generated by the
administrator, and Enc(k)
encrypts this key using the IBE
scheme with the role as ID
.
F
tuple is:
<F, file name, Enc(file), IBS signature using the role key of the last authorized updater>
. Here, Enc(file)
uses faster
symmetric-key cryptography with k
as the
symmetric key, rather than the IBE scheme.
This technique greatly reduces duplication, as a single
F
tuple can be created for a file, with multiple
FK
tuples, one for each role. Only one symmetric key per
file needs to be generated, and a more cost-efficient symmetric key
cryptography is used for encrypting files.
Another issue with the construction is the lack of provision for revoking access to a file. Ideally, we should be able to do this on a per-role and per-user level.
One way to address this issue is by versioning the tuples. To
achieve per-role functionality, we create a version number
v
corresponding to the symmetric key k
and use
it to version the F
and FK
tuples. To remove
permission for a role, we create a new version number, use it to
generate a new symmetric key, and re-encrypt the file with it. This
would not only modify the F
tuple but also the
FK
tuples for all the roles whose access to the file has
not been revoked.
That's all for now! The paper provides an in-depth analysis of the efficiency of this construction, and it also includes algorithms for various operations, such as adding and deleting users, as well as revoking access and permissions. If you're interested in learning more, I highly recommend checking out the paper for further details.


Back
Event handling
Push page!
You have pushed {{ app.pushes }} times and popped {{ app.pops }} times.


Quick Start Manual
What is Livera
Welcome to start the new adventure with Hicat!! Happy hacks. :p
In a nutshell, Livera by Team HiCat is an open source hardware project which aims to bring machine vision features to the Arduino
community. It is also a good platform for building visual driven robotics.
We've provided libraries which contain machine vision
related APIs such as:
- 720hd video and photo capturing&processing
- OpenCV enabled Color-Sensitive and Object-Tracking.
- Wifi enabled wireless control (this can work with the iot!)
- Image capturing and data recording onto the onboard sd card
- Mobile observation and manipulation from our custom apps( web-based and native)
- Programmable and open source.
what Livera could do:
Future development:
It is always exciting to think about the future, as for the buzz of AI recently, undeniably it is the future.
When we saw the article of How a Japanese cucumber farmer is using deep learning to sort cucumbers. we think Livera should be best machine vision front-end part for image capturing and openCV pre-processing
.
With the natural language virtual assistant and cloud deep learning platfrom, we could just teach the robot how to perform task by speaking, or let him learn by watching, that will be really awesome, like people could finally owns their own real world R2D2
or BB8
.
In conclusion:
- Theme based advance
robotic kit
. - More advance image capturing and processing capability
- Natural language virtual assitant
- Image streaming and processing
cloud
User Manual
Power:
LIVERA allows mulitpul ways of power supply
- 3.7V lipo battery (No higher voltage)
- USB Port (MCU)
- I/O port(VIN)
Hock Up Camera Module:
The Livera core package contains 3 main conponent, 1. Livera Board 2. Camera Module 3. Extendable Cable.
There are white symbols
on top of every module, always remember to match the symbol while plugs the Camera module.
You could choose to directly plug in the Camera Module on to Livera Board, or use extendable cable to extend the Camera Module in order to build something like pan-tilt enabled Robot.
Connect to Livera(access point):
Power up Livera, give a few second to boot, the WIFI access point hostname hicat_xxxxxx
should show up on your PC/MOBILE's wifi list. The default wifi password is: 88888888
Once you connected to the wifi, you could try out the host API web page by IP address: <IP_ADDRESS>
You could let Livera access to your local wifi(station mode) by the API web <IP_ADDRESS>
or web app <IP_ADDRESS>/mmc/webapp/index.html
(the address/www/mmc/
is the directory of mounted sd card address within Livera Linux, which also means you could build your own web application and copy it to the sd card, Livera will automaticly host it for you)
You could also change Livera's wifi name through linux command line tool
: Once you connected to LIVERA, you could Telnet into the Linux system within Livera, follow the section Access into Linux(3518E)
below, within the /hicat/
folder you should find the launch.sh
tool, run the program ./launch.sh ap SSID password
, or through web app.
Station WIFI Mode:
you could let Livera connected to your local wifi hotspot
through the web API, btw we have provide a program call 'imhere' to let your got the new IP address of Livera.
web app: <IP_ADDRESS>/mmc/webapp/index.html
(this web app should placed in the sd card
, could be download on https://github.com/hicat-tech/webapp
) offers station method.
Test Video Feature:
LIVERA has two video streaming mode RTSP/MJPEG
, RTSP stands for advence H.264 codec raw video streaming
which works well with our Android app or any video Players which accepted RTSP streaming protocol(suggest to use VLC player) with this IP:rtsp://<IP_ADDRESS>/hicat.264
.
MJPEG
would be a WEB friendly
video format. Once you successfully boot up Livera and connected the WIFI, you can go to the web API page <IP_ADDRESS>
to test the board's functions with your web browser, btw Chrome would be the best choice.
Go to web API page: <IP_ADDRESS>
, hit the link: MJPEG Mode, you could view the live video stream via the link: http://<IP_ADDRESS>:8080
, suggest use chrome browser to visit, also you could change the video resolution
by press the links, this resolution you choose would work for both RTSP and MJPG Mode
.
If you using the webapp, the custom web app which stay in the sd card and would show up here:<IP_ADDRESS>/mmc/webapp/index.html
. Choose the MJPG MODE
from the webapp's top right switch button, and hit the LiveView
button to get Live MJPG video stream from Livera.
Access into Linux(3518E): Livera accept telnet
connections, when you connected to Livera through WIFI, you could open up your terminal, type:
telnet <IP_ADDRESS> //if you let the board connected to the router you should find the correct IP address
//User:root
//passward:(hit return directly)
cd /hicat/ //firmware directory
./launch.sh //Main script for main operation: video setting/mount sd card
cd /www/mmc //SD card directory
beside the internet ways, you could also go serial communication
through the given UART
port on Livera.
Reset Livera:
-
wifi reset: hold the reset buttom
RST-PBC
, you would see the led lightSTAT
flashing per second, count for3 seconds
ps: very careful to not let it flash more than 10 seconds, once you see the led flash faster, the wifihicat_xxxxxx
would comes up in your wifi list. -
factory reset: make sure there is a folder named hicat_failsafe.tar, if so, hold the reset buttom
RST-PBC
, you would see the led lightSTAT
flashing per second, count for10 seconds
, once you see the led flash faster, you would get a brand new Livera.
SD Card:
Caution: if you have the SD card which comes with the Kits
, the needed file has already been installed
, the below instruction shows how to set up a new card
.
mount sd card: any new sd card with format(vfat&fat32) would be auto mounted. if not, stick it into the sd card slot and follow the steps below.
- goto
- follow the above step
access into Linux(3518E)
to telnet into Livera(simular like ssh) - goto the address
`cd /hicat/`
- within the
hicat
directory you should find the command line tool namedlaunsh.sh
- then go
./launch.sh sd
//you should see 4 options `format|mount|umount|hicatEx`, `format` means format the sd card into `fat32` file system which works like this command below:
./launch.sh sd format
mount&umount would let you mount the sd card to /www/mmc
directory, hicatEx would helps you to depackage the hicatEx.tar (put it into sd card before you go hicatEx
) which contains some important programs for Livera's system.
- do format
first(format the sd card into fat32 in your pc/mac would be okay), then go mount
, finally hicatEx
.
- once you finished format and mount the sd card there will be you could chose to put the OpenCV lib into opencv
folder incase for opencv demo.
Android APP:
APP main page:
We've provided a custom android app for Livera, you could download it on our github page: https://github.com/hicat-tech/livera-android, the APP could help you liveview video, control robots, and access to livera's web app.
Do not forget the turn the livera into RTSP(H264) Mode
before live viewing the video or access into robot control.
Web app:
The web app provides functions like Video recording, Live streaming, Livera setting,
What an amazing feature about livera is that it could serve web pages
as web app thanks to the file streaming server, in Livera's demo, we've provided a single page web app which based on VUE.js
, the app would work as Livera's command panel.
To use the web app you could go download the web app here:https://github.com/hicat-tech/webapp
The web server within Livera also provide REST API
which allows you to communicate with Livera through AJAX, have a look at detailed description within API GUIDE
.
Hardware
Livera
Livera's given I/O port has connected into MCU(Atmel 32u4)
, and the pin layout is pretty much likely to Arduino Mini
, you could program it with arduino IDE through the given USB port
, select the board to arduino leonardo
.
We've also placed a mpu6050 6-axie accelerometer on Livera, this would help in case of self-balance vehicle, there is 3 I/O port been connected MCU(32u4), there are I2C(D2:SDA,D3:SCL) and interrupt(D7)
Design file: The Robot kit's Laser cut Acrylic CAD file contains the dimensions of LIVERA
, you could use it to build your custom case for Livera. Links here.
Livera Hardware Architecture: Arduino(MCU) I/O Pin Indicate:
Motor Driver
Port Indicator: Motor Driver -> Hicat.Livera
- Motor Port 1(M1):
M1-1 -> A5
,M1-2 -> A4
. - Motor Port 2(M2):
M2-1 -> A3
,M2-2 -> A2
. - Motor Port 3(M3):
M3-1 -> D8
,M3-2 -> D6
. -
Motor Port 4(M4):
M4-1 -> D5
,M4-2 -> D4
. -
Servo Motor Port:
11 -> D11, 10 -> D10, 9 -> D9, 13 -> D13
The Livera Motor Driver was designed specially for Livera, so that you can directly plug onto Livera, in this way you would get almost everything you need for a robotic system
.
Livera Motor Driver can power up 4 DC motors
and 3 Servo Motors
, with external power input.
The Robot kit Assembly Guide
Like the picture shows, the Livera Robot kit ccomes with several conponents that you need you assemble and make it to a fully functional robot. This toturial would get you through all the process of physical building and wiring,
it might take around 25 minutes
to make the robot alive. Clear up your desk, unpack the Robot kit and let begin the journey.
Parts list
The Livera Robot kit comes with following parts:
- Boards: HICAT.Livera Boardx1 Livera Motor Driver Boardx1
- Camera: Livera Camera Extend Cablex1 Livera Camera Modulex1
- Storage:2G SD Card with firmware built in
- Guidebook: Livera GuideBookx1 Livera Robot Assembly GuideBookx1
- Power: 9V Lipo Battery and Bat Carrier
- Motor: E-MAX SERVOx1 DC Gear Motor set(Motor + Motor Carrier + Wheels)x2
- Structure bits: Robot Base Acrylic Panels set, Omni-directional Wheel Set
- Screws: M2x15(+6)mm Nylon Studx4, M2x6mm Nylon Studx4, M2x6(+6)mm Nylon Studx8, M2x10(+6)mm Nylon Studx8, M2 Nylon Nutx4
- OUTPUT: LASER Beanx1
- Accessories: Stickersx1, USB Cablex1, Screwdriver(+,-)x1
https://www.discourse.org/Video Tutorial We've also created a video toturial to give you a more detailed, much clear step by step toturial, would help you with:
- Pyhsical Assembly
- Webapp Guide
Design file: The Robot kit's Laser cut Acrylic CAD file contains the dimensions of LIVERA
, you could use it to build your custom case for Livera. Links here.
Step 1: Base panel build
Unpack the Livera Robot kit package, Find out the following conponents in order to build the base panel of the Robot.
- Robot Base Acrylic Panel x1
- DC Motor + Motor Carrier x2
- Omni-directional Wheel Set x1
- M2x15(+6)mm Nylon Stud x4
- M2x6mm Nylon Stud x4
- M2x6(+6)mm Nylon Stud x4
- M2 Nylon Nut x4
Notice: All the Stud could be install by hand, doesn't require and tools.
Caution:
Don't make it too tight while screwing with the Livera and Livera Motor Driver
, might have a small chance to cause damage to the board if you screw it too hard.
Assemble up the Omni-direction Wheel Set
like the picture shows, then close up with the Cover bit
, waiting for screw on the Base Panel.
- Install the motor on base panel: carefully place the
M2 Nut
onto theMotor Carrier's slot
, than catch theDC Motor
and match to the hole on theBase Panle
, notice to keep the+
sign on top as the left top of the pic shows, usingM2x6(+6) Stud
to screw through from the other side of the panel. - Install the Structure bit: place the
M2x15(+6) Stud
on top of theBase panel
, then let the6mm screw bit
through the hole and screw into theM2x6mm Stud.
Step 2: Body build
- Install the Livera Motor Driver: simply place by matching to the
Stud.
- Install the Structure bit: Screw
M2x10(+6)mm Stud
on top.
Caution:
Don't make it too tight while screwing with the Livera and Livera Motor Driver
, might have a small chance to cause damage to the board if you screw it too hard.
- Install HICAT.Livera with Extend Cable: carefully stack
Livera
on top ofLivera Motor Driver,
do check for theI/O ports
and theoutline
to see weather it is matched to theLivera Motor Driver.
- Install the Structure bit: Screw
M2x10(+6)mm Stud
on top of Livera.
Caution:
Don't make it too tight while screwing with the Livera and Livera Motor Driver
, might have a small chance to cause damage to the board if you screw it too hard.
Step 3: Top build
- Install the top Acrylic Panel: place the
Top Acrylic Panel
, fix the panle by screw theM2x6(+6)mm Stud
on top. - Stick the Power case and Servo: unpack the
3M Sticker,
stick the conponents as the image shows. - Connect Power: connect the 2.54mm Power connector from
Power case
toLivera Motor Driver.
- Install the Camera pan-tilt: screw the Servo Arm Set form the
EMAX Servo set
on theCamera Pan-tilt.
- Install Camera Module: carefully place the camera module on the
Acrylic Camera Pan-tilt
, usingM2 Rivet
to fix it. - Install Camera Extend Cable and Laser Bean: install the conponents as the picture shows, notice that the
direction
of the camera module should bematch together
according to theindicate drawings.
Step 4: Wiring
- Wiring: wire up all the electronics(Motors, Laser, Servo) as the picture shows, for the
DC Motor
wring, you would need to use the screwdriver to fix the wire into the adapter. - Install SD card: put the
SD card
into the SD slot.
- Install Battery: put the
9v chargable battery
into thePower Case.
- Power up to init the Servo: switch on the
Power Switch
From the Motor Driver, wait until heardtwo movement
from theServo,
then put theCamera Pan-tilt
on theServo
in ahorizon direction,
screw it up using the smallest screw from the Servo Box. - Enjoy: pick up you cell phone, connect to the
Livera's wifi
,
ssid:hicat_xxxxxx
passward:88888888
then open chrome browser
, go to the web page
http://<IP_ADDRESS>/mmc/webapp/index.html
-
Switch the top video switcher to
MJPG MODE
, clickLiveView
, if the image flipped, you could change it withinQUALITY,
we suggest you to chose240p/15fps.
-
Click
ROBOT
to open the control panel, Try press forward button, if you see the robotspinning
ormove back,
you could adjust the wiring by switch theDC motor
wire from the adapter.
Software
Firmware
Livera frimware is basically embedded Linux shell script with some executable program, which works immediately while Livera power on, keeping all the functions like MJPG/H264 Server
, Bridge System
, Rest API
works.
Android
We've provided a custom android app for Livera, you could download it on our github page: https://github.com/hicat-tech/livera-android, the APP could help you liveview video, control robots, and access to livera's web app.
Do not forget the turn the livera into RTSP(H264) Mode
before open the liveview and robot function.
APP main page:
Robot control panel:
Web app
The web app provides functions like Video recording, Live streaming, video download, wifi setting, visual tracking.
RTSP/MJPG MODE SWITCH:Once you open up the web app in your browser, the First thing to do is to select a video mode from RTSP
to MJPG
, after the selection you would immediately see some of UI changed according to different mode.
What an amazing feature about livera is it could serve web pages
as web app thanks to the file streaming server, in Livera's demo, we've provided a single page web app which based on VUE.js
, the app would work as Livera's command panel.
To use the web app you could go download the web app here
The server also provide REST API
which allows you to communicate with Livera through AJAX
Example Code
Image Capturing
1. Image capture with Arduino Way
#include "hicat.h"
void setup()
{
hicat.begin();
char name[16] = "0.jpg";
for (int i = 0; i < 8; i++)
{
name[0] = '0' + i;
hicat.snapshot(name);
delay(10);
}
}
void loop()
{
}
2. Image capture with WEB Way
Livera's build in web server accept rest API
, for detail description you could check out the WEB API
guide.
One thing you have to Notice is that Livera has two image streming mode
, which are MJPG
for web and H264
for more advance video streaming.
- For Video Capturing:
//type the url directly within browser
//IP address could be different if you use station mode.
//first step, make sure you are in H264(RTSP) Mode
<IP_ADDRESS>/hicat/videoServer?mode=0
//Second step, start capture
<IP_ADDRESS>/hicat/record?save=1
//finally, stop
<IP_ADDRESS>/hicat/record?save=0
//AJAX is also avaliable, here is example with client side javascript
var xhr = new XMLHttpRequest(){
xhr.open('GET', '/hicat/videoServer?mode=0', true)
xhr.onload = function() {
answer = JSON.parse(xhr.responseText)
console.log(answer1)
}
xhr.send()
- For Image Capturing:
//type the url directly within browser
//IP address could be different if you use station mode.
//first step, make sure you are in MJPG Mode
<IP_ADDRESS>/hicat/videoServer?mode=1
//Second step, start capture image
//you could set up the image name xxx.jpg and stored direction '/www/mmc' is the SD card's directory
<IP_ADDRESS>/hicat/snapshot?name=xxx.jpg&dir=/www/mmc/video/
//AJAX is also avaliable, here is example with client side javascript
var xhr = new XMLHttpRequest(){
xhr.open('GET', '/hicat/videoServer?mode=1', true)
xhr.onload = function() {
answer = JSON.parse(xhr.responseText)
console.log(answer1)
}
xhr.send()
3. Image capture with Linux(c/c++) Way
We've cross compile a tool call curl
which will help you to control Livera with the web api
//telnet/serial/arduino into Livera's terminal
//type the command below to invoke the web api. for detailed info please check out the web api section within the API GUIDE
curl http://<IP_ADDRESS>/hicat/record?save=1 //trigger h.264 video capture
Robot Kit
Websocket and bridge system: bridge is a websocket server
that runs on the linux core
, help to accept websocket connections to Livera onport 7681
and transfer the information to MCU(32u4)
.
Websocket Example:we've built a websocket bridge server to help to transport text message from front-end web client to Arduino.
//server on port 7681
var WebSocketURL = 'ws://' + window.location.hostname + ':7681'
ws = new WebSocket(WebSocketURL);
ws.onopen = function(event) {
console.log('ws connection opened:' + WebSocketURL);
}
ws.send(`msg`);
ws.close();
// hicat robot demo
// get SerialCommand library from https://github.com/hicat-tech/Arduino-SerialCommand
#include
#include
int PWM1 = 10; //control servo
int PWM_CE = 11; //servo enable
int AIN1 = 4; //control motor
int AIN2 = 5; //control motor
int AIN3 = 6; //control motor
int AIN4 = 8; //control motor
int BIN3 = A2; //control laser
int BIN4 = A3; //control laser
Servo myservo;
SerialCommand sCmd;
uint8_t camera_angle = 120;
uint8_t camera_angle_range[] = {
60, 150
};
uint8_t laser_is_on = 0;
void setup() {
Serial.begin(115200);
Serial1.begin(115200);
// initialize the digital pin as an output.
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(AIN3, OUTPUT);
pinMode(AIN4, OUTPUT);
pinMode(BIN3, OUTPUT);
pinMode(BIN4, OUTPUT);
digitalWrite(BIN3, LOW); // turn off LASER
digitalWrite(BIN4, LOW);
pinMode(PWM_CE, OUTPUT);
myservo.attach(PWM1);
digitalWrite(PWM_CE, HIGH);
myservo.write(camera_angle);
digitalWrite(PWM_CE, LOW); //disable servo
// Setup callbacks for SerialCommand commands
sCmd.addCommand("laser", trigger_laser); // trigger laser
sCmd.addCommand("camera", adjust_camera); //
sCmd.addCommand("motor", set_motor);
sCmd.setDefaultHandler(unrecognized); // Handler for command that isn't matched (says "What?")
}
// the loop routine runs over and over again forever:
void loop() {
sCmd.readSerial();
}
void trigger_laser()
{
if (laser_is_on) {
digitalWrite(BIN3, LOW); // turn off LASER
laser_is_on = 0;
Serial.println("laser off");
}
else {
digitalWrite(BIN3, HIGH); // turn on LASER
laser_is_on = 1;
Serial.println("laser on");
}
}
void adjust_camera()
{
char *param;
param = sCmd.next();
if (!strcmp(param, "down")) {
if (camera_angle < camera_angle_range[1]) {
camera_angle += 10;
digitalWrite(PWM_CE, HIGH);
myservo.write(camera_angle);
digitalWrite(PWM_CE, HIGH);
}
}
else if (!strcmp(param, "up")) {
if (camera_angle > camera_angle_range[0]) {
camera_angle -= 10;
digitalWrite(PWM_CE, HIGH);
myservo.write(camera_angle);
digitalWrite(PWM_CE, HIGH);
}
}
Serial.print("camera angle: ");
Serial.println(camera_angle);
}
void set_motor()
{
char *param;
int16_t left = 0;
int16_t right = 0;
param = sCmd.next();
if (param == NULL) {
return;
}
left = atoi(param);
param = sCmd.next();
if (param == NULL) {
return;
}
right = atoi(param);
Serial.print("motor ");
Serial.print(left);
Serial.print(" ");
Serial.println(right);
if (left > 30) {
analogWrite(AIN2, left);
digitalWrite(AIN1, LOW);
} else if (left < -30) {
analogWrite(AIN2, 255 + left);
digitalWrite(AIN1, HIGH);
}
else {
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, LOW);
}
if (right > 30) {
analogWrite(AIN3, right);
digitalWrite(AIN4, LOW);
}
else if (right < -30) {
analogWrite(AIN3, 255 + right);
digitalWrite(AIN4, HIGH);
}
else {
digitalWrite(AIN3, LOW);
digitalWrite(AIN4, LOW);
}
}
// This gets set as the default handler, and gets called when no other command matches.
void unrecognized(const char *command) {
Serial.println("What?");
}
Advance
API GUIDE
1.WEB API
The Web API contains a set of REST API in order to interact with LIVERA in a convenient way through AJAX
or URL
.
AJAX Example:the below could be run in general font-end javascript client side.
var xhr = new XMLHttpRequest(){
xhr.open('GET', '/hicat/videoServer?mode=0', true)
xhr.onload = function() {
answer = JSON.parse(xhr.responseText)
console.log(answer1)
}
xhr.send()
}
Websocket and bridge system: bridge is a websocket server
that runs on the linux core
, help to accept websocket connections to Livera onport 7681
and transfer the information to MCU(32u4)
.
Websocket Example:we've built a websocket bridge server to help to transport text message from front-end web client to Arduino.
//server on port 7681
var WebSocketURL = 'ws://' + window.location.hostname + ':7681'
ws = new WebSocket(WebSocketURL);
ws.onopen = function(event) {
console.log('ws connection opened:' + WebSocketURL);
}
ws.send(`msg`);
ws.close();
1.Set up Video Streaming Mode: This API allows you to swith between RTSP
and MJPEG
streaming mode, be careful that Video Record API
only works under RTSP Mode
, and Screen Shot API
only works under MJEPG Mode
.
/hicat/videoServer?mode=0
mode=0
: RTSP Server Start
mode=1
: MJPEG Mode
2.Station Mode: Let Livera link to local wifi router
/hicat/stationMode?ssid=xxxxx&password=xxxxxxx
return messages:
success
: none return
error
:{"result":"ERROR"}
3.WIFI Access Point: Make Livera to AP mode
/hicat/apMode?ssid=xxxxx&password=xxxxxxx
return messages(object):
success
: none return
error
：{"result":"ERROR"}
4.Set Livera time: Synchronous time with Livera, the time also affect to the default video name.
/hicat/setTime?time=%d-%d-%d-%d-%d-%d
Example
: /hicat/setTime?time=2018-09-09-01-01-01
success
：{"result":"OK"}
error
：{"result":"ERROR"}
5.Get Video Download Links: This API will return a JASON format({"result":"OK","files":["name":"xxxxx","name":"xxxxx"]}
) message about all the file within video folder
in SD Card. Once you get the fileName you could just go to this url http://<IP_ADDRESS>/mmc/video/xxxxx.264
to download it(might figure your IP address under station mode).
/hicat/files
success
:{"result":"OK","files":["name":"xxxxx","name":"xxxxx"]}
error
:{"result":"ERROR"}
6.Video Record: This API allows you to record and delete the video and auto save into the default video
folder in SD card.
/hicat/record?save=1
/hicat/record?del=xxxxxxxx.h264
save=1
: start recording
save=0
: stop recording and save
del=xxxxxxxx.h264
: delete file xxxxxxxx.h264
success
：{"result":"OK"}
error
：{"result":"ERROR"}
7.Video Setting: Switch video angle, video resolution and video fps.
/hicat/setCamera?resolve=1&rotate=0&fps=20
success
：{"result":"OK"}
error
：{"result":"ERROR"}
//only work under mjpg mode
8.Snapshot: snap shot form one of the frame form MJPEG stream. We suggest to make the direction to /www/mmc/video/ coz the photo info could be receive under /hicat/files
API.
/hicat/snapshot?name=xxx.jpg&dir=/www/mmc/video/
success
：{"result":"OK"}
9.For test: test api, do nothing but test.
/hicat/test
success
：{"result":"OK"}
2.Embedded Linux API
Detail information could be view under our github libhicat, There are instructions guide you through development tools set up and workflow, please have a look.
#ifndef _LIBHISIV_H_
#define _LIBHISIV_H_
#ifdef __cplusplus
extern "C" {
#endif
int venc_exit(int n);
int venc_init(int resolve);//0:720P 1:QVGA(320*240) 2:VGA(640*480)
int venc_init_more(int resolve,int mode,int fps);//resolve: 0/1/2 1280*720/320*240/640*480 mode: 0/1 H264/MJPEG
int venc_requestIDR();//request IDR frame
int venc_getFrame(char* buffer,int *datalen,int *pts,int *type);
int venc_snap(char* buff,int xRes,int yRes);
int venc_getYUV(int mode,char*buff);//mode=0 Y mode=1 UV mode = 3 YUV420(SP)
int venc_rotate(int dir);
//for audio
extern int aenc_init(int mode);// 0/1 PT_LPCM/AAC/
extern int aenc_getFrame(char* buff);
extern int aenc_exit();
//jpeg to http
extern int libyuvdist_startYuvDistService(int port);
extern int libyuvdist_updateYuv(int iHandle,char* data,int len,int seq,unsigned long timeStamp);
extern int libyuvdist_stopYuvDistService(int iHandle);
extern int libyuvdist_setSettingCallback(int iHandle,int func);//int func(int resX,int resY,int fps)
#ifdef __cplusplus
}
#endif
#endif
3.Arduino Libray API
The Arduino library wraps the web api, using serial communication and curl to communicate and send command to the video core(HI3518E). There are also example codes could be find in github
#ifndef _HICAT_H_
#define _HICAT_H_
#include <Arduino.h>
class HiCat
{
public:
HiCat();
int begin(void);
/**
* Take a picture
*
* @param file_name picture name
* @return 0 - OK, otherwise - error code
*/
int snapshot(const char *file_name);
/**
* Start to record a video which is saved at /www/mmc/video/
*
* @return 0 - OK, otherwise - error code
*/
int record();
/**
* Stop to record a video
*
* @return 0 - OK, otherwise - error code
*/
int stop_recording();
/**
* Set camera format
*
* @param resolution 0 - 1280*720, 2 - 640*480, 1 - 320*240
* @param rotation 0 - no rotation, 1 - 180 degree rotation
* @param fps frame per secord from 1 to 25
* @return 0 - OK, otherwise - error code
*/
int set_camera(int resolution, int rotation, int fps);
/**
* Set Wi-Fi mode
*
* @param mode 0 - AP mode, 1 - Station mode
* @param ssid SSID
* @param password password
* @return 0 - OK, otherwise - error code
*/
int set_wifi(int mode, const char *ssid, const char *password);
/**
* Run a shell command
*
* @param command shell command
* @return 0 - OK, otherwise - error code
*/
int run(const char *command);
private:
void prepare_web_command();
int read_result();
};
extern HiCat hicat;
#endif // _HICAT_H_
HI3518EV100 SDK
Content within SDK:
- linux
- file system
- Hi3518E Documentation&Hardware design reference
- download address: download link verifycode:
kspc
decode password:lk87612umzvcb01qqsalv
How to burn the firmware to flash
you must have a hicat board with a uboot already burned.
then connect the UART0 on the ARM9 Hisiv chip. and then use the command as below[recomendly using Hyper Terminal to finish this]:
loady 0x82000000
then send file on Hyper Terminal with xmodern protocal. choose the uImage file under https://github.com/9crk/libhisiv/opt/
sf probe 0
sf erase 0x100000 0x300000
sf write 0x82000000 0x100000 0x300000
loady 0x82000000
then send the rootfs file to the board.
sf erase 0x400000 0xC00000
sf write 0x82000000 0x400000 0x500000
setenv bootargs 'mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)'
setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
saveenv
then reboot the board or execute 'reset' command.
About rtspserver and libhisiv.a
rtspserver have two demo: one is modified from live555 project. ( live555MediaServer ) source code is in https://bitbucket.org/zhouhua/hicat_rtspserver * play Address: rtsp://<IP_ADDRESS>/hicat.264
How to install software pack
- execute 'lrz' command to send libhicat/opt/hi_sd.sh into the board (any where)
- format the sd card with fat32 format in default param. or use mkfs.vfat on Linux OS
- then execute
chmod +x hi_sd.sh && ./hi_sd.sh
, the board will reboot
How to upgrade 1. Formating the SD card with vfat or fat32 mode. 2. then copy the hicat2016xxxx.tar package to the SD card. 3. press the reset button (RST_PBC) 4. connect the power supply. 5. wait for the board reset again.
What's more zwebs<EMAIL_ADDRESS>How to use programming with serial port on Hisiv libSerial https://github.com/9crk/libSerial.git
Linux SDK Source Code can be view here
openCV
How to use opencv Demo
- clone this repo
- then install the compiler
- compile the apps under 'app' dir with
./build.sh
- copy the app dir to the board
- copy the opt/opencvlib dir to the board at /www/mmc/opencv/opencvlib
cd app && source env.sh
execute './capture'
to capture an image named 'myImage.jpg'execute './match model.jpg'
to find the object model.jpg in the camera.- then you can browser the result hi.jpg on http://<IP_ADDRESS>/mmc/opencv/hi.jpg
The way To do black-line tracking.
1.check out the files.
~/libhicat/app$ ls__
build.sh capture.cpp hi.html match model2.jpg myImage.jpg capture env.sh hi.jpg match.cpp model.jpg
2.copy capture.cpp as a demo
cp capture.cpp lineTrack.cpp
3.modify build.sh, add content below
arm-hisiv100nptl-linux-g++ lineTrack.cpp ../lib/libhisiv.a -I../include -lpthread -lm -o lineTrack
4.compile
./build.sh
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include"libhisiv.h"
int main(int argc,char* argv[])
{
char data[1280*720];
int len;
int i;
len = venc_getYUV(0,data);
int x,y;
int result[10];
for(i=0;i<10;i++){
result[i] = 0;
}
for(i=0;i<10;i++){
for(y=635;y<(635+10);y++){
for(x=i*72;x<(i+1)*72;x++){
result[i]+=data[y*1280+x];
}
}
result[i] = result[i]/(72*10);
}
for(i=0;i<10;i++){
result[i] = 0;
printf("result = %d\n",result[i]);
}
}


What should I wear to the mailbox today?
FIND OUT!
Temperature:
Today's attire includes:
Clothes
Shoes
Accessory


You can manage yout appointments here
| ID | Date | Note | Status | Pet | Business | Action | ||
|---|---|---|---|---|---|---|---|---|
| {{appointment.id}} | {{appointment.date | date:'yyyy-mm-dd HH:MM'}} | {{appointment.note}} | {{appointment.status}} | {{appointment.pet.name}} | {{appointment.business.businessName}} |


Light and Sound Memory Game
Welcome to the game! Repeat back the pattern by pressing buttons.
Start
End
Current level:
/10
Current mistakes:
C
D
E
F
G
A


{% extends 'template-lab-3b.html' %} {% set mainClasses = 'nhsuk-u-padding-top-0' %} {% block pageTitle %} Symptoms - NHS {% endblock %} {% block beforeContent %}
Many things can cause a rash in babies and children, and they're often nothing to worry about.
your child has a rash, is also unwell, and has any of these symptoms:
These can be signs of meningitis.
It can be harder to see a change in skin colour on brown and black skin. Check the soles of the feet, palms, lips, tongue and inside the eyelids for colour changes.
As a parent, you may know if your child seems seriously unwell and should trust your own judgement.
A rash on 1 or both cheeks plus a high temperature, runny nose, sore throat and headache may be slapped cheek syndrome. After a few days, a rash may appear on their body.
Slapped cheek syndrome usually gets better on its own within 3 weeks. Children's paracetamol or ibuprofen can bring down a high temperature.
Hand, foot and mouth disease is a common childhood illness that causes blisters on the hands and feet, and ulcers in the mouth. It also causes a high temperature and your child may have a sore throat.
It usually gets better in 7 to 10 days. Children's paracetamol can bring down a high temperature.
Scarlet fever causes a rash that looks like pinpricks and feels rough, like sandpaper. The rash can be red, but this may be less noticeable on brown and black skin.
Scarlet fever usually starts with a white coating on the tongue, a sore throat, headache and a high temperature.
See a GP immediately if you think your child has scarlet fever. It's treated with antibiotics.
Measles usually starts with the same symptoms as a cold, plus a high temperature, sore eyes that are sensitive to light and grey spots inside the cheeks.
After a few days, a spotty rash appears on the head or neck and spreads to the rest of the body. The spots can appear red or brown, but they may be less noticeable on brown and black skin.
Call a GP if you think your child has measles.
Heat and sweat can cause raised spots or patches known as prickly heat or heat rash. The rash can look red, but it may be less noticeable on brown or black skin.
It itches, so you may notice your child scratching.
Heat rash usually gets better on its own after a few days.
Skin that's itchy, dry and cracked may be atopic eczema. It's common behind the knees, elbows and neck, but it can appear anywhere.
The affected area may change colour. On white skin, the area may look pink or red. On brown and black skin, it may look grey or purple, or darker than surrounding skin.
Speak to a GP if you think your child has eczema.
Hives causes a raised, itchy rash. It can look red, but this may be less noticeable on brown and black skin.
The rash can be a sign of an allergic reaction to things like a sting, medicine or food.
It usually gets better within a few days.
Speak to a GP if your child keeps getting this type of rash. They may be allergic to something.
Call 999 if there's swelling around their mouth.
An itchy, dry, ring-shaped patch of skin may be ringworm. The patch may look red, pink, silver, or darker than surrounding skin.
Ask a pharmacist for a cream or lotion to treat ringworm.
Speak to a GP if it appears on your child's scalp, as it may need to be treated with prescription medicine.
Chickenpox starts with small, itchy spots. The spots may look red, pink, the same colour or darker than surrounding skin, depending on your child's skin tone. At the start, the spots may be harder to see on brown and black skin.
The spots quickly form blisters and then scabs.
Some children have a few spots, while others have them all over their body.
Red sores or blisters that burst and leave crusty, golden-brown patches could be impetigo. The redness may be harder to see on brown and black skin.
The sores or blisters can be itchy, get bigger or spread to other parts of the body. They often appear on the face, hands or around the middle of the body.
Speak to a GP if you think your child may have impetigo.
Scabies is caused by tiny mites that burrow into the skin.
Ask a pharmacist for a cream or lotion to treat scabies. Everyone in the household needs to be treated at the same time – even if they do not have symptoms.
You should take your baby to a GP for advice if they are under 2 months old.
Very small spots, called milia, often appear on a baby's face when they're a few days old.
Milia may appear white or yellow, depending on your baby's skin tone.
They usually go away within a few weeks and do not need treatment.
Raised red, yellow and white spots (erythema toxicum) can appear on babies when they're born. They usually appear on the face, body, upper arms and thighs.
The rash can disappear and reappear.
It should get better in a few weeks without treatment.
Small, firm, raised spots that can appear anywhere on the body are common in children and known as molluscum contagiosum.
The spots can be the same colour as surrounding skin, darker than surrounding skin, or pink.
Treatment is not recommended because the spots get better on their own, although it can take more than a year.
With nappy rash your baby's skin may look sore and feel hot. There may be red patches on your baby's bottom or around the whole nappy area.
There may be spots or blisters. It can make your child feel uncomfortable or distressed.
You can buy cream from a pharmacy to help.
Baby acne can appear within a month after birth but usually gets better after a few weeks or months.
Washing your baby's face with water and a mild moisturiser can help.
Do not use acne medicines intended for older children and adults.
Cradle cap is when a baby gets yellow or white, greasy, scaly patches on their scalp.
It usually gets better without treatment in a few weeks or months.
Gently washing your baby's hair and scalp with baby shampoo may help prevent more patches.
Page last reviewed: 02 August 2019
Next review due: 02 August 2022


Classes The following classes are available globally. DSBuffer Fixed-length buffer for windowed signal processing See more Declaration Swift public class DSBuffer © 2016 Yang Liu. All rights reserved. (Last updated: 2016-07-25) Generated by jazzy ♪♫ v0.7.0, a Realm project.


Membership
$15 per month. First month free.
$0 for first 10 packages
+$2 each additional package
$3.50 per delivery trip
1-hour delivery windows
5-11pm everyday
Package return service
30-day storage
Cancel anytime
Only order 1-2 packages? Try our Pay-As-You-Go plan
$2.50 per package received
$5 per scheduled delivery trip
2-hour delivery window
10-day package storage
2-hour delivery window
10-day package storage
Oversized Packages
Larger packages require extra storage space and delivery effort, but we've got you covered!
| Class | Weight | Size (W+L+H) | Price | |
|---|---|---|---|---|
| Level 1 | 40-49 lbs | or | 60-79 in | $6 |
| Level 2 | 50-59 lbs | or | 80-99 in | $14 |
| Level 3 | 60+ lbs | or | 100+ in | $28 |
*Oversize fees apply in addition to regular sealed costs


Topic readme.md
DISCLAIMER: This module is not yet complete. It may change dramatically between now and release.
Description
luabnet is a Lua library for retrieving data from Blizzard Entertainment's Battle.net Community Platform API.
This module implements utility functions used by the luabnetwow and luabnetd3 modules (luabnet_d3 has not yet been created).
Installation
To install the module, use luarocks install luabnet_tools
or copy the contents of the lua
directory to your package.path .
Dependencies
Required
* Penlight (with or without LFS) * LuaJSON * LPeg * LuaSocket * One of these three decompression libraries:
* [lzlib](https://github.com/LuaDist/lzlib) * [lua_zlib](https://github.com/brimworks/lua-zlib) * [compress.deflatelua](http://lua-users.org/wiki/ModuleCompressDeflateLua)
All of these except the decompression libraries are installed by LuaRocks with this module (since LuaRocks can't handle optional dependencies yet and only one of these is currently available as a rock).
lzlib and lua-zlib are bindings to the C library zlib (which must be installed separately). compress.deflatelua is written in pure Lua and doesn't depend on zlib, but it's fairly slow.
lzlib can be installed with luarocks install lzlib
, the other two must be installed manually.
If you don't want to install LuaFileSystem with Penlight, use luarocks install --deps-mode=none penlight
before installing this module.
The Penlight modules pl.app, pl.dir, pl.file, pl.test and pl.path all depend on LuaFileSystem; so you won't be able to use these modules without installing LFS as well (but this library doesn't make use of them).
Optional
In order to make authenticated requests to the API, you must also install LuaSec; either from LuaRocks with luarocks install luasec
or manually.
Authenticated requests use HMAC-SHA1 signatures in the Authorization header, as per the documentation.
The HMAC-SHA1 module bundled with this library implements its own bitwise operations in Lua, but it will use one of these bitwise operations libraries when possible:
- Lua 5.2's built-in bit32
- Lua BitOp (LuaJIT built-in, but also available for standard 5.1 and 5.2)
- bitlib
compress.deflatelua can also make use of bit32 and Lua BitOp.


| 8 May 1824 |
William Walker born, Tennessee. |
| 1838 |
Graduates, University of Nashville. |
| 1850 |
Moves to San Francisco, CA. |
| 16 Oct 1853 |
Leaves for Guaymas, Mexico. |
| Nov 1853 |
Proclaims a Republic of Lower California, in La Paz on the Gulf of California. Institutes Louisiana laws over the new "country." |
| 1853 |
Abolishes Republic of Lower California, in favor of Republic of Sonora, with capital Ensenada. |
| 8 May 1854 |
Surrenders to U.S. Authorities, primarily because of desertions. |
| 1854 |
Charged with violation of neutrality laws. Acquitted. |
| 3 May 1855 |
Sails for Nicaragua. Appoints himself President of Nicaragua. Revokes the license of Accessory Transit Co. (owned by Cornelius Vanderbilt) to ferry passengers overland between the two oceans, in favor of a new company owned by two of Vanderbilt's former employees. In response, Vanderbilt sends forces to Central America to overthrow Walker. |
| 1 Mar 1856 |
Costa Rica declares war on Walker's forces. |
| May 1857 |
Surrenders. Leaves Nicaragua. |
| Nov 1857 |
Arrives in Punta Arenas, Nicaragua. Commodore Pauling leads a U.S. anti-filibustering expedition to retrieve him, and brings Walker back to the United States. |
| 12 Sep 1860 |
Handed over by British authorities to the Hondurans. Tried by Honduran court martial, and executed by firing squad. |


{% load format_utils %}
| A | Number of children for whom support is claimed: {% lookup responses 'number_children_seeking_support_'|add:claimant_id %} | |
| B | Guidelines table amount for $150,000 | $ {% lookup responses 'child_support_amount_under_high_income_'|add:claimant_id %} |
| C | Plus {% lookup responses 'percent_income_over_high_income_limit_'|add:claimant_id %}% of income over $150,000 | $ {% lookup responses 'amount_income_over_high_income_limit_'|add:claimant_id %} |
| D | Guidelines table amount | $ {% lookup responses 'total_guideline_amount_'|add:claimant_id %} |
We have agreed on the Guidelines table amount set out at Line D above as the amount of child support.
{% else %}We have agreed on an amount of child support that differs from the Guidelines table amount and the amount of child support agreed on is:
differs from the Guidelines table amount because:
{% lookup responses 'reason_child_support_amount_'|add:claimant_id %}
{% endif %}


{% extends "base.html" %} {% block content %}
This is a simple app that lets us manage one or more feeds of data from social media sites like Twitter. Here you can see the content from those feeds and in some cases link back to the original items on their source sites.
Data Dictionary for Twitter csv export
{% endblock %}


EP_success¶
EP_success is the module for populating the collumns of the Phasing table in the sqlite database for the 2D images.
In the Phasing table, the ‘success’ collumns are the scores, 1 is good, 0 is bad. The ‘percent’ collumn has the CC percentage found from the log file (which is used to assess whether the map is good or bad).
Other classes and functions called in the module:
- From eclip.utils.get_data:
- get_log_filename
- best_sym
- get_lst_filename
- percent_find
- make_list_inverse
- make_list_original
Calling EP_success results in the population of collumns of the Phasing table in the sqlite database.
Arguments¶
The command line arguments are as follows.
- –db: The location for the sqlite database. Default: /dls/science/users/ycc62267/metrix_db/metrix_db/sqlite
- –dirin: The directory location for the input images. Default: /dls/mx-scratch/ycc62267/imgfdr/blur2_5_maxminbox’
- –raw: Boolean, whether the data is just the heavy atom positions. Default: False
- –out: The directory location to find the logfiles containing the percentage. Default: /dls/mx-scratch/melanie/for_METRIX/results_201710/EP_phasing
- –fnm: The name of the log file containing the percentages. Default: simple_xia2_to_shelxcde.log
- –clr: Whether to clear the columns (for both o and i): ‘ep_success’,’ep_img’ and ‘ep_raw’ Default: True
Functions in module¶
-
eclip.EP_success.
main
(sqlitedb='/dls/science/users/ycc62267/metrix_db/metrix_db.sqlite', dirin='/dls/mx-scratch/ycc62267/imgfdr/blur2_5_maxminbox', raw=False, out='/dls/mx-scratch/melanie/for_METRIX/results_201710/EP_phasing', filename='simple_xia2_to_shelxcde.log', clear=True)¶ main is the overall function for EP_success.
-
eclip.EP_success.
run
()¶ run allows EP_success to be called from the command line.


In progress completed bookmarks Courses Projects Search for more courses Courses Projects You haven't booked marked anything yet. Check ot all our courses to start bookmarking Search for more courses


 All rights reserved.
* Other names and brands may be claimed as the property of others.


JavaScript is disabled on your browser.
Skip navigation links
Overview
Package
Class
Use
Tree
Deprecated
Index
Help
Prev
Next
Frames
No Frames
All Classes
SEARCH:
JavaScript is disabled on your browser.
pitest 1.4.0-SNAPSHOT API
Packages
Package
Description
org.pitest.boot
org.pitest.bytecode
org.pitest.classinfo
org.pitest.classpath
org.pitest.coverage
org.pitest.coverage.analysis
org.pitest.coverage.execute
org.pitest.dependency
org.pitest.extension.common
org.pitest.functional
org.pitest.functional.predicate
org.pitest.functional.prelude
org.pitest.help
org.pitest.junit
org.pitest.junit.adapter
org.pitest.mutationtest
org.pitest.mutationtest.build
org.pitest.mutationtest.config
org.pitest.mutationtest.engine
org.pitest.mutationtest.engine.gregor
org.pitest.mutationtest.engine.gregor.analysis
org.pitest.mutationtest.engine.gregor.blocks
org.pitest.mutationtest.engine.gregor.config
org.pitest.mutationtest.engine.gregor.mutators
org.pitest.mutationtest.engine.gregor.mutators.experimental
org.pitest.mutationtest.execute
org.pitest.mutationtest.mocksupport
org.pitest.plugin
org.pitest.reflection
org.pitest.sequence
org.pitest.testapi
org.pitest.testapi.execute
org.pitest.testapi.execute.containers
org.pitest.testng
org.pitest.util
sun.pitest
Skip navigation links
Overview
Package
Class
Use
Tree
Deprecated
Index
Help
Prev
Next
Frames
No Frames
All Classes
JavaScript is disabled on your browser.
Copyright © 2018 org.pitest. All rights reserved.


The path of the test folder that will contain the uploaded test. The path doesn't include the Root test folder (Subject).
For example, sampletestfolder\subfolder means, the tests will be uploaded to test folder named 'subfolder', which is under the test folder named 'sampletestfolder',
and 'sampletestfolder' is under the root test folder 'Subject'.


思烤的咸鱼
HOME
ARCHIVES
HOME
ARCHIVES
2021
[1]
My projects
11-29
2020
[1]
荐物志
11-01
2019
[1]
Hello Hexo
03-22


This Telegram channel aggregates news, rumors and articles from websites like This Is Anfield, Anfield Index, the Official Liverpool Site, and the Liverpool Echo.


-->
Login
Email Address
Password
Remember me
Forgot your password?
REGISTER
CART
Duis autem
It is a long established fact that
ONLY $109.00
add to cart
Duis autem
It is a long established fact that
ONLY $95.00
add to cart
Duis autem
It is a long established fact that
ONLY $68.00
add to cart
Duis autem
It is a long established fact that
ONLY $74.00
add to cart
Duis autem
It is a long established fact that
ONLY $80.00
add to cart
Duis autem
It is a long established fact that
ONLY $65.00
add to cart
Duis autem
It is a long established fact that
ONLY $90.00
add to cart
Duis autem
It is a long established fact that
ONLY $75.00
add to cart
Duis autem
It is a long established fact that
ONLY $99.00
add to cart
Duis autem
It is a long established fact that
ONLY $76.00
add to cart
Duis autem
It is a long established fact that
ONLY $58.00
add to cart
Duis autem
It is a long established fact that
ONLY $112.00
add to cart
Home
UDT information
government
feeds
gossips
Resturant Offers
Mobiles
Electronics
Shoes
Bags
Watches
Tabs & Calender
Tabs
Calender
Forms
Input
Validation


{{project?.name}}
{{project?.description}}
{{project?.plans}}
Project Leaders
{{starter}}
Donation Swag!
{{reward}}
Volunteers
{{project?.volunteers}}
Goal Date:
{{project?.date}}
Goal:
${{project?.goal}}
We have raised ${{project?.raised}} of our ${{project?.goal}} goal!
project?.goal">We have met our goal of ${{project?.goal}} and have surpassed it by ${{project?.raised-project?.goal}}!


Google Assistant 2.0 vs Siri speed put to the test
by Rei PadlaThis won’t take long. We can tell you all you need to know about the difference between the Google Assistant and Siri but we want you to see for yourself which one is better and faster. The video below will tell you why. There is no bias here as ‘In Depth Tech Reviews’ was doing the same thing to both phones. The same questions and tasks were asked to each voice assistant but it is clear who is more efficient in handling the queries.
In the almost 8-minute video below, it only took the Google Assistant some two minutes to finish the tasks and answer the questions. The version of the Assistant here is 2.0 on the Pixel 4 XL while Siri is found on the iOS 13.2 on an iPhone.
The new Pixel 4 XL with the improved Google Assistant is said to be more powerful than ever. It should be faster too which means processing will be faster. Watch the full comparison video below:
The Google Assistant version 2 is the clear winner. It is able to take back-to-back commands almost immediately and without any lag. As for Siri, it frequently probes and even requires a lot of tapping or clicking on the phone when the Google Assistant is really smooth.
Siri keeps on asking many questions as if it doesn’t understand your first command. Perhaps it is not that “smart” compared to the Google Assistant. We remember before when Siri came first and had Google follow with a rival. The Assistant had so much potential that it is upgraded and made more advanced compared to Siri through the years.


Reconnection in Progress
A connection to another network is now underway! You will need to connect this laptop/PC/portable device to the new network ("~nextSSID~") to regain access to this demo.
As a reminder, this is the network you were on:
- SSID: "~prevSSID~"
- WLAN Type: ~prevWLAN~
This is the network that you will be going to:
- SSID: "~nextSSID~"
- WLAN Type: ~nextWLAN~


% include("/themes/uadmin/include/form-header.html"){}%>
${layoutContent}
<% include("/themes/uadmin/include/form-footer.html"){}%>


All Packages Class Hierarchy This Package Previous Next Index
Class BIT.highBIT.InstructionWide
java.lang.Object
|
+----BIT.highBIT.Instruction
|
+----BIT.highBIT.InstructionWide
- public class InstructionWide
- extends Instruction
Represents wide instrucion.
- See Also:
- Instruction
-
constbyte1
- Represents the upper byte of the constant if is iinc.
-
constbyte2
- Represents the lower byte of the constant if is iinc.
-
indexbyte1
- Represents the upper byte of the index to a local variable.
-
indexbyte2
- Represents the lower byte of the index to a local variable.
-
op
-
Represents the following wide opcode.
-
InstructionWide(int, DataInputStream, int, Routine)
- Constructor for InstructionWide class.
-
getInstructionType()
- Returns the type of this instruction.
-
getLength()
- Returns the length (in bytes) of this instruction including opcode.
op
protected int op
- Represents the following wide opcode.
indexbyte1
protected int indexbyte1
- Represents the upper byte of the index to a local variable.
indexbyte2
protected int indexbyte2
- Represents the lower byte of the index to a local variable.
constbyte1
protected int constbyte1
- Represents the upper byte of the constant if is iinc.
Otherwise, this variable is unused.
constbyte2
protected int constbyte2
- Represents the lower byte of the constant if is iinc.
Otherwise, this variable is unused.
InstructionWide
public InstructionWide(int opcode,
DataInputStream iStream,
int offset,
Routine routine)
- Constructor for InstructionWide class.
- Parameters:
- opcode - the opcode of this instruction
- iStream - the data input stream
getInstructionType
public short getInstructionType()
- Returns the type of this instruction.
- Overrides:
- getInstructionType in class Instruction
getLength
public int getLength()
- Returns the length (in bytes) of this instruction including opcode.
- Overrides:
- getLength in class Instruction
All Packages Class Hierarchy This Package Previous Next Index


[1]
Had recommended; None yet ...
[2]
Good reputation.; Inferior build.. Bad service.
[3]
Price. Features. viewfinder; Battery Life. Image Quality. Red-eye


QA systems are used in a variety of consumer-facing applications, but traditional QA evaluations do not yet reflect diverse user needs in realistic use cases. One such mismatch is that users would interact with QA systems through
interfaces—such as speaking to voice assistants, typing questions into a search engine, or even translating questions to languages supported by the QA system.
In this work, we advocate that practitioners construct a range of evaluations, reflecting real-world usage scenarios and potential users for their systems. We present:
- A detailed description of interface noise and associated ‘challenges of the channel’ for QA systems. We examine errors introduced by three kinds of interfaces: speech recognizers, keyboard interfaces, and translation engines.
- An extensive analysis of interface noise and its impact on the downstream question answering.
- An initial exploration of mitigation strategies for interface errors. Our mitigation strategies reduce BERT errors on interface noise by 31% on average.
You can find all the details in our paper
here.
Our error analysis highlights considerations to inform the design of future QA systems and evaluations. We emphasize the need for holistic evaluation of QA systems, showing that model selection based on benchmark dataset performance alone can be misleading.
Below we illustrate the three kinds of interface noise:


This Are the teams:
Fetch Teams
ADD A TEAM HERE
name
city
DT name
Fundation Date
FORM WITH IMAGE
name
city
DT name
Fundation Date
Image


patients headache (.) (.%) children study age pain reported years headaches {border-style px;} #ffffff;} Headache attack duration showed .±. results Korean family history migraine younger follow-up headache, relatively score suggested clinical data positive < TSH characteristics current findings frequency headache. hours studies symptoms Cephalalgia Table common group male patient patients. preschool preschoolers primary px; specific total used {font-family EEG abnormal according compared congenital diagnosis disease female findings. font-size having pediatric prevalence secondary severity symptoms, > (%), Chungnam Korea MRI National Pain University age. childhood considered double; factors followed hospital including increased number period present related study, tension-type (%) Fig. Neurol blood border-color border-width diagnosed did duration, half migraine, occipital percentage prognosis similar solid; terms underwent various years, {font-style {font-weight (.%), (n=, -beta Also, Attack Battistella Brain Child Classification Clinical ICHD International Mean Months Prevalence VAS [], age, article associated average background bilateral bold brain child courier; em; explain features fronto-temporal high included level location magnetic males, malformation. medical needed normal parents probable pt;} resonance study. test them, time unilateral visit Unexplained


git summary
Display information about a Git repository.
Part of `git-extras`.
More information: home page
- Display data about a Git repository:
git summary
- Display data about a Git repository since a commit-ish:
git summary commit|branch_name|tag_name
- Display data about a Git repository, merging committers using different emails into 1 statistic for each author:
git summary --dedup-by-email
- Display data about a Git repository, showing the number of lines modified by each contributor:
git summary --line


R/shiny-driver.R
ShinyDriver.Rd
Class to manage a shiny app and a phantom.js headless browser
app <- ShinyDriver$new(path = ".", loadTimeout = 5000, checkNames = TRUE, debug = c("none", "all", ShinyDriver$debugLogTypes), phantomTimeout = 5000, seed = NULL, cleanLogs = TRUE, shinyOptions = list())) app$stop() app$getDebugLog(type = c("all", ShinyDriver$debugLogTypes)) app$getValue(name, iotype = c("auto", "input", "output")) app$setValue(name, value, iotype = c("auto", "input", "output")) app$sendKeys(name = NULL, keys) app$getWindowSize() app$setWindowSize(width, height) app$getUrl() app$goBack() app$refresh() app$getTitle() app$getSource() app$takeScreenshot(file = NULL) app$findElement(css = NULL, linkText = NULL, partialLinkText = NULL, xpath = NULL) app$findElements(css = NULL, linkText = NULL, partialLinkText = NULL, xpath = NULL) app$waitFor(expr, checkInterval = 100, timeout = 3000) app$waitForValue(name, ignore = list(NULL, ""), iotype = "input", timeout = 10000, checkInterval = 400) app$listWidgets() app$checkUniqueWidgetNames() app$findWidget(name, iotype = c("auto", "input", "output")) app$expectUpdate(output, ..., timeout = 3000, iotype = c("auto", "input", "output"))
A ShinyDriver
instance.
Path to a directory containing a Shiny app, i.e. a
single app.R
file or a server.R
and ui.R
pair.
How long to wait for the app to load, in ms. This includes the time to start R.
How long to wait when connecting to phantomJS process, in ms.
Whether to check if widget names are unique in the app.
Whether to start the app in debugging mode. In debugging mode debug messages are printed to the console.
An optional random seed to use before starting the application. For apps that use R's random number generator, this can make their behavior repeatable.
Whether to remove the stdout and stderr logs when the Shiny process object is garbage collected.
A list of options to pass to runApp()
.
Name of a shiny widget. For $sendKeys
it can
be NULL
, in which case the keys are sent to the active
HTML element.
Type of the Shiny widget. Usually shinytest
finds the widgets by their name, so this need not be specified,
but Shiny allows input and output widgets with identical names.
Keys to send to the widget or the app. See the
sendKeys
method of the webdriver
package.
Scalar integer, the desired width of the browser window.
Scalar integer, the desired height of the browser window.
File name to save the screenshot to. If NULL
, then
it will be shown on the R graphics device.
CSS selector to find an HTML element.
Find
HTML elements based on their
innerText
.
Find
HTML elements based on their
innerText
. It uses partial matching.
Find HTML elements using XPath expressions.
A string scalar containing JavaScript code that evaluates to the condition to wait for.
How often to check for the condition, in milliseconds.
List of possible values that are to not be
considered valid. app$waitForValue
will continue to poll until
it finds a value not contained in ignore
.
Timeout for the condition, in milliseconds.
Character vector, the name(s) of the Shiny output widgets that should be updated.
When setting the value of an input, allow it to set the value of an input even if that input does not have an input binding.
For expectUpdate
these can be named arguments.
The argument names correspond to Shiny input widgets: each input
widget will be set to the specified value.
ShinyDriver$new()
function creates a ShinyDriver
object. It starts
the Shiny app in a new R session, and it also starts a phantomjs
headless browser that connects to the app. It waits until the app is
ready to use. It waits at most loadTimeout
milliseconds, and if
the app is not ready, then it throws an error. You can increase
loadTimeout
for slow loading apps. Currently it supports apps
that are defined in a single app.R
file, or in a server.R
and ui.R
pair.
app$stop()
stops the app, i.e. the external R process that runs
the app, and also the phantomjs instance.
app$getDebugLog()
queries one or more of the debug logs:
shiny_console
, browser
or shinytest
.
app$getValue()
finds a widget and queries its value. See
the getValue
method of the Widget
class.
app$setInputs()
sets the value of inputs. The arguments must all
be named; an input with each name will be assigned the given value.
app$uploadFile()
uploads a file to a file input. The argument must
be named and the value must be the path to a local file; that file will be
uploaded to a file input with that name.
app$getAllValues()
returns a named list of all inputs, outputs,
and export values.
app$setValue()
finds a widget and sets its value. See the
setValue
method of the Widget
class.
app$sendKeys
sends the specified keys to the HTML element of the
widget.
app$getWindowSize()
returns the current size of the browser
window, in a list of two integer scalars named ‘width’ and
‘height’.
app$setWindowSize()
sets the size of the browser window to the
specified width and height.
app$getUrl()
returns the current URL.
app$goBack()
“presses” the browser's ‘back’
button.
app$refresh()
“presses” the browser's ‘refresh’
button.
app$getTitle()
returns the title of the page. (More precisely
the document title.)
app$getSource()
returns the complete HTML source of the current
page, in a character scalar.
app$takeScreenshot()
takes a screenshot of the current page
and writes it to a file, or (if file
is NULL
) shows it
on the R graphics device. The output file has PNG format.
app$findElement()
find an HTML element on the page, using a
CSS selector or an XPath expression. The return value is an
Element
object from the webdriver
package.
app$findElements()
finds potentially multiple HTML elements,
and returns them in a list of Element
objects
from the webdriver
package.
app$waitFor()
waits until a JavaScript expression evaluates
to true
, or a timeout happens. It returns TRUE
is the
expression evaluated to true
, possible after some waiting.
app$waitForValue()
waits until the current application's
input
(or output
) value is not one of the supplied invalid
values. The function returns the value found if the time limit has not
been reached (default is 10 seconds). This function can be useful in
helping determine if an application has initialized or finished
processing a complex reactive situation.
app$listWidgets()
lists the names of all input and output
widgets. It returns a list of two character vectors, named input
and output
.
app$checkUniqueWidgetNames()
checks if Shiny widget names
are unique.
app$findWidget()
finds the corresponding HTML element of a Shiny
widget. It returns a Widget
object.
expectUpdate()
is one of the main functions to test Shiny apps.
It performs one or more update operations via the browser, and then
waits for the specified output widgets to update. The test succeeds if
all specified output widgets are updated before the timeout. For
updates that involve a lot of computation, you increase the timeout.
if (FALSE) { ## https://github.com/rstudio/shiny-examples/tree/master/050-kmeans-example app <- ShinyDriver$new("050-kmeans-example") expectUpdate(app, xcol = "Sepal.Width", output = "plot1") expectUpdate(app, ycol = "Petal.Width", output = "plot1") expectUpdate(app, clusters = 4, output = "plot1") }


--- title: Community author: rhamilto layout: page ---
PatternFly is a community of designers and developers collaborating to build a UI framework for enterprise web applications. There are a number of ways you can participate to help us improve and grow.
Subscribe to our mailing lists:


--- template: example.html title: d3 integration example shortdesc: Example of using ol3 and d3 together. docs: >
The example loads TopoJSON geometries and uses d3 (d3.geo.path
) to render these geometries to a canvas element that is then used as the image of an ol3 image layer.


Blockchain Note
Note for blockchain, bitcoin and all that…
Structure
Entity(human, business…anyone)
- Address1:
- Transactions1: Sent coin from other address to current address
- Transactions2: Sent coin from other address to current address
- Transactions3: Sent coin from other address to current address ……
- TransactionsN-2: Sent coin from current address to other address
- TransactionsN-1: Sent coin from current address to other address
- TransactionsN: Sent coin from current address to other address
- Balance: Coins/output from all those incoming transaction that have not yet being spent
- Private key 1
- Address2: {Transaction, Balance, Private key} …
- AddressN
Process of transaction
0) Initialize transaction 0) There is unspent bitcoin/transaction outputs(because they are essentially from other transactions) in the address’s balance 1) Initialize transaction from current address to other address with amount less than address’s balance 2) Sign the transaction
1) New transactions are broadcast to all nodes.
2) Each node collects new transactions into a block.
3) Each node works on finding a difficult proof of work for its block.
4) When a node finds a proof-of-work, it broadcasts the block to all nodes.
5) Nodes accept the block only if all transactions in it are valid and not already spent. 0) Once verified, the output address is now contain a new transaction. And the amount just sent becomes the unspent balance for this address
6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash.
所以在bitcoin中，一个node，或者说一个矿工？？在接收到别的矿工broadcast的block之后，先要验证这个block里面的transaction的validity，验证通过之后，再照着这个去找下一个block？
-
那么如果验证不通过呢？
-
是谁在initialize这个transaction？？？
-> Transaction
-
Transaction is, in principle, is just a handing over the control over a certain value in the block chain to another address.
2.1. 什么是address，address的概念.
猜想: An entity, might own multiple address, these addresses can be the payee or recipient of the blockchain transaction.
For each address there are zero or more transactions that have the address as output. When you did not send them over to someone else, the are called unspent bitcoins or unspent transaction outputs. The sum of those make up the balance of the address.


{{comment}}
Explore the workings of the Trove API (v3)
{% if comment %}{{comment}}
| parameter | value |
|---|---|
{{p}} | {{v | join(", ")}} |
{{ error }}
{% endif %} {% if data %}
{{ data|safe }}
{% endif %}
Version 3 of the API was made available in July 2023. For more information about the changes made in version 3 see the official release notes. I've also created a summary of breaking changes for users wanting to update their code from version 2 to version 3.
Click on any of the examples below to open them in this console, then modify them to suit. If you want to use them in your own code you'll need to get an API key and add the key to your request either using the key
parameter, or setting X-API-KEY
in the request headers.
See the Trove API v3 documentation for a full list of available parameters and detailed information on constructing queries.
For more examples, tools, and hacks using the Trove API see the GLAM Workbench.
See the Trove API v3 status page to check for problems.
{{ section.section_note|markdown }}
{% endif %} {% for example in section.examples %}| parameter | parameter note | value | value note |
|---|---|---|---|
{{ param.param }}
|
{% if param.param_note %}{{ param.param_note|markdown }}{% endif %} |
{{ param.value}}
|
{% if param.value_note %}{{ param.value_note|markdown }}{% endif %} |
{{ example.note|markdown }}
{% endif %} {% endfor %} {% endfor %}


{% extends "_layouts/default.html" %}
{% set title = "Authorization for script by @name@ /@id@" %}
{% set description = "OAuth page" %}
{% block body %}
authorization for script of @name@ finished
You can close this page.
The Touch Develop script should resume in a different tab or window.


--- layout: page-company title: Company ---
Montage Studio was founded on the simple vision of a true web-native universal SDK, a framework and authoring of unprecedented depth, combined as one creative, cloud-based collaborative environment. In Montage Studio, web designers and developers work seamlessly together, from start to finish, to deliver rich applications, made with HTML5, across billions of devices.
Montage Studio is based in Sunnyvale, CA


Elizabeth Scheltens Portfolio
I'm a Kenyon College and Teach for America alum and master's candiate at the Missouri School of Journalism. I coded this site myself using Bootstrap.
These days, I work as a data reporter, graphic artist and podcast producer with the digital outlet DecodeDC, a project of Scripps News.


Facebook
Instagram
Linkedin
Preference
Sort by Drop-Down
StateOne
StateTwo
StateThree
StateThree
StateThree
StateThree
StateThree
Hello! You can Search from here.
This is to find any result for specific state.
Hello! You can Search from here.
This is to find any result for specific state.
Filter
Search Form
×
Preference
Sort by Drop-Down
StateOne
StateTwo
StateThree
StateThree
StateThree
StateThree
StateThree
Hello! You can Search from here.
This is to find any result for specific state.
Hello! You can Search here!
This is to find any result for specific state.
.col-md-6
.col-md-6
.col-md-6
.col-md-6
.col-md-6
.col-md-6
.col-md-6
.col-md-6
.col-md-6


USE - "Use" an external file (OS-9 RMA)
[
label
] USE
filename
[.
ext
]
Uses source code from the source file given by
filename
into the current source file during assembly. Several directives have been included to provide legacy support for a wide range of assemblers. See
INCLUDE
for more information.


The Tools menu
This menu handles the tools and general options.
Browse API
Opens the
ZAP API
in the system's default browser.
Options....
This displays the
Options dialog
.
Note that
add-ons
can add additional menu items.
See also
The top level menu
UI Overview
for an overview of the user interface


Being John Malkovich (1999)
John Cusack, Cameron Diaz, Catherine Keener, Orson Bean, Mary Kay Place, John Malkovich, Charlie Sheen. Music by Carter Burwell. Cinematography by Lance Acord. Screenplay by Charlie Kaufman. Directed by Spike Jonze. 112 minutes.
Rated R, 4 stars (out of five stars)
Review by Ed Johnson-Ott, NUVO Newsweekly www.nuvo-online.com Archive reviews at http://us.imdb.com/ReviewsBy?Edward+Johnson-Ott
To receive reviews by e-mail at no charge, send subscription requests to<EMAIL_ADDRESS>or e-mail<EMAIL_ADDRESS>with the word "subscribe" in the subject line.
Three things I learned from "Being John Malkovich": when getting on the elevator for your first day of work on the 7 1/2th floor of a building, always bring your crowbar; don't stand in the way of your wife's actualization as a man; and, whenever entering a portal into the mind of another human being, wear old clothes, because, hey, it's muddy in there.
"Being John Malkovich" is the most original film to come down the pike in a very long time. Wildly surrealistic, yet presented in a down-to-earth, funky style, this is the kind of movie that sticks in your head. After savoring the sheer inventiveness of the storyline, you roll around the wealth of ideas contained within it. From the ethics of relationships and politics of immortality to the very nature of identity itself, there's a lot to think about here.
Just don't forget to have fun. Clearly, all parties involved in the making of the film certainly did, starting with writer Charles Kaufman. "I wrote 'Being John Malkovich' without an outline," he explains in the press notes, "blindly, with no sense of direction or purpose. It's important to me that I don't have a map before I start. This allows me to surprise myself, stay engaged, discover things, and, hopefully, allow the unconscious to surface."
Spike Jonze (Mark Wahlberg's naïve buddy in "Three Kings") takes it from there. The white-hot director of the Beastie Boy's "Sabotage," an award-winning parody of '70s TV cop shows, as well as numerous other music videos and commercials, eschews typical MTV flash for his feature film debut. Jonze wisely realized that a storyline this unusual is most effectively presented in a low-key style. His flat, matter-of-fact approach works perfectly.
And then there's the cast. John Cusack plays control freak Craig Schwartz, a street performer who periodically gets decked by parents objecting to his remarkably expressive, but decidedly erotic puppet shows. Over the years, his marriage to obsessive pet store employee Lotte (Cameron Diaz) has devolved. Once passionate lovers, the two are now little more than courteous roommates.
Financially strapped, Craig takes a job as an entry-level file clerk at LesterCorp, located on the 7 1/2th floor of a Manhattan Building. Navigating around Dr. Lester (Orson Bean), his 105 year-old boss and Floris (Mary Kay Place), Lester's dotty secretary, Craig tries to settle into his new position, but two things keep him distracted. First, there's the beautiful and imperious Maxine (Catherine Keener), who delights in tormenting Craig over his obvious lust for her. And then there's the hole behind the file cabinet, which turns out to be a portal into the mind of actor John Malkovich. Craig learns that anyone who enters the portal gets whooshed into the subconscious of Malkovich, where they can experience life from his point of view (with enough concentration, you can even influence his actions). After 15 minutes, the visitor gets ejected and unceremoniously dumped in a ditch on the side of the New Jersey turnpike.
Then things get a little weird.
By the way, if you're concerned that I gave away too much of the plot, rest assured - - I barely scratched the surface. One of the most satisfying aspects of the fable is that Kaufman is not content to simply milk laughs from his bizarre set-up. Instead, he crawls into the dark premise as completely as Craig crawls into Malkovich, rummaging around and toying with the various philosophical implications of compromising another person's identity. He also examines the consequences of the Malko-visits to Craig, Lotte, Maxine and, of course, John Malkovich himself.
The performances are superb. Malkovich (best known to mainstream audiences for his work in "Dangerous Liaisons," "In the Line of Fire," and as head psychopath in the guilty-pleasure "Con Air") tweaks his own image in a dandy self-deprecating turn.
As always, John Cusack nails his part, handily pulling viewers along even as Craig's actions become unconscionable. The big surprises come from Catherine Keener and Cameron Diaz, both playing against type. Kenner, usually cast in icy subordinate roles, is terrific as a highly intelligent, extremely manipulative femme fatale. Cameron Diaz, barely recognizable under a mess of brown, curly hair, sheds her perpetually sunny smile and draws big laughs as a woman thrown into extreme sexual confusion after taking a ride in Malkovich.
"Being John Malkovich" stumbles towards the end, as Jonze and Kaufman try too hard to resolve the various subplots. Additional characters and increasingly complex explanations lead to a cluttered finale. Regardless, this contemporary "Alice in Wonderland" is a real treat. I enjoyed watching "Being John Malkovich," but only later, after reflecting on the film, did its resonance fully hit me.  Truer words were never spoken.
© 1999 Ed Johnson-Ott
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews