OpenSolaris
Collectives
Discussions
Documentation
Download
Source Browser
Free CD
Log-in
|
en
Community Group documentation
:
Contributor Resources
>
Documentation Style Resources for OpenSolaris
>
Editorial Cheat Sheet for OpenSolaris Documentation
Top Menu
Show
:
Comments
Attachments
History
Information
Print
:
Print
Print preview
Export as PDF
Export as RTF
Export as HTML
Export as XAR
Wiki code for
Editorial Cheat Sheet for OpenSolaris Documentation
Hide Line numbers
1: {{velocity}} 2: {{html}} 3: 4: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 5: 6:  7: <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1"> 8: <TITLE>Editorial Cheat Sheet for OpenSolaris Documentation</TITLE> 9: <META NAME="GENERATOR" CONTENT="StarOffice 8 (Solaris Sparc)"> 10: <META NAME="CREATED" CONTENT="20080806;14343900"> 11: <META NAME="CHANGED" CONTENT="20080821;13445200"> 12:  13:  14:
Editorial Cheat Sheet for OpenSolaris Documentation
 15:
Use these guidelines to bring consistency in editorial style to 16: OpenSolaris documentation.
 17:
Readers project some significance onto every change in language, 18: tone, or typographic convention. A consistent style enables readers 19: to internalize the language and text conventions of the document. As 20: a result, understanding occurs more easily and significant points 21: stand out more clearly. Consistency is one of the most valuable 22: aspects of good style. In addition, consistency improves clarity for 23: translation purposes.
 24:
The following sections are provided:
 25:
 26:
GUI Tips
 27:
Headings
 28:
List Construction Guidelines
 29:
Procedure 30: Writing Tips
 31:
Pronoun Usage Guidelines
 32:
Punctuation Guidelines
 33:
Referencing 34: Man Pages
 35:
Referencing URLs
 36:
Referring to 37: Sun’s Trademarked Terms
 38:
Terminology Guidelines
 39:
 40:
GUI Tips
 41:
When writing about graphical user interfaces (GUIs), follow these 42: guidelines:
 43:
 44:
Show field names and menu option names as they appear in the 45: GUI. However, you may add initial capital letters even if the words 46: are not capitalized in the interface only to increase the 47: readability of running text.
 48:
 49:
Incorrect: 50: Select Prompt for credentials for every server for maximum security.
 51:
Correct: Select Prompt for 52: Credentials for Every Server for Maximum Security.
 53:
 54:
Do not use special text formatting such as an alternative 55: font or bold type for GUI element names such as menu names, menu 56: options, or field names. In addition, do not enclose GUI element 57: names in quotation marks.
 58:
 59:
 60:
Do not include a colon or ellipsis points associated with the 61: field name or menu option when mentioning the item in running text.
 62:
 63:
 64:
When writing about GUIs, reserve certain terms for specific 65: activities. The following table lists common usages. The terminology 66: of your GUI might require alternatives.
 67:
 68:
Table 1 GUI Terms 69:
 70:
 71: <COL WIDTH="15%"> 72: <COL WIDTH="40%"> 73: <COL WIDTH="40%"> 74:
 75:
 76:  77: Verb 78: 	 79:  80: Action 81: 	 82:  83: Example 84: 	 85:
 86:
 87:
 88:
 89:  90: Browse 91: 	 92:  93: To examine an interface to locate information of 94: interest. Do not use “explore.” 95: 	 96:  97: Browse the Solaris Product Registry. 98: 	 99:
 100:
 101:  102:
Check
 103: 	 104:  105:
Use “select” (not “check”) for 106: the action of placing a checkmark in a check box.
 107: 	 108:  109:
Select the Owner check box. (Some interfaces use 110: “checkbox.”)
 111: 	 112:
 113:
 114:  115:
Choose
 116: 	 117:  118:
To open a menu or initiate a command.
 119: 	 120:  121:
Choose New from the File menu.
 122:
Save your file, then choose Print.
 123: 	 124:
 125:
 126:  127:
 128: Click
 129: 	 130:  131:
To press and release a mouse button without moving 132: the pointer. Do not use “click on.”
 133:
Note: If you are referring to a 134: common button name (such as OK) or have established a button name 135: used in the application, you can eliminate the surrounding phrase 136: “the ... button.”
 137: 	 138:  139:
Click OK.
 140:
Click the Update Actions button.
 141:
Click the Glossary link.
 142:
Click the Help tab in the wizard for more 143: information.
 144: 	 145:
 146:
 147:  148:
Close
 149: 	 150:  151:
To close a window. Synonym for “dismiss.”
 152: 	 153:  154:
Close the Add Users window.
 155: 	 156:
 157:
 158:  159:
Deselect
 160: 	 161:  162:
Use “deselect” for the action of 163: removing a checkmark from a check box.
 164: 	 165:  166:
Deselect the Generate Code check box.
 167: 	 168:
 169:
 170:  171:
Double-click
 172: 	 173:  174:
To click a mouse button twice quickly without 175: moving the pointer.
 176: 	 177:  178:
Double-click the File Manager icon to open the 179: program.
 180: 	 181:
 182:
 183:  184:
Navigate
 185: 	 186:  187:
To move through a web page. Do not use “explore” 188: or “surf.”
 189: 	 190:  191:
Use all three panes to navigate the directory, 192: perform configurations, and create policies.
 193:
Navigate through the browser interface as you would 194: through a web page.
 195: 	 196:
 197:
 198:  199:
Open
 200: 	 201:  202:
To start or activate an application, or to access a 203: document, file, or folder. To open an application window or 204: browser window.
 205: 	 206:  207:
Open the StarOffice application.
 208:
Open the Samples document.
 209:
Open the Add Accounts window.
 210:
Open the Display Users page.
 211: 	 212:
 213:
 214:  215:
Press
 216: 	 217:  218:
To push down on and then release a keyboard key or 219: mouse button.
 220: 	 221:  222:
Press Return.
 223: 	 224:
 225:
 226:  227:
Select
 228: 	 229:  230:
To highlight an entire window or data in a window, 231: or to pick something from a list. To describe picking something 232: from a menu, use “choose.”
 233:
Use “select” as the verb and 234: “highlight” as the noun.
 235:
Use “select” for the action of placing 236: a checkmark in a check box.
 237: 	 238:  239:
Select the Compose window.
 240:
Select the second sentence. A yellow highlight 241: appears around the sentence.
 242:
Select the file name in the list.
 243:
Select the Owner check box.
 244: 	 245:
 246:
 247:  248:
Start
 249: 	 250:  251:
To activate a browser.
 252: 	 253:  254:
Start the browser.
 255: 	 256:
 257:
 258:  259:
Type
 260: 	 261:  262:
To enter or specify information in a field.
 263: 	 264:  265:
Type a name and a description.
 266: 	 267:
 268:
 269:
 270:
Headings
 271:
 272:
Capitalize the first letter of the first word of a title or 273: heading, and the first letter of all other words in the title or 274: heading except conjunctions, articles, prepositions of fewer 275: than four letters, and the “to” in infinitives.
 276:
 277:
What Is the 278: OpenSolaris Project?
 279:
Getting Started 280: With Solaris Dynamic Tracing
 281:
How to Install the 282: OpenSolaris 2008.05 Release
 283:
How to Boot a 284: System From the Network
 285:
Structural 286: Differences Between Kernel Modules and User Programs
 287:
Write Procedures That Are Easy to 288: Follow
 289:
 290:
Avoid ambiguous one-word headings such as “Overview.” 291: Such headings are meaningless when viewed out of context, as in the 292: search results list. Add more context to make headings meaningful.
 293:
 294:
Incorrect: 295: Overview
 296:
Correct: Solaris Kernel 297: Overview
 298:
 299:
Keep headings short but as meaningful as possible. Concise 300: headings are easier to scan in text and in the table of contents.
 301:
 302:
Incorrect: 303: Roadmap for OpenSolaris Feature Documentation
 304:
Correct: OpenSolaris 305: Documentation Roadmap
 306:
 307:
Place the most important words first.
 308:
 309:
Incorrect: 310: Features of the OpenSolaris Project
 311:
Correct: OpenSolaris Features
 312:
 313:
Avoid starting headings with an article.
 314:
 315:
List Construction Guidelines
 316:
Lists are used to break out information from the paragraph format 317: and to structure the information into an easier-to-read format. Lists 318: must include at least two items. If a list has more than nine items, 319: try to identify a way to divide the list into two or more lists. 320: Follow these guidelines when constructing lists:
 321:
 322:
Use unnumbered (bulleted) lists when the items are not 323: dependent on the sequence in which you present them. When the items 324: are dependent on sequence, use numbered lists with numerals 325: and letters to build the hierarchy.
 326:
Use running text when you have up to four one-word items that 327: have equal weight and no order. Incorporate the items in a sentence 328: in which the items are separated with serial commas. Otherwise, use 329: a vertical list. 330:
In the following example, a two-item list is embedded in running 331: text.
 332: 333:
Incorrect:
 334:
Two commands indicate when instructions are executed. The <TT>sed</TT> 335: instructions that follow the <TT>!install</TT> command are executed 336: during package installation. The <TT>sed</TT> instructions that 337: follow the <TT>!remove</TT> command are executed during package 338: removal. The order in which these commands are used in the file 339: does not matter.
 340:
Correct:
 341:
The following commands indicate when 342: the <TT>sed</TT> instructions are executed:
 343:
 344:
<TT>!install</TT> command – 345: Indicates that the instructions are executed during package 346: installation
 347:
<TT>!remove</TT> command – Indicates that the 348: instructions are executed during package removal
 349:
 350:
The order in which these commands are used in the file does not 351: matter.
 352: 353:
 354:
 355:
When introducing a list, use a colon if the introduction 356: clearly anticipates the list, especially if the introduction 357: contains phrasing such as “the following” or “as 358: follows.” If the introduction is complete in itself, use a 359: period. For example, you could use either of these statements to 360: introduce the same list:
 361:
 362:
Send a mail message in any of the 363: following three ways:
 364:
The system provides three convenient ways to send a mail 365: message.
 366:
 367:
 368:
 369:
When you use a complete sentence or a phrase with a colon to 370: introduce an unnumbered list, be sure that the syntax of the items 371: in the list is parallel and agrees with the syntax of the 372: introduction.
 373: 374:
Incorrect:
 375:
You can use Mail Tool to perform the 376: following tasks:
 377:
 378:
Compose a new message
 379:
Replied to a message sent to you
 380:
Forwarding a message to another person
 381:
 382:
Correct: 383:
 384:
You can use Mail Tool to perform the 385: following tasks:
 386:
 387:
Compose a new message.
 388:
Reply to a message that was sent 389: to you.
 390:
Forward a message to another person.
 391:
 392: 393:
For consistency in capitalization and punctuation, follow 394: these guidelines when you construct the items in lists:
 395:
 396:
Capitalize the first word of each list item in all lists, 397: except for placeholders and other literal computer terms.
 398:
Use punctuation at the end of each item in a list of 399: complete sentences.
 400:
Use no punctuation at the end of each item in a list of 401: sentence fragments.
 402:
Avoid mixing complete sentences and sentence fragments in 403: the same list. If you must have a mixed list, add periods at the 404: end of every list item.
 405:
 406:
 407:
Procedure Writing Tips
 408:
The purpose of many technical documents is to explain how to use a 409: product to accomplish specific tasks. In such documents, detailed 410: instructions on how to accomplish tasks are often provided in the 411: form of procedures. Procedures contain an ordered set of steps.
 412:
To write effective procedures for your audience and the task at 413: hand, follow these general guidelines:
 414:
 415:
Make sure that you establish the entire context in which the 416: procedure is done.
 417:
Include any prerequisite information, either in introductory 418: material or as the first step.
 419:
Try to limit the number of steps.
 420:
