Source code for mne_realtime.stim_server_client
# Author: Mainak Jas<EMAIL_ADDRESS># License: BSD (3-clause)
import queue
import time
import socket
import socketserver
import threading
import numpy as np
from mne.utils import logger, verbose, fill_doc
class _ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
"""Create a threaded TCP server.
Parameters
----------
server_address : str
Address on which server is listening
request_handler_class : subclass of BaseRequestHandler
_TriggerHandler which defines the handle method
stim_server : instance of StimServer
object of StimServer class
"""
def __init__(self, server_address, request_handler_class,
stim_server): # noqa: D102
# Basically, this server is the same as a normal TCPServer class
# except that it has an additional attribute stim_server
# Create the server and bind it to the desired server address
socketserver.TCPServer.__init__(self, server_address,
request_handler_class,
False)
self.stim_server = stim_server
class _TriggerHandler(socketserver.BaseRequestHandler):
"""Request handler on the server side."""
def handle(self):
"""Handle requests on the server side."""
self.request.settimeout(None)
while self.server.stim_server._running:
data = self.request.recv(1024) # clip input at 1Kb
data = data.decode() # need to turn it into a string (Py3k)
if data == 'add client':
# Add stim_server._client
client_id = self.server.stim_server \
._add_client(self.client_address[0],
self)
# Instantiate queue for communication between threads
# Note: new queue for each handler
if not hasattr(self, '_tx_queue'):
self._tx_queue = queue.Queue()
self.request.sendall("Client added".encode('utf-8'))
# Mark the client as running
for client in self.server.stim_server._clients:
if client['id'] == client_id:
client['running'] = True
elif data == 'get trigger':
# Pop triggers and send them
if (self._tx_queue.qsize() > 0 and
self.server.stim_server, '_clients'):
trigger = self._tx_queue.get()
self.request.sendall(str(trigger).encode('utf-8'))
else:
self.request.sendall("Empty".encode('utf-8'))
[docs]
class StimServer(object):
"""Stimulation Server.
Server to communicate with StimClient(s).
Parameters
----------
port : int
The port to which the stimulation server must bind to.
n_clients : int
The number of clients which will connect to the server.
See Also
--------
StimClient
"""
def __init__(self, port=4218, n_clients=1): # noqa: D102
# Start a threaded TCP server, binding to localhost on specified port
self._data = _ThreadedTCPServer(('', port),
_TriggerHandler, self)
self.n_clients = n_clients
def __enter__(self): # noqa: D105
# This is done to avoid "[Errno 98] Address already in use"
self._data.allow_reuse_address = True
self._data.server_bind()
self._data.server_activate()
# Start a thread for the server
self._thread = threading.Thread(target=self._data.serve_forever)
# Ctrl-C will cleanly kill all spawned threads
# Once the main thread exits, other threads will exit
self._thread.daemon = True
self._thread.start()
self._running = False
self._clients = list()
return self
def __exit__(self, type, value, traceback): # noqa: D105
self.shutdown()
[docs]
@verbose
def start(self, timeout=np.inf, verbose=None):
"""Start the server.
Parameters
----------
timeout : float
Maximum time to wait for clients to be added.
%(verbose)s
"""
# Start server
if not self._running:
logger.info('RtServer: Start')
self._running = True
start_time = time.time() # init delay counter.
# wait till n_clients are added
while (len(self._clients) < self.n_clients):
current_time = time.time()
if (current_time > start_time + timeout):
raise StopIteration
time.sleep(0.1)
@verbose
def _add_client(self, ip, sock, verbose=None):
"""Add client.
Parameters
----------
ip : str
IP address of the client.
sock : instance of socket.socket
The client socket.
%(verbose)s
"""
logger.info("Adding client with ip = %s" % ip)
client = dict(ip=ip, id=len(self._clients), running=False, socket=sock)
self._clients.append(client)
return client['id']
[docs]
@verbose
def shutdown(self, verbose=None):
"""Shutdown the client and server.
Parameters
----------
%(verbose)s
"""
logger.info("Shutting down ...")
# stop running all the clients
if hasattr(self, '_clients'):
for client in self._clients:
client['running'] = False
self._running = False
self._data.shutdown()
self._data.server_close()
self._data.socket.close()
[docs]
@verbose
def add_trigger(self, trigger, verbose=None):
"""Add a trigger.
Parameters
----------
trigger : int
The trigger to be added to the queue for sending to StimClient.
%(verbose)s
See Also
--------
StimClient.get_trigger
"""
for client in self._clients:
client_id = client['id']
logger.info("Sending trigger %d to client %d"
% (trigger, client_id))
client['socket']._tx_queue.put(trigger)
[docs]
@fill_doc
class StimClient(object):
"""Stimulation Client.
Client to communicate with StimServer
Parameters
----------
host : str
Hostname (or IP address) of the host where StimServer is running.
port : int
Port to use for the connection.
timeout : float
Communication timeout in seconds.
%(verbose)s
See Also
--------
StimServer
"""
@verbose
def __init__(self, host, port=4218, timeout=5.0,
verbose=None): # noqa: D102
try:
logger.info("Setting up client socket")
self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self._sock.settimeout(timeout)
self._sock.connect((host, port))
logger.info("Establishing connection with server")
data = "add client".encode('utf-8')
n_sent = self._sock.send(data)
if n_sent != len(data):
raise RuntimeError('Could not communicate with server')
resp = self._sock.recv(1024).decode() # turn bytes into str (Py3k)
if resp == 'Client added':
logger.info("Connection established")
else:
raise RuntimeError('Client not added')
except Exception:
raise RuntimeError('Setting up acquisition <-> stimulation '
'computer connection (host: %s '
'port: %d) failed. Make sure StimServer '
'is running.' % (host, port))
[docs]
def close(self):
"""Close the socket object."""
self._sock.close()
[docs]
@verbose
def get_trigger(self, timeout=5.0, verbose=None):
"""Get triggers from StimServer.
Parameters
----------
timeout : float
maximum time to wait for a valid trigger from the server
%(verbose)s
See Also
--------
StimServer.add_trigger
"""
start_time = time.time() # init delay counter. Will stop iterations
while True:
try:
current_time = time.time()
# Raise timeout error
if current_time > (start_time + timeout):
logger.info("received nothing")
return None
self._sock.send("get trigger".encode('utf-8'))
trigger = self._sock.recv(1024)
if trigger != 'Empty':
logger.info("received trigger %s" % str(trigger))
return int(trigger)
except RuntimeError as err:
logger.info('Cannot receive triggers: %s' % (err))


Apple has redesigned its Everyone Can Code curriculum
Source: Apple
What you need to know
- Apple has announced it has redesigned its Everyone Can Code curriculum.
- It will bring more resources to teachers and students.
- It features new puzzles and a companion teacher guide.
Apple has announced a redesign of its Everyone Can Code curriculum, which it says now contains even more resources for students and teachers, as well as updated materials.
In a press release Apple said:
Apple today unveiled a completely redesigned Everyone Can Code curriculum to help introduce more elementary and middle school students to the world of coding. Now available, the new curriculum includes even more resources for teachers, a brand new guide for students and updated Swift Coding Club materials. Today millions of students in more than 5,000 schools worldwide already use Everyone Can Code curriculum to bring their ideas to life and develop important skills including creativity, collaboration and problem solving.
Apple also officially confirmed reports that it would be holding thousands of Coding sessions as part of its Today At Apple initiative December 1-15.
The new Everyone Can Code Curriculum features new puzzles that serve as a guide to Swift Playgrounds. There's also a companion teacher guide to support teachers. Apple has also added more inclusivity features including optimization for VoiceOver and closed-captioned videos, audio descriptions and videos in American Sign Language, a tremendous improvement.
Apple says the curriculum is designed to help students express what they learn about coding through drawing, music, video, and photos to help "unleash kids' creativity throughout their school day."
As mentioned, Apple will also hold a series of Today at Apple sessions in the first half of December, including a Coding Lab for Kids that features the characters of Helpsters, Apple TV+'s original kids show from the makers of Sesame Street.
We may earn a commission for purchases using our links. Learn more.


My work and projects
Design Work
On Dribbble you'll find a selection of my work, mostly branding related.
Mr Selling
My sartorial journey where I share my passion for suits as I go along.
Photography
I dabble in photography whenever I can.


