This is used to add video on to your website. Depending on browsers that user is using, the video might not be shown depending on the which extension the video is in. So you can add multiple video tags with different extensions.
In the <video> if you add attribute called "controls", the video control bar is also added in the video.
How to make forms with HTML
Elements and attributes
<form action="" method="post">

ID:<input type="text" name="id" value="what is your id?">

Password:<input type="password" name="pwd">

<input type="submit" value="Submit">
</form>
To make a form we start with <form> </form>.
To make where user input something, <input> tag is used with
 tag. In this tag, we can declare attributes like what type of input you want user to use. This can be done by adding "type" attribute. For example, if you
want user to write text as the input, <input type="text">.
To redirect user to other page after clicking submit button, we give attribute called "action" inside the <form> tag. Inside the "action attribute", put the address of the document where you want the user to go to.
To give some kind of name to each of the fields, use attribute called "name" inside the <input> tag after "type" attribute.
To give some pre-written message in the field, use attribute called "value" with "whatever message you want to display" as content, inside the <input> tag after "type" attribute.
If you want multiple of something selected in default, add attribute called "checked" in each of them
Example:
Buttons VS submit:
Button is different with submit. Submit redirect user to other pages but button does not do anything. It could have some other action when used with javascript. For this example, alert pops up.
With input type "reset", it makes a button that erases contents that user entered.
This is used when there is no UI but you want to send some information that can't be seen on the screen.
Example:
Label:

This is used to distinguish label with regular paragraph or text for the browser to understand better. By giving "for" attribute, you can link with id.
ID:
If you don't want to give attribute, you can wrap all with the label. It allows the focus to be on even when you click on the label not the field or selection tool itself.
This is used to send data by different methods. Such as "post" or "get", etc.
<form action="" method="post"></form>
By giving "post" attribute, you can send data to server not through url. So the data is hidden and safe. This is used normally when you use form but the method is decided by engineer at server side.
<form action="" method="get"></form>
By giving "get" attribute, when data is sent, data is sent by url. "get" is the default method when you use form without method attribute declared.
Example:
Uploading files:
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="name of the file">
</form>
This is used to upload file. The actual displaying the file on the screen will be done by server. When you are using some kind of uploading function, enctype="multipart/form-data" is needed in the form tag.
Example:
New Input Types in HTML5
Restrict input type for user to enter information that you want user to input.
The following is a list of some of the input types:
color
date
datetime
datetime-local
email
month
number
Restrict value to be in between 10 and 15 by adding attribute: min="10" max="15"
To validate the input value that user entered, set the type. Also you can add attribute called "required" to make mandatory field. If required field is not filled, tool tip will alert.
Set the regular expression by adding attribute called "required pattern"
To make table with HTML, we use tag called "table" like this:

Table row is wraped with tag

Each table cell is wraped with tag
Table headings can be grouped with tag

. Wherever this tag is located in the table, it will be shown as first row of the table.
Table headings data is wraped with tag
Table body can be grouped with tag

Table footer can be grouped with tag

. Wherever this tag is located in the table, it will be shown as last row of the table.
Example:
Date
Name
Position
Membership Fee
2017-10-08
Vicky
Manager
100
2017-10-08
Kate
Member
50
2017-10-08
Amy
Member
50
Total
200
Additional function
To merge cells vertically, we use attributes "rowspan"inside the  tag. Meaning three rows will be merged which is directly below the one you chose. The tag and content of the one that is being merged can be deleted.

To merge cells horizontally, we use attributes "colspan"inside the  tag. Meaning three coloums will be merged which is directly next to the one you chose. The tags and contents of the one that are being merged can be deleted.


☰
Hide Item
General Info
❱
Charge ODA
Weight Measurement
Add Row
Selected Values
Generated Values
×
C-Note
Consigner
Consignee
Transport
From to
Date
Observed Weight
INV Value
Basic Freight
Fuel Surcharge Value
FOV
CN
ODA
Green Tax


If this flag is set, the collectible requires payment for creating an instance of the item, and you are lacking in currency. Bring the benjamins next time. Or spinmetal. Whatever.