Provide explanatory text and visual cues. 421:
Tell readers what is to happen after each step. For example, if a 422: window opens as a result of a step, state that the window opens, and 423: refer to the window by its name.
 424:
Include all required procedural information. 425:
However, do not provide a detailed description of each window, 426: menu, or field in an interface. Similarly, do not put overview 427: information in the procedure.
 428:
 429:
When writing steps, determine what a user needs to do first, next, 430: and last. Write clearly so that a user understands exactly what to 431: do. To write clear, concise steps, follow these guidelines:
 432:
 433:
Order and number the steps. If users must perform different 434: actions based on the outcome of a step, use a bulleted list to show 435: the alternatives. Use letters for substeps. 436:
In the following example, note the use of step alternatives, 437: branching, and substeps.
 438:
 439: 440: 441:
 442:
Determine whether you need to remove the disk drive. 443:
 444:
If no, go to Step 2.
 445:
If yes: 446:
 447:
Gently pull back on foam piece 2.
 448:
Slide the disk drive out of foam piece 2.
 449:
Place the drive on the antistatic mat.
 450:

 451:

 452:
Carefully lift the component from the unit. 453:
 454: 455: 456:
 457: 458:
Use bold for the step text and any command-line syntax, if 459: possible with your writing tool. In addition, use monospace font for 460: command names and options, file names, IP addresses, and system 461: variables. Use italic for variables and command-line placeholders.
 462: 463:
 464: 465:
 466:

To examine a crash dump, use the mdb utility.
 467:
 # /usr/bin/mdb -k <VAR>crashdump-file</VAR>

 468: where <VAR>crashdump-file</VAR> is the name of the crash dump file for the operating system. The -k option specifies kernel debugging mode.
 469:
 470:
 471: 472: 473:
Make each step short and equivalent to one action.
 474:
 475:
Do not bury steps in a paragraph.
 476:
Try to use no more than 20 words to write each step.
 477:
Write about only one action in each step.
 478:
You can include a short phrase that does not need to be its own step. For example, you can include “and press Return” 479: or “and click OK” at the end of the step.
 480:
Make sure that you include steps for all actions that the 481: user must perform.
 482:
 483:
 484:
 485:
Place any explanatory text in a separate paragraph under the 486: step text, and keep the explanatory text as short as possible.
 487:
 488:
 489: 490:
Incorrect:
 491:
 492:
Choose File → Find.
 493:
After you make this selection, the Find dialog box appears.
 494:
In the Find field, type the text that you want to locate. Because this search is case-sensitive, be sure to use appropriate capitalization.
 495:
 496: 497:
Correct:
 498:
 499:
Choose File → Find. 500:
The Find dialog box appears.
 501:
In the Find field, type the text that you want to locate. 502:
This search is case-sensitive.
 503:
 504:
 505:
 506:
Write each step as a complete, correctly punctuated sentence 507: in the imperative mood. 508:
Do not use command names as verbs.
 509: 510:
 511: 512:
Incorrect:
 513:
 514:

<TT>cd</TT> to the new directory.
 515:
 516: 517:
Correct:
 518:
 519:

To change to the new directory, type <TT>cd</TT> directory-name.
 520:
 521: 522:
 523: 524: 525:
Write meaningful steps.
 526:
 527:
For GUI procedures, state what data the user needs to type 528: in a text field, which menu option the user must choose, and so on. 529: For example:
 530: 531: 532:
 533: 534: 535:
Incorrect:
 536:
 537:

Send the message to the recipients.
 538:
 539: 540:
Correct:
 541:
 542:

Click Send.
 543:
The message is sent to the recipients.
 544:
 545: 546: 547:
 548: 549: 550:
Note that in GUI procedures, the task (“Send the 551: message...”) is not the focus of the step, as is the case 552: with command-line procedures. 553:
 554:
For command-line procedures, make the task, not the command, 555: the focus of the step. Follow the step immediately with command 556: syntax, if applicable.
 557: 558:
 559:
Incorrect:
 560:
 561:

Type <TT>ufsrestore</TT> and press Return.
 562:
 563: 564:
Correct:
 565:
 566:

Verify that you successfully backed up the system.
 567:
 # <TT>ufsrestore -t</TT>

 568:
 569: 570:
 571: 572:
Follow the step and the command line with a description of the 573: command options and variables, or with a man page reference, as 574: necessary.
 575:
 576:
Indicate optional steps by including the word “Optional” 577: in parentheses.
 578:
 579:
 580:

(Optional) Reboot the system.
 581:
 582:
 583:
 584:
 585:
Explain to readers why they are to skip a step or jump to a 586: step.
 587:
 588:
 589:
 590:

Determine whether you want the partition table to be the current table.
 591:
 592:
If you want to change the displayed partition table, type <TT>n</TT> 593: and go to Step 8.
 594:
If you want to use the current partition table, type <TT>y</TT> 595: when prompted: 596:
Okay to make this the current partition table [yes] <TT>y</TT>

 597:
 598:
 599:
 600: 601:
 602:
Use branching of steps appropriately.
 603:
 604:
Use branching if the action to take at a particular step in 605: a procedure differs depending on the user’s situation or desired 606: outcome.
 607: 608:
Use branching if the procedure is the same for many cases 609: and differs only at one or two steps.
 610:
 611:
 612:
 613:

Format the diskette.
 614:
 615:
To format the diskette for a UFS file system, 616: type <TT>fdformat</TT> and press Return.
 617:
To format the diskette for an MS-DOS file system, 618: type <TT>fdformat -d</TT> and press Return.
 619:
 620:
 621:
 622:
 623:
Do not use branching for substeps. Use a., b., c. for 624: substeps.
 625:
 626:
 627:
Pronoun Usage Guidelines
 628:
Follow these guidelines when using pronouns:
 629:
 630:
Except for blog entries, do not use first-person pronouns in 631: OpenSolaris documentation.
 632: 633:
 634:
Incorrect: We 635: recommend that you install the custom components only on large 636: systems.
 637:
Correct: Install the custom components only on 638: large systems.
 639:
Incorrect: We can 640: write a protocol specification that describes the remote version of 641: printmessage().
 642:
Correct: You can write a protocol specification 643: that describes the remote version of printmessage().
 644:
Incorrect: Let’s 645: assume that the user already has an account on the system.
 646:
Correct: Assume that the user already has an 647: account on the system.
 648:
 649: 650:
Avoid the indefinite pronoun or indefinite possessive 651: pronoun, especially at the beginning of a sentence, unless the noun 652: to which the pronoun or possessive pronoun refers is clear. 653:
A pronoun that forces a reader to search for an antecedent can 654: frustrate or mislead the reader. Pronouns that typically cause this 655: type of confusion include “it,” “they,” 656: “its,” “theirs,” “this,” 657: “these,” “that,” and “those.”
 658: 659:
 660:
Incorrect: It also 661: describes how to install the OpenSolaris OS.
 662:
Correct: This chapter also describes how to 663: install the OpenSolaris OS.
 664:
Incorrect: You can 665: use these either individually or together.
 666:
Correct: You can use these two options either 667: individually or together.
 668:
Incorrect: The value 669: in this variable is used to determine when to pause during long 670: display output, such as during a software dump. Its value is reset 671: each time the <TT>ok</TT> prompt is displayed.
 672:
Correct: The value in this variable is used to 673: determine when to pause during long display output, such as during 674: a software dump. The variable’s value is reset each time the <TT>ok</TT> 675: prompt is displayed.
 676:
 677: 678:
Remember to use “its” as the possessive form of 679: “it,” not “it’s,” which is a contraction for 680: “it is.”
 681: 682:
 683:
Incorrect: This site 684: describes the application and it’s accompanying utilities.
 685:
Correct: This site describes the application 686: and its accompanying utilities.
 687:
 688:
 689:
Punctuation Guidelines
 690:
Apply the following punctuation guidelines:
 691:
 692:
Use commas to separate the items in a series of three or more 693: words, phrases, or clauses. Use the comma serial style. In other 694: words, use a comma before the conjunction that joins the last two 695: items in a series.
 696:
 697: Among your hidden files are <TT>.cshrc</TT>, 698: <TT>.defaults</TT>, <TT>.login</TT>, and <TT>.mailrc.</TT> 699:
 700: 701:
Avoid using an em dash for explanatory or appositive 702: purposes. Using an em dash can hinder clear writing by causing the 703: reader to pause. The use of em dashes can also result in sentences 704: that are difficult for readers to understand because the sentences 705: contain more than one main idea. Break a sentence in which em dashes 706: are used for explanatory purposes into two sentences.
 707: 708:
 709:
Incorrect: After a 710: context is established between two peers—say, a client and a 711: server—messages can be protected before being sent.
 712:
Correct: After a context is established between 713: two peers, messages can be protected before being sent. An example 714: of two peers is a client and a server.
 715:
 716:
In sentences that use em dashes for appositive purposes, replace 717: the em dashes with commas.
 718:
 719:
Incorrect: This 720: book—an API guide for developers—is referred to often.
 721:
Correct: This book, an API guide for 722: developers, is referred to often.
 723:
 724: 725:
Avoid using semicolons. Semicolons are often misused and are 726: difficult to read online. For conjoined sentences, consider 727: rewriting the text as separate sentences.
 728:
 729:
Incorrect: The 730: redirects contain the link-layer address of the new first hop; 731: separate address resolution is not necessary.
 732:
Correct: The redirects contain the link-layer 733: address of the new first hop. Separate address resolution is not 734: necessary.
 735:
 736:
 737:
Referencing Man Pages
 738:
UNIX commands are documented in reference materials known as man 739: pages or reference manual pages. When referring to man pages in 740: text, follow these guidelines:
 741:
 742:
Include the reference manual section number next to the first 743: reference of a command or function name only when you think the 744: reader might benefit from reviewing the man page in relation to the 745: information in the text.
 746:
The first time you include a command in a procedure, 747: cross-reference the command’s man page in the explanatory text 748: following the step. If the command appears later in the same 749: procedure or section, cross-reference the man page again only if 750: doing so in that context helps readers.
 751:
Do not include the reference manual section number next to 752: the command or function name in the following situations:
 753:
 754:
In every mention of the command or function if it is 755: referenced numerous times in a paragraph or series of paragraphs
 756:
In titles or section headings
 757:
In table, figure, or example captions
 758:
 759:
Use monospace font for the command or function name, and 760: regular text font for the reference manual section number, which 761: should appear in parentheses. Capitalize the letter in a man page 762: section, for example, 1M.
 763:
Make sure that instructions to the reader about how to access 764: the man page are clear. This guideline makes the man page reference 765: clearer to the reader and benefits translation as well.
 766:
 767:
Incorrect: See 768: <TT>ioctl</TT>(2).
 769:
Correct: See the <TT>ioctl</TT>(2) man page.
 770:
 771:
 772: 773:
The “man” part of the term “man page” when 774: used generically is treated as a standard English word and 775: capitalized in headings and at the beginning of a sentence. For 776: example, “Man pages are very helpful.” However, the man 777: command appears in monospace font and is always lowercase, as is the 778: case for all command names.
 779: 780:
Referencing URLs
 781:
Use monospace font for URLs. When introducing URLs, follow these 782: guidelines:
 783:
 784:
Make references to URLs as simple and direct as possible. 785:
Readers no longer need to be told to type a URL. For example, you 786: do not need to write detailed instructions such as “Point your 787: browser at the following URL.”
 788:
 789:
Incorrect: You can find further information by 790: typing the following URL: <TT>http://opensolaris.org</TT>.
 791:
Correct: Further information is available at 792: <TT>http://opensolaris.org</TT>.
 793:
Incorrect: Open the following URL in your 794: browser: <TT>http://opensolaris.org</TT>.
 795:
Correct: Go to <TT>http://opensolaris.org</TT>.
 796:
 797:
Precede a URL with “at” or “to” when 798: a preposition is needed.
 799:
 800:
