| CONTENTS |
This chapter discusses printing, which is a surprisingly complicated subject. To understand why printing is so complicated, though, let's think a little bit about what you might want to print.
First, in the "olden days," we had line printers and their relatives: daisy-wheel printers, dot-matrix printers, and other pieces of equipment that generated typewriter-like output. Printing a simple text file was easy: you didn't need any special processing; you only needed some software to shove the file into the printer. If you wanted, you might add a banner page and do a little simple formatting, but that was really pretty trivial.
The one area of complexity in the printing system was the "spooling system," which had to do several things in addition to force-feeding the printer. Most printers were (and still are) shared devices. This means that many people can send jobs to the printer at the same time. There may also be several printers on which your file gets printed; you may care which one is used, or you may not. The spooling system needs to manage all this: receiving data from users, figuring out whether or not an appropriate printer is in use, and sending the file to the printer (if it's free) or storing the file somewhere (if the printer isn't free).
Historical note: why is this called the "spooling system"? Dave Birnbaum, a Principal Scientist at Xerox, says:
"SPOOL (Simultaneous Printing Off and On Line)" It was written for the early IBM mainframes (of the 3-digit, i.e., 709 kind) and extended to the early 1401 machines. Output for the printer was sent to the spool system, which either printed it directly or queued it (on tape) for later printing (hence the on/off line). There was also a 2nd generation version where the 1401 would act as the printer controller for the (by then) 7094. The two were usually connected by a switchable tape drive that could be driven by either machine." [There's some controversy about exactly what the acronym means, but Dave's is as good as any I've heard. JP]
The first few articles in this chapter, Section 45.2, Section 45.3, Section 45.4, and Section 45.5, discuss the basic Unix spooling system and how to work with it as a user.
The next few articles talk about how to format articles for printing not the kind of fancy formatting people think of nowadays, but simpler things like pagination, margins, and so on, for text files that are to be sent to a line printer or a printer in line-printer emulation mode. Section 45.6 describes this kind of simple formatting, and Section 45.7 gets a little more complicated on the same subject.
Historical note number two: why is the print spooler called lp or lpr? It typically spooled text to a line printer, a fast printer that used a wide head to print an entire line at a time. These printers are still common in data processing applications, and they can really fly!
In the mid-1970s, lots of Unix people got excited about typesetting. Some typesetters were available that could be connected to computers, most notably the C/A/T phototypesetter. Programs like troff and TEX were developed to format texts for phototypesetters. Typesetting tools are still with us, and still very valuable, though these days they generally work with laser printers via languages like PostScript. They're discussed in Section 45.10 through Section 45.17, along with the ramifications of fancy printing on Unix.
Finally, Section 45.19 is about the netpbm package. It's a useful tool for people who deal with graphics files. netpbm converts between different graphics formats.
ML
Unix used a print spooler to allow many users to share a single printer long before Windows came along. A user can make a printing request at any time, even if the printer is currently busy. Requests are queued and processed in order as the printer becomes available.
Unix permits multiple printers to be connected to the same system. If there is more than one printer, one printer is set up as the default printer, and print jobs are sent there if no printer is specified.
Many systems use the lpr command to queue a print job. When you use lpr, it spools the file for printing.
$ lpr notes
The lpq command tells you the status of your print jobs by showing you the print queue for a given printer.
$ lpq lp is ready and printing Rank Owner Job Files Total Size active fred 876 notes 7122 bytes 1st alice 877 standard input 28372 bytes 2nd john 878 afile bfile ... 985733 bytes
The word active in the Rank column shows the job that's currently printing. If your job does not appear at all on the listing, it means your job has finished printing or has been completely written into the printer's input buffer (or perhaps that you accidentally printed it to a different queue). If a job is not active, it's still in the queue.
You can remove a job with the lprm command. (Run lpq first to get the job number.)
$ lprm 877 dfA877host dequeued cfA877host dequeued
The command lpc status (Section 45.3) can be used to determine which printers are connected to your system and their names. If there is more than one printer, you can then use the -P option with lpr, lpq and lprm to specify a printer destination other than the default. For instance, if a laser printer is configured as laserp, you can enter:
$ lpr -Plaserp myfile
If you'll be using a certain printer often, put its name in the PRINTER environment variable (Section 45.4).
If you're using an older system that has only lp (see below), or if you'd like a fancier lpr that supports all sorts of handy features, take a peek at LPRng (available at http://www.lprng.com). It supports everything standard lpr does and more, including a GUI for detailed configuration.
The System V-style print system, which Solaris uses by default, has the lp command to queue a print job. (Solaris also optionally includes lpr-style printing commands, if you install the BSD compatibility package.) When you use lp, it spools the file for printing and returns the request id of your print job. The request id can later be used to cancel the print job, if you decide to do so.
$ lp notes request-id is lp-2354 (1 file)
The lpstat command can be used to check on the status of your print jobs. Like lpq, it will tell whether your job is in the queue or fully sent to the printer. Unlike lpq, it shows you only your own jobs by default:
$ lpstat lp-2354 14519 fred on lp
The message on lp indicates that the job is currently printing. If your job does not appear at all on the listing, it means your job has either finished printing or has been completely written into the printer's input buffer (or you accidentally printed it to a different queue). If the job is listed, but the on lp message does not appear, the job is still in the queue. You can see the status of all jobs in the queue with the -u option. You can cancel a job with the cancel command.
$ lpstat -u lp-2354 14519 fred on lp lp-2355 21321 alice lp-2356 9065 john $ cancel lp-2356 lp-2356: cancelled
The lpstat command can be used to determine what printers are connected to your system and their names. If there is more than one printer, you can then use the -d option with lp to specify a printer destination other than the default. For instance, if a laser printer is configured as laserp, then you can enter:
$ lp -dlaserp myfile
If you'll be using a certain printer often, put its name in the LPDEST environment variable (Section 45.4).
DD, TOR, and JP
The lpc(8) command, for lpr-style printing setups, is mostly for the superuser. (You may find it in a system directory, like /usr/sbin/lpc.) Everyone can use a few of its commands; this article covers those.
You can type lpc commands at the lpc> prompt; when you're done, type exit (or CTRL-d):
% lpc lpc> help status status show status of daemon and queue lpc> ... lpc> exit %
Or you can type a single lpc command from the shell prompt:
% lpc status imagen imagen: queuing is enabled printing is enabled no entries no daemon present %
The printer daemon (Section 1.10) watches the queue for jobs that people submit with lpr (Section 45.2). If queueing is disabled (usually by the system administrator), lpr won't accept new jobs.
lpc controls only printers on your local host. lpc won't control printers connected to other hosts, though you can check the queue of jobs (if any) waiting on your local computer for the remote printer.
The commands anyone can use are:
This tries to start a new printer daemon. Do this if something makes the daemon die while there are still jobs in the queue (lpq or lpc status will tell you this). It's worth trying when the system administrator is gone and the printer doesn't seem to be working. The printer name can be all to restart all printers. The printer name doesn't need an extra P. For example, to specify the foobar printer to lpr, you'd type lpr -Pfoobar. With lpc, use a command like restart foobar.
Shows the status of daemons and queues on the local computer (see the preceding example). The printer name can be all to show all printers.
By default, gives a list of lpc commands, including ones for the superuser only. Give it a command name and it explains that command.
Quits from lpc.
JP
Each printer on your system should have a name. By default, commands that send a file to a printer assume that the printer is named lp (a historical artifact; it stands for "Line Printer"). If you're using a single-user workstation and have a printer connected directly to your workstation, you can name your printer lp and forget about it.
In many environments, there are more options available: e.g., there are several printers in different locations that you can choose from. Often, only one printer will be able to print your normal documents: you may need to send your print jobs to a PostScript printer, not the line printer that the accounting department uses for billing.
There are two ways to choose a printer:
Printing commands in the lpr family accept the option -Pprinter. This includes lpr (Section 45.2), various scripts to format typeset documents, etc. For example, lpr -Pps file.ps sends the file file.ps to the printer named ps.
Commands in the lpr family recognize the PRINTER environment variable (Section 35.3); if PRINTER is defined, the command will read its value and choose a printer accordingly. So the command:
% setenv PRINTER ps or $ PRINTER=ps ; export PRINTER
ensures that the lpr-style print commands will send your documents to the printer named ps. The -P option overrides this environment variable, in case you need to send a particular print job to a different printer.
Commands in the lp family use the -d option to select a printer. So lp -d prfile.ps sends file.ps to the printer named pr; it's equivalent to the previous lpr example.
Commands in the lp family look for an environment variable named LPDEST, rather than PRINTER. So:
% setenv LPDEST ps or $ LPDEST=ps ; export LPDEST
ensures that the lp-style print commands will send your documents to the printer named ps. The -d option overrides this environment variable.
Note that Solaris and others that use lp can include both the lp and lpr print commands. This can make things confusing, particularly if you're using a script to process documents, and that script automatically sends your documents to the printer. Unless you know how the script works, you won't know which variable to set. I'd suggest setting both PRINTER and LPDEST for these systems.
By the way, if you have only one printer, but you've given it some name other than lp, the same solution works: just set PRINTER or LPDEST to the appropriate name.
ML
When you print a file, the file is copied to a "spooling directory." This can be a problem if you want to print a very large file: the copy operation might take a long time, or the act of copying might fill the spooling directory's filesystem.
Systems with the lpr family of commands provide a workaround for this problem. The -s option makes a symbolic link (Section 10.4) to your file from the spooling directory.
Here's such a command:
% lpr -s directions
Rather than copying directions, lpr creates a symbolic link to directions. The symbolic link is much faster, and you're unlikely to get a "filesystem full" error.
Using a symbolic link has one important side effect. Because the file isn't hidden away in a special spooling directory, you can delete or modify it after you give the lpr command and before the printer is finished with it. This can have interesting side effects; be careful not to do it.
Of course, this warning applies only to the file that actually goes to the printer. For example, when you format a troff file (Section 45.16) for a PostScript printer and then print using -s, you can continue to modify the troff file, because it's the resulting PostScript file that actually goes to the printer (thus the PostScript file, not the troff file, is symbolically linked).
ML
The line printer spooler (Section 45.2) prints what you send it. If you send it a continuous stream of text (and the printer is set up to print text files rather than PostScript), that's probably just what you'll get: no page breaks, indenting, or other formatting features.
That's where pr comes in. It's a simple formatter that breaks its input into "pages" that will fit onto a 66-line page. (You can change that length.) It adds a header that automatically includes the date and time, the filename, and a page number. It also adds a footer that ensures that text doesn't run off the bottom of the page.
This is just what you want if you are sending program source code or other streams of unbroken text to a printer. For that matter, pr is often very handy for sending text to your screen. In addition to its default behavior, it has quite a few useful options. Here are a few common options:
Separate pages using formfeed character (^L) instead of a series of blank lines. (This is handy if your pages "creep" down because the printer folds some single lines onto two or three printed lines.)
Replace default header with string str. See Section 21.15.
Set page length to n (default is 66).
Merge files, printing one in each column (can't be used with -num and -a). Text is chopped to fit. See Section 21.15. This is a poor man's paste (Section 21.18).
Separate columns with c (default is a tab).
Omit the page header and trailing blank lines.
Set line width for output made into columns to num (default is 72).
Begin printing at page num (default is 1).
Produce output having n columns (default is 1). See Section 21.15.
Some versions of pr also support these options:
Multicolumn format; list items in rows going across.
Double-spaced format.
Set input tabs to every nth position (default is 8), and use c as field delimiter (default is a tab).
Fold input lines (avoids truncation by -a or -m).
For output, replace whitespace with field delimiter c (default is a tab) every nth position (default is 8).
Number lines with numbers n digits in length (default is 5), followed by field separator c (default is a tab). See also nl (Section 12.13).
Offset each line n spaces (default is 0).
Pause before each page. (pr rings the bell by writing an ALERT character to standard error and waits for a carriage-return character to be read from /dev/tty (Section 36.15).)
Suppress messages for files that can't be found.
Let's put this all together with a couple of examples:
Print a side-by-side list, omitting heading and extra lines:
pr -m -t list.1 list.2 list.3
Alphabetize a list of states; number the lines in five columns.
sort states_50 | pr -n -5
If you have an old pr that doesn't support -n, you can use cat -n (Section 12.13) to supply the line numbers:
sort states_50 | cat -n | pr -5
TOR
enscript is a handy program that takes your text files and turns them into PostScript. enscript comes with a wide variety of formatting options. There is a GNU version available, and a few Unixes include a version by default. enscript is particularly useful when your main printer speaks primarily PostScript.
Detailed information on everything enscript can do is available in its manpage, but here are a few examples:
% enscript -G stuff.txt Fancy ("Gaudy") headers % enscript -2r stuff.txt Two-up printing -- two pages side-by-side on each page of paper % enscript -2Gr stuff.txt Two-up with fancy headers % enscript -P otherps stuff.txt Print to the otherps printer instead of the default % enscript -d otherps stuff.txt Ditto % enscript -i 4 stuff.txt Indent every line four spaces % enscript --pretty-print=cpp Object.cc Pretty print C++ source code % enscript -E doit.pl Pretty print doit.pl (and automagically figure out that it's Perl from the .pl suffix)
One thing to watch for: enscript's default page size is A4, and in the United States most printers want letter-sized pages. You can set the default page size to letter when installing enscript (many U.S. pre-built binary packages do this for you), or you can use the -M letter or - -media=letter option when you call enscript.
If you want a default set of flags to be passed to enscript, set the ENSCRIPT environment variable. Anything you pass on the command line will override values in ENSCRIPT.
DJPH
Sometimes you'd like to be able to print to a printer that's physically attached to another Unix machine. lpd, the print spool daemon, supports this easily.
lpd is configured using the printcap printer capabilities database, generally stored in /etc/printcap. Generally, a local printer is given a line that looks something like this:
lp|local line printer:\ :lp=/dev/lpt0:\ :sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:
The first line sets the printer name, in this case lp, and gives it a more descriptive name (local line printer) as well. The rest of the lines define various parameters for this printer using a parameter=value format. lp specifies the printer device in this case, /dev/lpt0. sd specifies the local spool directory, that is, where lpd will store spooled files while it's working with them. lf specifies the log file, where lpd will write error messages and the like for this printer.
To set up a remote printer, all you have to do is provide a remote machine (rm) and a remote printer (rp) instead of a printer device:
rlp|printhost|remote line printer:\ :rm=printhost.domain.com:rp=lp:\ :sd=/var/spool/output/printhost:lf=/var/log/lpd-errs:
Note that we added another name; since this is the default printer for the host printhost, either rlp or printhost will work as printer names. We also used a different spool directory, to keep files spooled for printhost separate from local files; this isn't strictly necessary, but it's handy. Don't forget to create this spool directory before trying to spool anything to this printer!
Some network connected printers have lpd-compatible spoolers built in. Talking to one of these printers is just as easy; just provide the printer's hostname for rm. Generally you won't have to provide rp unless the printer supports different printing modes by using different remote printer names, since the default name lp is almost always supported by these sorts of printers.
DJPH
Samba provides SMB networking to Unix boxes; in English, that means it allows Unix machines to share disks and printers with Windows machines and vice versa. Chapter 49 details Samba; here we'll talk a bit about tricks for printing over Samba, since it's so useful and parts of it are fairly arcane.
This is the easy one. Simply configure your printer normally using printcap, then set this in your smb.conf:
load printers = yes
This tells Samba to read the printcap file and allow printing to any printer defined there. The default [printers] section automatically advertises all printers found and allows anyone with a valid login to print to them. You may want to make them browsable or printable by guest if you're not particularly worried about security on your network. Some Windows configurations will need guest access to browse, since they use a guest login to browse rather than your normal one; if you can't browse your Samba printers from your Windows client, try setting up guest access and see if that fixes it.
If you want to get really fancy, current versions of Samba can support downloading printer drivers to clients, just like Windows printer servers do. Take a look at the PRINTER_DRIVER2.txt file in the Samba distribution for more about how to do this.
This one's a little more tricky. lpd doesn't know how to print to a Windows printer directly, or how to talk to Samba. However, lpd does know how to run files through a filter (Section 45.17). So what we'll do is provide a filter that hands the file to Samba, and then send the print job right to /dev/null:
laserjet:remote SMB laserjet via Samba\ :lp=/dev/null:\ :sd=/var/spool/lpd/laser:\ :if=/usr/local/samba/bin/smbprint:
Samba comes with a sample filter called smbprint; it's often installed in an examples directory and will need to be moved to somewhere useful before setting this up. smbprint does exactly what we want; it takes the file and uses smbclient to send it to the right printer.
How does smbprint know which printer to send it to? It uses a file called .config in the given spool directory, which looks something like this:
server=WINDOWS_SERVER service=PRINTER_SHARENAME password="password"
The smbprint script is reasonably well documented in its comments. Look through it and tweak it to fit your own needs.
DJPH
Once upon a time, printers were simple. You hooked them up to your machine and dumped text out to them, and they printed the text. Nothing fancy, and not very pretty either. As printers got smarter, they became capable of more things, printing in a different font, perhaps. Printing got a bit more complex. If you wanted to use fancy features, you had to embed special characters in your text, specific to the printer.
Printers got even smarter, and could draw pictures, print images, and use all sorts of fonts. They started using complex languages (Section 45.14) to print, which made dealing with them more complex but at least somewhat more consistent. People wrote tools to convert text (Section 45.7) so it could be printed.
Webster defines typesetting as "the process of setting material in type or into a form to be used in printing," literally, the setting of type into a printing press. As computers have gotten more sophisticated, it has come to include the formatting of text and images to send to typesetting machines and then, later, smart printers. These days, your average printer is pretty smart and can handle everything the typesetters of old could do and more. Windows systems provide What You See Is What You Get (WYSIWYG, pronounced whiz-ee-wig) editors as a matter of course, most of which do all of their typesetting without any user intervention (and often badly, to boot).
On Unix, typesetting generally involves describing the formatting you want using a formatting language and then processing the source file to generate something that a printer can understand. There are a variety of tools and languages that do this, with various purposes, strengths, and weaknesses. Many formatting languages are markup languages, that is, they introduce formatting information by "marking up" the text you want formatted.
There is an entire science (and art) of typography that we won't try to get into here. My personal favorite books on the subject are Robert Bringhurst's The Elements of Typographic Style for general typography and Donald Knuth's Digital Typography for issues of typesetting with computers.
What we will try to cover are formatting languages (Section 45.12 and Section 45.13), printer languages (Section 45.14), and ways to use Unix to get those formatting languages out to your printer usefully (Section 45.15 through Section 45.17).
Relatively recently, open source WYSIWYG tools have become available for Unix. OpenOffice, available at http://www.openoffice.org, is a good example. OpenOffice does its own typesetting behind the scenes and dumps out PostScript. If you don't have a PostScript printer and you're interested in using something like OpenOffice, Section 45.18 might help.
DJPH
Unix was one of the first operating systems to provide the capability to drive a typesetter. troff is both a markup language and a tool for generating typesetter output.
Originally, troff was designed to drive a device called a C/A/T phototypesetter, and thus it generated a truly frightening collection of idiosyncratic commands. For a while, there were several version of troff and troff-related tools, including tools to translate C/A/T output into something useful, versions of troff that output slightly saner things than C/A/T, and so forth. It was all very confusing.
Most systems these days still have a version of troff, often GNU's groff, which outputs PostScript and other device-independent formats. Unix manpages are still written in nroff, a related tool that takes the same input and spits out ASCII-formatted text, using the man macro package. However, most people don't use troff and its related tools for general text formatting much any more.
So why do we care about troff? The Jargon Dictionary (Version 4.2.2) has this to say:
troff /T'rof/ or /trof/ n.
The gray eminence of Unix text processing; a formatting and phototypesetting program, written originally in PDP-11 assembler and then in barely-structured early C by the late Joseph Ossanna, modeled after the earlier ROFF which was in turn modeled after the Multics and CTSS program RUNOFF by Jerome Saltzer (that name came from the expression "to run off a copy"). A companion program, nroff, formats output for terminals and line printers.
In 1979, Brian Kernighan modified troff so that it could drive phototypesetters other than the Graphic Systems CAT. His paper describing that work ("A Typesetter-independent troff," AT&T CSTR #97) explains troff's durability. After discussing the program's "obvious deficiencies a rebarbative input syntax, mysterious and undocumented properties in some areas, and a voracious appetite for computer resources" and noting the ugliness and extreme hairiness of the code and internals, Kernighan concludes:
"None of these remarks should be taken as denigrating Ossanna's accomplishment with TROFF. It has proven a remarkably robust tool, taking unbelievable abuse from a variety of preprocessors and being forced into uses that were never conceived of in the original design, all with considerable grace under fire."
The success of TEX and desktop publishing systems have reduced troff's relative importance, but this tribute perfectly captures the strengths that secured troff a place in hacker folklore; indeed, it could be taken more generally as an indication of those qualities of good programs that, in the long run, hackers most admire.
DJPH
The definitive documentation system for every Unix is manpages. (Much GNU software is documented fully in info pages instead, but manpages are so foundational that even those packages generally provide some sort of manpage.) What is a manpage, then?
A manpage is a text file, marked up with nroff commands, specifically using the man macro package. (Well, technically, using the tmac.an standard macro package t/nroff takes a -m option to specify which tmac.* macro package to use. Thus, man uses nroff -man.) A simple manpage (in this case, the yes(1) manpage from FreeBSD) looks something like this:
.Dd June 6, 1993 .Dt YES 1 .Os BSD 4 .Sh NAME .Nm yes .Nd be repetitively affirmative .Sh SYNOPSIS .Nm .Op Ar expletive .Sh DESCRIPTION .Nm Yes outputs .Ar expletive , or, by default, .Dq y , forever. .Sh HISTORY The .Nm command appeared in .At 32v .
This collection of difficult-to-read nroff commands, when formatted by nroff via the man command on my FreeBSD machine, looks something like this:
YES(1) FreeBSD General Commands Manual YES(1) NAME yes - be repetitively affirmative SYNOPSIS yes [expletive] DESCRIPTION Yes outputs expletive, or, by default, "y", forever. HISTORY The yes command appeared in Version 32V AT&T UNIX. 4th Berkeley Distribution June 6, 1993 1
The various nroff/man macros allow you to define things such as the name of the command, the short description of what it does, the list of arguments, and so forth, and formats it all into the standard look of a manpage. To write your own manpages, take a look at existing manpages for examples, and read the man(1) and man(7) manpages.
DJPH
Section 45.12 shows an example of a simple formatting markup language; the one used by man via nroff. Don't laugh it may seem arcane, but it is fairly simple. Like all markup languages, it attempts to abstract out certain things, to allow you to describe what you'd like the end result to look like. Manpages are simple to describe, so the markup language for them is relatively simple.
Full troff is somewhat more complex, both because it allows expressing far more complex ideas, and because it allows definition of macros to extend the core markup language. Similarly, TEX (pronounced "tek") is essentially a programming language for typesetting. It provides a very thorough model of typesetting and the ability to, essentially, write programs that generate the output you want.
Available on top of TEX is LATEX (pronounced "lah-tek" or "lay-tek"), a complex macro package focused on general document writing. It allows you to describe the general structure of your document and let LATEX (and underneath, TEX) sort out the "proper" way to typeset that structure. This sort of markup is very different to deal with than working in a WYSIWYG word processor, where you have to do all of the formatting yourself. As an example, a simple LATEX document looks something like this (taken from The Not So Short Introduction to LATEX2e):
\documentclass[a4paper,11pt]{article} % define the title \author{H.~Partl} \title{Minimalism} \begin{document} % generates the title \maketitle % insert the table of contents \tableofcontents \section{Start} Well, and here begins my lovely article. \section{End} \ldots{} and here it ends. \end{document}
Much like the nroff input earlier, this describes the structure of the document by inserting commands into the text at appropriate places. The LyX editor (http://www.lyx.org) provides what they call What You See Is What You Mean (WYSIWYM, or whiz-ee-whim) editing by sitting on top of LATEX. Lots of information about TEX and LATEX is available at the TEX Users' Group web site, http://www.tug.org. TEX software is available via the Comprehensive TEX Archive Network, or CTAN, at http://www.ctan.org. I strongly recommend the teTEX distribution as a simple way to get a complete installation of everything you need in one swell foop.
In contrast, while HTML is also a markup language, its markup is focused primarily on display and hypertext references rather than internal document structure. HTML is an application of SGML; you probably know about it already because it is the primary display markup language used on the web. The following is essentially the same as the sample LATEX document, but marked up using HTML formatting:
<html> <head> <title>Minimalism</title> </head> <body> <h1>Minimalism</h1> ...table of contents... <h2>Start</h2> <p>Well, and here begins my lovely article.</p> <h2>End</h2> <p>… and here it ends.</p> </body> </html>
Other markup languages common on Unixes include DocBook, which is also an application of SGML or XML, and in which a lot of Linux documentation is written, and texinfo, the source language of info pages, in which most GNU documentation is written. The manuscript for this edition of Unix Power Tools is written in a variant of SGML-based DocBook, in fact.
DJPH
Printing languages, also sometimes called page description languages, are representations of exactly what needs to be on the screen or printed page. They are generally a collection of drawing commands that programs can generate, often with extra features to make drawing complex pictures or doing fancy things with text easier.
PostScript was developed by Adobe in the early 1980s to provide some sort of generic page description language. It is a fairly complete language; I've written complex PostScript programs by hand. This makes it much easier to write software that can generate PostScript output. Modern troffs can generate PostScript, and ghostscript can be used to process PostScript into printer-specific output for certain non-PostScript printers, so PostScript is a very useful output form.
Printer Command Language, or PCL, was originally developed by Hewlett-Packard, also in the early 1980s, to provide a generic printer language for their entire range of printers. Early versions were very simple, but PCL 3 was sophisticated enough that other printer manufacturers started to emulate it, and it became a de facto standard. PCL's more current incarnations are quite flexible and capable. Incidentally, ghostscript can turn PostScript into PCL, and most printers that can't speak PostScript can speak some form of PCL these days. My primary printer these days speaks PCL 5E, and I use it from both Windows machines and Unix machines.
DVI stands for "device independent" and is the primary output from TEX (and thus LATEX). Like PostScript, it's a generic language for describing the printed page. There are converters that convert DVI into PostScript, PCL and PDF.
PDF is Adobe's successor to PostScript. PDF has a special place on the web, because it's been promoted as a way to distribute documents on the web and have them displayed consistently in a wide variety of environments, something not possible in HTML. This consistency is possible for the same reasons any page description language can provide it: the focus of such a language is on describing exactly what the page should look like rather than being human readable or editable, like most markup languages. However, Adobe has provided Acrobat Reader free for multiple platforms and promoted PDF extensively, so it is the de facto standard for page description languages on the web these days.
DJPH
Section 45.7 introduced one tool that can convert plain text into PostScript for printing. In general, if your printer isn't an old text-only printer and you want to be able to print text files, you'll need some sort of filter (or filters) to convert the text into something useful.
If your printer supports PostScript, tools like a2ps and enscript (Section 45.7) can do what you need. If your printer supports PCL or another printer language, you may want to add ghostscript to the mix. ghostscript can read PostScript and PDF and output correct representations to a variety of printers. Incidentally, ghostscript can also do a host of other useful things, like create PDFs from PostScript and the like.
Here's an example of using enscript, ghostscript, and lpr to print the background.txt file to my printer (an HP LaserJet 6L):
% enscript -2Gr background.txt -o background.ps % gs -q -dNOPAUSE -sDEVICE=ljet4 -sOutputFile=background.lj4 background.ps -c quit % lpr background.lj4 % rm background.lj4 background.ps
-2Gr tells enscript that I want two-up pages with fancy headers, and -o sends the output to background.ps (remember that enscript generates PostScript). -q tells gs to run quietly. -dNOPAUSE disables ghostscript's usual behaviour of pausing and prompting at the end of each page. -sDEVICE=ljet4 says to create output for a ljet4 device. -sOutputFile=background.lj4 redirects the output of ghostscript to background.lj4, and -c quit says to quit once background.ps is done. Then we use lpr to spool the now-ready output file, delete the temporary files, and we're all done.
Seems like sort of a pain, but it does show all of the steps needed to get that output to go to the printer properly. Section 45.17 shows how to arrange for most of that to be done for you by the spooler automatically.
DJPH
Section 45.15 showed the steps necessary to convert plain text into something printable. Generally the steps involved are similar for a typeset source file, with perhaps an extra step or two.
troff generates PostScript by default in most installations these days, or it can be made to easily enough. GNU troff (groff ) can also generate PCL, DVI, and HTML by using the appropriate -T option.
TEX generates DVI; the teTEX package includes dvips to convert DVI into PostScript, dvilj4 to convert it into PCL, dvipdf to convert it into PDF, and several others.
HTML can be converted into PostScript using html2ps.
An example of using LATEX, dvilj4, and lpr to print the article.tex file to my printer (an HP LaserJet 6L):
% latex article.tex % dvilj4 article.dvi % lpr article.lj % rm article.lj article.dvi
This time it's slightly simpler than the example in Section 45.15, because the default options all do what we want. Even so, it can be made even simpler; Section 45.17 shows how.
DJPH
Section 45.15 and Section 45.16 showed what sorts of steps are required to get files into a printable form. They seem tedious, however, and computers are really quite good at tedium, so how can we make the spooler do all this for us automatically?
There are a couple of options. One of the more well-known is apsfilter, which is a set of filter scripts designed to work with lpd to automatically convert incoming source files to an appropriate output format before dumping them to the printer. Extensive information is available at http://www.apsfilter.org, and apsfilter has its own automatic setup scripts, but I'll give a quick overview to give you an idea of what configuring lpd's filters looks like.
In Section 45.9, we used an input filter trick to print to a Samba printer by putting a if entry in the printcap for that printer. if stands for "input filter," and there are several other kinds of filters available in standard lpd, including a ditroff filter, a Fortran filter (!), and an output filter.
apsfilter installs itself as the input filter for any printer it manages, and looks at the source file. It decides based on a number of pieces of information what kind of source file it is, automatically processes it with the right set of programs, and poof, you have correct output coming out of your printer. There's a reason this kind of tool is called a "magic filter" (and why the title of this chapter says "Automagically"). Having a magic filter installed makes life so much easier.
If you look at your printcap once apsfilter is installed, you'll notice this entry (or something much like it):
lp|local line printer:\ ... :if=/usr/local/sbin/apsfilter:\ ...
That's all it takes to hook into lpd and tell the spooler to give apsfilter a shot at the text on the way through. apsfilter looks at the incoming file and its configuration for the printer queue and converts the source into the appropriate printer language using whatever filter or set of filters are needed.
Other magic filters include LPD-O-Matic and magicfilter. http://www.linuxprinting.org has all sorts of information about this and other printing subjects. Don't be fooled by the name much of the information it provides can help you with printing on any Unix system, not just Linux.
DJPH
The Common Unix Printing System (CUPS) is a full network-capable printing package available for a wide variety of Unix platforms. From their web page:
CUPS is available at:
CUPS provides a portable printing layer for UNIX-based operating systems. It has been developed by Easy Software Products to promote a standard printing solution for all UNIX vendors and users. CUPS provides the System V and Berkeley command-line interfaces.
CUPS uses the Internet Printing Protocol ("IPP") as the basis for managing print jobs and queues. The Line Printer Daemon ("LPD") Server Message Block ("SMB"), and AppSocket (a.k.a. JetDirect) protocols are also supported with reduced functionality. CUPS adds network printer browsing and PostScript Printer Description ("PPD") based printing options to support real-world printing under UNIX.
CUPS is headed towards becoming the Linux standard for printing, and it is an easy way to configure all your printing tools at once regardless of your platform. Visit their web page for extensive information.
DJPH
There are dozens of formats used for graphics files across the computer industry. There are tiff files, PICT files, and gif files. There are different formats for displaying on different hardware, different formats for printing on different printers, and then there are the internal formats used by graphics programs. This means that importing a graphics file from one platform to another (or from one program to another) can be a large undertaking, requiring a filter written specifically to convert from one format to the next.
Go to http://examples.oreilly.com/upt3 for more information on: netpbm
The netpbm package can be used to convert between a wide variety of graphics formats. netpbm evolved from the original Portable Bitmap Package, pbmplus, written by Jef Poskanzer. A group of pbmplus users on the Internet cooperated to upgrade pbmplus; the result was netpbm. netpbm has relatively recently seen some active development again on SourceForge, and its current home page is http://netpbm.sourceforge.net.
The idea behind pbm is to use a set of very basic graphics formats that (almost) all formats can be converted into and then converted back from. This is much simpler than having converters to and from each individual format. These formats are known as pbm, pgm, and ppm: the portable bitmap, graymap, and pixmap formats. (A bitmap is a two-dimensional representation of an image; a graymap has additional information encoded that gives grayscale information for each bit; a pixmap encodes color information for each bit.) The name pnm is a generic name for all three portable interchange formats (with the n standing for "any"), and programs that work with all three are said to be "anymap" programs.
The netpbm package contains well over a hundred conversion programs. There are three basic kinds of programs:
Programs that convert a graphics file to one of the pnm formats. For example, if I had a tiff file and wanted to convert it to PostScript, I might start the process by using tifftopnm:
% tifftopnm Hobbes.tiff > Hobbes.pnm
Programs that convert from one of the pnm formats to another format. For example, if I wanted to convert the Hobbes.pnm file directly to PostScript, I could use pnmtops:
% pnmtops Hobbes.pnm > Hobbes.ps
Programs used to manipulate the image in pnm format. For example, if I wanted to crop the image, I could use pnmcut before I converted the file to PostScript and printed it:
% tifftopnm Hobbes.tiff > Hobbes.pnm % pnmcut 10 10 200 200 Hobbes.pnm > Hobbes.cut % pnmtops Hobbes.cut > Hobbes.ps % lpr Hobbes.ps
Or, on one command line (and without cluttering your disk with intermediary files):
% tifftopnm Hobbes.tiff | pnmcut 10 10 200 200 | pnmtops | lpr
I frequently like to create X11 (Section 1.22) bitmaps out of pictures in newspapers or magazines. The way I do this is first to scan the picture in on a Macintosh and save it as tiff or PICT format. Then I ftp (Section 1.21) the file to our Unix system and convert it to pnm format, and then use pbmtoxbm to convert it to X bitmap format. If the picture is too big, I use pnmscale on the intermediary pnm file. If the picture isn't right-side-up, I can use pnmrotate and sometimes pnmflip before converting the pnm file to X11 bitmap format.
There are far too many programs provided with the netpbm package to discuss in detail, and some of these formats are ones that you've probably never even heard of. However, if you need to fiddle with image files (or, now, video files!), netpbm almost certainly has a converter for it. Take a peek through the documentation sometime.
LM and JP
| CONTENTS |


|
|
Low valtage, low energy used
Due to the use of LED, it performs well on a low voltage of 24V, and consumes only 1.8W/Ft(R) or 1.44W/ Ft(Y,O,B,G,W).
High and even brightness
The light source is a string of light emitting diodes(LEDS) spaced a distance apart sufficient to permit the light emitted by each point light source into the special oval-shaped encapsulating jacket. Due to its own special structure and high intensity of LEDs, LED Neon-Flex provides the light with uniformity and neon-like brightness.
Long lifetime and durability
LED Neon-Flex applies LED technology in a complete new structure. It is extremely durable under all conditions. Compared to glass neon, it is more durable, impact resistant and emergy saving.
Energy saving
LED Neon-Flex can save you up to 70% or more in energy cost: Traditional glass neon: 8.75 watts per linear foot LED Neon-Flex: 1.8W/Ft(R) or 1.44W/Ft(Y,O,B,G,W)
Flexibility
LED Neon-Flex, worthy of the name, is highly flexible. It can be bent to a minimum radius of 4cm, and can be cut at any length on the cutting mark. Thus it is very easy to shape various letters, patterns, motifs and other applications.
Safety
Unlike neon lights that have to run on a very high voltage of 15,000V, LED Neon-Flex only operates on 24V, As it is shockproof and emits very little heat, it is absolutely satf to use.
Transportalbe and easy to insall
Because of the fragility and heavy weight primarily due to its supporting infrastructure, traditional neon light is expensive to package and ship. LED Neon-Flex, with minimized size and light weight, provides the handling benefit so that it is easy to transport, similar to LED rope, with its specially designed accessories, LED Neon-Flex is easy to install and can save your tremendous labor costs. Energy cost comparison between traditional glass neon and LED Neon-Flexble.
|
|


Create Account And Fly
Enter FirstName :
Enter LastName :
Enter DOB :
Enter Mobile Number :
Enter MailId :
Enter Create Password :
Enter Conform Password :
I have an account
Gender:
Male
Female
Reset
Submit
Los Angeles
LA is always so much fun!
Chicago
Thank you, Chicago!
New York
We love the Big Apple!
Previous
Next
Previous
Next


The electrode-csrf-jwt plugin enables stateless CSRF protection using JWT in Electrode, Express, or Hapi applications.
CSRF protection is an important security feature, but in systems which don't have backend session persistence, doing CSRF token validation is tricky. Stateless CSRF support addresses this need.
Double JWT CSRF tokens
We rely on the fact that cross site requests can't set headers.
Two JWT CSRF tokens are generated on the server side with the same payload but different types (see below), one for the HTTP header, one for the cookie.
headerPayload = { type: "header", UUID: "12345" };
cookiePayload = { type: "cookie", UUID: "12345" };
When a client makes a request, the JWT token must be sent in the headers.
On server side, both tokens are received, decoded, and validated to make sure the payloads match.
Disadvantage: relies on client making all request through AJAX.
npm
#$ npm install --save electrode-csrf-jwt
options
:
secret
: Required. A string or buffer containing either the secret for HMAC algorithms, or the PEM encoded private key for RSA and ECDSA.Others are optional and follow the same usage as jsonwebtoken
algorithm
expiresIn
notBefore
audience
subject
issuer
jwtid
subject
noTimestamp
headers
This module can be used with either Electrode, Express, or Hapi.
config/default.json
configuration #{
"plugins": {
"electrode-csrf-jwt": {
"options": {
"secret": "shhhhh",
"expiresIn": 60
}
}
}
}
app.js
configuration #const csrfMiddleware = require("electrode-csrf-jwt").expressMiddleware;
const express = require("express");
const app = express();
const options = {
secret: "shhhhh",
expiresIn: 60
};
app.use(csrfMiddleware(options));
server/index.js
configuration #const csrfPlugin = require("electrode-csrf-jwt").register;
const Hapi = require("hapi");
const server = new Hapi.Server();
const options = {
secret: "shhhhh",
expiresIn: 60
};
server.register({register: csrfPlugin, options}, (err) => {
if (err) {
throw err;
}
});


About me
|
Michael Nikonov (31.12.2002, Zvenigorod, Moscow region) is a freshman at the Faculty of Bioengineering and Bioinformatics, Moscow State University (FBB MSU). Graduate of the Advanced Education and Research Center (AESC) of MSU, Kolmogorov Boarding School (2018-2020). Previously studied at the "Intellectual" boarding school. |
|
||||||||
|---|---|---|---|---|---|---|---|---|---|
|
Michael Nikonov (31.12.2002, Zvenigorod, Moscow region) is a freshman at the Faculty of Bioengineering and Bioinformatics, Moscow State University (FBB MSU). Graduate of the Advanced Education and Research Center (AESC) of MSU, Kolmogorov Boarding School (2018-2020). Previously studied at the "Intellectual" boarding school. |


CINECITTA’ WORLD
Each of Italy (and many fans of cinema in the world!) Knows what is the name of Cinecitta '- Roman town film. It is here that formed the most important works of Italian cinema and numerous megahity world cinema. Today, the town declined slightly, but still tries to exploit commercially his former splendor. Cinecittà Studios can be visited, and their "copy" in the village of podrzymskiej CASTEL ROMANO (Pomezia) can also be ideal to play. From July 2014 began its activity since the amusement park Cinecitta World dedicated to the fascinating world of cinema.
Designed by three-time Academy Award winner Dante Ferretti and full of music Oscar winner Ennio Morricone (MISSION watched with Robert de Niro?), Cinecittà World offers its guests an exciting entertainment classic amusement park combined with discovering the world of film. At the park visitors waiting more than 20 attractions (the largest in Italy rollercaster ALTAIR!) 8 film sets, 4 theaters with film visual effects and restaurants, bars and shops.


Space Age
(solving an exercism.io problem with metaprogramming)
exercism.io
- (*I am not afilliated with)
- do small things well
exercism.io
Problem
Repetition
Issues
- Repetition (ok in tests (maybe); not ok in non-tests)
- Magic numbers (context kinda makes it ok?)
- Separation of concerns (lack of) - coefficients should be together
- No trailing comma
Issues
- Spacing/formatting
- Planet map is not named
- Hardcoding a value derived from the original numbers, not the original data
Lessons
- Style is important
- There are many ways to write anything


A few things to do
-
Change the default application name <string>
in the angular.config.js
file, modify the applicationName
property of the settingsServiceProvider
object. This value is a string
-
Change the default application icon <data URI scheme>
in the angular.config.js
file, modify the applicationIcon
property of the settingsServiceProvider
object.
Example: data:image/png;base64,iVBORw0KGgoAA … AANSUhEUgAAAIAAA
-
package.json file
Update the name
and description
properties to fit your application.
-
favicon.ico file
replace the favicon.ico
file with your project's icon.
-
README.md file
update the README.md
file with details about your project.


Flight 34: The launch was originally scheduled for the Falcon Heavy, but performance improvements allowed the mission to be carried out by an expendable Falcon 9 instead. -wiki


Prototype (R package).
Model and code are based on examples in Gelman et al. (2014) and McElreath (2020).
This prototype is related to a previous simulation study.
The distributions and parameters in the simulation study were chosen so that the generated data is comparable to certain data of interest. The prototype is meant to be used for roughly the same kind of data. Please refer to this report for details.
The package documentation can be accessed via the package website.
First install dependencies.
To get a working C++ toolchain on macOS Big Sur (version 11.2.1 or higher), install Xcode from the App Store or install Xcode command line tools in a shell:
% xcode-select --install
Follow the instructions for cmdstanr. The macOS R toolchain installer referred to in the RStan documentation is then not needed.
Next, install the following R packages and their dependencies in this order:
The rethinking package needs to be installed from GitHub.
The prototype can then be installed from GitHub with:
devtools::install_github("https://github.com/jmeydam/countcheck.git",
build_vignettes = FALSE)
We simulate count data for 1000 observational units, assuming a certain known data-generating process.
The data-generating process is free of anomalies, and all counts exceeding their respective upper control limits (UCLs) are false positives. Other things being equal it is desirable to have as few false positives as possible.
Using a Bayesian hierarchical model with partial pooling, 18 new counts exceed their respective upper control limits, vs. 68 when using a no-pooling model. (4 counts exceed the UCLs based on the true value of the parameter theta, which is known in this case.)
> library(countcheck)
> d <- countcheck(random_seed = 200807)
> # Counts exceeding UCLs
> # *********************
> # ucl_true_theta:
> sum(d$y_new - d$ucl_true_theta > 0)
[1] 4
> # ucl_nopool:
> sum(d$y_new - d$ucl_nopool > 0)
[1] 68
> # ucl_complpool:
> sum(d$y_new - d$ucl_complpool > 0)
[1] 74
> # ucl_partpool:
> sum(d$y_new - d$ucl_partpool > 0)
[1] 18
Using the dataset provided in the package, the same result (here without the true_theta values) can be obtained with:
> e <- simdat
> d1 <- countcheck(unit = e$unit,
+ n = e$n,
+ y = e$y,
+ n_new = e$n_new,
+ y_new = e$y_new,
+ random_seed = 200807)
In a realistic scenario it is not possible to assess performance by comparison with “true” values. The true values of theta are generally not known, and the probability distributions assumed for the Bayesian hierarchical model (the no-pooling model) may in fact be inappropriate.
On the other hand, in a realistic scenario it is often possible to assess performance by investigating individual cases.
Select data from data frame d (example above) for the report:
> countcheck_df <- select_for_report(d)
We also need a data frame with unit master data. Here, we just generate some data:
> units_tmp <- sort(unique(countcheck_df$unit))
> unit_df <- data.frame(
+ unit = units_tmp,
+ unit_name = paste("Unit",
+ units_tmp),
+ unit_url = paste0("http://domain/units/",
+ units_tmp,
+ ".html"),
+ unit_group_name = paste("Group",
+ rep(1:5,
+ length.out = length(units_tmp)))
+ )
Generate report as R string:
> report <- html_report(
+ countcheck_list = list(
+ list(df = countcheck_df, caption = "KPI 1")
+ ),
+ unit_df = unit_df,
+ title = "Report",
+ table_width_px = 500,
+ column_headers = c(
+ group = "Group",
+ count = "Count",
+ ucl = "UCL",
+ unit = "Unit",
+ name = "Name"),
+ charset = "utf-8",
+ lang = "en",
+ home_url = "https://github.com/jmeydam/countcheck"
+ )
Save HTML report to disk:
> sink("report.html")
> cat(report)
> sink()


eda the EDA specialist
Competetion Project Page:
https://2018.hackerspace.govhack.org/projects/project_x_chatbot_223
Project Site:
https://priyaananthram.wixsite.com/edaandluis
Source Code:
https://github.com/ognpa/govhack2018


{% import "_includes/forms" as forms %}
Note: These settings are for your agency or software developer. Generally, as a user of the site, you will not need to edit this screen.
Paste the widget code from the Snappy widget screen.
{{ forms.textareaField({ id: 'sc_widget_code', name: 'sc_widget_code', value: settings.sc_widget_code, autofocus: true, rows: 10, errors: settings.getErrors('sc_widget_code') }) }}You can find all the details on configuring the widgets title, colors, and more here: https://help.besnappy.com/administrator-guide#widget-864


npm start
Start the application locallynpm run build
Build the application for Production (.env.production will be used)npm run build:dev
Build the application for Development (.env.development will be used)npm run build:stg
Build the application for Staging (.env.Staging will be used)npm run analyze-build
Analyze final build to check perfomance bottlenecks. Before run this command please make sure you build the package first.Note: bold text means it's being worked on and is coming soon


|
Table 1
|
Search keywords. |
|
Table 2
|
Criteria in classifying research themes (adopted from Smith ... |
|
Table 3
|
General characteristics of selected studies. |
|
Table 4
|
Methodological characteristics of selected studies. |
|
Table 5
|
Research themes of selected studies. |


Project Lead for the Post-Here App, and Team Lead for Data Science students at Lambda School
Machine Learning Engineer from Houston, TX. 8+ years of experience in digital marketing and the quest for relevancy is what drew me to this project.
Data Engineer Unit 3 (DS14)
Backend Developer Unit 4 (WEB29)
Front-End Software Engineer
Web React I Unit 2 (WEB31)
I'm the UI Developer in this project, I used to really love the idea of "coding" as a kid and eventually got into it growing up. Here I am now with a passion for WebDevelopment!


Traffic Ops - Migrating from 2.0 to 2.2¶
Per-DeliveryService Routing Names¶
Before this release, DNS Delivery Services were hardcoded to use the name “edge”, i.e. “edge.myds.mycdn.com”, and HTTP Delivery Services use the name “tr” (or previously “ccr”), i.e. “tr.myds.mycdn.com”. As of 2.2, Routing Names will default to “cdn” if left unspecified and can be set to any arbitrary non-dotted hostname.
Pre-2.2 the HTTP Routing Name is configurable via the http.routing.name option in in the Traffic Router http.properties config file. If your CDN uses that option to change the name from “tr” to something else, then you will need to perform the following steps for each CDN affected:
- In Traffic Ops, create the following profile parameter (double-check for typos, trailing spaces, etc):
- name: upgrade_http_routing_name
- config file: temp
- value: whatever value is used for the affected CDN’s http.routing.name
- Add this parameter to a single profile in the affected CDN
With those profile parameters in place Traffic Ops can be safely upgraded to 2.2. Before taking a post-upgrade snapshot, make sure to check your Delivery Service example URLs for unexpected Routing Name changes. Once Traffic Ops has been upgraded to 2.2 and a post-upgrade snapshot has been taken, your Traffic Routers can be upgraded to 2.2 (Traffic Routers must be upgraded after Traffic Ops so that they can work with custom per-DeliveryService Routing Names).
Apache Traffic Server 7.x (Cachekey Plugin)¶
In Traffic Ops 2.2 we have added support for Apache Traffic Server 7.x. With 7.x comes support for the new cachekey plugin which replaces the cacheurl plugin which is now deprecated. While not needed immediately it is recommended to start replacing cacheurl usages with cachekey as soon as possible because ATS 6.x already supports the new cachekey plugin.
It is also recommended to thoroughly vet your cachekey replacement by comparing with an existing key value. There are inconsistencies in the 6.x version of cachekey which have been fixed in 7.x (or require this patch(cachekeypatch) on 6.x to match 7.x). So to ensure you have a matching key value you should use the xdebug plugin before fully implementing your cachekey replacement.
First if you are currently using a regex for your delivery service you will have to remove that existing value. Then you will need to make a new DS profile and assign parameters in it to the cachekey.config file.
Some common parameters are
static-prefix - This is used for a simple domain replacement
separator - Used by cachekey and in general is always a single space
remove-path - Removes path information from the URL
remove-all-params - Removes parameters from the URL
capture-prefix-uri - This is usually used in combination with remove-path and remove-all-params.
Capture-prefix-uri will let you use your own full regex value for non simple cases
Examples of Cacheurl to Cachekey Replacements¶
Original regex value:
http://test.net/(.*) http://test-cdn.net/$1
Cachekey parameters:
| Parameter | File | Value |
|---|---|---|
| static-prefix | cachekey.config | http://test-cdn.net/ |
| separator | cachekey.config | (empty space) |
Original regex value:
http://([^?]+)(?:?|$) http://test-cdn.net/$1
Cachekey parameters:
| Parameter | File | Value |
|---|---|---|
| remove-path | cachekey.config | true |
| remove-all-params | cachekey.config | true |
| separator | cachekey.config | (empty space) |
| capture-prefix-uri | cachekey.config | /https?:\/\/([^?]*)/http:\/\/test-cdn.net\/$1/ |
Also note the s?
used here so that both http and https requests will end up with the same key value
Original regex value:
http://test.net/([^?]+)(?:\?|$) http://test-cdn.net/$1
Cachekey parameters:
| Parameter | File | Value |
|---|---|---|
| static-prefix | cachekey.config | http://test-cdn.net/ |
| separator | cachekey.config | (empty space) |
| remove-all-params | cachekey.config | true |
Further documentation on the cachekey plugin can be found at ApacheTrafficServerDocs
Apache Traffic Server 7.x (Logging)¶
Trafficserver v7 has changed the logging format. Previously this was an xml file and now it is a lua file. Traffic Control compensates for this
automatically depending upon the filename used for the logging parameters. Previously the file used was logs_xml.config
, for ATS 7 it is now
logging.config
. The same parameters will work this new file, LogFormat.Format
, LogFormat.Name
, LogObject.Format
etc.


--- layout: post title: Back to the future and blog update ---
I just finished backing up my old old blog from somewhere on the web I won’t mention, and will republish these posts, for historical reasons rather than for their quality, over the next few days. Also, expect a new look and feel for the html side of things (isn’t gray way too sad?).


Keren is studing now Web Development
I love to study new things, alredy studied:
Thanks for visiting. Get in cintact with Kerenkalifa via Twitter:"hashtagkerenkalifa


Table of Contents
Front Cover Front Matter Introduction Welcome to Season Four! What You’ll Need to Play How to Read This Book The RiM: S4E Team Character Creation D.A.S.H. Design Aspects Statistics Headway D.A.S.H. Example Playing an Episode Structure of Gameplay Making Checks Advantages & Drawbacks Acting in Harmony Damage, Recovery, & Sidelining Using & Restoring Valor Ending an Episode Character Advancement Learning Lessons Experience Points Purchasing Edges Edge List Library of Edges Magic & Spellcasting Magic Is as Magic Does Creating Spells Casting Spells The Canterlot Archives Running an Episode Being the Game Master Collaborative Storytelling Getting Things Started Checks & Difficulty Targets Damage & Sidelining Lessons & Experience Variant Rules Plot Points Equestria Girls Paragon Ponies Wide, Wide World Epic Experience Encyclopedia Equestria Premade Episodes The House of Enchanted Comics Ars Unicornia Mutants and Maresterminds Whinnystrad Miscellaneous Character Sheet A Note for Developers Updates & Resources Single Page Version (for print)Collaborative Storytelling
It’s important for the GM to keep in mind that S4E is not just a roleplaying game, but is also a vehicle for collaborative storytelling; and to understand what that means as it applies to the gameplay experience. When players start to pull a story away from its originally-intended progression with unique ideas, it’s a natural tendency of many new (and sometimes experienced) GMs to take a firm stance with their players of “that’s not how it works in my world.” While this usually comes from a noble intention of preserving the integrity of the story, it’s important to also remember that the players are crafting the narrative along with the GM; it is the very nature of characters in a story to alter the direction of that story to make it personal to themselves – and S4E is certainly focused on the personal journey of the characters.
By the same token, as any veteran GM can attest, it’s entirely possible for things to get chaotic and out of hand--and it’s part of the GM’s job to keep a rein on things and prevent that kind of discord by guiding some of the players’ actions without overtly controlling them (and consequently removing the point of having players at all). One of the best ways to do this is to use players’ (and characters’) emotional attachment to parts of the story in order to appeal to them and guide them toward (or away from) a particular course of action. For example, the advice of a trusted non-player character can often turn a group of players toward a particular path or train of thought; likewise, if doing something would risk the well-being of a beloved place or character, players will often avoid it as an option.
The GM’s role should ideally shift fluidly between giving the players direction and focus and then letting them take the spotlight and lead themselves once they’ve gotten a handle on where they’re going in the story. Take cues from your players as their characters’ dynamics emerge; for example, if one character seems to be naturally taking on a leadership role, shift the interactions of the story to help reinforce that leadership role. Similarly, if two characters seem to be locking horns over different ways they think situations should be handled, adjust the choices the group comes across during the Episode so that it plays on that dynamic.
Good players will create their own fun and make the story personal, and it’s an important part of the GM’s job to help create opportunities for them to do so. While you may have conceived of the original premise and plot of the Episode, you’re the only one who knows how it was originally intended to be played; letting your players take the spotlight can help to make for an even better and more memorable story in the long run – a fun, meaningful, and rewarding experience which your players will credit you for providing when they reflect on it later.
It’s an ideal, win-win scenario – and the greatest strength of truly collaborative storytelling.


{% extends 'todo/base.html' %} {% block title%} search {% endblock%} {% block dropdownview %} View Remaining View Completed {% endblock%} {% block content%}
{{todos|length}} task{{ todos|length|pluralize }} found
No search results found for your query, please try a different query.


Welcome to my web sandbox
Unordered list
Financial advice
Tax advice
Financial manager
Ordered list
Customer focus
Solve the customer issue
Excelence
Inside
Outside


| Total net profit | -65.41 | Gross profit | 26.33 | Gross loss | -91.74 |
| Profit factor | 0.29 | Expected payoff | -0.29 | ||
| Absolute drawdown | -65.6 | Maximal drawdown (%) | 66.07 (14057.45%) | ||
| Total trades | 228 | Profit trades (% of total) | 53 (23.25%) | Loss trades (% of total) | 175 (76.75%) |
| Long positions (won %) | 117 (29.06%) | Short positions (won %) | 111 (17.12%) | ||
| Largest | profit trade | 2.04 | loss trade | -1.78 | |
| Average | profit trade | 0.5 | loss trade | -0.52 | |
| Minimum | profit trade | 0.0 | loss trade | -0.01 | |
| Maximum | take profit in pips | 288.1 | stop loss in pips | -495.2 | |
| Average | take profit in pips | 45.4 | stop loss in pips | -43.6 | |
| Minimum | take profit in pips | -138.0 | stop loss in pips | -18.4 | |
| Maximum | Reward-Risk | 9.6 | Duration in minutes | 227 | |
| Average | Reward-Risk | 1.3 | Duration in minutes | 19.1 | |
| Minimum | Reward-Risk | 0.0 | Duration in minutes | 0 | |
| Maximum | consecutive wins (profit in money) | 3.0 (1.38) | consecutive losses (loss in money) | 24.0 (-9.73) | |
| Average | consecutive wins | 1.0 | consecutive losses | 4.0 |
| Total net profit | -31.29 | Gross profit | 18.36 | Gross loss | -49.65 |
| Profit factor | 0.37 | Expected payoff | -0.27 | ||
| Absolute drawdown | -31.48 | Maximal drawdown (%) | 31.95 (6797.87%) | ||
| Total trades | 117 | Profit trades (% of total) | 34 (29.06%) | Loss trades (% of total) | 83 (71.79%) |
| Largest | profit trade | 2.04 | loss trade | -0.98 | |
| Average | profit trade | 0.54 | loss trade | -0.6 | |
| Minimum | profit trade | 0.0 | loss trade | -0.01 | |
| Maximum | take profit in pips | 162.8 | stop loss in pips | -121.4 | |
| Average | take profit in pips | 41.0 | stop loss in pips | -49.6 | |
| Minimum | take profit in pips | -30.0 | stop loss in pips | -18.4 | |
| Maximum | Reward-Risk | 5.2 | Duration in minutes | 227.0 | |
| Average | Reward-Risk | 1.0 | Duration in minutes | 29.1 | |
| Minimum | Reward-Risk | 0.0 | Duration in minutes | 0.0 | |
| Maximum | consecutive wins (profit in money) | 2.0 (2.56) | consecutive losses (loss in money) | 11.0 (-4.83) | |
| Average | consecutive wins | 1.0 | consecutive losses | 3.0 |
| Total net profit | -34.12 | Gross profit | 7.97 | Gross loss | -42.09 |
| Profit factor | 0.19 | Expected payoff | -0.31 | ||
| Absolute drawdown | -35.11 | Maximal drawdown (%) | 35.35 (14729.17%) | ||
| Total trades | 111 | Profit trades (% of total) | 19 (17.12%) | Loss trades (% of total) | 92 (82.88%) |
| Largest | profit trade | 0.81 | loss trade | -1.78 | |
| Average | profit trade | 0.42 | loss trade | -0.46 | |
| Minimum | profit trade | 0.0 | loss trade | -0.02 | |
| Maximum | take profit in pips | 288.1 | stop loss in pips | -495.2 | |
| Average | take profit in pips | 49.9 | stop loss in pips | -37.4 | |
| Minimum | take profit in pips | -138.0 | stop loss in pips | -19.9 | |
| Maximum | Reward-Risk | 9.6 | Duration in minutes | 96.0 | |
| Average | Reward-Risk | 1.7 | Duration in minutes | 8.6 | |
| Minimum | Reward-Risk | Duration in minutes | 0.0 | ||
| Maximum | consecutive wins (profit in money) | 2.0 (1.14) | consecutive losses (loss in money) | 19.0 (-8.01) | |
| Average | consecutive wins | 1.0 | consecutive losses | 6.0 |


1. What function do you use to get user input?
2. How would you find 4 cubed?
3. if the variable age is an integer, how can you tell the user your age?


This module provides a web-based memory profiling interface. The Pympler web frontend exposes process information, tracker statistics, and garbage graphs. The web frontend uses Bottle, a lightweight Python web framework. Bottle is packaged with Pympler.
The web server can be invoked almost as easily as setting a breakpoint using pdb:
from pympler.web import start_profiler
start_profiler()
Calling start_profiler suspends the current thread and executes the Pympler web server, exposing profiling data and various facilities of the Pympler library via a graphic interface.
Note
This module requires Python 2.5 or newer.
Start the web server to show profiling data. The function suspends the Python application (the current thread) until the web server is stopped.
The only way to stop the server is to signal the running thread, e.g. press Ctrl+C in the console. If this isn’t feasible for your application use start_in_background instead.
During the execution of the web server, profiling data is (lazily) cached to improve performance.
The web server can display profiling data from previously taken snapshots when tracker or stats is specified. The former is useful for profiling a running application, the latter for off-line analysis. Requires existing snapshots taken with create_snapshot() or start_periodic_snapshots().
| Parameters: |
|
|---|
Start the web server in the background. A new thread is created which serves the profiling interface without suspending the current application.
For the documentation of the parameters see start_profiler.
Returns the created thread object.


Live function calls and their output.
The symbol functions are based symbol keys.
| Function Call | Output |
|---|---|
| ssw.random() | |
| ssw.key("") | |
| ssw.size("") | |
| ssw.structure("kind","") | |
| ssw.structure("category","") | |
| ssw.structure("group","") | |
| ssw.colorize("") | |
| ssw.view("") | |
| ssw.view("",true) | |
| ssw.svg("") | |
| ssw.canvas("") | |
| ssw.png("") | |
| ssw.code("") | |
| ssw.pua("") | |
| ssw.uni8("") | |
| ssw.is("") | |
| ssw.is("","writing") | |
| ssw.is("","hand") | |
| ssw.is("","movement") | |
| ssw.is("","dynamic") | |
| ssw.is("","head") | |
| ssw.is("","hcenter") | |
| ssw.is("","vcenter") | |
| ssw.is("","trunk") | |
| ssw.is("","limb") | |
| ssw.is("","location") | |
| ssw.is("","punctuation") |
The sign functions are based on Formal SignWriting strings.
| Function Call | Output |
|---|---|
| ssw.fsw("") | |
| ssw.styling("") | |
| ssw.fsw("",true) | |
| ssw.svg("") | |
| ssw.signList("") | |
| ssw.png("") | |
| ssw.filter("","hand") | |
| ssw.max("") | |
| ssw.norm("") | |
| ssw.bbox("") | |
| ssw.size("") | |
| ssw.svg("") | |
| ssw.canvas("") | |
| ssw.png("") | |
| ssw.code("") | |
| ssw.pua("") | |
| ssw.unicode("") | |
| ssw.convert("","A") | |
| ssw.convert("","a") | |
| ssw.convert("","S") | |
| ssw.convert("","SL") | |
| ssw.convert("","s") | |
| ssw.convert("","sL") |
The query functions are based on query language of Formal SignWriting.
| Function Call | Output |
|---|---|
| ssw.query("") | |
| ssw.regex("") | |
| ssw.results("","") | |
| ssw.signtext("","") |


Overview
- Project Background
- Technical Architecture
- Demo
- Challenges & Opportunities
- Questions
The Cadasta Foundation
- Cadasta is building technology that enable property rights to be documented and administered by the communities that own them, in conjunction with government land agencies
Why do land rights matter?
- "The right to property – land and resources –
is the foundation for economic security"
- Land rights are correlated with:
- Higher land productivity
- Improved resilience after natural disasters
Project Overview
Allow for the tracking of three primary entities
Technical Requirements
- Open Source
- Extensibility & Modernity
- Localization/Internationalization
Cadasta Providers
- Starting point for particular datasets
- 1. Harvest data
- 2. Transform into CJF
- Set of API Endpoints
- ONA, CSV, GeoJSON
- < insert your provider here />
- API routes & controllers executing scripts/db functions
- Ingest & interpret CJF
- Extract parcels, parties, & relationships
- Load into DB
- CRUD endpoints for business logic
- include data-transformer, all providers as node modules
- Cadasta Platform Business Logic
- parcel (geometries), parties, relationships & history
- survey questions & responses, organizations, projects, resources
- Platform Application
- Handles all user operations
- Angular wrapped inside CKAN
Challenges & Opportunities
Lessons Learned
- Thoroughly research open-source libraries
- Modularity
Common JSON Format:
Sample List of Cadasta Organizations
Sample Details for a Cadasta Org
Sample List of Project Resources


climate heat mortality period population model urban temperature daily mean future models time health impact Health Skopje temperatures deaths used European relationship Climate obtained data change {border-style projections px;} #ffffff;} Environ different results threshold variability average estimated expected increase number summer Public attributable year Republic UrbClim assessment baseline effect estimate exposure heat-related maximum total Yugoslav city effects predictions sample United adaptation current growth models, periods study variance waves Change Skopje, analysis cities heat–mortality maximal model, series Baccini However, Menne Population approach conditions day equal impacts median source warm CI: IPCC considering days exponential long-term px; using values years {font-family (.) Analitis Clim Effects Europe Michelozzi apparent available considered data, font-size global important model. public sampling size threshold, warming wave ./s--- AFs D’Ippoliti Heat Kim Research Skopje. Table Tong \times action air contribution curve described double; evidence heat–health including increased lag linear local logistic measured minimum models. national recent review scenario similar specific terms $$\end{document} (–) BMC Biggeri Bisanti CMIP Carlo Fig. GCMs Int Intergovernmental Katsouyanni Kingdom Macedonia Med Mediterranean Model Monte Paldy Panel Res Urban \begin{document}$$ \documentclass[pt]{minimal} \setlength{\oddsidemargin}{-pt} \usepackage{amsbsy} \usepackage{amsfonts} \usepackage{amsmath} \usepackage{amssymb} \usepackage{mathrsfs} \usepackage{upgreek} \usepackage{wasysym} absence account annual associated assumed assuming based border-color border-width calculated compared constant countries country’s coupled designed did distribution equations estimates evaluation far final historical indicate indicator inter-annual island measures meteorological minimal paper project projected range reported respectively. season set slightly solid; statistical study, trends uncertainty use {font-style {font-weight .). ./-X-- Additional Anderson Attributable Centre Concentration ERA-interim Environment Epidemiology Heal Impact Institute Kendrovski Kosatsky Lefebvre Logistic Macedonia. May– Median Meteorol Ministry Moreover, Pathway Perspect Representative Ridder Weather according ambient article assessment, association authorities bold context contributed coupling courier; em; excess file focused high hourly index indexes larger like likely lines literature main observed order output particularly period, plans provide pt;} reanalysis related research resolution result scenarios significant simple spatial stress strong strongly vulnerability weather


Our project is contingent on productivity. It is an all-in-one workplace where you can write, plan,
and get organized. This extension will make your work easier by accessing it on the same page. This
extension will allow you to clip all or parts of web pages. It is an application that provides
components such as notes, calendars, a Digital clock, background music, a to-do list, shortcut
icons, and reminders.Being able to do all these things using only one app is a dream come true. It
has an awesome feature where you can block other things that distract you during your productivity
period.
Notes for all


British Steel saved as it agrees £70million rescue deal with Chinese firm Jingye
The deal is expected to secure thousands of jobs. Staff at Scunthorpe steelworks had been told talks were progressing well and an announcement could be made this morning.
by Elaine McCahill, https://www.mirror.co.uk/authors/elaine-mccahill/British Steel is set to announce a rescue deal to the tune of £70million with a Chinese firm.
The deal with the Jingye Group is expected to save around 4,000 jobs in the UK.
Staff had been told in an email that talks with the industrial giant were progressing well and an update would be issued on Monday.
The Chinese firm have in principal agreed to absorb the company and staff into its huge existing steel and manufacturing division. British Steel employs around 3,000 in Scunthorpe and another 800 on Teesside.
British Steel also supports around 20,000 jobs in the supply chain.
It's believed the firm has promised an increase in production but also warned costs may need to be cut.
Jingye are a privately owned Chinese corporation founded and led by Li Ganpo a former senior Communist Party official who became a self-made industrial tycoon.
The group has interests in steel and manufacturing, chemicals, real estate, finance, trade, pharmaceutical, hotels and tourism.
It has more than 22,000 employees and assets valued at more than £3bn.
British Steel plunged into liquidation in May, triggering fears for major job losses.
The taxpayer is propping up the business at a cost reported to be £1m a day.
It's understood the government will help with loan guarantees.


To add server side oprations in data grid, set isServerOperations to "true" in grid defination
And also add method onLoadData(options:LoadOptions). This method will be invoked every time to fetch data.
{{htmlText}}
{{gridDataSourceText}}
LoadOptions has below properties:
{{ '{' }} column : string, sortDirection: string {{'}'}})
{{ '{' }} column : string, filterOperator: string, filterValue: string, dataType: string {{'}'}})
{{currentLoadOptions | json}}


Id: 146
Name: Glexo Slim Slom
Status: Alive
Species: Alien
Type:
Gender: Male
OriginName: unknown
OriginUrl:
LocationName: Nuptia 4
LocationUrl: https://rickandmortyapi.com/api/location/13
Image: https://rickandmortyapi.com/api/character/avatar/146.jpeg
Episode: ['https://rickandmortyapi.com/api/episode/18']
Url: https://rickandmortyapi.com/api/character/146
Created: 2017-12-29T11:28:29.380Z


Control Panel Searching Basics
Search Page Fields
Any time you access a search interface, you will find search input fields near the top of the page that will look
something like this:
These search fields will allow you to quickly locate the specific items you are looking for. The control panel search functions offer you a tremendous amount of power because you can search multiple fields at once to drill down and find exactly what you are looking for. You can also sort the results any way you like, and do nested sub-sorting to as deep a level as you like. The following sections will descibe each of the form fields in much more detail.
Text Search Fields
These search fields will allow you to quickly locate the specific items you are looking for. The control panel search functions offer you a tremendous amount of power because you can search multiple fields at once to drill down and find exactly what you are looking for. You can also sort the results any way you like, and do nested sub-sorting to as deep a level as you like. The following sections will descibe each of the form fields in much more detail.
Text search fields will only appear on a few of the search pages in the control panel interface. Using this search field you
can perform what is known as a "full text" search against the items in the database. TubeX uses MySQL's built-in fulltext
searching capabilities for these types of searches. While you can accomplish the same type of search using the standard search
fields, a text search will generally be much faster especially on large data sets. Text search fields will look like this:
Search Fields
-
Search Term - Enter the term (or terms) that you would like to search for in this field
Search Type - Text searches can be done using two different search algorithms:
Natural Language
This search type will take the search term you enter and try to find the most relevent matches. The
search results will be returned in order, from most relevent to least relevent. The Sort fields will
not have any affect when using this type of search.
This type of search does have a few limitations (set by MySQL):
- Any words that appear in more than 50% of the items in the database will not be found as matches
- Any words that are too short will be ignored (default is 4 characters)
- Any common words that match the built in stop-word list (the, some, this, that, etc) will be ignored
Boolean Mode
This search type will allow you to search for matches on any words of a phrase, all words of a phrase, an
exact phrase, and much more.
Some words are ignored in boolean mode searches:
- Any words that are too short will be ignored (default is 4 characters)
- Any common words that match the built in stop-word list (the, some, this, that, etc) will be ignored
The boolean full-text search capability supports the following operators:
+
A leading plus sign indicates that this word must be present in each row that is returned.
-
A leading minus sign indicates that this word must not be present in any of the rows that are returned.
Note: The - operator acts only to exclude rows that are otherwise matched by other search terms. Thus, a boolean-mode search that contains only terms preceded by - returns an empty result. It does not Match "all rows except those containing any of the excluded terms"
(no operator)
By default (when neither + nor - is specified) the word is optional, but the rows that contain it are
rated higher.
*
The asterisk serves as the truncation (or wildcard) operator. Unlike the other operators, it should be
appended to the word to be affected. Words match if they begin with the word preceding the * operator.
"
A phrase that is enclosed within double quote characters matches only rows that contain the phrase
literally, as it was typed.
The following examples demonstrate some search strings that use boolean full-text operators:
apple banana
Find rows that contain at least one of the two words.
+apple +juice
Find rows that contain both words.
+apple macintosh
Find rows that contain the word apple, but rank rows higher if they also contain macintosh
+apple -macintosh
Find rows that contain the word apple, but not macintosh
apple*
Find rows that contain words such as apple, apples, applesauce or applet
"some words"
Find rows that contain the exact phrase "some words" (for example, rows that contain "some words of
wisdom" but not "some noise words". Note that the " characters that enclose the phrase are operator
characters that delimit the phrase. They are not the quotes that enclose the search string itself.
The Search fields will appear on all search pages in the control panel, and are the heart of the search function. Using these
fields you can select the database fields to search, the type of matching to perform, and the search term you would like to use.
You can also connect searches together using AND or OR logic! The search fields will look something like this:
Sort Fields
-
Search Field - Select the database field in which you would like to perform the search. The database fields are
grouped by type (the bold italicized entries) which allow you to search a wide variety of database fields
related to the current item type you are searching
Search Type - TubeX supports a large number of search types which you can use to find exactly what you are looking for. Those search types are:
Contains
Match items that contain the entered search term
!Contains
Match items that do not contain the entered search term
=
Match items that exactly match the entered search term
!=
Match items that do not exactly match the entered search term
>
Match items that are greater than the entered search term
>=
Match items that are greater than or equal to the entered search term
<
Match items that are less than the entered search term
<=
Match items that are less than or equal to the entered search term
Starts With
Match items that start with the entered search term
!Starts With
Match items that do not start with the entered search term
Ends With
Match items that end with the entered search term
!Ends With
Match items that do not end with the entered search term
Between
Match items that are between the entered search termFor this search type, you must enter two values separated by a comma for the search term
!Between
Match items that are not between the entered search termFor this search type, you must enter two values separated by a comma for the search term
In
Match items that match exactly one of the items entered for the search termFor this search type, you must enter a comma separated list of values for the search term
!In
Match items that do not match exactly one of the items entered for the search termFor this search type, you must enter a comma separated list of values for the search term
Empty
Match items that are empty (empty string or NULL)Leave the search term empty for this type
!Empty
Match items that are not empty (empty string or NULL)Leave the search term empty for this type
Is Null
Match items that are the special SQL NULL valueLeave the search term empty for this type
!Null
Match items that are not the special SQL NULL valueLeave the search term empty for this type
Length =
Match items with a string length equal to the number entered as the search term
Length >
Match items with a string length greater than the number entered as the search term
Length <
Match items with a string length less than the number entered as the search term
Regex
Match items that match the
regular expression
entered as the search term
!Regex
Match items that do not match the
regular expression
entered as the search term
Search Term - Enter the term that you would like to search for in this field
Connector - The connector field allows you to search multiple database fields at once. You can select either AND or OR as the connector. When you select one of these options, you will see a new set of Search fields appear directly below. If you then change this option back to the empty value, the additional Search fields will be removed.
AND
Both (the one containing the AND, and the one directly after) of the searches must match in order for the
item to be returned as a result
OR
Either (the one containing the OR, and the one directly after) of the two sets of searches can match in
order for the item to be returned as a result
The sort fields allow you to control how the search results are sorted and how many are displayed on each page. They will look
something like this:
-
Sort Field - Select the database field by which you would like the search results sorted. The sort fields are
grouped by type (the bold italicized entries) which allow you to sort by a wide variety of database fields
related to the current item type you are searching
Sort Direction - Select the direction in which the search results should be sorted. Ascending will sort from smallest to largest, and Descending will sort from largest to smallest
Connector - The connector field allows you to do sub-sorting of the search results. If you select the "then" option, you will see a new set of sorting fields appear which you can use to control how items with the same value for the previous sorting item will be sorted. Selecting the empty value will cause the additional set of fields to be removed.
As an example, assume you wanted to sort the user accounts by their birthday first. It is possible that several user accounts will have the same birthday, so you can use a connector to sub-sort those accounts. You might decide to sub-sort them by their signup date so you can see which person with a particular birthday signed up first.
Per Page - Enter the number of search results to show on each page. This can be any numerical value greater than zero


A PersistentPanel should generally be placed within the highest-level scrolling element on the page; it will not work property when placed in a scrolling element nested within some outer scrolling element.
On mobile touch browsers, the panel may move out of view while the user is dragging the page; the panel will only snap back into view when the user lets go to complete the drag.
This control was discussed in a user interface blog post.


Fertility Advisor
menu
Home
Dashboard
Crop Encyclopedia
Share
Map
About
#TODO:Header
Home
Dashboard
Crop Encyclopedia
Share
Map
About
Exit
All your crops, organised.
My Crops
Try something new.
Crop Encyclopedia
Geographical analysis?
Open map
Want to meet The Developers?
Open About


Feb 2023 |
One paper is accepted to Annual Conference on Information Sciences and System (CISS) 2023, Congratulations to Yushan! |
Jan 2023 |
Two papers are accepted to ICLR 2023! Congratulations to Chang, Yang, and all collaborators! |
Dec 2022 |
Our tutorial proposal about “Continual Graph Learning” is accepted to WWW 2023! Congratulations to Xikun, Yushan, and Zijie! |
Dec 2022 |
I am invited to serve as an Associate Editor for Neurocomputing journal (IF=5.719)! |
Dec 2022 |
I will serve as a Senior PC for IJCAI 2023! |
Nov 2022 |
I am invited to give a talk about “Continual Graph Learning” at the CS department of University of Central Florida on November 17th, 2022! |
Nov 2022 |
Our tutorial proposal about “Continual Graph Learning” is accepted to SDM 2023! Congratulations to Xikun, Yushan, and Zijie! |
Nov 2022 |
One paper is accepted to Smart Health and another paper gets accepted to Computational and Structural Biotechnology Journal! Congratulations to all collaborators! |
Oct 2022 |
One paper is accepted to IEEE International Conference on Big Data! Congratulations to Wei and all co-authors! |
Oct 2022 |
I am invited to give a talk about “Harnessing Deep Neural Networks forMultivariate Time Series Analysis” at the CS department of University of Georgia on Oct 28th, 2022!
Link |
Oct 2022 |
I am honored to received another Gift Fund from NEC Labs America (NECLA) as Sole PI! Thanks for the support,
NECLA! |
Sep 2022 |
Two papers are accepted to NeurIPS 2022 (one to the main track and one to the dataset and benchmark track)! Congratulations to Yang, Xikun, and all collaborators! |
Sep 2022 |
One paper about Continual Graph Learning (CGL) is accepted to ICDM 2022! Congratulations to Xikun! |
Sep 2022 |
One paper is accepted to Artificial Intelligence for the Earth Systems Journal! Congratulations to all collaborators! |
Aug 2022 |
I am honored to receive a Gift Fund from Morgan Stanley as Sole PI! Thanks for the support,
Morgan Stanley! |
July 2022 |
I will server as Senior PC for AAAI 2023. |
June 2022 |
One paper is accepted to IEEE Transactions on Pattern Analysis and Machine Intelligence (T-PAMI)! Congratulations to Xikun! |
|
[1] Hierarchical Prototype Networks for Continual Graph Representation Learning
Link |
May 2022 |
Two of our papers have been selected as the most influential papers on
KDD and
IJCAI by paperdigest.org! |
|
[1]
Heterogeneous Graph Neural Network Ranked at 4th @ KDD 2019
Link |
|
[2]
A Dual-Stage Attention-Based Recurrent Neural Network for Time Series Prediction Ranked at 4th @ IJCAI 2017
Link |
May 2022 |
My SDP students won the second place in UCONN CSE’s 2022 Senior Design Project competition! Congratulations to all!
Link |
May 2022 |
Hangyue was admitted to the Ph.D. program in the CS department of Washington University in St. Louis and Jason was admitted to the CS undergraduate program at the University of Michigan - Ann Arbor! Congratulations! |
April 2022 |
I am honored to receive a Research Grant from NSF as Co-PI! Congrats to all collaborators and thanks for the support, NSF!
Link |
April 2022 |
I am honored to receive the Scholarship Facilitation Award at UConn! Thanks for the support, OVPR!
Link |
April 2022 |
Our workshop proposal 8th International Workshop on Mining and Learning from Time Series – Deep Forecasting: Models, Interpretability, and Applications is accepted to KDD 2022! Please consider contributing submissions to the workshop!
Link |
March 2022 |
I am honored to receive a Research Grant from USDA as Co-PI! Congrats to all collaborators and thanks for the support, USDA!
Link |
March 2022 |
I will give a talk at Morgan Stanley on March 17th! |
March 2022 |
Our workshop proposal AI4TS: AI for Time Series Analysis: Theory, Algorithms, and Applications is accepted to IJCAI 2022! Please consider contributing submissions to the workshop!
Link |
March 2022 |
I am honored to received a Gift Fund from NEC Labs America (NECLA) as Sole PI! Thanks for the support,
NECLA! |
February 2022 |
My student Yushan Jiang is awarded with General Electric (GE) Graduate Fellowship for Next Gen Scholar! Congrats to Yushan! |
February 2022 |
My student Qianying Ren is awarded with General Electric (GE) Graduate Fellowship for Inclusion and Equity! Congrats to Qianying! |
February 2022 |
My data mining course (CSE 5713) gets sponsored by Google Cloud Education Credits! Thanks for the support, Google! |
January 2022 |
One paper is accepted to IEEE Transactions on Network Science and Engineering (TNSE)! Congrats to Yang and all co-authors! |
|
[1] TimeAutoAD: Autonomous Anomaly Detection with Self-supervised Contrastive Loss for Multivariate Time Series
Link |
January 2022 |
Our survey paper is accepted to Sensors and Actuators Reports! Congrats to all co-authors! |
|
[1] Multimodal Sensing and Therapeutic Systems for Wound Healing and Management: A Review
Link |
January 2022 |
I am honored to receive a Research Grant from USDA-NIFA Agriculture and Food Research Initiative (Award No.: 2022-67023-36399) as Co-PI! Congrats to all collaborators and thanks for the support, USDA!
Link |
January 2022 |
Welcome Yushan to join our group! |
December 2021 |
I am honored to receive a Gift Fund from NEC Labs America (NECLA) as Sole PI! Thanks for the support,
NECLA! |
November 2021 |
Our workshop proposal Federated Learning for Private Web Search and Data Mining (FL4P) is accepted to WSDM 2022! Please consider contributing submissions to the workshop!
Link |
September 2021 |
I am honored to receive a Research Grant from Travelers as Co-PI! Thanks for the support,
Travelers! |
August 2021 |
Welcome Qianying and Binghao to join our group! |
August 2021 |
One paper is accepted to ACM CIKM 2021! Congrats to all co-authors! |
|
[1] Interpreting Convolutional Sequence Model by Learning Local Prototypes with Adaptation Regularization |
July 2021 |
I will server as Senior PC for AAAI 2022. |
July 2021 |
One paper is accepted to ACM Multimedia 2021! Congrats to Xinyang and all co-authors! |
|
[1] Convolutional Transformer based Dual Discriminator General Adversarial Networks for Video Anomaly Detection |
May 2021 |
I am honored to win the Research Excellent Program (REP) Award at UConn as PI! Thanks for the support, OVPR!
Link |
March 2021 |
One paper is accepted to CVPR 2021! Congrats to all co-authors! |
|
[1] FACESEC: A Fine-grained Robustness Evaluation Framework for Face Recognition Systems |
February 2021 |
One paper is accepted to ACM Transactions on Information Systems! Congrats to all co-authors! |
|
[1] Inductive Contextual Relation Learning for Personalization |
December 2020 |
One paper is accepted to SDM 2021! Congrats to all co-authors! |
|
[1] Deep Multi-Instance Contrastive Learning with Dual Attention for Anomaly Precursor Detection |
December 2020 |
Two papers are accepted to AAAI 2021! Congrats to all co-authors! |
|
[1] Deep Dynamic Gaussian Mixture Generative Model for Robust Forecasting on Sparse Multivariate Time Series |
|
[2] Multi-task Modular Recurrent Networks |
November 2020 |
I will serve as Senior PC for IJCAI 2021. |
October 2020 |
Multiple fully-funded Ph.D. positions are available for Fall 2021! |
August 2020 |
I will server as Senior PC for AAAI 2021. |
August 2020 |
I join UConn CSE as an Assistant Professor! |


Before Change
if pylint.skip:
return LintResults([], linter_name="Pylint")
plugin_target_addresses = await MultiGet(
Get(Address, AddressInput, plugin_addr) for plugin_addr in pylint.source_plugins
)
plugin_targets_request = Get(TransitiveTargets, Addresses(plugin_target_addresses))
linted_targets_request = Get(
After Change
if pylint.skip:
return LintResults([], linter_name="Pylint")
plugin_target_addresses = await Get(Addresses, UnparsedAddressInputs, pylint.source_plugins)
plugin_targets_request = Get(TransitiveTargets, Addresses(plugin_target_addresses))
linted_targets_request = Get(
Targets, Addresses(field_set.address for field_set in request.field_sets)


Postico is a database client. Postico can connect to a local PostgreSQL server running on your Mac, or to remote servers running on a different computer. If you want to install a local PostgreSQL server on your Mac, I recommend Postgres.app.
We designed Postico to be easy to use for newcomers and specialists alike. If you run into any problems at all, or have suggestions for improvements, please contact us via email<EMAIL_ADDRESS>There is also a public issue tracker on Github. You can use it for reporting bugs, for feature requests, or if you have any questions concerning Postico's usage.