Chapter 6: Strings
Chapter Objectives
This chapter discusses the nature, implementation, and behavior of character strings in the MATLAB language:
- The internal workings of character strings as vectors
- Operations on character strings
- Converting between numeric and character string representations
- Input and output functions
- The construction and uses for arrays of strings
To this point in the text, we have seen the use of character strings that we can store in variables and display in the Command window. In reality, we have already seen a significant amount of character manipulation that we have taken for granted. The m-files we use to store scripts and functions contain lines of legible characters separated by an invisible "new-line" character.
Introduction
This chapter presents the underlying concept of character storage and the tools MATLAB provides for operating on character strings. We need to distinguish two different relationships between characters and numbers:
- Individual characters have an internal numerical representation: the visible character shapes we see in windows are created as a collection of white and black dots by special software called a character generator. Character generators allow us to take the underlying concept of a character — say, "w" — and "draw" that character on screen or paper in accordance with the rules defined by the current font. A complete study of fonts is beyond the scope of this discussion, but we need to understand how computers in general and the MATLAB language in particular represent that "underlying concept" of a character. This is achieved by representing each individual character by its numerical equivalent. Not long ago, there were many different representations. Today, the dominant representation is the one defined by the American Standard Code for Information Interchange (ASCII). In this representation, the most common uppercase and lowercase characters, numbers, and many punctuation marks are represented by numbers between 0 and 127. A complete listing of the first 255 values is included in Appendix B.
- Strings of characters represent numerical values to the user: numerical values
are stored in a special, internal representation for efficient numerical
computation as described in Appendix C . However, whenever we need to see
the value of that number in the Command window, that internal
representation is automatically converted by MATLAB into a character string
representing its value in a form we can read. For example, if the variable a
contained the integer value 124, internally that number could be stored in a
single byte (8 bits) with a binary value of 011111100 — not a very meaningful
representation, but efficient internally for performing arithmetic and logical
operations. For the user to understand that value, internal MATLAB logic must
convert it to the three printable characters: '124'. Similarly, when we type in
the Command window or use the
input(...)
function, the set of characters that we enter is automatically translated from a character string into the internal number representation.
6.1 Character String Concepts: Mapping, Casting, Tokens, and Delimiting
Here we see the MATLAB language tools that deal with the first relationship between characters and numbers: the numerical representation of individual characters.
The basic idea of mapping is that it defines a relationship between two
entities. The most obvious example of mapping is the idea that the function
f(x) = 2 × x
defines the mapping between the value of x
and the value of f(x)
.
We will apply that concept to the process of translating a character (like
"A") from its graphical form to a numerical internal code. Character
mapping allows each individual graphic character to be uniquely
represented by a numerical value.
Casting is the process of changing the way a language views a piece of
data without actually changing the data value. Under normal circumstances,
a language like MATLAB automatically presents a set of data in the "right"
form. However, there are times when we wish to force the language to
treat a data item in a specific way. For example, if we create a variable containing a character string, MATLAB will consistently display it as a character string. However, we might want to view the underlying
numerical representation as a number, in which case we have to cast the
variable containing the characters to a numerical data type. MATLAB
implements casting as a function with the name of the data type expected.
In essence, these functions implement the mapping from one character
representation to another. For example:
>> str = 'ABCD'
In your workspace window,
str =
ABCD
>> double(str)
ans =
65 66 67 68
ans
will be of type double
.
A token is a collection of characters to which we may wish to attach meaning. Obvious examples of tokens are the name of a MATLAB variable or the characters representing the values of a number to be used in an expression.
A delimiter is a character used to separate tokens. The space character, for example, can delimit words in a sentence; punctuation marks provide additional delimiters with specific meanings.
6.2 MATLAB Implementation
When you enter a string in the Command window or the editor, MATLAB
requires that you delimit the characters of a string with a single quote mark
( ' ). Note that you can include a single quote mark within the string by
doubling the character. For example, if you entered the following in the
Command window:
>> refusal = 'I can''t do that!'
The result displayed would be
refusal =
I can't do that
Exercise 6.1 illustrates the concept of casting between data types char
and
double
.
In Exercise 6.1:
- the casting function
uint8(...)
takes a character or character string and changes its representation to a vector of the same length as the original string. - Then the casting function
char(...)
takes a number or vector and causes it to be presented as a string. - The casting function
double(...)
appears to act in the same way asuint8(...)
, but it actually uses 64 bits to store the values. - Single quotes delimit a string to be
assigned to the variable
fred
. Notice that when a string is presented as a result, the delimiters are omitted. - When you apply arithmetic operations to a string, the operation is illegal on characters; therefore, an implicit casting to the numerical equivalent occurs.
- You can perform any mathematical operation on the vector and use the
cast,
char(...)
, to cast it back to a string.
6.2.1 Slicing and Concatenating Strings
Strings are internally represented as vectors; therefore, we can perform all the usual vector operations on strings. Try it in Exercise 6.2.
- First, we set the variable
first
. - Then, the variable
last
. - Then we concatenate the strings with a space separating them.
- Then we display every other character in the name.
- Then we display the letters of name in reverse order.
6.2.2 Arithmetic and Logical Operations
Exactly as operating on vectors, string operations may be either mathematical or logical operations.
Mathematical operations can be performed on the numerical mapping of a
character string. If you do not explicitly perform that casting first, MATLAB
will do the cast for you and create a result of type double (not usually
suitable for character values). Note that char('a' + 1 )
returning 'b'
is an
accident of the character type mapping.
Logical operations on character strings are also exactly equivalent to logical operations on vectors, with the same automatic casting. Exercise 6.3 gives you an opportunity to try it yourself.
6.2.3 Useful Functions
The following functions are useful in analyzing character strings:
ischar(a)
returns true ifa
is a character stringisspace(ch)
returns true if the characterch
is the space character
6.3 Format Conversion Functions
Now we turn to the second relationship between characters and numbers: using character strings to represent individual number values. To move seamlessly between their internal representation and the visual, external representation, we need string conversion. We actually need two separate capabilities: converting numbers from the efficient, internal form to legible strings and converting strings provided by users of MATLAB into the internal number representation. MATLAB provides a number of functions that transform data between string format and numerical format.
6.3.1 Conversion from Numbers to Strings
Use the following built-in MATLAB functions for a simple conversion of a
single number, x
, to its string representation:
int2str(x)
if you want it displayed as an integer valuenum2str(x, n)
to see the decimal parts; the parametern
represents the number of decimal places required—if not specified, its default value is3
.
Frequently, however, you need better control over the data conversion, and the
function sprintf(...)
provides fine-grained control. The MATLAB version
of sprintf(...)
is very similar to the C/C++ implementation of this
capability. The first parameter to sprintf
is a format control string that
defines exactly how the resulting string should be formatted. A variable
number of value parameters follow the format string, providing data items
as necessary to satisfy the formatting.
Basically, the format string contains characters to be copied to the
string returned from sprintf(...)
; however, it also contains two types of functionality introduced by
the following two special characters:
- The
'%'
character introduces a conversion specification, indicating how one of the value parameters should be represented. The most common conversions are%d
(integer),%f
(real),%g
(general),%c
(character), and%s
(string). A number may be placed immediately after the%
character to specify the minimum number of characters in the conversion. If more characters than the specified minimum are required to represent the data, they will be added. In addition, the%f
and%g
conversions can include'.n'
to indicate the number of decimal places required. If you actually want a'%'
character, it must be doubled, for example,'%%'
. MATLAB processes each of the value parameters in turn, inserting them in the result string according to the corresponding conversion specification. If there are more parameters than conversion specifications in the format control string, the format control string is repeated. - The '\' character introduces format control information, the most common of which are \n (new line) and \t (tab). If the '\' character is actually wanted in the result string, it should be doubled, for example, '\\'.
For example, consider the following statements:
A = [4.7 1321454.47 4.8];
index = 1;
v = 'values';
str = sprintf('%8s of A(%d) are \t%8.3f\t%12.4g\t%f\n'...
v, index, A(index,1), A(index,2), A(index,3))
str =
values of A(1) are 4.700 1.321e+006 4.800000
- We first prepared the variables
A
,index
andv
, and then called forsprintf(...)
to present their values. - The first conversion,
%8s
, takes the value of the first parameter,v
, allows eight spaces for its conversion, and copied its contents to the resulting string. Since this was a string conversion, the characters are merely copied. - The characters
' of A('
are then appended to the output string. - The second conversion,
%d
, takes the value of the second parameter, index, and converts it as an integer with the minimum space allocated. - The characters
') are'
are then appended to the output string, followed by a tab character that inserts enough spaces to bring the next characters to a column that is an even multiple of eight. - The following three conversions appended the next three value parameters with three decimal places, a general conversion with at least 12 spaces and 4 decimal places, and the default numerical conversion.
- Finally, a new line character was inserted into the string.
We will formalize here the function
fprintf(<control string>, <parameters>)
where the <control string>
is the format control string discussed above, and
<parameters>
is a collection of 0 or more parameters whose values will be presented in each '%'
entry in the control string.
The function fprintf(...)
works exactly as sprintf(...)
except that instead of returning the resulting string, it writes that string directly to the command window. Notice its use at the bottom of Listing 6.1 below.
6.3.2 Conversion from Strings to Numbers and Other Stuff
Conversion from strings to numbers is much messier. In order to understand the situation, let us emulate some of the Matlab behavior that you have already used, but probably not realized all the underlying complexity.
First Try: Suppose, for example, you have the string: 'area = 3.14159265 .* radius .^ 2'
. In paragraph 6.1, we mentioned the idea of a token as a string whose meaning is important and the delimiters that separate tokens. Our first guess might be to assume that 'area'
, '='
, '3.14159265'
, '.*',
'radius'
, '.^'
and '2'
were the tokens because they carry the meaning of the equation, and the space character is the delimiter.
In order to separate this out into its individual tokens, we will repeatedly employ the function strtok(...)
. This function consumes two inputs and produces two outputs:
[token, rest] = strtok(str, delims)
where str
is the string to process,
delims
is a string of delimiting characters,
token
is the first token returned, and
rest
is what remains of the string when that token is removed.
Look carefully through Listing 6.1 to see how we extract the meaning from the line of code.
When you run this code, you see this in the Command Window:
calculate area by doing .^ with radius and 2, then doing .* with the result and 3.1416
Notice that I deliberately changed the numerical resolution of pi
to only 4 decimal places to assert that we really did convert the string num_1
to the double
value n_1
.
Second Thought: now, what could possibly go wrong ... oh, wait a sec
- although we have been inserting spaces in the code for clarity, this line is quite legal:
'area=3.14159265.*radius.^2'
. So we have to treat the '=
' and even worse, the '.*
' and '.^
' as delimiters. - Messier still, the simple parsing in Listing 6.1 had to assume that the first token was a variable name, the second was the '=' to make an assignment etc. We are certainly not intending to delve into the correct way to process this simple line of code.
I did warn you at the top of this paragraph about messes to come ...
Preferred Approach: When possible, allow MATLAB's built-in functions
str2num
, str2double
or input(...)
to do the work of conversion for you:
- The function
str2num(str)
consumes a string representing either a single numerical value or an arbitrarily complex array of numbers and returns the numerical equivalent. - The function
str2double(str)
consumes a string representing only a single numerical value and returns the numerical equivalent withdouble
precision. - The function
input(prompt)
presents the prompt string to the user in the Command window and waits for the user to type some characters and the [Enter] key, all of which are echoed in the Command window. Then it parses the input string in exactly the same manner as if you had typed that string to the command window, according to the following rules:
- If the string begins with a numerical character, MATLAB converts the string to a number
- If it begins with a non-numeric character, MATLAB constructs a variable name and looks for its current value
- If you actually want a string literal entered, it must be enclosed in the string delimiters.
- If it begins with an open bracket,
'['
, a vector is constructed - If it begins with the single quote character, MATLAB creates a string
- If a format error occurs, MATLAB repeats the prompt and waits for another input
's'
is provided as the second parameter,input(prompt, 's')
, in which case the complete input character sequence is returned to the user as a string with no attempt to perform the above conversions. Exercise 6.4 demonstrates a number of capabilities of theinput(...)
function.
Severe Warning: Be careful to separate in your mind the use of the input(...)
function and the process of passing parameters into a function. When values are passed to a function, we refer to this as the function consuming the incoming parameter(s), and this process happens automatically as part of the function call processing. The input(...)
function is a manual process whereby the user has to type data to be processed. The input(...)
function should only be used in scripts that test functions and never in the body of a function.
Hopeful footnote: If you have to do some complex conversions
yourself, the function sscanf(...)
was designed to extract the values of variables
from a string, but is really difficult to use. Instead,
you can either split a string into tokens as we did above, and then convert each
token with the str2num(str) function or, you might be better off putting that string into a text file and using the techniques in Chapter 8 to extract the meaning you need.
6.4 Character String Operations
As with the string-to-number conversions, input and output in the Command window can be accomplished with simple functions that have little flexibility or with complex functions that have better control.
6.4.1 Simple Data Output: The disp(. . .)
Function
We have already seen the use of the disp(...)
function to present data in
readable form in the Command window. It can
present the values of any variable, regardless of type, or of strings
constructed by concatenation. Note, however, that an explicit number
conversion is required to concatenate variables with strings. Note also that conversion
from the ASCII code is not automatic; you need the char(...)
cast function.
6.4.2 Complex Output
We discussed the functions fprintf(...) and sprintf(...) in Paragraph 6.3.1. While slightly messy to use, their flexibility makes them the functions of choice for displaying nicely formatted results. Appendix A includes a complete discussion of the behavior of elements in the control strings of these functions.
6.4.3 Comparing Strings
Since strings are readily translated into vectors of numbers, they may be
compared in the obvious way with the logical operators we used on
numbers. However, there is the restriction that either the strings must be of the same length or one of them must be of length 1 before it is legal to
compare them with these operators. To avoid this restriction, MATLAB
provides the function strcmp(<s1>, <s2>)
that returns true
if the
strings are identical and false
if they are not.
Unfortunately for C programmers, this is not quite the same behavior as the C version, which
does a more rigorous comparison returning −1
, 0
, or 1
. You can study character string comparison in Exercise 6.5.
6.5 Arrays of Strings
Since a single character string is stored as a vector, it seems natural to consider storing a collection of strings as an array. The most obvious way to do this, as shown in previous examples, has some limitations, for which there are nice, tidy cures built into the MATLAB language. Consider the example shown in Exercise 6.6. Character arrays can be constructed by either of the following:
- As a vertical vector of strings, all of which must be the same length
- By using a special version of the char() cast function that accepts a variable number of strings with different lengths, pads them with blanks to make all rows the same length, and stores them in an array of characters
6.6 Engineering Example - Encryption
The Problem As public access to information becomes more pervasive, there is increasing interest in the use of encryption to protect intellectual property and private communications from unauthorized access. The following discussion is based on no direct knowledge of the latest encryption technology. However, it illustrates a very simple approach to developing an algorithm that is immune to all but the most obvious, brute-force code-breaking techniques.
Figure 6.1: An Enigma Machine
Background Historically, a simple encryption was accomplished using a Caesar cypher that used a single offset value, say N, to replace all characters with the character N spaces farther down the alphabet. If the entered value was 'A' and N was 4, the encrypted text would have 'E'. With strictly manual analysis, without knowing N, it was deemed impossible to decipher messages. In World War II, the German armed forces used a slight modification to this algorithm whereby each key in the alphabet had a different offset value. Figure 6.1 shows an actual Enigma machine that automatically applied the key offset values to messages typed on its keyboard. However, it was vulnerable for two reasons:
- there was still a constant mapping between plain text and encrypted charaacters leaving it open to "simple" letter frequency analysis, and
- since it was difficult to distribute fresh key maps, the maps were only changed once a day.
A massive effort in England led by Alan Turing produced "Colossus" discussed in Paragraph 1.2.2 that was generally recognized as one of the first "general-purpose" computers. It was able to decode a large majority of the intercepted German message traffic, and was credited with contributing to the end of that terrible war.
The Solution We propose a simple algorithm whereby the key replacement map can be changed rapidly so that
the same letter in the original message is only replaced by the same substitute for a short period of time. Hnce, no simple language analysis will crack the code. The rand(...)
function is an excellent source for an appropriate random sequence. If the encryption and decryption processes use the same value to seed the same random generator, the same sequence of apparently random (pseudo-random) values will be generated. Since the seed can take on 231 – 2
values, it is virtually impossible to determine the decryption without knowing the seed value. The seed (i.e., the decryption key) can be transmitted to anyone authorized to decrypt the message by any number of ways. Furthermore, since there are abundant different techniques for generating pseudo-random sequences, the specific generation technique must be known in addition to the seed value for successful decryption.
Awkward Dilemma: Unfortunately, earlier versions of Matlab had strange implementations of the ability to change the seed and generators of the rand(...) and randn(...) functions. Rather than struggle with this deprecated implementation, we will take a short tour of the modern implementation for setting up rand(...).
There are currently three number generators that consume the current state and generate the next state: 'twister', the default generator, and 'v4' and 'v5uniform' and 'v5normal' the legacy generators. Each generator can be seeded with an integer value. So we have these implementations:
- to generate the next random state,
val = rand()
- to set the seed value sd with the default generator:
rnd(sd)
- to select another generator and seed it:
rnd(sd, <gen>)
where<gen>
is one of the generators above.
Listing 6.2 shows the code for encrypting, the corresponding decryption by this technique and two attempts at decryption decrypt - one with the wrong key and one with the wrong generator.
This is the result when the code is run:
original text: The quality of mercy is not strain'd
encrypted text: Xf% FmHH31$ {\ ove10 }M %~4 ]gB-~,yM
decrypted text with right values: The quality of mercy is not strain'd (matched)
decrypted text with bad seed: 2>W 7Cr]lgq %@ ,N(nV ep [/x h4ac1n+a (not matched)
decrypted text with bad generator: 8v> (zx^G'+ /N |Xb!U KC PcN b6I.6$Q~ (not matched)
Chapter Summary
This chapter discussed the nature, implementation, and behavior of character strings. We learned the following:
- Character strings are merely vectors of numbers that are presented to the user as single characters
- We can perform on strings the same operations that can be performed on vectors; if mathematical operations are performed, MATLAB first converts the characters to double values
- We can convert between string representations of numbers and the numbers themselves using built-in functions
- MATLAB provides functions that convert numbers to text strings for presentation in the Command window
- Arrays of strings can be assembled using the char(...) function
Self Test
True or False
- Casting changes the value of a piece of data.
- The ASCII code maps individual characters to their internal numerical representation.
- Because the single quote mark ( ' ) delimits strings, you cannot use it within a string.
- If you attempt mathematical operations on a character string, MATLAB will throw an error.
- The function disp(...) can display multiple values to the Command window.
- The function strcmp(...) throws an error if the two strings are of unequal length, unless one of them is a single character.
- The switch statement will correctly compare strings of unequal length in the case tests.
Fill in the Blanks
- Numerical values are stored in MATLAB in _______________ for efficient numerical computation.
- Most common __________________, _______________, and many _________________are represented in ASCII by the numbers ________________.
- The function ____________ casts a string to a vector of the same length as the string containing the numerical mapping of _______________________.
- The function fprintf(...) requires a(n) _____________ that defines exactly how the resulting string should be formatted and a variable number of ________________.
- Since the _____________ statement tests a logical expression, it _____________ test strings of unequal length.
- A special version of the cast function accepts __________________ strings with different lengths, _____________, and stores them in an array of characters.
Programming Projects
- Solve the following introductory problems on strings.
- Write a function dayName that consumes a parameter, day , containing the numerical value of a day in the month of September 2008. Your function should return the name of that day as a string. For example: dayName( 8 ) should return 'Monday'
- You are now given a variable named days, a vector that contains the numeric values of days in the month of September 2008. Write a script that will convert each numeric value in the vector days into a string named daysOfWeek with the day names separated by a comma and a space. For example, if days = [8, 9, 10], daysOfWeek should be 'Monday, Tuesday, Wednesday' Notice that there is no separator before the first day name or after the last one.'
- Consider the problem the MATLAB system has in parsing the string:
'V=[1 2 3 4; 5,6, 7;8; 9 10]'
Your task is to use strtok to parse this line and construct the array it represents. You will write a function arrayParse that consumes a string and returns two variables: a string that is the variable name and an array.- Tokenize the string first using ' = ' as the delimiter to isolate the variable name and the expression to be evaluated. Return the variable name to the user and save the rest of the line as the variable str1 for further processing. You may assume that there are no spaces outside the characters ' [. . .].
- Tokenize str1 with ' [ ' and ' ] ' to remove the concatenation operators and save the first token as str2.
- Tokenize str2 using ' ; ' as the delimiter. This will produce 0 or more strings that represent the rows of the array. Save each in the variable rowString . You may assume for now that the first row is the longest one.
- Using nested while loops, tokenize each rowString with ' , ' and ' ' as delimiters and use str2num (. . .) to extract the numerical value of each array entry. Save it as rowEntry .
- Concatenate the rowEntry elements horizontally to produce each row of the array. If the row is too short, pad it with zeros.
- Concatenate each row vertically to produce the resulting array and return that array to the caller.
- Test the function with cases like:
empty=[]
row=[1 2 3 4]
diag=[0 0 0 1; 0 0 1; 0 1; 1]
- Write a function called DNAcomplement that consumes a set of letters
as a character array that forms a DNA sequence such as 'gattaca' . The
function will produce the complement of the sequence so that a's
become t's , g's become c's , and vice versa. The string 'gattaca'
would therefore become 'ctaatgt' . You may assume that all the
letters in the sequence will be lowercase and that they will all be
either a, t, g, or c .
Note: You may be tempted to use iteration for this problem, but you don't need it. - The function rot(s, n) is a simple Caesar cipher encryption
algorithm that replaces each English letter in places forward or
backward along the alphabet in the strings. For example, the result
of rot('Baz!',3) is 'Edc!' . An encrypted string can be deciphered
by simply performing the inverse rotation on it, that is,
rot('Edc!',3), which rotates each English letter in the strings three
places to the left. Numbers, symbols, and non-letters are not
transformed. Implement the following function:
function rotatedText=rot(text,n)
To assist you as you solve this problem, you could write several functions as local functions in the rot.m file:
isUppercaseLetter(letter), getUppercaseLetter(n), getLowercaseLetter(n) , and getPosition(letter) .
You may also wish to use the built-in functions isletter (. . .), find (. . .), and mod (. . .). - You have a big problem. In one of your CS courses, your professor
decides that the only way you will pass the class is if you write a
function to get him out of a mess. All the grades in his class have
been accidentally stored into one long string of characters
containing only the letters A, B, C, D, F, and Y.
- Your job is to write a function called CrazyGrade that will take in
the string and flip the grades according to the following
specifications:
A becomes F
B becomes D
C remains unchanged
D becomes B
F becomes A
Y becomes W
Your function should take in a string and return an inverted string. You may assume that the string will only consist of valid letter grades. For example,
CrazyGrade('BADDAD') should return 'DFBBFB'
CrazyGrade('BAYBAY') should return 'DFWDFW' - To make matters worse, he wants you to organize this modified grade set. Write a function called GradeDist to bunch together all the similar grades (put all the A's next to each other, B's next to each other, etc.) Then, calculate and return the professor's grade distribution. Your function should take in a string and return a string with all similar grades grouped together, along with an array containing percentage values from A's all the way to F's. For example, if there are 15% A's, 16% B's, 33% C's, 16% D's, 16% F's, and 4% W's, GradeDist should return [15 16 33 16 16 4].
- Your job is to write a function called CrazyGrade that will take in
the string and flip the grades according to the following
specifications:


{% extends 'home/base.html' %} {% block content %}
Python, an object-oriented programming language is known for its versatility and availability. If you're looking to pick up a programming language quickly for prototyping and full scale development python is the way to go. Backed by a large community, python should be in every developer's toolbox.


The callback queue is one of MathJax’s main tools for synchronizing its actions, both internally, and with external programs, like javascript code that you may write as part of dynamic web pages. Because many actions in MathJax (like loading files) operate asynchronously, MathJax needs a way to coordinate those actions so that they occur in the right order. The MathJax.Callback.Queue object provides that mechanism.
A callback queue is a list of commands that will be performed one at a time, in order. If the return value of one of the commands is a Callback object, processing is suspended until that callback is called, and then processing of the commands is resumed. In this way, if a command starts an asynchronous operation like loading a file, it can return the callback for that file-load operation and the queue will wait until the file has loaded before continuing. Thus a queue can be used to guarantee that commands don’t get performed until other ones are known to be finished, even if those commands usually operate asynchronously.
A queue is created via the MathJax.Callback.Queue() command, which returns a MathJax.Callback.Queue object. The queue itself consists of a series of commands given as callback specifications (see Using Callbacks for details on callbacks), which allow you to provide functions (together with their arguments) to be executed. You can provide the collection of callback specifications when the queue is created by passing them as arguments to MathJax.Callback.Queue(), or you can create an empty queue to which commands are added later. Once a MathJax.Callback.Queue object is created, you can push additional callbacks on the end of the queue; if the queue is empty, the command will be performed immediately, while if the queue is waiting for another command to complete, the new command will be queued for later processing.
For example,
function f(x) {alert(x)}
var queue = MathJax.Callback.Queue([f, 15], [f, 10], [f, 5]);
queue.Push([f, 0]);
would create a queue containing three commands, each calling the function f with a different input, that are performed in order. A fourth command is then added to the queue, to be performed after the other three. In this case, the result will be four alerts, the first with the number 15, the second with 10, the third with 5 and the fourth with 0. Of course f is not a function that operates asynchronously, so it would have been easier to just call f four times directly. The power of the queue comes from calling commands that could operate asynchronously. For example:
function f(x) {alert(x)}
MathJax.Callback.Queue(
[f, 1],
["Require", MathJax.Ajax, "[MathJax]/extensions/AMSmath.js"],
[f, 2]
);
Here, the command MathJax.Ajax.Require("[MathJax]/extensions/AMSmath.js") is queued between two calls to f. The first call to f(1) will be made immediately, then the MathJax.Ajax.Require() statement will be performed. Since the Require method loads a file, it operates asynchronously, and its return value is a MathJax.Callback object that will be called when the file is loaded. The call to f(2) will not be made until that callback is performed, effectively synchronizing the second call to f with the completion of the file loading. This is equivalent to
f(1);
MathJax.Ajax.Require("[MathJax]/extensions/AMSmath.js", [f, 2]);
since the Require() command allows you to specify a (single) callback to be performed on the completion of the file load. Note, however, that the queue could be used to synchronize several file loads along with multiple function calls, so is more flexible.
For example,
MathJax.Callback.Queue(
["Require", MathJax.Ajax, "[MathJax]/extensions/AMSmath.js"],
[f, 1],
["Require", MathJax.Ajax, "[MathJax]/config/local/AMSmathAdditions.js"],
[f, 2]
);
would load the AMSmath extension, then call f(1) then load the local AMSmath modifications, and then call f(2), with each action waiting for the previous one to complete before being performed itself.
If one of the callback specifications is an actual callback object itself, then the queue will wait for that action to be performed before proceeding. For example,
MathJax.Callback.Queue(
[f, 1],
MathJax.Ajax.Require("[MathJax]/extensions/AMSmath.js"),
[f, 2],
);
starts the loading of the AMSmath extension before the queue is created, and then creates the queue containing the call to f, the callback for the file load, and the second call to f. The queue performs f(1), waits for the file load callback to be called, and then calls f(2). The difference between this and the second example above is that, in this example the file load is started before the queue is even created, so the file is potentially loaded and executed before the call to f(1), while in the example above, the file load is guaranteed not to begin until after f(1) is executed.
As a further example, consider
MathJax.Callback.Queue(
MathJax.Ajax.Require("[MathJax]/extensions/AMSmath.js"),
[f, 1],
MathJax.Ajax.Require("[MathJax]/config/local/AMSmathAdditions.js"),
[f, 2]
);
in comparison to the example above that uses ["Require", MathJax.Ajax, "[MathJax]/extensions/AMSmath.js"] and ["Require", MathJax.Ajax, "[MathJax]/config/local/AMSmathAdditions.js"] instead. In that example, AMSmath.js is loaded, then f(1) is called, then the local additions are loaded, then f(2) is called.
Here, however, both file loads are started before the queue is created, and are operating in parallel (rather than sequentially as in the earlier example). It is possible for the loading of the local additions to complete before the AMSmath extension is loaded in this case, which was guaranteed not to happen in the other example. Note, however, that f(1) is guaranteed not to be performed until after the AMSmath extensions load, and f(2) will not occur until after both files are loaded.
In this way, it is possible to start asynchronous loading of several files simultaneously, and wait until all of them are loaded (in whatever order) to perform some command. For instance,
MathJax.Callback.Queue(
MathJax.Ajax.Require("file1.js"),
MathJax.Ajax.Require("file2.js"),
MathJax.Ajax.Require("file3.js"),
MathJax.Ajax.Require("file4.js"),
[f, "all done"]
);
starts four files loading all at once, and waits for all four to complete before calling f("all done"). The order in which they complete is immaterial, and they all are being requested simultaneously.
MathJax uses a queue stored as MathJax.Hub.queue to regulate its own actions so that they operate in the right order even when some of them include asynchronous operations. You can take advantage of that queue when you make calls to MathJax methods that need to be synchronized with the other actions taken by MathJax. It may not always be apparent, however, which methods fall into that category.
The main source of asynchronous actions in MathJax is the loading of external files, so any action that may cause a file to be loaded may act asynchronously. Many important actions do so, including some that you might not expect; e.g., typesetting mathematics can cause files to be loaded. This is because some TeX commands, for example, are rare enough that they are not included in the core TeX input processor, but instead are defined in extensions that are loaded automatically when needed. The typesetting of an expression containing one of these TeX commands can cause the typesetting process to be suspended while the file is loaded, and then restarted when the extension has become available.
As a result, any call to MathJax.Hub.Typeset() (or MathJax.Hub.Process(), or MathJax.Hub.Update(), etc.) could return long before the mathematics is actually typeset, and the rest of your code may run before the mathematics is available. If you have code that relies on the mathematics being visible on screen, you will need to break that out into a separate operation that is synchronized with the typesetting via the MathJax queue.
Furthermore, your own typesetting calls may need to wait for file loading to occur that is already underway, so even if you don’t need to access the mathematics after it is typeset, you may still need to queue the typeset command in order to make sure it is properly synchronized with previous typeset calls. For instance, if an earlier call started loading an extension and you start another typeset call before that extension is fully loaded, MathJax’s internal state may be in flux, and it may not be prepared to handle another typeset operation yet. This is even more important if you are using other libraries that may call MathJax, in which case your code may not be aware of the state that MathJax is in.
For these reasons, it is always best to perform typesetting operations through the MathJax queue, and the same goes for any other action that could cause files to load. A good rule of thumb is that, if a MathJax function includes a callback argument, that function may operate asynchronously; you should use the MathJax queue to perform it and any actions that rely on its results.
To place an action in the MathJax queue, use the MathJax.Hub.Queue() command. For example
MathJax.Hub.Queue(["Typeset",MathJax.Hub,"MathDiv"]);
would queue the command MathJax.Hub.Typeset("MathDiv"), causing the contents of the DOM element with id equal to MathDiv to be typeset.
One of the uses of the MathJax queue is to allow you to synchronize an action with the startup process for MathJax. If you want to have a function performed after MathJax has become completely set up (and performed its initial typesetting of the page), you can push it onto the MathJax.Hub.queue so that it won’t be performed until MathJax finishes everything it has queued when it was loaded. For example,
<script type="text/javascript" src="/MathJax/MathJax.js"></script>
<script>
MathJax.Hub.Queue(function () {
// ... your startup commands here ...
});
</script>


The menu Digital Signatures/PKI contains the following commands and sub menus:
| PKI | Key management. |
| Sign Document | Sign the active document. |
| Verify Signature | Verify the signature of the active document. |
| Extract Signature | Extract the signature of the active document. |
| Signature Demonstration (Signature Generation) | Visualize the process of generating a digital signature. |


This website is a mere link to other websites, and it is intended to help improve the way AP Phyiscs One and Two students study.
The AP exams linked on this webpage belong solely to the College Board.
The readings available are edited, and originally belong to a College Board related professor.
The background used belongs to Wallpapers Craft


My InFo
Hii, I'm Christy Vinny...!!!
This is a link to Youtube!
This is a link to Instagram!
This is a link to GitHub!


VSL // Design By Hand
* As designers, we are constantly asked by clients to provide photo realistic 3-D renderings of our projects, but our personal preference is more for hand drawn illustrations.  Tortoise General Store
http://link.nyobserver.com/516ca68465217dc6e1b9a3a622ves.25ro/TvnrKi0WTdwTHwxwC2703
delightful e-mail that shares
cultural gems from a
different curator every day.
If you have any problems reading this e-mail, click here
http://link.nyobserver.com/516ca68465217dc6e1b9a3a622ves.25ro/UHyHCJsf7NZSKXrPC183b
Subscribe
Forward
My Account
Unsubscribe
style 10 Dec 2014
Katie Doyle & Jay Hallstein prove that basic is beautiful.
tech 8 Dec 2014
Chris McConnell on tech for writers.
culture 5 Dec 2014
Brian Nunes on talent that springs from context rather than content.
Editorial Policy
Privacy Policy
Contact Us
Press
Terms + Conditions
very fine print: ©2014
Observer VSL LLC.
321 West 44th Street, 6th Floor
New York, NY 10036 USA
All rights reserved.
Questions?<PHONE_NUMBER>.
This message was intended for<EMAIL_ADDRESS>If you believe this has been sent to you in error, please safely unsubscribe


Options for 'Capitalize first letter of each sentence' type:
Enable multiline mode (Sentence starting on new line is considered a new sentence, even if previous sentence didn't end with punctuation)
Capitalize start of sentences beginning with quotation mark (")


| Coupon |
* Sponsored Results
Making a Pattern Photoshop CS3 Tutorial -
In this tutorial we will show you how to create a pattern in Photoshop CS3. . Photoshop CS5, CS4, CS3, CS2, 10, 9 Tutorials .
http://designertoday.com/Tutorials/Photoshop/4586/Making.a.Pattern.Photoshop.CS3.Tutorial.aspx
aarp medicare supplemental drug plan aussie awsome volumizing shampoo
cs4 | texturemate.com - Free Textures, Brushes, Patterns, and ...
Jan 18, 2011 . Latest Free Patterns for Photoshop or Gimp. More Patterns . Well, I finally got around to creating a Google+ page for texturemate! If you are on .
http://www.texturemate.com/category/key-words/cs4
400 Elm Ave
Yukon,
OK 73099
toyoota and rental costa rica
Family Night Dinner Group Studies Ministries for all ages
lori grenier earring sliding troy built lawnmower sudbury ontario world of warcraft class guide
900 S Littler Ave
Edmond,
OK 73034
andres bonifacio literary works
60 Most Wanted Photoshop Tutorials, Brushes, .PSDs and - Noupe
Jan 4, 2009 . If your interested in creating your own patterns in Photoshop here is a . Reference Cards for Adobe Photoshop CS4, CS3, CS2 and Below .
http://www.noupe.com/photoshop/60-most-wanted-photoshop-tutorials-brushes-psds-and-resources.html
paper box characters to make bvrp wireless connection manager the mafia boss wiki
500 S Country Club Rd
Photoshop Patterns Free Photoshop Patterns at Brusheezy!
Downloading and using Photoshop patterns offer a quick way to enhance your . to create and exchange Photoshop Brushes, Photoshop Patterns, Textures, .
http://www.brusheezy.com/patterns
How to Use Patterns in Photoshop CS4
Dec 17, 2010. designing. Now i would like to show you about how to use patterns file (.pat) i. . How to Create Animation Image(.gif) in Photoshop CS4 .
http://www.freshdesignweb.com/how-to-add-patterns-in-photoshop-cs4.html
pressure drop across heat exchanger egg harbor business association youths implication to drugabuse control
Basic Listings
226 S 29th St
Applying Color and Patterns to an Object with Photoshop
With Photoshop, it's easy to make realistic looking color changes and add pattern to an object. For this tutorial I'll be using Photoshop CS4 to show how it's done.
http://graphicssoft.about.com/od/photoshop/ss/Color-And-Pattern.htm
idaho boise copyright attorney search basic genres of music marriage to an australian citizen
1202 W Grand Ave
Photoshop tutorials - Making a Pattern with Photoshop CS4 Pixel ...
Apr 7, 2010 . Primary Category: Photoshop It's endless pattern making fun, you will enjoy it! Create an array of patterns in Photoshop CS4. Save a Photo or .
http://www.communitymx.com/abstract.cfm?cid=A25DE
livingston county michigan minority recruiting lyrics gilbert sullivan penafore pioneer sd-p5191-k technical specs
116 E Georgia Ave
1.2 Creating a Pattern: Adobe Photoshop CS4 Video - YouTube
Oct 21, 2010 . This Photoshop how to demonstrates the steps to create a pattern. In Photoshop, patterns can be created with shapes, text, pictures, .
http://www.youtube.com/watch?v=xDWG0hDk6mg
kjell powered by phpbb docx converter for free and fast tmmk toyota career opportunities
301 S 2nd St
How to Make a Repeating Pattern - Gloria Hansen ~ quilt, digital and ...
There are many ways of creating repeating patterns using computer programs. The following are basic . This is in Photoshop CS4. Elements has this feature .
http://www.gloriahansen.com/articles.php?p=1&ID=13
xena warrior princess plots ansonia china royal bonn lock perdita gudrun andrea acevedo
1910 S 20th St
How To Make A Seamless Grid Pattern In Photoshop CS4 | Little ...
Oct 5, 2009 . In today's quick tutorial, I will show you how to create a seamless grid pattern in Photoshop CS4. Software Photoshop CS4 Level Beginner .
http://www.littleboxofideas.com/blog/tutorials/how-to-make-a-seamless-grid-pattern-in-photoshop-cs4
elite protective services az mr tambourine man band who sang western digital external hard drive cable
728 W Michigan Ave
Photoshop Cs4 Making a new pattern.by nelson... - YouTube
May 20, 2009 . Photoshop Cs_4 Making a new pattern... . spam; Block User; Unblock User. Is it? me or did they change this in cs4? impdream70 2 years ago .
http://www.youtube.com/watch?v=t0Zg--CN_eI
illegal drugs by paul gahlinger trust corporation of america stefan cheesecake factory baltimore md
3340 S 16th St
Pattern Maker filter - Adobe
http://help.adobe.com/en_US/Photoshop/11.0/WS2C24E0E4-712C-47ed-8BE3-6F2FF2CF6EF5.html
xp system restore recommended size bible cloaked american flag mayor of anaheim contact info
828 S 9th St
How to Create patterns with Adobe Photoshop pattern maker ...
In fact, you can make your own patterns using Adobe Photoshop's pattern maker function. . How to Make A Cartoon From Your Photo With Photoshop CS4 .
http://photoshop-tutorials.wonderhowto.com/how-to/create-patterns-with-adobe-photoshop-pattern-maker-15158/
learn spanish online free easy hp rp7410 service manual camp whittle big bear
1300 S 29th St
Creating your own Patterns in PhotoShop | Photoshop Basics
Oct 5, 2009 . This tutorial will show you how to create lined patterns to use on . Photoshop CS4 Tutorials . Creating your own Patterns in PhotoShop .
http://www.webdesign.org/photoshop/photoshop-basics/creating-your-own-patterns-in-photoshop.16170.html
temporary internet files location xp 19th century important facts for us nuptse northface 900 down
102 E Almar Dr
Patterns - Photoshop Detailed Tutorial Training Site
Sep 13, 2009 . We will be showing you how to sample a pattern and how to use the Pattern Maker filter (if you are running Photoshop CS4, you will need to .
http://photoshopeducation.blogspot.com/2009/09/patterns.html
320 S 4th St
Create Seamless Textures in Photoshop
May 31, 2009 . Why pay for a disc of pre-made textures or a pricey Photoshop . Although the author of the tutorial flags it as a tutorial for Photoshop CS4, the tutorial will . pattern, or a complex pattern that will make hiding any imperfections .
http://lifehacker.com/5273084/create-seamless-textures-in-photoshop
fender vibrolux ab763 schematic people v wagman 99 ad2d 519 west side church traverse city
901 W Grand Ave
adobe photoshop cs4 and portrait/pattern making - Scroll Saw ...
Hello, I have the new photoshop cs4 for Mac. Boy can this program do a lot but there is a huge learning curve here.Does anyone have .
http://www.scrollsawer.com/forum/scroll-saw-design-tutorials/27233.htm
rugby italy under 19 intercity 2008 phpbb group hauntings at black swan inn texas
2414 State Highway 92
Creating Custom Patterns | Graphic Design | PSHERO
Apr 17, 2008 . In this Photoshop tutorial we will explore the wonderful world of repeating patterns while creating one from scratch using a Photoshop Custom Shape. . transforming the selection (step 12) in CS4 my selection snapped to the .
http://pshero.com/photoshop-tutorials/graphic-design/creating-custom-patterns
124 S 6th St
Adobe Photoshop Patterns for Photoshop CS4, CS3, CS2, CS. Pixel ...
Mar 9, 2008 . Adobe Photoshop Extended CS4 Within the Adobe Photoshop Patterns page below you'll find high quality free and commercial Photoshop .
http://websitetips.com/graphics/photoshop/patterns/
3320 S 16th St
(Video Tutorial) How to Create a Striped Background Pattern Using ...
May 17, 2010 . (Video Tutorial) How to Create a Striped Background Pattern Using . Open Photoshop (I'm using CS4) and click File > New; When the prompt .
http://www.blogher.com/how-create-striped-background-pattern-using-photoshop
easel business card holder 2c loan private student state of kentucky minority business enterprises
802 Frisco Ave
Adding patterns on photoshop cs4 - YouTube
Feb 9, 2009 . Photoshop CS4 - Custom Stylized Watermarkby ephotopros15,912 views; how to make a brush/pattern in photoshop 1:11. Watch Later .
http://www.youtube.com/watch?v=dDYsa-o0K-g
kwc kg 53 ahb alpine development group december 20 2007 what is a cash sweep
609 W Highway 277
How To Save A Custom Pattern - Photoshop CS - Digital Art and ...
But there will be times when you want to create your own pattern for a special project. In Photoshop CS it is easy to define a new pattern and save it to the list in .
http://www.bellaonline.com/articles/art22858.asp
cyfluthrin for black vine weevil comic-con 2008 science fiction writers consumer report nissan maxima
2828 S 9th St
How to Make a Doodle Pattern in Photoshop | ANidea powered by ...
Jan 5, 2010 . This tutorial assumes basic knowledge of Adobe Photoshop CS4. . To create a large enough pattern you will need at least 8-10 doodles.
http://anidea.com/creative/how-to-make-a-doodle-pattern-in-photoshop/
tommy c west and winchester va dental assistant gainesville florida the battle of yorktown summary
202 S 6th St
How to Make an Overlay in Adobe CS4 | eHow.com
Open the Adobe Photoshop CS4 file that contains the layers with the image and the item that you would like to turn into an overlay. Create a file with an overlay .
http://www.ehow.com/how_8260485_make-overlay-adobe-cs4.html
providence baptist church ponca city ok firewood for sale sc
428 E Almar Dr
(Video Tutorial) How to Create a Seamless Background Pattern in ...
May 26, 2010 . Open Photoshop (I'm using CS4) and click File > New; When the prompt . When you get to be more skilled at making patterns, you can go .
http://www.blogher.com/video-tutorial-how-create-seamless-background-pattern-photoshop
slim line air conditioners and heaters copper sun's most importent quote south lake high school seattle wa
Free Photoshop Tutorials, Videos & Lessons : Patterns in CS5, CS4
2-8 : Patterns; Making Fills and Backgrounds . folder of PS, which would usually look like this, C:\Program Files\Adobe\Adobe Photoshop CS4\Presets\Patterns\ .
http://www.we-r-here.com/ps/tutorials/level_2/2-08.htm
Flip, Rotate and Mirror Designs and Patterns in Photoshop
Learn how to create fun and interesting designs and patterns from a single image in . I'll be using Photoshop CS4 in this tutorial but any version should work.
http://www.photoshopessentials.com/photo-effects/flip-mirror/
360 Free Valentine's Day Photoshop Brushes, Patterns, and Textures!
Apr 14, 2012 . This set of 21 brushes are useful for creating greeting cards not only for Valentines Day, but for . This pattern was made with Photoshop CS4.
http://www.highresolutiontextures.com/360-free-valentines-day
* Sponsored Results
| Select from the listings below | (what is a cash sweep) | |
|
find jacqueline johnson atlanta georgia 226 S 29th St Patterns - Photoshop Tutorials, How To Edit Pictures | Photoshop.com |
||
|
how to establish brand architecture 1202 W Grand Ave Define pattern Adobe Photoshop CS4 tutotial - YouTube |
||
|
exotic newcastle disease virus symptoms 116 E Georgia Ave How to install patterns in Adobe Photoshop CS4 - YouTube |
||
|
uses copper ii phosphate 301 S 2nd St Creating A Watermark In Photoshop CS4 |
||
|
acceleration circular track a b relative 1910 S 20th St photoshop. multiple overlay effects - Graphic Design - Stack Exchange |
||
|
www las vegas entertainment 728 W Michigan Ave Layman's Reviews: Photoshop Master Series: Creating Patterns |
||
|
how to establish brand architecture 3340 S 16th St Strokes In Photoshop CS4 |
||
|
webkinz cards where to buy 828 S 9th St Photo To Colored Dot Pattern With Photoshop |
||
|
rain by laura sonido 1300 S 29th St Making Basic Seamless Patterns with CaP | psychedelicSiM Designs |
||
|
youths implication to drugabuse control 102 E Almar Dr 3:52 How to create patterns in PhotoShop - YouTube |
||
|
magic want tube video 320 S 4th St (Video Tutorial) How to Create a Seamless Background Pattern in ... |
||
|
cheesecake factory baltimore md 901 W Grand Ave Big Collection of Free Photoshop Pattern |
||
|
bear wrought iron decor 2414 State Highway 92 Adobe Photoshop Patterns for Photoshop CS4, CS3, CS2, CS. Pixel ... |
||
|
bed bath and beyond frederick 124 S 6th St Guide To All Photoshop CS4 Tools (Part 1) - Scarletbits |
||
|
chris cagle id be lyen 3320 S 16th St Adobe Photoshop CS4 |
||
|
museum of church history and art 802 Frisco Ave (Video Tutorial) How to Create a Striped Background Pattern Using ... |
||
|
dodge 4x4 lift kit 609 W Highway 277 How to Make an Overlay in Adobe CS4 | eHow.com |
||
|
soft air sports of oregon 2828 S 9th St How to Create a Photoshop style Icon in Photoshop CS4 - YouTube |
||
|
dodge 4x4 lift kit 202 S 6th St how to make a brush/pattern in photoshop - YouTube |
||
|
linx bus schedule kissimmee 428 E Almar Dr 2:54 How to use Photoshop pattern fill - YouTube |
||
| Select from the listings above | (sole makeup for mephisto adama shoes) | |


We're happy you're here, but we want to point out that
we're not quite ready for you just yet. We're still
getting this site ready for public consumption. You can
look around, but please forgive the mess and missing
bits.
- The Istio Team
Rich Layer-7 Routing & Traffic Management
Control the flow of traffic and API calls between services using dynamic route configuration.
Resilience across languages and platforms
Increase reliability by shielding applications from flaky networks and cascading failures in adverse conditions.
A Policy Driven Control Plane
Apply organizational policy to the interaction between services, ensure access policies are enforced and resources are fairly distributed among consumers.
In-depth Telemetry and Reporting
Understand the dependencies between services, the nature and flow of traffic between them and quickly identify issues with distributed tracing.


{{header|safe}}
Plan an event
×
Title
Please provide a title
Activity location
Please provide a location
Meeting location
Reset
Date
DateFrom
Invalid date
DateTo
Cannot end before start
Time
invite link
Description
Preview
Category
None
None
OK
Save
WhatsApp
Delete
Edit
×
DateFrom
DateTo
DateThe
By
WhatsApp
Participants
5
Interested
2
Comments:
Unable to load comments
Please provide a comment
Send
Cancel
Preview
{{ChangeBackground}}
{% if is_connected %}{% endif %}


Work Day Scheduler
A simple calendar app for scheduling your work day
8:00
9:00
10:00
11:00
12:00
1:00
2:00
3:00
4:00
5:00


Reaction game
Catch this circle:
Circle color:
Green
White
Red
Radius circle:
80px
70px
50px
20px
Spawn time:
1x
2x
3x
time reaction:
time avg:


Chicago Python Workshop is a collection of activities for the software community in Chicago, centered around the Python programming language. Whether you're interested in learning Python or you were there when it started, the group aims to offer presentations, projects, collaboration, and an open environment that can benefit the entire community.
Led by Sheila Miguez and graciously hosted by Braintree, people of all skill levels will get together to hack on their side projects, start new projects, or join another project! The event takes place February 27 at 6:30 PM. RSVP on meetup.com - pizza provided!
Every other week at Pumping Station: One, hang out and hack! No agenda, no plans. Just bring your ideas, problems, maybe a laptop, and work together. The group meets every other Wednesday at 7PM.
Want to run something? Do it, it's your community. Want help organizing an event? Just ask!


father div1
father div2
father section
This is a span element (child of div).
father div3
father div4
father section
This is a span element (child of div).


Ohio Gubernatorial Race 2018
(current)
Richard Cordray
Mike Dewine
Travis Irvine
Constance Gadell-Newton
Who are my representitives?
Ohio Gov Candidates
The 2018 Ohio gubernatorial election will take place on November 6, 2018
2018 Candidates
Travis Irvine
Independent
Running mate:
Todd Grayson
Website
Wikipedia
Richard Cordray
Democratic
Running mate:
Betty Sutton
Website
Wikipedia
Mike DeWine
Republican
Running mate:
Jon A. Husted
Website
Wikipedia
Constance Gadell-Newton
Green
Running mate:
Brett R. Joseph
Website
Wikipedia
Are you planning to vote in the 2018 Midterm Elections?
Yes
No
Unsure
New York Times Article Search
From Date:
To Date:
Sort By:
Relevance
Date: Newest
Date: Oldest
Copyright © 2018 Gryffndor


Across: 1. Plane's luggage compartment should be waterproof (10 4) 9. Armada moved north in fast time (7) 10. Donkey is also returning to saintly place (7) 11. Rearrange and/or decorate (5) 12. Doctor is in garret, Sir! (9) 13. Rash Scots climb these (9) 14. He cleans up leak around worktop (5) 15.  Hungry diner's cry at Indian restaurant in US city? (9) 20. Annoyed at dirtier characters dancing! (9) 22. Joint remit? (5) 23. Witticism involving eastern animals (7) 24. Part of cover Dan tries to get under is green (7) 25. High going rate for a hangman? (9 5) Down: 1. Soldier who gives battle-cry? (7 7) 2. Posh car carries Dad to river (7) 3. Units enter one country from another (9) 4. Info given to Sykes may be non-specific (7) 5. Rages on about fruit! (7) 6. Triumphs over Elizabeth about shirt (5) 7. Watch verbose characters dress (7) 8. Sounds like sales girl hated being wrongly portrayed! (14) 14. Second child takes notice of emergency stop sign (9) 16. Transport one to The Queen's jeweller (7) 17. Robin's mate, Bob, is inside with Grace (7) 18. Boy has game with other boy (7) 19. Anger at unfashionable gear (7) 21. Part-timers go round boat and find otter (5)


| Fitness statistics! | |||
| Date | Category | Duration | Calories |
| {{i.created_date}} | {{i.category}} | {{i.duration}} | {{i.calories}} |
{% extends 'extender.html' %} {% block content %}
Exercise to stimulate, not to annihilate. The world wasn't formed in a day, and neither were we. Set small goals and build upon them.
| Fitness statistics! | |||
| Date | Category | Duration | Calories |
| {{i.created_date}} | {{i.category}} | {{i.duration}} | {{i.calories}} |


Pick an image
Render order:
row by row
col by col
row by row(reverse)
col by col(reverse)
row spread
col spread
Tile size:
Canvas max size:


Listing all 1906 registered packages
for the Julia programming language.
Made with PackageEvaluator.jl.
Last updated 2018-08-05 — Package ecosystem pulse
Packages tested on
Julia versions:
v0.6.3 (current release) —
v0.7.0-DEV (unstable)


{% extends "_layouts/layout.html" %} {% block header_class %}{% endblock %} {% block page_title %} GOV.UK product page prototypes {% endblock %} {% block content %} GOV.UK Service Manual and product page prototypes Service Manual Index GOV.UK Service Manual (Variant D) GOV.UK Service Manual (Original Variant A) GOV.UK Service Manual (Original Variant B) GOV.UK Service Manual (Variant C) Download the prototype code on Github {% endblock %}
Download the prototype code on Github


Source code for classes.InputPattern
"""Contains a class that represent a pattern of inputs to DYNAP-se
"""
import numpy as np
import matplotlib.pyplot as plt
from DYNAPSETools.classes.InputEvent import InputEvent
[docs]class InputPattern:
"""Class that represent a pattern of inputs to DYNAP-se
"""
def __init__(self, name, isiBase = 90.0):
"""Returns a new InputPattern object
Parameters:
name (string): Name of the pattern (useful for debug)
isiBase (int): Time base for time event generation.
Note:
isiBase parameter tune the minimum and the maximum inter-spike delay that can be created
by FPGA spike generator. The general formula to evaluate this parameters is::
resolution [s] = 1/90000000 Hz * isiBase
maxDelay [s] = resolution * 2^16 = resolution * 65535
Common used isiBase are 90 and 900::
isiBase = 90
resolution = 1 us
maxDelay = 65,535 ms
isiBase = 900
resolution = 10 us
maxDelay = 655,535 ms
isiBase must be in the range [1, 1000]
Note that the maximum delay stated by the isiBase can be overcomed using the freeNeuron.
See "setFreeNeuron" function for more informations
"""
self.name = name
# Set spike base timing
self.isiBase = isiBase # Base for the timing of the spikes
self.isiForUs = 90.0 # ISI to have 1 us resolution
self.isiRatio = self.isiBase / self.isiForUs
# Generate (address, time) event arrays
self.eventList = np.array([])
self.tSig = np.array([])
self.ySig = np.array([])
### ===========================================================================
[docs] def single_event(self, virtualSourceCoreId, neuronAddress, coreDest, fireFreq = None, firePeriod = None):
"""Create a single address and time step for a specified neuron and a certain interspike interval
Parameters:
virtualSourceCoreId (int): Represent the ID of the virtual core where is located the virtual neuron (from 0 to 3)
neuronAddress (int): Represent the address of the virtual neuron that will generate the event
coreDest (int): (4 bit hot coded). Represent the destination cores in which the spike will be routed
fireFreq (float, [Hz]): Firing frequency you want to achieve ; event delay is calculate as 1/frequency
firePeriod (float, [s]): Event delay (after delay the event is generated)
Note:
- virtualSourceCoreId must be in the range [0, 3]
- neuronAddress must be in the range [0, 255]
- coreDest is a 4 bit hot coded number, must be in the range [0, 15]
Examples:
Initialize the pattern istantiating the object::
pattern = InputPattern(name = "pattern", isiBase = 900)
- send a single event with 0.1s delay from virtual neuron 0 of virtual core 0, to all physical cores::
virtualSourceCoreId = 1
neuronAddress = 0
coreDest = 15
pattern.single_event(virtualSourceCoreId, neuronAddress, coreDest, firePeriod = 0.1)
- send a single event with 0.02s delay (50Hz) from virtual neuron 2 of virtual core 1, to physical cores 0 and 1::
virtualSourceCoreId = 1
neuronAddress = 2
coreDest = 3 # 0011 -> core 0 and 1
pattern.single_event(virtualSourceCoreId, neuronAddress, coreDest, fireFreq = 50)
"""
if (firePeriod == None) & (fireFreq != None):
time = np.round((1.0 / fireFreq ) * 1e+6 / self.isiRatio) #/*In ISI units*/
elif (firePeriod != None) & (fireFreq == None):
time = np.round(firePeriod * 1e+6 / self.isiRatio) #/*In ISI units*/
else:
errorString = "Error while creating event {}, specify or fire frequency or fire period: ".format(self.name)
raise NameError(errorString)
# Create event
self.eventList = np.append(self.eventList, InputEvent(virtualSourceCoreId, neuronAddress, coreDest, time = time))
### ===========================================================================
[docs] def multiple_events(self, virtualSourceCoreId, neuronAddress, coreDest, absTimes = None, fireFreq = None, firePeriod = None):
"""Create multiple events for specified neurons and times.
Parameters:
virtualSourceCoreId (array, int): Represent the ID of the virtual core where is located the virtual neuron (from 0 to 3)
neuronAddress (array, int): Represent the address of the virtual neuron that will generate the event
coreDest (array, int): (4 bit hot coded). Represent the destination cores in which the spike will be routed
absTimes (array, float [s]): Represent the absolute times for spikes, interspike interval is derived automatically
fireFreq (array, float [Hz]): Firing frequency you want to achieve ; event delay is calculate as 1/frequency
firePeriod (array, float [s]): Event delay (after delay the event is generated)
Note:
With this function is possible to create a custom pattern of spikes in three ways:
1. Defining a sequence of absolute times for the spikes (absTimes), for example: 1.1s, 1.2s, 1.3s
2. Defining a sequence of firing frequencies for the spikes (fireFreq), for example: 50Hz, 20Hz, 10Hz
3. Defining a sequence of firing periods for the spikes (firePeriod), for example: 0.1s, 0.2s, 0.3s
- virtualSourceCoreId must be in the range [0, 3]
- neuronAddress must be in the range [0, 255]
- coreDest is a 4 bit hot coded number, must be in the range [0, 15]
Examples:
Initialize the pattern istantiating the object::
pattern = InputPattern(name = "pattern", isiBase = 900)
- The following three examples create a pattern of three spikes with 20ms interspike interval
using three different approaches. The spikes come from virtual neuron 2 of virtual core 1,
and are sent to physical cores 0 and 2::
virtualSourceCoreId = [1, 1, 1]
neuronAddress = [2, 2, 2]
coreDest = [5, 5, 5] # 0101 -> core 0 and 2
pattern.multiple_events(virtualSourceCoreId, neuronAddress, coreDest,
absTimes = [20e-3, 40e-3, 60e-3])
pattern.multiple_events(virtualSourceCoreId, neuronAddress, coreDest,
fireFreq = [50, 50, 50])
pattern.multiple_events(virtualSourceCoreId, neuronAddress, coreDest,
firePeriod = [20e-3, 20e-3, 20e-3])
"""
# Find which type of event series must be generated
freq = False
period = False
# Extract from absolute times the firePeriods
if absTimes is not None:
firePeriod = []
diff = np.diff(absTimes)
firePeriod.append(absTimes[0])
firePeriod.extend(diff)
if fireFreq is not None:
freq = True
elif firePeriod is not None:
period = True
else:
errorString = "Error while creating event, specify or fire frequency or fire period: "
raise NameError(errorString)
# Scan the fireFreq or firePeriod vector and create all events
for idx, addr in enumerate(neuronAddress):
if freq:
self.single_event(virtualSourceCoreId[idx], addr, coreDest[idx], fireFreq = fireFreq[idx])
else:
self.single_event(virtualSourceCoreId[idx], addr, coreDest[idx], firePeriod = firePeriod[idx])
### ===========================================================================
[docs] def constant_freq(self, virtualSourceCoreId, neuronAddress, coreDest, fireFreq, initDelay, duration):
"""Create addresses and time steps for a constant firing frequency of a certain duration
Parameters:
virtualSourceCoreId (int): Represent the ID of the virtual core where is located the virtual neuron (from 0 to 3)
neuronAddress (int): Represent the address of the virtual neuron that will generate the event
coreDest (int, 4 bit hot coded): Represent the destination cores in which the spike will be routed
fireFreq (float, [Hz]): Desidered Firing frequency
initDelay (float, [s]): Delay of the first event
duration (float, [s]): Duration of the event pattern
Note:
- virtualSourceCoreId must be in the range [0, 3]
- neuronAddress must be in the range [0, 255]
- coreDest is a 4 bit hot coded number, must be in the range [0, 15]
Examples:
Initialize the pattern istantiating the object::
pattern = InputPattern(name = "pattern", isiBase = 900)
Create spike with 50Hz frequency, initial delay of 1/50 s and 1 s duration,
from virtual neuron 22 of virtual core 3, to physical cores 0, 1 and 2::
virtualSourceCoreId = 3
neuronAddress = 22
coreDest = 7 # 0111 -> core 0, 1 and 2
pattern.constant_freq(virtualSourceCoreId, neuronAddress, coreDest,
fireFreq = 50, initDelay = 1/50, duration = 1)
"""
freqPhase = (1.0 / duration) # in Hz
# Insert the first initial spike after an initial delay
self.single_event(virtualSourceCoreId, neuronAddress, coreDest, firePeriod = initDelay)
# Repeat (address, time) to occupy the whole duration of the frequency phase duration*/
num_events = int(np.round(fireFreq / freqPhase))
for event in range(num_events):
self.single_event(virtualSourceCoreId, neuronAddress, coreDest, fireFreq = fireFreq)
### ===========================================================================
[docs] def linear_freq_modulation(self, virtualSourceCoreId, neuronAddress, coreDest, freqStart, freqStop, freqSteps, freqPhaseDuration, initDelay):
"""Create addresses and time steps for a linear firing frequency modulation
Parameters:
virtualSourceCoreId (int): Represent the ID of the virtual core where is located the virtual neuron (from 0 to 3)
neuronAddress (int): Represent the address of the virtual neuron that will generate the event
coreDest (int, 4 bit hot coded): Represent the destination cores in which the spike will be routed
freqStart (float): Starting modulation frequency
freqStop (float): Stop modulation frequency
freqSteps (int): Number of steps of the modulation frequency
freqPhaseDuration (float, [s]): Duration of each frequency step
initDelay (float, [s]): Delay of the first event
Note:
The modulation starts at <freqStart> and stops at <freqStop>, with <freqSteps> number of steps
of duration <freqPhaseDuration>.
It is possible to specify an initial delay of the first spike changing <initDelay>
- virtualSourceCoreId must be in the range [0, 3]
- neuronAddress must be in the range [0, 255]
- coreDest is a 4 bit hot coded number, must be in the range [0, 15]
Examples:
Initialize the pattern istantiating the object::
pattern = InputPattern(name = "pattern", isiBase = 900)
Create spikes from 50Hz to 100Hz with 6 steps (50, 60, 70, 80, 90, 100)Hz, 100ms of duration of each step,
initial delay of 0.5s and 1s duration, from virtual neuron 5 of virtual core 0, to physical core 3::
virtualSourceCoreId = 0
neuronAddress = 5
coreDest = 8 # 1000 -> core 3
pattern.linear_freq_modulation(virtualSourceCoreId, neuronAddress, coreDest,
freqStart = 50, freqStop = 100, freqSteps = 6,
freqPhaseDuration = 0.1, initDelay = 0.5)
"""
# Generate (address, time) event list
freqPhase = (1.0 / freqPhaseDuration) # in Hz
freqs = np.linspace(freqStart, freqStop, freqSteps) # in Hz
# Insert the first initial spike after an initial delay
self.single_event(virtualSourceCoreId, neuronAddress, coreDest, firePeriod = initDelay)
# Step on all frequencies and create (address, time) events list
for freq in freqs:
# Repeat (address, time) to occupy the whole duration of the frequency phase duration*/
num_events_this_freq = int(np.round(freq / freqPhase))
for event in range(num_events_this_freq):
self.single_event(virtualSourceCoreId, neuronAddress, coreDest, fireFreq = freq)
### ===========================================================================
[docs] def threshold_encoder(self, virtualSourceCoreId, neuronAddressUpCH, neuronAddressDwCH, coreDest, threshold, t, y, noiseVar, initDelay):
"""Create spikes with variable frequency, in the form of a specified function
Parameters:
virtualSourceCoreId (int): Represent the ID of the virtual core where is located the virtual neuron (from 0 to 3)
neuronAddressUpCH (int): Represent the address of the virtual neuron that will generate the event on Up channel
neuronAddressDwCH (int): Represent the address of the virtual neuron that will generate the event on Up channel
coreDest (int, 4 bit hot coded): Represent the destination cores in which the spike will be routed
threshold (int): Theshold that triggers the generation of the spike
t (float, [s]): Time vector of the signal
y (float): Value vector of the signal
noiseVar (float, [s]): Variance of a gaussian distribution from which noise is applied to event times
initDelay (float, [s]): Delay of the first event
Note:
A spike is generated when the signal does a step up or step down bigger than the threshold <threshold>.
Spikes are encoded in two channels (<neuronAddressUpCH> and <neuronAddressDwCH>)
according to the direction of the jump (depending on the slope of the signal):\n
- deltaY > threshold --> Up channel spike
- deltaY < -threshold --> Dw channel spike
It is possible to specify an initial delay of the first spike changing <initDelay>
It is possible to specify the variance <noiseVar> of a Gaussian noise added to the spike times
Note that the algorithm does not constrain the firing frequencies to a minimum or maximum,
but they depend on the signal and the threshold. Minimum and maximum
firing rates are calculated and printed (<TODO>)
- virtualSourceCoreId must be in the range [0, 3]
- neuronAddressUpCH must be in the range [0, 255]
- neuronAddressDwCH must be in the range [0, 255]
coreDest is a 4 bit hot coded number, must be in the range [0, 15]
Examples:
Initialize the pattern istantiating the object::
pattern = InputPattern(name = "pattern", isiBase = 900)
- 1 s of 2 Hz sinewave converted in spikes with a threshold of 0.05, no jitter and initial delay of 0.1s.
Spikes come 2 neurons: Up channel from virtual neuron 20 of virtual core 0,
Down channel from virtual neuron 21 of virtual core 0, and are routed to physical core 1::
virtualSourceCoreId = 0
neuronAddressUpCH = 20
neuronAddressDwCH = 21
coreDest = 1 # 0001 -> core 1
t = np.arange(0, 1, 1e-6)
y = np.sin(2 * np.pi * 1 * t)
pattern.threshold_encoder(virtualSourceCoreId, neuronAddressUpCH, neuronAddressDwCH,
threshold = 0.05, t = t, y = y,
noiseVar = 0, initDelay = 0.1)
"""
# Initialization
t = t - t[0] # Time normalization
t = t*1e6 # Transform in us scale
self.tSig = t + initDelay * 1e6
self.ySig = y
# Insert the first spike after an initial delay*/
if y[1] >= y[0]: # Positive slope
self.single_event(virtualSourceCoreId, neuronAddressUpCH, coreDest, firePeriod = initDelay)
else: # Negative slope
self.single_event(virtualSourceCoreId, neuronAddressDwCH, coreDest, firePeriod = initDelay)
# Scan the whole sinewave and create spikes
lastSpikeIndex = 0
for idy, valy in enumerate(y):
if (valy - y[lastSpikeIndex]) >= threshold: # If signal goes up of a quantity higher than threshold
# Evaluate interspike interval
time = (t[idy] - t[lastSpikeIndex]) / 1e6
# Apply noise
noise = np.random.normal(loc = 0, scale = noiseVar)
time = time + noise
# Create event
self.single_event(virtualSourceCoreId, neuronAddressUpCH, coreDest, firePeriod = time)
lastSpikeIndex = idy
elif (valy - y[lastSpikeIndex]) <= -(threshold): # If signal goes dows of a quantity higher than threshold
# Evaluate interspike interval
time = (t[idy] - t[lastSpikeIndex]) / 1e6
# Apply noise
noise = np.random.normal(loc = 0, scale = noiseVar)
time = time + noise
# Create event
self.single_event(virtualSourceCoreId, neuronAddressDwCH, coreDest, firePeriod = time)
lastSpikeIndex = idy
# Calculate and print maximum and minimum firing frequencies obtained
#absTime = [0] * len(self.eventList)
#absTime[0] = self.eventList[0].time
#for idx, event in enumerate(self.eventList[1:]):
# absTime[idx + 1] = absTime[idx] + event.time
#upPos = [True for event in self.eventList if event.neuronAddress == neuronAddressUpCH]
#upChTimes = np.array(absTime)[np.where(self.eventList.neuronAddress == neuronAddressUpCH)]
#dwChTimes = np.array(absTime)[np.where(self.eventList.neuronAddress == neuronAddressDwCH)]
#maxUpChFrequency = 1e6 / (np.min(np.diff(upChTimes)) * self.isiRatio)
#minUpChFrequency = 1e6 / (np.max(np.diff(upChTimes)) * self.isiRatio)
#maxDwChFrequency = 1e6 / (np.min(np.diff(dwChTimes)) * self.isiRatio)
#minDwChFrequency = 1e6 / (np.max(np.diff(dwChTimes)) * self.isiRatio)
#print('=======================================')
#print("MAX Up channel frequency: %.5f Hz" % np.round(maxUpChFrequency))
#print("min Up channel frequency: %.5f Hz" % np.round(minUpChFrequency))
#print('MAX Dw channel frequency: %.5f Hz' % np.round(maxDwChFrequency))
#print('min Dw channel frequency: %.5f Hz' % np.round(minDwChFrequency))
#print('=======================================')
### ===========================================================================
[docs] def plot_spikes(self, timeShift = 0, ax = None):
""" Plot the spikes of the current pattern
Parameters:
color (string): Color of the pattern
timeShift (int, optional): Add this time to all the events
ax (ax handle, optional): Plot graph on this handle, otherwise a new figure will be created
Note:
When plotting, different colors will be used according to the different virtual neuron addresses that are
present in the pattern. For example virtual neuron 0 events and virtual neuron 1 events, even if in the same
pattern, will be plotted with different colors.
This is useful because you can, just with a glance to the plot, understand the contributions of all virtual neurons
The label of each trace is constructed such to let you recognize who is the source, for example:
- virtual neuron 0 of virtual core 0, to all cores (1111) -> label = "Virtual Neuron C0N1"
- virtual neuron 20 of virtual core 1, to core 1 (0001) -> label = "Virtual Neuron C1N20"
"""
fig = None
# If no subplot is specified, create new plot
if ax == None:
fig = plt.figure()
ax = fig.add_subplot(111)
# Create absolute times
absTimes = []
for event in self.eventList:
try:
absTimes.append(absTimes[-1] + event.time * self.isiRatio)
except:
absTimes.append(event.time * self.isiRatio + timeShift)
absTimes = np.array(absTimes)
# Create vector of addresses
addresses = []
for event in self.eventList:
addresses.append(event.address)
addresses = np.array(addresses)
# Create set of addresses
setAddresses = []
for address in addresses:
if(address not in setAddresses):
setAddresses.append(address)
setAddresses = np.array(list(setAddresses))
# Plot separately
handles = []
for idx, address in enumerate(setAddresses):
indexes = np.where(addresses == address)
times = absTimes[indexes]
arrowDim = 1
# handle = ax.quiver(times,
# np.zeros(len(times)),
# np.zeros(len(times)),
# arrowDim * np.ones(len(times)),
# color = "C" + str(idx),
# angles = 'xy', scale_units = 'xy', scale = 1,
# label = self.name)
# ax.plot(times, arrowDim * np.ones(len(times)), linestyle = 'None', color = "C" + str(idx), marker = '^')
decodedEvent = InputEvent(address = address, time = 0)
label = "Virtual Neuron C{}N{}".format(decodedEvent.virtualSourceCoreId,
decodedEvent.neuronAddress)
handle = ax.vlines(x = times, ymin = 0, ymax = arrowDim, colors = "C" + str(idx),
label = label)
handles.append(handle)
# Plot signal shape
# if len(self.tSig) != []:
# handle = ax.plot(self.tSig + timeShift, self.ySig, 'k', label = self.name)
# handles.append(handle)
return fig, ax, handles
### ===========================================================================
[docs] def add_manually_event(self, address, time):
"""Add manually an event starting from address and time
Parameters:
address (int): Encoded address of the virtual neuron
time (int): Delay after which the event is generated. It is expressed as multiple of isiBase
"""
np.append(self.eventList, InputEvent(address = address, time = time))
### ===========================================================================
[docs] def evaluate_duration(self):
"""Calculate the duration of the pattern
Returns:
float: Duration of the whole pattern
"""
time = 0
for event in self.eventList:
time = time + event.time * self.isiRatio
return time


|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object dxf2svg.svg.SvgAttdef
This immutable class encapsulates a DXF attribute definition, known as an ATTDEF, into an SVG format.
An attdef is a string value that is usually associated with a block. When you define, or redefine a block you can include any number of attributes. When the block is next referenced into the drawing, if the attribute definition stipulates, you will be prompted for the attribute's value which will then become part of the block. For each attribute, there must be a attribute definition.
If an attdef is not associated with any block it is refered to as a stand-alone attribute definition. When the drawing is next referenced into another drawing in AutoCAD, AutoCAD will prompt you to fill in the attributes in a modal dialog box or on the command line. This class encapsulates the result of that process.
Attribute definitions really only contain two critical pieces of information. The tag (or variable) name, and the visibility of the attribute. The tag is not really a variable because two or more tags with the same name can exist in one block. This should be a rare event, but it contravenes the SVG namespace, so please make sure there are no duplicate tag names within any block.
Of course AutoCAD makes more extensive use of this object, but its job has very little to do with SVG. ATTDEF, in AutoCAD, is remarkably similar to TableStyle while its counterpart, ATTRIB is very similar to an SvgText object.
| Constructor Summary | |
SvgAttdef()
|
|
SvgAttdef(java.lang.String tag,
boolean isVisible)
|
| Method Summary | |
boolean |
equals(java.lang.Object o)
This method compares two attribute definition and determines whether they are the same. |
boolean |
getAttributeVisibility()
Returns the visibility of this definition. |
java.lang.String |
getTag()
Returns the tag name of the attribute definition. |
void |
setAttributeVisibility(boolean isVisible)
Sets the visibility of the attribute definition. |
void |
setTag(java.lang.String tagName)
Sets the tag name of the object. |
java.lang.String |
toString()
Returns a String representation of this object. |
| Methods inherited from class java.lang.Object |
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Constructor Detail |
public SvgAttdef()
public SvgAttdef(java.lang.String tag, boolean isVisible)
| Method Detail |
public void setTag(java.lang.String tagName)
public void setAttributeVisibility(boolean isVisible)
public java.lang.String getTag()
public boolean getAttributeVisibility()
public boolean equals(java.lang.Object o)
public java.lang.String toString()
|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Location
Remeasure a tagged tree
Measure ingrowth
View/edit measurement data
View/edit mortality data
Missing trees
View previous data
Create stand doc
View/edit stand docs
Back


MiniWorldMaker¶
MiniWorldMaker allows you to create 2D mini worlds and games.
Features¶
- MiniWorldMaker supports pixel-based games as well as games with tiles (e.g. Rogue-Likes)
- Easy creation of animations
- Music and sound effects
- Integrated GUI elements like console for output, toolbar, …
- Load and Save to SQLite Databases
- Open Source
- Miniworldmaker is a 2D Engine based on Python 3 and pygame.
- Github | Documentation | PyPi
The API¶
Here you will find all the information you need if you want to access classes, methods and attributes directly.
Credits¶
- Greenfoot: The model for this framework.
- Deepl: Assistant for translating pages.
- Kenny Assets: Most of the images in the example-code are based on kenny assets.
Feedback¶
- Twitter: @a_siebel
- Mail: a.siebel@cws-usingen.de


I am 24 years old. I have honestly finished my drug using years. I really do not do a whole lot of experimentation any more. I have done enough.  Which is already hard enough to begin with . . . at least for me.
I am a photography assistant/aspiring photographer who migrates from studio to studio on a contract basis. I hit a period with a really stressful studio where the hours were really long and the environment was less than ideal. Which is not really anything new. The Photo racket is a hard buis.
I suddenly dropped about 15lbs over the course of a month for no reason.  Started having anxiety attacks at night.  I was really used to getting no sleep. It was a regular occurance. I was used to being a Zombie. It was nothing new.
I finally went into the doctor. And . . . no surprise. One of the chambers in my heart was filling too fast. AKA. My heart was beating too fast. Which was likely stemming from a thyroid disorder. Which is a genetic thing. My need for something to help me sleep was legit. And my need for some blood work was also a legitimate concern. I have abused alot of substances in the past, which I did not quite make clear to the doctor who was concerned about my lack of sleep and overall tired appearance.
I have to say that Ambien really gets me high even at the dosage of 10mg which was prescribed for me. The first couple of days I took it, I took it earlier than necessary. And if I were in public, I probably would have taken a ride in a squad car. It really gives me a night of quality sleep beyond anything even close to natural. I wake up feeling fine. I usually take it around 8pm or so. When I use it for a week straight, it really becomes easy to justify taking the stuff . . . I sleep really well. And not taking it can mean no sleep . . . and a shitty job at work.
The past few nights I have forced my self to not take a tablet. And needless to say the nights have not been easy. I have been sweating alot. I notice much more anxiety than I remember and sleeping is overall worse than I remember my self doing before I started taking the tablets.
I am familiar with the symptoms of opiate withdrawal. And I really think this drug has got some potential for some real problems if I am not careful. All I know is that I am counting on taking the tabs to sleep. I think about them alot when it is bed time.
I think it can be a God send. I really needed the stuff. But about half as much and about half the dose prescribed. It is getting me stoned. Even in the amount the doc is writing me.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


It's toppings are Bacon, Pineapple and Cheese.
It's topping is marinated barbecue steak.
It's topping are spicy peri-peri chicken.
It's toppings are 100% beef mince, fresh tomato, fresh onion.
It's topping are sweetcorn, red & green pepper, mushroom, onion, jalapenos, tikka sauce.
It's toppings are chicken and Tikka sauce.
It's toppings are chicken and mashroom.
It's toppings are peperoni, basil,dried oregano and tomato Paste .


Kotlin companion object is always created once you try to load its containing class, and extension point implementations are supposed to be cheap to create. Excessive classloading in plugins is a huge problem for IDE startup.
Bad pattern:
class KotlinDocumentationProvider : AbstractDocumentationProvider(), ExternalDocumentationProvider {
companion object {
private val LOG = Logger.getInstance(KotlinDocumentationProvider::class.java)
private val javaDocumentProvider = JavaDocumentationProvider()
}
}
Here KotlinDocumentationProvider
is an extension registered in plugin.xml
:
<lang.documentationProvider language="JAVA"
implementationClass="org.jetbrains.kotlin.idea.KotlinDocumentationProvider"
order="first"/>
In this example JavaDocumentationProvider
will be loaded from disk once someone just calls new KotlinDocumentationProvider()
.
Kotlin companion objects in extension point implementation can only contain a logger and simple constants.
Other declarations may cause excessive classloading or early initialization of heavy resources (e.g. TokenSet, Regex, etc.)
when the extension class is loaded.
Note, that even declarations marked with @JvmStatic
still produce an extra class for the companion object, potentially causing expensive computations.
Instead of being stored in companion object, these declarations must be top-level or stored in an object.
Move the declaration to top-level:
// DO, use top level fun
internal fun mnRunConfigurationType(): MnRunConfigurationType = runConfigurationType<MnRunConfigurationType>()
internal class MnRunConfigurationType : ConfigurationType {
companion object { // DON'T
fun getInstance(): MnRunConfigurationType = runConfigurationType<MnRunConfigurationType>()
}
...
Before:
internal class SpringBootImportsFileType : LanguageFileType(SPILanguage.INSTANCE, true) {
companion object {
val FILE_TYPE = SpringBootImportsFileType()
...
After:
internal object SpringBootImportsFileType : LanguageFileType(SPILanguage.INSTANCE, true) {
...
Use INSTANCE
fieldName in plugin.xml
:
<fileType name="Spring Boot Imports"
fieldName="INSTANCE"
implementationClass="com.intellij.spring.boot.spi.SpringBootImportsFileType"/>
Before:
class AntActionsUsagesCollector : CounterUsagesCollector() {
override fun getGroup(): EventLogGroup = GROUP
companion object {
private val GROUP = EventLogGroup("build.ant.actions", 1)
@JvmField
val runSelectedBuildAction = GROUP.registerEvent("RunSelectedBuild")
}
}
After:
object AntActionsUsagesCollector : CounterUsagesCollector() {
override fun getGroup(): EventLogGroup = GROUP
private val GROUP = EventLogGroup("build.ant.actions", 1)
@JvmField
val runSelectedBuildAction = GROUP.registerEvent("RunSelectedBuild")
}
New in 2023.3


Hello, world! this is a ${test}. ${'div'}. bug 50% are fine
test
Hello World
${nav.foo}
${expression}
Link
this is no
script
!
Link


--- creation_epoch:<PHONE_NUMBER> lastmod_epoch:<PHONE_NUMBER> categories: Misc title: My Custom Built PC --- So I've finally put together a new computer for myself.
I purchased this board as a combo that came with a cpu and memory. I found it care of pricewatch.com from the vendor portatech.com.
I've been very happy with the board. I don't have heavy graphics requirements so the built-in video card works fine for me. It does use some of the system memory, but if I want too I can always add a 16x PCI-e card later on.
I could have opted for ram that runs as 1GHz, but the 800GHz was much cheaper. I figure if I ever need to upgrade the memory I'll replace it with 8GB of 1GHz memory. I don't forsee that need for a long time though.
I partitioned the array to only 40GB out of the 1500GB available to increase performance. I don't need all of that space yet, so I figured I'd limit access of the disk to the first part of the drives. This has helped to speed up disk access time. Having the increased hard disk performance is very noticable on my system.
I decided to try out Vista since I had a free copy of it. I was using XP before, which is also supported on my hardware.
Lots of people complain about Vista performance, but I've found that on brand new computer hardware it runs just fine. A clean install consumed 8GB of disk space (including the paging file and hibernation file). After installing Vista SP1 it used 12GB of space. After installing Office 2007 it consumed 16GB of disk space total.
Overall I haven't had problems with Vista. I find the User Account Control annoying at times, but overall the updated interface is nice.
Why you may ask? I decided that since I was going to purchase all this new hardware I might as well have a place to display it. I'd read about other case mods and decided mine should be from wood and look like a picture frame.
This did create challenges with the heat. 4 case fans (each only $1 after cashing in some recycled print cartidges) took care of any heating issues. I made the case sit on bookshelf rails so it is easy to take down. The plexiglass is held in by two paperclips and easily slides out. This makes working on the machine easy.
The most difficult part in construction was lining up the motherboard to the port sheet. A plus side about wood though is that you simply drill another hole if your first one isn't quite right.


[gecode-users] Gecode
Mikael Zayenz Lagerkvist
zayenz at gmail.com
Mon May 14 16:51:57 CEST 2007
Hi,
While integer division and modulo is not available directly, please
remember that they can be rewritten using other constraints. If you
have two constraints
d = a/b
r = a%b
then these can be rewritten into the following constraint
a = d*b + r
which can be implemented with
t = d*b
a = t + r
Hope this helps,
Mikael
On 5/14/07, kemmar amina <kemmami at yahoo.fr> wrote:
> Hi,
> I am using GECODE in my project, I want to know if the arithmetic operators
> : division "/ " and modulo "%" exist in gecode. this information is very
> necesery for me. please help me. If they don't exist , what is the reason?
> thank you very much.
>
> ________________________________
> Ne gardez plus qu'une seule adresse mail ! Copiez vos mails vers Yahoo!
> Mail
>
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
>
>
--
Mikael Zayenz Lagerkvist, http://www.ict.kth.se/~zayenz/
More information about the gecode-users
mailing list


The Blockz hand held Device is a portability focused handheld gaming device pre installed with the game Blockz and the device has many features such as:
Blockz is a puzzle game where you have to fill in all 5 LED horizontally and this is made harder by there being 4 diffrent brick veriants and the spawn of these Brickz are random decided by the console, But when you have created a Horizontel line it will count as 1 point although if you fill a line vertically there will be no more room for more bricks to be laid and this will result in a game end.
The following Inputs are how to play the Brickz Game device.
The desing of the Blocks Handheld Gaming device is oriented around the portability if the device so this means we had to design the device to be small enough to fit in someones hand and also small enough to fit inside of a pocket whilst not in use.
The packaging for our device is the first thing which the user will see so we have had countless hours poured into developing packaging which not only fits the design criteria for the Blockz Handheld system but to also capture the simplicity of the device on the front. We have kept our design simple so you can focus on whats inside the box and not whats on the outside.
Some of the files contain images of the product and some files such as the 3D models STL files :
This is the 3D Model assets for the microbit
Here is the Blockz game code made with python feel free to download and use it
Here is the packaging template used to make the current packaging for the Blockz Console.


--- layout: post title: Post-xmas linkfest date: 2004-12-30 00:00:00 category: personal ---
OK, a post-Christmas LinkFest now of stuff that's been saved over the last few days. I didn't manage to completely get offline but had a couple of 24-hour periods without email and managed not to blog. Flickr, of course, is now part of everyday life so that doesn't count :)


This is a minimal Electron/YeAPF! boilerplate
You need to have npm installed on your system.
After that, go to your console and do
npm install
npm start
This is a minimal Electron/YeAPF! boilerplate
You need to have npm installed on your system.
After that, go to your console and do
npm install
npm start


1 Samuel 31:9
And they cut off his head, and stripped off his armor, and sent into the land of the Philistines round about, to publish it in the house of their idols, and among the people.


Brazil antitrust regulator to reassess Disney-Fox deal
SAO PAULO (Reuters) - Brazil’s antitrust regulator said on Wednesday it will reassess Walt Disney Co’s (DIS.N) $71 billion purchase of Twenty-First Century Fox (FOXA.O) because the divestiture requested by the regulator as a condition for the merger of U.S. media companies has not happened yet.
“The deal approved in February was contingent on the sale of the Fox Sports channel. As the sale was not finalized, the case will be re-examined,” the regulator known as ‘Cade’ said in a statement.
The regulator said it requested the sale of Fox Sports to maintain the same level of competition in the Brazilian market after the deal, with three different sports options: SporTV, ESPN and the service provided by a new company with the Fox assets.
The companies “tried” to comply with the request, but had not succeeded, the regulator said.
Cade head Alexandre Barreto said the reassessment will consider “other options,” without giving details.
The original decision in Brazil was similar to one by the Mexican telecoms regulator IFT, which also requested in March the sale of Fox sports channels in the country.