Incorrect: Check for updates on 801: <TT>http://opensolaris.org</TT>.
 802:
Correct: Check for updates at 803: <TT>http://opensolaris.org</TT>.
 804:
Correct: To check for updates, go to 805: <TT>http://opensolaris.org</TT>.
 806:
 807:
Provide explanatory text about the web site before giving the 808: URL. A URL is acceptable at the end of a sentence. Readers no longer 809: confuse end punctuation with spelled-out URLs.
 810:
 811:
Incorrect: Go to <TT>http://opensolaris.org</TT> 812: for resources for users and developers.
 813:
Correct: For resources for users and 814: developers, go to <TT>http://opensolaris.org</TT>.
 815:
 816:
 817: When placing URLs in text, follow these guidelines:
 818:
 819:
If the URL is long, place the URL on its own line, introduce 820: it with a colon, and do not put a period at the end.
 821:
If the URL is extremely long, provide the base URL and an indication 822: of which links to click to get to the specific page.
 823:
If the URL is short, weave it into the sentence.
 824:
If your document provides two or more URLs in the same 825: paragraph, place them in a bulleted list.
 826:
 827:
 828: 829:
Referring to Sun’s Trademarked Terms
 830:
The scope and strength of a company’s exclusive rights in its 831: trademarks are weakened when the trademarks are not used properly. 832: This precept applies even when the trademarks are registered. A 833: number of well-known names, such as “escalator,” 834: “aspirin,” and “cellophane,” were once 835: trademarks. Because these names have fallen into common usage, the 836: terms are now generic and can be used by anyone.
 837:
Follow these guidelines to protect Sun’s trademarks, especially 838: its core Solaris and Java trademarks:
 839:
 840:
To determine whether a term is trademarked by Sun, go to 841: http://www.sun.com/suntrademarks/. 842: This web page contains a list of Sun’s trademarked terms.
 843:
If a term is trademarked, be sure to use the trademarked term 844: as an adjective, not as a noun or verb.
 845:
 846:
Incorrect: JavaBeans 847: is fun and easy to use.
 848:
Correct: JavaBeans components are fun and easy 849: to use.
 850:
Incorrect: Javatize 851: the system.
 852:
Correct: Enhance the system for the Java 853: platform.
 854:
 855:
Do not abbreviate trademarks. For example, do not write “SMC” 856: for Sun Management Center because “Sun” is a trademarked 857: term.
 858:
 859: 860:
Terminology Guidelines
 861:
Abbreviations and Acronyms
 862:
When using abbreviations or acronyms, follow these guidelines:
 863:
 864:
In most cases, expand the term and enclose its abbreviation 865: or acronym in parentheses the first time the term is used in text. 866: Then, continue using the abbreviation or acronym alone.
 867:
A local area network (LAN) consists of computer systems that can 868: communicate with one another through connecting hardware and 869: software. Your company probably uses a LAN. 870:
 871:
In books, repeat the spelled-out version at least at the 872: first occurrence in each chapter where the abbreviation or acronym 873: appears. 874:
In online help and other topic-based online documents, repeat the 875: spelled-out version at the first occurrence in each topic. In this 876: context, a topic is typically self-contained and resides in its own 877: file.
 878:
If you are certain that an abbreviation or acronym is a 879: standard term for your target audience, you do not need to spell it 880: out at any occurrence. 881:
For example, you do not need to spell out “CD-ROM,” 882: “RAM,” or “CPU” in a system administration 883: book. However, if you are uncertain, err on the side of caution, and 884: spell out the abbreviation or acronym.
 885:
When writing out the full word or phrase, do not capitalize 886: any letters unless the letters are capitalized as part of a standard 887: or begin a proper noun.
 888:
 889:
floating-point unit (FPU)
 890:
Internet Protocol (IP)
 891:
 892:
Avoid first usage of an abbreviation or acronym in a chapter 893: title, heading, or caption. 894:
If using an abbreviation or acronym for the first time in a 895: chapter title, heading, or caption is unavoidable, do not enclose 896: the abbreviation or acronym in parentheses next to the full word or 897: phrase. Use either the full word or phrase or the abbreviation or 898: acronym, depending on which item is more familiar to your audience. 899: Then, provide the explanatory text or the abbreviation or acronym in 900: the paragraph immediately following the chapter title, heading, or 901: caption.
 902:
 903:
Common Term Usage and Style
 904:
This section lists and briefly explains how to correctly use terms 905: that are frequently used in OpenSolaris documentation.
 906:
 907:
boot (Use instead of “boot up” or “bootup.”)
 908:
command line (noun), command-line (modifier)
 909:
command-line interface (CLI)
 910:
file name (noun, modifier), filename (variable) (Note two words without hyphenation when used as a noun 911: or modifier.)
 912:
file system (Note two words without hyphenation when used as a 913: noun or modifier.)
 914:
host name (noun), host-name (modifier), hostname (variable) 915:
install (verb)
 916:
installation (noun, modifier)
 917:
log in to (verb) (Use instead of “log into.”)
 918:
OpenSolaris (Note that “OpenSolaris” is a trademarked 919: term, so it should be followed by a noun such as "project," "source code," or "operating system.")
 920:
open source (noun, modifier)
 921:
path name (noun), path-name (modifier), pathname (variable)
 922:
recommend (Do not use. Just go ahead and recommend. For example, 923: “Back up all your files once a week.”)
 924:
shutdown (noun, modifier), shut down (verb)
 925:
Solaris Operating System (Solaris OS) (At first reference, use 926: spelled-out form with the abbreviation in parentheses. Then, use the 927: abbreviation.)
 928:
UNIX (Note capitalization.)
 929:
user name (Note two words.)
 930:
 931:  932: 933: 934: {{/html}} 935: {{/velocity}} 936:
Search
Collectives
Community Group
Academic and Research
Accessibility
Advocacy
Appliances
Approachability
Architecture Process and Tools
BrandZ
Chinese Users
Community Advisory Board
Databases
Desktop
Device Drivers
Distribution
Documentation
DTrace
Emerging Platforms
Fault Management
Games on OpenSolaris
HA Clusters
HPC Developer
Installation and Packaging
Internationalization and Localization
Laptop
Logical Domains
Modular Debugger (MDB)
Networking
NFS
Observability
OpenSolaris Governing Board (OGB)
OpenSolaris Printing
OS/Net (ON)
Performance
Power Management
PowerPC
Security
Service Management Facility (smf(5))
Software Porters
Solaris Volume Manager
Storage
Systems Administration Community Group
Testing
Tools Home
Unix File Systems (UFS)
Website Community
X Window System
Xen
ZFS
Zones
Project
ADSL Modem Enhancement
ARC Process Definition
ARM Platform Port
Automatic Data Migration
BIND Update
Bluetooth Stack & Drivers
Brocade FC HBA - Initiator
Brocade FC HBA - Target
Brussels - unified network link configuration
Caiman, Solaris Install Revisited
Celeste
Český portál
Chime Visualization Tool for DTrace
CIFS client for Solaris
CIFS Server
Clearview: Network Interface Coherence
Cluster Agent: Informix Dynamic Server
Cluster Agent: OpenSolaris Container
Cluster Agent: OpenSolaris xVM
Cluster Agent: Oracle E-Business Suite
Cluster agent: PostgreSQL
Cluster Agent: Samba
Cluster Agent: Tomcat
CMT
Coarse Data Flow Parallelism
Colorado: Open HA Cluster on OpenSolaris
Command Assistant
Common Array Manager
Companion - /opt/sfw: Free and Open Source software
COMSTAR: Common Multiprotocol SCSI Target
Content
Contest
CPU Observability
Credentials Process Groups
Crossbow: Network Virtualization and Resource Control
Crypto KMS Agent Toolkit
Cryptographic Framework
Data Migration Manager
Data Tethers
Deutsches Portal
Device Detection Tool
Device Driver Utility
Device Manager
Device Mapper
Direct Rendering Infrastructure & 3D drivers
DTrace Guide
Duckwater: Simplified name services management
Easy Tools
Emancipation
Emulex Fibre Channel Device Driver
Emulex Advanced Ethernet Device Driver
Enable/Enhance Solaris support for Intel Platform
Enhance the support of USB webcams
Enhanced SMF Profiles
Enhancements for AMD-based Platforms
Erlang DTrace Integration
Ethernet bridge module for Solaris
Evaluate Conary
Events Registry
Ext3 file system support
F/OSS Package Base
Facilitation
Fibre Channel over Ethernet
Fine Grained Access Policy (FGAP)
Fingerprint Authentication
Flexible Mandatory Access Control
Forensic Tools
Fully Open X Project
Fuse on Solaris
gcore
Generic Machine Check Architecture Improvements
Google SOC
HA-JBoss
HA-MySQL
Hadoop Live CD
Hitachi
HoneyComb Fixed Content Storage
HPC Stack
Image Packaging System
Improved Performance MIB
Indiana
Innovation Awards
Input Method
Intel Graphics
Internet Key Exchange, version 2
Interrupt Resource Management
IP Datapath Refactoring
IP over Infiniband
IPsec Tunnel Reform
iSCSI Extensions for Remote DMA (iSER)
iSNS Server
JeOS - Just enough Operating System
JKstat - a java binding for libkstat
Journaled File System (JFS)
K Desktop Environment
Kerberos
Kernel Sockets
Kernel SSL Enhancements
Key Management Framework
Korn Shell 93 integration/migration project
Labeled IPsec
LatencyTOP
Layer 2 Filtering
LDoms Manager
Lending
libMicro - portable microbenchmarks
Link Layer Discovery
Live Media: Technologies for distributions running from CD and other media
Locale Data
lofi compression and cryptography support
lx64 brand
Media Management System
Mega_sas
Mexico
MilaX minimal Live Distribution
MIPS Platform Port
Mozilla DTrace
MRSL.NONsharedDevice
Multi-lingual Glossary
Multi-pathing software (MPxIO)
Multiple disk sector size support
Multiple DOI
Muskoka: An open repository for OpenSolaris technical content
Navigator
Nemo: A Framework for High-Performance Networking
Network Auto-Magic
Network Data Management Protocol
Network MIBs
Network Performance Projects
Network Storage
Network Time Protocol (NTP)
Nevada Globalization
New Design of 4over6 Mechanism Based on OpenSolaris
NFS RDMA transport update and performance analysis
NFS Server in non-Global Zones
NFS version 4.1 pNFS
NFSv4 namespace extensions
Nightingale: Port Songbird to OpenSolaris
NPort ID Virtualization (NPIV)
NUMA
Object Storage Device (OSD) support for Solaris
OHACGE Script Based Plug-in
ON/Nevada (ONNV) Project
Open Development Infrastructure
Open HA Cluster Utilities
Open Sound System
OpenGrok
OpenPegasus CIM Server
OpenRTI
OpenSolaris Busybox
OpenSolaris Desktop
OpenSolaris Hispano
OpenSolaris Security Audit
OpenSolaris support for the QEMU processor emulator: host and guest
PEF: Packet Event Framework
Performance Wrappers
Pkgfactory
Polski Portal
Portail Francophone
Portal Brasil
Portals
Power Management Usability Interfaces
Presto: Automatic Printing Configuration
Printable Many Page Solaris Manuals
Promise SuperTrak RAID HBA Driver
QLogic Converged Network Adapter GLDv3 NIC Driver
Quagga Routing Protocol Suite Integration
RAID Configuration Utility
RBridge (IETF TRILL) support
RDMA Offload Framework
Reno: Login Process Enhancements for Interop
Resource Management
s10brand
SAM/QFS
SCM Migration Project
SCSI RDMA Protocol
SDcard Drivers
Sensor Abstraction Layer
Session Initiation Protocol
SFW
Shell: bourne shell, korn shell, C shell, etc.
Sierra: Intel WiFi Chipsets Support
Simple Panels
SM-HBA Based SAS HBA Management
SMF Documentation
Solaris iSCSI Target
Solaris PowerPC Port
SourceJuicer
Sparks: name service switch/nscd enhancements
Squashfs
Star integration/migration project
Starfish
Starter Kit
Storage Power Management
Sun Security Toolkit
Sun StorageTek Availability Suite
Support for OpenFabrics User Verbs / API on OpenSolaris OS
Support gcc4/GCCfss in Solaris
Suspend/Resume
SVR4 Packaging
Systemz
Tamarack: Removable Media Enhancements in Solaris
Tesla: OpenSolaris Enhanced Power Management
Test Development
Tickless Kernel Architecture
TIPC
Trademarks
Trusted networking interface policy database for Trusted Extensions
Trusted Platform Module support
Use Case
Validated Execution Project
Virtual Console
Virtual Network Machines
Visual Panels
Visualization for HPC
Volo
VRRP: Virtual Router Redundancy Protocol Implementation
VSCAN service
Web Stack
Website
Winchester: Schema mapping and ID mapping for AD Interoperability
Wireless USB Support
Wireless Wide Area Network
X Consolidation
x86 Generic FMA Topology Enumerator
Xen Gate
Xfce: A lightweight desktop environment
ZFS Boot and Install
ZFS on disk encryption support
Zone Manager
Zone Statistics
Русский портал
البوابة العربية
भारतीय पोर्टल
中国门户
日本ポータル
한국 포탈
User Group
Adelaide
Argentina
Arizona
Atlanta
Baltimore-Washington
Bangalore
Bangkok
Bangladesh
Brasilia
Beijing
Bélem
Berlin
Bhimavaram
Bloomington
Campus Ambassadors
Capital Region
Cardiff
Ceara
Charlotte
Chengdu
Chennai
Chihuahua
Chile
Cleveland
Colombia
Columbus
Connecticut
Cracow
Czech
Dallas/Ft. Worth
Danish
Delaware
Edinburgh
Egypt
Finland
Florida
Front Range
FuZhou
Great Lakes
Greece
Hangzhou
Hawaii
HeFei
Houston
Hong Kong
Hyderabad
Indonesia
Irish
Israel
Italian
Jinan
Jogja
Kabul
Kansas City
Latvia
London
Madurai
Manchester
Mato Grosso
Melbourne
Minas Gerais
Minnesota
Montreal
Moscow
Mumbai
Munich
NEA
Netherlands
New England
New York City
New Zealand
NIT Hamirpur
Noroeste
Nuremberg-Erlangen
Oklahoma City
Osnabrück
Peru
Philadelphia
Piaski
Pittsburgh
Porto Alegre
Puget Sound
Pune
Queensland
Rio de Janeiro
Research Triangle Park
Romania
Russia
San Antonio
San Diego
San Francisco
São Paulo
Scottish
Serbia
Shanghai
Shenzhen
Silicon Valley
Singapore
Slovak
South African
Southern Connecticut
St. Louis
Stavanger
Sweden
Switzerland
Sydney
Szczecin
Taiwan
Tecum
Thames Valley
Tokyo
Toronto
Trondheim
Tulsa
Turkey
Ufa
Ukraine
University of Melbourne
Vale do Paraíba
Vancouver
Venezuela
Welsh - Cymru
Wisconsin
Xi'an
Subsites
Code Reviews
Code Repositories
Package Search
Bugster
Bugzilla
Test Machines
Planet
Mailing Lists
Elections & Polls
ARC Case Logs
Source Juicer
Package Factory
User Authentication
Community Group documentation Pages
Developer Documentation
Contributor Resources
Docs Wiki
How To Participate
Man Page Guidelines
Persistent Links to Man Pages
Documentation Style Resources for OpenSolaris
Documentation Tools
OpenSolaris: Documentation Projects
OpenSolaris Primer
Examples
Files
Hardware Documentation
Build, Install, Patch, and Upgrade Documentation
New-to-Solaris FAQ
Doc Reviews
Doc Plan: Dual-Boot OpenSolaris DP2 with a Second Operating System
System Administration Documentation
Doc Downloads
Current Open Source Documentation
OpenSolaris Documentation License Information