We begin by considering the factorial function, defined by \[ n!=n\cdot(n-1)\cdot(n-2)\cdots3\cdot2\cdot1 \] There are many ways to compute factorials. One way is to make use of the observation that $n!$ is equal to $n$ times $(n-1)!$ for any positive integer $n$: \[ n!=n\cdot\left[(n-1)\cdot(n-2)\cdots3\cdot2\cdot1\right]=n\cdot(n-1)! \] Thus, we can compute $n!$ by computing $(n-1)!$ and multiplying the result by $n$. If we add the stipulation that 1! is equal to 1, this observation translates directly into a function:
Now let's take a different perspective on computing factorials. We could describe a rule for computing $n!$ by specifying that we first multiply 1 by 2, then multiply the result by 3, then by 4, and so on until we reach $n$. More formally, we maintain a running product, together with a counter that counts from 1 up to $n$. We can describe the computation by saying that the counter and the product simultaneously change from one step to the next according to the rule
and stipulating that $n!$ is the value of the product when the counter exceeds $n$.Once again, we can recast our description as a function for computing factorials:[1]
max_count ? product \end{JavaScriptClickable} \end{lrbox} \begin{JavaScriptClickable} /*!\href{https://sourceacademy.nus.edu.sg/playground#chap=1&prgrm=GYVwdgxgLglg9mABMAhtOAnGKA2AKMASkQG8AoRSxDAUyhAyVWgH0YoaM8BGAGkT6IiAbjIBfMqEiwEyNFDYcuABwxwAJiGj8IccEv4BbFAA8Wu-cXJVqdBkgtgliAHyJjZx1Ao3fiAPyIqhpa3n6+AFxyrOyceF6ciABUQWqa2j7hWX4JGIgA1AK8mdml7qbmek6EohKS8pjY+ACsNUA}{\usebox\lstbox}!*/ : fact_iter(counter * product, counter + 1, max_count); } \end{JavaScriptClickable}
Compare the two processes. From one point of view, they seem hardly
different at all. Both compute the same mathematical function on the
same domain, and each requires a number of steps proportional to $n$
to compute $n!$. Indeed, both processes even carry out the same
sequence of multiplications, obtaining the same sequence of partial
products. On the other hand, when we consider the
shapes
of the
two processes, we find that they evolve quite differently.
Consider the first process. The substitution model reveals a shape of expansion followed by contraction, indicated by the arrow in figure \ref{fig:recursive-factorial}. The expansion occurs as the process builds up a chain of deferred operations (in this case, a chain of multiplications). The contraction occurs as the operations are actually performed. This type of process, characterized by a chain of deferred operations, is called a recursive process. Carrying out this process requires that the interpreter keep track of the operations to be performed later on. In the computation of $n!$, the length of the chain of deferred multiplications, and hence the amount of information needed to keep track of it, grows linearly with $n$ (is proportional to $n$), just like the number of steps. Such a process is called a linear recursive process.
By contrast, the second process does not grow and shrink. At each step, all we need to keep track of, for any $n$, are the current values of the names product, counter, and max_count. We call this an iterative process. In general, an iterative process is one whose state can be summarized by the values of a fixed number of state names, together with a fixed rule that describes how the values of the state names should be updated as the process moves from state to state and an (optional) end test that specifies conditions under which the process should terminate. In computing $n!$, the number of steps required grows linearly with $n$. Such a process is called a linear iterative process.
The contrast between the two processes can be seen in another way. In
the iterative case, the
values of the state names
provide a complete
description of the state of the process at any point. If we stopped
the computation between steps, all we would need to do to resume the
computation is to supply the interpreter with the values of the three
state names.
Not so with the recursive process. In this case
there is some additional hidden
information, maintained by the
interpreter and not contained in the
state names,
which
indicates where the process is
in negotiating the chain of
deferred operations. The longer the chain, the more information must
be maintained.[2]
In contrasting iteration and recursion, we must be careful not to confuse the notion of a recursive process with the notion of a recursive function. When we describe a function as recursive, we are referring to the syntactic fact that the function declaration refers (either directly or indirectly) to the function itself. But when we describe a process as following a pattern that is, say, linearly recursive, we are speaking about how the process evolves, not about the syntax of how a function is written. It may seem disturbing that we refer to a recursive function such as fact_iter as generating an iterative process. However, the process really is iterative: Its state is captured completely by its three state names, and an interpreter need keep track of only three names in order to execute the process.
One reason that the distinction between process and procedure may be
confusing is that most implementations of common languages (including
Ada, Pascal, and C) are designed in such a way that the
interpretation of any recursive function consumes an amount of memory
that grows with the number of function calls, even when the process
described is, in principle, iterative. As a consequence, these
languages can describe iterative processes only by resorting to
special-purpose
looping constructs
such as do, repeat,
until, for, and while. The implementation of
JavaScript
we shall consider in chapter 5 does not share this defect. It will
execute an iterative process in constant space, even if the iterative
process is described by a recursive function. An implementation with
this property is called
tail-recursive. With a tail-recursive
implementation,
iteration can be expressed using the ordinary
function call mechanism, so that special iteration constructs are
useful only as
syntactic sugar.[3]
plus(4, 5) 4 === 0 ? 5 : inc(plus(dec(4), 5)) inc(plus(dec(4), 5)) ... inc(plus(3, 5)) ... inc(inc(plus(2, 5))) ... inc(inc(inc(plus(1, 5)))) ... inc(inc(inc(inc(plus(0, 5))))) inc(inc(inc(inc( 0 === 0 ? 5 : inc(plus(dec(0), 5)))))) inc(inc(inc(inc( 5 )))) inc(inc(inc( 6 ))) inc(inc( 7 )) inc( 8 ) 9
plus(4, 5) 4 === 0 ? 5 : plus(dec(4), inc(5)) plus(dec(4), inc(5)) ... plus(3, 6) ... plus(2, 7) ... plus(1, 8) ... plus(0, 9) 0 === 0 ? 9 : plus(dec(0), inc(9)) 9
n ? product : iter(counter * product, counter + 1); \end{JavaScriptClickable} \end{lrbox} \begin{JavaScriptClickable} /*!\href{https://sourceacademy.nus.edu.sg/playground#chap=1&prgrm=GYVwdgxgLglg9mABMAhtOAnGKA2AKMASkQG8AoRS5caeJGKAUwzwAcM4ATEaAGkQhxwTDMXJUJiDIyggMSQcOaIAfIiQVJWqgH5E7LjyibtWgFyIGzPIrAjEAKn0dufE6Y+Vb9gNSIAjIQA3CYAvibSsvKWInj+-IEh4WSo6Fi4eACswUA}{\usebox\lstbox}!*/ } return iter(1, 1); } \end{JavaScriptClickable}
in hardwareas a machine that has a fixed set of registers and no auxiliary memory. In contrast, realizing a recursive process requires a machine that uses an auxiliary data structure known as a stack.
message-passingmodel of computation that we shall discuss in chapter 3. Inspired by this, Gerald Jay Sussman and Guy Lewis Steele Jr. (see


SSID Name:
VLAN:
Bridge Group ID:
5GHz Radio Sub Interface ID:
Gigabit Sub Interface ID:
RADIUS Server:
Shared Secret:
Authorization Port:
Accounting Port:
RADIUS Server Timeout (in seconds):
RADIUS Group:
Method List:
Back to Add SSID Wizard
{{ status if status }}


{{site.user_description}}
An advanced discord bot featuring Music, Moderation and other commands like
Mumblecore hexagon kombucha, pitchfork four loko raclette intelligentsia master cleanse. Vinyl XOXO lumbersexual
Mumblecore hexagon kombucha, pitchfork four loko raclette intelligentsia master cleanse. Vinyl XOXO lumbersexual


Age Ranger
First Name
Last Name
Min. Age
Max. Age
Edit
ID
First Name
Last Name
Age
Age Group
Selected Person
ID
First Name
Last Name
Age
Age Group


You set an alarm against unwanted intrusion. Choose a door, a window, or an area within range that is no larger than a 20-foot cube. Until the spell ends, an alarm alerts you whenever a Tiny or larger creature touches or enters the w arded area. When you cast the spell, you can designate creatures that w on't set off the alarm. You also choose whether the alarm is mental or audible.
 This ping awakens you if you are sleeping.
An audible alarm produces the sound of a hand bell for 10 seconds within 60 feet.


Care-A-Lot
LIVE
Home
About
Services
Contact
THIS IS A VOICE MODULATION SYSTEM
Already have an account?
Sign In
Don't have an account?
Sign Up
Sign In
Forgot Password ?
Sign In
Sign Up
Submit


What happened this week!
- Kayaking in North San Diego Bay and Tidepooling in Sunset Cliffs
- Read and discussed excerpt from Oceana & ethics and biases around marine conservation
- Talked about how we want to divide our time
- Examined and analyzed specimens collected from Sunset Cliffs tidepools
What happened this week!
- We familiarized ourselves with the process of making short films. The contraints were, they had to feature water and include two truths and a lie.


{% extends "base.html" %} {% block content %}
To set up your one time password, scan the QR code with an app like Authy, 1Password or Google Authenticator.
Your TOTP secret, in case you want to configure this manually, is:
{{ secret }}


Macro F1 distribution of trials from DMLP Architecture
Macro F1 distribution of trials from MLP Architecture
One click on a box to see datapoints Two clicks to go back to boxes


DOMDocument::loadHTML
(PHP 5, PHP 7)
DOMDocument::loadHTML — Load HTML from a string
说明
public bool DOMDocument::loadHTML ( string $source [, int $options = 0 ] )
The function parses the HTML contained in the string source. Unlike loading
XML, HTML does not have to be well-formed to load. This function may also be
called statically to load and create a DOMDocument object. The static
invocation may be used when no DOMDocument properties need to be set prior to
loading.
参数
source
The HTML string.
options
Since PHP 5.4.0 and Libxml 2.6.0, you may also use the options parameter to
specify additional Libxml parameters.
返回值
成功时返回 TRUE，或者在失败时返回 FALSE。 If called statically, returns a
DOMDocument 或者在失败时返回 FALSE.
错误／异常
If an empty string is passed as the source, a warning will be generated. This
warning is not generated by libxml and cannot be handled using libxml's error
handling functions.
此方法可以被静态调用,但会抛出一个 E_STRICT 错误。
尽管非正确格式化的 HTML 仍应该被成功调入，但此函数会在遇到错误标记时产生
E_WARNING 错误。libxml 错误处理函数可以用来处理这类错误。
范例
Example #1 Creating a Document
loadHTML("
Test
");
echo $doc->saveHTML();
?>
更新日志
版本 说明
5.4.0 Added options parameter.
参见
• DOMDocument::loadHTMLFile() - Load HTML from a file
• DOMDocument::saveHTML() - Dumps the internal document into a string using
HTML formatting
• DOMDocument::saveHTMLFile() - Dumps the internal document into a file using
HTML formatting
User Contributed Notes 13 notes
===============================================================================
You can also load HTML as UTF-8 using this simple hack:
loadHTML('' . $html);
// dirty fix
foreach ($doc->childNodes as $item)
if ($item->nodeType == XML_PI_NODE)
$doc->removeChild($item); // remove hack
$doc->encoding = 'UTF-8'; // insert proper
?>
===============================================================================
DOMDocument is very good at dealing with imperfect markup, but it throws
warnings all over the place when it does.
This isn't well documented here. The solution to this is to implement a
separate aparatus for dealing with just these errors.
Set libxml_use_internal_errors(true) before calling loadHTML. This will prevent
errors from bubbling up to your default error handler. And you can then get at
them (if you desire) using other libxml error functions.
You can find more info here http://www.php.net/manual/en/ref.libxml.php
===============================================================================
Pay attention when loading html that has a different charset than iso-8859-1.
Since this method does not actively try to figure out what the html you are
trying to load is encoded in (like most browsers do), you have to specify it in
the html head. If, for instance, your html is in utf-8, make sure you have a
meta tag in the html's head section:
If you do not specify the charset like this, all high-ascii bytes will be
html-encoded. It is not enough to set the dom document you are loading the html
in to UTF-8.
===============================================================================
It should be noted that when any text is provided within the body tag
outside of a containing element, the DOMDocument will encapsulate that
text into a paragraph tag ().
For example:
loadHTML("
Test
Text
");
echo $doc->saveHTML();
?>
will yield:
Test
Text
while:
loadHTML(
"Test
Text
");
echo $doc->saveHTML();
?>
will yield:
Test
Text
===============================================================================
When using loadHTML() to process UTF-8 pages, you may meet the problem that the
output of dom functions are not like the input. For example, if you want to get
"Cạnh tranh", you will receive "Cáº¡nh tranh". I suggest we use
mb_convert_encoding before load UTF-8 page :
loadHTML($searchPage);
?>
===============================================================================
Be aware that this function doesn't actually understand HTML -- it fixes
tag-soup input using the general rules of SGML, so it creates well-formed
markup, but has no idea which element contexts are allowed.
For example, with input like this where the first element isn't closed:
hello world
loadHTML will change it to this, which is well-formed but invalid:
hello world
===============================================================================
Note that the elements of such document will have no namespace even with
===============================================================================
Using loadHTML() automagically sets the doctype property of your DOMDocument
instance(to the doctype in the html, or defaults to 4.0 Transitional). If you
set the doctype with DOMImplementation it will be overridden.
I assumed it was possible to set it and then load html with the doctype I
defined(in order to decide the doctype at runtime), and ran into a huge
headache trying to find out where my doctype was going. Hopefully this helps
someone else.
===============================================================================
Here is a function I wrote to capitalize the previous remarks about charset
problems (UTF-8...) when using loadHTML and then DOM functions.
It adds the charset meta tag just after to improve automatic encoding
detection, converts any specific character to an html entity, thus PHP DOM
functions/attributes will return correct values.
');
if (FALSE=== $headpos)
$headpos= mb_strpos($content,'');
if (FALSE!== $headpos) {
$headpos+=6;
$content = mb_substr($content,0,$headpos) . '' .mb_substr(
$content,$headpos);
}
$content=mb_convert_encoding($content, 'HTML-ENTITIES', $encod
);
}
$dom = new DomDocument;
$res = $dom->loadHTML($content);
if (!$res) return FALSE;
return $dom;
}
?>
NB: it uses mb_strpos/mb_substr instead of mb_ereg_replace because that seemed
more efficient with huge html pages.
===============================================================================
If you use loadHTML() to process utf HTML string (eg in Vietnamese), you may
experience result in garbage text, while some files were OK. Even your HTML
already have meta charset like
I have discovered that, to help loadHTML() process utf file correctly, the meta
tag should come first, before any utf string appear. For example, this HTML
file
Vietnamese - Tiếng Việt
will be OK with loadHTML() when tag appear tag.
But the file below will not regcornize by loadHTML() because tag
contains utf string appear before tag.
Vietnamese - Tiếng Việt
===============================================================================
Remember: If you use an HTML5 doctype and a meta element like so
your HTML code will get interpreted as ISO-8859-something and non-ASCII chars
will get converted into HTML entities. However the HTML4-like version will work
(as has been pointed out 10 years ago by "bigtree at 29a"):
===============================================================================
Warning: This does not function well with HTML5 elements such as SVG. Most of
the advice on the Web is to turn off errors in order to have it work with
HTML5.
===============================================================================
Beware of the "gotcha" (works as designed but not as expected): if you use
loadHTML, you cannot validate the document. Validation is only for XML. Details
here: http://bugs.php.net/bug.php?id=43771&edit=1


Processpedia
Processpedia is a business process management software environment which fosters the collaboration among all stakeholders without disrupting the way they perform their work neither how they perceive it.
Current approaches to support stakeholders’ collaboration in the modelling of business processes envision an egalitarian environment where stakeholders interact in the same context, using the same languages and sharing the same perspectives on the business process. Therefore, such stakeholders have to collaborate in the context of process modelling using a language that some of them do not master, and have to integrate their various perspectives.
Processpedia, enhances collaborative modelling among stakeholders without enforcing egalitarianism. In Processpedia tacit knowledge is captured and standardised into the organisation’s business processes by fostering an ecological participation of all the stakeholders and capitalising on stakeholders’ distinctive characteristics.
On Going Work
- David Martinho is researching on how to capture end users tacit knowledge in a non-intrusive way and on how to foster the convergence of behavior among them, opt-how project.
- Paulo Pires is defining techniques for the synthesis of business processes on top of a folksonomy approach.
Publications
- David Martinho and António Rito Silva. A Recommendation Algorithm to Capture Endusers’ Tacit Knowledge. In 10th International Conference on Business Process Management (BPM2012). September 2012, Tallinn, Estonia. A. Barros, A. Gal, E. Kindler (Eds.): BPM 2012, LNCS 7481, 2012 pp. 216-222, 2012. Springer. DOI: 10.1007/978-3-642-32885-5_17 (short paper)
- António Rito Silva and Michael Rosemann. Processpedia – An Ecological Environment for BPM Stakeholders Collaboration. In Business Process Management Journal. Emerald. Emerald. Vol. 18, Issue 1, February 2012. pp.20-42. DOI: 10.1108/14637151211214993
- David Martinho and António Rito Silva. Non-intrusive Capture of Business Processes Using Social Software: Capturing the End Users’ Tacit Knowledge. In The 4th Workshop on Business Process Management and Social Software (BPMS2’11). August 2011, Clermont-Ferrand, France. F. Daniel et al. (Eds.): BPM 2011 Workshops, Part I, LNBIP 99, pp. 207-218, 2012. Springer.
- David Martinho and António Rito Silva. ECHO: An Evolutive Vocabulary for Collaborative BPM Discussions. In The Third Workshop on Business Process Management and Social Software. September 2010, Hoboken New Jersey, USA. M. zur Muehlen and J. Su (Eds.): BPM 2010 Workshops, LNBIP 66, pp. 408–419, 2011. Springer. DOI: 10.1007/978-3-642-20511-8_38
- António Rito Silva, Michael Rosemann and Samia Mazhar. Towards Processpedia: An Ecological Environment for BPM Stakeholders Collaboration. In The Third Workshop on Business Process Management and Social Software. September 2010, Hoboken New Jersey, USA. M. zur Muehlen and J. Su (Eds.): BPM 2010 Workshops, LNBIP 66, pp. 449–460, 2011. Springer. DOI: 10.1007/978-3-642-20511-8_41
- António Rito Silva, Rachid Meziani, Rodrigo Magalhães, David Martinho, Ademar Aguiar and Nuno Flores. AGILIPO: Embedding Social Software Features into Business Process Tools. In The Second Workshop on Business Process Management and Social Software. BPM 2009 Workshops. LNBIP 43. Springer. pp. 219-230. DOI: 10.1007/978-3-642-12186-9_21
Thesis
- David Martinho. An Organizational Blackboard for Business Processes. MSc Thesis. Informatics and Computer Engineering - Technical University of Lisbon. October 2009.
- Sérgio Silva, Dynamic Chain Value: A Communities-based Case. MSc Thesis. Information Systems and Computer Engineering - University of Lisbon, November 2013.
Researchers
- António Rito Silva
- David Martinho (PhD on Knowledge Capture)
Past Researchers
- Sérgio Silva (MSc on Dynamic Product Chains)
Opt-how
Capturing the tacit knowledge owned by the organization workers is fundamental to identify the business process models inherent to the organization operations, and to be able to improve them. Within the fields of Business Process Management and Knowledge Engineering, there are approaches that focus on capturing that tacit knowledge: interviews, collaborative modeling meetings and collaborative knowledge dissemination environments such as wikis and blogs.
These knowledge capture approaches are considered intrusive to their participants in the sense that they are essentially not executing their usual daily work activities. Instead, end users are invited to participate on collaborative meetings or technological environments, contributing with their empirical knowledge by making use of notations (BPMN, EPC, Flowcharts, etc…) and concepts (process, activity, task, data object, event…) that are not usually present in their set of skills and competencies. By and large, the gap of languages, skills, competencies and concerns existing between the different type of business process stakeholders (end user, modeler, developer, etc…) can truly hinder a fruitful production of a business process model that is fit and aligned with the operational reality.
Assumptions
In order to focus the research of this work and to sustain a thesis, we need to define a set of assumptions:
Assumption 1 - An organizational structure is well-defined
The starting point of necessary knowledge to capture the organization’s business processes is its organizational structure, i.e. the organizational units, roles and responsibilities must be in place.
Assumption 2 - A working organization where employees are executing business processes
This work aims to capture the tacit knowledge concerning the organization business processes from the employees. Consequently, a real working organization with people executing business operations is assumed to exist.
Assumption 3 - Business processes are not automated
If one is to capture the tacit knowledge about the organization business processes, then, such business processes should not be already explicit and present in automation and their inherent models.
Assumption 4 - Business processes may be documented but not followed
The rational for this assumption is based on the situation where business processes may be documented, but these documentation does not represent the real workflow within the organization.
Assumption 5 - The organization cannot change
This work does not intend to tackle problems with process adaptability, but rather focus on the capture of the as-is. Therefore, this assumption is defined to ensure that the focus of this thesis is out of the scope of business process adaptation.
Assumption 6 - Workers interact using requests
To avoid being intrusive, this work respects the natural workflow interaction between co-workers: requests. This assumption is based on the fact that business workers do their daily activities by making requests to each other in order to achieve the final goal of the business process.
Expected Results
Some of the expected outcomes of this work consist on:
- Capture the organizational behavior.
- Identify and foster standard behavior by convergence.
- Allow divergent behavior whenever necessary.
Qualities
This work presents a solution where a set of qualities are ensured:
- Organizational workers continue on executing their daily tasks instead of participating in knowledge gathering and elicitation activities (interviews, collaborative sessions, etc…).
- A minimum level of intrusiveness is preserved.
###Thesis
The main thesis behind this research work is:
How to capture the tacit knowledge of the end users, business operational workers, and use it to foster the convergence of behavior within the organization, whereas minimizing intrusiveness?
Approach
This work is settled on the idea that knowledge workers know what needs to be done and the conditions required to do so, even if they do not know necessarily why it is done that way or to what end. Experienced business workers know what to do in a particular situation, or know how to adapt whenever new and unexpected situations appear. Even if knowing what needs to be done passes by asking another co-worker, that worker still owns the necessary knowledge to getting things done. Hence, even if there are no strict business process model supporting the workflow and addressing work to the correct resources, work can still be supported and behavioral practices can be captured and converged, enabling the efficiency of the workflow. However, in order to achieve that, a solution that preserves non-intrusive qualities during the capture of tacit knowledge of the operational worker is required.
After the solution is proposed, it should be deployed within a real case scenario and the community of individuals should be studied regarding the usefulness and fitness of the solution proposed, validating hypotheses and making the necessary changes to adapt the solution given the validation results. Hence, the validation of the solution proposed should be based on the study of the community of the proposed solution, and its emerging issues and requirements should be managed efficiently using an agile strategy.
Strategy
In order to follow the above approach, some goals need to be accounted for:
- Define a set of hypotheses on how to enable the capture of tacit knowledge and foster the converge of behavior while complying with the non-intrusiveness quality.
- Design a solution that is able to both support the business workers’ operations and capture that work in a semantic structure, considering the proposed hypotheses.
- Deploy the designed solution within a real organization to validate the initial set of proposed hypotheses.
- Validate and re-define the set of hypotheses accordingly to the results.
- Re-design the solution considering the new hypotheses.
- Re-deploy the re-designed solution.
- Re-validate the redefined set of hypotheses.
- Identify a set of guidelines and qualities that must be accounted for in order to support operational work efficiently by capturing and using the tacit knowledge of the business workers non-intrusively.
The goals listed above requires one to:
- Analyze the convergence and divergence of the existing behavioral trend lines among the business workers of the organization.
- Study the business worker’s acceptance and the usefulness of the solution proposed to accomplish their daily work activities.
- Measure the propensity of the business workers in behaving according to the converged behavior when executing situations that are considered divergent.


| Note ↑↓ | Pad | Last modified ↑↓ |
|---|---|---|
| My sport activites | No pad | Today at 10:51 |
| February reports | Pad | Yesterday |
| Budget plan | Pad | 2 days ago |
| Visit Agenda for all customers | Pad | 02 Feb. 2013 |
| Gifts | Pad | 29 Jan. 2013 |
| Calendar events | Pad | 29 Jan. 2013 |
| TV series | Pad | 01 Dec. 2012 |
| Daily post | Pad | 28 Nov. 2012 |


EXCLUSIVE: DeHaven on Jay Z Getting Shot At, Why They Haven't Talked in 20 Years
by VladTVIn this clip, DeHaven offered a candid response about what he'd say to JAY-Z if he reached out after not speaking for 20-years. DeHaven said he doesn't think that the opportunity to reconcile with Jay will actually present it, however. He also talked about why he feels slighted by Emory Jones, pointing out how Emory allowed a false narrative to persist.


Lecture 19: Textures
Computer graphics in Game development
Ivan Belyavtsev
06.03.2021
Preparation: per shape rendering
- Refactor vertex and index buffer uploading
- Refactor command list recording
Texturing
- Adjust model object to produce texture filenames and texture coordinates
- Increase the size of the descriptor heap
- Upload textures to resources
- Adjust root signature to bind SRV and static sampler
- Adjust input layout for main PSO
- Create a pixel shader for textures
- Create PSO of textures
- Apply proper PSO before each DrawCall


The smell is awesome, plus it tastes like meadow.  The smell is awesome, plus it tastes like meadow. T
just now
14 Ratings and 3 Foodviews
Rated 5.0 The smell is awesome, plus it tastes like meadow. The smell is awesome, plus it tastes like meadow. The smell is awesome, plus it tastes like meadow. The smell is awesome, plus it tastes like meadow.
2 days ago
Rated 5.0 The smell is awesome, plus it tastes like meadow. The smell is awesome, plus it tastes like meadow. The smell is awesome, plus it tastes like meadow. The smell is awesome, plus it tastes like meadow.
2 days ago


The Go Ahead Boys and the Racing Motor-Boat
by Ross Kay
Chapter 7
Additional Information
- Year Published: 1916
- Language: English
- Country of Origin: United States of America
-
Source:
Kay, Ross. (1916).
. New York: Goldsmith.
-
Readability:
- Flesch–Kincaid Level: 5.2
- Word Count: 1,956
- Genre: Adventure
- Keywords: life experiences
- ✎ Cite This
Downloads
“Who’s there? Who’s there?” demanded Fred sharply.
The noise in the room below had prevented him from sleeping soundly. Several times he sat erect in bed, convinced that some one was in the room. Even when his fears proved to be groundless he was unable to ignore the shouts and songs and calls that frequently indicated that the men in the room below were angry. Before he had retired he had obtained a glimpse of the shouting assembly when a door had been opened and the sight had not soothed his feelings. And now he was positive some one was trying to open the door of their room.
Aroused by the call of his friend, John also quickly sat up and stared about him. There was no mistaking the fact that some one was trying to enter by the door which yielded slightly to the pressure and the chair which had been placed by Fred to protect them had been moved back a few inches from its place.
“Who’s there? Who’s there?” demanded Fred sharply.
No reply was given to his question although the door slowly was closed again and the sound of the footsteps of some one moving down the hall was plainly heard.
“What do you suppose that was?” demanded Fred in a whisper.
“Somebody was trying to break in,” replied John.
“What do you suppose he wanted?”
“He wanted to get in.”
“What for?”
“I don’t know. You’ll have to ask him, I guess,” replied John drowsily for by this time he had resumed his place on the pillow.
“I think he wanted our money,” suggested Fred.
“He didn’t want much then. Maybe he wanted our money and our lives.”
“All the same I’m scared. I don’t like this place. I don’t know why we stopped here. It must be past one o’clock now and yet hear those men yell down there in the bar-room. I’m going to see what time it is.”
Fred climbed out of bed and striking a match looked at his watch. “It’s quarter past one,” he said, but the sound which came from John did not indicate that he was specially interested in the report of the watch.
Fred looked out of the window and saw that the storm long since had passed. The air was cool and fresh and had it not been for the uproar in the hotel the night would have been an ideal one.
Before he rejoined his companion Fred replaced the chair so that it barred the opening of the door.
Convinced that he had done all in his power he climbed back into bed once more and in spite of his declaration when daylight came that he had not been asleep John was not convinced.
“Come on, String,” said Fred when once more he had looked at his watch to discover the time. “It’s five o’clock. It’s time for us to be moving. I wouldn’t have breakfast in this hole if they paid me for it.”
“Why can’t you leave a fellow alone and let him sleep? I’m tired. I got left at Poughkeepsie and I had a hard day yesterday too.”
“No, sir,” said Fred firmly. “This party starts from this place in thirty minutes. Any one who isn’t ready will have to come by canal-boat. The Black Growler leaves here at five-thirty sharp.”
With a groan John arose and began to dress, although he protested feelingly all the time against the unreasonable demands of Fred.
The other two Go Ahead boys were speedily aroused and twenty minutes later they departed from the hotel.
“It looks worse in the morning than it does at night and we thought that wasn’t possible when we came here last evening,” said George when the Go Ahead boys looked behind them after their departure.
“I think I will send that landlady a Christmas present of a cake of soap,” said Grant soberly.
“She wouldn’t know what it was for,” laughed John, “if you did.”
“My, I would like to hear what my mother would say if she could see the inside of that old tavern.”
“The worst thing of all,” said Fred, “was the riot in the bar-room. I didn’t sleep a wink last night.”
“You didn’t sound that way, Freddie,” said George.
“What time did the noise downstairs stop, Peewee?” inquired John.
“It didn’t stop, I guess,” laughed Fred. “The landlady said the storm drove all the canal-men into the house, but it didn’t seem to me there was anything that drove them out. I shouldn’t like to meet one of those men in a dark alley.”
“You don’t have to meet them,” suggested George. “We have lived through the night somehow and are all safe. Now if the Black Growler is ready we are. We’ll get our breakfast at Rome, I suppose.”
“That’s what we will,” said Fred, quickening his pace as he spoke.
“Look yonder!” exclaimed John, abruptly halting as he spoke and pointing in surprise at their motor-boat, which was only a few yards distant.
In response to his suggestion the Go Ahead boys all stopped and stared in amazement at the sight before them.
On board the Black Growler were at least a half-dozen men and it required no explanation to enable the boys to understand that they were a part of the noisy assembly which had made night hideous in the hotel.
“Here,” called Fred, running ahead of his companions. “What are you doing in that boat?”
“Who are you?” demanded one of the occupants, turning and facing Fred as he spoke.
“That’s my boat,” declared Fred.
“You don’t say so!” replied the man in shrill tones, at which his companions laughed loudly.
For a moment Fred stopped and stared blankly at the men, who had apparently made themselves fully at home on board his motor-boat. The awnings had been taken in and the self-invited guests had been examining various parts of the fleet little craft.
“Did you ever hear,” continued the spokesman, “that possession is nine points of the law and that the tenth isn’t worth fighting about? Maybe we’ll ask you to prove that this boat is yours. According to the records of my private secretary this here yacht is mine. I’m goin’ on a cruise up to Buffalo and I have invited a few o’ my pals to come along with me.”
The men were a brutal and powerful lot. Every one showed the effect of the night which he had spent in the bar-room. The boys were powerless to compel them to leave the boat if they did not choose to do so.
The predicament in which the Go Ahead boys now found themselves seemed to appeal strongly to the men on board. They laughed loudly and the leader who had spoken before, said, “Why don’t you come on board? If this boat is yours all you have to do is to come and take it.”
“It is, all right. That is our boat,” said Fred.
“If you don’t get out I shall have to get some one to put you out.”
“Don’t be so unkind, mister,” retorted the leader, while his companions again united in a shout of glee. “There aren’t many men around this place that will want to undertake that job. If you would really like to have us go ashore it seems to me the best plan would be for you to come and throw us out.”
Once more the unwelcome guests laughed loudly at the words of their leader, while the confusion among the Go Ahead boys became more marked.
Withdrawing a few feet from the bank Fred called his companions about him and in low tones they discussed the course of action which they ought to follow.
“We had better go up and get the constable,” suggested John. “Get out a warrant for these men. They won’t make any trouble even if the constable comes down alone.”
“I’m not so sure,” said Fred. “What do you think, Grant?”
“I don’t believe the men intend to stay on board,” replied Grant. “They probably were attracted by the appearance of the Black Growler and when they saw us coming they put up a bold front and just tried to scare Fred.”
“What do you think is the best thing to do?” inquired Fred.
“My suggestion is to go back to the boat, not have much to say to the men and get ready to start. They won’t bother us, at least I don’t believe they will.”
“What shall we do if they make trouble?”
“It will be time enough to decide that when we have to,” replied Grant. “I’m sure they won’t make any trouble after they see that we are going to start.”
“All right, we’ll try it,” said Fred dubiously, and once more returning to the place where the Black Growler was awaiting them, the three bags which contained the belongings of the boys were placed on board and ignoring the bantering of the men, they at once prepared to cast off.
“You don’t mean to say we’re going to start now, do you?” inquired the leader.
“Yes,” said Fred shortly.
“Why, we didn’t think you’d go for an hour yet. We haven’t got our trunks.”
Again his companions laughed loudly at the wit of their leader, but as yet not one of them had made any move to leave the boat.
Fred’s alarm was plain in spite of the boldness with which he cast off the bow line. Grant already had performed a similar service with the stern line and the boys were now ready to depart.
“It’s nice of you to invite us to go along with you,” said the leader. “This is a purty little boat and me and my pals will enjoy a ride in her.”
“We’re going to start now,” said Fred quietly, striving to conceal his fear.
“Why, I guess we’re ready, aren’t we?” said the leader as he glanced at his companions.
“I reckon we are, cap’n,” replied one of the men.
The six men occupied most of the available space on board the little boat. Striving to appear indifferent to their presence Fred advanced to the wheel, turned on the power and prepared to depart.


As the New York Post reports, the enormous figure of Christ is almost 22 feet tall and weighs 2000 pounds. It was built in the city of Chimalhuacán by sculptor Roman Salvador, before travelling 12 hours to its new home of La EpifanÍa del Señor church in the central Mexican state of Zacatecas.
Speaking to Central European News, priest Humberto Rodriguez explained that he’d only meant to commission a figure that would “fit the church” and “never intended to make it the biggest baby Jesus statue in the world.”
An image of the giant (and oddly hairy) baby Christ has since been shared online. Towering high above the church’s altar, the Jesus statue photo has been edited together with a snap of a circa 1980s Collins. Naturally, Twitter has a lot to say.
“I laughed way too much at that Baby Jesus/Phil Collins statue. Fuck,” commented one fan. “Maybe Phil Collins looks like Jesus. Did you consider that?” asked another.
See the image below:
After the realising the sheer scale of their new Jesus, the Mexican church began researching the sizes of existing statues. Having discovered that the previous record-holder was a 16 feet and 661 pounds JC, Rodriguez revealed that he’s contacted Guinness World Records with hopes of being awarded an official title.
In a statement to the New York Post, Guinness said that the sculpture will become the first title-holder for “largest baby Jesus statue” if Rodriguez’s submission is approved.
Meanwhile, another Twitter user claimed that the figure looks more like acting icon Nicolas Cage…


-
MLB Playoff Myths: Beware the Misleading Narratives!
grantland.com
While sabermetrics hasn’t supplied a clear and correct answer to the question of what wins in the playoffs, it has rejected several wrong ones. ...
-
Good-bye, Mr. November: Taking Stock of Derek Jeter’s Divisive Legacy
grantland.com
There’s no denying that Derek Jeter is a baseball legend. But on the brink of his retirement, it’s time to assess what legacy the 20-year vet and ...
-
Think you drink a lot? This chart will tell you.
www.washingtonpost.com
The top 10 percent of American drinkers consume more than 10 drinks per day.
-
Ruth Bader Ginsburg Would Probably Be Confirmed Today
fivethirtyeight.com
Justice Ruth Bader Ginsburg doesn't want to step down from the Supreme Court. In an Elle magazine interview published this week, she said: "If I ...
-
Elitist, Superfluous, Or Popular? We Polled Americans on the Oxford Comma
fivethirtyeight.com
There's been a lot of ink spilled on the Oxford comma, the comma that goes before "and" in a list of three or more things. Is it a grammatical must ...
-
What's Happened To The Green Bay Packers?
fivethirtyeight.com
Three years ago at about this time, the Green Bay Packers were coming off a Super Bowl victory and embarking on a landmark season. They'd eventually ...
-
Americans Aren't Getting Married Anymore
fivethirtyeight.com
The Pew Research Center on Wednesday came out with a big report on the decline of marriage in the United States. A record 1 in 5 Americans 25 or ...
-
Release Detail
www.quinnipiac.edu
School of Law Admissions Standards Class Profile Contact Us Apply to the JD Financial Aid School of Medicine Academic Requirements Application ...
-
Rob Bironas Just Might Have Been The Best Kicker Of His Era
fivethirtyeight.com
In a tragic piece of NFL news somewhat overshadowed by a full slate of games Sunday, former Tennessee Titans placekicker Rob Bironas was killed in a ...
-
Dear Mona, How Often Should I Change My Socks?
fivethirtyeight.com
Dear Mona, How long can I wear the same pair of socks without health risk? I wear them until the smell offends me. Am I wrong? @thomasasma Dear ...
-
Senate Update: Two Different Views Of Alaska
fivethirtyeight.com
Republicans have a 59 percent chance of taking back the Senate, according to FiveThirtyEight's latest forecast. We've got a new poll in Alaska, a ...
-
The fastest-growing alcoholic beverage in the US isn’t a beer, wine, or ...
qz.com
Fermented apple juice used to be big in the US—or, rather, in the 13 British colonies that became the US. In colonial America, hard cider was more ...
-
Diversity, cell phones make political polling difficult in Colorado
www.cpr.org
In just one day last week, polls showed a range of results in the governor’s race. Find out what those polls mean -- or don't -- for this year’s big ...
-
The Price Of Seeing Derek Jeter's Last MLB Game
fivethirtyeight.com
Derek Jeter, a regionally popular player for a local New York ball club, announced his retirement in February, presaging the end to 20 seasons in ...
-
In The Papers: Entrepreneurs, Energy and Education
fivethirtyeight.com
Every Monday, the National Bureau of Economic Research, a nonprofit organization made up of some of North America’s most respected economists, ...
-
It Has Been An Astonishingly Bad Year For Vehicle Recalls
fivethirtyeight.com
“Significant heat, smoke and sparks.” These are the symptoms of the faulty brakes in some 200,000 General Motors vehicles recalled Sept. 20, ...
-
Most Americans can't name which parties control the House and Senate
fusion.net
There’s an election in November, but most Americans may not know what’s at stake when it comes to the results. Fewer than four in 10 Americans (36 ...
-
The Racial Gap On Global Warming
fivethirtyeight.com
Before the big climate march in New York on Sunday, New York magazine's Tim Murphy asked, "Can Sunday’s climate march expand the movement beyond ...
-
How A Typical Family In 1988 Is Doing Today
fivethirtyeight.com
The income of the typical American household has been stagnant for two-and-a-half decades. But as I wrote Monday morning, that “typical” household ...
-
The Most Important Award In Public Education Struggles To Find Winners
fivethirtyeight.com
Former British Prime Minister Tony Blair and U.S. Secretary of Education Arne Duncan were both on hand Monday morning to crown the school districts ...
-
Club W Raises $9.5 Million To Appeal To Wine Lovers, Not Snobs
blogs.wsj.com
The direct-to-consumer wine seller aims to appeal to wine lovers who don't want to spend more than $20 a bottle.
-
How Gary Hart’s Downfall Forever Changed American Politics - NYTimes.com
www.nytimes.com
On a scalding July day five years ago, I found myself hiking in Red Rocks Park, just outside Denver, with Gary Hart. The copper cliffs were ...
-
A Long, Ugly Year of Depression That's Finally Fading - Rand's Blog
moz.com
Yesterday morning I woke up early to speak at the Business of Software conference in Boston. It was my first time there, and it’s an exceptional ...
-
Miss a Payment? Good Luck Moving That Car - NYTimes.com
dealbook.nytimes.com
The thermometer showed a 103.5-degree fever, and her 10-year-old’s asthma was flaring up. Mary Bolender, who lives in Las Vegas, needed to get her ...
-
Sam Altman (Ft. Dustin Moskovitz) – How to Start a Startup Lecture 1
tech.genius.com
Lecture 1 of How to Start a Startup is in two sections: Sam: Ideas, Products, Teams and Execution Part I Dustin: Why to Start a Startup The ...
-
Apple - Privacy
www.apple.com
At Apple, we respect your privacy and protect it with strong encryption, plus strict policies that govern how all data is handled.
-
Rainbow Round Lightning Talks - Splash
lgbtlightningtalks.splashthat.com
A series of inspiring talks from LGBT leaders in tech. Join us in September to hear lightning talks from 4 awesome entrepreneurs.
-
ICREACH: How the NSA Built Its Own Secret Google -
firstlook.org
The NSA is secretly using a Google-like tool to share its vast pools of surveillance data with law enforcement agencies.
-
Every Response I Got When I FOIA'd the Year's Dumbest App
gizmodo.com
When the soul-crushingly simple, single-serving messaging app Yo hit the App Store this past summer, people couldn't say enough about the app that ...


Guide for Transport Driver Implementors¶
Introduction¶
This document is a best practices guide for the developer interested in creating a new transport driver for Oslo.Messaging. It should also be used by maintainers as a reference for proper driver behavior. This document will describe the driver interface and prescribe the expected behavior of any driver implemented to this interface.
Note well: The API described in this document is internal to the oslo.messaging library and therefore private. Under no circumstances should this API be referenced by code external to the oslo.messaging library.
Driver Interface¶
The driver interface is defined by a set of abstract base classes. The developer creates a driver by defining concrete classes from these bases. The derived classes embody the logic that is specific for the messaging back-end that is to be supported.
These base classes are defined in the base.py file in the _drivers subdirectory.
IncomingMessage¶
-
class
oslo_messaging._drivers.base.
IncomingMessage
(ctxt, message)¶ The IncomingMessage class represents a single message received from the messaging backend. Instances of this class are passed to up a server’s messaging processing logic. The backend driver must provide a concrete derivation of this class which provides the backend specific logic for its public methods.
Parameters: - ctxt (dict) – Context metadata provided by sending application.
- message (dict) – The message as provided by the sending application.
-
acknowledge
()¶ Called by the server to acknowledge receipt of the message. When this is called the driver must notify the backend of the acknowledgment. This call should block at least until the driver has processed the acknowledgment request locally. It may unblock before the acknowledgment state has been acted upon by the backend.
If the acknowledge operation fails this method must issue a log message describing the reason for the failure.
Raises: Does not raise an exception
-
requeue
()¶ Called by the server to return the message to the backend so it may be made available for consumption by another server. This call should block at least until the driver has processed the requeue request locally. It may unblock before the backend makes the requeued message available for consumption.
If the requeue operation fails this method must issue a log message describing the reason for the failure.
Support for this method is _optional_. The
BaseDriver.require_features()
method should indicate whether or not support for requeue is available.Raises: Does not raise an exception
RpcIncomingMessage¶
-
class
oslo_messaging._drivers.base.
RpcIncomingMessage
(ctxt, message)¶ The RpcIncomingMessage represents an RPC request message received from the backend. This class must be used for RPC calls that return a value to the caller.
-
reply
(reply=None, failure=None)¶ Called by the server to send an RPC reply message or an exception back to the calling client.
If an exception is passed via failure the driver must convert it to a form that can be sent as a message and properly converted back to the exception at the remote.
The driver must provide a way to determine the destination address for the reply. For example the driver may use the reply-to field from the corresponding incoming message. Often a driver will also need to set a correlation identifier in the reply to help the remote route the reply to the correct RPCClient.
The driver should provide an at-most-once delivery guarantee for reply messages. This call should block at least until the reply message has been handed off to the backend - there is no need to confirm that the reply has been delivered.
If the reply operation fails this method must issue a log message describing the reason for the failure.
See
BaseDriver.send()
for details regarding how the received reply is processed.Parameters: - reply (dict) – reply message body
- failure (Exception) – an exception thrown by the RPC call
Raises: Does not raise an exception
-
Listener¶
-
class
oslo_messaging._drivers.base.
Listener
(batch_size, batch_timeout, prefetch_size=-1)¶ A Listener is used to transfer incoming messages from the driver to a server for processing. A callback is used by the driver to transfer the messages.
Parameters: - batch_size (int) – desired number of messages passed to single on_incoming_callback notification
- batch_timeout (float) – defines how long should we wait in seconds for batch_size messages if we already have some messages waiting for processing
- prefetch_size (int) – defines how many messages we want to prefetch from the messaging backend in a single request. May not be honored by all backend implementations.
-
cleanup
()¶ Cleanup all resources held by the listener. This method should block until the cleanup is completed.
-
start
(on_incoming_callback)¶ Start receiving messages. This should cause the driver to start receiving messages from the backend. When message(s) arrive the driver must invoke ‘on_incoming_callback’ passing it the received messages as a list of IncomingMessages.
Parameters: on_incoming_callback (func) – callback function to be executed when listener receives messages.
-
stop
()¶ Stop receiving messages. The driver must no longer invoke the callback.
PollStyleListener¶
-
class
oslo_messaging._drivers.base.
PollStyleListener
(prefetch_size=-1)¶ A PollStyleListener is used to transfer received messages to a server for processing. A polling pattern is used to retrieve messages. A PollStyleListener uses a separate thread to run the polling loop. A
PollStyleListenerAdapter
can be used to create aListener
from a PollStyleListener.Parameters: prefetch_size (int) – The number of messages that should be pulled from the backend per receive transaction. May not be honored by all backend implementations. -
cleanup
()¶ Cleanup all resources held by the listener. This method should block until the cleanup is completed.
-
poll
(timeout=None, batch_size=1, batch_timeout=None)¶ poll is called by the server to retrieve incoming messages. It blocks until ‘batch_size’ incoming messages are available, a timeout occurs, or the poll is interrupted by a call to the
stop()
method.If ‘batch_size’ is > 1 poll must block until ‘batch_size’ messages are available or at least one message is available and batch_timeout expires
Parameters: - timeout (float) – Block up to ‘timeout’ seconds waiting for a message
- batch_size (int) – Block until this number of messages are received.
- batch_timeout (float) – Time to wait in seconds for a full batch to
arrive. A timer is started when the first message in a batch is
received. If a full batch’s worth of messages is not received when
the timer expires then
poll()
returns all messages received thus far.
Raises: Does not raise an exception.
Returns: A list of up to batch_size IncomingMessage objects.
-
BaseDriver¶
-
class
oslo_messaging._drivers.base.
BaseDriver
(conf, url, default_exchange=None, allowed_remote_exmods=None)¶ Defines the backend driver interface. Each backend driver implementation must provide a concrete derivation of this class implementing the backend specific logic for its public methods.
Parameters: - conf (ConfigOpts) – The configuration settings provided by the user.
- url (TransportURL) – The network address of the messaging backend(s).
- default_exchange (str) – The exchange to use if no exchange is specified in a Target.
- allowed_remote_exmods (list) – whitelist of those exception modules which are permitted to be re-raised if an exception is returned in response to an RPC call.
-
cleanup
()¶ Release all resources used by the driver. This method must block until the cleanup is complete.
-
listen
(target, batch_size, batch_timeout)¶ Construct a listener for the given target. The listener may be either a
Listener
orPollStyleListener
depending on the driver’s preference. This method is used by the RPC server.The driver must create subscriptions to the address provided in target. These subscriptions must then be associated with a
Listener
orPollStyleListener
which is returned by this method. SeeBaseDriver.send()
for more detail regarding message addressing.The driver must support receiving messages sent to the following addresses derived from the values in target:
- all messages sent to the exchange and topic given in the target. This includes messages sent using a fanout pattern.
- if the server attribute of the target is set then the driver must also subscribe to messages sent to the exchange, topic, and server
For example, given a target with exchange ‘my-exchange’, topic ‘my-topic’, and server ‘my-server’, the driver would create subscriptions for:
- all messages sent to my-exchange and my-topic (including fanout)
- all messages sent to my-exchange, my-topic, and my-server
The driver must pass messages arriving from these subscriptions to the listener. For
PollStyleListener
the driver should trigger thePollStyleListener.poll()
method to unblock and return the incoming messages. ForListener
the driver should invoke the callback with the incoming messages.This method only blocks long enough to establish the subscription(s) and construct the listener. In the case of failover, the driver must restore the subscription(s). Subscriptions should remain active until the listener is stopped.
Parameters: - target (Target) – The address(es) to subscribe to.
- batch_size (int) – passed to the listener
- batch_timeout (float) – passed to the listener
Returns: None
Raises: MessagingException
-
listen_for_notifications
(targets_and_priorities, pool, batch_size, batch_timeout)¶ Construct a notification listener for the given list of tuples of (target, priority) addresses.
The driver must create a subscription for each (target, priority) pair. The topic for the subscription is created for each pair using the format “%s.%s” % (target.topic, priority). This format is used by the caller of the
BaseDriver.send_notification()
when setting the topic member of the target parameter.Only the exchange and topic must be considered when creating subscriptions. server and fanout must be ignored.
The pool parameter, if specified, should cause the driver to create a subscription that is shared with other subscribers using the same pool identifier. Each pool gets a single copy of the message. For example if there is a subscriber pool with identifier foo and another pool bar, then one foo subscriber and one bar subscriber will each receive a copy of the message. The driver should implement a delivery pattern that distributes message in a balanced fashion across the subscribers in a pool.
The driver must raise a
NotImplementedError
if pooling is not supported and a pool identifier is passed in.Refer to the description of
BaseDriver.send_notification()
for further details regarding implementation.Parameters: - targets_and_priorities (list) – List of (target, priority) pairs
- pool (str) – pool identifier
- batch_size (int) – passed to the listener
- batch_timeout (float) – passed to the listener
Returns: None
Raises: MessagingException
,NotImplementedError
-
require_features
(requeue=False)¶ The driver must raise a ‘NotImplementedError’ if any of the feature flags passed as True are not supported.
-
send
(target, ctxt, message, wait_for_reply=None, timeout=None, envelope=False, retry=None)¶ Send a message to the given target and optionally wait for a reply. This method is used by the RPC client when sending RPC requests to a server.
The driver must use the topic, exchange, and server (if present) attributes of the target to construct the backend-native message address. The message address must match the format used by subscription(s) created by the
BaseDriver.listen()
method.If the target’s fanout attribute is set, a copy of the message must be sent to all subscriptions using the exchange and topic values. If fanout is not set, then only one subscriber should receive the message. In the case of multiple subscribers to the same address, only one copy of the message is delivered. In this case the driver should implement a delivery pattern that distributes messages in a balanced fashion across the multiple subscribers.
This method must block the caller until one of the following events occur:
- the send operation completes successfully
- timeout seconds elapse (if specified)
- retry count is reached (if specified)
The wait_for_reply parameter determines whether or not the caller expects a response to the RPC request. If True, this method must block until a response message is received. This method then returns the response message to the caller. The driver must implement a mechanism for routing incoming responses back to their corresponding send request. How this is done may vary based on the type of messaging backend, but typically it involves having the driver create an internal subscription for reply messages and setting the request message’s reply-to header to the subscription address. The driver may also need to supply a correlation identifier for mapping the response back to the sender. See
RpcIncomingMessage.reply()
If wait_for_reply is False this method will block until the message has been handed off to the backend - there is no need to confirm that the message has been delivered. Once the handoff completes this method returns.
The driver may attempt to retry sending the message should a recoverable error occur that prevents the message from being passed to the backend. The retry parameter specifies how many attempts to re-send the message the driver may make before raising a
MessageDeliveryFailure
exception. A value of None or -1 means unlimited retries. 0 means no retry is attempted. N means attempt at most N retries before failing. Note well: the driver MUST guarantee that the message is not duplicated by the retry process.Parameters: - target (Target) – The message’s destination address
- ctxt (dict) – Context metadata provided by sending application which must transfered along with the message.
- message (dict) – message provided by the caller
- wait_for_reply (bool) – If True block until a reply message is received.
- timeout (float) – Maximum time in seconds to block waiting for the send
operation to complete. Should this expire the
send()
must raise aMessagingTimeout
exception - retry (int) – maximum message send attempts permitted
Returns: A reply message or None if no reply expected
Raises: MessagingException
, any exception thrown by the remote server when executing the RPC call.
-
send_notification
(target, ctxt, message, version, retry)¶ Send a notification message to the given target. This method is used by the Notifier to send notification messages to a Listener.
Notifications use a store and forward delivery pattern. The driver must allow for delivery in the case where the intended recipient is not present at the time the notification is published. Typically this requires a messaging backend that has the ability to store messages until a consumer is present.
Therefore this method must block at least until the backend accepts ownership of the message. This method does not guarantee that the message has or will be processed by the intended recipient.
The driver must use the topic and exchange attributes of the target to construct the backend-native message address. The message address must match the format used by subscription(s) created by the
BaseDriver.listen_for_notifications()
method. Only one copy of the message is delivered in the case of multiple subscribers to the same address. In this case the driver should implement a delivery pattern that distributes messages in a balanced fashion across the multiple subscribers.There is an exception to the single delivery semantics described above: the pool parameter to the
BaseDriver.listen_for_notifications()
method may be used to set up shared subscriptions. SeeBaseDriver.listen_for_notifications()
for details.This method must also honor the retry parameter. See
BaseDriver.send()
for details regarding implementing the retry process.version indicates whether or not the message should be encapsulated in an envelope. A value < 2.0 should not envelope the message. See
common.serialize_msg()
for more detail.Parameters: - target (Target) – The message’s destination address
- ctxt (dict) – Context metadata provided by sending application which must transfered along with the message.
- message (dict) – message provided by the caller
- version (float) – determines the envelope for the message
- retry (int) – maximum message send attempts permitted
Returns: None
Raises: MessagingException


val version: String
The current node version string, e.g. 5.0-SNAPSHOT, 5.1. Note that this string is effectively freeform, and so should only be used for providing diagnostic information. It should not be used to make functionality decisions (the platformVersion is a better fit for this).


Trusted by the world’s most innovative businesses – big and small
Best Web Solution
This should be used to tell a story and let your users know a little more about your product or service. How can you benefit them?
Save Your Money
This should be used to tell a story and let your users know a little more about your product or service. How can you benefit them?


# Description:
# This script will gather data about the domain's users and their corresponding email addresses. It will also
# include some extra information about last logon and last password set attributes.
# You can enable or disable the the attributes shown in the final table by changing the values in line 184 and
# headers in line 190.
# If no entries are returned that means users don't have email addresses specified. If so, you can use the
# -all-users parameter.
#
# Reference for:
# LDAP
usage: GetADUsers.py [-h] [-user username] [-all-users] [-debug]
[-hashes LMHASH:NTHASH] [-no-pass] [-k] [-aesKey hex key]
[-dc-ip ip address]
target
Queries target domain for users data
positional arguments:
target domain/username[:password]
optional arguments:
-h, --help show this help message and exit
-user username Requests data for specific user
-all-users Return all users, including those with no email
addresses
-debug Turn DEBUG output ON
authentication:
-hashes LMHASH:NTHASH
NTLM hashes, format is LMHASH:NTHASH
-no-pass don't ask for password (useful for -k)
-k Use Kerberos authentication. Grabs credentials from
ccache file (KRB5CCNAME) based on target parameters.
If valid credentials cannot be found, it will use the
ones specified in the command line
-aesKey hex key AES key to use for Kerberos Authentication (128 or 256
bits)
-dc-ip ip address IP Address of the domain controller. If ommited it use
the domain part (FQDN) specified in the target
parameter


The check box form and the single-select box form pop up (click submit to get the data).
The check box form and the single-select box form are popped up (after clicking submit, the data is obtained and echoed to the parent form).


This is convenient for automatically performing continuous integration when project has many upstreams and broking of one prevents from triggering the build of a downstream even when other upstream has been built successfuly. Jenkins may have no knowledge about successful builds for some upstream if builds were cleaned up or was not performed after restarts or upgrades. At the same time this project can be build because the upstream artifacts are present in MAVEN repository.
This behaviour may trigger extra builds. If this behavior is problematic, uncheck this option.


You can see the tutorial
here
Select the column width and row height on the select box below.
The example code can be slower than your environment because the code is transpiled by babel-standalone in runtime.
Column Width
150
100
40
Row height
70
50
30


The "use strict"
defines that JavaScript code should be executed in "strict mode".
Tip: The "use strict" directive is only recognized at the beginning of a script or a function.
Tip 2: Click here for more detailed info about the strict mode.
What would happen if we run those snnipets bellow?
'use strict';
x = 'This is just a test';
console.log(x);
y = 'This is just another test';
console.log(y);


The goal of this project is to automatically prepare a dataset for speech recognition by crawling videos on YouTube and selecting the high quality samples.
Within a day it is possible to collect 150 hours of transcribed speech and 700 hours within a week (single core ).
Listen the extracted samples by clicking 'Play' or click 'Next' to play the next (audio will start playing). To get more samples click on 'More samples' icon. Disclaimer: some utterances might contain obscene lexicon or disturbing material.
{{ samples['data'][0]['txt'] }}
{% for sample in samples['data'] %}
{% endfor %}
More samples:
This project has received funding from the European Union's Horizon 2020 research and innovation programme under the Marie Sklodowska-Curie grant agreement No 642667 (SECURE) and partial support from the German Research Foundation DFG under project CML (TRR 169).


TypeCache – The internal cache for database types¶
-
class
pgdb.
TypeCache
¶
New in version 5.0.
The internal TypeCache
of PyGreSQL is not part of the DB-API 2
standard, but is documented here in case you need full control and
understanding of the internal handling of database types.
The TypeCache is essentially a dictionary mapping PostgreSQL internal
type names and type OIDs to DB-API 2 “type codes” (which are also returned
as the type_code field of the Cursor.description
attribute).
These type codes are strings which are equal to the PostgreSQL internal type name, but they are also carrying additional information about the associated PostgreSQL type in the following attributes:
- oid – the OID of the type
- len – the internal size
- type –
'b'
= base,'c'
= composite, ...- category –
'A'
= Array,'B'
= Boolean, ...- delim – delimiter to be used when parsing arrays
- relid – the table OID for composite types
For details, see the PostgreSQL documentation on pg_type.
In addition to the dictionary methods, the TypeCache
provides
the following methods:
-
TypeCache.
get_fields
(typ)¶ Get the names and types of the fields of composite types
Parameters: typ (str or int) – PostgreSQL type name or OID of a composite type Returns: a list of pairs of field names and types Return type: list
-
TypeCache.
get_typecast
(typ)¶ Get the cast function for the given database type
Parameters: typ (str) – PostgreSQL type name or type code Returns: the typecast function for the specified type Return type: function or None
-
TypeCache.
set_typecast
(typ, cast)¶ Set a typecast function for the given database type(s)
Parameters: - typ (str or int) – PostgreSQL type name or type code, or list of such
- cast – the typecast function to be set for the specified type(s)
The typecast function must take one string object as argument and return a Python object into which the PostgreSQL type shall be casted. If the function takes another parameter named connection, then the current database connection will also be passed to the typecast function. This may sometimes be necessary to look up certain database settings.
-
TypeCache.
reset_typecast
([typ])¶ Reset the typecasts for the specified (or all) type(s) to their defaults
Parameters: typ (str, list or None) – PostgreSQL type name or type code, or list of such, or None to reset all typecast functions
-
TypeCache.
typecast
(value, typ)¶ Cast the given value according to the given database type
Parameters: typ (str) – PostgreSQL type name or type code Returns: the casted value
Note
Note that the TypeCache
is always bound to a database connection.
You can also get, set and reset typecast functions on a global level using
the functions pgdb.get_typecast()
, pgdb.set_typecast()
and
pgdb.reset_typecast()
. If you do this, the current database
connections will continue to use their already cached typecast functions
unless call the TypeCache.reset_typecast()
method on the
Connection.type_cache
objects of the running connections.


Get Started
Start by creating a new post one of the categories listed in _config.yml
. It will appear in the navigation on the left once recompiled. Or use the supplied script to make creating pages easier:
ruby bin/jekyll-page "Some Page Title" ref
Don’t Forget
- Add your own content to this page (i.e.
index.md
) and change thetitle
- Change
title
andsubtitle
defined inconfig.yml
for your site - Set the
baseurl
in_config.yml
for your repo if deploying to GitHub pages


Toggle navigation
Permits Summary
Powered by CivicData
Dashboard
Metrics / Trends
About
In the past
month
2 months
3 months
4 months
5 months
6 months
7 months
8 months
9 months
10 months
11 months
year
two years
three years
four years
five years
New Applications
Issued Permits
Construction Value
Permits by Type
(Last
year
)
Applications by Month
Recent Permit Applications
(Click to view detail)
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...


import yaml
import re
from collections import Counter
[docs]class Calculation:
"""
class describing a single VASP calculation
"""
def __init__( self, title, energy, stoichiometry ):
"""
Initialise a Calculation object
Args:
title (Str): The title string for this calculation.
energy (Float): Final energy in eV.
stoichiometry (Dict{Str:Int}): A dict desribing the calculation stoichiometry,
e.g. { 'Ti': 1, 'O': 2 }
Returns:
None
"""
self.title = title
self.energy = energy
self.stoichiometry = Counter( stoichiometry )
def __mul__( self, scaling ):
"""
"Multiply" this Calculation by a scaling factor.
Returns a new Calculation with the same title, but scaled energy and stoichiometry.
Args:
scaling (float): The scaling factor.
Returns:
(vasppy.Calculation): The scaled Calculation.
"""
new_calculation = Calculation( title=self.title, energy=self.energy*scaling, stoichiometry=self.scale_stoichiometry( scaling ) )
return new_calculation
def __truediv__( self, scaling ):
"""
Implements division by a scaling factor.
Returns a new Calculation with the same title, but scaled energy and stoichiometry.
Args:
scaling (float): The scaling factor.
Returns:
(vasppy.Calculation): The scaled Calculation.
"""
return self * ( 1 / scaling )
[docs] def scale_stoichiometry( self, scaling ):
"""
Scale the Calculation stoichiometry
Returns the stoichiometry, scaled by the argument scaling.
Args:
scaling (float): The scaling factor.
Returns:
(Counter(Str:Int)): The scaled stoichiometry as a Counter of label: stoichiometry pairs
"""
return { k:v*scaling for k,v in self.stoichiometry.items() }
[docs]def delta_E( reactants, products, check_balance=True ):
"""
Calculate the change in energy for reactants --> products.
Args:
reactants (list(vasppy.Calculation): A list of vasppy.Calculation objects. The initial state.
products (list(vasppy.Calculation): A list of vasppy.Calculation objects. The final state.
check_balance (bool:optional): Check that the reaction stoichiometry is balanced. Default: True.
Returns:
(float) The change in energy.
"""
if check_balance:
if delta_stoichiometry( reactants, products ) != {}:
raise ValueError( "reaction is not balanced: {}".format( delta_stoichiometry( reactants, products) ) )
return sum( [ r.energy for r in products ] ) - sum( [ r.energy for r in reactants ] )
[docs]def delta_stoichiometry( reactants, products ):
"""
Calculate the change in stoichiometry for reactants --> products.
Args:
reactants (list(vasppy.Calculation): A list of vasppy.Calculation objects. The initial state.
products (list(vasppy.Calculation): A list of vasppy.Calculation objects. The final state.
Returns:
(Counter): The change in stoichiometry.
"""
totals = Counter()
for r in reactants:
totals.update( ( r * -1.0 ).stoichiometry )
for p in products:
totals.update( p.stoichiometry )
to_return = {}
for c in totals:
if totals[c] != 0:
to_return[c] = totals[c]
return to_return
[docs]def energy_string_to_float( string ):
"""
Convert a string of a calculation energy, e.g. '-1.2345 eV' to a float.
Args:
string (str): The string to convert.
Return
(float)
"""
energy_re = re.compile( "(-?\d+\.\d+)" )
return float( energy_re.match( string ).group(0) )
[docs]def import_calculations_from_file( filename ):
"""
Construct a list of Calculation objects by reading a YAML file.
Each YAML document should include 'title', 'stoichiometry', and 'energy' fields. e.g.::
title: my calculation
stoichiometry:
- A: 1
- B: 2
energy: -0.1234 eV
Separate calculations should be distinct YAML documents, separated by `---`
Args:
filename (str): Name of the YAML file to read.
Returns:
(dict(vasppy.Calculation)): A dictionary of Calculation objects. For each Calculation object, the 'title' field from the YAML input is used as the dictionary key.
"""
calcs = {}
with open( filename, 'r' ) as stream:
docs = yaml.load_all( stream )
for d in docs:
stoichiometry = Counter()
for s in d['stoichiometry']:
stoichiometry.update( s )
calcs[ d['title'] ] = Calculation( title=d['title'],
stoichiometry=stoichiometry,
energy=energy_string_to_float( d['energy'] ) )
return calcs


Using a camera to take horizontal root pictures
byOne way to take root picture using a camera is to put the root system on a flat surface and take picture from above. This technique is fast and can be used with large root system.
Here is a couple of things to think of before taking such image.
- Choose the proper camera and lens (A)
- Always place the camera at the same distance of the roots (B)
- Use a dark, matt background (C)
- Place a scale on the background (D)
- Carefully separate the different roots
About the root system
This technique can be used with large root system as it is possible to separate the different root on the chosen surface. It is important to carefully spread the root in order to avoid overlaps and crossing as much as possible. They are a nightmare for most of the root image analysis softwares.An easy way to separate the different root is to place the root system in a thin film of water. The roots will tend to recover their initial shape and they are easier to untangle as they float. Be careful that using the camera flash on water will create many reflexion. It is recommended to either remove the water once the roots are spread of the use indirect light (e.g. a spotlight directed a the ceiling).
About the camera
Choose a camera with a high-resolution. If the resolution if too low, the number of pixels contained in the roots will be too low to extract any information. In order to increase the resolution, it is also possible to take the picture closer to the roots, but his will need an adequate lens.
About the background
Choose a background with a color different from the root (usually black is working well). Also be careful not the choose a “shiny” background, as it can create noise in the last image which can impedes the later analysis.
About the image scale
When you take a picture with a camera, its scale (pixels/cm) will change if the distance between the object and the camera changes. It is therefore important that an object of a known size is present in the picture to scale your image during the image processing steps.


{% set pagetitle = "How to check for
protein in urine" %}
{% set seq_length = 2 %}
{% set seq_position = 2 %}
{% set seq_llink = "How_to_check_for_protein_in_urine1.html" %} ## set rlink equal to next page href
{% set seq_rlink = "javascript:;" %} ## set llink equal to previous page href
{% extends "templates.jinja/base.page-with-sequence.html" %}
{% block title %} Hesperian - Pregnancy & Birth{% endblock %}
{% block id %}How_to_check_for_protein_in_urine2{% endblock %}
{% block content %}
Method 2:
Heat the mother's urine to check for protein.
Ask the mother to wash her genitals well and then urinate into a clean container. Then pour the urine into a test tube to within 2 centimeters (or one inch) of the top of the tube.
Heat the upper part of the tube over a small burner, low flame, or candle until the urine boils. (Keep turning the test tube or the glass will break.)
If the urine is clear, there is no protein in it. If the urine becomes cloudy and white, add a few drops of vinegar (2% acetic acid). If the cloudiness goes away, there is no protein in the urine. If it stays cloudy or gets whiter, there is protein in the urine.
If the woman has protein in her urine and high blood pressure, she has pre-eclampsia. When a woman has severe pre-eclampsia, the urine may become very cloudy, white, and thick.
{% endblock %} {% block footer %} {% endblock %}


Sorry, but your browser does not support SVG. Below is a list of alternate browsers and versions that support SVG and SVG-edit (from caniuse.com).
Try the latest version of Firefox, Chrome, Safari, Opera or Internet Explorer.


As in title it a specific problem with which I can't get through I've just found out about this fantastic addon and I'm overwhelmed by the posibilities it gives. I started to play with the options and themes
I founded I theme for me but I wanted a background from the other one
So Ive changed it with ease but Ive notticed something was different when Im using a theme with given background its not scrolling down only thing thats moving is battlelogs board and when Ive changed background to mine everything was moving just like the background was only on top of page and bottom of page where without background
And here is my question can I do it with just some options change or I need to learn come css skills
ORFK
Global Moderator
first you should read this topic and follow my introductions.
If I have to use css comands i have to write it in Change Background field or is it somwhere else ?
ORFK
Global Moderator
everything what i have described on the HowTo-Page is for the "Change Background" function, so yes, you have to write everything in this row/input field.


I'm trying to evaluate a daily energy saving in emoncms. I have 2 heat exchangers on my hot water system to recover waste heat from showering. (Called Recoh-vert's)
Theoretical energy required to heat water is :
Volume x delta temperature x Heat Capacity of water (4.187) [totalised over a day as KW]
from this I want to deduct actual power consumption of the Electrical hot water tank [totalised over a day as KW]
and I hope to be left with a figure that is the saving as a result of the heat recovery.
So with that as a theory, my setup is 2 EmonTx's one at the cold water input with a single temperature feed, and another with Hot water output temperature from the tank, ct&Vac for heating power and a pulse counter input from a water flow meter rated at 20 pulses per litre.
Assuming my other recent post can be answered about totalising daily water volume using KWh/d, I have 2 questions:
1. Can I multiply daily figures together? I need to multiply daily volume by daily delta temp (handily max&min functions in emoncms are daily) by a constant of 4.187, then subtract a daily power.
2. and as a final challenge, is there any way of using yesterday's value as opposed to today's? My hot water is set to turn on at 1am to heat he tank up on cheaper electricity overnight!
Re: Emoncms: Calculations on Daily Figures & Daily pulse count
So, having thought long and hard... (Sadly just as I'm about to fall asleep, these things come to me!):
1. Get the emonTX to send litres per second multiplied by 4187 (the HC of water in J, not KJ) - this makes the integer maths better at the litres/second is likely to be about 0.2 max, which isn't very integer friendly. 1J/s is a Watt
2. In emoncms:
a. subtract cold from hot
b. multiply by 0.01 (for deg C)
c. Max value it [the sensors take a few minutes to get an accurate reading of the liquid temperature in the pipe as they're thermally bonded to the outside of the pipe, so Max will get this to be close enough]
d. multiply by the (litres/second x HC) input
e. Log if required as Shower energy consumption (instantaneous in Watts)
f. deduct power (ct x volts) from tank [this will be a big +ve number when the shower is on, then when the power to the tank comes on at 1am, the number will be very big -ve
g. [hopefully] kwh/d function will give a small +ve number daily representing the saving in units per day after it has integrated the +ve and -ve numbers
3. if I set the timezone so that the daily counters roll over at 6am then that might allow yesterdays's water heating to be totalled with the electricity used by the tank in the small hours of the morning..?


Welcome to OmniCV Documentation¶
Introduction¶
A computer vision library for omnidirectional(360 degree) cameras. This package is divided into two parts:
Basic functions for inter-conversion of different types of mappings associated with omnidirectional cameras, virtual reality, and 360 ° videos, like cubemap, spherical projections, perspective projection, and equirectangular projection.
Software applications like ** 360-degree video viewer**, fisheye image generator with variable intrinsic properties, GUI to determine fisheye camera parameters.
Objectives of the OmniCV library¶
This library has been developed with the following objectives:
Quick and easy to use API to encourage and enhance the research in areas using omnidirectional cameras.
To support real-time applications.
Provide extensions in python as well as C++ as they are the languages used by researchers.
Provide ROS package to use in robotics research.
Output Gallery¶
Some interesting 360 ° video effects
Creating custom fisheye images
GUI to determine fisheye camera parameters
Horizontal and vertical orientation viewing mode support
Index to theory examples , application notes and ROS nodes¶
Installation guide¶
Python version¶
The python version of the package is available on PyPi and can be installed using pip.
pip3 install omnicv
To download it from source
Clone the repository
Run the setup.py file
git clone https://github.com/kaustubh-sadekar/OmniCV-Lib.git
cd OmniCV/
sudo python3 setup.py install
C++ version¶
To install the C++ extensions follow these steps.
Clone the repository
cd to build directory
build the files using CMake
Include imgMap.cpp, utils.hpp in the CMakeLists.txt.
git clone https://github.com/kaustubh-sadekar/OmniCV-Lib.git
cd OmniCV/build
cmake CMakeLists.txt
make
cd ..
run the built code (here main_code.cpp)
./build/main_code
Running The Tests¶
After installing the library, run the following commands to run the non visual and visual tests respectively.
cd OmniCV/tests/
# Non visual tests
bash test.sh 0
# Visual tests
bash test.sh 1
NOTE : Images labeled under `labeled to reuse` have been used for the experiments.