Foul is a set of javascript classes which attempt to make client-side form validation as painless as possible. Please note, foul should not be a replacement for server-side validation since JavaScript can be turned off an even hacked within the browser. Foul is for the convenience of the user, not the author. A php based version of foul is in development which will provide server and client-side validation to forms.
The quick start guide will help you get started with foul without having to dive into hundreds of lines of documentation.
First, to use foul, copy prototype.js and foul.js to a folder which is accessable by your web pages.
Next, copy and paste the following code between your  tags or near the top of your web page. Make sure you point the src attribute to the location of these to js files.

By including foul.js, you've automatically created a foul object you can use named foul
Now attach the foul object to your form by pasting the below code into your form tag.
onSubmit="return(foul.validate(this));"
Now all you have to do is use foul's various methods to add validation tests. Below is a couple code examples.

The field name must be enclosed in tilde's followed by the test to apply to the field. For a complete list of the tests, check out the Test/Format Reference. Below are a couple of foul shortcuts.

Foul has a couple options you can configure to control how the form reacts to input.
This enables auto-formatting fields as the user tabs off of them. This is set to false by default. By setting to true, and installing the onBlur="foul.inspect(this)" event on text fields, the form will auto-format fields as the user fills out the form.
<input type="text" name="First Name" onBlur="foul.inspect(this)" />>
//alternativly, you could call the autoInspect method to install the
//inspection method on all fields.
foul.autoInspect(document.forms[0]);
This enables auto-testing fields as the user tabs off of them. This is set to false by default. By setting to true, and installing the onBlur="foul.inspect(this)" event on text fields, the form will auto-test fields as the user fills out the form.
This is a new feature in Foul 2.0. This gives you the ability to change how the user is notified of validation errors. It is set to 'alert' by default and will respond with a JavaScript alert box. However, if you change this to 'inline', then foul will notify the user by inserting the error message next to the coorisponding input field.
The 'inline' option inserts a DIV element with the class of 'foul-error' so you can control the look of the error. In addition, you can modify the template which is used to insert the message by setting the foul.error_template string.
foul.error_template = '
[[error]]
';
Foul uses a simple language to create tests to apply to form fields. This veers away from my usual method of thinking since I generally hate recreating a whole new language for anything, espeically something as minisicule as form validation. However, after lots of research and testing I decided that a new language, one which read makes sense to the author as to what it's validating, would be the optimal method. The fact that form validation is such a miniscule yet, begrudgingly required job reinforces an easy spoken-like language to define the validations. Why spend more time on it then you have too.
One can speak what they expect in a form field easier and clearer than trying to express it using a mess of javascript code. For example, "When First Name is Blank, display a message" is easier to think of than, "if (document.frm.element['firstname'].value == ''){ alert('message'); }"
Here is the basic syntax of a test:
//tests are evaluated from left to right ~fieldname~ test [test [paremters]]* //the results of tests passed as paramters are passed the test on the left. ~First Name~ is null ^ ^ ^ | | | fieldname tests //here the length of the Zip Code field is calculated and tested against 5 ~Zip Code~ length not == 5 ^ ^ ^ ^ ^ | | | | | fieldname tests+--+ parameter //multiple tests can be strung together using 'and' and 'or' words. ~Zip Code~ length not == 5 and ~First Name~ is null //paranthesis can be used to group boolean tests just like a conditional if (~Zip Code~ length not == 5 and ~First Name~ is null) or ~Last Name~ null //literal strings can be used now (a feature not available in foul 1.x) ~Package Type~ == '1 Day Air'
foul.when("~Field~ is same-as a number","This field must not be a number.");
foul.when("~Field~ is not number","This field must be a number.");
foul.when("~Field~ blank","This field is required");
This evaluates to true when the input field is an integer. Decimals don't count.
foul.when("~Field~ is not number","This field must be a number");
This evaluates to true when the input field is decimal or integer.
foul.when("~Field~ is not float","This field must be a number");
This will check an email address for well-formness using the<EMAIL_ADDRESS>pattern. Please note that if the field is null, the test will cancel and not fail. This would require the use of a null test in conjunction with the email test.
foul.when("~Field~ is not email","Please enter a valid email address.");
//this will require the field and check for a valid email
foul.when("~Field~ not email or ~Field~ null","Please enter a valid email address.");
This will check a field for spaces.
foul.when("~Field~ has spaces","Please don't enter spaces for this field.");
Performs a numerical greater-than comparison.
foul.when("~Field~ not > 5","Please enter a number larger than 5.");
Performs a numerical less-than comparison.
foul.when("~Field~ not less-than 500","Please enter a number less than 500.");
This will compare the number of characters in a string against the passed parameter.
foul.when("~Field~ not length 4","Please enter a string 4 characters long.");
//can be combined with the greater-than or less-than tests.
foul.when("~Field~ length > 4","Please enter a string 4 characters or less.");
This will check if an input field's value falls between a range of numbers.
foul.when("~Field~ is not between 3 8","Please enter a value between 3 and 8");
//can be combined with the length test to check for a string length range
foul.when("~Field~ length not between 3 8","Please enter a string between 3 and 8 characters.");
This will test for a valid url using the pattern: protocol://domain.com/folder/page.ext
foul.when("~Field~ not url","Please enter a valid url");
This test has 3 sub tests which can be used as well. url-http, url-ftp, url-news.
This tests for a valid U.S. zip code in the '99999' or '99999-9999' form.
foul.when("~Zip~ not zip","Please enter a valid zip code.");
This tests a field for a valid state appreviations. This will actually check for real states, not just the existence of 2 characters.
foul.when("~State~ not state","Please enter a valid state.");
This is a neat test which compares the zip code input field and the state input field and makes sure the zip code is valid for the specified state.
foul.when("~Zip~ not zip-state-matches ~State~","Zip code is invalid for state.");
This tests a field against the U.S. social security number pattern, 999-99-9999
foul.when("~ssnum~ not ssn","Please enter a valid Social Security Number");
This test can be used on an file input field and will validate the file extension against the passed extension list.
foul.when("~txtfile~ not file-type 'txt doc'","Please upload a text or doc file.");
This test can be used on an file input field and will validate the file extension against a list of predefined graphic extensions. Specifically: ani, b3d, bmp, dib, cam, clp, crw, cr2, cur, dcm, acr, ima, dcx, dds, djvu, iw44, ecw, emf, eps, fpx, fsh, g3, gif, icl, ico, ics, ids, iff, lbm, img, jp2, jpc, j2k, jpf, jpg, jpeg, jpe, jpm, kdc, ldf, lwf, mng, jng, nlm, nol, ngg, gsm, pbm, pcd, pcx, pgm, png, ppm, psd, psp, ras, sun, raw, rle, sff, sfw, sgi, rgb, sid, swf, tga, tif, tiff, wbmp, wmf, xbm, xpm
foul.when("~image~ not file-type-image","Please upload an image file.");
This test can be used on an file input field and will validate the file extension against a list of predefined executable extensions. Good to restrict anything malicious but a server-side check should also be employed. Extensions tested: ade, adp, bas, chm, cmd, cpl, crt, hlp, hta, inf, ins, isp, jse, lnk, mdb, mde, msc, msi, msp, mst, ocx, pcd, pif, pot, ppt, sct, shb, shs, sys, url, vb, vbe, vbs, wsc, wsf, exe, js, vbs, scr, com, bat, wsh, reg, dll
foul.when("~upload~ is file-type-executable","Invalid file type");
This applies a checksum algorithm to test for a valid credit-card number. Use "4111 1111 1111 1111" to test a form since that number is a valid, testing credit card number.
foul.when("~credit #~ is not valid-cc","Please enter a valid credit card number.");
This tests for a valid U.S. date in the form MM/DD/YY or MM/DD/YYYY.
foul.when("~dob~ is not date-us","Please enter a valid date (mm/dd/yy).");
This tests for a valid U.S. date in the form MM/DD/YYYY forcing Y2K compliance.
foul.when("~dob~ is not date-us-y2k","Please enter a valid date (mm/dd/yyyy).");
This test a text field for a password greater than 8 characters and not having any tabs, newlines or spaces.
foul.when("~db_pass~ is not password","Please enter a valid password.");
This tests the strength of a password using an algorithm and the passed value of 0 to 100, 100 being the stronger.
foul.when("~signup_pass~ is not password-strength 80","Please enter better password.");
This will test a form field against a list of quote enclosed parameters.
foul.when("~password~ is in 'password' '1234' 'default'","Please pick a different password.");
Tests a field against the standard U.S. phone number format. 9<PHONE_NUMBER>.
foul.when("~phone~ is not phone-us","Please enter a valid U.S. phone number.");
To use field formatting you must use the foul.format() function.
foul.format("~phone~ as phone-us");
Formats a field to an integer, stripping any non-numeric characters.
Formats a field to an float, stripping any non-numeric characters excluding the decimal point.
Left pads a text field to the length specified using the padding character. Character defauls to zero.
foul.format("~id~ as padded 10"); // 345 =<PHONE_NUMBER> foul.format("~id~ as padded 10 $"); // 345 = $$$$$$$345
Formats a text field into a U.S. phone number using this format: 1<PHONE_NUMBER>. It will strip out non-number characters and leave excess numbers for the validator to pickup.
Formats a credit card number to the form of 9999 9999 9999 9999.
Formats a social-security number to the form of 999-99-9999.
Formats a date to the form of mm/dd/yy. Please note that the date has to be entered in a date-like format before the format is applied correctly, ie mm-dd-yy.
Formats a date to the form of mm/dd/yyyy. Please note that the date has to be entered in a date-like format before the format is applied correctly, ie mm-dd-yy.
Mainly adds the http protocol to the url if left out. This test has 2 other variants for ftp and news, url-ftp and url-news.
Formats a zip code field to only numbers and to the form of 99999 or 99999-9999 depending on the number of characters entered.
Transforms a text field to all uppercase. Good for state appreviation fields.
Test packs can be created and included which extend or change tests in foul to better suite the locale, such as the difference in dates around the world. Since foul is built on the prototype library, extending the TestBank and FormatBank classes are pretty easy. For more information in contributing a locale pack, see more info about Extending Foul.
One test pack I have included with foul is one I started for European style dates. You can load these tests by including the foulbank-eu.js file into your web page.