This application demonstrates the use of TVideoPlayer with multitasking
The application downloads video content from http://playready.directtaps.net
- it will not work if this domain is not accessible
You can change the source for video content by modifying contents of config
variable in main.js
file


My First Weddings
Note: Much of what follows is from memory, but the ‘seventeen weddings' described near the end are from local copies of old blog posts I had written on the topic, many years ago. Hence, the detail.
I have, to date, been an official participant in 21 weddings in the US since I turned 18. Twice I was the groom. The other 19 times, I was the minister. The story gets weirder from there.
My first wedding was three decades ago. It lasted five years and she and I grew apart. The divorce was difficult, but then, they often are. I hope she’s doing well.
My twenty-first, and last, wedding was in Tower Bridge, London, on June 20th, 2010, to my lovely wife Leïla. We’re still happily married, with a beautiful daughter, Lilly-Rose.
Being a husband and father has been exhilarating, wonderful, and sometimes exhausting, but I wouldn’t trade my wife and daughter for anything.
Getting back to the wedding, the date, June 20th, was selected because it’s my birthday. I have no excuses if I forget. She knows me too well and I can’t fault her for that.
Curiously, this is my second wedding on my birthday. The first “birthday” wedding was also the first wedding I officiated at. My friends, we’ll call them Alice and Bob, called me, frantic because they lost the judge who was going to perform their wedding at a lake.
I, however, was neither old nor senile (I’ll not swear to either today), but I am an ordained minister. Despite being an atheist, I was ordained by The Universal Church in September of 1990. Back then, you had to do it the hard way by sending them a postcard with your details. Today, you can do this online.
Because I was an ordained minister, Alice and Bob explained the problem and asked if I could officiate at their wedding. I told them I would call them back after I found out. I called my church and they agreed to Fedex™ the paperwork to me, free of charge. I called my friends and told them I’d be honored to preside at their wedding. I neglected to tell them it was my birthday; that would have been bad form.
I filed my paperwork with Multnomah county, in the US state of Oregon and was quickly approved, though not without some odd looks. I was wearing a pair of black earrings and a silver/grey shirt that buttoned up the side, just the sort of thing I’d wear for a Goth Night of clubbing. But Portland being Portland, odd looks were all that came of that.
The wedding at the lake went off without a hitch and I got a good laugh when I pointed out that the witnesses were named “Tom and Jerry.” I also discovered, as a minister officiating at a wedding, it’s easier to pick up women then you would think. The date went poorly and my friends later told me that had they known who I met, they would have warned me not to. (Amongst other things, on our second date, not only did I find out that she was hopped up on little pink pills her former boyfriend had brought her from Mexico, she asked me to convert to Judaism because she had recently converted and couldn’t date outside of her faith. She was also an atheist. I declined a third date).
That couple also went their separate ways, so my first two weddings, one as groom and one as minister, ended in divorce.
Why I Stopped Officiating Weddings
The third wedding made me swear off officiating at weddings ever again. It was a favor for a friend of a friend. A couple couldn’t afford much, so they wanted a wedding in their home. I agreed, and spoke with the couple on the phone. I asked them about the theme (“non-religious”), who they’d like to include (“uh, we’re not sure”), if they’d be exchanging rings (“we don’t know”), and when they could send me a copy of their vows (“can you write them, please?“). Not one answer was particularly bad, but all of them together, coupled with very strange vibes from the phone call told me that something was, well, off.
I wrote their vows and called them back to arrange a rehearsal. They were busy, they said. Every time I called to try to arrange a rehearsal, they had an excuse. I simply could not get a rehearsal with them. So I finally said I’d show up to the wedding early, meet with them, and have a quick run through of the vows. In turn, I shortened the vows, knowing this was going poorly. It’s a very good thing that I did.
The day of the wedding, my friend (er, we’ll call him Charlie), who asked me if I would help the couple out, drove me to their place in the middle of nowhere. It was early October and they had decided on a Halloween-themed wedding.  I later realized they were supposed to be ghosts, but they looked for all the world like Klan hoods.
As I walked inside, I immediately assumed a “minister” persona, wanting to put the people at ease. Charlie introduced me to sexy vampires, unshaved cowboys, and one under-age Pocahantas who wore an ill-fitting costume and no bra. She was flashing everyone but no seemed bothered. I bit my tongue as I smiled. The phrase “feeling like a nun in a brothel” never felt more appropriate.
I was ushered into the back to meet the bride and while she stood their, half-naked, she read through the vows quickly and handed them back to me, assuring me they were fine. I then met the groom in a back bedroom and he told me he was busy and had no time to read the vows. I was brushed off quickly. It felt weird. No matter. I had shortened the vows because they wouldn’t meet for a rehearsal, but this was still very unsettling.
Finally the ceremony started, the happy couple faced me, their assembled family and friends faced me, I handed each of them a short copy of the vows they would read, and I started.
“Dearly beloved, we are gathered here today to celebrate the marriage of ...”

The audience smiled. I had gotten away with it.
I then turned to the bride and asked her to read her section of the vows. I was proud of the non-religious, life-affirming, gender-equal vows I had written. None of this, “honor and obey” nonsense. She read the vows and the audience smiled again.
I then turned to the groom and asked him to read his section of the vows. He stumbled and I discreetly pointed to the section clearly labeled “groom” so he could recover.
That was when I discovered that the groom was functionally illiterate. He couldn’t read the vows. He slowly, awkwardly, sounded out the words and I held a supporting smile as I died inside. He was probably dying, too. As was his fiancée. This was a low-point in my life.
After the groom finished, I quickly got through the “do you take your bride ...” and “do you take your groom ...“—still omitting the names I didn’t know—and finished with, “you may now kiss your bride.”
After the kiss finished and the applause died down, I had them turn to face the audience and said, “I now introduce you to the happily married couple!”
More applause, followed by dead silence due to our lack of rehearsal. I had no idea what to do next. The audience stared at us. I stared back. I silently cursed Charlie (sorry, Charlie). Then I piped up with, “how about a question and answer session? I’m sure we’d all like to what their life plans are.”
That’s me, the professional speaker. Always prepared to improvise.
After another awkward pause, the audience got into the swing of things and started peppering the bride and groom with questions as I embarrassedly slunk away to the kitchen, desperately in need of a drink. That’s when I discovered it was a “bring your own beer” wedding and no one had bothered to tell me. I was filling a glass with water when some kind soul hurried up and pressed a can of room temperature Olympia beer into my hand. Olympia beer must always be served ice cold because you desperately want dead taste buds when you drink it, but I was grateful.
Later, Charlie and I stood on the back porch, smoking, drinking, and rather uncharitably speculating about how long the marriage was going to last, when the back door slammed open. An angel with a cigarette dangling from her lips burst out, cussing up a storm. Slipping back into “minister” mode, I asked, “what’s bothering you, child?”
“My sister married an asshole!”
I told Charlie I was never doing another wedding. He was, and still is, a friend, but I can never quite forgive that nightmare.
A couple of years later, I learned that the smoking angel was being charitable. The marriage ended very badly.
Why I Started Officiating Weddings Again
But that’s only four weddings. Given that I had sworn off weddings, it’s probably a surprise that I officiated at seventeen more. Over the course of two days.
In March of 2004, Multnomah County of Oregon briefly legalized same-sex weddings , a full two months before Massachusetts started issuing marriage licenses to same-sex couples . In fact, the political mess was so awful that at one point, Bend, Oregon banned all marriages , whether they were same-sex or not.
The Multnomah County ruling was a contentious affair, with the city councilors passing the ruling on a day that they knew an objecting councilor would not be present. County clerks were instructed to waive the three-day waiting period and the 60 license applications a day soared to 400.
Given the overwhelming numbers and the fact that many ministers would not officiate, there was a call for ministers to perform the ceremonies. On March 4, 2004, I called up a woman I was due to have a blind date with the next day and informed her I would be cancelling it because I had to help. She was delighted with my excuse (and we later started dating).
On March 5th, I found myself standing on the sidewalk outside the Multnomah County Courthouse, wearing a nice suit with a clerical collar. I had bought the collar years ago for a Halloween party and was happy to discover that it was a real collar from a ministerial supply company.
One couple I married had been together for eight years and another for seventeen. Their joy at finally being married was wonderful. They cried, they laughed, they hugged and kissed. It was a great thing. I can’t understand how anyone could tell them “no.”
Only one couple gave me pause, a couple of boys who looked eighteen. I wasn’t bothered by the fact that they were gay, of course.  However, their mothers were with them, beaming with pride. Of course I officiated.
As for myself, I should have brought a lot more water with me. My throat was getting scratchy. I also should have brought some Advil because I found that standing on the sidewalk officiating at wedding after wedding was painful. I was cold and was getting a bit rummy at the end. I stared at some of the forms and once had trouble figuring out what my name was over the shouting of protestors.
There were loud cheers for the first wedding, trickling down to a handful near the end of the day. I married seven couples that day and it was awkard at times. I would ask their names and carefully write them down on their copy of the vows I had hastily written the night before. I had already learned my lesson about forgetting names. It was also mortifying to ask, “For purposes of filling out the paperwork, who will be the groom?” Unsurprisingly, the paperwork hadn’t been updated for same-sex couples.
I also needed two witnesses for every wedding and some couples were there alone, no family or friends to support them. I had no trouble finding volunteers in the crowd.
When the day ended, I was approached by another minister who was also dead tired. He explained that he had secured a free banquet room for the following day and had arranged to have couples sent there for their ceremonies. He saw my ceremonies and asked if I could come help. I was delighted to.
Somewhere out there is news footage from a local television station filming me doing weddings on the sidewalks. I had several calls from excited friends who congratulated me. I wish I could find that footage.
The next day I showed up at the restaurant and throughout the course of the day, the other minister and I would trade off batches of weddings. I performed ten of them that day. Most were lovely and the couples were often crying at the end. One was horrendous when one of the men was very belligerent, demanding to know why I was wearing a clerical collar. I pointed out that I was doing him a favor and his partner quickly calmed him down, but the man glared at me throughout the ceremony. I was tempted to stop and hand them off to the other minister, but his partner looked so embarrassed that I continued.
While waiting for my next batch of weddings, I found myself talking to a delightful lady who was terribly excited that she could finally get married to the love of her life. We had a great conversation and when it was her turn to get married, she asked the other minister if I could officiate instead. It was a lovely ceremony and after I finished, she insisted I come to their reception. I was happy to accept, and she gave me the address of a place nearby that I had never heard of. As I looked at the address, I noticed she included her phone number, “in case I got lost.” I pocketed the address as she was explaining to me that she was actually bisexual and she and her partner had an “open” relationship. And then she just looked at me and smiled.