If this flag is set, the collectible should not be shown to the user.
Please do consider honoring this flag. It is used - for example - to hide items that a person didn't get from the Eververse. I can't prevent these from being returned in definitions, because some people may have acquired them and thus they should show up: but I would hate for people to start feeling some variant of a Collector's Remorse about these items, and thus increasing their purchasing based on that compulsion. That would be a very unfortunate outcome, and one that I wouldn't like to see happen. So please, whether or not I'm your mom, consider honoring this flag and don't show people invisible collectibles.
If this flag is set, you have not yet obtained this collectible.
If this flag is set, the item is "obscured" to you: you can/should use the alternate item hash found in DestinyCollectibleDefinition.stateInfo. obscuredOverrideItemHash when displaying this collectible instead of the default display info.
If this flag is set, the ability to pull this item out of your collection has been disabled.
If this flag is set, you already have one of these items and can't have a second one.
A Flags Enumeration/bitmask where each bit represents a different state that the Collectible can be in. A collectible can be in any number of these states, and you can choose to use or ignore any or all of them when making your own UI that shows Collectible info. Our displays are going to honor them, but we're also the kind of people who only pretend to inhale before quickly passing it to the left. So, you know, do what you got to do.
(All joking aside, please note the caveat I mention around the Invisible flag: there are cases where it is in the best interest of your users to honor these flags even if you're a "show all the data" person. Collector-oriented compulsion is a very unfortunate and real thing, and I would hate to instill that compulsion in others through showing them items that they cannot earn. Please consider this when you are making your own apps/sites.)
This enum represents a set of flags - use bitwise operators to check which of these match your value.


There are many options to configure the functions of FatFs for each project. The configuration options are defined in the ffconf.h.
Read/Write (0) or Read-only (1). Read-only configuration removes writing API functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename, f_truncate, f_getfree and optional writing functions as well.
This option defines minimization level to remove some basic API functions as follows:
| Value | Description |
|---|---|
| 0 | All basic API functions are available. |
| 1 | f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_utime, f_truncate and f_rename function are removed. |
| 2 | f_opendir, f_readdir and f_closedir function are removed in addition to 1. |
| 3 | f_lseek function is removed in addition to 2. |
This option switches string functions, f_gets, f_putc, f_puts and f_printf.
| Value | Description |
|---|---|
| 0 | Disable string functions. |
| 1 | Enable string functions without LF-CRLF conversion. |
| 2 | Enable string functions with LF-CRLF conversion. |
Disable (0) or Enable (1) filtered directory read functions, f_findfirst and f_findnext. Also _FS_MINIMIZE needs to be 0 or 1.
Disable (0) or Enable (1) f_mkfs function.
Disable (0) or Enable (1) fast seek function to enable accelerated mode for f_lseek, f_read and f_write function. For more information, read here.
Disable (0) or Enable (1) , f_enpand function. Also _FS_READONLY needs to be 0.
Disable (0) or Enable (1) metadata control functions, f_chmod and f_utime. Also _FS_READONLY needs to be 0.
Disable (0) or Enable (1) API functions for volume label, f_getlabel and f_setlabel.
Disable (0) or Enable (1) f_forward function.
This option specifies the OEM code page to be used on the target system. Incorrect setting of the code page can cause a file open failure. If any extended character is not used at all, there is no difference between any code pages.
| Value | Description |
|---|---|
| 1 | ASCII (valid at non-LFN cfg.) |
| 437 | U.S. |
| 720 | Arabic |
| 737 | Greek |
| 771 | KBL |
| 775 | Baltic |
| 850 | Latin 1 |
| 852 | Latin 2 |
| 855 | Cyrillic |
| 857 | Turkish |
| 860 | Portuguese |
| 861 | Icelandic |
| 862 | Hebrew |
| 863 | Canadian French |
| 864 | Arabic |
| 865 | Nordic |
| 866 | Russian |
| 869 | Greek 2 |
| 932 | Japanese (DBCS) |
| 936 | Simplified Chinese (DBCS) |
| 949 | Korean (DBCS) |
| 950 | Traditional Chinese (DBCS) |
This option switches the support for long file name (LFN). When enable the LFN, Unicode support functions option/unicode.c need to be added to the project. The working buffer occupies (_MAX_LFN + 1) * 2 bytes and additional 608 bytes when exFAT enabled. When use stack for the working buffer, take care on stack overflow. When use heap memory for the working buffer, memory management functions, ff_memalloc and ff_memfree, need to be added to the project.
| Value | Description |
|---|---|
| 0 | Disable LFN. Only 8.3 format can be used. |
| 1 | Enable LFN with static working buffer on the BSS. Always NOT thread-safe. |
| 2 | Enable LFN with dynamic working buffer on the STACK. |
| 3 | Enable LFN with dynamic working buffer on the HEAP. |
This option defines the size of LFN working buffer from 12 to 255 in unit of character. This option has no effect when LFN is disabled.
ANSI/OEM (0) or Unicode (1). This option switches character encoding on the API. To use Unicode (UTF16) string for the path name, enable LFN and set this option to 1. This option also affects behavior of string I/O functions. When LFN is disabled, this option must be 0. For more information, read here.
When Unicode API is selected by setting _LFN_UNICODE 1, this option defines the assumption of character encoding on the file to be read/written via string I/O functions, f_gets, f_putc, f_puts and f_printf. This option has no effect when _LFN_UNICODE = 0.
| Value | Description |
|---|---|
| 0 | ANSI/OEM |
| 1 | UTF-16LE |
| 2 | UTF-16BE |
| 3 | UTF-8 |
This option configures relative path function. For more information, read here.
| Value | Description |
|---|---|
| 0 | Disable relative path function and remove related functions. |
| 1 | Enable relative path function. f_chdir and f_chdrive function is available. |
| 2 | f_getcwd function is available in addition to 1 |
This option configures number of volumes (logical drives, from 1 to 10) to be used.
Disable (0) or Enable (1). This option switches the support for string volume ID. When enabled, also pre-defined strings in _VOLUME_STRS can be used as drive identifier in the path name.
This option defines the drive ID strings for each logical drives. Number of items must not be less than _VOLUMES. Valid characters for the drive ID string are: A-Z and 0-9.
Disable (0) or Enable (1). This option switches multi-partition function. By default (0), each logical drive number is bound to the same physical drive number and only an FAT volume in the physical drive is mounted. When enabled, each logical drive is bound to the partition on the physical drive listed in the user defined partition resolution table VolToPart[]. Also f_fdisk funciton will be available. For more information, read here.
This set of options defines the size of sector on low level disk I/O interface, disk_read and disk_write function. Valid values are 512, 1024, 2048 and 4096. _MIN_SS defines minimum sector size and _MAX_SS defines the maximum sector size. Always set both 512 for any type of memory card and harddisk. But a larger value may be required for on-board flash memory and some type of optical media. When _MAX_SS > _MIN_SS, FatFs is configured to variable sector size and GET_SECTOR_SIZE command must be implemented to the disk_ioctl function.
Disable (0) or Enable (1). This option switches ATA-TRIM function. To enable Trim function, also CTRL_TRIM command should be implemented to the disk_ioctl function.
0 to 3. If you need to know correct free space on the FAT32 volume, set bit 0 of this option, and f_getfree function at first time after volume mount will force a full FAT scan. Bit 1 controls the use of last allocated cluster number.
| Value | Description |
|---|---|
| bit0=0 | Use free cluster count in the FSINFO if available. |
| bit0=1 | Do not trust free cluster count in the FSINFO. |
| bit1=0 | Use last allocated cluster number in the FSINFO to find a free cluster if available. |
| bit1=1 | Do not trust last allocated cluster number in the FSINFO. |
Normal (0) or Tiny (1). At the tiny configuration, size of the file object FIL is reduced _MAX_SS bytes. Instead of private data buffer eliminated from the file object, common sector buffer in the file system object FATFS is used for the file data transfer.
This option switches support for the exFAT file system in addition to the FAT file system, Enabled(1) or Disabled(1). To enable this feature, also LFN must be enabled and configureing _LFN_UNICODE = 1 and _MAX_LFN = 255 is recommended for full-featured exFAT function. Note that enabling exFAT discards C89 compatibility because of need for 64-bit integer type.
Use RTC (0) or Do not use RTC (1). This option controls timestamp function. If the system does not have an RTC function or valid timestamp is not needed, set _FS_NORTC to 1 to disable the timestamp function. Any object modified by FatFs will have a fixed timestamp defined by _NORTC_MON, _NORTC_MDAY and _NORTC_YEAR. To use the timestamp function, set _FS_NORTC = 0 and add get_fattime function to the project to get the current time form real-time clock. This option has no effect at read-only configuration.
This set of options defines the time to be used at no RTC systems. This option has no effect at read-only configuration or _FS_NORTC = 0.
This option switches file lock function to control duplicated file open and illegal operations to open objects. Note that the file lock function is independent of re-entrancy. This option must be 0 at read-only configuration.
| Value | Description |
|---|---|
| 0 | Disable file lock function. To avoid collapsing file by wrong file operation, application program needs to avoid illegal open, remove and rename to the open objects. |
| >0 | Enable file lock function. The value defines how many files/sub-directories can be opened simultaneously under the file lock control. Illigal operations to the open object will be rejected with FR_LOCKED. |
Disable (0) or Enable (1). This option switches the re-entrancy (thread safe) of the FatFs module itself. Note that file/directory access to the different volume is always re-entrant and it can work simultaneously regardless of this option but volume control functions. f_mount, f_mkfs and f_fdisk, are always not re-entrant. Only file/directory access to the same volume, in other words, exclusive use of each file system object, is under control of this function. To enable this feature, also user provided synchronization handlers, ff_req_grant, ff_rel_grant, ff_del_syncobj and ff_cre_syncobj, need to be added to the project. Sample code is available in option/syscall.c.
Number of time ticks to abort the file function with FR_TIMEOUT when wait time is too long. This option has no effect when _FS_REENTRANT = 0.
This option defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*, SemaphoreHandle_t and etc. A header file for O/S definitions needs to be included somewhere in the scope of ff.c. This option has no effect when _FS_REENTRANT = 0.


Claim rejections/penalties
Code
Description
Action
Param
{{range .}}
Reject claim
Reduce points
{{end}}
Reject claim
Reduce points


--- title: Project Management with git and R author: ~ date: '2018-05-08' slug: project-management-with-git-and-r categories: [] tags: [] ---
The semester is finally over meaning it’s time to put some serious dents into my research projects. I’ve got a couple floating around at this point, but the one that I need to think about the most is my PhD dissertation. From what I’ve heard it’s quite an intensive ordeal and given that over the next year I need to write a multi-chapter document with a dissertation committee spread across thousands of miles, I think it might be important to try to stay organized.
A couple of different people I follow on Twitter have suggested that I use Scrivner to keep track of writing and what not, but for the past year or two I have really been trying to push myself to commit exclusively to using Free and Open Source Software for everything I do. For some time now I have been thinking about trying to write my entire dissertation using all things R and RStudio and I think I’m ready to try it.
That said, I’m not only going to try to write my thesis using only free software (I’m sure there will be exceptions), but one thing I also want to do is to document as much of the process as I can so that anyone else (especially those without computer backgrounds!) can do the same if they would ever want to learn these sets of tools. I’ve always thought it’s a shame that a lot of this software is not common place in the Humanities and hope that through blogging about how to do it, it will help others who want to use it find it easier.
So where do you even start?
When starting a new project, the first thing that I normally do is to create a place on my computer where the entirety of that project can live and then link that up to github so I can share what I do with the people I work with.
In this post I will just walk through how to just set up a version controlled project with R via Github.
I find it’s easiest when starting a project to start on github first, then copy that onto your computer.
The first thing to do is to log into your github account (assuming you have one, it’s easy to sign up!) and create a new repository (repo) using the little plus at the top right of your home page as you can see below.
From here you want to give your repo a name, a small description, and tick the box that asks you initialize it with a README file. The screenshot below shows the page right before I click the green “Create Repository” button.
When choosing a name, it’s important to pick something easy to recognize and type. Once you click ‘Create Repository’, it will take you to your repo’s home page and should look something like this:
From here you are going to want to click the green ‘Clone or download’ and then copy that link to your clipboard. The next screen shot shows what that will look like.
With the link copied, you then want to open up your terminal (if you’re a Windows user, make sure to get Gitbash!!) and then navigate to where you want your project to live.
I keep all my projects in a directory called projects
on my desktop for easy access.
From here, you then want to use git to clone your project.
If you’re totally new to using this kind of software to do work, you’ll also have to install git.
If you don’t have git, this page will show you how to get it via homebrew
at the command line, which, SURPRISE! you also have to download separately!!
You can get that here.
Side note: when you are first starting out with all things computer-program-tech-whatever, you are going to need to get a lot of software before you can even start to use all the fun stuff. I remember this being particularly discouraging and no fun when I started. If you can, it’s best to try to get someone to slowly walk you through this via some pair programming. If not, don’t be afraid to ask questions when you start!
So getting back to what we were doing, you need to navigate to where you want your project to live (the first line) and then clone your directory by typing git clone yourproject.git
.
Now if you look in your projects folder (or just press ls
as in “l
is
t” all the files that are in your directory), you’ll notice you have a new directory sent directly from github heaven!
Since I’m going to primarily using R to manage this project, I then need to turn this directory into an R project so that every time I open this project, it can be governed with R.
In order to do that, I need to get out of terminal, and then open up RStudio. From here you need to go to File > New Project > Create From Existing Directory >
Then navigate and select to open the folder you just cloned from github.
If you then tick the box that says to open the box in a new project, you’ll then see something like this:
Tah dah! We’ve now made our directory an R project and can save our changes on github.
Now all that’s left to do is sync up the changes on our local machine with that on github.
We can bring terminal back and assuming that we are in our project’s directory (we can check that by typing pwd
in Terminal), we then need to enter the work life cycle of updating a github account with the following commands:
git add .
git commit -m "Whatever you did"
git push
Or how I did it with my project here:
If we then go back to our project page on Github.com, we can see that our changes should have been updated!
I should note that each time you start your project you want to git pull
to make sure that you have the most updated version of the project (for when you are eventually collaborating with other people).
In writing this I actually realized there is SO MUCH that underlies this seemingly basic process of starting a project, so if anyone has any questions on this whole process, please let me know and I can try to make this post (and future ones) clearer.


Enumerations | |
| enum | rbx_SensorType { rbxSensorType_ADC, rbxSensorType_QUADRATURE } |
| Sensor types. More... | |
Functions | |
| int | rbxSensor_getPort (int podHandle, int sensorId, int *port) |
| Gets a sensor's physical output port number on the device (one-based). | |
| int | rbxSensor_getType (int podHandle, int sensorId, enum rbx_SensorType *type) |
| Gets a sensor's type. | |
| int | rbxSensor_getMod (int podHandle, int sensorId, int *mod) |
| Gets a sensor's modification number. | |
| int | rbxSensor_getValue (int podHandle, int sensorId, int *sensorVal) |
| Gets the value of a sensor. |
|
|
Sensor types.
|
|
|
Gets a sensor's physical output port number on the device (one-based).
|
|
|
Gets a sensor's type.
|
|
|
Gets a sensor's modification number. This number is incremented every time the sensor's value changes. This function is typically used to determine if the sensor's value has changed.
|
|
|
Gets the value of a sensor.
|


(0, 2)
(0, 13), (8, 14), (16, 15), (27, 16), (55, 14), (61, 19)
(0, 5), (3, 6), (10, 7), (36, 6), (42, 9)


Suggested Solutions / ConclusionRecurring basic language issues suggest: - upgrade language tools and environment to support more explicit documentation of components (e.g. JUnit, iContract) - provide more education/training in more explicit coding techniques - make it more difficult to write "good enough" software
|
|
|


Written by: Seth Kirkland
Transcribed by: Eric Aasen
With Help from: Darcy Partridge
[Scene: Chandler and Joey's, Chandler is sitting in the canoe as Joey runs through the door carrying an outdoor patio table.]
Joey: Hey!! We are so in luck! Treeger said that we could have all this cool stuff from the basement. Wait right there. (Goes back into the hall)
Chandler: Oh no-no-no, Im, Im paddling away!
Joey: (Returning carrying a couple of rusted lawn chairs) Huh?!
Chandler: Wow! Really?!
Joey: Uh-huh.  And, some of it is not even popped!
(They both sit down at the table and the chick and the duck enter from Joeys bedroom.)
Chandler: Could we be more white trash?
Opening Credits
[Scene: Monica and Rachel's, Monica, Ross, Phoebe, and Rachel are eating breakfast.]
Monica: (Entering from her bedroom) How desperate am I?
Rachel: Oh! Good thing Chandlers not here, he always wins at this game.
Monica: I just told my Mom Id cater a party for her.
Phoebe: How come?
Monica: Because I need the money, and I thought that itd be a great way to get rid of that last little schmidgen of self-respect.
Ross: Come on, I think this is a good thing. I dont think Mom wouldve hired you if she didnt think you were good at what you do.
 She cant here you.
[Scene: Chandler and Joey's, Joey is reading the paper and Chandler is getting ready for work.]
Rachel: (entering) Hey! Umm, do you guys have any juice?
Joey: Just pickle.
Chandler: Hey uh, Rach, funny story. I ah, bumped into Joanna on the street yesterday.
Rachel: My boss, Joanna? Wow, that mustve been awkward.
Chandler: Well, no, actually she uh, asked me if I wanted to get a drink.
Rachel: (laughs) You ah, you didnt say Yes to that did you?
Chandler: (laughs) No. No!
Joanna: (Coming out of the shower wearing nothing but a towel) Hello, Rachel. (She goes into Chandlers bedroom)
Chandler: Well, not at first.
Rachel: What is she doing here?
(Joey makes a sound like a creaking bed.)
Rachel: I dont understand! Last time you went out with her you said she was a big, dull dud.
Chandler: Well, I think I judged her too quickly, and this time we were able to take the relationship to the next level.
(Joey creaks louder)
Rachel: Well, last time I almost got fired. You must end it, you must end it now!
Chandler: Oh, come on! Its not like this is an everyday occurrence for me! I mean usually Im pretty much just in there by myself.
(Joey makes a sound imitating one person making a bed creak and Chandler turns and glares at him.)
Rachel: Chandler!! (He turns around quickly) Promise me, you will end it.
Chandler: Okay, I promise, Ill end it.
Rachel: Thank you.
Chandler: I hope you know what Im giving up for ya, because shes not just the boss in your office, if you know what I mean.
Joey: Yeah-eh-eah! (Rachel glares at him) Oh-oh, sorry, I-I knew what he meant.
[Scene: The Geller household kitchen, Monica and Phoebe are cooking for Mrs. Gellers party.]
Mrs. Geller: (entering) Hows the hired help?
Monica: Doing great, the quiches are coming along.
Mrs. Geller: Whats this? Blue nail polish?
Monica: Yeah, I thought it was cute.
Mrs. Geller: Ahh, thats what your Grandmothers hands looked like when we found her.
Monica: Let me ask you a question.
Mrs. Geller: Hmm.
Monica: Why did you hire me?
Mrs. Geller: Oh, well Richard raved about the food at his party, of course you were sleeping with him. Then I heard the food at that lesbian wedding was very nice, I assume you werent sleeping with anybody there. Though, at least that would be something. (Leaves)
Monica: (to Phoebe) Oh my God! Did you hear that? She hired me because she thinks Im good.
Phoebe: Okay, I didnt hear that.
Monica: Oh yeah, she didnt hire me out of pity, it wasnt so she could pick on me in front of her friends, she actually thinks Im good.
Phoebe: Wow! And hey, its cool if youre a lesbian! (Gives her a thumbs up)
[Scene: Chandler and Joey's, Joey is scrapping gum off the table as there is a knock on the door. He goes over and opens it.]
The Salesman: (Entering before Joey can say anything) Good afternoon, are you the decision maker of the house?
Joey: Uhhhh. (Hes not sure)
The Salesman: Do you ah, currently own a set of encyclopedias?
Joey: No! No. But ah, try the classifieds, people sell everything in there.
The Salesman: Actually, Im not buying. Im selling. Let me ask you one question. Do your friends ever have a conversation and you just nod along even though youre not really sure what theyre talking about?
(We go into a flashback sequence with Joey remembering some of those times.)
[Cut to Monica and Rachels apartment, all are there.]
Ross: Im telling you its totally unconstituional.
Monica, Chandler, Phoebe, and Rachel: Oh yeah, I totally agree.
(Joey just nods his head.)
[Cut to Central Perk, the entire gang is there.]
Monica: I think he deserves a Nobel Prize. (Joey starts to nod Yes.)
All: Nooo!! (Joey quickly stops nodding his head.)
[Cut to Monica and Rachels, theyre all there playing cards.]
Chandler: it was like the Algonquin kids table. (They all laugh, but Joey only laughs not to be left out.)
[Cut back to the present day.]
The Salesman: (Interrupting the flashback) Excuse me, Im sorry, you havent said anything for about two and a half minutes, are you at all interested?
Joey: Yeah-well-yeah! Yeah-oh-yeah. Come on in.
[Scene: The Gellers Kitchen, Monica and Phoebe are still cooking.]
Phoebe: Thats weird.
Monica: What?
Phoebe: Your nails.
Monica: Oh, I know, I never wear fake ones. I just did it so my Mom wouldnt give me grief about me biting them.
Phoebe: Oh, no, I meant that its weird that you only have nine now.
Monica: (Looks at her nails) Oh my God. Wait a minute, I had them put (realises) Oh my God! Its in the quiche! Oh My God!
Phoebe: Okay, dont panic.  (She runs over to get her coat.) Oh! Oh, its cause theyre gonna eatthats the problem.
Mrs. Geller: (entering) (to Monica) Honey, dont bite your nails.
Monica: Okay ah, please dont freak out. Umm, but ah, theres a blue fingernail in one of the quiche cups, and theres no way to know which one.
Phoebe: And! Whoever finds it wins the prize!
Mrs. Geller: (laughs) Im not freaking out.
Monica: Then why are you laughing?
Mrs. Geller: Its nothing, its just that now your Father owes me five dollars.
Monica: What? You bet Id lose a nail?
Mrs. Geller: Oh no, dont be silly. I just bet Id need these. (Opens the freezer to reveal )
Monica: Frozen lasagnas?
Mrs. Geller: Um-hmm.
 So all that stuff about hiring me because I was good was
Mrs. Geller: No-no-no, that was all true. This was just in case you pulled a Monica.
Monica: You promised Dr. Weinburg, youd never use that phrase.
Mrs. Geller: Oh honey, come on, have a sense of humour, youve never been able to laugh at yourself.
Monica: (laughs) Thats right. My Mom doesnt have any faith in me! Oh, thats hilarious! Ha-ha-ha-ha-ha.
Phoebe: I dont get it.
Mrs. Geller: No, I have faith
Monica: (interrupting) No! You have lasagnas! (Storms out and an awkward silence follows.)
Oven: Ding!
Phoebe: Op, the ruined quiches are ready.
[Scene: Joannas office, Joanna and Chandler are making out on her chair. Chandler isnt wearing any pants.]
Chandler: It just doesnt feel like were breaking up.
Joanna: No, we are. Im sad.
Chandler: Okay.
(They start kissing again, but are interrupted by the phone.
Joanna: (answering the phone) Yes. (listens) Uh, cant you wait until tomorrow? (listens) All right. (hangs up) Unbelievable!!
Chandler: Thanks.
Joanna: No, no, that was my boss. I have to go.
Chandler: Okay. (Starts to button up his shirt)
Joanna: What are you doing?
Chandler: Im getting dressed.
Joanna: Why?

Joanna: Wait. I wanna show you something.
Chandler: What is it?
Joanna: Just a little gag gift somebody gave me. (Shes holding a pair of handcuffs) Put your hands together.
Chandler: Ah-ha, youre not the boss of me. (She kisses him) Yeah, you are! (She handcuffs him to the chair) Ooh, saucy.
Joanna: (kisses him) Ill be back in ten minutes.
Joanna: Knowing youre here, waiting for me I think its kinda exciting.
Chandler: Okay. But if you dont come back soon, (She leaves and closes the door) theres pretty much nothing I can do about it!
[Cut to Joannas outer office, where Rachel and Sophie work. They are both coming back from lunch.]
Joanna: (locking her door) Oh.
Sophie: Hi!
Joanna: Oh great! Ill keep it in my butt with your nose. (She grabs the cookie and walks out.)
Rachel: Thats weird, she locked the door.
Sophie: Yknow why? Shes got the Christmas bonus list in there. I saw her working on it this morning.
Rachel: Okay, swear you wont tell, but when Mark left he gave me a key to Joannas office.
Sophie: Yeah!
(Rachel unlocks and opens the door to reveal a half-naked Chandler handcuffed to the chair. They both gasp and Chandler stares at them in shock and surprise.)
Chandler: Hi! (to Sophie) How are you?
(Rachel and Sophie both back out and close the door without saying anything.
Commercial Break
[Scene: Joannas office, Chandler, still handcuffed to the chair, is looking through the lingerie catalogue by turning the pages with his teeth. The phone rings and Chandler answers it with his nose.]
Chandler: Hello, Joanna (Realises he doesnt know her last name) s office.
Joanna: (on speaker phone) Im really sorry but I may be a little while longer.
Chandler: How little?!
Joanna: A couple of hours, I feel awful.
Chandler: Look, this isnt funny! You get back here right now!
Joanna: I cant!!
Chandler: Why not?!
Joanna: Im in my bosss car!
Chandler: What?!
Joanna: Uh-oh, tunnel. (The phone gets cut off)
(Chandler gets an idea)
[Cut to Rachels office as her intercom buzzes.]
Rachel: (answering it) (angrily) What?!
Chandler: (in a serious, businesslike tone) Rachel, could I see you for a moment?
(Rachel goes into talk to Chandler.)
Chandler: Okay, heres the situation. The keys to the cuffs are on the back of the door. Could you be a doll and grab them and scoot on over and unlock me? And on a totally different subject, that is a lovely pantsuit.
Rachel: You promised you would break up with her!
Chandler: I did break up with her! She just took it really, really well!
Rachel: And the fact that you were jeopardising my career never entered your mind?!
Chandler: It did enter my mind! But then something happened that made it, shoot right out.
Rachel: Y'know what Chandler, you got yourself into those cuffs, you get yourself out of them.
Chandler: No-no-no-no-no-no-no!! I cant get myself right out of them! You must have me confused with the Amazing Chandler!! Come on, you have to unlock me, she could be gone for hours, and Im cold, and (Stops and looks up the skirt on a statue behind Joannas desk.)
Rachel: Oh, Chandler!! All right, this is it! (Grabs the key) You never see Joanna again!
Chandler: Never!
Rachel: You never come into this office again!
Chandler: Fine!

Chandler: Inever borrowed your Walkman.
Rachel: Well, then I lost it. You buy me one!
Chandler: You got it! Here we go! Come on! This is great! (Rachel goes over and unlocks the handcuffs) Ahhh! (He starts rubbing his wrist)
Rachel: Does it hurt?
 (He runs over to where his pants are hanging) Hello sweet pants!
Rachel: Wait a minute! What are you gonna tell Joanna?
Chandler: About what?

Chandler: Ill make something up! Im good at lying, I actually did borrow your Walkman!
Rachel: No, theres nothing to make up, shes gonna know that I have a key to her office, Ive got to get you locked up back the way you were! (She tries to drag him over to the chair, but Chandler stops her.)
Chandler: Oh-ho-ho, I dont think so!
(He starts to put his pants on, but Rachel manages to drag him to the chair. When they get to the chair, Chandler drops his pants and knocks the chair away. Rachel then backs him up and locks him to the top drawer of a filing cabinet.)
Chandler: Well, this is much better.
[Scene: Chandler and Joey's, The salesman is trying to sell Joey the encyclopedias.]
The Salesman: So, heres somebody interesting, Joey. What do you know about Van Gogh?
Joey: He cut off his ear.
The Salesman: And?
Joey: Im out.
The Salesman: He painted that. (Points to one of his paintings in the book)
Joey: Wow! Thats pretty nice. I thought he cut off his ear cause he sucked. What else you got in there?
The Salesman: Lets see, ahhh Where does the Pope live?
Joey: In the woods. No wait-wait, thats the joke answer.
The Salesman: Actually its, Vatican City. Now ahh, what do you know about vulcanised rubber?
Joey: Spocks birth control.
The Salesman: (laughs) You need these books.
[Scene: Monicas childhood bedroom (which has been turned into a gym), Monica is lying on the treadmill as Phoebe enters.]
Phoebe: Hey!
Monica: Hi.
Phoebe: This used to be your room? (She nods Yes) Wow! You mustve been in really good shape as a kid.
 I cant believe I actually thought she could change.
Phoebe: Well, who cares what your Mom thinks? So you pulled a Monica.
Monica: Oh good, Im glad thats catching on.
Phoebe: No but, why does that have to be a bad thing. Just change what it means. Y'know? Go down there and prove your Mother wrong. Finish the job you were hired to do, and well call that pulling a Monica.
Monica: What?
Phoebe: Okay, umm, if a kid gets straight As, his parents would say, "Yeah, he pulled a Monica." Y'know? Or a fireman saves a baby, and they go, "Yeah I know, he pulled a Monica." Or someone hits a homerun and the announcer says, "Yeah, that ones outta here." Though some things dont change.
Monica: (getting up) All right, Ill go down there. But, Im not gonna serve the lasagna. Im gonna serve something I make.
(She exits and Phoebe goes over and sits down at the machine that works your shoulders and tries to do one, which she does, easily.)
Phoebe: Wow! My breasts are really strong. (She goes and joins Monica.)
[Scene: Joannas office, Rachel and Chandler are having a little tug-of-war with his pants.]
Rachel: Chandler! Chandler, please, I have to get you locked up back the way you were, I am sooo gonna lose my job, shes very private about her office. Now I know why.
Chandler: Hey, look, youre in trouble either way! Okay? If she comes back and sees me locked to this instead of the chair, shes gonna know you were in here. So you might as well just let me go.
Rachel: What if I clean your bathroom for a month?
Chandler: It still wouldnt be clean. (Rachel makes an Eww, disgusting! face) All I want is my freedom.
Rachel: Foot rubs for a month!
Chandler: Freedom!
Rachel: Ill take all of your photos and put them into photo albums!
Chandler: Freedom! I want my freedom! Why wont you here me?! (Opens the door) Sophie, help me! Help me!! (Sophie stands up)
Rachel: Sophie sit!!
(She closes the door and puts his tie into his mouth as a gag.)
Rachel: No! God, would you just calm down!
 He does so with a Pouff!)
Chandler: Im gonna say this for the last time. Would you please just (He moves his arm which opens the drawer and hits in the back of the head, which proves his point.)
[Scene: Chandler and Joey's, Joey is now reading the V book, with the salesman watching.]
Joey: Wow! Theres a lot I didnt know about vomit. (The duck comes to the door of the bathroom, quacking.) (To the duck) In a minute. (The duck goes back into the bathroom.)
The Salesman: So, what do you say, Joey? You get the whole set of encyclopedias for twelve hundred dollars, which works out to just 50 bucks a book!
Joey: Twelve hundred dollars? You think I have $1200? Im home in the middle of the day, and I got patio furniture in my living room. I guess theres a few things you dont get from book learnin.
The Salesman: Well ah, what can you swing?
Joey: How about zero down and zero a month for a long, long time?
The Salesman: You dont have, anything?
Joey: You wanna see what I got? (He gets up to empty out his pockets) Okay? Ive got a baby Tootsie Roll, a movie stub, keys, a Kleenex, a rock, and an army man. Hey!
The Salesman: Okay, I-I get the picture. Uh, thanks, for your time. (Starts to leave)
Joey: And a 50. (The salesman stops suddenly) Huh, these must be Chandlers pants.
The Salesman: For 50 bucks, you can get one book! What will it be? A? B? C?
Joey: Oh, I-I think Im gonna stick with the V, I wanna see how this bad boy turns out.
[Scene: Joannas office, Rachel and Chandler are still negotiating.]
Rachel: I ah, will buy and wrap all of your Christmas gifts.
Chandler: No!
Rachel: I ah Oh! Ill squeeze you fresh orange juice every morning!
Chandler: With extra pulp?
Rachel: (happily) Yeah!!
Chandler: No!
Rachel: Doh!! (pause) Ive got it!
Chandler: You dont have it.
Rachel: I have so got it. Theres gonna be rumours about this, theres no way to stop it. Sophie knows, Monica and Phoebe know.
Chandler: How do Monica and Phoebe know?
Rachel: Oh, I called them. And when they ask me what I saw, I can be very generous (Holds her hands far apart) or very (In a high pitched voice) stingy.
Chandler: (intrigued) Go on.
Rachel: I can make you a legend. I can make you this generations Milton Berle.
Chandler: And Milton Berle has a
Rachel: Ohh, not compared to you. (Chandler nods in agreement)
[Scene: The Gellers kitchen, Phoebe is bringing in some dirty dishes.]
Monica: Well?
Phoebe: Theyre not even touching the lasagna!
Monica: Really?!
Phoebe: Oh, they love your casserole.
Monica: Yes!!
Phoebe: Its hard to believe that just a little while ago this was nothing but ingredients.
Mrs. Geller: (entering) Well, everyone seems to be enjoying your dish.
Monica: And you?
Mrs. Geller: I thought it was quite tasty.
Monica: So if everyone liked it, and you liked it, that would make this a success.
Monica: Well, I was going for wrong, but we can use your word.
Mrs. Geller: Yes, well I was wrong, and I have to say you really impressed me today.
Monica: Wow!
Phoebe: Umm, you might even say that she pulled a Monica. (They both look at her) (to Monica) She doesnt know we switched it.  (She starts to bite her nails)
Monica: That really means a lot. Oh, and Mom, dont bite your nails.
[Scene: Central Perk, all except Chandler, are there.]
Chandler: (hello) Hello.
Joey, Rachel, and Ross: Hey!
Monica: (in a sexy voice) Hello, Chandler. (Phoebe has a huge smile on her face.)
Chandler: (to Rachel) I love you. (Kisses her on the forehead)
Joey: Wh-whats going on?
Phoebe: Oh.
(She motions for them to come closer, they lean in and she whispers what Rachel told her. The guys both lean back laughing.]
Joey: No he doesnt!
Chandler: (checks his watch) Two hours, that lasted!
Rachel: So did you break up with Joanna?
Chandler: I think so.
Joey: Well, its good thing you got out when you did, before she blew up like that Vesuvius.
Ross: The volcano?
Joey: Yeah. And speaking of volcanoes, man are they a violent igneous rock formation.
Rachel: What?!

Monica: Why are you talking about volcanoes all of the sudden?
Joey: Well, we can talk about something else. What do you want to talk about? Vivisection? The Vasdeferens? The Vietnam War?
Monica: Oh! Did anybody see that-that documentary on the Korean War? (Joey is pissed)
All: Oh, yeah. Yeah.
Phoebe: Oh God, Korea is such a beautiful country.
Ross: With such a sad history.
Chandler: Could there be more Kims?
(They all laugh and Joey joins them, not to be left out. When the laughing dies down, he has a depressed look on his face.)
Closing Credits
[Scene: Rachels office, Rachel is coming in for the day.]
Joanna: (from her office) Whos out there?
Rachel: Its me! Good morning!
Joanna: Rachel, could you come in here for a moment, please?
Rachel: Yeah, sure.
Joanna: I seem to have had a slight office mishap. Could you please get the key off the back of the door for me.
Rachel: Oh, yeah! Yeah!
(She goes back and forth, not sure what to do first, put the bagel down or grab the key. She finally puts the bagel down and grabs the key and goes over to unlock Joanna.)
Joanna: You tell your friend Chandler that were definately broken up this time.
Rachel: Okay.
End


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--javax.servlet.jsp.el.ExpressionEvaluator | +--org.apache.commons.el.ExpressionEvaluatorImpl
This is the main class for evaluating expression Strings. An expression String is a String that may contain expressions of the form ${...}. Multiple expressions may appear in the same expression String. In such a case, the expression String's value is computed by concatenating the String values of those evaluated expressions and any intervening non-expression text, then converting the resulting String to the expected type using the PropertyEditor mechanism.
In the special case where the expression String is a single expression, the value of the expression String is determined by evaluating the expression, without any intervening conversion to a String.
The evaluator maintains a cache mapping expression Strings to their parsed results. For expression Strings containing no expression elements, it maintains a cache mapping ExpectedType/ExpressionString to parsed value, so that static expression Strings won't have to go through a conversion step every time they are used. All instances of the evaluator share the same cache. The cache may be bypassed by setting a flag on the evaluator's constructor.
The evaluator must be passed a VariableResolver in its constructor. The VariableResolver is used to resolve variable names encountered in expressions, and can also be used to implement "implicit objects" that are always present in the namespace. Different applications will have different policies for variable lookups and implicit objects - these differences can be encapsulated in the VariableResolver passed to the evaluator's constructor.
Most VariableResolvers will need to perform their resolution against some context. For example, a JSP environment needs a PageContext to resolve variables. The evaluate() method takes a generic Object context which is eventually passed to the VariableResolver - the VariableResolver is responsible for casting the context to the proper type.
Once an evaluator instance has been constructed, it may be used multiple times, and may be used by multiple simultaneous Threads. In other words, an evaluator instance is well-suited for use as a singleton.
| Nested Class Summary | |
private class |
ExpressionEvaluatorImpl.JSTLExpression
An object that encapsulates an expression to be evaluated by the JSTL evaluator. |
| Field Summary | |
(package private) boolean |
mBypassCache
Flag if the cache should be bypassed |
(package private) static java.util.Map |
sCachedExpectedTypes
The mapping from ExpectedType to Maps mapping literal String to parsed value |
(package private) static java.util.Map |
sCachedExpressionStrings
The mapping from expression String to its parsed form (String, Expression, or ExpressionString) |
(package private) static Logger |
sLogger
The static Logger |
| Constructor Summary | |
ExpressionEvaluatorImpl()
Constructor |
|
ExpressionEvaluatorImpl(boolean pBypassCache)
Constructor |
| Method Summary | |
(package private) static java.lang.String |
addEscapes(java.lang.String str)
Used to convert raw characters to their escaped version when these raw version cannot be used as part of an ASCII string literal. |
(package private) java.lang.Object |
convertStaticValueToExpectedType(java.lang.String pValue,
java.lang.Class pExpectedType,
Logger pLogger)
Converts the given String, specified as a static expression string, to the given expected type. |
(package private) java.lang.Object |
convertToExpectedType(java.lang.Object pValue,
java.lang.Class pExpectedType,
Logger pLogger)
Converts the given value to the specified expected type. |
java.lang.Object |
evaluate(java.lang.String pExpressionString,
java.lang.Class pExpectedType,
javax.servlet.jsp.el.VariableResolver pResolver,
javax.servlet.jsp.el.FunctionMapper functions)
Evaluates the given expression String |
(package private) java.lang.Object |
evaluate(java.lang.String pExpressionString,
java.lang.Class pExpectedType,
javax.servlet.jsp.el.VariableResolver pResolver,
javax.servlet.jsp.el.FunctionMapper functions,
Logger pLogger)
Evaluates the given expression string |
(package private) static java.lang.String |
formatParseException(java.lang.String pExpressionString,
ParseException pExc)
Formats a ParseException into an error message suitable for displaying on a web page |
(package private) static java.util.Map |
getOrCreateExpectedTypeMap(java.lang.Class pExpectedType)
Creates or returns the Map that maps string literals to parsed values for the specified expected type. |
java.lang.String |
parseAndRender(java.lang.String pExpressionString)
Parses the given expression string, then converts it back to a String in its canonical form. |
javax.servlet.jsp.el.Expression |
parseExpression(java.lang.String expression,
java.lang.Class expectedType,
javax.servlet.jsp.el.FunctionMapper fMapper)
Prepare an expression for later evaluation. |
java.lang.Object |
parseExpressionString(java.lang.String pExpressionString)
Gets the parsed form of the given expression string. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
static java.util.Map sCachedExpressionStrings
static java.util.Map sCachedExpectedTypes
static Logger sLogger
boolean mBypassCache
| Constructor Detail |
public ExpressionEvaluatorImpl()
public ExpressionEvaluatorImpl(boolean pBypassCache)
pBypassCache
- flag indicating if the cache should be
bypassed| Method Detail |
public java.lang.Object evaluate(java.lang.String pExpressionString, java.lang.Class pExpectedType, javax.servlet.jsp.el.VariableResolver pResolver, javax.servlet.jsp.el.FunctionMapper functions) throws javax.servlet.jsp.el.ELException
evaluate
in class javax.servlet.jsp.el.ExpressionEvaluator
pExpressionString
- The expression to be evaluated.pExpectedType
- The expected type of the result of the evaluationpResolver
- A VariableResolver instance that can be used at
runtime to resolve the name of implicit objects into Objects.functions
- A FunctionMapper to resolve functions found in
the expression. It can be null, in which case no functions
are supported for this invocation.
javax.servlet.jsp.el.ELException
public javax.servlet.jsp.el.Expression parseExpression(java.lang.String expression, java.lang.Class expectedType, javax.servlet.jsp.el.FunctionMapper fMapper) throws javax.servlet.jsp.el.ELException
parseExpression
in class javax.servlet.jsp.el.ExpressionEvaluator
expression
- The expression to be evaluated.expectedType
- The expected type of the result of the evaluationfMapper
- A FunctionMapper to resolve functions found in
the expression. It can be null, in which case no functions
are supported for this invocation. The ExpressionEvaluator
must not hold on to the FunctionMapper reference after
returning from parseExpression()
. The
Expression
object returned must invoke the same
functions regardless of whether the mappings in the
provided FunctionMapper
instance change between
calling ExpressionEvaluator.parseExpression()
and Expression.evaluate()
.
javax.servlet.jsp.el.ELException
- Thrown if parsing errors were found.java.lang.Object evaluate(java.lang.String pExpressionString, java.lang.Class pExpectedType, javax.servlet.jsp.el.VariableResolver pResolver, javax.servlet.jsp.el.FunctionMapper functions, Logger pLogger) throws javax.servlet.jsp.el.ELException
javax.servlet.jsp.el.ELException
public java.lang.Object parseExpressionString(java.lang.String pExpressionString) throws javax.servlet.jsp.el.ELException
javax.servlet.jsp.el.ELException
java.lang.Object convertToExpectedType(java.lang.Object pValue, java.lang.Class pExpectedType, Logger pLogger) throws javax.servlet.jsp.el.ELException
javax.servlet.jsp.el.ELException
java.lang.Object convertStaticValueToExpectedType(java.lang.String pValue, java.lang.Class pExpectedType, Logger pLogger) throws javax.servlet.jsp.el.ELException
javax.servlet.jsp.el.ELException
static java.util.Map getOrCreateExpectedTypeMap(java.lang.Class pExpectedType)
static java.lang.String formatParseException(java.lang.String pExpressionString, ParseException pExc)
static java.lang.String addEscapes(java.lang.String str)
public java.lang.String parseAndRender(java.lang.String pExpressionString) throws javax.servlet.jsp.el.ELException
javax.servlet.jsp.el.ELException
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


| Masternode ID | 0x{{witness}} | Masternode Rewards | {{reward}} BEB |
| Block Time | {{blockTime}} s | Total Blocks | {{totalBlocks}} |
| Week Mean Rewards | {{weekMeanRewards}} | ||
| Height | Time | Gas(wei) | Hash | Mined By |
|---|---|---|---|---|
| {{block.number}} | ({{block.timestamp | timeDuration}} ago) | {{block.gasUsed | number}} | {{block.hash}} | {{block.miner}} |


Sylvie and Bruno Concluded
by Lewis Carroll
Sylvie and Bruno, first published in 1889, and its 1893 second volume Sylvie and Bruno Concluded form the last novel by Lewis Carroll published during his lifetime. Both volumes were illustrated by Harry Furniss.
The novel has two main plots: one set in the real world at the time the book was published (the Victorian era), the other in the fictional world of Fairyland. While the latter plot is a fairytale with many nonsense elements and poems, similar to Carroll’s most famous children’s book Alice’s Adventures in Wonderland, the story set in Victorian Britain is a social novel, with its characters discussing various concepts and aspects of religion, society, philosophy and morality.
Source: Carroll, L. (1893). Sylvie and Bruno Concluded. London: Macmillan and Co.
- Preface
- The preface to the book.
- Chapter 1: “Bruno’s Lessons”
- The narrator goes to his Club and meets up with an old friend. Later, the narrator walks through the gardens and imprisons an elf and discovers it to be Bruno.
- Chapter 2: “Love’s Curfew”
- The narrator spots Lady Muriel seated on a bench. She explains about her engagement to her cousin Eric and how it ended.
- Chapter 3: “Streaks of Dawn”
- The narrator and Arthur go for a walk and chat about Bazaars.
- Chapter 4: “The Dog-King”
- The narrator, Sylvie, and Bruno come upon Nero.
- Chapter 5: “Matilda Jane”
- Bruno tells a story to the farmer’s wife while the narrator and Sylvie meet up with the farmer’s children in the orchard.
- Chapter 6: “Willie’s Wife”
- The narrator, Sylvie, and Bruno meet Willie’s wife.
- Chapter 7: “Mein Herr”
- Lady Muriel gets a visit from a German man.
- Chapter 8: “In a Shady Place”
- Arthur and the others get ready for the big party. Lady Muriel discusses right and wrong.
- Chapter 9: “The Farewell-Party”
- They all attend the party.
- Chapter 10: “Jabbering and Jam”
- Sylvie and Bruno meet the young female pianist on the way to the drawing-room.
- Chapter 11: “The Man in the Moon”
- Main Herr talks to Sylvie and Bruno
- Chapter 12: “Fairy-Music”
- Sylvie plays the piano.
- Chapter 13: “What Tottles Meant”
- Mein Herr begins to sing and Tottles replies (and he means every word).
- Chapter 14: “Bruno’s Picnic”
- The narrator tells Bruno a story. Bruno then tells the narrator his story.
- Chapter 15: “The Little Foxes”
- Bruno continues his story.
- Chapter 16: “Beyond These Voices”
- Mein Herr finishes his song to thanks and compliments of the crowd. Sylvie and Bruno disappear.
- Chapter 17: “To the Rescue!”
- Sylvie and Bruno go to sleep outdoors.
- Chapter 18: “A Newspaper-Cutting”
- The author shares a relevant newspaper clipping.
- Chapter 19: “A Fairy-Duet”
- The year ends and Muriel and the narrator mourn the death of Arthur.
- Chapter 20: “Gammon and Spinach”
- The narrator returns home.
- Chapter 21: “The Professor’s Lecture”
- The Professor gives a lecture to the narrator about science.
- Chapter 22: “The Banquet”
- The narrator takes a walk in the country lost in his memories. He visits the old man sitting on the porch.
- Chapter 23: “The Pig-Tale”
- The Professor remembers about the Pig-Tale.
- Chapter 24: “The Beggar’s Return”
- The beggar returns to visit the Emperor.
- Chapter 25: “Life Out of Death”
- The narrator receives a letter from Lady Muriel. Eric has returned.
- Year Published: 1893
- Language: English
- Country of Origin: England
-
Readability:
- Flesch–Kincaid Level: 6.5
- Word Count: 79,605
- Genre: Fantasy
- Keywords: 19th century literature, british literature, chapter 1: “bruno’s lessons”, chapter 23: “the pig-tale”, chapter 24: “the beggar’s return”, chapter 25: “life out of death”, lewis carroll


European Qualifiers play-off simulator
by , UEFA.comUEFA creates simulation tool to help supporters understand which teams could qualify for the UEFA European Qualifiers play-offs courtesy of their performances in the 2018/19 UEFA Nations League.
On 20 November, 20 out of the 24 qualifiers for UEFA EURO 2020 will be known, with the top two teams from each of the 10 qualification groups having made it through to next summer’s finals.
This leaves four final qualification spots to be decided through the UEFA European Qualifiers play-offs, which will take place in March 2020.
In order to help supporters and media outlets understand how teams will clinch a place in the play-offs, UEFA has created a simulation tool which will show which teams would qualify for the play-offs, based on scenarios designed by the users.
In total, 16 teams will compete in the play-offs, based on their performances in the 2018/19 UEFA Nations League – namely non-qualified UEFA Nations League group winners and teams replacing qualified group winners in accordance with article 16.03 of the competition regulations, i.e. the four top-ranked eligible sides in each league.
Unlike previous play-offs, the UEFA EURO 2020 games will be single-leg knockout matches. In each path, teams will be ranked first to fourth based on the overall UEFA Nations League rankings. The semi-finals of each play-off path will be as follows:
• Team ranked 1st v team ranked 4th
• Team ranked 2nd v team ranked 3rd
For each play-off final, a draw will take place on 22 November to determine which semi-final winner plays at home. The winners of each of the four finals will qualify for UEFA EURO 2020.
The current state of play will be updated after every European Qualifiers matchnight


This script implements the Stochastic LBFGS-B method described in
'A unified 2D/3D software environment for large scale time-harmonic full waveform inversion' Curt Da Silva and Felix Herrmann
applied to a 2D BG Compass example.
Each frequency batch should run in under an hour.
See the README file for instructions on how to download pre-run results and data.
If you want to run in parallel, use 4 workers. It is not recommended to run this program in serial. The results are stored in the path defined in the script setpath.m
The results are displayed in bg2_batch_results.m
% set parameters for experiment label = 'bg2_batch'; % name vfile = 'bg2v.rsf'; % reference velocity model v0file = 'bg2v0.rsf'; % initial velocity model datafile = 'bg2data.rsf'; % input data % parameters for modeling npml = 20; zsrc = 20; zrec = 10; f0 = 10; t0 = 0; % indices of frequency bands, total 17 bands of 3 frequencies each. nf = 35; batch_size = 3; overlap = 1; If = partition(nf,batch_size,overlap); % min and max offset to use. hmin = 100; hmax = 3000; % parameters for optimization maxiter = 5; % max. outer iterations per frequency band subprob = 1; %scaling factor, so each outer iteration %is this number times as expensive as a full sweep through the data N0 = 10;% initial batchsize on each worker seed = 1; % random seed %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Actual script, you should not need to change anything below setpath; expdir = [resultsdir label '/']; if ~exist(expdir,'dir') mkdir(expdir); end curdir = pwd; % read models [v,n,d,o] = rsf_read_all([datadir vfile]); [v0,n,d,o] = rsf_read_all([datadir v0file]); mref = 1e6./v(:).^2; m0 = 1e6./v0(:).^2; % read data [D,nd,dd,od] = rsf_read_all([datadir datafile]); D = reshape(D,nd(1)*nd(2),nd(3)); % model params model.o = o; model.d = d; model.n = n; model.freq = od(3) + (0:nd(3)-1)*dd(3); model.zsrc = zsrc; model.xsrc = od(2) + (0:nd(2)-1)*dd(2); model.zrec = zrec; model.xrec = od(1) + (0:nd(1)-1)*dd(1); model.f0 = f0; model.t0 = t0; model.unit = 's2/km2'; Q = speye(nd(2)); % offset mask hh = model.xrec'*ones(1,nd(2)) - ones(nd(1),1)*model.xsrc; params = struct; params.wri = false; params.batch_mode = true; params = default_fwi_params2d(params); C = ones(nd(1),nd(2)); C(abs(hh)<=hmin) = 0; C(abs(hh)>=hmax) = 0; params.pdefunopts.offset_mask = C; params.pdefunopts.helm_pml_max = npml; nsrc = length(model.xsrc); nrec = length(model.xrec); nfreq = length(model.freq); minv = min(vec(mref)); maxv = max(vec(mref)); % Inversion modelk = model; for k = 1:length(If) Ifk = If(k,:); disp(['Processing frequencies ' num2str(model.freq(Ifk))]); % select frequency band nf = length(Ifk); Dk = D(:,:,Ifk); Dk = reshape(Dk,nrec,nsrc*nf); spmd, Dk = codistributed(Dk); Dk = redistribute(Dk,codistributor1d(2,codistributor1d.unsetPartition,size(Dk))); end modelk.freq = model.freq(Ifk); % function handle to misfit fh = misfit_setup(m0,Q,Dk,modelk,params); % run inversion frugal_opts = struct; spmd, bmax = size(getLocalPart(Dk),2); end frugal_opts.bmax = [bmax{:}]; frugal_opts.b0 = N0*ones(size(frugal_opts.bmax)); frugal_opts.maxIter = maxiter; frugal_opts.innerit = subprob; mn = minfunc_batch(fh,m0,minv,maxv,frugal_opts); % write results rsf_write_all([expdir 'mn_' num2str(k) '.rsf'],{'out=stdout'},reshape(mn,n),d,o); m0 = mn; end


CHAPTER 347
BLIND, VISUALLY HANDICAPPED, AND OTHER DISABLED PERSONS
Section
347-1 Visually handicapped defined
347-2 Blind, defined
347-2.5 Service dog, defined
347-3 Department; general powers
347-4 Vocational rehabilitation of blind
347-5 Obtaining federal benefits
347-6 Registration of blind
347-7 Agencies for information and industrial aid
347-8 Workshops
347-9 Visiting blind and visually handicapped persons; home
teaching
347-10 Donations and examinations for sight conservation
347-11 Protection of records; divulging confidential
information prohibited; penalties; payments to blind
inalienable
347-12 Blind shop and handicraft program
347-12.5 Randolph-Sheppard revolving account
347-13 Persons who are blind, visually handicapped,
disabled; public places; public conveyances
347-13.5 Suits by individuals; jurisdiction; venue
347-14 Penalty
347-15 Fares for blind person and guide
347-16 Canes, use in public places
347-17 Driver of vehicle, caution
347-18 Penalty
347-19 Rights of blind; partially blind
347-20 Legislative findings
Note
Chapter heading amended by L 2011, c 175, §5.
Law Journals and Reviews
Timesharing in the 1990s. I HBJ, no. 13, at 89 (1997).


public interface MultipartyCommunicationSetup
There are several ways to communicate between parties - using sockets, queues, etc. Each concrete way should implements this interface and the functions in it.
This interface should be used in the general case of communication between multiple parties. In case of two parties there is a simpler interface
that can be used, called TwoPartyCommunicationSetup
.
The Communications Layer package is a tool used by a client that is interested in setting up connections between itself and other party. As such, this layer does not initiate any independent tasks, but the opposite. Given two parties, it attempts to set connections to them according to parameters given by the calling application. If succeeds, it returns these connections so that the calling client can send and receive data over them.
Note that multiple connections can be created between each pair of parties; the user can ask to set any number of connections between him and every other party. An application written for running a multiparty protocol can be the client of the Communications Layer. An example of a possible usage follows:
| Modifier and Type | Method and Description |
|---|---|
void |
close()
There are several implementations that should close the communication object.
|
void |
enableNagle()
Enables to use Nagle algrithm in the communication.
|
java.util.Map<PartyData,java.util.Map<java.lang.String,Channel>> |
prepareForCommunication(java.util.Map<PartyData,java.lang.Object> connectionsPerParty,
long timeOut)
An application that wants to use the communication layer will call this function in order to prepare for
communication after providing the required parameters.
|
java.util.Map<PartyData,java.util.Map<java.lang.String,Channel>> prepareForCommunication(java.util.Map<PartyData,java.lang.Object> connectionsPerParty, long timeOut) throws java.util.concurrent.TimeoutException
The constructor of the concrete classes should receive the data of the parties participate in the communication. After that, this function initiates the creation of the final actual connections between the parties.
This function gets a map that contains number of connection that should be established between the current party (application) and any other party in the protocol. The key for the map is the PartyData object contains the data of the other party and the value in the map can be two different things: 1. Integer - the number of connections that should be established between the current party and the party in the key. 2. String[] - the names of the connections that should be established between the current party and the party in the key. Each connection has a unique name, that we call ID. This name used to distinguish between the created connections in order to make it easier and more convenient to understand what is the usage of each connection.
If this function succeeds, the application may use the send and receive functions of the created channels to pass messages.
In this function, Nagle's algorithm is disabled; for cryptographic protocols this is typically much better. In order to use the Nagle algorithm, call the enableNagle() function.
connectionsPerParty
- indicates the amount of connections or the names of connections that should be created between the current application
and any other party in the protocoltimeOut
- the maximum amount of time we allow for the connection stage.java.util.concurrent.TimeoutException
- in case a timeout has occurred before all channels have been connected.void enableNagle()
By default Nagle algorithm is disabled since it is much better for cryptographic algorithms.
void close()


--- title: "It's the Final Countdown" date: "2018-03-14 00:00:00 -06:00" categories: - whats-blooming layout: "post" blog-banner: "whats-blooming-now-winter.jpg" post-date: "March 14, 2018" post-time: "1:00 PM" blog-image: "2018-03-13-wbn.jpg" published: true ---
If you are anything like us here at Red Butte Garden, you are probably counting down the days until spring. The Garden is starting to show some color, come get a sneak peek of what spring holds in store!
Windflower Anemone blanda
This is the first of many more flowers to come!
View from the Natural Area
Check out that clear sky! Now that the inversion is gone, get up to Red Butte for a hike in the Natural Area, the views are stunning.
Mojave Claretcup Echinocereus mojavensis
Speaking of stunning views, this native cactus may have the best view of all the cacti in the land.
 This is all that is left once the puffball mushroom's flesh has deteriorated.
Longstalk Springparsley Cymopterus longipes
This small early bloomer is a Utah native and can be found in the Natural Area.
Alpine Violet Cyclamen coum
This darling little plant can be seen throughout the Garden.
We have many varieties of hellebores blooming right now! Below are a couple of them. They can be easy to miss with their drooping flowers, so be sure to keep your eye on the ground. They can be seen along the Floral Walk and Children's Garden.
Lenten Rose Helleborus hybridus
Stinking Hellebore Helleborus foetidus
It's time to get ready for Spring! Come stretch your legs and and see the beginnings of the Garden coming to life!


Session 1. DODE
Sunday, May 5th, 5:15-6:30
1. Dynamic Objects and Meta-level Programming of an EXPRESS Language Environment
Peter Denno, Manufacturing Systems Integration Division
National Institute of Standards and Technology, Gaithersburg, Maryland, USA
2. DyVE: Reactive Software Validation Through A Dynamic Validation Tool
Christophe Arlen, Thomson Airsys, Multidomain Control Centers,
7 rue des Mathurins, F-92223 Bagneux Cedex, FRANCE
Bruno Berstel, Ilog S.A., 9 rue de Verdun, B.P. 85, F-94253 Gentilly Cedex, FRANCE
3. Gestalt-class: A Persistent, Multi-user CLOS Application Environment
Michael B. McIlrath, Michael L. Heytens, Thomas J. Lohman
Department of Electrical Engineering and Computer Science
Massachusetts Institute of Technology, Cambridge MA 02139
Session 2. DOW3
Tuesday, May 7th, 6:00-7:30
1. W3P: A Portable Presentation System for the World-Wide Web
Christopher Vincent, Intelligent Information Infrastructure Project
Artificial Intelligence Laboratory
Massachusetts Institute of Technology, Cambridge MA 02139
2. Patching onto the Web: An Emerging CL-HTTP Success Story
Byron Davies Motorola Logic and Analog Technology Group, Mesa, Arizona
Victoria Bryan Davies, Industrial Lisp and Magic, Phoenix, Arizona
3. A Common Lisp Framework for Document Classification and Retrieval
Andrew J. Blumberg, Artificial Intelligence Laboratory
Massachusetts Institute of Technology, Cambridge MA 02139
4. A Constraint-Guided Web Walker for Specialized Activities
John C. Mallery, Andrew J. Blumberg, and Christopher R. Vincent
Intelligent Information Infrastructure Project, Artificial Intelligence Laboratory
Massachusetts Institute of Technology, Cambridge MA 02139
Session 3. DOLA
Wednesday, May 8th, 6:00-7:30
1. Supporting Dynamic Languages on the Java Virtual Machine
Olin Shivers, Artificial Intelligence Laboratory
Massachusetts Institute of Technology, Cambridge MA 02139
2. CLOS Generic Function and Method Parameters: A Proposed Metaobject Protocol Enhancement
Eric Peterson, Artificial Intelligence Technologies Center
MITRE Corporation, 1820 Dolley Madison Blvd., McLean, VA 22102-3481
3. An Object Oriented Application for Corporate Networks Design
Erik Chrisment, France Telecom Cnet, 06921 Sophia Antipolis Cedex, FRANCE
4. A Graphical Interface for the Functional Synchronous Data-Flow Language Lambda-flow
Dewailly de Guillem, Laboratoire d'Informatique, Signaux et Systèmes
URA 1376 du CNRS et de l'Université de Nice, Sophia Antipolis
41, bd Napoléon III, 06041, Nice Cedex, FRANCE
Olivier Clarisse


|
| enum | state {
PENDING =0,
INITIALIZED =1,
ACTIVE =2,
SUSPENDED =3,
BLOCKED =4,
CANCELED =5,
DONE =6
} |
| | Help resolve deadlock situations.
|
| |
|
|
template<class T > |
| T * | get_api () |
| |
|
virtual app * | parent_app () const |
| |
|
virtual void | clear_subthread_from_parent_app () |
| |
|
state | get_state () const |
| | Get current thread state.
|
| |
|
app_id | aid () const |
| |
|
task_id | tid () const |
| |
|
software_id | sid () const |
| |
|
void | spawn (thread *thr) |
| |
|
long | init_id () |
| |
|
long | thread_id () const |
| |
| void | cancel () |
| |
|
bool | is_canceled () const |
| |
| virtual void | kill () |
| |
|
operating_system * | os () const |
| |
|
void * | stack () const |
| |
|
size_t | stacksize () const |
| |
|
void ** | backtrace () const |
| |
|
int | last_backtrace_nfxn () const |
| |
|
int | backtrace_nfxn () const |
| |
|
void | append_backtrace (void *fxn) |
| |
|
void | pop_backtrace () |
| |
|
void | set_backtrace (void **bt) |
| |
|
device_id | event_location () const |
| |
|
void | collect_backtrace (int nfxn) |
| |
|
void | init_thread (int phyiscal_thread_id, threading_interface *tocopy, void *stack, int stacksize, threading_interface *yield_to, void *globals_storage) |
| |
|
virtual void | run ()=0 |
| | Derived types need to override this method.
|
| |
| void | start_thread (thread *thr) |
| |
|
void | join () |
| |
|
process_context | get_process_context () const |
| |
| key * | schedule_key () |
| | key used More...
|
| |
| bool | is_initialized () const |
| |
|
void | set_affinity (int core) |
| |
|
void | add_affinity (int core) |
| |
|
void | zero_affinity () |
| |
|
void | set_cpumask (uint64_t cpumask) |
| |
|
uint64_t | cpumask () const |
| |
|
int | active_core () const |
| |
|
void | set_active_core (int core) |
| |
|
void * | get_tls_value (long thekey) const |
| |
|
void | set_tls_value (long thekey, void *ptr) |
| |
|
timestamp | now () |
| |
|
|
static const int | no_core_affinity = -1 |
| |
|
static const int | no_socket_affinity = -1 |
| |
|
static const int | main_thread = -1 |
| |
|
static const int | nic_thread = -2 |
| |
|
static const int | rdma_thread = -3 |
| |
|
static const app_id | main_thread_aid |
| |
|
static const task_id | main_thread_tid |
| |
|
|
class | operating_system |
| |
|
class | app |
| |
|
class | delete_thread_event |
| |
|
api * | static_get_api (const char *name) |
| |
| void sstmac::sw::thread::cancel |
( |
| ) |
|
|
inline |
This thread is not currently active - blocked on something However, some kill event happened and I never want to see this thread again. Make sure the thread doesn't unblock and clean up all resources associated with the thread
| bool sstmac::sw::thread::is_initialized |
( |
| ) |
const |
|
inline |
Test whether the current task has been initialized (activated) by a scheduler.
| void sstmac::sw::thread::kill |
( |
| ) |
|
|
virtual |
This can get called by anyone to have a thread exit, including during normal app termination
Reimplemented in sstmac::sw::app.
| key* sstmac::sw::thread::schedule_key |
( |
| ) |
|
|
inline |
| void sstmac::sw::thread::start_thread |
( |
thread * |
thr | ) |
|
A convenience request to start a new thread. The current thread has to be initialized for this to work.
The documentation for this class was generated from the following files:
- software/process/thread.h
- software/process/thread.cc


@* bookTable Template File *@ @(books: Seq[Book], bookFrom: Form[NewBook])(implicit request: MessagesRequestHeader, flash: Flash) @main("Book List") {
This page shows a table of books that is populated using Slick to populate a database.
| Title | ISBN | Price |
|---|---|---|
| @b.title | @b.isbn | @b.price |


The official UK Government website for data and insights on Coronavirus (COVID-19). Data is collected and published daily at around 4pm.
The latest R number is estimated at 0.7 to 0.9 with a daily growth rate range of –5% to –1% More info


?New
York
Botanical
Garden
lblb300
REVISION
OF
CANAV/ALIA,
1962
Subgenus
Canavalia
Canavalia
dictyota
Piper
Oet.
J.O.
Sauer
Vicinity
ol
S&nchez,
Samana
Peninsula;
sea
level
to
300
meters
altitude
No.
Imt-iW
W.
L.
ABBOTT,
Collector
SMITHSONIAN
INSTITUTION
From
THE
UNITED
STATES
NATIONAL
HERBARIUM
PLANTS
OF
THE
DOMINICAN
REPUBLIC
6
7
8
9
10
_
XT
m
The
New
York
copyright
reserved
botanical
Garden
1616300
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


--- layout: half title: Duncan Hart - the personal website of Duncan Hart, senior technology risk, cyber security and systems thinking specialist. --- {% if site.title %}
{{ site.content }}


total score:
game over!
frame:
points:
roll:
bonus rolls!
points:
rolls allowed:
frame over
points:
roll
next frame
roll


{{_('To create some content, you first need to join')}} {{_('a group')}} {{_('with creating powers, or ask your administrator for more')}} {{_('Allons-y apps')}}.
{{_(description)}}


Last update: Sep 17, 2017
{{description}}
The 'must-buy' label marks packs that are required to unlock 100% in Lego Dimensions.


Safe
In
Login
Relief Disaster.


CSPICE_EKNELT returns the number of elements in a specified column entry
in the current row.
Given:
selidx the index of the column in the SELECT from which to retrieve
data. The range of 'selidx' is 1:nsel inclusive, where
'nsel' is the number of items in the SELECT clause of the
current query.
[1,1] = size(inst); int32 = class(inst)
row the index of the row containing the element.
[1,1] = size(inst); int32 = class(inst)
This number refers to a member of the set of rows matching
a query. 'row' must be in the range
1:nmrows
where 'nmrows' is the matching row count returned
by cspice_ekfind.
the call:
nelt = cspice_eknelt( selidx, row )
returns:
nelt the number of elements in the column entry belonging to the
specified column in the specified row.
[1,1] = size(inst); int32 = class(inst)
Null entries in variable-size columns are considered to have size 1.
Any numerical results shown for this example may differ between
platforms as the results depend on the SPICE kernels used as input
and the machine specific arithmetic implementation.
%
% Assign an EK file to load.
%
EK = 'test_file.ek';
%
% Load the EK.
%
cspice_furnsh( EK )
%
% The file "test_file.ek" contains the table 'vector_1', and
% 'vector_1' has the column named 'd_col_1', a vector of double
% precision values.
%
%
% Define a set of constraints to perform a query on all
% loaded EK files (the SELECT clause). In this case select
% the column "d_col_1" from table "vector_1."
%
query = 'Select d_col_1 from vector_1 order by row_no';
%
% Query the EK system for data rows matching the
% SELECT restraints.
%
[ nmrows, ok, errmsg ] = cspice_ekfind( query );
%
% Check whether an error occurred while processing the
% SELECT clause. If so, output the error message.
%
if ( ok )
printf( 'SELECT clause error: %s\n', errmsg );
end
%
% Loop over each row found matching the query.
%
for rowno = 1:nmrows
%
% Fetch the double precision data. We know the query returned
% one column, determine the number of values in the row of
% interest.
%
selidx = 1;
nelt = cspice_eknelt( selidx, rowno);
%
% Use cspice_ekgd to retrieve the value from
% row/column position.
%
for eltidx = 1:nelt
[ ddata, isnull, found ] = cspice_ekgd( selidx, ...
rowno, ...
eltidx );
%
% Output the value, if non-null data exist at the
% requested position.
%
if ~isnull
fprintf( 'Double precision data (%d,%d,%d): %f\n', ...
selidx, rowno, eltidx, ddata );
end
end
end
%
% Clear the kernel pool and database. Note, you don't normally
% unload an EK after a query, rather at the end of a program.
%
cspice_kclear
Matlab outputs:
Double precision data (1,1,1): 5000101.000000
Double precision data (1,1,2): 5000102.000000
Double precision data (1,1,3): 5000103.000000
Double precision data (1,1,4): 5000104.000000
Double precision data (1,2,1): 5000201.000000
Double precision data (1,2,2): 5000202.000000
Double precision data (1,2,3): 5000203.000000
Double precision data (1,2,4): 5000204.000000
Double precision data (1,3,1): 5000301.000000
Double precision data (1,3,2): 5000302.000000
Double precision data (1,3,3): 5000303.000000
Double precision data (1,3,4): 5000304.000000
This routine is meant to be used in conjunction with the EK fetch
entry points cspice_ekgc, cspice_ekgd, and cspice_ekgi. This routine
allows the caller of those routines to determine appropriate
loop bounds to use to fetch each column entry in the current row.
For important details concerning this module's function, please refer to
the CSPICE routine eknelt_c.
MICE.REQ
EK.REQ
-Mice Version 1.0.1, 03-NOV-2014, EDW (JPL)
Edited I/O section to conform to NAIF standard for Mice documentation.
-Mice Version 1.0.0, 10-APR-2010, EDW (JPL)
return the number of elements in a column entry
|


--- layout: post title: "Caught in the Oil" external-url: http://www.boston.com/bigpicture/2010/06/caught_in_the_oil.html ---
I can barely even look at these photos, the whole thing makes me feel sick to the pit of my stomach. It vindicates my decision to almost completely remove my own personal dependance on oil over a year ago. I hope more people make a choice to do the same.
Already so much damage has been done, the only positive that could happen at this point is BP going completely bankrupt and shutting down.


CONTROLS
- Left: Left Arrow Key <--
- Right: Right Arrow Key -->
- Jump: Space-Bar
- Mouse: Click and drag to move blocks
MISSION
AL is on the quest for bananas! Help Al by Following the
instructions to drag and drop the blocks in order to get to the
other side!


EVP_CIPHER_CTX_init() initializes cipher contex ctx.
EVP_EncryptInit_ex() sets up cipher context ctx for encryption with cipher type from ENGINE impl. ctx must be initialized before calling this function. type is normally supplied by a function such as EVP_des_cbc(). If impl is NULL then the default implementation is used. key is the symmetric key to use and iv is the IV to use (if necessary), the actual number of bytes used for the
key and IV depends on the cipher. It is possible to set all parameters to
NULL except type in an initial call and supply the remaining parameters in subsequent calls,
all of which have type
set to NULL. This is done when the default cipher parameters are not
appropriate.
EVP_EncryptUpdate() encrypts inl bytes from the buffer in and writes the encrypted version to out. This function can be called multiple times to encrypt successive blocks
of data. The amount of data written depends on the block alignment of the
encrypted data: as a result the amount of data written may be anything from
zero bytes to (inl + cipher_block_size - 1) so outl should contain sufficient room. The actual number of bytes written is
placed in outl.
If padding is enabled (the default) then EVP_EncryptFinal_ex()
encrypts the ``final'' data, that is any data that remains in a partial
block. It uses standard block padding (aka PKCS padding). The encrypted final data is written to out which should have sufficient space for one cipher block. The number of
bytes written is placed in outl. After this function is called the encryption operation is finished and no
further calls to EVP_EncryptUpdate() should be made.
If padding is disabled then EVP_EncryptFinal_ex() will not
encrypt any more data and it will return an error if any data remains in a
partial block: that is if the total data length is not a multiple of the
block size.
EVP_DecryptInit_ex(), EVP_DecryptUpdate() and
EVP_DecryptFinal_ex() are the corresponding decryption
operations. EVP_DecryptFinal() will return an error code if
padding is enabled and the final block is not correctly formatted. The
parameters and restrictions are identical to the encryption operations
except that if padding is enabled the decrypted data buffer out
passed to EVP_DecryptUpdate() should have sufficient room for
(inl + cipher_block_size) bytes unless the cipher block size is 1 in which case inl bytes is sufficient.
EVP_CipherInit_ex(), EVP_CipherUpdate() and
EVP_CipherFinal_ex() are functions that can be used for
decryption or encryption. The operation performed depends on the value of
the enc parameter. It should be set to 1 for encryption, 0 for decryption and -1 to
leave the value unchanged (the actual value of 'enc' being supplied in a
previous call).
EVP_CIPHER_CTX_cleanup() clears all information from a cipher
context and free up any allocated memory associate with it. It should be
called after all operations using a cipher are complete so sensitive
information does not remain in memory.
EVP_EncryptInit(), EVP_DecryptInit() and
EVP_CipherInit() behave in a similar way to
EVP_EncryptInit_ex(), EVP_DecryptInit_ex() and
EVP_CipherInit_ex() except the ctx parameter does not need to be initialized and they always use the default
cipher implementation.
EVP_EncryptFinal(), EVP_DecryptFinal() and
EVP_CipherFinal() are identical to
EVP_EncryptFinal_ex(), EVP_DecryptFinal_ex() and
EVP_CipherFinal_ex(). In previous releases they also cleaned
up the ctx, but this is no longer done and EVP_CIPHER_CTX_clean() must
be called to free any context resources.
EVP_get_cipherbyname(), EVP_get_cipherbynid() and
EVP_get_cipherbyobj() return an EVP_CIPHER structure when
passed a cipher name, a NID or an ASN1_OBJECT structure.
EVP_CIPHER_nid() and EVP_CIPHER_CTX_nid() return
the NID of a cipher when passed an EVP_CIPHER or EVP_CIPHER_CTX structure. The actual NID value is an internal value which may not have a
corresponding OBJECT IDENTIFIER.
EVP_CIPHER_CTX_set_padding() enables or disables padding. By
default encryption operations are padded using standard block padding and
the padding is checked and removed when decrypting. If the pad parameter is zero then no padding is performed, the total amount of data
encrypted or decrypted must then be a multiple of the block size or an
error will occur.
EVP_CIPHER_key_length() and
EVP_CIPHER_CTX_key_length() return the key length of a cipher
when passed an EVP_CIPHER or EVP_CIPHER_CTX
structure. The constant EVP_MAX_KEY_LENGTH is the maximum key length for all ciphers. Note: although
EVP_CIPHER_key_length() is fixed for a given cipher, the value
of EVP_CIPHER_CTX_key_length() may be different for variable
key length ciphers.
EVP_CIPHER_CTX_set_key_length() sets the key length of the
cipher ctx. If the cipher is a fixed length cipher then attempting to set
the key length to any value other than the fixed value is an error.
EVP_CIPHER_iv_length() and
EVP_CIPHER_CTX_iv_length() return the IV length of a cipher
when passed an EVP_CIPHER or EVP_CIPHER_CTX. It will return zero if the cipher does not use an IV. The constant
EVP_MAX_IV_LENGTH is the maximum IV length for all ciphers.
EVP_CIPHER_block_size() and
EVP_CIPHER_CTX_block_size() return the block size of a cipher
when passed an EVP_CIPHER or EVP_CIPHER_CTX
structure. The constant EVP_MAX_IV_LENGTH is also the maximum block length for all ciphers.
EVP_CIPHER_type() and EVP_CIPHER_CTX_type()
return the type of the passed cipher or context. This ``type'' is the
actual NID of the cipher OBJECT IDENTIFIER as such it ignores the cipher
parameters and 40 bit RC2 and 128 bit RC2 have the same NID. If the cipher
does not have an object identifier or does not have ASN1 support this
function will return
NID_undef.
EVP_CIPHER_CTX_cipher() returns the EVP_CIPHER structure when passed an EVP_CIPHER_CTX structure.
EVP_CIPHER_mode() and EVP_CIPHER_CTX_mode()
return the block cipher mode: EVP_CIPH_ECB_MODE, EVP_CIPH_CBC_MODE,
EVP_CIPH_CFB_MODE or EVP_CIPH_OFB_MODE. If the cipher is a stream cipher
then EVP_CIPH_STREAM_CIPHER is returned.
EVP_CIPHER_param_to_asn1() sets the AlgorithmIdentifier
``parameter'' based on the passed cipher. This will typically include any
parameters and an IV. The cipher IV (if any) must be set when this call is
made. This call should be made before the cipher is actually ``used''
(before any EVP_EncryptUpdate(),
EVP_DecryptUpdate() calls for example). This function may fail
if the cipher does not have any ASN1 support.
EVP_CIPHER_asn1_to_param() sets the cipher parameters based on
an ASN1 AlgorithmIdentifier ``parameter''. The precise effect depends on
the cipher In the case of RC2, for example, it will set the IV and
effective key length. This function should be called after the base cipher
type is set but before the key is set. For example
EVP_CipherInit() will be called with the IV and key set to
NULL, EVP_CIPHER_asn1_to_param() will be called and finally
EVP_CipherInit() again with all parameters except the key set
to NULL. It is possible for this function to fail if the cipher does not
have any ASN1 support or the parameters cannot be set (for example the RC2
effective key length is not supported.
EVP_CIPHER_CTX_ctrl() allows various cipher specific
parameters to be determined and set.
EVP_EncryptInit_ex(), EVP_EncryptUpdate() and
EVP_EncryptFinal_ex() return 1 for success and 0 for failure.
EVP_DecryptInit_ex() and EVP_DecryptUpdate()
return 1 for success and 0 for failure. EVP_DecryptFinal_ex()
returns 0 if the decrypt failed or 1 for success.
EVP_CipherInit_ex() and EVP_CipherUpdate() return
1 for success and 0 for failure. EVP_CipherFinal_ex() returns
0 for a decryption failure or 1 for success.
EVP_CIPHER_CTX_cleanup() returns 1 for success and 0 for
failure.
EVP_get_cipherbyname(), EVP_get_cipherbynid() and
EVP_get_cipherbyobj() return an EVP_CIPHER structure or NULL on error.
EVP_CIPHER_nid() and EVP_CIPHER_CTX_nid() return
a NID.
EVP_CIPHER_block_size() and
EVP_CIPHER_CTX_block_size() return the block size.
EVP_CIPHER_key_length() and
EVP_CIPHER_CTX_key_length() return the key length.
EVP_CIPHER_CTX_set_padding() always returns 1.
EVP_CIPHER_iv_length() and
EVP_CIPHER_CTX_iv_length() return the IV length or zero if the
cipher does not use an IV.
EVP_CIPHER_type() and EVP_CIPHER_CTX_type()
return the NID of the cipher's OBJECT IDENTIFIER or NID_undef if it has no
defined OBJECT IDENTIFIER.
EVP_CIPHER_CTX_cipher() returns an EVP_CIPHER structure.
EVP_CIPHER_param_to_asn1() and
EVP_CIPHER_asn1_to_param() return 1 for success or zero for
failure.
All algorithms have a fixed key length unless otherwise stated.
- EVP_enc_null()
-
Null cipher: does nothing.
- EVP_aes_128_cbc(), EVP_aes_128_ecb(), EVP_aes_128_cfb(), EVP_aes_128_ofb()
-
AES with a 128-bit key in CBC, ECB, CFB and OFB modes respectively.
- EVP_aes_192_cbc(), EVP_aes_192_ecb(), EVP_aes_192_cfb(), EVP_aes_192_ofb()
-
AES with a 192-bit key in CBC, ECB, CFB and OFB modes respectively.
- EVP_aes_256_cbc(), EVP_aes_256_ecb(), EVP_aes_256_cfb(), EVP_aes_256_ofb()
-
AES with a 256-bit key in CBC, ECB, CFB and OFB modes respectively.
- EVP_des_cbc(), EVP_des_ecb(), EVP_des_cfb(), EVP_des_ofb()
-
DES in CBC, ECB, CFB and OFB modes respectively.
- EVP_des_ede_cbc(), EVP_des_ede(), EVP_des_ede_ofb(), EVP_des_ede_cfb()
-
Two key triple DES in CBC, ECB, CFB and OFB modes respectively.
- EVP_des_ede3_cbc(), EVP_des_ede3(), EVP_des_ede3_ofb(), EVP_des_ede3_cfb()
-
Three key triple DES in CBC, ECB, CFB and OFB modes respectively.
- EVP_desx_cbc()
-
DESX algorithm in CBC mode.
- EVP_rc4()
-
RC4 stream cipher. This is a variable key length cipher with default key
length 128 bits.
- EVP_rc4_40()
-
RC4 stream cipher with 40 bit key length. This is obsolete and new code
should use EVP_rc4() and the
EVP_CIPHER_CTX_set_key_length() function.
- EVP_idea_cbc() EVP_idea_ecb(), EVP_idea_cfb(), EVP_idea_ofb(), EVP_idea_cbc()
-
IDEA encryption algorithm in CBC, ECB, CFB and OFB modes respectively.
- EVP_rc2_cbc(), EVP_rc2_ecb(), EVP_rc2_cfb(), EVP_rc2_ofb()
-
RC2 encryption algorithm in CBC, ECB, CFB and OFB modes respectively. This
is a variable key length cipher with an additional parameter called
``effective key bits'' or ``effective key length''. By default both are set
to 128 bits.
- EVP_rc2_40_cbc(), EVP_rc2_64_cbc()
-
RC2 algorithm in CBC mode with a default key length and effective key
length of 40 and 64 bits. These are obsolete and new code should use
EVP_rc2_cbc(), EVP_CIPHER_CTX_set_key_length()
and EVP_CIPHER_CTX_ctrl() to set the key length and effective
key length.
- EVP_bf_cbc(), EVP_bf_ecb(), EVP_bf_cfb(), EVP_bf_ofb()
-
Blowfish encryption algorithm in CBC, ECB, CFB and OFB modes respectively.
This is a variable key length cipher.
- EVP_cast5_cbc(), EVP_cast5_ecb(), EVP_cast5_cfb(), EVP_cast5_ofb()
-
CAST encryption algorithm in CBC, ECB, CFB and OFB modes respectively. This
is a variable key length cipher.
- EVP_rc5_32_12_16_cbc(), EVP_rc5_32_12_16_ecb(), EVP_rc5_32_12_16_cfb(), EVP_rc5_32_12_16_ofb()
-
RC5 encryption algorithm in CBC, ECB, CFB and OFB modes respectively. This
is a variable key length cipher with an additional ``number of rounds''
parameter. By default the key length is set to 128 bits and 12 rounds.
- EVP_aes_128_gcm(), EVP_aes_192_gcm(), EVP_aes_256_gcm()
-
AES Galois Counter Mode (GCM) for 128, 192 and 256 bit keys respectively.
These ciphers require additional control operations to function correctly:
see
GCM mode section below for details.
- EVP_aes_128_ccm(), EVP_aes_192_ccm(), EVP_aes_256_ccm()
-
AES Counter with CBC-MAC Mode (CCM) for 128, 192 and 256 bit keys
respectively. These ciphers require additional control operations to
function correctly: see CCM mode section below for details.
For GCM mode ciphers the behaviour of the EVP interface is subtly altered
and several GCM specific ctrl operations are supported.
To specify any additional authenticated data (AAD) a call to
EVP_CipherUpdate(), EVP_EncryptUpdate() or
EVP_DecryptUpdate() should be made with the output parameter out set to NULL.
When decrypting the return value of EVP_DecryptFinal() or
EVP_CipherFinal() indicates if the operation was successful.
If it does not indicate success the authentication operation has failed and
any output data MUST NOT
be used as it is corrupted.
The following ctrls are supported in GCM mode:
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, ivlen, NULL);
Sets the GCM IV length: this call can only be made before specifying an IV.
If not called a default IV length is used (96 bits for AES).
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, taglen, tag);
Writes taglen bytes of the tag value to the buffer indicated by tag. This call can only be made when encrypting data and after all data has been processed (e.g. after an EVP_EncryptFinal()
call).
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, taglen, tag);
Sets the expected tag to taglen bytes from tag. This call is only legal when decrypting data and must be made before any data is processed (e.g. before any EVP_DecryptUpdate()
call).
See EXAMPLES below for an example of the use of GCM mode.
The behaviour of CCM mode ciphers is similar to CCM mode but with a few
additional requirements and different ctrl values.
Like GCM mode any additional authenticated data (AAD) is passed by calling
EVP_CipherUpdate(), EVP_EncryptUpdate() or
EVP_DecryptUpdate() with the output parameter out set to NULL. Additionally the total plaintext or ciphertext length MUST be passed to EVP_CipherUpdate(),
EVP_EncryptUpdate() or EVP_DecryptUpdate() with
the output and input parameters (in and out) set to NULL and the length passed in the inl parameter.
The following ctrls are supported in CCM mode:
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG, taglen, tag);
This call is made to set the expected CCM tag value when decrypting or the length of the tag (with the tag parameter set to NULL) when encrypting. The tag length is often referred to
as M. If not set a default value is used (12 for AES).
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_L, ivlen, NULL);
Sets the CCM L value. If not set a default is used (8 for AES).
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_IVLEN, ivlen, NULL);
Sets the CCM nonce (IV) length: this call can only be made before
specifying an nonce value. The nonce length is given by 15 - L so it is 7 by default for AES.
Where possible the EVP interface to symmetric ciphers should be used in preference to the low
level interfaces. This is because the code then becomes transparent to the
cipher used and much more flexible. Additionally, the
EVP interface will ensure the use of platform specific cryptographic
acceleration such as AES-NI (the low level interfaces do not provide the
guarantee).
PKCS padding works by adding n padding bytes of value n to make the total length of the encrypted data a multiple of the block
size. Padding is always added so if the data is already a multiple of the
block size n will equal the block size. For example if the block size is 8 and 11 bytes
are to be encrypted then 5 padding bytes of value 5 will be added.
When decrypting the final block is checked to see if it has the correct
form.
Although the decryption operation can produce an error if padding is
enabled, it is not a strong test that the input data or key is correct. A
random block has better than 1 in 256 chance of being of the correct format
and problems with the input data earlier on will not produce a final
decrypt error.
If padding is disabled then the decryption operation will always succeed if
the total amount of data decrypted is a multiple of the block size.
The functions EVP_EncryptInit(),
EVP_EncryptFinal(), EVP_DecryptInit(),
EVP_CipherInit() and EVP_CipherFinal() are
obsolete but are retained for compatibility with existing code. New code
should use EVP_EncryptInit_ex(),
EVP_EncryptFinal_ex(), EVP_DecryptInit_ex(),
EVP_DecryptFinal_ex(), EVP_CipherInit_ex() and
EVP_CipherFinal_ex() because they can reuse an existing
context without allocating and freeing it up on each call.
For RC5 the number of rounds can currently only be set to 8, 12 or 16. This
is a limitation of the current RC5 code rather than the EVP interface.
EVP_MAX_KEY_LENGTH and EVP_MAX_IV_LENGTH only refer to the internal ciphers
with default key lengths. If custom ciphers exceed these values the results
are unpredictable. This is because it has become standard practice to
define a generic key as a fixed unsigned char array containing
EVP_MAX_KEY_LENGTH bytes.
The ASN1 code is incomplete (and sometimes inaccurate) it has only been
tested for certain common S/MIME ciphers (RC2, DES, triple DES) in CBC
mode.
Encrypt a string using IDEA:
int do_crypt(char *outfile)
{
unsigned char outbuf[1024];
int outlen, tmplen;
/* Bogus key and IV: we'd normally set these from
* another source.
*/
unsigned char key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
unsigned char iv[] = {1,2,3,4,5,6,7,8};
char intext[] = "Some Crypto Text";
EVP_CIPHER_CTX ctx;
FILE *out;
EVP_CIPHER_CTX_init(&ctx);
EVP_EncryptInit_ex(&ctx, EVP_idea_cbc(), NULL, key, iv);
if(!EVP_EncryptUpdate(&ctx, outbuf, &outlen, intext, strlen(intext)))
{
/* Error */
return 0;
}
/* Buffer passed to EVP_EncryptFinal() must be after data just
* encrypted to avoid overwriting it.
*/
if(!EVP_EncryptFinal_ex(&ctx, outbuf + outlen, &tmplen))
{
/* Error */
return 0;
}
outlen += tmplen;
EVP_CIPHER_CTX_cleanup(&ctx);
/* Need binary mode for fopen because encrypted data is
* binary data. Also cannot use strlen() on it because
* it wont be null terminated and may contain embedded
* nulls.
*/
out = fopen(outfile, "wb");
fwrite(outbuf, 1, outlen, out);
fclose(out);
return 1;
}
The ciphertext from the above example can be decrypted using the openssl
utility with the command line (shown on two lines for clarity):
openssl idea -d <filename
-K<PHONE_NUMBER>05060708090A0B0C0D0E0F -iv<PHONE_NUMBER>060708
General encryption and decryption function example using FILE I/O and
AES128 with a 128-bit key:
int do_crypt(FILE *in, FILE *out, int do_encrypt)
{
/* Allow enough space in output buffer for additional block */
unsigned char inbuf[1024], outbuf[1024 + EVP_MAX_BLOCK_LENGTH];
int inlen, outlen;
EVP_CIPHER_CTX ctx;
/* Bogus key and IV: we'd normally set these from
* another source.
*/
unsigned char key[] = "0123456789abcdeF";
unsigned char iv[] = "1234567887654321";
/* Don't set key or IV right away; we want to check lengths */
EVP_CIPHER_CTX_init(&ctx);
EVP_CipherInit_ex(&ctx, EVP_aes_128_cbc(), NULL, NULL, NULL,
do_encrypt);
OPENSSL_assert(EVP_CIPHER_CTX_key_length(&ctx) == 16);
OPENSSL_assert(EVP_CIPHER_CTX_iv_length(&ctx) == 16);
/* Now we can set key and IV */
EVP_CipherInit_ex(&ctx, NULL, NULL, key, iv, do_encrypt);
for(;;)
{
inlen = fread(inbuf, 1, 1024, in);
if(inlen <= 0) break;
if(!EVP_CipherUpdate(&ctx, outbuf, &outlen, inbuf, inlen))
{
/* Error */
EVP_CIPHER_CTX_cleanup(&ctx);
return 0;
}
fwrite(outbuf, 1, outlen, out);
}
if(!EVP_CipherFinal_ex(&ctx, outbuf, &outlen))
{
/* Error */
EVP_CIPHER_CTX_cleanup(&ctx);
return 0;
}
fwrite(outbuf, 1, outlen, out);
EVP_CIPHER_CTX_cleanup(&ctx);
return 1;
}
evp(3)
EVP_CIPHER_CTX_init(), EVP_EncryptInit_ex(),
EVP_EncryptFinal_ex(), EVP_DecryptInit_ex(),
EVP_DecryptFinal_ex(), EVP_CipherInit_ex(),
EVP_CipherFinal_ex() and
EVP_CIPHER_CTX_set_padding() appeared in OpenSSL 0.9.7.
IDEA appeared in OpenSSL 0.9.7 but was often disabled due to patent
concerns; the last patents expired in 2012.
| | |


Title
Description
Due Date
Priority
Choose priority
Notes
Checklist
Project?
Submit
Project Name
Create Project