Just by including this file it automatically installs two additional tests for European dates in the form dd/mm/yy and dd/mm/yyyy. Below is an example of how to use them.
foul.when('~dob~ is not date-eu','Please enter a valid date');
This area of foul is seriously lacking. I would like to have lots of locale packs for all kinds of formats.
The TestBank class contains all the tests called by foul. For example, the below code would result in true.
TestBank.state('MI');
// or
TestBank._eval('MI','state');
All the tests are created as functions named after the test themselves. For example, the '==' test function can be called by accessing TestBank.['==']().
To extend the TestBank or add additional tests, create a separate javascript file and include it after the prototype.js and foul.js script includes. We'll call this mytests.js. Since foul uses prototype, we can use the Class.extend() function to add tests to the TestBank. Below is an example.
Object.extend(TestBank, { MyNewTest1: function(s,p){ }, MyNewTest1: function(s,p){ } });
If you're not familiar with prototype, this may look a little weird to you. For more informationa about using prototype, check out this great resource page. Each test is defined as a function. The functions expect two parameters, the first is the subject of the test (a form field value or literal string) and then an array of additional tests or parameters which can be processed. The function must also return one of three values, a TRUE for passed test, FALSE for a failed test or NULL for a canceled test.
To create a new test which checks a text field for uppercase'ness, check out the below code.
Object.extend(TestBank, { uppercase: function(subject,param){ //check for an empty subject// subject = this._eval(subject); if ( this.empty(subject) ) { return null; //cancel test// } return ( subject == subject.toUpperCase() ); } }); //--8<---------------------------------------// foul.when("~state~ not uppercase","Please make state uppercase");
A couple things you may notice in the above code. Notice it passes the subject parameter through _eval(s). This is because when foul processes the tests, all ~field~ and 'string' tokens are actually replaced by '##[0-9]' tokens and added to a hash table. The _eval(s) function will check for and return the value of a '##num' token.
The next thing you'll notice is checking to see if the subject is empty. If it is empty, the function returns null which cancels the test and goes to the next test. Please note that you can use other tests within other tests like the above example. this.empty() is a test defined in default TestBank class. You could use this new test in another one simply by calling this.uppercase(var).
The last piece is the actual test. The function simply returns if an uppercased version of the subject equals the subject. Pretty simple.
Copyright 2006 © Bryan English<EMAIL_ADDRESS>Foul 2.0


Nivil Tutorials for kids
Home
HTML
CSS
Bootstrap
Html toutorial for kids
Why should kids learn HTML?


Log in with Twitter
Having problems? Try
clearing your session
.
'.$status_text.''; ?>
'); print_r($content); ?>


WITNESS LIST Criminal Jurisprudence Committee February 23, 1999-2:00P HB 142 For: Weeks, David P. (Walker County Criminal District Attorney) Against: Donovan, Suzanne (Texas Criminal Defense Lawyers Association) Registering, but not testifying: Hampton, Keith (Texas Criminal Defense Lawyers Association) HB 149 For: Donovan, Suzanne (TCDLA) Registering, but not testifying: Hampton, Keith (TCDLA) HB 152 For: Landinger, Karen (El Paso District Attorneys Office) Rodriguez, Jose R. (El Paso County Attorney) For: McGill, Chris (El Paso Municipal Police Officers Association) Registering, but not testifying: Williams, Christie (Dallas County District Attorney) On: Hite, Gerron (Texas Historical Commission) HB 153 On: Gavin, David (Texas Department of Public Safety) Kepple, Rob (Texas District and County Attorneys Association) HB 176 For: Jones, Claude T. (Lubbock Police Department) Registering, but not testifying: Mann, Thomas (Texas Police Chief's Association) HB 193 For: Johnson, Judge Tim (Himself) Against: Alpert, Richard (Tarrant County District Attorney) Bernard, Michael D. (Bexar County District Attorney) Lewis, Bill (Mothers Against Drunk Driving) Noll, Chuck (Harris County District Attorney) Williams, Christie (Dallas County Criminal District Attorney) For: Donovan, Suzanne (TCDLA) Registering, but not testifying: Hampton, Keith (TCDLA) Against: Weeks, David P. (Walker County District Attorney) HB 234 For: Schneider, Michael (Texas Association of Broadcasters) Registering, but not testifying: Schneider, Rob (Consumers Union - SW Regional Office) HB 287 For: Hernandez, Leslie (National Association of Social Workers) Registering, but not testifying: Jones, Claude T. (Lubbock Police Department) Mann, Thomas (Texas Police Chief's Association) HB 319 For: Lewis, Bill (Mothers Against Drunk Driving) On: Ackerman-Sioson, Brenda (Texas Department of Public Safety) Caskey, Commander Marshall (TX Department of Public Safety/Special Crimes Service)


You are going to approve the following claim: "{{confirmationCtrl.claimTitle}}"
{{confirmationCtrl.confirmationError}}


Android Studio Application Development
ISBN-13:<PHONE_NUMBER>273
ISBN-10:<PHONE_NUMBER>
Author: Belén Cruz Zapata
Binding: Paperback
Publisher: Packt Publishing
Published: October 2013
List Price: $29.99
Best Rental Prices |
||||
|---|---|---|---|---|
| #1 |
Free shipping Ready to ship |
Notes |
||
| #2 |
+5.99 shipping Ready to ship |
Notes |


Tags: music and stuff
Shame - Drunk Tank Pink
I feel like I’ve been listening to way too much punk music in January…
Release date: 2021-01-15
[8.2/10]
Viagra Boys - Welfare Jazz
Post-punk + sassy jazz sax. Songs are alright, lyrics sounds kinda meta-ish but that’s fine by me.
Release date: 2021-01-08
[8.1/10]
Ed Balloon - I Hate It Here
This one is more experimental and noisy than his 2018 album, which I like very much. This one contains more element of electronic music, and while the tracks are all pretty solid I do wish this is a full length album rather than a 10-minute EP.
Release date: 2020-12-04
[8.1/10]
Various Artists - Virtual Dreams: Ambient Explorations In The House & Techno Age, 1993-1997
Lots of bangers in this one.
Release date: 2020-12-14
[8.0/10]
R.A.P. Ferreira, Scallops Hotel - Bob’s Son
It’s OK
Release date: 2021-01-01
[7.6/10]
Portrayal Of Guilt - Garden Of Despair
Blackened screamo. I don’t question their musicianship one bit, but this is their most self-repeating release to date.
Release date: 2021-01-06
[6.2/10]
(G)I-DLE - I Burn
K-pop. Make no mistake this is an album that still very much fit in the K-pop musical mold, but this one somehow is less annoying…
Release date:
[6.1/10]
Holly Childs & Gediminas Žygus - Hydrangea
Modern composition / spoken word. Very good vaporwave-y music, like something James Ferraro might do.
Release date: 2018-07-03
[8.7/10]
Jabu - Sweet Company
Hypnagogic pop. 喔這很好聽
Release date: 2020-04-07
[8.4/10]
Xyla - Ways
Techno + IDM + footwork. Ｑ彈電音，讚
Release date: 2020-10-30
[8.4/10]
Christoph De Babalon - Recurring Horrors
Drum & Bass / sprawling electronic music. Totally missed this bad boy last year…
Release date: 2020-10-16
[8.4/10]
Serpente - Fe / Vazio
Jungle + IDM. Groovy stuff, 張揚表示不錯聽
Release date: 2020-08-06
[8.4/10]
Various Artists - Alterity
Gabber / trance techno. The concept surrounding this project is super nerdy almost to the extent of pretentiousness, but the tracks are really fun and stimulating. But then philosophizing = sexy is a long gone fad…
Release date: 2020-09-11
[8.4/10]
青葉市子 - Windswept Adan
Indie / psychedelic folk. Shifting chord progressions, ethereal vocals and crystalline plucked guitar, what’s not to like…
Release date: 2020-12-02
[8.3/10]
Michalis Moschoutis - Classical Mechanics
Modern composition / ambient / field recording. Music to listen to when you’re alone.
Release date: 2020-10-02
[8.3/10]
Hideki Umezawa & Andrew Peklar - Two Views Of Amami Oshima
Mystical ambient. Love this stuff.
Release date: 2020-12-10
[8.3/10]
Leila - Like Weather
Downtempo / trip-hop. Sounds alright.
Release date: 2020-11-20
[7.9/10]
Jessy Lanza - All The Time
Retro-pop. Wife seems to like this one a lot.
Release date: 2013-01-01
[7.8/10]
Ill Considered - Ill Considered VIII
Abrasive modern jazz rock.
Release date: 2020-11-27
[7.7/10]
Robbie Basho - Selections From Song Of The Avatars: The Lost Master Tapes
Ragtime.
Release date: 2020-12-04
[7.7/10]
Twins - Soon
Mathy screamo. Like a mathier La Dispute.
Release date: 2020-02-14
[7.5/10]
Moor Mother, billy woods - Brass
This feels more like a billy woods album with cameo appearance from Moor Mother than a collaberation between them. The tracks are alright but not as good as what I expected it to be.
Release date: 2020-12-18
[7.2/10]
Repetitor - Prazan prostor među nama koji može i da ne postoji
Serbian punk band. Sometimes the guitar sounds pretty cool, but other times not so much. The vocals are less cool than the guitars.
Release date: 2020-11-20
[6.7/10]
Primitive Ignorant - Sikh Punk
Industrial pop / gothic. I feel like this sounds a lot like NIN and Marilyn Manson, and I am really not a fan of MM…
Release date:
[6.4/10]
The Golden Filter - Autonomy
Darkwave. Pretty doomy stuff, fans of Fabulous Diamonds or Telefon Tel Aviv will enjoy this.
Release date: 2020-10-30
[7.8/10]
Omni - Deluxe
Post-punk revival stuff. Pretty jangly, not really impressionable to me. Or I just don’t like this kind of post-punk sound a lot…
Release date: 2017-03-03
[6.9/10]
Comments


Apache FOP: Fonts
Summary
The following table summarizes the font capabilities of the various FOP renderers:
| Renderer | Base-14 | AWT/OS | Custom | Custom Embedding |
|---|---|---|---|---|
| yes | no | yes | yes | |
| PostScript | yes | no | yes | yes |
| TXT | yes (used for layout but not for output) | no | yes (used for layout but not for output) | no |
| AWT | if available from OS | yes | yes | n/a (display only) |
| if available from OS | yes | yes | controlled by OS printer driver | |
| RTF | n/a (font metrics not needed) | n/a | n/a | n/a |
| MIF | n/a (font metrics not needed) | n/a | n/a | n/a |
| SVG | if available from OS | yes | no | no |
| XML | yes | no | yes | n/a |
Base-14 Fonts
The Adobe PDF Specification specifies a set of 14 fonts that must be available to every PDF reader: Helvetica (normal, bold, italic, bold italic), Times (normal, bold, italic, bold italic), Courier (normal, bold, italic, bold italic), Symbol and ZapfDingbats.
AWT/Operating System Fonts
The AWT family of renderers (AWT, Print, SVG), use the Java AWT libraries for font metric information. Through operating system registration, the AWT libraries know what fonts are available on the system, and the font metrics for each one.
Custom Fonts
Support for custom fonts is added by creating font metric files (written in XML) from the actual font files, and registering them with FOP. Currently only Type 1 and TrueType fonts can be added. More information about fonts can be found at:
Type 1 Font Metrics
FOP includes PFMReader, which reads the PFM file that normally comes with a Type 1 font, and generates an appropriate font metrics file for it. To use it, run the class org.apache.fop.fonts.apps.PFMReader:
Windows (on JDK 1.4 and later):
java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file
Windows (on JDK 1.3.x):
java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar;lib\xml-apis.jar; lib\xercesImpl.jar;lib\xalan.jar;lib\serializer.jar org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file
Unix (on JDK 1.4 and later):
java -cp build/fop.jar:lib/avalon-framework.jar:lib/commons-logging.jar:lib/commons-io.jar org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file
Unix (on JDK 1.3.1):
java -cp build/fop.jar:lib/avalon-framework.jar:lib/commons-logging.jar:lib/commons-io.jar:lib/xml-apis.jar: lib/xercesImpl.jar:lib/xalan.jar:lib/serializer.jar org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file
PFMReader [options]:
- -fn <fontname> By default, FOP uses the fontname from the .pfm file when embedding the font. Use the "-fn" option to override this name with one you have chosen. This may be useful in some cases to ensure that applications using the output document (Acrobat Reader for example) use the embedded font instead of a local font with the same name.
TrueType Font Metrics
FOP includes TTFReader, which reads the TTF file and generates an appropriate font metrics file for it. Use it in a similar manner to PFMReader. For example, to create such a metrics file in Windows from the TrueType font at c:\myfonts\cmr10.ttf:
java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar org.apache.fop.fonts.apps.TTFReader [options] C:\myfonts\cmr10.ttf ttfcm.xml
TTFReader [options]:
- -d <DEBUG | INFO > Sets the debug level (default is INFO).
- -fn <fontname> Same as for PFMReader.
- -ttcname <fontname> If you're reading data from a TrueType Collection (.ttc file) you must specify which font from the collection you will read metrics from. If you read from a .ttc file without this option, the fontnames will be listed for you.
- -enc ansi Creates a WinAnsi-encoded font metrics file. Without this option, a CID-keyed font metrics file is created. The table below summarizes the differences between these two encoding options as currently used within FOP. Please note that this information only applies to TrueType fonts and TrueType collections:
| Issue | WinAnsi | CID-keyed |
|---|---|---|
| Usable Character Set | Limited to WinAnsi character set, which is roughly equivalent to iso-8889-1. | Limited only by the characters in the font itself. |
| Character Encoding in the Output Document. | Correct. | Never correct. Search, index, and cut-and-paste operations in the output document will produce incorrect results. |
| Character Display | Correct. | Correct, but copy/paste won't work in Acrobat Reader. (FOP currently doesn't emit the /ToUnicode table which is necessary for copy/paste to work.) |
| Embedding the Font | Optional. | Mandatory. Not embedding the font produces invalid PDF documents. |
TrueType Collections Font Metrics
TrueType collections (.ttc files) contain more than one font. To create metrics files for these fonts, you must specify which font in the collection should be generated, by using the "-ttcname" option with the TTFReader.
To get a list of the fonts in a collection, just start the TTFReader as if it were a normal TrueType file (without the -ttcname option). It will display all of the font names and exit with an Exception.
Here is an example of generating a metrics file for a .ttc file:
java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar org.apache.fop.fonts.apps.TTFReader -ttcname "MS Mincho" msmincho.ttc msminch.xml
Register Fonts with FOP
You must tell FOP how to find and use the font metrics files by registering them in the FOP Configuration. Add entries for your custom fonts, regardless of font type, to the configuration file in a manner similar to the following:
<font metrics-url="file:///C:/myfonts/FTL_____.xml" kerning="yes" embed-url="file:///C:/myfonts/FTL_____.pfb"> <font-triplet name="FrutigerLight" style="normal" weight="normal"/> </font>
- URLs are used to access the font metric and font files. Relative URLs are resolved relative to the font-base property (or base) if available. See FOP: Configuration for more information.
- The "kerning" and "embed-url" attributes are optional. Kerning is currently not used at all. If embedding is off, the output will position the text correctly (from the metrics file), but it will not be displayed or printed correctly unless the viewer has the applicable font available to their local system.
- When setting the embed-url attribute for Type 1 fonts, be sure to specify the PFB (actual font data), not PFM (font metrics) file that you used to generate the XML font metrics file.
- If relative URLs are specified, they are evaluated relative to the value of the "font-base" setting. If there is no "font-base" setting, the fonts are evaluated relative to the base directory.
Embedding
Font embedding is enabled in the userconfig.xml file and controlled by the embed-url attribute. If you don't specify the embed-url attribute the font will not be embedded, but will only be referenced.
When FOP embeds a font, it adds a prefix to the fontname to ensure that the name will not match the fontname of an installed font. This is helpful with older versions of Acrobat Reader that preferred installed fonts over embedded fonts.
When embedding PostScript fonts, the entire font is always embedded.
When embedding TrueType fonts (ttf) or TrueType Collections (ttc), a subset of the original font, containing only the glyphs used, is embedded in the output document. Currently, this embedded font contains only the minimum data needed to be embedded in a pdf document, and does not contain any codepage information. The PDF document contains indexes to the glyphs in the font instead of to encoded characters. While the document will be displayed correctly, the net effect of this is that searching, indexing, and cut-and-paste will not work properly.
One workaround for this behavior is to use the "-enc ansi" option when generating metrics with TTFReader. This will cause the whole font to be embedded in the pdf document. Characters will be WinAnsi encoded (as specified in the PDF spec), so you lose the ability to use characters from other character sets. See Table of TTF Encoding Options for more details.
Explicitely embedding the base 14 fonts
There are cases where you might want to force the embedding of one or more of the base 14 fonts that can normally be considered available on the target platform (viewer, printer). One of these cases is PDF/A which mandates the embedding of even the base 14 fonts. Embedding a font such as Helvetica or Courier is straight-forward. The "Symbol" and "ZapfDingbats" fonts, however, currently present a problem because FOP cannot correctly determine the encoding of these two single-byte fonts through the PFM file. FOP now correctly interprets the "encoding" value in the XML font metrics file, but the PFMReader application writes "UnknownEncoding" to the generated XML file. In order to embed "Symbol" and "ZapfDingbats" you have to manually change the XML font metrics file and specify "SymbolEncoding" or "ZapfdingbatsEncoding" encoding respectively as the value for the "encoding" element.
Example:
<?xml version="1.0" encoding="UTF-8"?> <font-metrics type="TYPE1"> <font-name>Symbol</font-name> <embed/> <encoding>SymbolEncoding</encoding> <cap-height>673</cap-height> <x-height>766</x-height> [..]
by Jeremias Märki, Tore Engvig


Hello there! My name is Liam Condon, a current student of UC Berkeley Bootcamp's Full-Stack Flex program, and aspiring software engineer. After graduating the University of Vermont in 2016 with a B.A. in both Economics and Environmental Studies, I spent a few years working as a development analyst for a solar energy company in New York City. I very much enjoy working in the Renewable Energy space, and after being briefly exposed to the joys and possibilities of software development, I decided to further my skills in these areas.
Upon completion of this program, I will be well-versed in both front and back-end technologies including Javascript, Python, Node.js, MySQL, MongoDB, React, HTML, CSS and several others.
In the summer of 2018, I quit my job and rode my bicycle solo from Washington D.C. to Seattle, WA. It was an incredible experience that I'm so grateful I was able to have! Please contact me if you'd like to chat about my experience and/or my skills and capabilities as a developer. I look forward to hearing from you!


How to add videos
You can rip your dvds and/or copy your video files on your device, with an usb cable, or other software under /sdcard.kidztv., or you can download the free videos with the build in plugin. But you can also use third party plugins, but for that you will need to download and install them separately.
Download plugins
A list of compatible plugins can be found on our github page:
https://github.com/eltonkola/kidztv
.
Please follow the instruction from there, on how to install and use other plugins (like the youtube downloader
plugin).
Develop plugins
Making a new plugin is very easy and simple, for more info, read the wiki page on github: https://github.com/eltonkola/kidztv .


I am a basic block level element. My adjacent block level elements sit on new lines below me.
By default we span 100% of the width of our parent element, and our height is as tall as our child content. Our total width and height is our content + padding + border width/height.
We are separated by our margins. Because of margin collapsing, we are separated by the width of one of our margins, not both.
inline elements like this one and this one sit on the same line as one another, and adjacent text nodes, if there is space on the same line. Overflowing inline elements wrap onto a new line if possible — like this one containing text, or just go on to a new line if not, much like this image will do:


TIL: Format Python Snippets with Black.
Black, the opinionated Python code formatter, can easily be invoked from your editor to reformat a whole file. For example, from Vim:
" Black(Python) format the whole file nnoremap <leader>b :1,$!black -q -<CR>
But often you'd like to reformat just a section of the file, while leaving everything else intact. In principle, it's easy to tell Vim to just send the current visual selection:
" Black(Python) format the visual selection xnoremap <Leader>b :!black -q -<CR>
(Note that both the above Vim configuration snippets map the same key sequence -- leader (commonly comma) followed by lower case b. These can be defined simultaneously, because the second one uses 'xnoremap', meaning it is used only while a visual selection exists, while the first uses 'nnoremap', so is used all other times.)
But if the given code starts with an indent on the first line, for example if it comes from lines in the middle of a function, then this won't work. Black parses the given code into a Python abstract syntax tree (AST), and a leading indent is a syntax error - it's just not valid Python.
I filed a hopeful issue with Black, suggesting they could handle this case, but it was a long shot and hasn't gained much enthusiasm.
So, I present a tiny Python3 wrapper, enblacken, which:
- Unindents the given code such that the first line has no indent.
- Passes the result to Black.
- Reindents Black's output, by the same amount as the original unindent.


{% extends "registration/base.html" %} {% load static widget_tweaks %} {% block title %}Login{% endblock %} {% block content %}
Warning! {{ message }}
Oh snap! Your username and password didn't match.Please try again.
Warning! Your account doesn't have access to this page. To proceed, please log in with an account that has access.


External Namespace Connector Interface 1 (XNCI1) is an interface (abbreviated as XNCI1) for implementing namespace plug-ins which provides multiple functions and variables available in scripts.
The status of this interface is "FINALIZED".
The specification of this interface had been finalized at 2022/08/31. No modifications will be applied for this interface, excluding documents/comments.
This interface is currently supported by the scripting engine of Vnano. You can use this interface for development of plug-ins of applications equipped with the Vnano engine.
This interface is published under CC0, which is almost the same as the so-called "copyright-free" (domain).
| Name | INTERFACE_TYPE_ID |
|---|---|
| Value | The type ID of this interface (value: "XNCI") referred when the plug-in will be loaded. |
| Type | static final String |
| Name | INTERFACE_GENERATION |
|---|---|
| Value | The generation of this interface (value: "1"). |
| Type | static final String |
| Name | getNamespaceName |
|---|---|
| Signature | String getNamespaceName() |
| Description | Gets the name of this namespace. |
| Parameters | None |
| Return | The name of this namespace. |
| Exception | None |
| Name | isMandatoryToAccessMembers |
|---|---|
| Signature | boolean isMandatoryToAccessMembers() |
| Description |
Returns whether it is mandatory to specify of this namespace explicitly when accessing member functions/variables. This feature may be ignored on the script engine which does not support it. |
| Parameters | None |
| Return | Returns true if this namespace is mandatory to be specified to access members. |
| Exception | None |
| Name | getFunctions |
|---|---|
| Signature | ExternalFunctionConnectorInterface1[] getFunctions() |
| Description | Gets all functions belong to this namespace. |
| Parameters | None |
| Return | The array storing all functions belong to this namespace. |
| Exception | None |
| Name | getVariables |
|---|---|
| Signature | ExternalVariableConnectorInterface1[] getVariables() |
| Description | Gets all variables belong to this namespace. |
| Parameters | None |
| Return | The array storing all variables belong to this namespace. |
| Exception | None |
| Name | getVariables |
|---|---|
| Signature | ExternalStructConnectorInterface1[] getStructs() |
| Description |
Gets all structs belong to this namespace. However, the specification of ExternalStructConnectorInterface1 (XSCI1) has not been determined yet, so as for now, the content of the XSCI1's interface file is almost empty. Hence, at least now, this method has no meanings so it always returns (should be implemented to return) an empty array. This method will be available after when XSCI1's specification is determined. |
| Parameters | None |
| Return | The array storing all structs belong to this namespace. |
| Exception | None |
| Name | getEngineConnectorClass |
|---|---|
| Signature | Class<?> getEngineConnectorClass() |
| Description |
Returns the instance of "Class" class, representing the interface or the class of the engine connector, which is an object for communicating with the scripting engine. The instance of the specified interface/class by this method will be passed to the argument of initialization/finalization methods, e.g.: preInitializeForConnection(Object engineConnector). What type of interfaces are available depend on the implementation of the scripting engine, but at least, ECI1 is guaranteed to be available by the specification of XNCI1. |
| Parameters | None |
| Return | The Class representing the interface/class for communicating with the scripting engine. |
| Exception | None |
| Name | preInitializeForConnection |
|---|---|
| Signature | void preInitializeForConnection(Object engineConnector) throws ConnectorException |
| Description |
Performs the pre-initialization process necessary when this plug-in is connected to the script engine. On this interface, two connection-initialization (pre- and post-) processes can be implemented. This process (pre-) will be performed before when all member variables/functions are initialized. |
| Parameters | engineConnector: The engine connector (see: getEngineConnectorClass() method). |
| Return | None |
| Exception | ConnectorException: Thrown when the initialization has failed. |
| Name | postInitializeForConnection |
|---|---|
| Signature | void postInitializeForConnection(Object engineConnector) throws ConnectorException |
| Description |
Performs the post-initialization process necessary when this plug-in is connected to the script engine. On this interface, two connection-initialization (pre- and post-) processes can be implemented. This process (post-) will be performed after when all member variables/functions are initialized. |
| Parameters | engineConnector: The engine connector (see: getEngineConnectorClass() method). |
| Return | None |
| Exception | ConnectorException: Thrown when the initialization has failed. |
| Name | preFinalizeForDisconnection |
|---|---|
| Signature | void preFinalizeForDisconnection(Object engineConnector) throws ConnectorException |
| Description |
Performs the pre-finalization process necessary when this plug-in is disconnected from the script engine. On this interface, two connection-finalization (pre- and post-) processes can be implemented. This process (pre-) will be performed before when all member variables/functions are finalized. |
| Parameters | engineConnector: The engine connector (see: getEngineConnectorClass() method). |
| Return | None |
| Exception | ConnectorException: Thrown when the finalization has failed. |
| Name | postFinalizeForDisconnection |
|---|---|
| Signature | void postFinalizeForDisconnection(Object engineConnector) throws ConnectorException |
| Description |
Performs the post-finalization process necessary when this plug-in is disconnected from the script engine. On this interface, two connection-finalization (pre- and post-) processes can be implemented. This process (post-) will be performed after when all member variables/functions are finalized. |
| Parameters | engineConnector: The engine connector (see: getEngineConnectorClass() method). |
| Return | None |
| Exception | ConnectorException: Thrown when the finalization has failed. |
| Name | preInitializeForExecution |
|---|---|
| Signature | void preInitializeForExecution(Object engineConnector) throws ConnectorException |
| Description |
Performs the pre-initialization process necessary for each execution of a script. On this interface, two execution-initialization (pre- and post-) processes can be implemented. This process (pre-) will be performed before when all member variables/functions are initialized. |
| Parameters | engineConnector: The engine connector (see: getEngineConnectorClass() method). |
| Return | None |
| Exception | ConnectorException: Thrown when the initialization has failed. |
| Name | postInitializeForExecution |
|---|---|
| Signature | void postInitializeForExecution(Object engineConnector) throws ConnectorException |
| Description |
Performs the post-initialization process necessary for each execution of a script. On this interface, two execution-initialization (pre- and post-) processes can be implemented. This process (post-) will be performed after when all member variables/functions are initialized. |
| Parameters | engineConnector: The engine connector (see: getEngineConnectorClass() method). |
| Return | None |
| Exception | ConnectorException: Thrown when the initialization has failed. |
| Name | preFinalizeForTermination |
|---|---|
| Signature | void preFinalizeForTermination(Object engineConnector) throws ConnectorException |
| Description |
Performs the pre-finalization process necessary for each execution of a script. On this interface, two execution-finalization (pre- and post-) processes can be implemented. This process (pre-) will be performed before when all member variables/functions are finalized. |
| Parameters | engineConnector: The engine connector (see: getEngineConnectorClass() method). |
| Return | None |
| Exception | ConnectorException: Thrown when the finalization has failed. |
| Name | postFinalizeForTermination |
|---|---|
| Signature | void postFinalizeForTermination(Object engineConnector) throws ConnectorException |
| Description |
Performs the post-finalization process necessary for each execution of a script. On this interface, two execution-finalization (pre- and post-) processes can be implemented. This process (post-) will be performed after when all member variables/functions are finalized. |
| Parameters | engineConnector: The engine connector (see: getEngineConnectorClass() method). |
| Return | None |
| Exception | ConnectorException: Thrown when the finalization has failed. |


Package com.mxgraph.util
Class mxCurve
- java.lang.Object
-
- com.mxgraph.util.mxCurve
-
public class mxCurve extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
CORE_CURVE
Defines the key for the central curve indexprotected java.util.Map<java.lang.String,java.lang.Double>
curveLengths
The curve lengths of the curvesjava.util.List<mxPoint>
guidePoints
The points this curve is drawn through.protected java.util.Map<java.lang.String,double[]>
intervals
An array of arrays of intervals.static mxLine
INVALID_POSITION
Indicates that an invalid position on a curve was requestedstatic java.lang.String
LABEL_CURVE
Defines the key for the label curve indexprotected double
labelBuffer
Offset of the label curve from the curve the label curve is based on.protected double
maxXBounds
protected double
maxYBounds
protected double
minXBounds
protected double
minYBounds
protected java.util.Map<java.lang.String,mxPoint[]>
points
A collection of arrays of curve pointsprotected boolean
valid
Whether or not the curve currently holds valid values
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description mxPoint
collisionMove(java.lang.String index, mxRectangle rect, double buffer)
Returns a point to move the input rectangle to, in order to attempt to place the rectangle away from the curve.protected void
createCoreCurve()
Creates the core curve that is based on the guide points passed into this class instanceprotected void
createLabelCurve()
protected mxPoint[]
getBaseLabelCurve()
Returns the curve the label curve is too be based onmxRectangle
getBounds()
double
getCurveLength(java.lang.String index)
mxLine
getCurveParallel(java.lang.String index, double distance)
Returns a unit vector parallel to the curve at the specified distance along the curve.mxPoint[]
getCurvePoints(java.lang.String index)
Obtains the points that make up the curve for the specified curve index.mxPoint[]
getCurveSection(java.lang.String index, double start, double end)
Returns a section of the curve as an array of pointsjava.util.List<mxPoint>
getGuidePoints()
double[]
getIntervals(java.lang.String index)
protected int
getLowerIndexOfSegment(java.lang.String index, double distance)
Calculates the index of the lower point on the segment that contains the point distance along themxRectangle
getRelativeFromAbsPoint(mxPoint absPoint, java.lang.String index)
Calculates the position of an absolute in terms relative to this curve.protected mxPoint
intersectRectPerimeterPoint(java.lang.String curveIndex, mxRectangle rect, int indexSeg)
Returns the point at which this curve segment intersects the boundary of the given rectangle, if it does so.protected int
intersectRectPerimeterSeg(java.lang.String index, mxRectangle rect)
Utility method to determine within which segment the specified rectangle intersects the specified curveprotected int
intersectRectPerimeterSeg(java.lang.String index, mxRectangle rect, int startSegment)
Utility method to determine within which segment the specified rectangle intersects the specified curve.boolean
intersectsRect(java.awt.Rectangle rect)
Returns whether or not the rectangle passed in hits any part of this curve.mxPoint
intersectsRectPerimeter(java.lang.String index, mxRectangle rect)
Returns the point at which this curve intersects the boundary of the given rectangle, if it does so.double
intersectsRectPerimeterDist(java.lang.String index, mxRectangle rect)
Returns the distance from the start of the curve at which this curve intersects the boundary of the given rectangle, if it does so.boolean
isLabelReversed()
Whether or not the label curve starts from the end target and traces to the start of the branchprotected void
populateIntervals(java.lang.String index)
void
setLabelBuffer(double buffer)
protected void
updateBounds(double pointX, double pointY)
Updates the total bounds of this curve, increasing any dimensions, if necessary, to fit in the specified pointvoid
updateCurve(java.util.List<mxPoint> newPoints)
Updates the existing curve using the points passed in.protected boolean
validateCurve()
Method must be called before any attempt to access curve information
-
-
-
Field Detail
-
points
protected java.util.Map<java.lang.String,mxPoint[]> points
A collection of arrays of curve points
-
minXBounds
protected double minXBounds
-
maxXBounds
protected double maxXBounds
-
minYBounds
protected double minYBounds
-
maxYBounds
protected double maxYBounds
-
intervals
protected java.util.Map<java.lang.String,double[]> intervals
An array of arrays of intervals. These intervals define the distance along the edge (0 to 1) that each point lies
-
curveLengths
protected java.util.Map<java.lang.String,java.lang.Double> curveLengths
The curve lengths of the curves
-
CORE_CURVE
public static java.lang.String CORE_CURVE
Defines the key for the central curve index
-
LABEL_CURVE
public static java.lang.String LABEL_CURVE
Defines the key for the label curve index
-
INVALID_POSITION
public static mxLine INVALID_POSITION
Indicates that an invalid position on a curve was requested
-
labelBuffer
protected double labelBuffer
Offset of the label curve from the curve the label curve is based on. If you wish to set this value, do so directly after creation of the curve. The first time the curve is used the label curve will be created with whatever value is contained in this variable. Changes to it after that point will have no effect.
-
guidePoints
public java.util.List<mxPoint> guidePoints
The points this curve is drawn through. These are typically control points and are at distances from each other that straight lines between them do not describe a smooth curve. This class takes these guiding points and creates a finer set of internal points that visually appears to be a curve when linked by straight lines
-
valid
protected boolean valid
Whether or not the curve currently holds valid values
-
-
Constructor Detail
-
mxCurve
public mxCurve()
-
mxCurve
public mxCurve(java.util.List<mxPoint> points)
-
-
Method Detail
-
setLabelBuffer
public void setLabelBuffer(double buffer)
-
getBounds
public mxRectangle getBounds()
-
getLowerIndexOfSegment
protected int getLowerIndexOfSegment(java.lang.String index, double distance)
Calculates the index of the lower point on the segment that contains the point distance along the
-
getCurveParallel
public mxLine getCurveParallel(java.lang.String index, double distance)
Returns a unit vector parallel to the curve at the specified distance along the curve. To obtain the angle the vector makes with (1,0) perform Math.atan(segVectorY/segVectorX).- Parameters:
index
- the curve index specifying the curve to analysedistance
- the distance from start to end of curve (0.0...1.0)- Returns:
- a unit vector at the specified point on the curve represented
as a line, parallel with the curve. If the distance or curve is
invalid,
mxCurve.INVALID_POSITION
is returned
-
getCurveSection
public mxPoint[] getCurveSection(java.lang.String index, double start, double end)
Returns a section of the curve as an array of points- Parameters:
index
- the curve index specifying the curve to analysestart
- the start position of the curve segment (0.0...1.0)end
- the end position of the curve segment (0.0...1.0)- Returns:
- a sequence of point representing the curve section or null if it cannot be calculated
-
intersectsRect
public boolean intersectsRect(java.awt.Rectangle rect)
Returns whether or not the rectangle passed in hits any part of this curve.- Parameters:
rect
- the rectangle to detect for a hit- Returns:
- whether or not the rectangle hits this curve
-
intersectsRectPerimeter
public mxPoint intersectsRectPerimeter(java.lang.String index, mxRectangle rect)
Returns the point at which this curve intersects the boundary of the given rectangle, if it does so. If it does not intersect, null is returned. If it intersects multiple times, the first intersection from the start end of the curve is returned.- Parameters:
index
- the curve index specifying the curve to analyserect
- the whose boundary is to be tested for intersection with this curve- Returns:
- the point at which this curve intersects the boundary of the given rectangle, if it does so. If it does not intersect, null is returned.
-
intersectsRectPerimeterDist
public double intersectsRectPerimeterDist(java.lang.String index, mxRectangle rect)
Returns the distance from the start of the curve at which this curve intersects the boundary of the given rectangle, if it does so. If it does not intersect, -1 is returned. If it intersects multiple times, the first intersection from the start end of the curve is returned.- Parameters:
index
- the curve index specifying the curve to analyserect
- the whose boundary is to be tested for intersection with this curve- Returns:
- the distance along the curve from the start at which the intersection occurs
-
collisionMove
public mxPoint collisionMove(java.lang.String index, mxRectangle rect, double buffer)
Returns a point to move the input rectangle to, in order to attempt to place the rectangle away from the curve. NOTE: Curves are scaled, the input rectangle should be also.- Parameters:
index
- the curve index specifying the curve to analyserect
- the rectangle that is to be movedbuffer
- the amount by which the rectangle is to be moved, beyond the dimensions of the rect- Returns:
- the point to move the top left of the input rect to , otherwise null if no point can be determined
-
intersectRectPerimeterSeg
protected int intersectRectPerimeterSeg(java.lang.String index, mxRectangle rect)
Utility method to determine within which segment the specified rectangle intersects the specified curve- Parameters:
index
- the curve index specifying the curve to analyserect
- the whose boundary is to be tested for intersection with this curve- Returns:
- the point at which this curve intersects the boundary of the given rectangle, if it does so. If it does not intersect, -1 is returned
-
intersectRectPerimeterSeg
protected int intersectRectPerimeterSeg(java.lang.String index, mxRectangle rect, int startSegment)
Utility method to determine within which segment the specified rectangle intersects the specified curve. This method specifies which segment to start searching at.- Parameters:
index
- the curve index specifying the curve to analyserect
- the whose boundary is to be tested for intersection with this curvestartSegment
- the segment to start searching at. To start at the beginning of the curve, use 1, not 0.- Returns:
- the point at which this curve intersects the boundary of the given rectangle, if it does so. If it does not intersect, -1 is returned
-
intersectRectPerimeterPoint
protected mxPoint intersectRectPerimeterPoint(java.lang.String curveIndex, mxRectangle rect, int indexSeg)
Returns the point at which this curve segment intersects the boundary of the given rectangle, if it does so. If it does not intersect, null is returned.- Parameters:
curveIndex
- the curve index specifying the curve to analyserect
- the whose boundary is to be tested for intersection with this curveindexSeg
- the segments on this curve being checked- Returns:
- the point at which this curve segment intersects the boundary of the given rectangle, if it does so. If it does not intersect, null is returned.
-
getRelativeFromAbsPoint
public mxRectangle getRelativeFromAbsPoint(mxPoint absPoint, java.lang.String index)
Calculates the position of an absolute in terms relative to this curve.- Parameters:
absPoint
- the point whose relative point is to calculatedindex
- the index of the curve whom the relative position is to be calculated from- Returns:
- an mxRectangle where the x is the distance along the curve (0 to 1), y is the orthogonal offset from the closest segment on the curve and (width, height) is an additional Cartesian offset applied after the other calculations
-
createCoreCurve
protected void createCoreCurve()
Creates the core curve that is based on the guide points passed into this class instance
-
isLabelReversed
public boolean isLabelReversed()
Whether or not the label curve starts from the end target and traces to the start of the branch- Returns:
- whether the label curve is reversed
-
createLabelCurve
protected void createLabelCurve()
-
getBaseLabelCurve
protected mxPoint[] getBaseLabelCurve()
Returns the curve the label curve is too be based on
-
populateIntervals
protected void populateIntervals(java.lang.String index)
-
updateCurve
public void updateCurve(java.util.List<mxPoint> newPoints)
Updates the existing curve using the points passed in.- Parameters:
newPoints
- the new guide points
-
getCurvePoints
public mxPoint[] getCurvePoints(java.lang.String index)
Obtains the points that make up the curve for the specified curve index. If that curve, or the core curve that other curves are based on have not yet been created, then they are lazily created. If creation is impossible, null is returned- Parameters:
index
- the key specifying the curve- Returns:
- the points making up that curve, or null
-
getIntervals
public double[] getIntervals(java.lang.String index)
-
getCurveLength
public double getCurveLength(java.lang.String index)
-
validateCurve
protected boolean validateCurve()
Method must be called before any attempt to access curve information- Returns:
- whether or not the curve may be used
-
updateBounds
protected void updateBounds(double pointX, double pointY)
Updates the total bounds of this curve, increasing any dimensions, if necessary, to fit in the specified point
-
getGuidePoints
public java.util.List<mxPoint> getGuidePoints()
- Returns:
- the guidePoints
-
-


Blog Posts
- 24 Jan 2019: Build a PostreSQL Automated Failover in 5 minutes
- 30 Aug 2017: PAF 2.2 rc1 released
- 02 Nov 2016: PAF, auto failover and more at PGConf.eu 2016
- 25 Feb 2015: New repository for bloat estimation queries
- 05 Feb 2015: Partitioning and constraints part 1 - UNIQUE
- 03 Nov 2014: Btree bloat query - part 4 1 comment
- 10 Sep 2014: Bloat estimation for tables 1 comment
- 09 Sep 2014: Btree bloat query changelog - part 3
- 24 Jun 2014: More work and thoughts on index bloat estimation query 6 comments
- 28 Mar 2014: Playing with indexes and better bloat estimate 4 comments
- 06 Aug 2012: Normalizing queries for pg_stat_statements < 9.2 6 comments
- 06 Aug 2012: Using pgBagder and logsaw for scheduled reports 1 comment
- 16 Jun 2011: phpPgAdmin 5.0.2 in Debian unstable !
- 20 May 2011: 2nd chance for my PGCon 2011 Lightning Talk 2 comments
- 26 Apr 2011: GSoC project "New phpPgAdmin Plugin Architecture" accepted 4 comments
- 29 Mar 2011: Let's play with PostgreSQL network dumps! 5 comments
- 29 Mar 2011: New phpPgAdmin Website
- 28 Mar 2011: GSoC project ideas for phpPgAdmin
- 11 Dec 2010: Problems and workaround recreating implicit casts using 8.3+
- 06 Dec 2010: « Install done. »


{# This extension of the 'layout.html' prevents documentation for previous
versions of Astropy to be indexed by bots, e.g. googlebot or bing bot,
by inserting a robots meta tag into pages that are not in the stable or
latest branch.
It assumes that the documentation is built by and hosted on readthedocs.org:
1. Readthedocs.org has a global robots.txt and no option for a custom one.
2. The readthedocs app passes additional variables to the template context,
one of them being `version_slug`. This variable is a string computed from
the tags of the branches that are selected to be built. It can be 'latest',
'stable' or even a unique stringified version number.
For more information, please refer to:
https://github.com/astropy/astropy/pull/7874
http://www.robotstxt.org/meta.html
https://github.com/rtfd/readthedocs.org/blob/master/readthedocs/builds/version_slug.py
#}
{% extends "!layout.html" %}
{%- block extrahead %}
{% if not version_slug in to_be_indexed %}
{% endif %}
{{ super() }}
{% endblock %}


To use the horizontal wizard component, place a nui-wizard-horizontal
element in your template and include one or more
nui-wizard-step-v2
elements as children of the
nui-wizard-horizontal
element.
You can pass an existing wizard component as content of the dialog window.
You should insert wizard component in dialog body.
You can make your step busy to forbid actions.
Customizing the footer layout content and style for each step is quite easy, as you can see in the example below:
You are able to add wizard steps dynamically.
You are able to remove steps by index.
To handle async validation check 'PENDING' status of WizardV2Step stepControl


Login to site
×
Your login
Password
Don't have an account? Please
Sign up
Registration
×
Choose login
Enter password
Repeat password
Add my item
×
Item name
Description
Start auction
×
Item name
Description
Start price
Finish price
Price reduction time
Auction time
Image
Edit item
×
Name
Description
Show
My items
Auctions
All
Add item
Stop
Save state
Add funds
SignUp
Login
Logout


Bold
Italic
Creating Rich Internet Applications
jQuery is an open source project
Manipulating DOM using jQuery


Moving forecasting from research to decisions.
Please go to our new page for updated content: https://predict.phiresearchlab.org/
FluSight: Seasonal Influenza Forecasting
Dengue Forecasting Project


Reference: Atlassian Tutorial: Setting up a repository
Initialize an empty Git repository, but omit the working directory.
Shared repositories should always be created with the --bare flag (see discussion below).
Conventionally, repositories initialized with the --bare flag end in
The --bare flag creates a repository that doesn't have a working directory, making it impossible to edit files and commit changes in that repository.
Central repositories should always be created as bare repositories because pushing branches to a non-bare repository has the potential to overwrite changes.
Think of --bare as a way to mark a repository as a storage facility, opposed to a development environment.
This means that for virtually all Git workflows, the central repository is bare, and developers local repositories are non-bare.


The following long registration form is designed for demonstating the capabilities of CSS flexbox to adjust the form fields and layout without the need to rely on media queries etc. It makes the styling of forms easier and faster. In real world applications you should avoid having 2-column form layouts because they are not user-friendly. So, this form is for flexbox demonstration only and the HTML for this form is very semantic. No extraneous markup!


About Me¶
Note
This page is NOT a resume. It introduces myself in more detail in a casual tone.
Self-portrait¶
Born Nov 1994 in Hubei, China.
Male. Straight. Single.
Having no religion belief.
Being slightly introverted. Feel good at spending time alone or with a small group of people.
Never taking naps in the afternoon.
Always proclaim self as a cat person, though it doesn't means that I don't like dogs. My family told me that I loved holding and rubbing cats and dogs on the home floor at the age when I was learning to walk. They said I prefered dogs at that age, but you know, things have definitely changed.
Eating light-tasting diet, though accept slight spicy flavor. Like hotpot and tangerines. Dislike greasy/high-fat meat and celery. Stay neutral on ginger and cilantro.
A geek. I write codes for many years. I care about hardwares, their specs and performances. I also watch new digital products previews and, just like most geeks, clearly know that I don't have that much money to buy them back.
A fast learner, or at least a person with the so-called research spirit. I am interested in playing around with new things and learning new skills.
Anecdotes¶
Family: I have the world's most gentle mom, a dad who is old-fashioned but always have something to talk about on technical topics, a grandma who always worry about all the trivial things, a grandpa who sometimes loses temper but actually dotes on me a lot, and a two-day younger male cousin who I can talk everything with. I love them forever.
Pets: From the age I can remember, I have always had many cats and dogs around my home. Yes I know you're jealous, but I was really a kid having both cat and dog.
Nickname: My nickname was shouted from middle school to high school to college, and it never changed. Some of my friends think it's "cave" (洞), some think it's "freezing" (冻). Anyway, in Chinese the two are pronounced the same, so whatever they think.
When I was in elementary school, I loved to go downstairs to the bookstore and read the "Old Man" (老夫子) comics, and the owner of the bookstore knew me well (probably because I never bought one).
I was a soccer and ping-pong fan in elementary school, and when I got to middle school soccer turned into going to basketball games with my cousin every week. By the time I got to high school, I had a tablemate who really liked to play soccer, and I ended up throwing away the basketball to play soccer again. Ping-pong is probably the only ball hobby that has remained constant for me, but for now I don't play it much anymore.
I didn't really start listening to pop songs until I was almost out of middle school. Even though I had purchased S.H.E.'s albums in elementary school (around 2006), I just thought it was cool to be able to play CDs at home at the time. I can hardly believe now that I only started listening to Jay Chou as late as 2008.
I got into my high school with the 45th highest ranking in the city, so I was somehow smug. Given my grades in my freshman and sophomore years of high school, I could only say that I had hopes of going to an in-province university. But in my senior year because of my two friends, my personality underwent a big change. I became calm (or more introverted, as some friends said) and focused on studying, then my grades took a leap, and finally my entrance exam results allowed me to go to university in Shanghai.
The first TV series I ever watched seriously was Chinese Paladin 3 (仙剑奇侠传3) (BTW, this official translation is really awful), which I watched during many self-study sessions in the high school.
The first online literature I finished reading in its entirety was Jade Dynasty (诛仙) (Can someone explain why they translated it that way?). My high school classmate bought the series, and I borrow each volume from him and finish reading the whole story. No, not the self-study sessions, I used the lunch breaks this time.
During my undergraduate years, I traveled to several places with my roommates and used my camera carefully for photography. Without him, I probably would not have left so many photos documenting my memories, so I am very grateful to him.
In 2017, I went hiking for the first time with my friends and the location was the Pinnacles National Park. I bought a pair of hiking shoes after I got home, but our group of friends never hiked again.
I transferred from MS to PhD program in 2019. A lot of things happened that year. I returned home over the summer and found that many things had changed. I had to learn to say goodbye to the warm memories and old times.
I published my own book in 2020. I myself was very astonished: as a PhD student, I never thought that the first publication of my life would be a book rather than an academic paper.
I reached a new achievement in 2021, which was hospitalization. I have not been hospitalized for as long as I can remember, let alone overseas. Due to winter break and some other reasons, I was pretty much unvisited during my one-week hospitalization, but miraculously I stayed in a pretty good mood. I have no doubt that I've gotten tougher.


✪ Monster Generator
MONSTER GENERATOR
Hello, we're your dungeon party!
Your battle will soon begin.
Today, we don't live in a pineapple under the sea.
We live to battle. Your arena is your background.
Refresh for a new arena.
Scroll to generate your monster.


Registration is not yet open for {{ site.data.schedule.year }}. Check back later!
If you show up ready to go at 6pm on Saturday, {{ site.data.schedule.month }} {{ site.data.schedule.startday }}, we can register you for the event, so long as there is space left. So swing by the Great Hall in Coffman Memorial Union to sign up and compete!