I might be open-minded, but I was not going there. However, I had already agreed, in front of the wedding party, to attend the reception. I made my excuses, found the address, and walked in the front door of a smoke-filled dive bar. Several patrons glanced over, trying to figure out why a minister would be standing there. I had forgotten to remove my collar.
Screw it. I stumbled up to the bar, lit a cigarette and ordered a whisky. This was Portland and the bartender didn’t bat an eyelash. The wedding party arrived, were having a great time, and as soon as I felt I could escape, I made my excuses and left. I never did call that phone number.
The BBC
So those were my twenty-one weddings, only one of which survived. A little over one month later, the Oregon Supreme Court annulled the almost 3,000 same-sex weddings on the grounds that only the state legislature has the power to regulate marriage. Once again, right and wrong only had a passing flirtation with legal and illegal. My seventeen same-sex marriages were over. I was crushed, but that’s nothing compared to how many lives were devastated by that ruling.
And that is how, in 2010, I found myself working at the BBC in London, trying to deal with a rather awkward phone call.
I was moving in with Leïla, my then-fiancée. She had offered to pack my flat in Pimlico and then we’d move all of the boxes to her flat in Finsbury Park. Leïla is methodical. Organized. Careful. She went through all of my belongings, very carefully, and sorted them into appropriate boxes. She does this every time we move to ensure that when we unpack, nothing is misplaced.
As she was packing my belongings, she stumbled across some paperwork. She’s French and at the time, her English was good, but not fluent. My new fiancée had called me at work, quite unhappy, to know why she found seventeen wedding certificates with my name on them. Was I a bigamist?
We still laugh about that to this day.
Update: I’ve since been reminded of another wedding I officiated at. Oops. That makes 22 of them. That marriage has also ended, so excluding my current marriage, I am proud of say I have a 100% track record of having presiding over failed marriages.


This sample is based-on APPLET tag only.
JFileUpload Applet Homepage: http://www.jfileupload.com
This product requires Java™ technology.


Login Form with Disabled Submit Button
Required
Required
Submit
Login Form with Highlighted Error Fields
Required
Required
Submit
Login with Hidden Required Message
Required
Required
Submit


*For the confidentiality of other participants, we will request employment and age verification before granting access to our channels. Our general Discord is not open to cannabis store owners, managers or supervisors at this time!
Great question. This section was written by an older organizer at BCBUD who had to learn what a discord channel is. She still isn’t 100% sure, but here’s what she’s learned:
At a glance, Discord is a forum where anyone admitted is able to live chat with other participants.
It’s pretty fast moving, which is why we run multiple channels: A BCBUD members channel for dedicated discussion around our organizational affairs and industry news, a general chat for all things cannabis, and an educational channel for discussion on the latest in cannabis science.
Education and good training is essential to excelling in the cannabis industry, but educational opportunities are limited and can be hard to acquire. We want to increase access to basic educational opportunities for all cannabis workers, and are assessing these opportunities in order to launch an educational fund in late 2021 that will purchase courses for cannabis workers who are BCBUD members. Check back later for more!
The best way to access additional training in the meantime is by fighting for it through collective bargaining with a union. Beyond that, we suggest keeping tabs on Leafly News for a fun rundown on emerging science!
What we love:
What we love:
What we love:
What we love:
BCBUD Members will be invited to participate in virtual educational panels, may receive discounted access to industry events, can join discussion surrounding cannabis regulations, will be added to our members only Discord channel, and may occasionally get merch!
BCBUD members may be nominated or put their names forward for board membership! Board members are elected once a year. Board members are expected to participate in quarterly meetings that help guide the actions and goals of the organization. It is not a paid role, but one suited to individuals who want to help improve the cannabis industry for workers.
We are currently accepting nominations, please reach out if you would like to be considered and we will be in touch!


Artificial Intelligence Markup Language
AIML is an XML language for specifying the contents of a chat robot character. An AIML Interpreter is a program capable of loading and running the bot, and providing the bot’s responses in a chat session with a human user, called the client.
Background and History
In a previous life I help build a chat bot for an energy company to help answer basic customer questions and a limited number of interactions I was hugely proud of the work myself and the team did, the bot was hugely successfuly, saving the company £1000's in customer support costs and was also nominated for a number of awards, once only being beaten by the Intel Team who created Stephen Hawkings voice system at the 2015 V3 Awards
That bot was based on a Python 2.x version of an AIML 1.0 interpreter that I converted to Python 3 and then heavily modified to support a wide range of additional featurea and capabillities. Most of which have now been added to AIML 2.0 spec. However no one has yet built a fully functional Python 3.x interpreter, hence this project.
Right now it implements about 100% of the AIML spec. This version also supports one additional grammar < extension >, which allows you to call native Python classes, similar in a way that the sraix tag works.
Overtime I intend to write a full AIML 2.0 tutorial as well as comprehensive documentation for using this version of program-y
Enjoy and please leave any feedback for me and I'll get back to you. Keiff
Support or Contact
Having trouble with Pages? Check out our documentation or contact support and we’ll help you sort it out.


App demonstrating functions for App for XQuery Summer Institute using Folger Shakespeare Library tei data.
*Timeline generated with http://timeline.knightlab.com/


