# sax js
A sax-style parser for XML and HTML.
Designed with [node](http://nodejs.org/) in mind, but should work fine in the browser or other CommonJS implementations.
## What This Is
- A very simple tool to parse through an XML string.
- A stepping stone to a streaming HTML parser.
- A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML docs.
## What This Is (probably) Not
- An HTML Parser - That’s a fine goal, but this isn’t it. It’s just XML.
- A DOM Builder - You can use it to build an object model out of XML, but it doesn’t do that out of the box.
- XSLT - No DOM = no querying.
- 100% Compliant with (some other SAX implementation) - Most SAX implementations are in Java and do a lot more than this does.
- An XML Validator - It does a little validation when in strict mode, but not much.
- A Schema-Aware XSD Thing - Schemas are an exercise in fetishistic masochism.
- A DTD-aware Thing - Fetching DTDs is a much bigger job.
## Regarding `<!DOCTYPE`s and `<!ENTITY`s
The parser will handle the basic XML entities in text nodes and attribute values: & < > ' ". It’s possible to define additional entities in XML by putting them in the DTD. This parser doesn’t do anything with that. If you want to listen to the ondoctype event, and then fetch the doctypes, and read the entities and add them to parser.ENTITIES, then be my guest.
Unknown entities will fail in strict mode, and in loose mode, will pass through unmolested.
## Usage
- var sax = require(”./lib/sax”),
- strict = true, // set to false for html-mode parser = sax.parser(strict);
- parser.onerror = function (e) {
- // an error happened.
}; parser.ontext = function (t) {
// got some text. t is the string of text.}; parser.onopentag = function (node) {
// opened a tag. node has “name” and “attributes”}; parser.onattribute = function (attr) {
// an attribute. attr has “name” and “value”}; parser.onend = function () {
// parser stream is done, and ready to have more stuff written to it.};
parser.write(‘<xml>Hello, <who name=”world”>world</who>!</xml>’).close();
// stream usage // takes the same options as the parser var saxStream = require(“sax”).createStream(strict, options) saxStream.on(“error”, function (e) {
// unhandled errors will throw, since this is a proper node // event emitter. console.error(“error!”, e) // clear the error this._parser.error = null this._parser.resume()}) saxStream.on(“opentag”, function (node) {
// same object as above}) // pipe is supported, and it’s readable/writable // same chunks coming in also go out. fs.createReadStream(“file.xml”)
.pipe(saxStream) .pipe(fs.createWriteStream(“file-copy.xml”))
## Arguments
Pass the following arguments to the parser function. All are optional.
strict - Boolean.  Default: false.
opt - Object bag of settings regarding string formatting. All default to false.
Settings supported:
- trim - Boolean. Whether or not to trim text and comment nodes.
- normalize - Boolean. If true, then turn any whitespace into a single space.
- lowercase - Boolean. If true, then lowercase tag names and attribute names in loose mode, rather than uppercasing them.
- xmlns - Boolean. If true, then namespaces are supported.
- position - Boolean. If false, then don’t track line/col/position.
## Methods
write - Write bytes onto the stream. You don’t have to do this all at once. You can keep writing as much as you want.
close - Close the stream. Once closed, no more data may be written until it is done processing the buffer, which is signaled by the end event.
resume - To gracefully handle errors, assign a listener to the error event. Then, when the error is taken care of, you can call resume to continue parsing. Otherwise, the parser will not continue while in an error state.
## Members
At all times, the parser object will have the following members:
line, column, position - Indications of the position in the XML document where the parser currently is looking.
startTagPosition - Indicates the position where the current tag starts.
closed - Boolean indicating whether or not the parser can be written to. If it’s true, then wait for the ready event to write again.
strict - Boolean indicating whether or not the parser is a jerk.
opt - Any options passed into the constructor.
tag - The current tag being dealt with.

## Events
All events emit with a single argument. To listen to an event, assign a function to on<eventname>. Functions get executed in the this-context of the parser object. The list of supported events are also in the exported EVENTS array.
When using the stream interface, assign handlers using the EventEmitter on function in the normal fashion.
error - Indication that something bad happened. The error will be hanging out on parser.error, and must be deleted before parsing can continue. By listening to this event, you can keep an eye on that kind of stuff. Note: this happens much more in strict mode. Argument: instance of Error.
text - Text node. Argument: string of text.
doctype - The <!DOCTYPE declaration. Argument: doctype string.
processinginstruction - Stuff like <?xml foo=”blerg” ?>. Argument: object with name and body members. Attributes are not parsed, as processing instructions have implementation dependent semantics.
sgmldeclaration - Random SGML declarations. Stuff like <!ENTITY p> would trigger this kind of event. This is a weird thing to support, so it might go away at some point. SAX isn’t intended to be used to parse SGML, after all.
opentag - An opening tag. Argument: object with name and attributes. In non-strict mode, tag names are uppercased, unless the lowercase option is set. If the xmlns option is set, then it will contain namespace binding information on the ns member, and will have a local, prefix, and uri member.
closetag - A closing tag. In loose mode, tags are auto-closed if their parent closes. In strict mode, well-formedness is enforced. Note that self-closing tags will have closeTag emitted immediately after openTag. Argument: tag name.
attribute - An attribute node. Argument: object with name and value. In non-strict mode, attribute names are uppercased, unless the lowercase option is set. If the xmlns option is set, it will also contains namespace information.
comment - A comment node. Argument: the string of the comment.
opencdata - The opening tag of a <![CDATA[ block.
cdata - The text of a <![CDATA[ block. Since <![CDATA[ blocks can get quite large, this event may fire multiple times for a single block, if it is broken up into multiple `write()`s. Argument: the string of random character data.
closecdata - The closing tag (]]>) of a <![CDATA[ block.
opennamespace - If the xmlns option is set, then this event will signal the start of a new namespace binding.
closenamespace - If the xmlns option is set, then this event will signal the end of a namespace binding.
end - Indication that the closed stream has ended.
ready - Indication that the stream has reset, and is ready to be written to.
noscript - In non-strict mode, <script> tags trigger a “script” event, and their contents are not checked for special xml characters. If you pass noscript: true, then this behavior is suppressed.
## Reporting Problems
It’s best to write a failing test if you find an issue. I will always accept pull requests with failing tests if they demonstrate intended behavior, but it is very hard to figure out what issue you’re describing without a test. Writing a test is also the best way for you yourself to figure out if you really understand the issue you think you have with sax-js.


Enter the url of the es6 module to test:
The module must export its tests as 'tests' (an array of functions with return type 'boolean').
Load script!


Deploying network ...
The network is not connected.
Newly created edges will posess a random bandwidth / delay out of the given range
Bandwidth will range from:
Delay will range from:


--- layout: post status: publish published: true title: As Time Goes By 2.0 第一次改版纪念贴 author: Leask author_login: leask author_email<EMAIL_ADDRESS>author_url: https://leaskh.com wordpress_id: 273 wordpress_url: http://leaskh.wordpress.com/2008/03/20/as-time-goes-by-2-0-%e7%ac%ac%e4%b8%80%e6%ac%a1%e6%94%b9%e7%89%88%e7%ba%aa%e5%bf%b5%e8%b4%b4 date: '2008-03-20 21:00:48 +0800' date_gmt: '2008-03-20 21:00:48 +0800' categories: tags: [] comments: [] ---


Before Change
// Change the text output format from unicode to UTF-8
args.connect.text_factory = str
// Database handler
args.sq = args.connect.cursor()
// Run and image IDs
args.run_id = 0
args.image_id = 0
After Change
for row in args.sq.execute("SELECT name FROM sqlite_master WHERE type="table""):
if row["name"] == "runinfo":
runinfo = True
elif row["name"] == "metadata":
metadata = True
if runinfo is True and metadata is True:
for row in args.sq.execute("SELECT MAX(run_id) AS max FROM runinfo"):
if row["max"] is not None:


Are you tired of the same old, boring, cloying cookies?
Are you ready for something fresh and fishy?
Try Pat "Pattycake's" one of kind Salmon Cookies! The cookies with a surprise! Topping off these lemon zested cookies is the tang of smoked salmon on top. All with the delightful crunch of shortbread. A cookie you will never forget!
Icing gummi bears pudding chocolate bar pudding. Marshmallow dessert donut croissant pie cake sesame snaps sesame snaps bear claw. Pie fruitcake cupcake dessert marzipan. Jelly-o marzipan cookie fruitcake tiramisu pudding jelly beans apple pie. Cotton candy jelly candy canes brownie caramels dragée marzipan. Cake lemon drops soufflé cake chocolate cake gummies gingerbread. Bonbon lemon drops chupa chups. Powder sweet roll sweet sweet jelly beans icing. Chocolate muffin biscuit tart halvah chocolate cake sesame snaps fruitcake caramels. Donut marshmallow chocolate.
Icing gummi bears pudding chocolate bar pudding. Marshmallow dessert donut croissant pie cake sesame snaps sesame snaps bear claw. Pie fruitcake cupcake dessert marzipan. Jelly-o marzipan cookie fruitcake tiramisu pudding jelly beans apple pie. Cotton candy jelly candy canes brownie caramels dragée marzipan. Cake lemon drops soufflé cake chocolate cake gummies gingerbread. Bonbon lemon drops chupa chups. Powder sweet roll sweet sweet jelly beans icing. Chocolate muffin biscuit tart halvah chocolate cake sesame snaps fruitcake caramels. Donut marshmallow chocolate.
Where you can find us!
- Seattle:
4453 Big Fish Road - Tokyo
4453 Ōkina Sakana Lane - Dubai
4453 Samakat Kabira Street - Paris
4453 Gros Poisson Avenue - Lima
4453 Gran Pez Court


Command what appears in your Status Bar with HideStatusBarItemsPro
by Anthony BouchardYour handset’s Status Bar displays pertinent information about current events, including the time, battery percentage, internet connection source, VPN connection, and even the date if you happen to be using using an iPad. But it also displays various icons and indicators depending on what your device is doing, such as location usage, personal hotspot usage, web loading activity, and more.
Those who’d like a greater command over what appears in the Status Bar may want to try using a jailbreak tweak called HideStatusBarItemsPro by iOS developer Chashmeet Singh. Just as the name denotes, this add-on lets users choose what does and doesn’t appear in their pwned handset’s Status Bar.
Upon installing HideStatusBarItemsPro, users will find a new dedicated preference pane in the Settings app where they can choose what appears (and doesn’t appear) in their Status Bar on the Lock screen and throughout the rest of the operating system independently:
The items that can be hidden from the Status Bar with HideStatusBarItemsPro include:
- The time
- Do Not Disturb icon
- Airplane Mode icon
- Signal strength
- Carrier text
- Wi-Fi icon
- Battery level
- Battery percentage
- Bluetooth icon
- Alarm icon
- Location icon
- Orientation Lock icon
- Screen mirroring icon
- VPN icon
The tweak can also be enabled or disabled on demand in its entirety, and the developer includes an Apply Changes button at the bottom of the preference pane to help users save their changes after making them.
If you’re a minimalist and you’d prefer to see as little in the Status Bar as possible, then you’d probably like what HideStatusBarItemsPro brings to the table. On the other hand, many of these icons are displayed for a reason, and hiding them could result in forgetting about what’s happening in the background, such as being connected to a VPN, leaving your device in Do Not Disturb Mode, or being unable to discern your current battery level at a glance.
If you’re interested in trying HideStatusBarItemsPro, then you can purchase the tweak for $1.00 from the Packix repository in your package manager of choice. The tweak is validated to work with all jailbroken iOS 11 devices, and may also work on newer versions.
What will you be hiding from your Status Bar with HideStatusBarItemsPro? Let us know in the comments section.


Technical Blog
Technology
July 19th, 2015
Recursion is a very powerful function in programming. To use it, you need to recognize when you can create a base case where you know what the result of calling the function will be. You also need to have some way of moving toward that base case. Then, it's a matter of calling the function on itself. It can be quite confusing, sort of like the movie Inception, but with practice, you can get the hang of it and it will save you time in the long run if you can recognize when to use it. For a more in depth description, check out this article: Recursion


Breaking: NCAA Announces Ruling On Memphis Star James Wiseman
by Chris RosvoglouThe NCAA has finally decided how many games it will suspend James Wiseman for the financial help he received from Penny Hardaway.
Roughly two weeks ago, the college basketball world was struck with stunning news as Wiseman was ruled ineligible to play. He managed to play in two more games because of an emergency temporary restraining order.
Following those two contests, the five-star freshman decided to withdraw his lawsuit against the NCAA regarding his eligibility status.
Wiseman withdrew his lawsuit in hopes that it would help speed up the NCAA’s decision. Clearly that worked out in his favor.
The NCAA released the following statement:
“James Wiseman, a freshman on the University of Memphis men’s basketball team, must sit 11 additional games (12 total) based on recruiting inducements his family received before he enrolled at Memphis and for competing in three games while ineligible.”
Wiseman will be cleared to play by Jan. 12, when the Tigers take on the South Florida Bulls.
The NCAA also announced that Wiseman must donate $11,500 to a charity of his choice.
Although the Tigers will have to find ways to win without their best player over the next two months, the fact that they’ll have Wiseman for the majority of their conference schedule helps ease the sting of losing him right now.
Wiseman now has plenty of time to prove to scouts that he could be the No. 1 pick in the 2020 NBA Draft.
Memphis will have to move past this dilemma and shift focus to tonight’s contest against Little Rock.


Create User
Members :
{{opt}}
First Name :
First Name is required
First Name should contain only alphabets
Middle Name :
Middle Name is required
Middle Name should contain only alphabets
Last Name :
Last Name is required
Last Name should contain only alphabets
Mobile Number :
Mobile Number is required
Enter 10 digit mobile number
Email Address :
Email is required
Email should be in pattern
Unit Details :
{{ occupancy.wingBuilding }}-{{ occupancy.flatNumber }}
Select Unit Details
Alternate Number :
Alternate Number is required
Enter 10 digit alternate number
LandLine Number :
LandLine Number should be in Number
Intercom Number :
Intercom Number should be at least 6 digit
Property Type:
{{isProperty}}
Residential Property :
{{isResidential}}
Commercial Property :
{{iCommercial}}
Club MemberShip :
{{isClubMembership}}
OwnerShip :
{{isOwnership}}
Possetion Date :
Move in Date :
Move Out Date :
Save
Cancel
Show the List


This is the initial phase of any software project. On the testing side, there are a number of scenarios in which you can enter a project. It could be a legacy system, pre-development, or mid development.
No matter the scenario, the goal will remain the same, at the end of this phase you will want to have a solid understanding of the project.
Before your team begins working on a new project or application, there will hopefully be some sort of "kickstart" meeting. No matter what your team may call it, it is a good forum to ask key questions.
PROJECT OVERVIEW DOCWhen working in a deadline oriented environment, it is important to triage issues and prioritize testing tasks.
You may be working on multiple projects, so outlining the first, secondary, and tertiary features ahead of time will allow yourself to become dialed in more quickly.
FEATURE PRIORITIES DOCTo keep your sanity, manage your test operations effectively. Define roles, processes, and schedules that can be easily followed.
TEST OPERATIONS DOC


Police tape off Fife street after two men injured in 'disturbance'
Officers rushed to close Links Street, Kirkcaldy, after reports of the incident on Saturday morning.
by Daniel Morrow, https://www.dailyrecord.co.uk/authors/daniel-morrow/Two men have been rushed to hospital after a disturbance on a Fife street.
Officers swooped on Links Street, Kirkcaldy at around 11am this morning.
A section of the road was taped off while police officers investigated the incident.
Both men were taken to the Victoria Hospital after suffering injuries.
A spokesperson for Police Scotland said: "We were called to attend an incident at 10.50am on Links Street, Kirkcaldy, after reports of a disturbance.
"Two men were taken to Victoria Hospital. The extent of their injuries remains unclear but they are not thought to life-threatening at this stage.
"Enquiries are ongoing."


Hello
I am visual designer for all things web and mobile. I have have many years of experience designing and building websites and ux/ui solutions for products and brands that reach millions of customers. I believe in clean design with a focus on user experience, aesthetics and product success.
Projects
A few examples of my work.


Logout
Contact us
Settings
My questionnaires
My profile
Change password
Current password:
New password:
Confirm new password:
Change email
Current email adress:
New email adress:
Confirm new email adress:
Account
Hello user1
Account created on 26.04.2017
a


Uses of Interface
org.apache.qpid.protonj2.engine.DeliveryTagGenerator
Package
Description
-
Uses of DeliveryTagGenerator in org.apache.qpid.protonj2.client
Modifier and TypeMethodDescriptionSenderOptions.deliveryTagGeneratorSupplier()
StreamSenderOptions.deliveryTagGeneratorSupplier()
Modifier and TypeMethodDescriptionSenderOptions.deliveryTagGeneratorSupplier
(Supplier<DeliveryTagGenerator> supplier) Configures aSupplier
which provides unique instances ofDeliveryTagGenerator
objects for anySender
created using these options.StreamSenderOptions.deliveryTagGeneratorSupplier
(Supplier<DeliveryTagGenerator> supplier) Configures aSupplier
which provides unique instances ofDeliveryTagGenerator
objects for anyStreamSender
created using these options. -
Uses of DeliveryTagGenerator in org.apache.qpid.protonj2.engine
Modifier and TypeMethodDescriptionSender.setDeliveryTagGenerator
(DeliveryTagGenerator generator) Configures aDeliveryTagGenerator
that will be used to create and set aDeliveryTag
value on each newOutgoingDelivery
that is created and returned from theSender.next()
method. -
Uses of DeliveryTagGenerator in org.apache.qpid.protonj2.engine.impl
Modifier and TypeClassDescriptionclass
Proton providedDeliveryTagGenerator
utility.class
Built in TransferDeliveryTag
generator that uses a fixed size tag pool to reduce GC overhead by reusing tags that have been released from settled messages.class
A Built in protonDeliveryTagGenerator
that creates new tags using a sequential numeric value which is encoded using the most compact representation of the numeric value.class
Built in protonDeliveryTagGenerator
that creates newDeliveryTag
values backed by randomly generated UUID instances.Modifier and TypeMethodDescriptionabstract DeliveryTagGenerator
ProtonDeliveryTagGenerator.BUILTIN.createGenerator()
ProtonSender.getDeliveryTagGenerator()
Modifier and TypeMethodDescriptionProtonSender.setDeliveryTagGenerator
(DeliveryTagGenerator generator)


KUFFS A film review by Ken Johnson Copyright 1992 Ken Johnson
100 min., PG-13, Action/Comedy, 1992 Director: Bruce A. Evans Cast: Christian Slater, Tony Goldwyn, Milla Jovovich, Bruce Boxleitner, Troy Evans, Leon Rippy, Scott Williamson
Bum Slater finds out that his girlfriend Jovovich is two months pregnant. Unable to handle the thought of getting married and having a baby, Slater skips out on Jovovich. He goes to see his brother, who is a rent-a-cop in San Francisco and owns his own district. Slater's brother gets killed by a hitman. Slater inherits his brother's district and sets out to find the hitman and make him pay for what he has done.
KUFFS is a wonderful film for those people who like action films but yet don't want them to be too serious, and for people who like to go out for a good laugh. On a zero to five scale, I give KUFFS a four. KUFFS is rated PG-13 for explicit language, violence, adult situations, and adult humor.
KUFFS is not Christian Slater's best film. In my opinion PUMP UP THE VOLUME has been Slater's best film (which received a five on my scale). Slater's worst film has been TWISTED (which I gave a three). KUFFS comes in between these two films. In his career, Christian Slater has played a variety of people; a skateboarding punk (in GLEAMING THE CUBE), a brilliant psychotic kid (in TWISTED), a teenager in need of help (HEATHERS), an outlaw (in YOUNG GUNS 2 and ROBIN HOOD: PRINCE OF THIEVES), a rebel (in PUMP UP THE VOLUME), and now a cop (well, it had to come around sometime, didn't it?)
Milla Jovovich, the Russian supermodel, has been in one film so far, RETURN TO THE BLUE LAGOON. I have not yet seen RETURN TO THE BLUE LAGOON so I can't comment on her performance. She put in a very good performance in this film. She does, however, take second stage to Christian Slater, who is obviously the main draw to this film. All of the actors in this film did a very good job. Tony Goldwyn is Slater's short time partner and is basically around for comic relief so Slater doesn't have to cover the entire film. And is that fat cop Robbie Cultrane? I missed the name in the credits.
KUFFS is a very inventive film. It has come up with what is probably the most hilarious use for subtitles in the movie industry. KUFFS also blows away those bleeps used to cover up foul language on television.
KUFFS is not a strict comedy like NAKED GUN 2 1/2. It does have its share of the laughs though. Likewise, KUFFS is not a strict action film. On how popular KUFFS is with audiences I really can't tell you. KUFFS opened on Friday and I saw it on Sunday night. There was a total of eight people in the theater, but those eight people seemed to have enjoyed the film.
So, for a very inventive film that is well worth going to see, definitely don't miss this film. It is worth $6.50, or whatever the ticket price where you are.
Ken J.
.
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


About
While the idea of tar started out as a great idea, it’s evolved to include multiple different formats, flags, options, and implementations. It has gotten too complicated. The star program gets rid of the extraneous flags and options. It is simple, clean, secure, and reliable. It is coded in the Crystal language, so the program itself is easy to read and understand. Everything about star is simple: the program, the file format, and its processes.
Star is a file format that simplifies file archiving. It strips all files of OS-level data to improve cross-platform compatibility. Because of this simplicity, low-level systems without dedicated filesystems can still read whole files without writing anything to disk.
If you want to know more about star
, check out the whitepaper.


ABAP syntax highlighter
based on
prism.js
REPORT zdtpload. TABLES: rsbkdtpt. DATA: lcl_dtp TYPE REF TO cl_rsbk_dtp, lcl_request TYPE REF TO cl_rsbk_request, lcl_filter TYPE REF TO cl_rsbc_filter, w_loc_dtp TYPE rsbkdtpnm, lv_dtps TYPE TABLE OF rsbkdtpnm. w_loc_dtp = 'DTP ID'. lcl_dtp = cl_rsbk_dtp=>factory( w_loc_dtp ). TRY. CALL METHOD lcl_dtp->if_rsbk_dtp_execute~create_request RECEIVING r_r_request = lcl_request. CATCH cx_rs_not_found . CATCH cx_rs_foreign_lock . CATCH cx_rs_failed . ENDTRY. TRY. CALL METHOD lcl_request->if_rsbk_request~doit EXPORTING i_no_commit = rs_c_false. CATCH cx_rs_failed . ENDTRY.
Result:


About
Work
Contact
Hey I am Mimic
a web developer
These are some of my projects
"Tribute Page"
"Tribute Page"
"Tribute Page"
"Tribute Page"
"Tribute Page"
"Tribute Page"
Show all
let's work together...
How do you take your coffee?
Facebook
GitHub
Twitter
Send a mail
Call me


Name
DOB:
movie Darbar ABCD Gang Tip
Show Timings 9am 11am 4pm 7pm 10pm
Select class platinum Gold Silver
Location chicago newyork mexico fiyand cernal
Phone number
NUmber Of Tickets 1 2 3 4
submit Reset


+++
title = "CS3 Conference 2021"
linkTitle = "cs32021"
+++
{{< blocks/cover title="" image_anchor="bottom" height="max" color="primary" >}}
{{< /blocks/cover>}}
{{< blocks/section color="primary" >}}
{{% blocks/feature icon="fa-calendar" title="25-29 January 2021" color="secondary" %}}
This year the conference will be held in these dates following the tradittion of previous events
{{% /blocks/feature %}}
{{% blocks/feature icon="fas fa-map-marker" title="Virtual, from anywhere" color="secondary" %}}
This year the conference will run in virtual mode.
{{% /blocks/feature %}}
{{% blocks/feature icon="fas fa-project-diagram" title="Social Networking" color="secondary" %}}
Take the opportunity to exchange ideas with other members of the community and enjoy some (virtual) coffess together.
{{% /blocks/feature %}}
{{< /blocks/section>}}


Analyzing results from the experiment.
Yes, users are completing my goal by clicking on the link and watching the video. User are stopping at the Accessibility page watching the video and going back to main page. In this particular case the path or funnel to complete my goal is a twostep process which very simple and straight forward. Setting up content experiment consists of: the experiment-setup wizard, list of experiments, and individual reports for each experiment.
Benefits of Content Experiment.
With Content Experiments, you can:
- Compare how different web pages or app screens perform using a random sample of your users
- Define what percentage of your users are included in the experiment
- Choose which objective you’d like to test
- Get updates by email about how your experiment is doing
Some of the suggestions from usability test were to make placement changes, use larger font size, and button with color. Since the testers had seen both versions of my goal, they had good ideas of changes they would like to see. For example, instead of having a link that redirects the user to different page having the Accessibility video on the main page. My main take away from user testing on goal experiment is to always keep design focus on user. I can take their suggestion and further add another experiment and evaluate those results to have supporting data before I implement final changes.
I am definitely going to increase the font size of the link on my homepage and add color so it is more visible. Also going to follow Google’s Testing Guidelines: test only few elements, use high-volume pages, make bold changes, and keep testing. Overall process of setting up the content experiment was simple, variant wizard tool was easy is easy to use and you can choose what level you want to make changes.


MassRoute
MassRoute is made possible by
@MassDot
.
Learn more
Destinations
Inbound
Outbound
MassRoute is made possible by
@MassDot
.
Learn more
Stops
MassRoute is made possible by
@MassDot
.
Learn more
ETA
Refresh
MassRoute is made possible by
@MassDot
.
Learn more


Conflict Urbanism: Infrapolitics explores the role that infrastructure and politics play in shaping urban space. We understand infrapolitics as those political actions and consequences that occur below or besides the threshold of political legibility, often - but not exclusively - through the physical, political and social infrastructures that underpin urban life. We take infra to mean not just infrastructure but also below or under - the defining conditions of infrastructure.
Infrastructure is often the medium through which infrapolitics occurs, but with its specificity it also conditions and influences these actions and their consequences. Our working definition of infrastructure goes beyond the basic understanding of infrastructure as just the invisible physical networks that allow for the flow of goods, people, or ideas. We understand that infrastructures operate simultaneously at different levels and are often made up of political, social, poetical, technological, as well as physical elements.
Infrapolitics are used by both the powerful and the powerless, by governments, corporations, citizens associations, or individuals, as acts of oppression, dispossession, exclusion, protest or resistance. However, these acts occur below official politics or normal means of political participation. For example, infrapolitics exist in the informality with which governments execute their laws, which favor certain individuals or groups over others, or in apparently nonpolitical acts of resistance by the population, such as practices of tax evasion by tenant farmers which de facto repeal a harvest tax.
Similarly, infrapolitics can also occur through highly technological infrastructures. We call these technopolitics, a subset of infrapolitics which are based on the use or abuse of technology and its unequal distribution in society, to carry out political actions that do not belong to the official methods of political participation.
| Name | Project role | Title | |
|---|---|---|---|
| Laura Kurgan | Principal Investigator | Graduate School of Architecture, Planning and Preservation |<EMAIL_ADDRESS>|
| Anupama Rao | Principal Investigator | History Department, Barnard College |<EMAIL_ADDRESS>|
| Michelle McSweeney | Project Lead | Graduate School of Architecture, Planning and Preservation |<EMAIL_ADDRESS>|
| Juan Francisco Saldarriaga | Project Lead | Graduate School of Architecture, Planning and Preservation |<EMAIL_ADDRESS>|
| Anna Kathleen Stokes | Research Assistant | Graduate School of Architecture, Planning and Preservation | |
| Laura Sun-Kyung Lee | Research Assistant | Graduate School of Architecture, Planning and Preservation | |
| Eric Ryan Pietraszkiewicz | Research Assistant | Graduate School of Architecture, Planning and Preservation |


To filter query results
1 Do one of the following:
• Click the Filter List button, for example, ().
• Right-click an entity and select Select Filter.
The Filter Setup dialog box appears.
2 Click Filter Wizard.
Note: When you invoke the Filter Setup dialog box, you can choose from among the stored filters. If you select a filter, it remains in effect until you select a different filter or quit DIScover.
3 The Attributes list allows you to choose the descriptive quality that you are searching for, for example, an entity’s symbol name. From the Attribute list, choose an attribute, for example, If statements.
4 The Operations list allows you to choose the numerical or string operation you obtain a match by (in the symbol name example, operation options are “string starts with ...” and so on). From the Operation list, choose an operation.
5 The Arguments field allows you to enter the criteria you want to apply to your operation, for example, symbol names starting with the letter “b”. In the Argument field, type an argument.
6 Click Add to Results.
The Filter Wizard displays the filter string in the Flow Chart and Access Expression fields.
7 To supply additional filter criteria, repeat steps 3 to 6.
8 Click Apply.
9 Click OK.
The filtered list appears for viewing in the Results window.
While a filter is in effect, the Filter List button at the bottom of the Results window is highlighted and its numbering changes from n of m to n of p from m. This translates as n items selected from a subset of p items filtered from a total of m items. For example, a label of 0 of 42 from 216 means that there are no items currently selected, there are 42 items displayed as a result of the current list filter, and there are 216 items in the complete list.


This is some content within a DIV, shown inside this window instead
Play around with Window 1 (iframe content)
Play around with Window 2 (inline content)
Play around with Window 3 (Ajax content)
Play around with Window 4 (Content from a DIV on page)


HTML tables allow web developers to arrange data into rows and columns.
As we go further in HTML tables, table content can be grouped together according to their specific area.
The HTML
 defines a set of rows defining the head of the columns of the table.
The HTML
 encapsulates a set of table rows (

 Items	 Expenditure

 Donuts	 3,000

 Totals	 21,000

| Items | Expenditure |
|---|---|
| Donuts | 3,000 |
| Stationery | 18,000 |
| Totals | 21,000 |
The HTML <colgroup> defines a group of columns within a table.
The HTML <col> element defines a column within a table and is used for defining common semantics on all common cells. It is generally found within a <colgroup> element

 Items	 Expenditure

 Donuts	 3,000

 Totals	 21,000

| Items | Expenditure |
|---|---|
| Donuts | 3,000 |
| Stationery | 18,000 |
| Totals | 21,000 |


--- layout: page permalink: /resume/ extra_css: - /css/resumeCSS/reset.css - /css/resumeCSS/style.css extra_js: - http://code.jquery.com/jquery-1.11.3.min.js - /js/modernizr.js - /js/main.js ---
Led a group of 10 students in the department. Supervised and recorded conferences. Negotiated and coordinated with other departments. Organized and arranged several university-wide events, including "Law Film Week" and "Moot Court".
Oct. 2009 – June 2011Interned in a leading Chinese brokerage and investment bank. Learned daily business processes and Chinese stock trading rules. Worked as an account manager, served customers, promoted wealth management products. Made speeches and slides for branch manager.
Read more Nov. 2012 – Feb. 2013Snapgram is a photo sharing Web site developed by our team (3 members) with Express, Jade, MySQL, GM, Mocha packages in Node.js. The site contains the basic login and logout functionality, enables users to upload and share photos from local devices, to follow or unfollow other users, to search and view photos, and to display photo feeds from followed users. Designed front end pages and user flows using Jade and Bootstrap. Connected front end to back end in the main JavaScript file. Tested the functionalities of the Web site using Mocha and Should. Fixed several bugs and improved performance when handling large amount of concurrent requests and followers.
Jan. 2014 – May. 2014


About me
Click the image to get information!
Family Time
Click the image to get information!
Dating Time
Click the image to get information!


Kanbari of the Iron Fortress PV 3 - SubStationAlpha - .ass
Real Time Subtitle Parsing straight from Matroska File. (No Styling)
Requires high bandwidth - cpu and memory resources, not practical for mass use!
Trailer by Wit Studio subtitle by Damedesuyo
Kimi no Na wa PV - SubStationAlpha - .ass
Trailer by CoMix Wave Films subtitle by CoalGoats
Inferno Trailer - SubRip - .srt
Trailer Inferno and subtitle ripped from: Subtitled Trailers


Some simple proofs
Please copy the file
SRC/simple_proofs
and replace the automatic proof tactic
auto
with the elementary tactics
assumption
,
intros
, and
apply
.


A note on DS4 Dialog headings
Because the Dialog component markup was built in a forward-looking way (e.g. for DS6),
we have opted to remove the <header/>. This change
necessitates some changes for the DS4 version of the dialog, specifically in the
following ways:
- The first H2 heading will become the de facto dialog title for the dialog,
and therefore, we suggest you place it at the beginning of the
dialog__body. This will ensure it is semantically
correct, and won't interfere with layout of the body content.
- The close button is currently required for accessibility, whether or
not your design calls for it. This is to ensure that your dialog can be closed, and is a
landmark for limited sight users. However, if you have a need to hide the close button
we have provided a class dialog--hide-close-button which will
hide the button from view and from screen readers. Use the
dialog--hide-close-button class with caution
as we cannot guarantee your site will pass accessibilty tests.
- Using a "back" button is not encouraged, but is supported to ensure
backward compatibility with existing features (e.g. sub page, multistep).
- The search dialog has been removed as an example, as design and engineering feel it's
featues and markup should be placed within the dialog__body.


>
<
Slide One
Something Something Something
Slide Two
Something Something Something
Slide Three
Something Something Something


Xrayglasses Demo Page
If your browser supports SVG foreignobject, press and hold "X" to activate Xrayglasses mode.
Coming soon:
- Documentation
- Hidden "xray-only" classes for adding secret content
- Better ways to customize xray styles and lens shape
- Support for touch input
- Better compatibility with your existing CSS
- Prevent activation when textual form elements have focus


Welcome to Brendan's Page
Hello there, awesome person!
Youtube
Facebook
Instagram
Music
Bass
Guitar
Longboard


{% load i18n %} {% block modal-body %}
We have sent an SMS to your phone number (+91 ***** *1531) with a 8-digit code to enter below.


Sold Out King Jungkook Sells Out The Expensive GENTLE MONSTER Sunglasses Worn By Him In Both Colours Available
by dose-nelJungkook was spotted wearing the "Double Bread 02 Brown" sunglasses by GENTLE MONSTER during Bon Voyage. Fans were extremely impressed by his suave look and went on to check out the sunglasses worn by him. Jungkook,being no stranger to selling out stuff managed to sell out the sunglasses priced at 260 USD in not only the brown but also black colour. Fans were yet again impressed by his insane selling and top tier brand power.


In this page, you can find some of my favorite resources. Keep in mind I used them before, so you can trust me a bit! I have separated them in 3 different sections. The first section contains resources UCF has to offer. The second section contains class related resources. Finally, the last section contains anything related to life! I hope you enjoy these resources as much as I do.
Perla Del Castillo
Health
Health Center at UCF
This is an excellent resource on campus. Many people don't know about it, but yes, appointments here are covered in your tuiton. Therefore, they are free! When it comes to medical exams, you might need to have your insurance in file, but other than that, consultations are free. Click here to find out more information.
CAPS - Counseling and Psychological Services
If you are struggling with classes, have any family problems, or you just don't know what you are doing, then I would recommend considering this resource. With CAPS, you can find the help you need. A certain amount of sessions is covered in your tuiton. I used this service before and I am sure it helped me a bunch. Click here to find out more information.
Academics
LEARN - Learning Environment and Academic Research Network
Interested in doing research? If you are thinking "yes" or even "maybe", then this is the right place to start looking into it. LEARN is a program within the Office of Undergraduate Research (OUR) that focuses on research opportunities for STEM majors. I was part of LEARN in the 2016-2017 cohort and I was also a peer mentor for this program in the 2017-2018 cohort. Within this program, I was able to be part of a small community. It definitely helped in my first year at UCF. Click here to see what LEARN has to offer!
(More resources coming soon). Updated: January 17th, 2018.
Object-Oriented Programming - Java
It took me a while to find videos that would explain the following concepts quickly. I believe this guy is pretty good at teaching them. I hope you like him too!
Abstract Classes with ExampleTake a moment to look at more of his videos in his Youtube Channel. Remember, these videos are only for understanding concepts. You still got to practice your JAVA!
Updated: January 17th, 2018.
How to Organize Yourself Better
Trello
Trello is a great tool to keep yourself organized and up to date with all of your assignments and tests. It lets you create boards, lists, and items for those lists! You are also able to add power-ups (which are like enhacements) to your board. It is a free power-up per board, but if you would like more, then you would have to pay. If you only need one, then the tool is free!
Personally I only need a calendar power-up so I am able to take a look at what comes next in the semester. Take a look at the following images to give you a taste of how trello works:
Figure 1: How trello overall looks like.
Figure 2: How a board looks like with lists. This is an example of how I have a class for each list and things to do for each one.
Figure 3: A calendar showing what comes next based on your due dates. You can also add color labels to differentiate between lists!
Updated: October 3rd, 2018.


public class MultiTypedMessagesFactory extends java.lang.Object implements IMultiTypedMessagesFactory
public class Program { public static class MyRequestMessage { public double Number1; public double Number2; }Implementation of sender (client):
public static void main(String[] args) { try { // Create multi-typed receiver. IMultiTypedMessagesFactory aFactory = new MultiTypedMessagesFactory(); IMultiTypedMessageReceiver aReceiver = aFactory.createMultiTypedMessageReceiver();
// Register message types which can be processed. aReceiver.registerRequestMessageReceiver(myIntegerHandler, Integer.class); aReceiver.registerRequestMessageReceiver(myMyRequestMessageHandler, MyRequestMessage.class);
// Attach input channel and start listening e.g. using TCP. IMessagingSystemFactory aMessaging = new TcpMessagingSystemFactory(); IDuplexInputChannel anInputChannel = aMessaging.createDuplexInputChannel("tcp://<IP_ADDRESS>:8033/"); aReceiver.attachDuplexInputChannel(anInputChannel);
System.out.println("Service is running. Press ENTER to stop."); new BufferedReader(new InputStreamReader(System.in)).readLine();
// Detach input channel to stop the listening thread. aReceiver.detachDuplexInputChannel(); } catch (Exception err) { EneterTrace.error("Service failed.", err); } }
private static void onIntegerMessage(Object eventSender, TypedRequestReceivedEventArgs<String> e) { int aNumber = e.getRequestMessage();
// Calculate factorial. int aResult = 1; for (int i = 1; i <= aNumber; ++i) { aResult *= i; }
System.out.println(aNumber + "! =" + aResult);
// Send back the result. IMultiTypedMessageReceiver aReceiver = (IMultiTypedMessageReceiver)eventSender; try { aReceiver.sendResponseMessage(e.getResponseReceiverId(), aResult, Integer.class); } catch (Exception err) { EneterTrace.error("Failed to send the response message.", err); } }
private static void onMyReqestMessage(Object eventSender, TypedRequestReceivedEventArgs<MyRequestMessage> e) { MyRequestMessage aRequestMessage = e.getRequestMessage();
double aResult = aRequestMessage.Number1 + aRequestMessage.Number2;
System.out.println(aRequestMessage.Number1 + " + " + aRequestMessage.Number2 + " = " + aResult);
// Send back the message. IMultiTypedMessageReceiver aReceiver = (IMultiTypedMessageReceiver)eventSender; try { aReceiver.sendResponseMessage(e.getResponseReceiverId(), aResult, Double.class); } catch (Exception err) { EneterTrace.error("Failed to send the response message.", err); } }
private static EventHandler<TypedRequestReceivedEventArgs<Integer>> myIntegerHandler = new EventHandler<TypedRequestReceivedEventArgs<Integer>>() { @Override public void onEvent(Object sender, TypedRequestReceivedEventArgs<Integer> e) { onStringMessage(sender, e); } };
private static EventHandler<TypedRequestReceivedEventArgs<MyRequestMessage>> myMyRequestMessageHandler = new EventHandler<TypedRequestReceivedEventArgs<MyRequestMessage>>() { @Override public void onEvent(Object sender, TypedRequestReceivedEventArgs<MyRequestMessage> e) { onMyReqestMessage(sender, e); } };
}
public class Program { public static class MyRequestMessage { public double Number1; public double Number2; }
public static void main(String[] args) { // Create multi-typed sender. IMultiTypedMessagesFactory aFactory = new MultiTypedMessagesFactory(); ISyncMultitypedMessageSender aSender = aFactory.createSyncMultiTypedMessageSender();
try { // Attach output channel and be able to communicate with the service. IMessagingSystemFactory aMessaging = new TcpMessagingSystemFactory(); IDuplexOutputChannel anOutputChannel = aMessaging.createDuplexOutputChannel("tcp://<IP_ADDRESS>:8033/"); aSender.attachDuplexOutputChannel(anOutputChannel);
// Request to calculate two numbers. MyRequestMessage aRequestMessage = new MyRequestMessage(); aRequestMessage.Number1 = 10; aRequestMessage.Number2 = 20; double aResult = aSender.sendRequestMessage(aRequestMessage, Double.class, MyRequestMessage.class); System.out.println(aRequestMessage.Number1 + " + " + aRequestMessage.Number2 + " = " + aResult);
// Request to calculate factorial. int aFactorial = aSender.sendRequestMessage((int)6, Integer.class, Integer.class); System.out.println("6! = " + aFactorial); } catch (Exception err) { EneterTrace.error("Calculating failed.", err); }
// Detach input channel and stop listening to responses. aSender.detachDuplexOutputChannel(); }
}
| Constructor and Description |
|---|
MultiTypedMessagesFactory()
Constructs the factory with default XmlSerializer.
|
MultiTypedMessagesFactory(ISerializer serializer)
Constructs the factory.
|
| Modifier and Type | Method and Description |
|---|---|
IMultiTypedMessageReceiver |
createMultiTypedMessageReceiver()
Creates multityped message receiver which can receive request messages and send response messages.
|
IMultiTypedMessageSender |
createMultiTypedMessageSender()
Creates multityped message sender which can send request messages and receive response messages.
|
ISyncMultitypedMessageSender |
createSyncMultiTypedMessageSender()
Creates mulityped message sender which sends a request message and then waits for the response.
|
ISerializer |
getSerializer()
Gets serializer for messages.
|
GetSerializerCallback |
getSerializerProvider()
Gets callback for retrieving serializer based on response receiver id.
|
IThreadDispatcherProvider |
getSyncDuplexTypedSenderThreadMode()
Gets the threading mode which is used for receiving connectionOpened and connectionClosed events in SyncDuplexTypedMessageSender.
|
int |
getSyncResponseReceiveTimeout()
Gets the timeout which is used for SyncMultitypedMessageSender.
|
MultiTypedMessagesFactory |
setSerializer(ISerializer serializer)
Sets serializer for messages.
|
MultiTypedMessagesFactory |
setSerializerProvider(GetSerializerCallback serializerProvider)
Sets callback for retrieving serializer based on response receiver id.
|
MultiTypedMessagesFactory |
setSyncDuplexTypedSenderThreadMode(IThreadDispatcherProvider threadingMode)
Sets the threading mode for receiving connectionOpened and connectionClosed events for SyncDuplexTypedMessageSender.
|
MultiTypedMessagesFactory |
setSyncResponseReceiveTimeout(int milliseconds)
Sets the timeout which is used for SyncMultitypedMessageSender.
|
public MultiTypedMessagesFactory()
public MultiTypedMessagesFactory(ISerializer serializer)
serializer
- serializer which will serialize messages.public IMultiTypedMessageSender createMultiTypedMessageSender()
IMultiTypedMessagesFactory
createMultiTypedMessageSender
in interface IMultiTypedMessagesFactory
public ISyncMultitypedMessageSender createSyncMultiTypedMessageSender()
IMultiTypedMessagesFactory
createSyncMultiTypedMessageSender
in interface IMultiTypedMessagesFactory
public IMultiTypedMessageReceiver createMultiTypedMessageReceiver()
IMultiTypedMessagesFactory
createMultiTypedMessageReceiver
in interface IMultiTypedMessagesFactory
public MultiTypedMessagesFactory setSyncDuplexTypedSenderThreadMode(IThreadDispatcherProvider threadingMode)
threadingMode
- threading that shall be used for receiving connectionOpened and connectionClosed events.public IThreadDispatcherProvider getSyncDuplexTypedSenderThreadMode()
public MultiTypedMessagesFactory setSerializer(ISerializer serializer)
serializer
- serializerpublic ISerializer getSerializer()
public GetSerializerCallback getSerializerProvider()
public MultiTypedMessagesFactory setSerializerProvider(GetSerializerCallback serializerProvider)
serializerProvider
- public MultiTypedMessagesFactory setSyncResponseReceiveTimeout(int milliseconds)
milliseconds
- timeout in millisecondspublic int getSyncResponseReceiveTimeout()


Summary: Weather Patterns based on the Distance from Equator
We wanted to observe the changes in the weather pattern of about 500 different cities across the world, with varying distances from the equator, placed in different latitudes and longtitudes.To this end we selected the sample of cities for observation randomly, based on their latitudes and longitutes, from the OpenWeatherMap API. One part of the analysis dealt with figuring out if the temperature gets hotter as the cities get closer to the equator. For the analysis part, we came up with a variety of charts derived from our dataset. We observe that the temperature of the cities raises relatively as the latitude nears towards the equator, and peaks at the equator. The temperature slowly starts dropping as we move away from the equator.


My Dear ,
Sorry to hear this news and understand that the fault is not from me.
I'm happy to inform you about my success in getting those funds transferred under the cooperation of a new partner from South Korea.
Presently ,I'm in South Korea for investment projects with my own share of the total sum. Meanwhile,i didn't forget your past efforts and attempts to assist me in transferring those funds despite that it failed us some how.
Now contact my secretary in Benin his name is Mr Ignatuis Michael on his-email address below.
<EMAIL_ADDRESS>Ask him to send you the total of $700.000.00 which i kept for your compensation for all the past efforts and attempts to assist me in this matter.
I appreciated your efforts at that time very much. So feel free and get in touch with my secretary Mr Ignatuis and instruct him where to send the amount to you.
Please do let me know immediately you receive it so that we can share joy after all the suffering at that time.
At the moment, I’m very busy here because of the investment projects which i and the new partner are having at hand, finally, remember that I had forwarded instruction to the secretary on your behalf to receive that money, So feel free to get in touch with Mr Ignatuis Michael,He will send the amount to you without any delay ok.
Regards,
Emeka Benjamin
Get a FREE AOL Email account with 2GB of storage. Plus, share and store photos and experience exclusively recorded live music Sessions from your favourite artists. Click Here for more information.


Week 8 Race and Ethnicity
13-15 October, 2021
Levi Sands
Race and Ethnicity
- Ethnicity is "a social category of people who share a common culture"
- Some examples?
- My Argentine-American friends?
- "Ethic groups have a consciousness of their common cultural bond"
- Race "is a group treated as distinct in society based on certain
characteristics"
Implications of Race
- Despite being socially constructed race has real implications
What is Critical Race Theory (CRT)
- Came from legal studies
- Focused on outcomes
- These different outcomes are not always driven by explicit racism
- Racist outcomes can result from institutional, social and cultural dynamics (and more)
Class Activity
In your groups discuss the following:
- How does all of this make you feel?
- Should we try to be a color-blind society?
- Possible solutions to these problems?
- Define white privilege as a group
- How can we deal with modern segregation? (https://demographics.coopercenter.org/racial-dot-map)
- Black Lives Matter and Police Violence
- White Privilege - "Term for societal privileges that benefit white people in Western countries beyond what is commonly experienced by non-white people under the same social, political, or economic circumstances."
Group Activity
Make a "reference sheet" entry for each of the terms (with their long definitions) below.
Use this format for the activity: Bolded Person (if applicable) - term - short definition - example
- Aversive Racism - Negative evaluations of racial/ethnic minorities are realized by a
persistent avoidance of interaction with other racial and ethnic groups.
- Implicit Bias - Jennifer Eberhardt - Relatively unconscious and relatively automatic
features of prejudiced judgment and social behavior.
- Laissez-Faire Racism - Blames minorities for their poorer economic situations, viewing
it as the result of cultural inferiority
- Color-Blind Racism - Eduardo Bonilla-Silva - The disregard of racial characteristics
when selecting which individuals will participate in some activity or receive some
service
- Institutional Racism - Form of racism expressed in the practice of social and political
institutions
- White Privilege - Societal privileges that benefit white people in Western countries
beyond what is commonly experienced by non-white people under the same social,
political, or economic environment


3 Files
Files are sorted by type and then listed depth-first from the systems
components trees.
3.1 Lisp
3.1.1 select.asd
- Location
select.asd
- Systems
select (system)
3.1.2 select/package.lisp
- Parent
select (system)
- Location
package.lisp
- Packages
slct
3.1.3 select/select-dev.lisp
- Dependency
package.lisp (file)
- Parent
select (system)
- Location
select-dev.lisp
- Internal Definitions
-
3.1.4 select/select.lisp
- Dependency
select-dev.lisp (file)
- Parent
select (system)
- Location
select.lisp
- Exported Definitions
-
- Internal Definitions
-
This document was generated on December 23, 2017 using texi2html 5.0.


We have created a mobile version of the popular party game Catchphrase.
Catchphrase is usually played in groups (4+ people), on two teams, and the objective is to get your team to guess the word on the screen (by saying clues that do not include the actual word or rhyme with it). When the word is guessed correctly, the device is passed to the next person, and when the timer runs out, the team that is not holding the device wins the round.
Built for iOS. Optimized for any size iPhone, iPod touch, and iPad, and can be used in both landscape and portrait.
Our app allows for the creation of different teams and games, with customizable settings. The actual gameplay is an intuitive interface of the word and timer (optionally visible), and the next word is shown with a simple swipe gesture and animation. When the round is near completion, the device vibrates, and a "time's up" sound plays when it is over and the user is prompted to record who won.
The game lobby grid allows the user to view ongoing games or create a new game.
The team grid allows the user to create a new game or view performance history and team stats.
The settings view allows the user to change the word library, customize the timer, set the number of rounds, delete all data, and view game rules.
The game view allows the user to swipe to change words. Sounds/Vibrations signal the end of the round and a menu appears for easy scoring.


Login
BENEFITS OF TRACKING
Employees
When employees know that management is monitoring their performance and behavior, and that management keeps track of what they do with their time, employees tend to be more focused and less distracted in their work, which improves the overall productivity of the business.
Some Example of Employee Tracker App
More Info
Employee-monitoring is the use of various methods of workplace surveillance to gather information about the activities and locations of staff members.
Follow Us
facebook
instgram
TERMS & CONDITIONS PRIVACY POLICY © 2020 ePOWER™


A machine readable data format that describes the creators of a website.
Humans.txt is is not designed to be machine parsable, if it was it would defeat its original purpose. credits.json is designed to sit alongside a humants.txt and provide the same information in a format that machines can understand.
It makes it possible to write tools that can automatically analyse and track who worked on websites across the Internet.


The blue text below is fetched from Netlify's Environment Variables.
If I didn't just show it here, you wouldn't be able to find it anywhere.
Call your APIs in the lambda function I taught you to create and enjoy having a backend without having a backend!


To do
- Get "International Driver's License" from AAA
- Call bank to make sure that they won't freeze your credit/debit card for being abroad
- Consider getting a temporary international calling/data plan through your mobile provider
- Email Joe if any changes to your travel plans
To take
- Plug adaptor (so that you can charge your devices)
- Sun protection (sun screen, hat, glasses)
- Bathing suit, goggles, and beach towels
- Hiking gear (shoes, comfortable clothes)
- At least 1 "cold" outfit (sweater, pants, etc.) (evenings can be chilly)
- A nice-ish outfit if you want to go to mass
- A flashlight


1 |
|
|
/** |
2 |
|
|
* @file blmc_joint_module.hpp |
3 |
|
|
* @author Manuel Wuthrich |
4 |
|
|
* @author Maximilien Naveau<EMAIL_ADDRESS>|
5 |
|
|
* @license License BSD-3-Clause |
6 |
|
|
* @copyright Copyright (c) 2019, New York University and Max Planck Gesellschaft. |
7 |
|
|
* @date 2019-07-11 |
8 |
|
|
*/ |
9 |
|
|
#pragma once |
10 |
|
|
|
11 |
|
|
#include <iostream> |
12 |
|
|
#include <array> |
13 |
|
|
#include <stdexcept> |
14 |
|
|
#include <math.h> |
15 |
|
|
#include <Eigen/Eigen> |
16 |
|
|
|
17 |
|
|
#include "blmc_drivers/devices/motor.hpp" |
18 |
|
|
#include "blmc_robots/common_header.hpp" |
19 |
|
|
#include "blmc_robots/mathematics/polynome.hpp" |
20 |
|
|
|
21 |
|
|
namespace blmc_robots |
22 |
|
|
{ |
23 |
|
|
|
24 |
|
|
// TODO what is the best scope for those homing-related types? |
25 |
|
|
|
26 |
|
|
/** |
27 |
|
|
* @brief Possible return values of the homing |
28 |
|
|
*/ |
29 |
|
|
enum class HomingReturnCode { |
30 |
|
|
//! Homing was not initialized and can therefore not be performed. |
31 |
|
|
NOT_INITIALIZED = 0, |
32 |
|
|
//! Homing is currently running. |
33 |
|
|
RUNNING, |
34 |
|
|
//! Homing is succeeded. |
35 |
|
|
SUCCEEDED, |
36 |
|
|
//! Homing failed. |
37 |
|
|
FAILED |
38 |
|
|
}; |
39 |
|
|
|
40 |
|
|
/** |
41 |
|
|
* @brief Possible return values of the go_to |
42 |
|
|
*/ |
43 |
|
|
enum class GoToReturnCode { |
44 |
|
|
//! GoTo is currently running. |
45 |
|
|
RUNNING, |
46 |
|
|
//! Position has been reached succeeded. |
47 |
|
|
SUCCEEDED, |
48 |
|
|
//! Robot is stuck(hit an obstacle) before reaching its final position. |
49 |
|
|
FAILED |
50 |
|
|
}; |
51 |
|
|
|
52 |
|
|
|
53 |
|
|
/** |
54 |
|
|
* @brief State variables required for the homing. |
55 |
|
|
*/ |
56 |
|
|
struct HomingState { |
57 |
|
|
//! Id of the joint. Just use for debug prints. |
58 |
|
|
int joint_id = 0; |
59 |
|
|
//! Max. distance to move while searching the encoder index. |
60 |
|
|
double search_distance_limit_rad = 0.0; |
61 |
|
|
//! Offset from home position to zero position. |
62 |
|
|
double home_offset_rad = 0.0; |
63 |
|
|
//! Step size for the position profile. |
64 |
|
|
double profile_step_size_rad = 0.0; |
65 |
|
|
//! Timestamp from when the encoder index was seen the last time. |
66 |
|
|
long int last_encoder_index_time_index = 0; |
67 |
|
|
//! Number of profile steps already taken. |
68 |
|
|
uint32_t step_count = 0; |
69 |
|
|
//! Current target position of the position profile. |
70 |
|
|
double target_position_rad = 0.0; |
71 |
|
|
//! Current status of the homing procedure. |
72 |
|
|
HomingReturnCode status = HomingReturnCode::NOT_INITIALIZED; |
73 |
|
|
}; |
74 |
|
|
|
75 |
|
|
|
76 |
|
|
|
77 |
|
|
/** |
78 |
|
|
* @brief The BlmcJointModule class is containing the joint information. It is |
79 |
|
|
* here to help converting the data from the motor side to the joint side. It |
80 |
|
|
* also allows the calibration of the joint position during initialization. |
81 |
|
|
*/ |
82 |
|
|
class BlmcJointModule |
83 |
|
|
{ |
84 |
|
|
public: |
85 |
|
|
|
86 |
|
|
/** |
87 |
|
|
* @brief Construct a new BlmcJointModule object |
88 |
|
|
* |
89 |
|
|
* @param motor is the C++ object allowing us to send commands and receive |
90 |
|
|
* sensor data. |
91 |
|
|
* @param motor_constant (\f$ k \f$) is the torque constant of the motor |
92 |
|
|
* \f$ \tau_{motor} = k * i_{motor} \f$ |
93 |
|
|
* @param gear_ratio is the gear ratio between the motor and the joint. |
94 |
|
|
* @param zero_angle is the angle between the closest positive motor index |
95 |
|
|
* and the zero configuration. |
96 |
|
|
* @param reverse_polarity |
97 |
|
|
* @param max_current |
98 |
|
|
*/ |
99 |
|
|
BlmcJointModule(std::shared_ptr<blmc_drivers::MotorInterface> motor, |
100 |
|
|
const double& motor_constant, |
101 |
|
|
const double& gear_ratio, |
102 |
|
|
const double& zero_angle, |
103 |
|
|
const bool& reverse_polarity=false, |
104 |
|
|
const double& max_current=2.1); |
105 |
|
|
|
106 |
|
|
/** |
107 |
|
|
* @brief Set the joint torque to be sent. |
108 |
|
|
* |
109 |
|
|
* @param desired_torque (Nm) |
110 |
|
|
*/ |
111 |
|
|
void set_torque(const double& desired_torque); |
112 |
|
|
|
113 |
|
|
/** |
114 |
|
|
* @brief Set the zero_angle. The zero_angle is the angle between the |
115 |
|
|
* closest positive motor index and the zero configuration. |
116 |
|
|
* |
117 |
|
|
* @param zero_angle (rad) |
118 |
|
|
*/ |
119 |
|
|
void set_zero_angle(const double& zero_angle); |
120 |
|
|
|
121 |
|
|
/** |
122 |
|
|
* @brief Define if the motor should turn clock-wize or counter clock-wize. |
123 |
|
|
* |
124 |
|
|
* @param reverse_polarity true:reverse rotation axis, false:do nothing. |
125 |
|
|
*/ |
126 |
|
|
void set_joint_polarity(const bool& reverse_polarity); |
127 |
|
|
|
128 |
|
|
/** |
129 |
|
|
* @brief send the joint torque to the motor. The conversion between joint |
130 |
|
|
* torque and motor current is done automatically. |
131 |
|
|
*/ |
132 |
|
|
void send_torque(); |
133 |
|
|
|
134 |
|
|
/** |
135 |
|
|
* @brief Get the maximum admissible joint torque that can be applied. |
136 |
|
|
* |
137 |
|
|
* @return double |
138 |
|
|
*/ |
139 |
|
|
double get_max_torque() const; |
140 |
|
|
|
141 |
|
|
/** |
142 |
|
|
* @brief Get the sent joint torque. |
143 |
|
|
* |
144 |
|
|
* @return double (Nm). |
145 |
|
|
*/ |
146 |
|
|
double get_sent_torque() const; |
147 |
|
|
|
148 |
|
|
/** |
149 |
|
|
* @brief Get the measured joint torque. |
150 |
|
|
* |
151 |
|
|
* @return double (Nm). |
152 |
|
|
*/ |
153 |
|
|
double get_measured_torque() const; |
154 |
|
|
|
155 |
|
|
/** |
156 |
|
|
* @brief Get the measured angle of the joint. |
157 |
|
|
* |
158 |
|
|
* @return double (rad). |
159 |
|
|
*/ |
160 |
|
|
double get_measured_angle() const; |
161 |
|
|
|
162 |
|
|
/** |
163 |
|
|
* @brief Get the measured velocity of the joint. This data is computed on |
164 |
|
|
* board of the control card. |
165 |
|
|
* |
166 |
|
|
* @return double (rad/s). |
167 |
|
|
*/ |
168 |
|
|
double get_measured_velocity() const; |
169 |
|
|
|
170 |
|
|
/** |
171 |
|
|
* @brief Get the measured index angle. There is one index per motor rotation so |
172 |
|
|
* there are gear_ratio indexes per joint rotation. |
173 |
|
|
* |
174 |
|
|
* @return double (rad). |
175 |
|
|
*/ |
176 |
|
|
double get_measured_index_angle() const; |
177 |
|
|
|
178 |
|
|
/** |
179 |
|
|
* @brief Get the zero_angle_. These are the angle between the starting pose |
180 |
|
|
* and the theoretical zero pose. |
181 |
|
|
* |
182 |
|
|
* @return double (rad). |
183 |
|
|
*/ |
184 |
|
|
double get_zero_angle() const; |
185 |
|
|
|
186 |
|
|
/** |
187 |
|
|
* @brief Set control gains for PD position controller. |
188 |
|
|
* |
189 |
|
|
* @param kp P gain ( (Nm) / rad ). |
190 |
|
|
* @param kd D gain ( (Nm) / (rad/s) ). |
191 |
|
|
*/ |
192 |
|
|
void set_position_control_gains(double kp, double kd); |
193 |
|
|
|
194 |
|
|
/** |
195 |
|
|
* @brief Execute one iteration of the position controller. |
196 |
|
|
* |
197 |
|
|
* @param target_position_rad Target position (rad). |
198 |
|
|
* |
199 |
|
|
* @return Torque command (Nm). |
200 |
|
|
*/ |
201 |
|
|
double execute_position_controller(double target_position_rad) const; |
202 |
|
|
|
203 |
|
|
/** |
204 |
|
|
* @deprecated !!!!!!! |
205 |
|
|
* @brief This method calibrate the joint position knowing the angle between |
206 |
|
|
* the closest (in positive torque) motor index and the theoretical zero |
207 |
|
|
* pose. Warning, this method should be called in a real time thread! |
208 |
|
|
* |
209 |
|
|
* @param[in][out] angle_zero_to_index (rad) this is the angle between the |
210 |
|
|
* closest (in positive torque) motor index and the theoretical zero pose. |
211 |
|
|
* @param[out] index_angle (rad) is the angle where we met the index. This |
212 |
|
|
* angle is relative to the configuration when the robot booted. |
213 |
|
|
* @param[in] mechanical_calibration defines if the leg started in the zero |
214 |
|
|
* configuration or not |
215 |
|
|
* @return true if success. |
216 |
|
|
* @return false if problem arose. |
217 |
|
|
*/ |
218 |
|
|
bool calibrate(double& angle_zero_to_index, |
219 |
|
|
double& index_angle, |
220 |
|
|
bool mechanical_calibration = false); |
221 |
|
|
|
222 |
|
|
/** |
223 |
|
|
* @brief Initialize the homing procedure. |
224 |
|
|
* |
225 |
|
|
* This has to be called before update_homing(). |
226 |
|
|
* |
227 |
|
|
* @param joint_id ID of the joint. This is only used for debug prints. |
228 |
|
|
* @param search_distance_limit_rad Maximum distance the motor moves while |
229 |
|
|
* searching for the encoder index. Unit: radian. |
230 |
|
|
* @param home_offset_rad Offset from home position to zero position. |
231 |
|
|
* Unit: radian. |
232 |
|
|
* @param profile_step_size_rad Distance by which the target position of the |
233 |
|
|
* position profile is changed in each step. Set to a negative value to |
234 |
|
|
* search for the next encoder index in negative direction. Unit: |
235 |
|
|
* radian. |
236 |
|
|
*/ |
237 |
|
|
void init_homing(int joint_id, double search_distance_limit_rad, double |
238 |
|
|
home_offset_rad, double profile_step_size_rad=0.001); |
239 |
|
|
|
240 |
|
|
/** |
241 |
|
|
* @brief Perform one step of homing on encoder index. |
242 |
|
|
* |
243 |
|
|
* Searches for the next encoder index in positive direction and, when |
244 |
|
|
* found, sets it as home position. |
245 |
|
|
* |
246 |
|
|
* Only performs one step, so this method needs to be called in a loop. This |
247 |
|
|
* method only set the control, one *MUST* send the control for the motor |
248 |
|
|
* after calling this method. |
249 |
|
|
* |
250 |
|
|
* The motor is moved with a position profile until either the encoder index |
251 |
|
|
* is reached or the search distance limit is exceeded. The position is |
252 |
|
|
* controlled with a simple PD controller. |
253 |
|
|
* |
254 |
|
|
* If the encoder index is found, its position is used as home position. |
255 |
|
|
* The zero position is offset from the home position by adding the "home |
256 |
|
|
* offset" to it (i.e. zero = home pos. + home offset). |
257 |
|
|
* If the search distance limit is reached before the encoder index occurs, |
258 |
|
|
* the homing fails. |
259 |
|
|
* |
260 |
|
|
* @return Status of the homing procedure. |
261 |
|
|
*/ |
262 |
|
|
HomingReturnCode update_homing(); |
263 |
|
|
|
264 |
|
|
private: |
265 |
|
|
/** |
266 |
|
|
* @brief Convert from joint torque to motor current. |
267 |
|
|
* |
268 |
|
|
* @param[in] torque is the input joint |
269 |
|
|
* @return double the equivalent motor current. |
270 |
|
|
*/ |
271 |
|
|
double joint_torque_to_motor_current(double torque) const; |
272 |
|
|
|
273 |
|
|
/** |
274 |
|
|
* @brief Convert from motor current to joint torque. |
275 |
|
|
* |
276 |
|
|
* @param current is the motor current. |
277 |
|
|
* @return double is the equivalent joint torque. |
278 |
|
|
*/ |
279 |
|
|
double motor_current_to_joint_torque(double current) const; |
280 |
|
|
|
281 |
|
|
/** |
282 |
|
|
* @brief Get motor measurements and check if there are data or not. |
283 |
|
|
* |
284 |
|
|
* @param measurement_id is the id of the measurement you want to get. |
285 |
|
|
* check: blmc_drivers::MotorInterface::MeasurementIndex |
286 |
|
|
* @return double the measurement. |
287 |
|
|
*/ |
288 |
|
|
double get_motor_measurement(const mi& measurement_id) const; |
289 |
|
|
|
290 |
|
|
/** |
291 |
|
|
* @brief Get the last motor measurement index for a specific data. If there |
292 |
|
|
* was no data yet, return NaN |
293 |
|
|
* |
294 |
|
|
* @param measurement_id is the id of the measurement you want to get. |
295 |
|
|
* check: blmc_drivers::MotorInterface::MeasurementIndex |
296 |
|
|
* @return double the measurement. |
297 |
|
|
*/ |
298 |
|
|
long int get_motor_measurement_index(const mi& measurement_id) const; |
299 |
|
|
|
300 |
|
|
/** |
301 |
|
|
* @brief This is the pointer to the motor interface. |
302 |
|
|
*/ |
303 |
|
|
std::shared_ptr<blmc_drivers::MotorInterface> motor_; |
304 |
|
|
|
305 |
|
|
/** |
306 |
|
|
* @brief This is the torque constant of the motor: |
307 |
|
|
* \f$ \tau_{motor} = k * i_{motor} \f$ |
308 |
|
|
*/ |
309 |
|
|
double motor_constant_; |
310 |
|
|
/** |
311 |
|
|
* @brief This correspond to the reduction (\f$ \beta \f$) between the motor rotation and |
312 |
|
|
* the joint. \f$ \theta_{joint} = \theta_{motor} / \beta \f$ |
313 |
|
|
*/ |
314 |
|
|
double gear_ratio_; |
315 |
|
|
/** |
316 |
|
|
* @brief This is the distance between the closest positive index and the |
317 |
|
|
* zero configuration. |
318 |
|
|
*/ |
319 |
|
|
double zero_angle_; |
320 |
|
|
/** |
321 |
|
|
* @brief This change the motor rotation direction. |
322 |
|
|
*/ |
323 |
|
|
double polarity_; |
324 |
|
|
/** |
325 |
|
|
* @brief This is the maximum current we can apply during one experiment. |
326 |
|
|
* The program shut down if this value is achieved. |
327 |
|
|
*/ |
328 |
|
|
double max_current_; |
329 |
|
|
|
330 |
|
|
//! @brief P gain of the position PD controller. |
331 |
|
|
double position_control_gain_p_; |
332 |
|
|
//! @brief D gain of the position PD controller. |
333 |
|
|
double position_control_gain_d_; |
334 |
|
|
|
335 |
|
|
struct HomingState homing_state_; |
336 |
|
|
}; |
337 |
|
|
|
338 |
|
|
/** |
339 |
|
|
* @brief BlmcJointModule_ptr shortcut for the shared pointer BlmcJointModule type |
340 |
|
|
*/ |
341 |
|
|
typedef std::shared_ptr<BlmcJointModule> BlmcJointModule_ptr; |
342 |
|
|
|
343 |
|
|
/** |
344 |
|
|
* @brief This class defines an interface to a collection of BLMC joints. It |
345 |
|
|
* creates a BLMCJointModule for every blmc_driver::MotorInterface provided. |
346 |
|
|
* |
347 |
|
|
* @tparam COUNT |
348 |
|
|
*/ |
349 |
|
|
template <int COUNT> |
350 |
|
|
class BlmcJointModules |
351 |
|
|
{ |
352 |
|
|
public: |
353 |
|
|
/** |
354 |
|
|
* @brief Defines a static Eigen vector type in order to define the |
355 |
|
|
* interface. |
356 |
|
|
*/ |
357 |
|
|
typedef Eigen::Matrix<double, COUNT, 1> Vector; |
358 |
|
|
|
359 |
|
|
/** |
360 |
|
|
* @brief Construct a new BlmcJointModules object. |
361 |
|
|
* |
362 |
|
|
* @param motors |
363 |
|
|
* @param motor_constants |
364 |
|
|
* @param gear_ratios |
365 |
|
|
* @param zero_angles |
366 |
|
|
*/ |
367 |
|
|
BlmcJointModules( |
368 |
|
|
const std::array<std::shared_ptr<blmc_drivers::MotorInterface>, COUNT>& |
369 |
|
|
motors, |
370 |
|
|
const Vector& motor_constants, |
371 |
|
|
const Vector& gear_ratios, |
372 |
|
|
const Vector& zero_angles, |
373 |
|
|
const Vector& max_currents) |
374 |
|
|
{ |
375 |
|
|
set_motor_array(motors, motor_constants, gear_ratios, zero_angles, max_currents); |
376 |
|
|
} |
377 |
|
|
/** |
378 |
|
|
* @brief Construct a new BlmcJointModules object. |
379 |
|
|
*/ |
380 |
|
|
BlmcJointModules() |
381 |
|
|
{ |
382 |
|
|
} |
383 |
|
|
/** |
384 |
|
|
* @brief Set the motor array, by creating the corresponding modules. |
385 |
|
|
* |
386 |
|
|
* @param motors |
387 |
|
|
* @param motor_constants |
388 |
|
|
* @param gear_ratios |
389 |
|
|
* @param zero_angles |
390 |
|
|
*/ |
391 |
|
|
void set_motor_array( |
392 |
|
|
const std::array<std::shared_ptr<blmc_drivers::MotorInterface>, COUNT>& |
393 |
|
|
motors, |
394 |
|
|
const Vector& motor_constants, |
395 |
|
|
const Vector& gear_ratios, |
396 |
|
|
const Vector& zero_angles, |
397 |
|
|
const Vector& max_currents) |
398 |
|
|
{ |
399 |
|
|
for(size_t i = 0; i < COUNT; i++) |
400 |
|
|
{ |
401 |
|
|
modules_[i] = std::make_shared<BlmcJointModule>(motors[i], |
402 |
|
|
motor_constants[i], |
403 |
|
|
gear_ratios[i], |
404 |
|
|
zero_angles[i], |
405 |
|
|
false, |
406 |
|
|
max_currents[i]); |
407 |
|
|
} |
408 |
|
|
} |
409 |
|
|
/** |
410 |
|
|
* @brief Send the registered torques to all modules. |
411 |
|
|
*/ |
412 |
|
|
void send_torques() |
413 |
|
|
{ |
414 |
|
|
for(size_t i = 0; i < COUNT; i++) |
415 |
|
|
{ |
416 |
|
|
modules_[i]->send_torque(); |
417 |
|
|
} |
418 |
|
|
} |
419 |
|
|
|
420 |
|
|
/** |
421 |
|
|
* @brief Set the polarities of the joints |
422 |
|
|
* (see BlmcJointModule::set_joint_polarity) |
423 |
|
|
* |
424 |
|
|
* @param reverse_polarity |
425 |
|
|
*/ |
426 |
|
|
void set_joint_polarities(std::array<bool, COUNT> reverse_polarities) |
427 |
|
|
{ |
428 |
|
|
for(size_t i = 0; i < COUNT; i++) |
429 |
|
|
{ |
430 |
|
|
modules_[i]->set_joint_polarity(reverse_polarities[i]); |
431 |
|
|
} |
432 |
|
|
} |
433 |
|
|
/** |
434 |
|
|
* @brief Register the joint torques to be sent for all modules. |
435 |
|
|
* |
436 |
|
|
* @param desired_torques (Nm) |
437 |
|
|
*/ |
438 |
|
|
void set_torques(const Vector& desired_torques) |
439 |
|
|
{ |
440 |
|
|
for(size_t i = 0; i < COUNT; i++) |
441 |
|
|
{ |
442 |
|
|
modules_[i]->set_torque(desired_torques(i)); |
443 |
|
|
} |
444 |
|
|
} |
445 |
|
|
|
446 |
|
|
/** |
447 |
|
|
* @brief Get the maximum admissible joint torque that can be applied. |
448 |
|
|
* |
449 |
|
|
* @return Vector (N/m) |
450 |
|
|
*/ |
451 |
|
|
Vector get_max_torques() |
452 |
|
|
{ |
453 |
|
|
Vector max_torques; |
454 |
|
|
for(size_t i = 0 ; i < COUNT ; ++i) |
455 |
|
|
{ |
456 |
|
|
max_torques[i] = modules_[i]->get_max_torque(); |
457 |
|
|
} |
458 |
|
|
return max_torques; |
459 |
|
|
} |
460 |
|
|
|
461 |
|
|
/** |
462 |
|
|
* @brief Get the previously sent torques. |
463 |
|
|
* |
464 |
|
|
* @return Vector (Nm) |
465 |
|
|
*/ |
466 |
|
|
Vector get_sent_torques() const |
467 |
|
|
{ |
468 |
|
|
Vector torques; |
469 |
|
|
|
470 |
|
|
for(size_t i = 0; i < COUNT; i++) |
471 |
|
|
{ |
472 |
|
|
torques(i) = modules_[i]->get_sent_torque(); |
473 |
|
|
} |
474 |
|
|
return torques; |
475 |
|
|
} |
476 |
|
|
|
477 |
|
|
/** |
478 |
|
|
* @brief Get the measured joint torques. |
479 |
|
|
* |
480 |
|
|
* @return Vector (Nm) |
481 |
|
|
*/ |
482 |
|
|
Vector get_measured_torques() const |
483 |
|
|
{ |
484 |
|
|
Vector torques; |
485 |
|
|
|
486 |
|
|
for(size_t i = 0; i < COUNT; i++) |
487 |
|
|
{ |
488 |
|
|
torques(i) = modules_[i]->get_measured_torque(); |
489 |
|
|
} |
490 |
|
|
return torques; |
491 |
|
|
} |
492 |
|
|
|
493 |
|
|
/** |
494 |
|
|
* @brief Get the measured joint angles. |
495 |
|
|
* |
496 |
|
|
* @return Vector (rad) |
497 |
|
|
*/ |
498 |
|
|
Vector get_measured_angles() const |
499 |
|
|
{ |
500 |
|
|
Vector positions; |
501 |
|
|
|
502 |
|
|
for(size_t i = 0; i < COUNT; i++) |
503 |
|
|
{ |
504 |
|
|
positions(i) = modules_[i]->get_measured_angle(); |
505 |
|
|
} |
506 |
|
|
return positions; |
507 |
|
|
} |
508 |
|
|
|
509 |
|
|
/** |
510 |
|
|
* @brief Get the measured joint velocities. |
511 |
|
|
* |
512 |
|
|
* @return Vector (rad/s) |
513 |
|
|
*/ |
514 |
|
|
Vector get_measured_velocities() const |
515 |
|
|
{ |
516 |
|
|
Vector velocities; |
517 |
|
|
|
518 |
|
|
for(size_t i = 0; i < COUNT; i++) |
519 |
|
|
{ |
520 |
|
|
velocities(i) = modules_[i]->get_measured_velocity(); |
521 |
|
|
} |
522 |
|
|
return velocities; |
523 |
|
|
} |
524 |
|
|
|
525 |
|
|
/** |
526 |
|
|
* @brief Set the zero_angles. These are the joint angles between the |
527 |
|
|
* starting pose and the zero theoretical pose of the urdf. |
528 |
|
|
* |
529 |
|
|
* @param zero_angles (rad) |
530 |
|
|
*/ |
531 |
|
|
void set_zero_angles(const Vector& zero_angles) |
532 |
|
|
{ |
533 |
|
|
for(size_t i = 0; i < COUNT; i++) |
534 |
|
|
{ |
535 |
|
|
modules_[i]->set_zero_angle(zero_angles(i)); |
536 |
|
|
} |
537 |
|
|
} |
538 |
|
|
/** |
539 |
|
|
* @brief Get the zero_angles. These are the joint angles between the |
540 |
|
|
* starting pose and the zero theoretical pose of the urdf. |
541 |
|
|
* |
542 |
|
|
* @return Vector (rad) |
543 |
|
|
*/ |
544 |
|
|
Vector get_zero_angles() const |
545 |
|
|
{ |
546 |
|
|
Vector positions; |
547 |
|
|
|
548 |
|
|
for(size_t i = 0; i < COUNT; i++) |
549 |
|
|
{ |
550 |
|
|
positions(i) = modules_[i]->get_zero_angle(); |
551 |
|
|
} |
552 |
|
|
return positions; |
553 |
|
|
} |
554 |
|
|
/** |
555 |
|
|
* @brief Get the index_angles. There is one index per motor rotation so |
556 |
|
|
* there are gear_ratio indexes per joint rotation. |
557 |
|
|
* |
558 |
|
|
* @return Vector (rad) |
559 |
|
|
*/ |
560 |
|
|
Vector get_measured_index_angles() const |
561 |
|
|
{ |
562 |
|
|
Vector index_angles; |
563 |
|
|
|
564 |
|
|
for(size_t i = 0; i < COUNT; i++) |
565 |
|
|
{ |
566 |
|
|
index_angles(i) = modules_[i]->get_measured_index_angle(); |
567 |
|
|
} |
568 |
|
|
return index_angles; |
569 |
|
|
} |
570 |
|
|
|
571 |
|
|
/** |
572 |
|
|
* @brief Set position control gains for the specified joint. |
573 |
|
|
* |
574 |
|
|
* @param joint_id ID of the joint (in range `[0, COUNT)`). |
575 |
|
|
* @param kp P gain. |
576 |
|
|
* @param kd D gain. |
577 |
|
|
*/ |
578 |
|
|
void set_position_control_gains(size_t joint_id, double kp, double kd) |
579 |
|
|
{ |
580 |
|
|
modules_[joint_id]->set_position_control_gains(kp, kd); |
581 |
|
|
} |
582 |
|
|
|
583 |
|
|
/** |
584 |
|
|
* @brief Set position control gains for all joints. |
585 |
|
|
* |
586 |
|
|
* @param kp P gains. |
587 |
|
|
* @param kd D gains. |
588 |
|
|
*/ |
589 |
|
|
void set_position_control_gains(Vector kp, Vector kd) |
590 |
|
|
{ |
591 |
|
|
for(size_t i = 0; i < COUNT; i++) |
592 |
|
|
{ |
593 |
|
|
set_position_control_gains(i, kp[i], kd[i]); |
594 |
|
|
} |
595 |
|
|
} |
596 |
|
|
|
597 |
|
|
/** |
598 |
|
|
* @brief Perform homing for all joints. |
599 |
|
|
* |
600 |
|
|
* If one of the joints fails, the complete homing fails. Otherwise it |
601 |
|
|
* loops until all joints finished. |
602 |
|
|
* If a joint is finished while others are still running, it is held at the |
603 |
|
|
* home position. |
604 |
|
|
* |
605 |
|
|
* See BlmcJointModule::update_homing for details on the homing procedure. |
606 |
|
|
* |
607 |
|
|
* See BlmcJointModule::init_homing for description of the arguments. |
608 |
|
|
* |
609 |
|
|
* @return Final status of the homing procedure (either SUCCESS if all |
610 |
|
|
* joints succeeded or the return code of the first joint that failed). |
611 |
|
|
*/ |
612 |
|
|
HomingReturnCode execute_homing(double search_distance_limit_rad, |
613 |
|
|
Vector home_offset_rad, |
614 |
|
|
double profile_step_size_rad=0.001) |
615 |
|
|
{ |
616 |
|
|
// Initialise homing for all joints |
617 |
|
|
for(size_t i = 0; i < COUNT; i++) |
618 |
|
|
{ |
619 |
|
|
modules_[i]->init_homing((int) i, search_distance_limit_rad, |
620 |
|
|
home_offset_rad[i], profile_step_size_rad); |
621 |
|
|
} |
622 |
|
|
|
623 |
|
|
// run homing for all joints until all of them are done |
624 |
|
|
real_time_tools::Spinner spinner; |
625 |
|
|
spinner.set_period(0.001); // TODO magic number |
626 |
|
|
HomingReturnCode homing_status; |
627 |
|
|
do { |
628 |
|
|
bool all_succeeded = true; |
629 |
|
|
homing_status = HomingReturnCode::RUNNING; |
630 |
|
|
|
631 |
|
|
for(size_t i = 0; i < COUNT; i++) |
632 |
|
|
{ |
633 |
|
|
HomingReturnCode joint_result = modules_[i]->update_homing(); |
634 |
|
|
|
635 |
|
|
all_succeeded &= (joint_result == HomingReturnCode::SUCCEEDED); |
636 |
|
|
|
637 |
|
|
if (joint_result == HomingReturnCode::NOT_INITIALIZED || |
638 |
|
|
joint_result == HomingReturnCode::FAILED) { |
639 |
|
|
homing_status = joint_result; |
640 |
|
|
// abort homing |
641 |
|
|
break; |
642 |
|
|
} |
643 |
|
|
} |
644 |
|
|
if(homing_status == HomingReturnCode::RUNNING) |
645 |
|
|
{ |
646 |
|
|
for(unsigned i = 0 ; i < COUNT ; ++i) |
647 |
|
|
{ |
648 |
|
|
modules_[i]->send_torque(); |
649 |
|
|
} |
650 |
|
|
} |
651 |
|
|
|
652 |
|
|
if (all_succeeded) { |
653 |
|
|
homing_status = HomingReturnCode::SUCCEEDED; |
654 |
|
|
} |
655 |
|
|
|
656 |
|
|
spinner.spin(); |
657 |
|
|
} while (homing_status == HomingReturnCode::RUNNING); |
658 |
|
|
|
659 |
|
|
return homing_status; |
660 |
|
|
} |
661 |
|
|
|
662 |
|
|
/** |
663 |
|
|
* @brief Allow the robot to go to a desired pose. Once the control done |
664 |
|
|
* 0 torques is sent. |
665 |
|
|
* |
666 |
|
|
* @param angle_to_reach_rad (rad) |
667 |
|
|
* @param average_speed_rad_per_sec (rad/sec) |
668 |
|
|
* @return GoToReturnCode |
669 |
|
|
*/ |
670 |
|
|
GoToReturnCode go_to(Vector angle_to_reach_rad, |
671 |
|
|
double average_speed_rad_per_sec=1.0) |
672 |
|
|
{ |
673 |
|
|
// Compute a min jerk trajectory |
674 |
|
|
Vector initial_joint_positions = get_measured_angles(); |
675 |
|
|
double final_time = (angle_to_reach_rad - initial_joint_positions) |
676 |
|
|
.array().abs().maxCoeff() / |
677 |
|
|
average_speed_rad_per_sec; |
678 |
|
|
|
679 |
|
|
std::array<TimePolynome<5> , COUNT> min_jerk_trajs; |
680 |
|
|
for(unsigned i = 0; i < COUNT; i++) |
681 |
|
|
{ |
682 |
|
|
min_jerk_trajs[i].set_parameters(final_time, |
683 |
|
|
initial_joint_positions[i], 0.0 /*initial speed*/, |
684 |
|
|
angle_to_reach_rad[i]); |
685 |
|
|
} |
686 |
|
|
|
687 |
|
|
// run got_to for all joints |
688 |
|
|
real_time_tools::Spinner spinner; |
689 |
|
|
double sampling_period = 0.001; // TODO magic number |
690 |
|
|
spinner.set_period(sampling_period); |
691 |
|
|
GoToReturnCode go_to_status; |
692 |
|
|
double current_time = 0.0; |
693 |
|
|
do{ |
694 |
|
|
// TODO: add a security if error gets too big |
695 |
|
|
for(unsigned i = 0; i < COUNT; i++) |
696 |
|
|
{ |
697 |
|
|
double desired_pose = min_jerk_trajs[i].compute(current_time); |
698 |
|
|
double desired_torque = |
699 |
|
|
modules_[i]->execute_position_controller(desired_pose); |
700 |
|
|
modules_[i]->set_torque(desired_torque); |
701 |
|
|
} |
702 |
|
|
for(unsigned i = 0 ; i < COUNT ; ++i) |
703 |
|
|
{ |
704 |
|
|
modules_[i]->send_torque(); |
705 |
|
|
} |
706 |
|
|
go_to_status = GoToReturnCode::RUNNING; |
707 |
|
|
|
708 |
|
|
current_time += sampling_period; |
709 |
|
|
spinner.spin(); |
710 |
|
|
|
711 |
|
|
} while(current_time < (final_time + sampling_period)); |
712 |
|
|
|
713 |
|
|
// Stop all motors (0 torques) after the destination achieved |
714 |
|
|
for(unsigned i = 0; i < COUNT; i++) |
715 |
|
|
{ |
716 |
|
|
modules_[i]->set_torque(0.0); |
717 |
|
|
} |
718 |
|
|
for(unsigned i = 0 ; i < COUNT ; ++i) |
719 |
|
|
{ |
720 |
|
|
modules_[i]->send_torque(); |
721 |
|
|
} |
722 |
|
|
|
723 |
|
|
Vector final_pos = get_measured_angles(); |
724 |
|
|
if ( (angle_to_reach_rad - final_pos).isMuchSmallerThan(1.0, 1e-3) ) |
725 |
|
|
{ |
726 |
|
|
go_to_status = GoToReturnCode::SUCCEEDED; |
727 |
|
|
}else{ |
728 |
|
|
go_to_status = GoToReturnCode::FAILED; |
729 |
|
|
} |
730 |
|
|
return go_to_status; |
731 |
|
|
} |
732 |
|
|
|
733 |
|
|
private: |
734 |
|
|
/** |
735 |
|
|
* @brief These are the BLMCJointModule objects corresponding to a robot. |
736 |
|
|
*/ |
737 |
|
|
std::array<std::shared_ptr<BlmcJointModule>, COUNT> modules_; |
738 |
|
|
}; |
739 |
|
|
|
740 |
|
|
|
741 |
|
|
|
742 |
|
|
|
743 |
|
|
|
744 |
|
|
} // namespace blmc_robots |


Clyde Quay Wharf, Wellington, New Zealand
Clyde Quay Wharf
Te Aro, Wellington
,
6011
,
New Zealand
www.clydequaywharf.co.nz


Password Safe supports exporting (and importing) of the stored passwords to (and from) various formats. To export password entries use the "File → Export To" menu. The supported formats are:
For previous versions of Password Safe, just select the desired format and specify the name of the database file you wish to create.
In addition, to 'export' a subset of entries to another Password Safe database, just start Password Safe (assuming you permit multiple instances via "Manage → Options → System" tab) and create a new database, whilst having your normal database open in another instance. Then you can simply drag and drop any entries or groups from your open database to this 'export' database.
Export uses a Wizard interface. You may also select the Advanced field selection in order to restrict which entries you export and which field of these entries you export from your current database. See here for more details.
A report of the actions taken will be available on completion and this may be copied to the clipboard or saved to disk as a text file in the same directory as the database. The "View → Reports" menu item may then be used to view the reports at a later date. The name of the report file is fixed and dependent on the function that created it. If the same function is repeated and its report saved to disk, any existing report for this function will be overwritten. Note: The report may contain sensitive data and care should be taken when selecting the "save to disk" option.
Password Safe allows you to export password entries to text files. These files may then be used or modified by other applications.
You will be asked to enter the master password to confirm that you may export the database into a clear text unencrypted file before you can export its contents. If you're using YubiKey authentication, click on the Yubikey button, then activate your YubiKey. You will also be required to supply the name of the new file and to confirm overwriting of it if a file of the same name if it already exists in the directory you specified.
Note: If you do not have a YubiKey, the screen shown above will not have the YubiKey button and text displayed.
You can also specify some options:
Selecting "Advanced field selection" will display this Wizard page to allow you to export only some of the entries, based on the text in specified fields, and/or specify which fields are to be exported. See here for more details.
XML (eXtensible Markup Language) is a popular format for transferring data between applications. Password Safe can export (and import) the database entries to this format. The structure (or schema) against which the data is exported and validated is defined in the file pwsafe.xsd, which is provided as part of the distribution. This file is used by Password Safe when XML data is imported, and should be provided to applications that wish to use the exported data.
The display of XML files is specified by pwsafe.xsl - an eXtensible Stylesheet Language file. A sample file, which may be modified for your own needs, is supplied as part of the distribution. This file is only an example and you can easily modify it to display whatever fields you want to show. As this only displays the data and will not alter it, you will still be able to import it into Password Safe at some later time.
As in the Text Export option, you can control what entries and field to export to the XML file by selecting the "Advanced field selection". This will display the following Wizard page:
Selecting "Advanced field selection" will display this Wizard page to allow you to export only some of the entries, based on the text in specified fields, and/or specify which fields are to be exported. Note: that the XML schema requires the Title and Password fields, hence these cannot be deselected. See here for more details.
It is also possible to export a single entry or the members of a group to Plain Text, XML or to a current version of a Password Safe. In this case, right-click on the entry of group and select the form of output from the "Export Entry To" or "Export Group To" menu.
For Text and XML export, the options available are exactly the same as exporting the complete database above.
Lastly, if a filter is active, it is possible to export the entries that satisfy this filter to a current version of a Password Safe. This can also be found on the main "Export To" menu off the File menu.
Notes:


Money Play. How should Red play 62?
pips Red=161 White=151
(CorrectAnswer= 0/0, ErrorScore= 0)
When your opponent makes his 2pt early in the game it is rarely correct to split the back checkers as this gives him the option of a blitz attack while priming doesn’t work well for him as he owns both his 2-pt and 8-pt.
The choice here is between 13/5 and 13/11, 13/7. The latter gives a much better distribution of checkers and potential return hits. Therefore, that is the correct move.
The choice here is between 13/5 and 13/11, 13/7. The latter gives a much better distribution of checkers and potential return hits. Therefore, that is the correct move.
1. Cubeful 2-ply 13/11 13/7 Eq.: -0.034 0.499 0.163 0.009 - 0.501 0.173 0.014 2. Cubeful 2-ply 13/5 Eq.: -0.047 (-0.013) 0.494 0.157 0.008 - 0.506 0.170 0.012 3. Cubeful 2-ply 24/16 Eq.: -0.067 (-0.033) 0.495 0.136 0.006 - 0.505 0.185 0.006 4. Cubeful 2-ply 13/7 6/4 Eq.: -0.092 (-0.058) 0.481 0.148 0.007 - 0.519 0.170 0.012 5. Cubeful 2-ply 24/18 13/11 Eq.: -0.095 (-0.061) 0.495 0.145 0.008 - 0.505 0.207 0.009


#include <GrMeshIB.h>
Public Member Functions | |
| GrMeshIB (unsigned int indexCount, const unsigned short *indices, unsigned int flags, unsigned int maxIndexCount=0) | |
| class header. | |
| GrMeshIB (unsigned int indexCount, unsigned int flags, unsigned int maxIndexCount=0) | |
| ~GrMeshIB () | |
| unsigned int | GetIndexCount () const |
| return the index count. | |
| unsigned int | GetMaxIndexCount () const |
| return the index count. | |
| void | AdjustIndexCount (int growSize) |
| adjust the number of active indices. | |
| unsigned int | GetFlags () const |
| returns creation flags. | |
| unsigned short * | GetIndices () const |
| void | MarkAsDirty () |
| unsigned short * | Map (bool writeOnly) |
| locks the index buffer. | |
| void | Unmap () |
| void | Update (unsigned int start, unsigned short *source, unsigned int count) |
| updates a portion of the index buffer. | |
| void | Cache () |
| cache/evict mesh data. | |
| void | Evict () |
| void | Bind () |
| bind the index buffer. | |
| void | PreContextReset () |
| context reset. | |
| void | PostContextReset () |
Static Public Attributes | |
| static const unsigned int | kDynamic = 1 |
| static const unsigned int | kNoCopy = 2 |
File: GrMeshIB.h Author: Kevin Bray Created: 12-10-06 Copyright © 2004 Bootstrap Studios. All rights reserved. project includes. class GrMeshIB
Definition at line 18 of file GrMeshIB.h.
| GrMeshIB::GrMeshIB | ( | unsigned int | indexCount, | |
| const unsigned short * | indices, | |||
| unsigned int | flags, | |||
| unsigned int | maxIndexCount = 0 | |||
| ) |
class header.
File: GrMeshIB.h Author: Kevin Bray Created: 12-10-06 Copyright © 2004 Bootstrap Studios. All rights reserved. project includes. class GrMeshIB ctor & dtor
the kNoCopy flag cannot be specified with this constructor!
Definition at line 26 of file GrMeshIB.cpp.
| GrMeshIB::GrMeshIB | ( | unsigned int | indexCount, | |
| unsigned int | flags, | |||
| unsigned int | maxIndexCount = 0 | |||
| ) |
Definition at line 42 of file GrMeshIB.cpp.
| GrMeshIB::~GrMeshIB | ( | ) |
Definition at line 54 of file GrMeshIB.cpp.
| void GrMeshIB::AdjustIndexCount | ( | int | growSize | ) |
| void GrMeshIB::Bind | ( | ) |
bind the index buffer.
bind the index buffer.
update the contents if necessary.
Definition at line 172 of file GrMeshIB.cpp.
| void GrMeshIB::Cache | ( | ) |
| void GrMeshIB::Evict | ( | ) |
Definition at line 161 of file GrMeshIB.cpp.
| unsigned int GrMeshIB::GetFlags | ( | ) | const [inline] |
| unsigned int GrMeshIB::GetIndexCount | ( | ) | const [inline] |
| unsigned short* GrMeshIB::GetIndices | ( | ) | const [inline] |
get indices for read/write. Call MarkAsDirty to force index data to be resubmitted to the graphics hardware.
Definition at line 42 of file GrMeshIB.h.
| unsigned int GrMeshIB::GetMaxIndexCount | ( | ) | const [inline] |
| unsigned short * GrMeshIB::Map | ( | bool | writeOnly | ) |
locks the index buffer.
if we're a buffer with a local copy, then just return the local copy.
if we're not a buffer with a local copy, then we need to map the buffer and return the memory pointer.
return the start of buffer memory.
Definition at line 78 of file GrMeshIB.cpp.
| void GrMeshIB::MarkAsDirty | ( | ) | [inline] |
Definition at line 43 of file GrMeshIB.h.
| void GrMeshIB::PostContextReset | ( | ) |
| void GrMeshIB::PreContextReset | ( | ) |
| void GrMeshIB::Unmap | ( | ) |
Definition at line 99 of file GrMeshIB.cpp.
| void GrMeshIB::Update | ( | unsigned int | start, | |
| unsigned short * | source, | |||
| unsigned int | count | |||
| ) |
updates a portion of the index buffer.
if we have a local copy, then simply update it. Otherwise, update the buffer directly.
create the index buffer if it doesn't already exist.
update the data.
Definition at line 114 of file GrMeshIB.cpp.
const unsigned int GrMeshIB::kDynamic = 1 [static] |
Definition at line 21 of file GrMeshIB.h.
const unsigned int GrMeshIB::kNoCopy = 2 [static] |
Definition at line 22 of file GrMeshIB.h.


Chelsea man charged with robbing bank while on supervised release for same crime
by Mike SacconeBOSTON - A Chelsea man has been charged with robbing a bank while on supervised release for the same crime, according to the U.S. Attorney's Office for the District of Massachusetts.
Federal agents arrested 66-year-old Edward Robert Rezendes Tuesday and charged him with one count of bank robbery.
According to court documents, Rezendes robbed a TD Bank branch in Chelsea on September 10 and got away with $3,760 in cash. He was on supervised release for an unrelated bank robbery at the time.
On Tuesday, the judge ordered Rezendes be detained during his arraigned at federal court in South Boston.
If convicted on the bank robbery charge, Rezendes faces up to ten years in prison followed by three years of supervised release and a fine of $250,000.