Type some JavaScript here:
Getting started with regex
This interactive tutorial serves as an introduction to regular expressions, specifically regular expressions in JavaScript. This will still teach you to write regular expressions that work in other languages, but you should be aware that there are differences.
The console to the left is just a JavaScript console. Tell us your name using setName('Your name')
(substituting your name in) to get started with the tutorial.
There are a number of useful commands: run help()
to view them.
What are regular expressions?
A regular expression (also known as a regex or a regexp) is a string for describing a search pattern—similar to asterisks for wildcard file name matching, but more powerful (and thus more complicated).
We'll start with a very basic example so that you can get the hang of the syntax and regular expressions in JavaScript.
The bio
variable contains a string which may or may not contain your name. To see if it does, type bio.match(/{{ firstEscaped }}/);
It does!
There are a couple things that you can get from the previous example. The first is the syntax used to define regular expressions: you simply surround your expression in forward slashes:
/your expression/
If you type that into the console, you'll see that the regular expressions is returned.
The second is that you can use the .match()
method to test an expression on a string. There are a couple other methods you can call: you can use the .exec()
method directly on the regex to execute a string on a regex. Type /{{ firstEscaped }}/.exec(bio)
.
Simple testing
The .exec()
method does the same thing as the .match()
function, but is called on the expression instead of the string—this can be pretty useful.
Another method you can use—and probably the simplest of them all—is the .test()
method. It is similar to .exec()
, but returns a boolean value. Try it out!
Helpful hint: you can use the up arrow on your keyboard to go back to a previous expression.
String replacements
The final method we'll be using is the .replace()
method of a string to replace a bit of a string with another string. Type the following to hide your name from the bio
var:
bio.replace(/{{ firstEscaped }}/, '[redacted]')
Special characters
None of the expressions we have used so far have been especially interesting, and haven't contained any special characters. The following characters need escaping in regular expressions:
$()*+.?[^|]
To escape them, use a backslash, eg /what\?/
.
Write an expression to see if the num
variable contains the string "3.5".
The dot operator
It doesn't! num
equalled 123456, and so didn't contain the string "3.5".
The dot character has a special meaning in regular expressions: it matches any single character except for new line characters (so /a.c/
would match "abc", "a c", "a$c", etc). Using /3.5/
without escaping the dot would match the string stored in the num
, as the dot operator would match the 4.
Try it out.
Quantifiers
There are a number of "quantifiers" that you can use to say how many times something should be matched. The first one is the question mark, which makes the previous token in the expression (the previous character or group of characters) optional.
The expression /regexp?/
will match both "regex" and "regexp", as the question mark makes the p (but only the p) optional.
Write an expression that will match both "frontend" and "front-end", and give it as an argument to the answer()
function (eg answer(/your expression/)
).
The plus sign
The next quantifier we'll be looking at is the plus sign. It means "one or more of the previous token"; /Princes+/
will match "Princes", "Princess", "Princesssss", etc. It will not, however, match "Prince".
The next expression you need to write is a little trickier. Write a regular expression which extracts everything between the opening and closing parentheses of the shortStory
variable (note that you can view the contents of the variable just by typing shortStory
). Hint: you'll need the previously mentioned dot operator.
The asterisk
Similar to the plus sign is the asterisk; but instead of meaning "one or more", the asterisk means "zero or more" of the previous token. /Princes*/
, in addition to matching all the examples from /Princes+/
, would also match "Prince".
Repeat the previous example, but using the asterisk instead of the plus sign. Extract everything from the shortStory
variable between the opening and closing parentheses, even if there is nothing there.
Limited repetition
There is one final quantifier that you can use which allows you to limit repetition. The syntax is {min,max}
which min is the minimum number of repetitions and max the maximum. For example, /a{3,5}/
would match "aaa", "aaaa" and "aaaaa", but nothing else.
Write an expression to match the text between an opening and closing parenthesis in the bracketNumbers
variable—but only if the contents are between 5 and 8 characters long.
More limited repetition
In addition to specifying a range of repetitions, you can specify an exact number of repetitions using {n}
where n is the number of repetitions. The expression a{6}
, for example, will match exactly six repetitions of the letter a.
You can leave out the maximum when using curly parentheses, which will match at least minimum values, with no maximum limit. For example, /a{5,}/
will match five or more of the letter a.
Pass the answer()
function the equivalent of /a?b+c*/
, but without using any of these characters: ?*+
Flags—the case insensitive flag
Flags are used to modify the behaviour of a regular expression, and they are specified after the expression (eg /your expression/ig
). Each flag is represented by a letter, and JavaScript supports four of them—two of which will be covered in this tutorial. The i
flag makes the expression case insensitive—while without the flag /a/
would match "a" and not "A", /a/i
would match both "a" and "A".
Run /CAT/i.exec('Category')
to see the i
flag in action.
Flags—The global flag
The second commonly used flag is the global flag, represented by the letter g
. While /a/
only matches the first a in the string given to it, /a/g
would match every single letter a.
Write a regular expression to replace every instance of the letter "a" in the shortStory
variable with the letter "e".
Remember that strings have a .replace(expr, replace)
method that you can use for replacements.
Character classes
Character classes allow you to specify a set or range of characters to be matched. /[aeiou]/
matches any vowel, /[a-m]/
matches any letter in the first half of the alphabet, and /[aeiou0-9]/
matches any vowel or digit.
Note that inside a character class, you don't need to escape dots and they will be matched literally. If you want a literal hyphen, however, you will need to escape it.
We're given a string which should contain a username consisting of 5 to 12 letters (uppercase or lowercase) or hyphens. Write some code that will return true if the username
variable contains a valid username.
Negated character classes
A negated character class will match any character that isn't in the character class. You negate a character class by putting a caret character (^) at the beginning of the class. For example, /[^a-m]/
will match "z" and "$", but it will not match "c".
It's important to note the distinction between "not [a-m]" and "something that isn't [a-m]". /c[^a]t/
will match "cut", but it won't match "cat" and it won't match "ct"—this is important.
The username can now contain any character that isn't a space (but still has to be between 5 and 12 characters long). Write a new expression to validate the username
variable.
Character types
Character types can be used as shorthand for common character classes. There are six character types: \d
matches decimal digits (0-9), \s
matches whitespace characters, and \w
matches word characters (letters—including international characters—numbers and the underscore).
The other three character types can be found by capitalising the first three character types, which will negate their effect; \S
while match any non-whitespace character, for example.
Write an expression to match a word, followed by a space, followed by a string of digits. Test the charTypeTest
variable with it: don't use any literal characters.
Positions
If you want to make sure that an expression starts or ends at a certain place in a word—for example, if you want to make sure that a string starts with a capital letter—then you can use an anchor. The dollar sign matches the end of a string, and the caret sign (^) matches the beginning. /^cat$/
will match "cat" and nothing else (while just /cat/
will match anything with "cat" in.
Write an expression to test whether the possibleUrl
variable starts with "http://" or "https://" and then doesn't contain any spaces all the way to the end.
Hint: Use a question mark for the protocol, and then a negated character class for the rest. You'll need both anchors.
Capturing groups
You can use parentheses to create groups, which can group multiple tokens together or store a result for later reference:
/"(.+)"/
That's an example of a capturing group, meaning that the part of the matched string within the parentheses is saved to a later point in the array returned by .match()
or .exec()
.
Take our previous example where we grabbed the data between two parentheses using an expression like /\(.{5,8}\)/.exec(shorterStory)
. Try running that again, and then wrapping ".{5,8}
" in parentheses and trying again.
Non-capturing groups
You can see that the array is now two items long: the first item is the entire match, and the second is only the data that the capturing group matched.
There is another type of group called a non-capturing group. This type of group, which has a slightly different syntax, doesn't store the value to an array. If you don't need to refer back to the group, you should prefer a non-capturing group: it keeps the return array cleaner. Turn the group in the previous expression into a non-capturing group by inserting "?:
" into the beginning of the group before the dot.
Quantifiers
It's almost as if we don't have a group.
The main use of non-capturing groups is to apply a quantifier to a number of tokens. The following would match "I ate" and "{{ firstName }} and I ate", but nothing else:
/^(?:{{ firstEscaped }} and )?I ate$/
Write an expression which matches "ha" repeated two or more times (eg, "haha" or "hahahahaha"), and pass it the answer()
function.
Hint: your expression shouldn't match "hahah". Use anchors to ensure that it doesn't.
The pipe symbol
You can specify an "or" using the pipe symbol (|). The following will match "The dog ate" and "The cat ate":
/The (dog|cat) ate/
We could also use a non-capturing group, but in this case we wanted to access the result. You can use as many pipes in one group as you want. Make the previous expression match "The rabbit ate" (currently stored in the rabbit
variable), in addition to what it used to match.
Backreferences
You can reference the value of a previous capturing group later within the same expression. You simply write a backslash followed by the number of the capturing group (the index of where it will be in the returned array). For example, the following will match "The cat ate with the other cat" and "The dog ate with the other dog", but not "the cat ate with the other dog" (after all, that would just be absurd):
/The (dog|cat) ate with the other \1/
Write an expression to match the same two words in a row (eg "hello hello world"): give the expression to the answer()
function as in previous examples.
The RegExp object
In addition to the literal operator (the slashes), JavaScript provides a RegExp constructor which allows you to specify your desired expression as a string. This is useful for putting variable in expressions. It works like this:
// Same as /regexp?/ig
new RegExp('regexp?', 'ig');
The username contains a variable (still). The userData
variable contains user data: print it to the console to see the format of the data. Use the username
variable to extract the word associated with our user. Please put your entire answer on one line so that it can be validated.
Advanced replacement
We've seen two ways in which capturing groups can have their captured value used later on: the first was the returned array, and the second was in a backreference. You can also access them from the second argument of the string .replace()
method:
var text = '*italic text*';
var replace = '$1';
text.replace(/\*([^*]+)\*/, replace);
Write some similar code, but to turn the value of the boldText
variable into a
element.
Lazy vs greedy matching
By default, pattern matching in JavaScript is "greedy", which means that it matches as much as it possibly can:
'"Hi", "Hello"'.match(/".+"/)
That will return "Hi", "Hello"
, as it matches the two outermost quotes. Lazy pattern matching is the opposite of greedy pattern matching, and will match as little as possible—so in this case, only "Hi"
.
Lazy pattern matching can be achieved by putting a question mark after the quantifier—try it out with the example above.
Assertions
An assertion is a pattern that should be matched, but will not be stored: so instead of "match a and then b", we have "match a that is followed by b, but don't match b". There are two types of assertion supported in JavaScript, positive lookaheads and negative lookaheads. Lookaheads just means looking forwards; JavaScript doesn't support lookbehinds.
A positive lookahead means that we want to look ahead for a match. To look for an a followed by a b, we could use /a(?=b)/
.
Use an assertion to extract "6+3" from the partialSums
variable. Don't use any literal digits, use \d
.
Negative assertions
Assertions can also be negative, to say that you want to match something that isn't followed by something. Note that unlike a character class, this can match something that isn't that—if you say "a that isn't followed by b", the a can be at the end of the string.
The syntax for a negative assertion is similar to that of a positive assertion, but you replace the equals sign with an exclamation mark: for example, /a(?!b)/
would find a letter a that isn't followed by a letter b.
Use a positive assertion followed by a negative assertion to extract "3+3" from the partialSums
variable.
You have finished!
Congratulations, {{ firstName }}, on finishing Try Regex. You've now briefly covered most areas of regular expressions in JavaScript, and you should be able to write regex for most situations.
For further reading, try out the following links:
- Mozilla Developer Network: Regular Expressions
- JavaScript Regular Expression Enlightenment by Cody Lindley
- DZone: The Essential Regular Expressions Cheat Sheet by Callum Macrae
- RegExp playground by Lea Verou
- regular-expressions.info for a general, non-language-specific guide.


The accent-color Property
Accent color for checkboxes:
Do you support accent-color and Hex colors
Do you support accent-color and RGB colors
Do you support accent-color and HSL colors
Do you support accent-color and Predefined colors


Miner Bolter:
May Maphr, god of abundance, bless you today! Nice to meet you, young friend! How come you're in such a hurry?
Did you come to the strip mine to receive training? Or are you on your way to the village? If you're going to the village, I've got a favor to ask.
Quest


Google Pixel 3 users report early shutdown issues w/ some units on low battery
by Ben SchoonIf you’ll recall a few years back, owners of the Nexus 6P were reporting issues of their phones shutting down well before the system reported a dead battery. Now, some Pixel 3 owners are reporting similar early shutdown issues on their devices when on low battery.
Spotted by Android Police, reports have been surfacing over the past few months from various Pixel 3 and Pixel 3 XL owners who are experiencing similar issues. The general issue here is that devices are shutting down before hitting 0%, specifically between 20% and 40%.
In some cases, the device will randomly shut down when under this total but, on others, it will trickle down quickly after hitting the halfway mark. Google’s only advice to users experiencing this issue includes rebooting to safe mode or performing a factory reset. For many users, the issue is still covered under warranty, meaning that replacements are available.
This early shutdown issue on the Pixel 3 series doesn’t seem nearly as widespread as it was on the Nexus 6P, but it’s still a very frustrating problem to see. Google was recently sued regarding that issue on the Nexus 6P, so hopefully the company will learn from that and offer a better solution to affected Pixel owners.
More on Pixel 3:
- Google brings ‘vibrate then ring’ option to Pixel smartphones
- Hands on: iOttie’s fast wireless car charger is a great option for Pixel owners
- Google Pixel 3 vs Pixel 4 comparison: Should you upgrade?
FTC: We use income earning auto affiliate links. More.


public abstract class ResponseWriter
extends java.io.Writer
ResponseWriter
is an abstract class describing an adapter to an underlying output
mechanism for character-based output. In addition to the low-level
write()
methods inherited from
java.io.Writer
, this class provides utility methods that
are useful in producing elements and attributes for markup languages
like HTML and XML.
| Constructor and Description |
|---|
ResponseWriter() |
| Modifier and Type | Method and Description |
|---|---|
abstract ResponseWriter |
cloneWithWriter(java.io.Writer writer)
Create and return a new instance of this
ResponseWriter ,
using the specified Writer as the output destination. |
void |
endCDATA()
Close an XML |
abstract void |
endDocument()
Write whatever text should end a response.
|
abstract void |
endElement(java.lang.String name)
Write the end of an element,
after closing any open element
created by a call to
startElement() . |
abstract void |
flush()
Flush any ouput buffered by the output method to the
underlying Writer or OutputStream.
|
abstract java.lang.String |
getCharacterEncoding()
Return the character encoding (such as "ISO-8859-1") for this
ResponseWriter . |
abstract java.lang.String |
getContentType()
Return the content type (such as "text/html") for this
ResponseWriter . |
void |
startCDATA()
Open an XML |
abstract void |
startDocument()
Write whatever text should begin a response.
|
abstract void |
startElement(java.lang.String name,
UIComponent component)
Write the start of an element,
up to and including the
element name.
|
abstract void |
writeAttribute(java.lang.String name,
java.lang.Object value,
java.lang.String property)
Write an attribute name and corresponding value, after converting
that text to a String (if necessary), and after performing any escaping
appropriate for the markup language being rendered.
|
abstract void |
writeComment(java.lang.Object comment)
Write a comment containing the specified text, after converting
that text to a String (if necessary), and after performing any escaping
appropriate for the markup language being rendered.
|
void |
writeDoctype(java.lang.String doctype)
Write a string containing the markup specific doctype. |
void |
writePreamble(java.lang.String preamble)
Write a string containing the markup specific preamble. |
abstract void |
writeText(char[] text,
int off,
int len)
Write text from a character array, after any performing any
escaping appropriate for the markup language being rendered.
|
abstract void |
writeText(java.lang.Object text,
java.lang.String property)
Write an object, after converting it to a String (if necessary),
and after performing any escaping appropriate for the markup language
being rendered.
|
void |
writeText(java.lang.Object text,
UIComponent component,
java.lang.String property)
Write an object, after converting it to a String (if
necessary), and after performing any escaping appropriate for the
markup language being rendered.
|
abstract void |
writeURIAttribute(java.lang.String name,
java.lang.Object value,
java.lang.String property)
Write a URI
attribute name and corresponding value, after converting that
text to a String (if necessary), and after performing any
encoding or escaping
appropriate to the markup language being rendered.
|
public abstract java.lang.String getContentType()
Return the content type (such as "text/html") for this ResponseWriter
. Note: this must not include the "charset="
suffix.
public abstract java.lang.String getCharacterEncoding()
Return the character encoding (such as "ISO-8859-1") for this
ResponseWriter
. Please see the
IANA for a list of character encodings.
public abstract void flush() throws java.io.IOException
Flush any ouput buffered by the output method to the
underlying Writer or OutputStream. This method
will not flush the underlying Writer or OutputStream; it
simply clears any values buffered by this ResponseWriter
.
flush
in interface java.io.Flushable
flush
in class java.io.Writer
java.io.IOException
public abstract void startDocument() throws java.io.IOException
Write whatever text should begin a response.
java.io.IOException
- if an input/output error occurspublic abstract void endDocument() throws java.io.IOException
Write whatever text should end a response. If there is an open
element that has been created by a call to startElement()
,
that element will be closed first.
java.io.IOException
- if an input/output error occurspublic abstract void startElement(java.lang.String name, UIComponent component) throws java.io.IOException
Write the start of an element,
up to and including the
element name. Once this method has been called, clients can
call the writeAttribute()
or
writeURIAttribute()
methods to add attributes and
corresponding values. The starting element will be closed
(that is, the trailing '>' character added)
on any subsequent call to startElement()
,
writeComment()
,
writeText()
, endElement()
,
endDocument()
, close()
,
flush()
, or write()
.
If the argument component's pass through attributes
includes an attribute of the name given by the value of the symbolic
constant Renderer.PASSTHROUGH_RENDERER_LOCALNAME_KEY
,
use that as the element name, instead of the value passed as the first
parameter to this method. Care must be taken so that this value
is not also rendered when any other pass through attributes on this component
are rendered.
name
- Name of the element to be startedcomponent
- The UIComponent
(if any) to which this
element corresponds. This component is
inspected for its pass through attributes as
described in the standard HTML_BASIC RenderKit
specification.java.io.IOException
- if an input/output error occursjava.lang.NullPointerException
- if name
is null
public abstract void endElement(java.lang.String name) throws java.io.IOException
Write the end of an element,
after closing any open element
created by a call to startElement()
. Elements must be
closed in the inverse order from which they were opened; it is an
error to do otherwise.
If the argument component's pass through attributes
includes an attribute of the name given by the value of the symbolic
constant Renderer.PASSTHROUGH_RENDERER_LOCALNAME_KEY
,
use that as the element name, instead of the value passed as the first
parameter to this method.
name
- Name of the element to be endedjava.io.IOException
- if an input/output error occursjava.lang.NullPointerException
- if name
is null
public abstract void writeAttribute(java.lang.String name, java.lang.Object value, java.lang.String property) throws java.io.IOException
Write an attribute name and corresponding value, after converting
that text to a String (if necessary), and after performing any escaping
appropriate for the markup language being rendered.
This method may only be called after a call to
startElement()
, and before the opened element has been
closed.
name
- Attribute name to be addedvalue
- Attribute value to be addedproperty
- Name of the property or attribute (if any) of the
UIComponent
associated with the containing element,
to which this generated attribute correspondsjava.lang.IllegalStateException
- if this method is called when there
is no currently open elementjava.io.IOException
- if an input/output error occursjava.lang.NullPointerException
- if name
is
null
public abstract void writeURIAttribute(java.lang.String name, java.lang.Object value, java.lang.String property) throws java.io.IOException
Write a URI
attribute name and corresponding value, after converting that
text to a String (if necessary), and after performing any
encoding or escaping
appropriate to the markup language being rendered. When rendering in a WWW environment,
the escaping conventions established in the W3C URI spec document
<http://www.w3.org/Addressing/URL/uri-spec.html>
must be followed. In particular, spaces ' ' must be encoded as
%20 and not the plus character '+'. This method may only
be called after a call to startElement()
, and before
the opened element has been closed.
name
- Attribute name to be addedvalue
- Attribute value to be addedproperty
- Name of the property or attribute (if any) of the
UIComponent
associated with the containing element,
to which this generated attribute correspondsjava.lang.IllegalStateException
- if this method is called when there
is no currently open elementjava.io.IOException
- if an input/output error occursjava.lang.NullPointerException
- if name
is
null
public void startCDATA() throws java.io.IOException
Open an XML CDATA
block. Note that XML does not allow nested CDATA
blocks, though this method does not enforce that constraint. The
default implementation of this method takes no action when
invoked.
java.io.IOException
- if input/output error occurespublic void endCDATA() throws java.io.IOException
Close an XML CDATA
block. The default implementation of this method takes no action
when invoked.
java.io.IOException
- if input/output error occurespublic abstract void writeComment(java.lang.Object comment) throws java.io.IOException
Write a comment containing the specified text, after converting
that text to a String (if necessary), and after performing any escaping
appropriate for the markup language being rendered. If there is
an open element that has been created by a call to
startElement()
, that element will be closed first.
comment
- Text content of the commentjava.io.IOException
- if an input/output error occursjava.lang.NullPointerException
- if comment
is null
public void writePreamble(java.lang.String preamble) throws java.io.IOException
Write a string containing the markup specific
preamble.
No escaping is performed. The default
implementation simply calls through to Writer.write(java.lang.String)
.
The implementation makes no checks if this is the correct place in the response to have a preamble, nor does it prevent the preamble from being written more than once.
preamble
- Text content of the preamblejava.io.IOException
- if an input/output error occurspublic void writeDoctype(java.lang.String doctype) throws java.io.IOException
Write a string containing the markup specific
doctype.
No escaping is performed. The default
implementation simply calls through to Writer.write(java.lang.String)
.
The implementation makes no checks if this is the correct place in the response to have a doctype, nor does it prevent the doctype from being written more than once.
doctype
- Text content of the doctypejava.io.IOException
- if an input/output error occurspublic abstract void writeText(java.lang.Object text, java.lang.String property) throws java.io.IOException
Write an object, after converting it to a String (if necessary),
and after performing any escaping appropriate for the markup language
being rendered. If there is an open element that has been created
by a call to startElement()
, that element will be closed
first.
text
- Text to be writtenproperty
- Name of the property or attribute (if any) of the
UIComponent
associated with the containing element,
to which this generated text correspondsjava.io.IOException
- if an input/output error occursjava.lang.NullPointerException
- if text
is null
public void writeText(java.lang.Object text, UIComponent component, java.lang.String property) throws java.io.IOException
Write an object, after converting it to a String (if
necessary), and after performing any escaping appropriate for the
markup language being rendered. This method is equivalent to
writeText(java.lang.Object,java.lang.String)
but adds a
component
property to allow custom
ResponseWriter
implementations to associate a
component with an arbitrary portion of text.
The default implementation simply ignores the
component
argument and calls through to writeText(java.lang.Object,java.lang.String)
text
- Text to be writtencomponent
- The UIComponent
(if any) to which
this element correspondsproperty
- Name of the property or attribute (if any) of the
UIComponent
associated with the containing element,
to which this generated text correspondsjava.io.IOException
- if an input/output error occursjava.lang.NullPointerException
- if text
is null
public abstract void writeText(char[] text, int off, int len) throws java.io.IOException
Write text from a character array, after any performing any
escaping appropriate for the markup language being rendered.
If there is an open element that has been created by a call to
startElement()
, that element will be closed first.
text
- Text to be writtenoff
- Starting offset (zero-relative)len
- Number of characters to be writtenjava.lang.IndexOutOfBoundsException
- if the calculated starting or
ending position is outside the bounds of the character arrayjava.io.IOException
- if an input/output error occursjava.lang.NullPointerException
- if text
is null
public abstract ResponseWriter cloneWithWriter(java.io.Writer writer)
Create and return a new instance of this ResponseWriter
,
using the specified Writer
as the output destination.
writer
- The Writer
that is the output destinationResponseWriter


COVID-19 Testing Locations
Read more
about getting tested in San Francisco
Filter Locations
All Sites
No Insurance Required
Sort Locations
Alphabetically
Closest to Me


{% extends "base.html" %} {% block body %}
We'll show you your app.net user ID but you will have to login first!
login with app.netIs this safe? We won't store your login in any database, just in a session which will expire all by itself. So yeah?
{% endblock %}


The host description panel displays the name and the time of the last update for the currently selected host. If the node manager finds a PNG image in node_manager_fkie/images (this path can be changed in settings tab in node manager) with the same name as the host, it is used as icon. The icon can be also changed by double click on it or by setting the ROS parameter /robot_icon to an image file.
Additionally the panel will be colorized with a color depend on the host name. This can be deactivated on the settings panel.
The host description panel contains additional buttons to update the state of the host or run ROS tools:
| This symbol is only visible, if /use_sim_time parameter is set to True. | |
| for remote hosts the usename can be changed. This box is only visible for remote hosts. | |
| Change time on remote host. | |
| requests the current state of the ROS master. | |
| opens a dialog to run a ROS node without a configuration. This node is launched in a dedicated terminal session using the screen tool, so you can monitor its output if necessary. | |
| runs the rqt tools (Console, Logger Level, TF Tree, Ros Graph and rqt_gui) which are connected to the ROS master on the selected host. | |
| enables or disables the ROS Master synchronization on the selected host using synchronisation dialog with additional options. For full list of synchronization options see master_sync |


Contribute
Anyone is welcome to contribute to Gammapy !
The Gammapy Project is made both by and for its users, so we welcome and encourage contributions of many kinds. Our goal is to keep this a positive, inclusive, successful, and growing community by abiding with the Gammapy Community Code of Conduct.
Start by using Gammapy!! The "Getting Started" section of our documentation will give you the first steps. Then if you notice a missing feature or issue, please report it (see contact page), and if you are interested in contributing to the development, we can team you up with a mentor from the Gammapy team to do it.
As developer, we can also contribute by presenting your activities into conferences, by making tutorial presenting recipies or by animating a Gammapy school or hands-on session. The list of contributions by type is given in the following list:


%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
| Title | |
| Description | |
| Organization | |
| Currency | |
| Type | |
| Status | |
| Start Date & Time | |
| End Date & Time | |
| Location | |
| GPS Coordinates | |
| Country | |
| Region | |
| Number of Drums | |
| Number of People | |
| Number of Facilitators | |
| Number of Sessions | |
| Session Duration | |
| Chairs Required | |
| Staff Assigned | |
| Client Company | |
| Client Contact Person | |
| Client Phone | |
| Client Email | |
| Client Address | |
| Hiring Agent Company | |
| Hiring Agent Contact Person | |
| Hiring Agent Phone | |
| Hiring Agent Email | |
| Hiring Agent Address | |
| Use in Documents | |
| Notes | |
| Private Notes | |
| Amount Payable | |
| Paid | |
| Paid Amount | |
| Paid Date | |
| Payment Method | |
| Payment Notes | |
| Receipt Voucher | |
| Created Date | |
| Created User | |
| Modified Date | |
| Modified User |


Be ashamed $VBK @VeriBlock . Be very ashamed. Please spread this crypto twitter. 714 mil $VBK premined since Testnet and disguised as Block 0 into Main Net. Shame
LOL
Gordon Komodo02-Apr-19 09:47 PM
@crunchycat why didn't you jump all over this negative tweet about VBK ?
Cryptoon02-Apr-19 09:47 PM
So the 66% that is to be mined
Already is mined for a huge piece
Gg
And now its clear why so many miners are already protecting bags
They aren’t securing anything yet. Also so far I’m not quite sure what prevents an attacker from 51% VBK and protected chain simultaneously where they just notarize attackers fake protected chain over the real one.
Or have a chain using it so the system can be tested
I don’t understand close source for things that are supposed to be open source (eventually) .
PTYX02-Apr-19 11:35 PM
Smells wrong all over. And people not questioning the closed source launch is strange as well
p.02-Apr-19 11:41 PM
just a casual 112 btc sell wall at 350 sats lol
Cye_BigDaddy02-Apr-19 11:54 PM
When open source ?
1
1
#hackincoming
polycryptoblog02-Apr-19 11:55 PM
Exactly , when in q2
Would like to spawn a chain to test your claims
Cye_BigDaddy02-Apr-19 11:55 PM
Not my chain.
How much do you want for a PoP bot?
yeah but i asked you something else.
a bot that can do the PoP for me. Like looking at the correct fee and if fees are increasing i need it to be able to built cptf chains
sending btc tx from the pop miner basically
name your price
Alexfrog03-Apr-19 12:04 AM
kmd
p.03-Apr-19 12:04 AM
pamp
polycryptoblog03-Apr-19 12:05 AM
There are several fee estimators for btc, surprise there isn’t API you could use
Cye_BigDaddy03-Apr-19 12:05 AM
@polycryptoblog the is for sure.
or better is just to have the current fee+2 and then to be able to build cptf chains or whatever they are called
80 is too much right now soo no good
I know what KMD is but thanks for the introduction.
ahh interesting.
1
Alecandro03-Apr-19 12:14 AM
Nice lil move there on KMD
Cye_BigDaddy03-Apr-19 12:14 AM
i'm waiting for that DEX app. When? I believe ZEL will be the first
This thread is dedicated to provide hardened Lineage-OS 15.1 builds with microG included for the OnePlus 3/3T with current security patches. Features of t…
Buddz199303-Apr-19 12:25 AM
I guess so lol
blackjok3r03-Apr-19 12:25 AM
best phone ive used ro seen
Buddz199303-Apr-19 12:27 AM
I use an iPhone but it’s provided by my employer so , but Android is a different end game .
Alright03-Apr-19 12:27 AM
@Cye_BigDaddy ditching SAFE for VBK?
blackjok3r03-Apr-19 12:28 AM
@Deleted User It starts all apps in a sandbox like thing... Nearly all apps have a fully open source one avalible on F-Droid, banking app and discordexception my my phone
I dont think Agama wallet is on F-Droid that is open source yes? We should submit it there
Cye_BigDaddy03-Apr-19 12:31 AM
@Alright i'm in SAFE and VBK
1
blackjok3r03-Apr-19 12:31 AM
I got the oneplus 3T from ebay out of HongKong for liek $400 AUD and flashed it myself
Id rather have no phone... but after 3 weeks without one I was force to get one... This is a decent compromise I guess
I think you can get 4-5 of these for same price as iPhone
Very much dont get it myself...  They said they will so i'm counting on that.
blackjok3r03-Apr-19 12:34 AM
until its not
The most profit ive made, was from reading open source sources and learning how they work then improving them....
not speculating on some closed source thing that is probably broken
Cye_BigDaddy03-Apr-19 12:35 AM
Thats video was funny tho
1
blackjok3r03-Apr-19 12:37 AM
This is very true
but if its open source its ewasier to find the broken part and fix it(edited)
This is why windows is so terrible (edited)
polycryptoblog03-Apr-19 12:38 AM
Works as intended
blackjok3r03-Apr-19 12:38 AM
it works?
hmmm
windowz XP 4 life
1
1
polycryptoblog03-Apr-19 12:40 AM
Hehe you wouldn’t believe the amount of nuke plants running it
1
Mind you not all they run, wide diversity of OS, but nearly all control interfaces I saw linked into xp
blackjok3r03-Apr-19 12:42 AM
I guess if its not connected to the internet then its fine right
Universities teach windows specific advanced things using this project since unlike Microsoft Windows they don't have to reverse engineer the binary code(edited)
1
This project also got sued by Microsoft back in the days, and they won those cases. The allegations were that they stole the microsoft code to create the dll files for their open source OS project. The project proved they coded the same dll by coding themself, since to achive the same result the part of code bits had to go through the same code logic.... something like that... have followed this project for some time when I was doing sys admin jobs for some time back in the days.
I read somewhere recently that hackers been able to put malware code into the USB cables itself.
they don't even need to be the full memory flash drives, just plug the cable to charge or connect another device and get hacked!


ISSUE No.1
DETAILS OF THE ISSUE BEING POSTED
ISSUE No.2
DETAILS OF THE ISSUE BEING POSTED
ISSUE No.3
DETAILS OF THE ISSUE BEING POSTED
ISSUE No.4
DETAILS OF THE ISSUE BEING POSTED
ISSUE No.5
DETAILS OF THE ISSUE BEING POSTED
ISSUE No.6
DETAILS OF THE ISSUE BEING POSTED


unichance.xyz is anonymous and without verification. You're free to shout your results with the world - we trust our users.


This page, "minimal.html", aims to demonstrate the bare minimum needed to add Hubo to a webpage.Take a look at the page's source to see what JavaScript to include.
You will also need to have the URDF model and COLLADA files on your server.
Hubo should load below within a minute, if you're running NodeJS locally.
|
LEFT button ROTATES. RIGHT button PANS. MIDDLE wheel ZOOMS.
|


Use this panel to setup your database problem (CREATE TABLE, INSERT, and whatever other statements you need to prepare a representative sample of your real database).
Use "Text to DDL" to quickly build your schema objects from text.
Query Panel
Use this panel to try to solve the problem with other SQL statements (SELECTs, etc...).
Results will be displayed below. Share your queries by copying and pasting the URL that is generated after each run.


hello world
We’ve crafted some handsome templates for you to use.
You can @mention a GitHub username to generate a link to their profile. The resulting <a>
element will link to the contributor’s GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.
Having trouble with Pages? Check out our documentation or contact support and we’ll help you sort it out.


The Duchess of Cornwall to visit Shine
by ShineThe Duchess of Cornwall to meet people working to end domestic violence in New Zealand
Shine is delighted to be hosting Her Royal Highness The Duchess of Cornwall and representatives from organisations working to end domestic violence and support victims on Tuesday 19 November.
The Duchess of Cornwall is committed to highlighting the issue of domestic violence and lending her support to the work of domestic violence agencies, like Shine.
Shine General Manager Jane Drumm QSO is grateful for the attention that Her Royal Highness will bring to this often hidden issue.
“It is significant that a member of the Royal Family is prepared to take a stand on the issue of domestic violence. Despite this being a short visit to New Zealand, we are delighted that The Duchess is taking the time to find out more how our nation is tackling this global epidemic.”
There will be discussion on topics specific to New Zealand including recent changes to legislation, such as the new offence of strangulation and the increased workplace obligations, and culturally responsive services for Maori in responding to domestic violence.
Representatives from the NZ Police and Te Roopu O Te Whanau Rangimarie O Tamaki Makaurau will be present, as will Westpac and the Ministry of Justice, early adopters of Shine’s workplace domestic violence programme.
The Duchess of Cornwall will also have an opportunity to speak with staff at Shine who work on the frontlines.


Do it for the people who want to see you fail.
Results-driven and certified Swimming Instructor capable of providing professional lessons and instructions on different swimming styles to various age groups.
Read MoreResults-driven and certified Swimming Instructor capable of providing professional lessons and instructions on different swimming styles to various age groups.
Read MoreResults-driven and certified Swimming Instructor capable of providing professional lessons and instructions on different swimming styles to various age groups.
Read MoreResults-driven and certified Swimming Instructor capable of providing professional lessons and instructions on different swimming styles to various age groups.
Read MoreResults-driven and certified Swimming Instructor capable of providing professional lessons and instructions on different swimming styles to various age groups.
Read MoreResults-driven and certified Swimming Instructor capable of providing professional lessons and instructions on different swimming styles to various age groups.
Read MoreSwimming, in recreation and sports, the propulsion of the body through water by combined arm and leg motions and the natural flotation of the body. Swimming as an exercise is popular as an all-around body developer and is particularly useful in therapy and as exercise for physically handicapped persons.


By Phil Curtolo
Occasionally, everyone needs to see a movie where they can let it all down and get a good scare. If you're that kind of person, then I would recommend seeing director Peter Hyams' new film, The Relic.
This originally frightful film stars Penelope Anne Miller (The Shadow), as an over-worked and under-credited biologist at a wealthy Chicago museum and Tom Sizemore, (Devil in a Blue Dress) as an ironically superstitious police detective. Both performances were filled to their extents, as there was not much character build-up other than the recurring "superstitious" ideas.
The Relic may look to be just another Alien-like movie, but to my surprise, it was much more than that. It contained some wicked plot twists, especially about the monster itself. When it came to keeping the audience guessing, no one had a clue of the monsters appearance until the end of the movie, where it's hideous figure was revealed to all.
It turns out that the monster is actually a genetically-cloned freak, containing parts from many animals of the African jungles, making the beast the perfect hunter. The monster had a lion-like appearance, scorpion-like claws, ant-like tentacles, and lizard-like scales. Obviously, the special effects were breath-taking, as the creature looked unbelievably realistic.
The plot is relatively average, like most movies of its caliber. Yet The Relic throws in some interesting plot twists and slight changes. It puts a group of rich aristocrats in a Chicago museum for the grand opening of the brand new "Superstitions" wing. The police warned the party to cancel, after the brutal murder of a museum security guard, failing miserably. The people obviously don't know what they're up against, and they are trapped inside after the beast attacks the museum's central control room. So it's survival of the fittest in harsh conditions, pitting the rich folks against the ferocious creature.
The Relic was, again, very original. Director Hyams uses very dark, shadowy shots mixed with loud, suspenseful music to instill an eerie feeling of fright into his viewers.
If you have not seen this one yet and you like suspenseful, science fiction movies, then you would love The Relic.. Grade: B, *** out of *****
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Address: Bati Nau, Jalandhar 144002 (PB) INDIA Email<EMAIL_ADDRESS>: +91 XXXXXXXXXXXX Website: 360sports.in


If you find that you have a lot of complex logic in your views and helpers, presenters can help you to clean up your code by using object-oriented approach.
Presenter is a component containing user interface logic for a view. Presenters decoples logic from user interface, thus you are able to test your view logic via good old unit tests.
Imagine we have and object representing user’s profile. A first common task is to display user’s full name or username if full name doesn’t exist. A second common task is to display user’s avatar of a particular size or return a fallback.
Implement all this logic in views would be like a noodles, so it will be better to create a presenter for this purposes.
Application.Presenters = Aplication.Presenters || {};
(function () {
'use strict';
Application.Presenters.Profile = function(data) {
this.data = data;
return {
avatarUrl: this.avatarUrl(32),
fullName: this.fullName()
}
}
Application.Presenters.Profile.prototype = {
avatarUrl: function(size) {
var avatarUrl = this.data.avatar
if (!!avatarUrl) {
return [avatarUrl, 'size='+ size].join('&')
}
else{
return 'fallback/user/default.png&size=' + size
}
},
fullName: function(){
var fullName = this.data.name
if (!!fullName) {
return fullName;
}
else {
return this.data.username
}
}
}
})();
The next step is in initialization of the presenter object and passing it to your compiled template
var presenter = new Application.Presenters.Profile(profileObject);
renderTemplate(
yourCompiledTemplate(presenter)
)
Here we go!


How do we reach decisions to act on something? One way to answer this question is the action driven by a decision bringing positive feedback. The feedback is often accompanied by monetary or other forms of rewards; it thereby motivates us to make such decisions in the future.
In the terminology of psychological experiments, the feedback could conceive as been shown in the form of data, which are collected from human and/or animal subjects. In other words, the theories (our prior beliefs) behind every decision that entails an action (prediction) and we then collect data to check how close the prediction fit the data. How? Often the closer our prediction matches the resultant data, the more rewards we might receive. Hence when there are some mismatches between the predictions and the data, we would likely modify our theories/beliefs. They then become posterior belief. This intuitive idea of human decision-making is described by the well-known Bayes’ theorem (Bayes, Price, & Canton, 1763):
- y represents data. For example, a serial of response times in seconds, c(0.533, 0.494, 0.494, …);
- θ represents a set of parameters. That is, it is a parameter vector;
- P(θ) represents our prior belief in the form of a probability distribution, which is fully accounted for the parameter vector. This is often dubbed the prior distribution.
- P(y | θ) represents the mechanism accounting for the data. This is often dubbed (data’s) likelihood function.
- P(θ | y) represents posterior belief, which similar to the prior belief, is often dubbed the posterior distribution.


Mitral cell model used in the paper: Functional structure of the mitral cell dendritic tuft in the rat olfactory bulb. Djurisic, M., Popovic, M., Carnevale, N., and Zecevic, D. Journal of Neuroscience 28:4057-4068, 2008. Questions about how to use this code should be addressed to<EMAIL_ADDRESS>na.mod and kd.mod are identical to the files used in the mitral cell model by Shen, G.Y., Chen, W. R., Midtgaard, J., Shepherd, G.M., and Hines, M.L. (1999) Computational Analysis of Action Potential Initiation in Mitral Cell Soma and Dendrites Based on Dual Patch Recordings. Journal of Neurophysiology 82:3006 These files will generate the data that were used to produce Supplemental Figure 2 of Djurisic et al. (retrograde spike invasion of the tuft with passive or active membrane). First, be sure to compile the mod files with mknrndll or nrnivmodl. After that, the easiest way to proceed is to use NEURON to load mosinit.hoc This will bring up a panel with buttons labeled "Passive tuft" and "Active tuft". Clicking on one of these brings up a model with passive or active tuft membrane, runs a simulation, and displays graphs that show: --Peak spike amplitude throughout the tuft as a function of distance from the tuft origin. For example when the "Passive tuft" button is clicked on one of the graphs shows part of the data in Supplemental Figure 2: --Normalized peak spike amplitude throughout the tuft. --Distribution of peak spike amplitude throughtout the tuft. In this graph, each compartment in the tuft is represented by a vertical blue line with x coordinate that is the peak spike amplitude in that compartment, and height that is 10 x the normalized surface area of that compartment (normalized by dividing compartment area by the total area of the tuft). The black curve is 10 x the smoothed probability of peak spike amplitude, calculated by convolving a Gaussian with Dirac delta functions whose x axis offsets and amplitudes are the spike peak amplitudes and the normalized surface areas of each compartment, respectively. In other words, this is 10 x the peak spike amplitude probability function. --Cumulative membrane area vs. peak spike amplitude. This is the peak spike amplitude distribution function, calculated by integrating the Dirac delta functions (there are so many of them that no smoothing was necessary). For any point on this curve, the y coordinate is the fraction of tuft membrane area in which the spike peak was <= the x coordinate. The horizontal dotted lines at y = 0.1, 0.5, and 0.9 intersect this curve at the 10th, 50th, and 90th percentiles. The x coordinates of these intersections are the peak spike amplitudes that correspond to these percentiles. For the model with passive membrane there is also a small panel with radio buttons that allow changing the values of cm and/or Rm, and running simulations to see how these perturbations alter the results. Running a simluation produces four output files, whose names and contents are: parameters.dat Parameters of the model cell, number of segments (compartments) in the tuft, and the experimental condition. areas.dat Surface areas of all segments (compartments) in the tuft, printed tab separated in the same order as the segments in the tuft SectionList (see * below). Imagine the following loop: for each section in tuft for each compartment in this section, starting at its proximal end, print the area of this compartment vpeak.dat Peak depolarizations in all segments (compartments) in the tuft, printed tab separated in the same order as the segments in the tuft SectionList (see * below). Imagine the following loop: for each section in tuft for each compartment in this section, starting at its proximal end, print the peak depolarization of this compartment results.dat Mean, minimum, maximum, variance and standard deviation of the peak depolarizations in the tuft, printed tab separated. *--This statement forsec tuft print secname() prints out, in sequence, the names of the sections in the tuft SectionList.


Attention!
What does this mean?
You will no longer be able to use RDS, access your projects or use the data management capabilities.
Will I still be able to access my Sciebo data, if I disable Sciebo RDS?
Your Sciebo account is seperate from your RDS account and your data will not be touched. You will still be able to use Sciebo as usual.
Can I reactivate my Sciebo RDS at a later time?
Yes, but your projects will be gone.
If you are sure you do not want to use Sciebo RDS anymore, we would appreciate your honest feedback. RDS is under constant development to satisfy all our users.
In case you want to keep using Sciebo RDS but need help using it, please contact our support.


MISSION AND VISION
OUR VISION
-
To be the Leading Educational Consulting Organization, to create success stories for our students, value additions to partner Institutions and to all other stakeholders.
To become a dynamic and vibrant educational facilitator, that meets competencies in educational consultancy and sets highest benchmarks in tune with growing aspirations of our clients and partner institutions globally.
OUR MISSION
-
Commitment to grow our business with emphasis on Excellence, Honesty, Integrity & Updated knowledge.
To build strong and credible relationships with partner Institutions.
To provide customized solutions to students aspiring to study.
We always keeping in mind the best interest of our stakeholders, partners and clients.
We aim at transforming lives by offering the right education and career guidance for students.
Backed by our expert team of professional consultants, we hope to offer students an opportunity to identify the right universities thereby facilitating lifelong learning.
We ensure that each of our students goes through a hassle-free admission process to the college and university of their choice.
We aim at informing students and organisations about the best educational institutions thus improving the level of learning.
Quality education promotes competency of employees and also results in overall growth and advancement of the society
.


Before Change
*filename* is used as the output name. Returns output filename upon
successful completion.
if not isinstance(filename, str):
raise TypeError("filename must be a string")
if not isfile(filename):
raise ValueError("{0:s} does not exist".format(filename))
if outname is None:
if filename.endswith(".gz"):
outname = filename[:-3]
elif filename.endswith(".tgz"):
After Change
from StringIO import StringIO
buff = gzip.GzipFile(fileobj=StringIO(filename))
if outname is None:
try:
return buff.read()
except IOError:
raise ValueError("filename is not a valid path or a compressed"
" string buffer")
else:
with open(outname, "w") as out:
out.write(buff.read())
return outname


WMS with SLD Examples
We can extend the DynamicMapServiceLayer to work with WMS, giving added flexibilty to use differnt Styles (SLD's).
Default
Saved Style- Income Tax
Saved Style - Blue Polygons
SLD URL - Property Tax
Client Generated SLD - Red Polygons


[§414D-142] Compensation of directors. Unless the articles or bylaws provide otherwise, a board of directors may fix the compensation of directors. [L 2001, c 105, pt of §1]


Welcome to the About page
This team of four students of Politecnico di Torino was built in order to develop the Applicazioni Internet project. In particular this website is related to the assignment 4, where the main goal is to implement a web chat application for the transport system of Torino.
What does this team member to? Keep it short! This is also a great spot for social links!
What does this team member to? Keep it short! This is also a great spot for social links!
What does this team member to? Keep it short! This is also a great spot for social links!
What does this team member to? Keep it short! This is also a great spot for social links!


The form classes create styled inputs and labels for use in forms.
The sky-form-control
class consistently styles the input and allows it to fill the width of its container.
The sky-control-label
class consistently styles labels for form input.
The sky-control-label-required
class indicates that a given input is required to submit a form.
The sky-form-group
class provides consistent vertical spacing between fields.


--- layout: post esbma_id: unknown title: Want to preview our new DataGrid for Xamarin.Forms? date: 2014-11-21 12:00:00 ---
Zumero.DataGrid is a Xamarin.Forms control for displaying data in rows and columns.
If you would be interested in testing and previewing a trial version of this product, email us:
<EMAIL_ADDRESS>We plan to submit this to the Xamarin Component Store where (pending Xamarin's approval) it would be a commercial product. Pricing has not been set.
You'll receive a file in Xamarin Component format (a .xam file) which
you will need to install into your IDE.
(command line: xamarin-component.exe install ZumeroDataGrid-1.0.0.xam)
The component file contains the
libraries for all platforms, plus documentation and samples.
The test component is a trial version. It overlays the contents of some (randomly chosen) grid cells with an orange label that says "Trial". It is otherwise identical to the full version.
This component is unrelated to the one I mentioned in a blog entry back on 3 October. That approach was based on drawing. It was not capable of hosting Xamarin.Forms views, so it couldn't do things like in-place editing. This component is entirely different.
We are eager to hear feedback of any kind.


Fork me on GitHub
Leaflet-providers preview
This page shows mini maps for all the layers available in
Leaflet-providers
.


menu
Emily Taylor
About
Contact
Portfolio
Resume
Zelda's Cut-Throat Kitchen
Eat-Da-Burger
Design-A-Date
Weather Dashboard
Work Day Scheduler
Code Quiz


Born in Oakland and bred in Berkeley, California, Bumbalo’s wears the Bay in his style and lyrics. First and foremost, he is a Bay Area rapper. But, with a raspy, smoky voice, Bumbalo flows a world of words influenced by years of absorbing everything Hip Hop has to offer
The Bumbalo album features appearances from Hip Hop frontrunners and old school legends. Mistah FAB and Goldie Gold of The Federation both join Bumbalo on the album’s first single, “Hyphy Cat.” Mike Marshall, who is best known for singing the hook on the anthem, “I Got 5 On It,” lays vocals that take you straight back to the 80’s … in a good way (see “Rumors” by Timex Social Club). Larry Thomas shines on behalf of New York City on “Watch Out for the Potholes,” while 5th Flow represents the south with class on “Young Fresh Clean Mean.”
Without a doubt, the production on this album is what takes it from solid to stand out. The production team is anchored by boy-wonder Asa Taccone, whose credits include the Saturday Night Live “D*ck in a Box” skit with Justin Timberlake, and collaborations with Danger Mouse, Cee-Lo, Gift of Gab, and Sarah Jones. Other producers include Nick Johnson, Matt Jocelyn, and Egon Brainparts.


--- layout: post title: "Life Changes" date: 2009-02-22 02:23:14 +0000 permalink: /2009/02/22/life-changes/ category: Personal tags: - Life - Work redirect_from: - /blog/life-changes/ ---
A couple of updates, since it's been a while since I've posted anything meaningful.
On March 2nd, I will be starting a new job as an IT System Support Specialist III at Kennesaw State University. Typical of a government job, the title is rather meaningless. To be specific, I will be supporting a variety of Linux and Mac OS X servers for the university and the platforms running on them (Drupal, Moodle, and other technologies.) The production servers are RHEL and the development is on CentOS.
Of course, every good turn comes with a down turn.
On Wednesday, I went to my doctor because of a little bit of abdominal pain for 2 days. Because of the location of the pain, and a bit of an elevated white blood cell count, he sent me over to the ER to get an abdominal CT. Turns out that my appendix was "slightly inflamed". Long story short, about 10PM that night I was in the OR having my appendix removed. It may be a common procedure, but the pain is still pretty decent. Hopefully it will be gone before I have to start the new job. And hopefully I won't have to do heavy lifting in the first couple of weeks of my new job. :)


Reference Page
Some Sub Section
Other Sub Section
Section on another subpage
And what about
the test anchor
?
Some Sub Section
Other Sub Section


1/11/2016
The method Cycle for Ruby Enumerables allows a user to run a code block multiple times or infinitely. Here is an example below of how the method can be used:
array = [0, 5, 10, 15, 20, 25]
array.cycle(2) { |x| puts x + 1 } => 1, 6, 11, 16, 21, 26, 1, 6, 11, 16, 21, 26
array.cycle { |x| puts x + 1 } => 1, 6, 11, 16, 21, 26, 1, 6, .... infintely
As you can see above, if the user does not specify the number of cycles he/she wishes the code block to run, it will run infinitely.


The example above demonstrates how to have nested splitter directives which allow a mix of both horizontal and vertical panels.
splitter


Search Within Restaurants
Restaurant List
{{item.name}}
Save
{{item.cuisine}}
Save
Review
{{item.review}}
Review
X
New Restaurant
Add
Serves Alcohol


You may also like to go to the entity explorer or perhaps you would like to view this dashboard.
You could also view that dashboard like this.


Hello ! We over here at San Diego Zoo understand today, , is your special day. Via the personality test you submitted for your lifetime membership, we have assigned an animal just for you!


This is a website for contact tracing. It is a work in progress.
You will find a link to the questions here


Vitamin A deficiency is one of the most dangerous nutritional diseases among young children because it damages the eyes and cause blindness and also increases the risk of infection and death. It is regarded as the single, primary cause of preventable childhood blindness in developing countries.
Vitamin A deficiency is a public health problem in Sri Lanka. Its prevalence among children (6 months to 6 years)
Vitamin A is known as an anti- infective vitamin. Children who lack vitamin A are more likely to get gut, respiratory and other infections and die from them easily. Very young children having severe PEM are at an increased risk of VAD
A severe deficiency state is characterized by xerophthalmia (dry eye), which is the most easily recognized clinical sign of the deficiency.
Increased consumption of vitamin A rich animal and plant products may provide a food–based solution to the problem. E.g. yellow and orange coloured fruits (mango, papaw, water melon etc.) and vegetables (carrot, pumpkin, sweet potato, tomato etc.), dark green leafy vegetables, liver, milk and eggs. Mega dose vitamin A capsules are used to treat the deficiency.


Old Port Henderson Road in St Catherine to be closed permanently
Effective, Monday, December 2, the section of the Old Port Henderson Road, which runs parallel to the Spanish Town Bypass in St Catherine, will be permanently closed.
The road will be closed where it intersects Salt Pond Road.
Manager, Communication and Customer Services at the National Works Agency (NWA), Stephen Shaw, says that the closure is to eliminate the right turning movements from Old Port Henderson Road, which regularly interrupts traffic flow, causing a pile-up along the Spanish Town Bypass, where it intersects Salt Pond Road.
Resulting from the closure, motorists travelling from the direction of the Lakes Pen Community wishing to access the Spanish Town Bypass will have to continue along Port Henderson Road, exiting at the upgraded Spanish Town Bypass/Port Henderson intersection.
The upgraded intersection will allow for easier left-turning manoeuvres as a slip road has been constructed for the benefit of those motorists.
Shaw explains that motorists travelling from the direction of March Pen Road wishing to access Port Henderson Road will also have to use the upgraded intersection.
The traffic signals at the location have been improved and modifications done to the rehearsed timings in order to accommodate the increased levels of traffic.
The motoring public is advised to pay keen attention to the changes and take all the necessary steps to ensure safety along the new path.


{{ _('ClickHouse® is an open-source, high performance columnar OLAP database management system for real-time analytics using SQL.') }}
Read the Blog Post


|
Helix
|
#include <SQLStmt.h>
Public Member Functions | |
| SQLStmt () | |
| Standard Constructor. More... | |
| SQLStmt (const SQLStmt &c) | |
| Standard Copy Constructor. More... | |
| SQLStmt & | operator= (const SQLStmt &c) |
| Standard Assignment Operator. More... | |
| virtual | ~SQLStmt () |
| Standard Destructor. More... | |
| SQLStmt & | init () |
| Initialize this data object to have all empty or 0 values. More... | |
| SQLStmt & | checkSize () |
| Call check_size() on all of our twine members. More... | |
| SQLStmt (xmlNodePtr node) | |
| Construct from an XML Node. More... | |
| SQLStmt & | readXmlNode (xmlNodePtr node) |
| Read an XML Node to set our contents. More... | |
| xmlNodePtr | createXmlNode (xmlNodePtr parent) const |
| Create an XML Node as a child of the given parent. More... | |
| xmlDocPtr | createXmlDoc () const |
| Create an XML Document from this data object. More... | |
Static Public Member Functions | |
| static vector< SQLStmt * > * | readXmlChildren (xmlNodePtr parent) |
| Create a series of these objects by reading all children of the given parent. More... | |
| static void | createXmlChildren (xmlNodePtr parent, vector< SQLStmt * > *vect) |
| Create a series of xml child nodes based on the input vector. More... | |
| static void | deleteVector (vector< SQLStmt * > *vect) |
| Handle deleting a vector and its contents. More... | |
| static twine & | Name () |
| Static method to retrieve the name of this object. More... | |
| static void | unused (OdbcObj &odbc, SQLStmt &obj) |
| static void | unused (OdbcObj &odbc, twine &stmt, bool useInputs, SQLStmt &obj) |
| static twine | unused_prepSQL (IOConn &ioc, SQLStmt &obj) |
| static twine | unused_getSQL () |
Public Attributes | |
| twine | Description |
| All Data Members are public. More... | |
| float | Duration |
| twine | StatementName |
| intptr_t | expectErrors |
| twine | expectedErrorMsg |
| intptr_t | expectedRows |
| intptr_t | ignoreErrors |
| intptr_t | isSelected |
| intptr_t | issueCommit |
| intptr_t | issueRollback |
| intptr_t | newConnection |
| intptr_t | status |
| twine | statusMessage |
| twine | stmt |
| intptr_t | verifyData |
| Col_svect | MetaData |
| Any Child Vectors will be defined here. More... | |
| Col_svect | MetaDataCheck |
| Row_svect | Results |
| Row_svect | ResultsCheck |
This is a generated data object class that is used for interfacing with a database. This class was generated based on the settings in the file: ../logic/admin/SQLStmt.sql.xml
| SQLStmt::SQLStmt | ( | ) |
Standard Constructor.
| SQLStmt::SQLStmt | ( | const SQLStmt & | c | ) |
Standard Copy Constructor.
|
virtual |
Standard Destructor.
| SQLStmt::SQLStmt | ( | xmlNodePtr | node | ) |
Construct from an XML Node.
| SQLStmt & SQLStmt::checkSize | ( | ) |
Call check_size() on all of our twine members.
|
static |
Create a series of xml child nodes based on the input vector.
| xmlDocPtr SQLStmt::createXmlDoc | ( | ) | const |
Create an XML Document from this data object.
| xmlNodePtr SQLStmt::createXmlNode | ( | xmlNodePtr | parent | ) | const |
Create an XML Node as a child of the given parent.
|
static |
Handle deleting a vector and its contents.
| SQLStmt & SQLStmt::init | ( | ) |
Initialize this data object to have all empty or 0 values.
|
static |
Static method to retrieve the name of this object.
|
static |
Create a series of these objects by reading all children of the given parent.
| SQLStmt & SQLStmt::readXmlNode | ( | xmlNodePtr | node | ) |
Read an XML Node to set our contents.
This is an INSERT method. It is designed to run a single insert statement and return. If something goes wrong, we will throw AnException.
Developer Comments:
This is here to allow us to define the SQLTests data object.
Sql Statement:
– Empty on purpose
This mimics the above in functionality, but allows you to pass in your own sql statement for us to execute. You can tell us whether to use or ignore the inputs as well.
|
inlinestatic |
This method returns the sql statement that is used by the above functions.
This method will do a replacement of all of the parameter markers in the sql statement with the standard parameter list that is defined. This is useful for automatically prepping a SQL statement that doesn't work with parameter markers.
| twine Helix::Logic::admin::SQLStmt::Description |
All Data Members are public.
| float Helix::Logic::admin::SQLStmt::Duration |
| twine Helix::Logic::admin::SQLStmt::expectedErrorMsg |
| intptr_t Helix::Logic::admin::SQLStmt::expectedRows |
| intptr_t Helix::Logic::admin::SQLStmt::expectErrors |
| intptr_t Helix::Logic::admin::SQLStmt::ignoreErrors |
| intptr_t Helix::Logic::admin::SQLStmt::isSelected |
| intptr_t Helix::Logic::admin::SQLStmt::issueCommit |
| intptr_t Helix::Logic::admin::SQLStmt::issueRollback |
| Col_svect Helix::Logic::admin::SQLStmt::MetaData |
Any Child Vectors will be defined here.
| Col_svect Helix::Logic::admin::SQLStmt::MetaDataCheck |
| intptr_t Helix::Logic::admin::SQLStmt::newConnection |
| Row_svect Helix::Logic::admin::SQLStmt::Results |
| Row_svect Helix::Logic::admin::SQLStmt::ResultsCheck |
| twine Helix::Logic::admin::SQLStmt::StatementName |
| intptr_t Helix::Logic::admin::SQLStmt::status |
| twine Helix::Logic::admin::SQLStmt::statusMessage |
| twine Helix::Logic::admin::SQLStmt::stmt |
| intptr_t Helix::Logic::admin::SQLStmt::verifyData |


b2i_PVK_bio, b2i_PVK_bio_ex, i2b_PVK_bio, i2b_PVK_bio_ex - Decode and encode functions for reading and writing MSBLOB format private keys
#include <openssl/pem.h>
EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u);
EVP_PKEY *b2i_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u,
OSSL_LIB_CTX *libctx, const char *propq);
int i2b_PVK_bio(BIO *out, const EVP_PKEY *pk, int enclevel,
pem_password_cb *cb, void *u);
int i2b_PVK_bio_ex(BIO *out, const EVP_PKEY *pk, int enclevel,
pem_password_cb *cb, void *u,
OSSL_LIB_CTX *libctx, const char *propq);
b2i_PVK_bio_ex() decodes a private key of MSBLOB format read from a BIO. It attempts to automatically determine the key type. If the key is encrypted then cb is called with the user data u in order to obtain a password to decrypt the key. The supplied library context libctx and property query string propq are used in any decrypt operation.
b2i_PVK_bio() does the same as b2i_PVK_bio_ex() except that the default library context and property query string are used.
i2b_PVK_bio_ex() encodes pk using MSBLOB format. If enclevel is 1 then a password obtained via pem_password_cb is used to encrypt the private key. If enclevel is 0 then no encryption is applied. The user data in u is passed to the password callback. The supplied library context libctx and property query string propq are used in any decrypt operation.
i2b_PVK_bio() does the same as i2b_PVK_bio_ex() except that the default library context and property query string are used.
The b2i_PVK_bio() and b2i_PVK_bio_ex() functions return a valid EVP_KEY structure or NULL if an error occurs. The error code can be obtained by calling ERR_get_error(3).
i2b_PVK_bio() and i2b_PVK_bio_ex() return the number of bytes successfully encoded or a negative value if an error occurs. The error code can be obtained by calling ERR_get_error(3).
crypto(7), d2i_PKCS8PrivateKey_bio(3)
b2i_PVK_bio_ex() and i2b_PVK_bio_ex() were added in OpenSSL 3.0.
Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.


ofCamera
ofCamera provides a camera onto a 3D scene. Some of the different properties of the camera are shown in the picture below: The far and near clip planes are the boundaries of what's visible in the camera. If you need more information on these, check http://www.falloutsoftware.com/tutorials/gl/gl0.htm
ofCamera methods
cacheMatrices(...)
void ofCamera::cacheMatrices(bool cache=true)
This caches the projection matrix for the ofCamera.
cameraToWorld(...)
ofVec3f ofCamera::cameraToWorld(ofVec3f CameraXYZ, ofRectangle viewport=ofGetCurrentViewport())
disableOrtho()
void ofCamera::disableOrtho()
Calling disableOrtho() turns off the orthographic mode.
enableOrtho()
void ofCamera::enableOrtho()
Orthographic, or parallel, projections consist of those that involve no perspective correction. There is no adjustment for distance from the camera made in these projections, meaning objects on the screen will appear the same size no matter how close or far away they are. Calling enableOrtho() sets the ofCamera to orthographic mode.
getImagePlaneDistance(...)
float ofCamera::getImagePlaneDistance(ofRectangle viewport=ofGetCurrentViewport())
getModelViewProjectionMatrix(...)
ofMatrix4x4 ofCamera::getModelViewProjectionMatrix(ofRectangle viewport=ofGetCurrentViewport())
getProjectionMatrix(...)
ofMatrix4x4 ofCamera::getProjectionMatrix(ofRectangle viewport=ofGetCurrentViewport())
screenToWorld(...)
ofVec3f ofCamera::screenToWorld(ofVec3f ScreenXYZ, ofRectangle viewport=ofGetCurrentViewport())
setupPerspective(...)
void ofCamera::setupPerspective(bool vFlip=true, float fov=60, float nearDist=0, float farDist=0)
worldToCamera(...)
ofVec3f ofCamera::worldToCamera(ofVec3f WorldXYZ, ofRectangle viewport=ofGetCurrentViewport())
worldToScreen(...)
ofVec3f ofCamera::worldToScreen(ofVec3f WorldXYZ, ofRectangle viewport=ofGetCurrentViewport())


Artisan is the name of the command-line interface included with Laravel. It provides a number of helpful commands for your use while developing your application. It is driven by the powerful Symfony Console component.

To view a list of all available Artisan commands, you may use the list
command:
php artisan list
Every command also includes a "help" screen which displays and describes the command's available arguments and options. To view a help screen, simply precede the name of the command with help
:
php artisan help migrate
You may specify the configuration environment that should be used while running a command using the --env
switch:
php artisan migrate --env=local
You may also view the current version of your Laravel installation using the --version
option:
php artisan --version


African Superstar Rescues Victory For Liverpool
by SL InternationalAston Villa 1-2 Liverpool
Liverpool maintained their six-point lead at the top of the table after snatching victory at Aston Villa.
It was Villa who broke the deadlock on 21 minutes thanks to a strike from Egypt international Trezeguet.
The Reds managed to pull themselves in the 88th minute when Andy Robertson caught the Villa defence napping at the back to nod in at the far post.
Sadio Mane struck the winner for Jurgen Klopp's side in the fourth minute time added on with a neat glancing header.
Manchester City 2-1 Southampton
Manchester City had a comeback of their own at the Etihad after rallying from behind to defeat Southampton.
James Ward-Prowse silenced the home fans after 13 minutes with a close-range finish after Stuart Armstrong's initial effort was saved.
Sergio Aguero got the comeback underway with a first-time finish on 70 minutes before Kyle Walker sealed the winner in the 86th minute.
Arsenal 1-1 Wolverhampton Wanderers
Arsenal's struggles continued after playing to a 1-1 draw with Wolverhampton Wanderers at the Emirates Stadium.
It was going good for the Gunners when Pierre-Emerick Aubameyang opened the scoring with his 50th goal ofor the club in the 21st minute.
However, the visitors secured a point thanks to Raul Jimenez's towering header in the 76th minute.
Other results:
Brigton and Hove Albion 2-0 Norwich City
Sheffield United 3-0 Burnley
West Ham United 2-3 Newcastle United


Phalaenopsis, otherwise known as moth orchids, is an orchid genus of approximately 60 species. Phalaenopsis is one of the most popular orchids in the trade, through the development of many artificial hybrids.
Saintpaulias, commonly known as African violets, are a genus of 6–20 species of herbaceous perennial flowering plants in the family Gesneriaceae, native to Tanzania and adjacent southeastern Kenya in eastern tropical Africa


Schumacher Documentary Postponed Indefinitely, Fans Expect 2020 Release
by Alex CarausuThere aren’t many of us that haven’t heard the name Michael Schumacher, as we all grew up with him as a hero.
Filled with a ceaseless desire to win and a tenacious determination to be the best, he quickly became one of the greatest, if not the greatest of all time in the world of motorsport.
The documentary about his life, Schumacher, that was scheduled to be released on 5th of December 2019, will keep the fans waiting some more as the premiere was delayed indefinitely.
“The grand release of Schumacher has been postponed.” was the official statement of from B/14 Film. “The direction and production would like to allow even more time for the completion of the film due to the very extensive material. The new starting date will be announced in due course.”
It is reported that the directing team gathered too much material and need much more time for editing the documentary than they originally predicted, in order to produce a quality motion picture. Announced in May, the movie promises to tell the story of the pilot from his carting times until the well-known injury that occurred while skiing in the Alps.
Besides the obvious, his Formula 1 career, not much is known as to what the directors will put their focus on, but it’s already known that they have a green light from Michael’s wife Corinna, and his two children Mick and Eugene.
The movie is being directed by the same team crew that delivered “Boris Becker – Der Spieler”, the documentary about the life of the multiple tennis champion, and that gives us a bit of breathing space as they did a good job with that.
The release of the documentary was supposed to be dedicated to the 50th anniversary of the German born champion, as well as the 25th anniversary of his first championship title. 🏁
PRESS RELEASE
Michael Schumacher film with never-before-seen footage of F1 legend's life 'postponed'
Very little information about Michael Schumacher has been released since his skiing accident in December 2013 - with the new film set to show unreleased footage
A feature film which was due to celebrate the life of F1 legend Michael Schumacher has been postponed.
The movie was announced in May and will tell the story of Schumacher, from his time as a talented go-karter in Germany all the way through to his devastating ski-accident.
His wife Corrina has given her full backing to the film, along with the couple's children Gina and Mick.
But B14 Film, who are creating the movie, have put back the release date - which will include never before seen footage.
A spokesman for production company B14 Film said: “Due to the very extensive material the directors and the production want to spend even more time to complete the film.”
The film about Michael Schumacher has been sanctioned by his wife Corinna (Image: FIA via Getty Images)
Schumacher's manager Sabine Kehm had previously announced the film and explained what would be included.
We will use your email address only for sending you newsletters. Please see ourPrivacy Noticefor details of your data protection rights
She said: “The highlights of his Formula One career, his athletic highs and lows, will be as much a part of the story as previously unseen archive footage.
“It sheds light on the uncompromising driver, ambitious young man, pragmatic mechanic and confident team player as well as the family man.”
Schumacher is an F1 legend (Image: REUTERS)
Earlier this month, Willi Weber, his long-term manager, said he believed Corinna feared the truth about Schumacher’s condition entering the public domain.
But now Corinna has hit back at Weber in a rare interview, saying 50-year-old Schumacher was "in the very best of hands".
Schumi was ruthless - it made him great
Manager gives new insight on condition
"He is in the best of hands right now and we are doing everything we can to help him," she said to She's Mercedes magazine.
"Try to understand that we follow Michael's desire to keep his health a secret.
"You can be sure that he is in the very best of hands and that we are doing everything humanly possible to help him.
"Please understand if we are following Michael's wishes and keeping such a sensitive subject as health, as it has always been, in privacy."
https://www.mirror.co.uk/sport/formula-1/michael-schumacher-film-never-before-20908019


SwiftDDP: A DDP Client for Meteor written in Swift
License
MIT
Installation
Install using Carthage by adding the following line to your Cartfile:
github "siegesmund/SwiftDDP" ~> 0.1.9
Or, use CocoaPods. Add the following line to your Podfile:
pod "SwiftDDP", "~> 0.1.9"
Documentation
API Reference
Quick Start
Connecting to a Meteor server
import SwiftDDP
// Meteor.connect will automatically connect and will sign in using
// a stored login token if the client was previously signed in.
Meteor.connect("wss://todos.meteor.com/websocket") {
// do something after the client connects
}
Login & Logout
<EMAIL_ADDRESS>password: "********") { result, error in
// do something after login
}
Meteor.logout() { result, error in
// do something after logout
}
The client also posts a notification when the user signs in and signs out.
// Notification name (a string global variable)
DDP_USER_DID_LOGIN
DDP_USER_DID_LOGOUT
// Example
NSNotificationCenter.defaultCenter().addObserver(self, selector: "userDidLogin", name: DDP_USER_DID_LOGIN, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "userDidLogout", name: DDP_USER_DID_LOGOUT, object: nil)
func userDidLogin() {
print("The user just signed in!")
}
func userDidLogout() {
print("The user just signed out!")
}
Subscribe to a subset of a collection on the server
Meteor.subscribe("todos")
Meteor.subscribe("todos") {
// Do something when the todos subscription is ready
}
Meteor.subscribe("todos", [1,2,3,4]) {
// Do something when the todos subscription is ready
}
Call a method on the server
Meteor.call("foo", [1, 2, 3, 4]) { result, error in
// Do something with the method result
}
When passing parameters to a server method, the parameters object must be serializable with NSJSONSerialization
Simple in-memory persistence
SwiftDDP includes a class called MeteorCollection that provides simple, ephemeral dictionary backed persistence. MeteorCollection stores objects subclassed from MeteorDocument. Creating a collection is as simple as:
class List: MeteorDocument {
var collection:String = "lists"
var name:String?
var userId:String?
}
let lists = MeteorCollection<List>(name: "lists") // As with Meteorjs, the name is the name of the server-side collection
Meteor.subscribe("lists")
For client side insertions, updates and removals:
let list = List(id: Meteor.client.getId(), fields: ["name": "foo"])
// Insert the object on both the client and server.
lists.insert(list)
// Update the object on both the client and server
list.name = "bar"
lists.update(list)
// Remove the object on both the client and server
lists.remove(list)
For each operation the action is executed on the client, and rolled back if the server returns an error.
Example Projects:
Todos
These are iOS implementations of Meteor’s Todos example. The best way to run the examples is to connect to a local instance of Meteor’s Todos app: meteor create --example todos && cd todos && meteor
. You can specify the server that the Todos app connects to by changing the url variable in AppDelegate.swift. There are currently two flavors: a simple example with Dictionary based persistence and an example showing how to use SwiftDDP with Core Data and NSFetchedResultsController.
- Meteor Todos with dictionary based in-memory storage
- Meteor Todos Core Data integration
Example: Creating an Array based custom collection
The following pattern can be used to create custom collections backed by any datastore
In this example, we’ll create a simple collection to hold a list of contacts. The first thing we’ll do is create an object to represent a contact. This object has four properties and a method named update that maps the fields NSDictionary to the struct’s properties. Update is called when an object is created and when an update is performed. Meteor will always transmit an id to identify the object that should be added, updated or removed, so objects that represent Meteor documents must always have an id field. Here we’re sticking to the MongoDB convention of naming our id _id.
var contacts = [Contact]()
struct Contact {
var _id:String?
var name:String?
var phone:String?
var email:String?
init(id:String, fields:NSDictionary?) {
self._id = id
update(fields)
}
mutating func update(fields:NSDictionary?) {
if let name = fields?.valueForKey("name") as? String {
self.name = name
}
if let phone = fields?.valueForKey("phone") as? String {
self.phone = phone
}
if let email = fields?.valueForKey("email") as? String {
self.email = email
}
}
}
Next, we’ll create the collection class that will hold our contacts and provide the logic to respond to server-side changes to the documents and the subscription set. SwiftDDP contains an abstract class called AbstractCollection that can be used to build custom collections. Subclassing AbstractCollection allows you to override three methods that are called in response to events on the server: documentWasAdded, documentWasChanged and documentWasRemoved.
class UserCollection: AbstractCollection {
// Include any logic that needs to occur when a document is added to the collection on the server
override public func documentWasAdded(collection:String, id:String, fields:NSDictionary?) {
let user = User(id, fields)
users.append(user)
}
// Include any logic that needs to occur when a document is changed on the server
override public func documentWasChanged(collection:String, id:String, fields:NSDictionary?, cleared:[String]?) {
if let index = contacts.indexOf({ contact in return contact._id == id }) {
contact = contacts[index]
contact.update(fields)
contacts[index] = contact
}
}
// Include any logic that needs to occur when a document is removed on the server
override public func documentWasRemoved(collection:String, id:String) {
if let index = contacts.indexOf({ contact in return contact._id == id }) {
contacts[index] = nil
}
}
}