Chapter 6 Combining trait, weather, and image datasets
The objective of this vignette is to walk through how to combine our several types of data, and demonstrate several realistic analyses that can be done on these merged data.
For the first analysis, we want to figure out how the number of sufficiently warm days affects the amount of canopy cover at our site. We do this by combining the canopy cover data with the meteorological data on growing degree days, then modeling and plotting their relationship. We are specifically interested in figuring out when the increase in canopy cover starts to slow down in response to warm temperature days.
The second analysis compares greenness from image data with canopy cover. The second analysis uses the gdal_translate tool from the GDAL package. You can use one of the prepared downloads availble on the GDAL web site to install the needed software tool. Alternatively, it’s possible to download and build the tools on your system. For example, on the Mac, the command is brew install gdal
.
6.1 Get and join data
Here we combine two dataframes. The first contains all the canopy height values for 2017, which was created in the traits vignette. The second is the cumulative growing degree days for all of 2017, which were calculated from the daily minimum and maximum temperatures in the weather vignette. They are combined by their common column, the date.
library(dplyr)
library(ggplot2)
library(jsonlite)
library(lubridate)
library(traits)
library(inflection)
options(betydb_url = "https://terraref.ncsa.illinois.edu/bety/",
betydb_api_version = 'v1')
trait_canopy_height <- betydb_query(table = "search",
trait = "canopy_height",
date = "~2017",
limit = "none")
trait_canopy_height = trait_canopy_height %>%
mutate(day = as.Date(raw_date))
weather <- fromJSON('https://terraref.ncsa.illinois.edu/clowder/api/geostreams/datapoints?stream_id=46431&since=2017-01-01&until=2017-12-31', flatten = FALSE)
weather <- weather$properties %>%
mutate(time = ymd_hms(weather$end_time))
daily_values = weather %>%
mutate(day = as.Date(time),
air_temp_converted = air_temperature - 273.15) %>%
group_by(day) %>%
summarise(min_temp = min(air_temp_converted),
max_temp = max(air_temp_converted),
gdd = ifelse(sum(min_temp, max_temp) / 2 > 10,
(max_temp + min_temp) / 2 - 10, 0))
daily_values <- daily_values %>%
mutate(gdd_cum = cumsum(gdd))
trait_weather_df <- full_join(trait_canopy_height, daily_values, by = "day")
trait_weather_df <- trait_weather_df %>%
select(day, cultivar, mean, gdd_cum) %>%
na.omit()
6.2 Plot and model relationship between GDD and canopy cover for each cultivar
We are interested in how growing degree days affects canopy cover. To investigate this, we are going to model and plot their relationship. We want to know the relationship for each cultivar, so we’ll start of by determining the parameters of the model for one of the cultivars in our dataset. We are using a logistic growth model here because it is appropriate for the shape of the GDD-cover relationship.
single_cultivar <- trait_weather_df %>%
filter(cultivar == "PI656026")
cap <- 150
initial <- 25
mean <- single_cultivar$mean[67]
gdd_cum <- single_cultivar$gdd_cum[67]
rate <- ((log((cap/mean) - 1)) - initial)/gdd_cum
model_single_cultivar <- nls(mean ~ cap / (1 + exp(initial + rate * gdd_cum)),
start = list(cap = cap, initial = initial, rate = rate),
data = single_cultivar, trace = TRUE)
## 65561.13 :<PHONE_NUMBER>0 25.00000000 -0.02894769
## 11988.61 :<PHONE_NUMBER>40 4.718642636 -0.005912499
## 4173.416 :<PHONE_NUMBER>93 5.616561157 -0.006869817
## 4028.564 :<PHONE_NUMBER>0 5.90077607 -0.00718899
## 4026.739 :<PHONE_NUMBER>35 5.926804526 -0.007213872
## 4026.719 :<PHONE_NUMBER>44 5.932671676 -0.007222044
## 4026.718 :<PHONE_NUMBER>09 5.931654826 -0.007220117
## 4026.718 :<PHONE_NUMBER> 5.9322960 -0.0072212
## 4026.718 :<PHONE_NUMBER>3 5.93201135 -0.00722071
## 4026.718 :<PHONE_NUMBER>91 5.932146187 -0.007220941
## 4026.718 :<PHONE_NUMBER>76 5.932083164 -0.007220833
## 4026.718 :<PHONE_NUMBER>99 5.932112671 -0.007220884
single_cultivar <- single_cultivar %>%
mutate(mean_predict = coef(model_single_cultivar)[1] / (1 + exp(coef(model_single_cultivar)[2] + coef(model_single_cultivar)[3] * gdd_cum)))
We then use the parameters from a single cultivar to run a model for each of the rest of the cultivars. These results are used to plot the model predictions, which are shown as an orange line. We also calculated the inflection point from each cultivar’s model, which will be used in the following section.
all_cultivars <- c(day = as.double(), cultivar = as.character(), mean = as.numeric(),
gdd_cum = as.numeric(), mean_predict = as.numeric())
for(each_cultivar in unique(trait_weather_df$cultivar)){
each_cultivar_df <- filter(trait_weather_df, cultivar == each_cultivar)
each_cultivar_model <- nls(mean ~ cap / (1 + exp(initial + rate * gdd_cum)),
start = list(cap = cap, initial = initial, rate = rate),
data = each_cultivar_df)
model_cap <- coef(each_cultivar_model)[1]
model_initial <- coef(each_cultivar_model)[2]
model_rate <- coef(each_cultivar_model)[3]
each_cultivar_df <- each_cultivar_df %>%
mutate(mean_predict = model_cap / (1 + exp(model_initial + model_rate * gdd_cum)),
inf_point = ((log((model_cap / 100) - 1)) - model_initial) / model_rate)
all_cultivars <- rbind(each_cultivar_df, all_cultivars)
}
ggplot(all_cultivars) +
geom_point(aes(x = gdd_cum, y = mean)) +
geom_line(aes(x = gdd_cum, y = mean_predict), color = "orange") +
facet_wrap(~cultivar, scales = "free_y") +
labs(x = "Cumulative growing degree days", y = "Canopy Height")
6.3 Create histogram of growth rate for all cultivars
The last thing that we are going to do is assess the difference in this relationship among the cultivars. We are going to use the inflection point from the logistic growth model, which indicates when canopy cover stops increasing as quickly with increasingly more warm days. The resulting inflection points for each cultivar are plotted as a histogram.
ggplot(all_cultivars) +
geom_point(aes(x = gdd_cum, y = mean)) +
geom_line(aes(x = gdd_cum, y = mean_predict), color = "orange") +
geom_vline(aes(xintercept = inf_point)) +
facet_wrap(~cultivar, scales = "free_y") +
labs(x = "Cumulative growing degree days", y = "Canopy Height")
ggplot(data.frame(inf_points = unique(all_cultivars$inf_point))) +
geom_histogram(aes(x = inf_points)) +
xlim(min(all_cultivars$gdd_cum), max(all_cultivars$gdd_cum)) +
labs(x = "Inflection points", y = "Number")
6.4 Get image data
In this examnple we will extract our plot data from a series of images taken in May of Season 6, measure its “greeness” annd plot that against the plant heights from above in this vignette. The chosen statistic here is the normalised green-red difference index, NGRDI=(R-G)/(R+G) (Rasmussen et al., 2016), which uses the red and green bands from the image raster.
Below we retrieve all the available plots for a particular date, then find and convert the plot boundary JSON into tuples. We will use these tuples to extract the data for our plot.
library(traits)
library(stringr)
# Function for breaking apart a corner into its Lat, Lon components
getLatLon <- function(corner){
p <- strsplit(corner, ' ')
return (c(p[[1]][1], p[[1]][2]))
}
# Gets the bounding box of the array of points
getBounds <-function(bounds){
minX <- NA
minY <- NA
maxX <- NA
maxY <- NA
for (c in unique(bounds)){
p = getLatLon(c)
if (is.na(minX) || (minX > p[2]))
minX = p[2]
if (is.na(minY) || (minY > p[1]))
minY = p[1]
if (is.na(maxX) || (maxX < p[2]))
maxX = p[2]
if (is.na(maxY) || (maxY < p[1]))
maxY = p[1]
}
return (c(minX, minY, maxX, maxY))
}
# Setting up our options
options(betydb_url = "https://terraref.ncsa.illinois.edu/bety/",
betydb_api_version = 'v1')
# Makiong the query for our site
sites <- betydb_query(table = "sites",
sitename = "MAC Field Scanner Season 6 Range 19 Column 1")
# Assigning the geometry of the site (GeoJSON format)
site.geom <- sites$geometry
# Stripping out the extra information to get to the points
complete_str <- str_match_all(site.geom, '(\\(\\(\\((.*)\\)\\)\\))')[[1]][, 3]
bounds <- strsplit(complete_str, ', ')[[1]]
# Getting the bounding box of the polygon
bounding_box = getBounds(bounds)
These are the names of the full field RGB data for the month of May. We will be extracting our plot data from these files. A compressed file containing these images can be found on Google Drive. Be sure to extract the image files into a folder that’s accessible to the code below.
image_files <-
c('fullfield_L1_ua-mac_2018-05-01_rgb_stereovis_ir_sensors_fullfield_sorghum6_shade_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-02_rgb_stereovis_ir_sensors_fullfield_sorghum6_shade_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-03_rgb_stereovis_ir_sensors_fullfield_sorghum6_shade_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-04_rgb_stereovis_ir_sensors_fullfield_sorghum6_settingstest_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-05_rgb_stereovis_ir_sensors_fullfield_sorghum6_shade_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-06_rgb_stereovis_ir_sensors_fullfield_sorghum6_shade_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-08_rgb_stereovis_ir_sensors_fullfield_sorghum6_shade_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-09_rgb_stereovis_ir_sensors_fullfield_sorghum6_shade_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-10_rgb_stereovis_ir_sensors_fullfield_sorghum6_sun_may2018_-_copy_thumb.tif',
'fullfield_L1_ua-mac_2018-05-12_rgb_stereovis_ir_sensors_fullfield_sorghum6_shade_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-13_rgb_stereovis_ir_sensors_fullfield_sorghum6_shade_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-14_rgb_stereovis_ir_sensors_fullfield_sorghum6_shade_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-15_rgb_stereovis_ir_sensors_fullfield_sorghum6_sun_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-17_rgb_stereovis_ir_sensors_fullfield_sorghum6_shade_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-18_rgb_stereovis_ir_sensors_fullfield_sorghum6_sun_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-19_rgb_stereovis_ir_sensors_plots_sorghum6_sun_thumb.tif',
'fullfield_L1_ua-mac_2018-05-20_rgb_stereovis_ir_sensors_plots_sorghum6_shade_thumb.tif',
'fullfield_L1_ua-mac_2018-05-21_rgb_stereovis_ir_sensors_fullfield_sorghum6_shade_may2018_thumb.tif',
'fullfield_L1_ua-mac_2018-05-22_rgb_stereovis_ir_sensors_plots_sorghum6_sun_thumb.tif',
'fullfield_L1_ua-mac_2018-05-23_rgb_stereovis_ir_sensors_plots_sorghum6_sun_thumb.tif',
'fullfield_L1_ua-mac_2018-05-28_rgb_stereovis_ir_sensors_plots_sorghum6_shade_rgb_eastedge_mn_thumb.tif'
)
We will loop through these images, extract our plot data, and calculate the “greeness” of each extract. We are using the name of the file to extract the date for later.
library(raster)
library(stringr)
# Extract the date from the file name
getDate <- function(file_name){
date <- str_match_all(file_name, '[0-9]{4}-[0-9]{2}-[0-9]{2}')[[1]][,1]
return(date)
}
# Get the clip coordinates into the correct order
clip_coords <- paste(toString(bounding_box[4]),' ',toString(bounding_box[3]),
' ',toString(bounding_box[2]),' ',toString(bounding_box[1]))
# Returns the greeness value of the clipped image
getGreeness <- function(file_name, clip_coords){
out_file <- "extract.tif"
# Execute the GDAL command to extract the plot
command = paste("gdal_translate -projwin ",clip_coords," ",file_name," ",out_file)
system(command)
# Load the red & green bands of the image and calculate the greeness value
red_image <- raster(out_file, band = 1)
cellStats(red_image, stat = "mean")
green_image <- raster(out_file, band = 2)
cellStats(green_image, stat = "mean")
add_rasters <- green_image + red_image
numerator <- cellStats(add_rasters, stat = "sum")
subtract_rasters <- green_image - red_image
denominator <- cellStats(subtract_rasters, stat = "sum")
greeness <- numerator / denominator
# Remove the temporary file
if (file.exists(out_file))
file.remove(out_file)
return(greeness)
}
# Extract all the dates from the images
day <- sapply(image_files, getDate, USE.NAMES = FALSE)
# Extract all the greeness for the plot
greeness <- sapply(image_files, getGreeness, clip_coords=clip_coords, USE.NAMES = FALSE)
# Build the final day and greeness
greenness_df <- data.frame(day,greeness)
# Convert to tibble for later joining
greenness_df <- as_tibble(greenness_df)
greenness_df <- greenness_df %>%
mutate(day = as.Date(day))
We then pull in the canopy data for our charting purposes.
trait_canopy_cover <- betydb_query(table = "search",
trait = "canopy_cover",
date = "~2018 May",
limit = "none")
trait_canopy_cover <- trait_canopy_cover %>%
mutate(day = as.Date(raw_date))
We now need to add the height data to the data set to plot.
We then determine the average canopy cover across the site for the day that the sensor data were collected. The relationship between our greenness metric and average canopy cover are plotted.
trait_canopy_cover <- trait_canopy_cover %>%
filter(day %in% greenness_df$day) %>%
group_by(day) %>%
summarise(mean_canopy_cover = mean(mean),
sd_canopy_cover = sd(mean))
sensor_trait_df <- left_join(trait_canopy_cover, greenness_df, by = "day")
ggplot(sensor_trait_df, aes(x = mean_canopy_cover, y = greeness)) +
geom_point()


Link to canvas
This is a link to the list of resources the can be used as part of canvas ole. by clicking this link, you'll be taken to canvas inside the Learning Design Process Pages directory to find Canvas Templates that have been shared by Academic Services Staff


Upload new pools, remove pools no longer needing service, or place them on hold.
| 1234 Austin Drive, Austin TX 77001 | |
| 4321 Bobby Lane, Austin TX 77001 | |
| 2567 Longand Blvd, Austin TX 77001 |
| 1234 Austin Drive, Austin TX 77001 | |
| 4321 Bobby Lane, Austin TX 77001 | |
| 2567 Longand Blvd, Austin TX 77001 |


meta name="mobile-web-app-capable" content="yes">
Registration
Full Name:
Gender:
Male
Female
House Number:
Phone Number:
Email:
Amount:
Number of Bins:
Location:
Area/Cluster:
Service Type:
HH
CO
submit form


My Add-in Name
WELCOME
This add-in helps you be productive at work!


Cinder Theme Specimen
Typography
Typefaces
Body Copy
You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the world once and got a taste for murder. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out.
Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle to man.
Like inline code? Here is a string for you 010101010
.
Lead Body Copy
Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.
Headings
All HTML headings,

through

, are available. .h1
through .h6
classes are also available, for when you want to match the font styling of a heading but still want your text to be displayed inline.
h1. Heading
h2. Heading
h3. Heading
h4. Heading
h5. Heading
h6. Heading
h1. Heading Secondary text
h2. Heading Secondary text
h3. Heading Secondary text
h4. Heading Secondary text
h5. Heading Secondary text
h6. Heading Secondary text
Blockquotes
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Lists
mkdocs new [dir-name]
- Create a new project.mkdocs serve
- Start the live-reloading docs server.mkdocs build
- Build the documentation site.mkdocs help
- Print this help message.
Horizontal Description Lists
- Something
- This is something
- SomethingElse
- This is something else
Contextual Colors
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Code
Inline Code
This is an example of inline code #import requests
Preformatted Code Blocks with Syntax Highlighting
def convert_markdown(markdown_source, config, site_navigation=None):
"""
Convert the Markdown source file to HTML as per the config and
site_navigation. Return a tuple of the HTML as a string, the parsed table
of contents, and a dictionary of any metadata that was specified in the
Markdown file.
"""
extensions = [
RelativePathExtension(site_navigation, config['strict'])
] + config['markdown_extensions']
return utils.convert_markdown(
markdown_source=markdown_source,
extensions=extensions,
extension_configs=config['mdx_configs']
)
Tables
Striped Table
| # | Head 1 | Head 2 | Head 3 |
|---|---|---|---|
| 1 | Box 1 | Box 2 | Box 3 |
| 2 | Box 4 | Box 5 | Box 6 |
| 3 | Box 7 | Box 8 | Box 9 |
Bordered Table
| # | Head 1 | Head 2 | Head 3 |
|---|---|---|---|
| 1 | Box 1 | Box 2 | Box 3 |
| 2 | Box 4 | Box 5 | Box 6 |
| 3 | Box 7 | Box 8 | Box 9 |
Buttons
Default Buttons
Styled Buttons
Button Sizes
Block Level Buttons


RSS Feed
Browserfrog - A responsive, HTML/CSS alternative to raster- and vector-based browser frames for screenshots: http://t.co/oGnnWgs2JA— WrapBootstrap (@wrapbootstrap) May 29, 2013
Browserfrog - A responsive, HTML/CSS alternative to raster- and vector-based browser frames for screenshots: http://t.co/oGnnWgs2JA
Pie bye.— Ben Goodyear (@bengoodyear) December 3, 2013
Pie bye.


Mind Style
I am quiet by nature thus communication has always been an issue for me, I've been placing myself in more social situations to correct the anti-social behavior.
Consider your experience in Phase 0 to this point. What has been the biggest struggle for you?
Knowing when to stop and give myself a break. It's more likely related to my personality, I remind myself to take a short walk every 3 hrs.


Ping-Pong
About this game:
Created By:
Celeste Field
GitHub Username/URL:
fieldceleste
Subject:
Arrays and Looping
Let's Play!
Rules:
Ping Pong will count up to your number from
1
with the following exceptions:
Numbers divisible by 3 become
ping
Numbers divisible by 5 become
pong
Numbers divisible by 15 become
pingpong
Enter your number here:
Let's Play!
Reset


Here goes the list of tools which one will need to have to start developing.
Please, note that the order of the list is also important.
For example, Yarn will not work without NPM, etc.
Ok let's get started
The Node.js provides a powerful V8 JavaScript engine, a package manager (aka NPM), server-side JavaScript runtime environment, etc.
The Yarn package manager is a superset for an NPM.
Why use Yarn?
First of all, it is much faster.
Secondly, Yarn will recreate all of the dependencies you use in your project with the same version on any remote workstation.
You may use any IDE which fits you the most.
Here are some of them
If you are a hardcore type of developer you may also use
I'm using Visual Studio Code if you are using it too then checkout list of extensions I'm using daily to be more productive.
Git is a powerful yet flexible, still easy to use version control system.
You can use different software to sync your work between local and remote repositories and other developers.
Though, the official package of git includes such tools as
gitk
and git-gui
you may also use any of programs
listed on the official
If you prefer to use the CLI, then take a look at the list of commands which I'm using daily.
To start a new Angular project follow these steps.
First, install an Angular CLI via NPM.
Or using Yarn:
Second, create a new project:
Before the creation, Angular will ask you about the basic features of the new project.
The first question is about enabling Angular routing in your project (default option is no).
The second question is about CSS handling (default option is pure CSS).
After all of the required operations are done, go to the project folder.
Finally, run the project!
Optionally you can provide --open
flag, which will open your
default browser once the project is ready to start.
To get a list of available commands run the following:
To build applications fast, one should use CSS component library.
My favorite is Bootstrap!
So, to add this component library to your project start CLI anywhere inside your project's folder and install it via NPM:
Or via Yarn:
One more thing you can to do is to install the Font Awesome, though this step is optional.
This toolkit will allow you to add awesome SVG icons into your project.
Which, in turn, will enrich the visual experience and will add a neat look to your project.
For example, you can distinguish external links from regular links by and SVG
attached after the link name -
Anywhere inside your project's folder run:
Or via Yarn:
Here goes short description for each package installed:
@fortawesome/fontawesome-svg-core
- the toolkit itself.
@fortawesome/free-brands-svg-icons
- the set of free
branded
icons, such as Google, Twitter, Facebook, etc.
@fortawesome/free-regular-svg-icons
- the set of free
regular
icons.
@fortawesome/free-solid-svg-icons
- the set of free
solid
icons.
@fortawesome/angular-fontawesome
- this is a wrapper
You can browse the icons


Dior Names Joanna Czech a Skin-Care Ambassador
The celebrity facialist will collaborate on editorial and digital projects.
by Jennifer WeilFACIALIST FORWARD: Parfums Christian Dior has appointed celebrity facialist Joanna Czech as a skin-care ambassador. She is set to collaborate with the brand on editorial and digital projects.
“Czech will lend Dior her modern point of view and decades of experience in the skin-care industry for unique editorial and digital projects,” Parfums Christian Dior said in a release.
Czech has a large celebrity following, working with the likes of Bella Hadid, Kim Kardashian, Jennifer Aniston and Christy Turlington.
A facialist for 30 years, Czech believes in the importance of healthy lifestyle, including a balanced and seasonal diet. Her approach combines traditional, gentle and progressive treatments with modern techniques, such as LED, ultrasound and cryotherapy, according to Dior.
She has worked on projects with publications including Vogue, Harper’s Bazaar and Marie Claire. Czech started working in Poland, then moved to Dallas, before opening her studio in New York.
The facialist is to work in partnership with Claire Liebbe, who is spokeswoman for the Dior Institute Worldwide and oversees developing the brand’s skin-care techniques for international training.
More From WWD:
A Changing of the Guard at Parfums Christian Dior
EXCLUSIVE: Gisele Bündchen Named Face of Dior Capture Totale
Dior Beauty Opens Pop-up on Rodeo Drive


Selena Gomez Reportedly Had a Panic Attack Before Her AMAs Performance
- Selena Gomez performed “Lose You to Love Me” at the 2019 AMAs last night, and it was not received well by some viewers.
- A source now says Selena had a panic attack before the show, which impacted her performance.
The AMAs may have ended last night, but people are (unfortunately) still critiquing Selena Gomez’s performance of “Lose You to Love Me.” Why? Well, because some people online thought Selena was really off-key, and some went a step too far by joking about how the song’s lyrics literally say “sang off-key in my chorus.” The internet can be so mean!
Selena’s fans chalked it all up to nerves, and as it turns out, they were pretty spot on. An E! News source came forward today and said Selena’s performance struggles last night happened because she had a bit of a breakdown before going onstage—poor Selena. 😓
“Selena definitely had anxiety and a panic attack before she went out and was putting a lot of pressure on herself,” the source said.
Related Stories
Selena’s AMAs Dress Is All I Care About, Bye
Attn: Selena Gomez Got a Massive Thigh Tattoo
Sadly, this makes sense—the last time Selena performed at the American Music Awards was back in 2017, and this performance was her first televised appearance in two years...so it’s not all that hard to understand why Selena would be a lil overwhelmed!
After the performance, Selena hopped on Instagram to share pictures of her stunning Versace red-carpet look, and she used it as an opportunity to share how she’s feeling at the moment. “Feels good to be back. Thank you to my entire team and to my fans that stand by me,” she captioned the post. “All of this is for you and because of you. excited for this chapter #sg2 @amas.”
Related Stories
Selena's Being Dragged for Singing "Off Key"
Hailey Spent Last Night Liking Selena Gomez Instas
Starr Bowenbank Editorial Assistant Starr Bowenbank is the editorial assistant who writes about all things pertaining to news, pop culture, and entertainment—you can follow her here.


Applictions for desktop or laptop computers are sometimes called desktop applications, while those for mobile devices are called mobile application.When you open in application , it runs inside the operating system until you close it.
Application can perform actions much quicker than a mobile website.Application usually store their data locally on mobile devices.
If you want to download an application, you will search application that you wanna download.
Both applications and mobile websites are accessed ona handheld devices such as smartphones(e.g.iPhone, Android and Blackberry) and tablets .Applications are actual applications that are downloaded and installed on your mobile device, rather than being rendered within a browser.
You can see collecting of applications in myanmar and download.
My Applications in Myanmar Coordinators are Ma Aye Aye Zin, Mg Soe Lwin Oo, Mg Thitsar Aung, Ma Nandar Soe, Ma Wint War Khaing and Ma May Zin Thwe.
In some cases,fair use may be appropriate.Depending on the amount and type of material being used,it may be more appropraite to seek permission.If the material you want to use in your application is in the public domain,you don't need permisssion or to do a fair use assessment,just don't forget to cite it!


Close
1
2
3
Right now I went home to Florida and the weather here is a lot warmer than in SC. I have been sick lately so the warmth has been nice. The sky today was really clear and it surprisingly didn't rain.
MENU


DTSolutions
Welcome,
John Doe
General
Home
Image Viewer TM
Image Viewer St.
Search
Advanced Search
Date
Plaza
Lane
Country/State
Plate Number
Plate Confidence
AVI Tag
Weight
Axles
Rate
Direction
Speed
Flagged
Image Viewer
John Doe
Profile
Settings
Help
Log Out
Data loading...
×
Layout Options
Fixed Header
Fixed Navigation
Fixed Footer


Dashboard
Metrics
Setup
Dashboard
Precipitation
Crop Status Monitor
Overview
Pump 1 On
Started 4 minutes ago
Pump 2 On
Started 25 minutes ago
Pump 3 On
Started 27 minutes ago
Pump 4 Off
Stopped 2 minutes ago
Pump 5 On
Started 15 minutes ago
Moisture content sensor 1 error
Moisture content sensor 2 OK
Moisture content sensor 3 OK
Moisture content sensor 4 OK


Home
Publications
Visualizations
Data
Blog
Home
Publications
Visualizations
Blog
Graphics
Data Library
Return Home
Renderer-Specific Datasets


Patient ID
1
2
3
Date
Treatment Length
Treatment Intensity
Submit
Select Patient ID to retrieve info
1
2
3
Submit


My name is David Luque, I’m an Senior Front-End Developer with Angular 9 based in Málaga and a Software Engineer at the University of Málaga.
I also have the title of HNC in Systems in network administration and HNC in Micro Informatics systems and networks. In my degree programme I have learnt how to design, develop, and maintain software applications such as interactive web sites, mobile apps, database applications, and business intelligence tools.
I'm a 28 years old person who isn't afraid of anything, very outgoing, skilled and experienced in teamwork and my level of English is good - technical and in daily life.
I was Cicerone of the Technical School of Computer Engineering of Málaga.
Cicerone purpose to provide information on university studies (in my case of ETSI Informatics) to students of Secondary, as well as the last course of Higher Education Training Cycles.


Welcome to our website. We offer a wide range of pizzas with recipes that were formulated by some of the best chefs in the world. Our dishes are designed to accomodate specific preferences or allergies. We do our best to ensure that you receive good quality meals that are both tasty and non-harmful. With us, you will not need to worry about potential hazards because our chefs are very detailed workers. We will do our best to ensure high standards in terms of hygiene and delivery. Our pizzas were rated best flavor and texture in Africa. Trust that with us, you will receive meals that are worthy to meet your standards.
| Pizza | Price |
|---|---|
| Chicken Barbeque | Small: 500, Medium: 800, Large: 1,200 |
| Hawaiian | Small: 500, Medium: 800, Large: 1,200 |
| Vegeterian | Small: 500, Medium: 800, Large: 1,200 |
| Bacon | Small: 500, Medium: 800, Large: 1,200 |
| Gluten-Free | Small: 500, Medium: 800, Large: 1,200 |


COMPARATIVE STUDY OF RELATED HEALTH FERTILITY ATTITUDES AND BEHAVIOR OF FAMILIES RESIDING IN A POVERTY AREA, PITTSBURGH, 1969
by oS,
©
a. =<- William H. Spillane .
BeS., Loyola College, Bal
M.S.W., Graduate School of Social Service, The Catholic University of America, 1961
M.P.H., Graduate School of Public Health, | University of Pittsburgh, 1967
Submitted to the Graduate Faculty of the Graduate School of Social Work in partial fulfillment of the requirements for the degree of
Doctor of Philosophy
University of Pittsburgh 1971
Reproduced with permission of the copyright owner. Further reproduction prohibited without permission.


Future proof your squad with the best Football Manager 2020 wonderkids
by Fraser GilbertLong-serving virtual managers will be pleased to learn that there’s a new way to develop FM20 wonderkids: the Development Centre. It’s an exhaustive hub with bags of info, allowing you to hone the talents of your best young players and get them ready for first-team football.
But first, you’re going to need some top prospects, so we’ve picked out some of the very best wonderkids in Football Manager 2020 below. While the majority will prove expensive to acquire, they’ll turn into some of the game’s biggest stars in seasons to come.
The best FM20 wonderkids
Gianluigi Donnarumma
- Position: GK
- Estimated Cost: £90m
Milan’s Donnarumma is comfortably the best wonderkid keeper in FM 2020. The young Italian boasts outstanding attributes, including 18 reflexes and jumping reach, with plenty of room to develop. The only downside is his hefty asking price and £190k per-week desired wage.
Trent Alexander-Arnold
- Position: DR/WBR (DM/MC)
- Estimated Cost: £100m+
Again, no surprises that Liverpool’s Trent Alexander-Arnold makes the list. The 2018-19 UEFA Champions League winner proves very tough to pry away from Liverpool, with the 21-year-old England star benefiting from 17 crossing, 16 passing, and 16 vision attributes.
Moussa Wagué
- Position: DR/WBR (DL/WBL)
- Estimated Cost: £50m
Ok, first things first: Barcelona’s Moussa Wague's release clause is £90m. The La Liga side will expect you to pay around two-thirds of that amount to sign him, as the Senegalese talent can become a world superstar in time, boasting outstanding pace and agility.
Dayot Upamecano
- Position: DC
- Estimated Cost: £70m
You’re looking at paying around £90m to guarantee talks with 20-year-old Upamecano—again, the result of his high release fee. He’s still worth considering, however: the young RB Leipzig talent is fitted with 18 pace, 17 balance, and 16 bravery stats, and proves excellent in future seasons.
Matthijs de Ligt
- Position: DC
- Estimated Cost: £100m+
New Juventus (or Zebre, as they’re known in FM 2020) signing de Ligt isn’t likely to leave the Serie A side early on, but remains a top wonderkid regardless. Expect to pay a massive fee to take advantage of his superb stats, including 17 heading, 16 determination, and 15 marking.
Ibrahima Konaté
- Position: DC
- Estimated Cost: £60m
Another RB Leipzig defender to make the list is 20-year-old, Ibrahima Konaté. He does a fantastic job for top-level sides in FM20 with his 17 strength, 17 jumping reach, and 16 pace, and his potential is significant, allowing him to quickly develop into a star centre-back.
Jadon Sancho
- Position: LM/RM/AML/AMR
- Estimated Cost: £80m
Borussia Dortmund are typically willing to part with English star Jadon Sancho in FM 20, but for a high price. Look to pay just under £100m for his signature—in return, you’ll get a terrific and versatile wide-midfielder with 18 agility, 17 acceleration and 17 dribbling stats.
Rayan Cherki
- Position: AML/AMC (ML, AMR, ST)
- Estimated Cost: £10m
Although Lyon’s Ryan Cherki begins FM20 at far from his peak ability, the 16-year-old Frenchman can evolve into an outstanding talent. That makes his £10m asking price a bargain for top-level sides, especially if you can hone his skills in the Development Centre.
João Felix
- Position: AML/AMC/ST (AMR)
- Estimated Cost: £100m+
Atletico Madrid’s Portuguese attacker is packed with potential, and even begins FM 20 with attributes such as 19 flair, 18 technique, and 16 dribbling. He’s valued at £28.5m in this year’s game, but you’ll seriously struggle to pry him away from the Spanish side.
Thiago Almada
- Position: AMC (MC, AML, ST)
- Estimated Cost: £6.5m
Like Cherki, Thiago Almada is an incredible prospect who can be acquired for a low price. The 18-year-old Argentine has a release clause of just £19.75m in his contract, but if haggle well like the skilled wheeler dealer you are, you can get the attacking midfielder for less than half that.
Kylian Mbappé
- Position: AMR/ST (AML)
- Estimated Cost: £150m+
Kylian Mbappe isn’t just one of the best wonderkids in FM 2020; he’s one of the best players in the game. The 2018 World Cup winner, who boasts 20 pace and acceleration stats, is an extortionate buy, valued at £85m and collects a wage of £350k per-week.
Rodrygo
- Position: AML/ST
- Estimated Cost: £94m
Real Madrid have two particularly talented left-winger wonderkids in their ranks, one of which is 18-year-old Rodrygo. The Brazilian boasts excellent attributes including 16 agility, 15 acceleration, and 15 dribbling, but his £94m release fee is a stumbling block for all without the deepest pockets.
Vinícius Júnior
- Position: AML/ST
- Estimated Cost: £70m
The other of Real Madrid’s left-wing wonderkids is fellow Brazilian Vinícius Júnior, who made his debut for Los Blancos in 2018. He’s one of the best youngsters in the game, valued at £22.5m and benefiting from attributes of 17 acceleration, 16 pace, and 16 technique.
Sebastiano Esposito
- Position: ST
- Estimated Cost: £35m
You could originally buy 17-year-old Inter Milan striker Sebastiano Esposito for just £3m in the FM 2020 beta, but he's since risen to a more costly £35m. Still, the young Argentine has the potential to become one of the game's top strikers, benefiting from 16 determination and 14 pace stats.
Mason Greenwood
- Position: ST
- Estimated Cost: £70m
Man Utd’s Mason Greenwood proves dominant in this year’s game at the age of just 17, enjoying high pace, acceleration, and finishing attributes. He’s valued at £21m, but you’ll need to pay significantly more to have any chance of tempting the Red Devils into a sale.


Timeout on waiting for answer to transmit of message content
smtp_data_xfer_timeout
This parameter specifies the SMTP client timeout in seconds for sending the
SMTP message content. When the connection stalls for more than
$smtp_data_xfer_timeout the SMTP client terminates the transfer.
In case of problems the client does NOT try the next address on the mail
exchanger list.


$ \newcommand{\abs}[1]{| #1 |} \newcommand{\bigabs}[1]{\left| #1 \right|} \newcommand{\R}{\mathbb{R}} \newcommand{\E}{\mathbb{E}} \newcommand{\B}{\mathcal{B}} \renewcommand{\Pr}{\mathbb{P}} \newcommand{\ip}[2]{\langle #1, #2 \rangle} \newcommand{\norm}[1]{\lVert #1 \rVert}$ The probabilistic method is an elegant nonconstructive proof technique. The principle behind it is very simple. Suppose you want to show that a set $X$ exists with certain properties. One way to do this is to construct a probability measure $\Pr$, and show that $\Pr(X) > 0$. This is best illustrated via an example. In this post, we will work through a proof of what is often referred to as the Gilbert-Varshamov bound. This estimate turns out to be quite useful in various fields of applied mathematics.
Lemma (Gilbert-Varshamov): Let $n \geq 26$. There exists a subset $M \subseteq \{\pm 1\}^{n}$ with the following properties:
- $\abs{M} \geq 2^{\frac{n}{16\log{2}}}$, and
- for all $1 \leq i \neq j \leq \abs{M}$, $\frac{1}{2} \norm{x_i - x_j}_1 \geq \frac{n}{4}$.
 We fix an integer $N$ to be chosen later, and let $X_1, ..., X_N \in \{\pm 1\}^{n}$ be i.i.d. random vectors where $X \sim \otimes_{j=1}^{n} \mathrm{Unif}(\{\pm 1\})$. Now define the random variable $Z_{ij} := \frac{1}{2} \norm{X_i - X_j}_1$. It is not hard to convince yourself that $Z_{ij}$ has a Binomial distribution $B(n, 1/2)$. Hoeffding's inequality states that $$ \Pr( Z_{ij} \leq n/4 ) \leq e^{-n/8} \:. $$ By a union bound, we conclude that $$ \begin{align*} \Pr( \exists \: 1 \leq i \neq j \leq N : Z_{ij} \leq n/4 ) &\leq {N \choose 2} \Pr( Z_{12} \leq n/4 ) \leq \frac{N^2}{2} e^{-n/8} \:. \end{align*} $$ Now choose $N = \lfloor \sqrt{2 e^{n/8}} \rfloor - 1$. This choice of $N$ ensures that $\frac{N^2}{2} e^{-n/8} < 1$, and hence $$ \Pr( \underbrace{\forall \: 1 \leq i \neq j \leq N : Z_{ij} > n/4}_{:= \mathcal{E}} ) > 0 \:. $$ Also, by our assumption on $n$, we have that $N \geq e^{n/16} = 2^{n/(16\log{2})}$. The desired claim now follows by the probabilistic method. Specifically, the set $M$ can be taken to be $M = \{ X_1(\omega), ..., X_N(\omega) \}$ for any $\omega \in \mathcal{E}$. $\square$
Note that the constants that appear in the statement are clearly not optimal, and were chosen for ease of exposition. The scaling with $n$, however, is correct. Sharper constants can be derived via tighter estimates of the Binomial tail.


Pig Dice Game
A member of Jeopardy race games
Rules Of the Game
New Game
Player 1
Current Score:
Total Score:
Roll Dice
0
Roll
Roll 2
Player 2
Current Score:
Total Score:


Frequently Asked Questions
Q: What if I can’t finish the row?
In case of an emergency, we will have two chase boats shadowing the rowers. Each of us must carefully and honestly assess the conditions and our own abilities before attempting the row - the expectation is that everyone who leaves the dock must be able to complete the entire Rally unless a true emergency arises.
Q: What should I wear?
For the row, we strongly recommend a brightly colored t-shirt or athletic shirt and hat. No earth tones or greys - we really want to stand out in traffic! We will also be coming ashore on some pretty rough spots on our island stops, so water shoes are probably a good idea.
For the ride, you may want to pack a change of clothes - dry shorts and a top to go with your socks and bike shoes - and of course your helmet. Nobody rides without a helmet.
Q: What should I bring with me?
For the row (in a drybag):
- Cell phone
- VHF radio (if you have one)
- PFD
- Whistle
- Water (2 bottles)
- Snacks
For the ride (in a small duffel or backpack, which will go up and back with Bertha):
- Cell phone
- Helmet
- Bike shoes and socks
- Cash for ice cream at Captain Dusty’s
- Change of clothes (if needed)
- Water
- Lunch
- Bike supplies (spare tube, multi-tool, pump, etc.)
Q: What VHF channel(s) will we use?
Please monitor CH 9 for hailing then use CH 71 or 72 if you need to have a conversation.
Q: What’s for dinner?
Good stuff. And rum.


While reading the definition, press a cursor router button. Buttons will appear that allow you to copy either the word or its definition. Press the Next thumb key a couple of times to get to the Copy Definition button; then press Enter. The definition will be copied to the clipboard.
in-context